Name: series-workflowt2rxz Phase: Failed StartedAt: 2026-06-23 09:26:32 +0000 UTC FinishedAt: 2026-06-23 09:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2rxz[0] Phase: Succeeded StartedAt: 2026-06-23 09:26:32 +0000 UTC FinishedAt: 2026-06-23 09:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2rxz[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 09:26:32 +0000 UTC FinishedAt: 2026-06-23 09:44:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGl0cyBjYWxsZXJzIGluIEtWTSYjMzk7cyBTRVYtU05QIGFuZCBURFggaW1wbGVtZW50YXRpb25zIHRvIHN1cHBvcnQgYWNxdWlyaW5nIGEgd3JpdGUgcmVmZXJlbmNlIGZvciBDUFVJRCBwYWdlcyBhbmQgdG8gYWRkIGEgTlVMTCBjaGVjayBmb3IgdGhlIHNvdXJjZSBidWZmZXIuIFNFVi1TTlAgYW5kIFREWCBhcmUgaGFyZHdhcmUtYXNzaXN0ZWQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgQ1BVIHN1cHBvcnQgKEFNRCBTRVYtU05QIG9yIEludGVsIFREWCkuIFRoZXkgYXJlIG5vdCBlbXVsYXRlZCBpbiBzb2Z0d2FyZSBieSBRRU1VIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugd2hlcmUgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChgc25wX2xhdW5jaF91cGRhdGVgLCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCwgYW5kIGBrdm1fZ21lbV9wb3B1bGF0ZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlbSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmMwNzA2MTdkMWM0NmZmM2ViMTczYjQ0MzQ1MjUzMjQ2NDVkOWM3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA5OjQwOjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA2YzZhNmQ2NjNlMjk2My4uNWZkMDhkMzRiZTNmOGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMjM2MCw4ICYjNDM7MjM2MCw4IEBAIHN0YXRpYyBpbnQgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbiBcbiBcdFx0bWVtY3B5KGRzdF92YWRkciwgc3JjX3ZhZGRyLCBQQUdFX1NJWkUpO1xuIFxuLVx0XHRrdW5tYXBfbG9jYWwoc3JjX3ZhZGRyKTtcbiBcdFx0a3VubWFwX2xvY2FsKGRzdF92YWRkcik7XG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwoc3JjX3ZhZGRyKTtcbiBcdH1cbiBcbiBcdHJldCA9IHJtcF9tYWtlX3ByaXZhdGUocGZuLCBnZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBHX0xFVkVMXzRLLFxuQEAgLTI0MTUsNiAmIzQzOzI0MTUsNyBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiBcdGxvbmcgbnBhZ2VzLCBjb3VudDtcbiBcdHZvaWQgX191c2VyICpzcmM7XG4mIzQzO1x0aW50IHdyaXRlO1xuIFxuIFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi1cdTAwM2VzbnBfY29udGV4dClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMjQzOCw2ICYjNDM7MjQzOSwxMyBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIFx0aWYgKCFQQUdFX0FMSUdORUQoc3JjKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWtlIHN1cmUgdXNlci1tb2RlIGRpZCBub3QgcGFzcyBOVUxMIGFzIHNyYyB3aXRoXG4mIzQzO1x0ICogdHlwZSAhPSBLVk1fU0VWX1NOUF9QQUdFX1RZUEVfWkVSTy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3JjID09IE5VTEwgXHUwMDI2XHUwMDI2IHBhcmFtcy50eXBlICE9IEtWTV9TRVZfU05QX1BBR0VfVFlQRV9aRVJPKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0bnBhZ2VzID0gcGFyYW1zLmxlbiAvIFBBR0VfU0laRTtcbiBcbiBcdC8qXG5AQCAtMjQ2OCw3ICYjNDM7MjQ3NiwxMCBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIFx0c2V2X3BvcHVsYXRlX2FyZ3Muc2V2X2ZkID0gYXJncC1cdTAwM2VzZXZfZmQ7XG4gXHRzZXZfcG9wdWxhdGVfYXJncy50eXBlID0gcGFyYW1zLnR5cGU7XG4gXG4tXHRjb3VudCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgcGFyYW1zLmdmbl9zdGFydCwgc3JjLCBucGFnZXMsXG4mIzQzO1x0LyogQWNxdWlyZSBhIHdyaXRlLXJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYXMga2VybmVsIG1pZ2h0IHdyaXRlIHRvIGl0ICovXG4mIzQzO1x0d3JpdGUgPSBwYXJhbXMudHlwZSA9PSBLVk1fU0VWX1NOUF9QQUdFX1RZUEVfQ1BVSUQ7XG4mIzQzO1xuJiM0MztcdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcywgd3JpdGUsXG4gXHRcdFx0XHQgIHNldl9nbWVtX3Bvc3RfcG9wdWxhdGUsIFx1MDAyNnNldl9wb3B1bGF0ZV9hcmdzKTtcbiBcdGlmIChjb3VudCBcdTAwM2MgMCkge1xuIFx0XHRhcmdwLVx1MDAzZWVycm9yID0gc2V2X3BvcHVsYXRlX2FyZ3MuZndfZXJyb3I7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IDA0Y2UzMjFlYmRmMzk2Li40NmIxZDg0ZmRkZjJhYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC0zMTg1LDcgJiM0MzszMTg1LDcgQEAgc3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNcbiBcdFx0fTtcbiBcdFx0Z21lbV9yZXQgPSBrdm1fZ21lbV9wb3B1bGF0ZShrdm0sIGdwYV90b19nZm4ocmVnaW9uLmdwYSksXG4gXHRcdFx0XHRcdCAgICAgdTY0X3RvX3VzZXJfcHRyKHJlZ2lvbi5zb3VyY2VfYWRkciksXG4tXHRcdFx0XHRcdCAgICAgMSwgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXHUwMDI2YXJnKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgMSwgMCwgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXHUwMDI2YXJnKTtcbiBcdFx0aWYgKGdtZW1fcmV0IFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZ21lbV9yZXQ7XG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCA0YzE0YWVlMWZiMDYzMy4uNjIyYzBiMDRkOGMzMWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODEsNiAmIzQzOzI1ODEsOCBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZFxuICAqICAgICAgIChwYXNzZWQgdG8gQHBvc3RfcG9wdWxhdGUsIGFuZCBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvblxuICAqICAgICAgIGlmIG5vdCBOVUxMKS4gTXVzdCBiZSBwYWdlLWFsaWduZWQuXG4gICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkgZnJvbSB1c2Vyc3BhY2UtYnVmZmVyXG4mIzQzOyAqIEB3cml0ZTogdXNlci1zcGFjZSBwcm92aWRlZCBidWZmZXIgbXVzdCBiZSB3cml0YWJsZS4gVGhlIGZ1bmN0aW9uXG4mIzQzOyAqXHQgd2lsbCBhY3F1aXJlIGEgd3JpdGFibGUgcmVmZXJlbmNlIHdoZW4gc2V0IHRvIDEuXG4gICogQHBvc3RfcG9wdWxhdGU6IGNhbGxiYWNrIHRvIGlzc3VlIGZvciBlYWNoIGdtZW0gcGFnZSB0aGF0IGJhY2tzIHRoZSBHUEFcbiAgKiAgICAgICAgICAgICAgICAgcmFuZ2VcbiAgKiBAb3BhcXVlOiBvcGFxdWUgZGF0YSB0byBwYXNzIHRvIEBwb3N0X3BvcHVsYXRlIGNhbGxiYWNrXG5AQCAtMjU5Nyw3ICYjNDM7MjU5OSw3IEBAIHR5cGVkZWYgaW50ICgqa3ZtX2dtZW1fcG9wdWxhdGVfY2IpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvcGFxdWUpO1xuIFxuIGxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHZvaWQgX191c2VyICpzcmMsIGxvbmcgbnBhZ2VzLFxuLVx0XHQgICAgICAga3ZtX2dtZW1fcG9wdWxhdGVfY2IgcG9zdF9wb3B1bGF0ZSwgdm9pZCAqb3BhcXVlKTtcbiYjNDM7XHRcdCAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCA2OWM5ZDZkNTQ2YjI4Ny4uN2EyNDVhNDAyYTFiMjIgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtODU5LDcgJiM0Mzs4NTksNyBAQCBzdGF0aWMgbG9uZyBfX2t2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiB9XG4gXG4gbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZyBucGFnZXMsXG4tXHRcdCAgICAgICBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXG4mIzQzO1x0XHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbiBcdGludCByZXQgPSAwO1xuQEAgLTg5Myw3ICYjNDM7ODkzLDcgQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZ1xuIFx0XHRpZiAoc3JjKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyB1YWRkciA9ICh1bnNpZ25lZCBsb25nKXNyYyAmIzQzOyBpICogUEFHRV9TSVpFO1xuIFxuLVx0XHRcdHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3QodWFkZHIsIDEsIDAsIFx1MDAyNnNyY19wYWdlKTtcbiYjNDM7XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgd3JpdGUsIFx1MDAyNnNyY19wYWdlKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0aWYgKHJldCAhPSAxKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX3BvcHVsYXRlYCBhbmQgaXRzIGNhbGxlcnMgaW4gS1ZNJiMzOTtzIFNFVi1TTlAgYW5kIFREWCBpbXBsZW1lbnRhdGlvbnMgdG8gc3VwcG9ydCBhY3F1aXJpbmcgYSB3cml0ZSByZWZlcmVuY2UgZm9yIENQVUlEIHBhZ2VzIGFuZCB0byBhZGQgYSBOVUxMIGNoZWNrIGZvciB0aGUgc291cmNlIGJ1ZmZlci4gU0VWLVNOUCBhbmQgVERYIGFyZSBoYXJkd2FyZS1hc3Npc3RlZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBDUFUgc3VwcG9ydCAoQU1EIFNFVi1TTlAgb3IgSW50ZWwgVERYKS4gVGhleSBhcmUgbm90IGVtdWxhdGVkIGluIHNvZnR3YXJlIGJ5IFFFTVUgYW5kIGFyZSBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSB3aGVyZSBzeXprYWxsZXIgdHlwaWNhbGx5IHJ1bnMuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKGBzbnBfbGF1bmNoX3VwZGF0ZWAsIGB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb25gLCBhbmQgYGt2bV9nbWVtX3BvcHVsYXRlYCB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSB0aGVtKSBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCwgdGhpcyBwYXRjaCBzaG91bGQgbm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjMDcwNjE3ZDFjNDZmZjNlYjE3M2I0NDM0NTI1MzI0NjQ1ZDljNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAwOTo0MDozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDZjNmE2ZDY2M2UyOTYzLi41ZmQwOGQzNGJlM2Y4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC0yMzYwLDggJiM0MzsyMzYwLDggQEAgc3RhdGljIGludCBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLAogCiAJCW1lbWNweShkc3RfdmFkZHIsIHNyY192YWRkciwgUEFHRV9TSVpFKTsKIAotCQlrdW5tYXBfbG9jYWwoc3JjX3ZhZGRyKTsKIAkJa3VubWFwX2xvY2FsKGRzdF92YWRkcik7CiYjNDM7CQlrdW5tYXBfbG9jYWwoc3JjX3ZhZGRyKTsKIAl9CiAKIAlyZXQgPSBybXBfbWFrZV9wcml2YXRlKHBmbiwgZ2ZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBHX0xFVkVMXzRLLApAQCAtMjQxNSw2ICYjNDM7MjQxNSw3IEBAIHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApCiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKIAlsb25nIG5wYWdlcywgY291bnQ7CiAJdm9pZCBfX3VzZXIgKnNyYzsKJiM0MzsJaW50IHdyaXRlOwogCiAJaWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi0mZ3Q7c25wX2NvbnRleHQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjQzOCw2ICYjNDM7MjQzOSwxMyBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKQogCWlmICghUEFHRV9BTElHTkVEKHNyYykpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CS8qCiYjNDM7CSAqIE1ha2Ugc3VyZSB1c2VyLW1vZGUgZGlkIG5vdCBwYXNzIE5VTEwgYXMgc3JjIHdpdGgKJiM0MzsJICogdHlwZSAhPSBLVk1fU0VWX1NOUF9QQUdFX1RZUEVfWkVSTy4KJiM0MzsJICovCiYjNDM7CWlmIChzcmMgPT0gTlVMTCAmYW1wOyZhbXA7IHBhcmFtcy50eXBlICE9IEtWTV9TRVZfU05QX1BBR0VfVFlQRV9aRVJPKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJbnBhZ2VzID0gcGFyYW1zLmxlbiAvIFBBR0VfU0laRTsKIAogCS8qCkBAIC0yNDY4LDcgJiM0MzsyNDc2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApCiAJc2V2X3BvcHVsYXRlX2FyZ3Muc2V2X2ZkID0gYXJncC0mZ3Q7c2V2X2ZkOwogCXNldl9wb3B1bGF0ZV9hcmdzLnR5cGUgPSBwYXJhbXMudHlwZTsKIAotCWNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcywKJiM0MzsJLyogQWNxdWlyZSBhIHdyaXRlLXJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYXMga2VybmVsIG1pZ2h0IHdyaXRlIHRvIGl0ICovCiYjNDM7CXdyaXRlID0gcGFyYW1zLnR5cGUgPT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX0NQVUlEOwomIzQzOwomIzQzOwljb3VudCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgcGFyYW1zLmdmbl9zdGFydCwgc3JjLCBucGFnZXMsIHdyaXRlLAogCQkJCSAgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZSwgJmFtcDtzZXZfcG9wdWxhdGVfYXJncyk7CiAJaWYgKGNvdW50ICZsdDsgMCkgewogCQlhcmdwLSZndDtlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggMDRjZTMyMWViZGYzOTYuLjQ2YjFkODRmZGRmMmFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTMxODUsNyAmIzQzOzMxODUsNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqYwogCQl9OwogCQlnbWVtX3JldCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgZ3BhX3RvX2dmbihyZWdpb24uZ3BhKSwKIAkJCQkJICAgICB1NjRfdG9fdXNlcl9wdHIocmVnaW9uLnNvdXJjZV9hZGRyKSwKLQkJCQkJICAgICAxLCB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlLCAmYW1wO2FyZyk7CiYjNDM7CQkJCQkgICAgIDEsIDAsIHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUsICZhbXA7YXJnKTsKIAkJaWYgKGdtZW1fcmV0ICZsdDsgMCkgewogCQkJcmV0ID0gZ21lbV9yZXQ7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCA0YzE0YWVlMWZiMDYzMy4uNjIyYzBiMDRkOGMzMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI1ODEsNiAmIzQzOzI1ODEsOCBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZAogICogICAgICAgKHBhc3NlZCB0byBAcG9zdF9wb3B1bGF0ZSwgYW5kIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uCiAgKiAgICAgICBpZiBub3QgTlVMTCkuIE11c3QgYmUgcGFnZS1hbGlnbmVkLgogICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkgZnJvbSB1c2Vyc3BhY2UtYnVmZmVyCiYjNDM7ICogQHdyaXRlOiB1c2VyLXNwYWNlIHByb3ZpZGVkIGJ1ZmZlciBtdXN0IGJlIHdyaXRhYmxlLiBUaGUgZnVuY3Rpb24KJiM0MzsgKgkgd2lsbCBhY3F1aXJlIGEgd3JpdGFibGUgcmVmZXJlbmNlIHdoZW4gc2V0IHRvIDEuCiAgKiBAcG9zdF9wb3B1bGF0ZTogY2FsbGJhY2sgdG8gaXNzdWUgZm9yIGVhY2ggZ21lbSBwYWdlIHRoYXQgYmFja3MgdGhlIEdQQQogICogICAgICAgICAgICAgICAgIHJhbmdlCiAgKiBAb3BhcXVlOiBvcGFxdWUgZGF0YSB0byBwYXNzIHRvIEBwb3N0X3BvcHVsYXRlIGNhbGxiYWNrCkBAIC0yNTk3LDcgJiM0MzsyNTk5LDcgQEAgdHlwZWRlZiBpbnQgKCprdm1fZ21lbV9wb3B1bGF0ZV9jYikoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sCiAJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvcGFxdWUpOwogCiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcywKLQkJICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7CiYjNDM7CQkgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IDY5YzlkNmQ1NDZiMjg3Li43YTI0NWE0MDJhMWIyMiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC04NTksNyAmIzQzOzg1OSw3IEBAIHN0YXRpYyBsb25nIF9fa3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogfQogCiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcywKLQkJICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSkKJiM0MzsJCSAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSkKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCByZXQgPSAwOwpAQCAtODkzLDcgJiM0Mzs4OTMsNyBAQCBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nCiAJCWlmIChzcmMpIHsKIAkJCXVuc2lnbmVkIGxvbmcgdWFkZHIgPSAodW5zaWduZWQgbG9uZylzcmMgJiM0MzsgaSAqIFBBR0VfU0laRTsKIAotCQkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgMCwgJmFtcDtzcmNfcGFnZSk7CiYjNDM7CQkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgd3JpdGUsICZhbXA7c3JjX3BhZ2UpOwogCQkJaWYgKHJldCAmbHQ7IDApCiAJCQkJYnJlYWs7CiAJCQlpZiAocmV0ICE9IDEpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCB3ZSBzaG91bGQgY29uc2lkZXIgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgc2Vuc2l0aXZlIGFyZWFzLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLCBhbmQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGF0JiMzOTtzIEtWTSBTRVYtU05QLCBURFggY29kZSwgYW5kIGd1ZXN0IG1lbW9yeSBtYW5hZ2VtZW50LiBCaWcgcmVkIGZsYWcgdGhlcmUuCgpUaGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBhIGB3cml0ZWAgcGFyYW1ldGVyIHRvIGBrdm1fZ21lbV9wb3B1bGF0ZWAsIHdoaWNoIGlzIHRoZW4gdXNlZCB3aXRoaW4gYHNucF9sYXVuY2hfdXBkYXRlYCB0byBnZXQgYSB3cml0ZSByZWZlcmVuY2UgZm9yIENQVUlEIHBhZ2VzLiBUaGVyZSYjMzk7cyBhbHNvIGEgbmV3IGBOVUxMYCBjaGVjayBvbiBgc3JjYCBpbiB0aGUgc2FtZSBmdW5jdGlvbiB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbi4gUGx1cywgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBrdW5tYXBfbG9jYWxgIG9yZGVyIGluIGBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlYC4gRGVmaW5pdGVseSBmdW5jdGlvbmFsaXR5IHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gYXR0YWNrLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHJlYWNoYWJpbGl0eS4gSXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqYWNjZXNzaWJsZSogaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQ/IEdpdmVuIHRoZSBjb2RlIGNoYW5nZXMsIGl0IGFwcGVhcnMgdG8gYmUgS1ZNIFNFVi1TTlAgYW5kIFREWCByZWxhdGVkLCBidXQgYGt2bV9nbWVtX3BvcHVsYXRlYCBpcyBwYXJ0IG9mIGd1ZXN0X21lbWZkIHdoaWNoIGlzIHVzZWQgYnkgS1ZNLiBUaGF0JiMzOTtzIHByb21pc2luZywgc2luY2UgS1ZNIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgaW4gU3l6a2FsbGVyLiBFeGNlbGxlbnQuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciBTRVYtU05QIGFuZCBURFggbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgaG93IHdlIGdldCB0byBga3ZtX2dtZW1fcG9wdWxhdGVgLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgc25wX2xhdW5jaF91cGRhdGVgIGFuZCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYC4gYHNucF9sYXVuY2hfdXBkYXRlYCByZXF1aXJlcyB0aGUgYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgY2hlY2suIE9rYXkuIFdoYXQgYWJvdXQgYGt2bV9nbWVtX3BvcHVsYXRlYCBpdHNlbGY/IEl0JiMzOTtzIGV4cG9ydGVkLCBzbyB0aGF0IG1ha2VzIHRoaW5ncyBhIGJpdCBlYXNpZXIuIEl0JiMzOTtzIHVzZWQgYnkgYm90aCBTRVYgYW5kIFREWCwgdG9vLgoKSSBzaG91bGQgYWxzbyBjaGVjayBmb3Igb3RoZXIsIGxlc3Mgb2J2aW91cywgdXNlcnMgb2YgYGt2bV9nbWVtX3BvcHVsYXRlYC4gV2UgY2FuJiMzOTt0IGJlIHRvbyBjYXJlZnVsLiBPdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgZnV6emluZyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ21lbV9wb3B1bGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI0MTA9c3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0ODEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0ODI6XHRjb3VudCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgcGFyYW1zLmdmbl9zdGFydCwgc3JjLCBucGFnZXMsIHdyaXRlLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDgzLVx0XHRcdFx0ICBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlLCBcdTAwMjZzZXZfcG9wdWxhdGVfYXJncyk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDg1LVx0XHRhcmdwLVx1MDAzZWVycm9yID0gc2V2X3BvcHVsYXRlX2FyZ3MuZndfZXJyb3I7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0ODY6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBrdm1fZ21lbV9wb3B1bGF0ZSBmYWlsZWQsIHJldCAlbGQgKGZ3X2Vycm9yICVkKVxcblwmIzM0OyxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4Ny1cdFx0XHQgX19mdW5jX18sIGNvdW50LCBhcmdwLVx1MDAzZWVycm9yKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxNDU9c3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxODUtXHRcdH07XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMxODY6XHRcdGdtZW1fcmV0ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBncGFfdG9fZ2ZuKHJlZ2lvbi5ncGEpLFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTg3LVx0XHRcdFx0XHQgICAgIHU2NF90b191c2VyX3B0cihyZWdpb24uc291cmNlX2FkZHIpLFxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTcxPWludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTc1LS8qKlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1NzY6ICoga3ZtX2dtZW1fcG9wdWxhdGUoKSAtIFBvcHVsYXRlL3ByZXBhcmUgYSBHUEEgcmFuZ2Ugd2l0aCBndWVzdCBkYXRhXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU3Ny0gKlxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk3LSAqL1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1OTg6dHlwZWRlZiBpbnQgKCprdm1fZ21lbV9wb3B1bGF0ZV9jYikoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5OS1cdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb3BhcXVlKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjAwLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MDE6bG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZyBucGFnZXMsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMjpcdFx0ICAgICAgIGludCB3cml0ZSwga3ZtX2dtZW1fcG9wdWxhdGVfY2IgcG9zdF9wb3B1bGF0ZSwgdm9pZCAqb3BhcXVlKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjAzLSNlbmRpZlxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9ODIwPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ21lbV9nZXRfcGZuKTtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgyMy1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODI0OnN0YXRpYyBsb25nIF9fa3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjUtXHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3QgcGFnZSAqc3JjX3BhZ2UsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjgyNjpcdFx0XHRcdGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtODI3LXtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTg2MC1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODYxOmxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydF9nZm4sIHZvaWQgX191c2VyICpzcmMsIGxvbmcgbnBhZ2VzLFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo4NjI6XHRcdCAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtODYzLXtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTkwNC1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6OTA1Olx0XHRyZXQgPSBfX2t2bV9nbWVtX3BvcHVsYXRlKGt2bSwgc2xvdCwgZmlsZSwgc3RhcnRfZ2ZuICYjNDM7IGksIHNyY19wYWdlLFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDYtXHRcdFx0XHRcdCAgcG9zdF9wb3B1bGF0ZSwgb3BhcXVlKTtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTkxNi19XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxNzpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fcG9wdWxhdGUpO1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MTgtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyBga3ZtX2dtZW1fcG9wdWxhdGVgKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGl0cyBzdXJyb3VuZGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTRVYgYW5kIFREWCBjb250ZXh0cy4gU2luY2UgU0VWIGFuZCBURFggYXJlIGhhcmR3YXJlLWxldmVsIGZlYXR1cmVzLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGNhbiB3ZSByZWFsaXN0aWNhbGx5IGZ1enogdGhlc2U/IFN5emthbGxlciwgb2YgY291cnNlLCBpcyBhIHBvd2VyZnVsIHRvb2wgZm9yIEtWTSBmdXp6aW5nLCBidXQgbXkgaW1tZWRpYXRlIHdvcnJ5IGlzIGFib3V0IHRoZSBlbnZpcm9ubWVudHMgaXQgdHlwaWNhbGx5IHJ1bnMgaW4uIE1vc3QgaW5zdGFuY2VzIEkmIzM5O20gYXdhcmUgb2YgZG9uJiMzOTt0IGhhdmUgU0VWIG9yIFREWCBlbmFibGVkLCBlc3BlY2lhbGx5IHdpdGhpbiBuZXN0ZWQgZ3Vlc3RzIG9uIGEgcGxhdGZvcm0gbGlrZSBHQ0UuIEhtbSwgb3IgKmRvKiB0aGV5PyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LCBqdXN0IGluIGNhc2UuCgpCdXQsIGlmIHdlJiMzOTtyZSBvbmx5IGxvb2tpbmcgYXQgU0VWIGFuZCBURFgtc3BlY2lmaWMgY29kZSwgdGhlIHJlYWNoYWJpbGl0eSBiZWNvbWVzIGEgcmVhbCBjb25jZXJuLiBIb3dldmVyLCBsZXQgbWUgYmFjayB1cCBhIHN0ZXAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb2Rl4oCZcyBsb2NhdGlvbi4gUmlnaHQsIGBrdm1fZ21lbV9wb3B1bGF0ZWAgaXRzZWxmIGlzIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gSXMgaXQgZXZlbiByZWFjaGFibGUgd2l0aG91dCBTRVYgb3IgVERYPyBUaGUgZ3JlcCBvdXRwdXQgc2hvdWxkIGJlIGRlZmluaXRpdmUgaGVyZS4gWWVwLCBpdCBhcHBlYXJzIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AuIFNvLCBpdCBsb29rcyBsaWtlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgdG8gdGhvc2UgdHdvIGhhcmR3YXJlIGZlYXR1cmVzLgoKV2FpdCBhIHNlY29uZOKApiB3YXNuJiMzOTt0IHRoZXJlIHNvbWUgcmVjZW50IGRpc2N1c3Npb24gYXJvdW5kIHN5emthbGxlciYjMzk7cyBTRVYgY2FwYWJpbGl0aWVzPyBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBhYm91dCB0aGF0LiBMZXQmIzM5O3MgbWFrZSBzdXJlLCBhcyBpdCBjb3VsZCBjaGFuZ2UgdGhlIGVudGlyZSBjYWxjdWx1cyBoZXJlLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLiBQZXJoYXBzIHRoZXJlIGFyZSBzb21lIHNwZWNpZmljIGNvbmZpZ3MgZm9yIFNFViBvciBURFggc3VwcG9ydC4gSSBuZWVkIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYWJvdXQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhdCBhbGwgdnVsbmVyYWJsZSB0byBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipDaGVja2luZyB0aGUgVERYIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IGEgZmVlbGluZyBzb21ldGhpbmcgbWlnaHQgYmUgb2ZmLCBvciBtYXliZSBJJiMzOTttIGp1c3QgYmVpbmcgb3Zlcmx5IGNhdXRpb3VzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBURFggY29uZmlndXJhdGlvbi4gVGhlcmUmIzM5O3MgYWx3YXlzIGEgY3JpdGljYWwgY29tcG9uZW50IHNvbWV3aGVyZSwgYW5kIGl0JiMzOTtzIGJlc3QgdG8gYmUgcHJvYWN0aXZlIHRoYW4gdG8gc3BlbmQgYW4gaG91ciB0cm91Ymxlc2hvb3RpbmcgYSBwcm9ibGVtIHRoYXQgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQuIFRpbWUgdG8gb3BlbiB0aGF0IHVwIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBhcyBpdCBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTF9URFgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2g6IFNFViAmYW1wOyBURFggQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIFNFViBhbmQgVERYLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5czogY2FuIHRoaXMgYmUgZnV6emVkPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gVGhlIHRleHQgbWVudGlvbnMgJiMzNDtjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsJiMzNDsgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBoYXJkd2FyZS4gVGhpcyBpcyBrZXksIGFzIFNFViBhbmQgVERYIHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIGtub3csIGRlZmluaXRpdmVseSwgdGhhdCBRRU1VIGNhbiYjMzk7dCAqZnVsbHkqIGVtdWxhdGUgU0VWIG9yIFREWCwgYmVjYXVzZSB0aG9zZSByZWx5IG9uIHRoZSBBTUQgUFNQIGFuZCBJbnRlbCBURFgtc3BlY2lmaWMgaGFyZHdhcmUgcmVzcGVjdGl2ZWx5LgoKQnV0IGhvbGQgb24uLi4gY2FuIEtWTSBzb21laG93IGJlIGZ1enplZCBmb3IgU0VWIHdpdGhvdXQgbmVlZGluZyB0aGUgYWN0dWFsIHNpbGljb24/IERpZ2dpbmcgZGVlcGVyLCBJIHJlbWVtYmVyIHRoYXQgYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgaXMgYW4gaW1wb3J0YW50IGNoZWNrLiBJdCBleHBsaWNpdGx5IHRlc3RzIGlmIGEgZ3Vlc3QgaXMgYW4gU05QIGd1ZXN0LiBBbmQgaXQgYWxzbyBpbmRpY2F0ZXMgdGhhdCBpdCByZXF1aXJlcyB0aGUgaG9zdCB0byBzdXBwb3J0IFNOUCBhbmQgdGhlIGd1ZXN0IHRvIGJlIGxhdW5jaGVkIGFzIGFuIFNOUCBndWVzdC4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaGVyZSBpcyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYHNldl9zbnBfZ3Vlc3RgIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGZ1enppbmcgYXBwcm9hY2ggaXMgdmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfc25wX2d1ZXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTM3PXN0YXRpYyBib29sIHNldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDItXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0MzpzdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ0LXtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ1LVx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3Nldl9sb2NrX2hlbGQoa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQ2Olx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0Ny19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMDY9c3RhdGljIGJvb2wgc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTAtXHRyZXR1cm4gKHNldi1cdTAwM2V2bXNhX2ZlYXR1cmVzIFx1MDAyNiBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQykgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIxMTpcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFzZXZfc25wX2d1ZXN0KGt2bSkpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI2ND1zdGF0aWMgaW50IHNucF9sYXVuY2hfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjcwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjcxOlx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNzItXHRcdHJldHVybiAtRU5PVFRZO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQxMD1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQxOS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQyMDpcdGlmICghc2V2X3NucF9ndWVzdChrdm0pIHx8ICFzZXYtXHUwMDNlc25wX2NvbnRleHQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjEtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjU1OT1zdGF0aWMgaW50IHNucF9sYXVuY2hfZmluaXNoKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjU2Ni1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjU2NzpcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTY4LVx0XHRyZXR1cm4gLUVOT1RUWTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2MzU9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzNi17XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2Mzc6XHRpZiAoa3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMgfHwgIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzOC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ1PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY2OS1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjcwOlx0aWYgKHNldl9zbnBfZ3Vlc3Qoa3ZtKSBcdTAwMjZcdTAwMjYgc2V2X2NtZC5pZCBcdTAwM2MgS1ZNX1NFVl9TTlBfTEFVTkNIX1NUQVJUKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjcxLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk2OD12b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMDgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwMDk6XHRpZiAoc2V2X3NucF9ndWVzdChrdm0pKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMTAtXHRcdHNucF9ndWVzdF9yZXFfY2xlYW51cChrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzMwOD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjAtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzMyMTpcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjItXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM0MjQ9c3RhdGljIGludCBzZXZfZXNfdmFsaWRhdGVfdm1nZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MTAtXHRjYXNlIFNWTV9WTUdFWElUX0FQX0NSRUFUSU9OOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTExOlx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MTItXHRcdFx0Z290byB2bWdleGl0X2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MjQtXHRjYXNlIFNWTV9WTUdFWElUX1BTQzpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzUyNTpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpIHx8ICFrdm1fZ2hjYl9zd19zY3JhdGNoX2lzX3ZhbGlkKHN2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MjYtXHRcdFx0Z290byB2bWdleGl0X2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MjktXHRjYXNlIFNWTV9WTUdFWElUX0VYVF9HVUVTVF9SRVFVRVNUOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTMwOlx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgfHxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzUzMS1cdFx0ICAgICFQQUdFX0FMSUdORUQoY29udHJvbC1cdTAwM2VleGl0X2luZm9fMSkgfHxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM2MDU9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM2MTgtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzYxOTpcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM2MjAtXHRcdHU2NCBwZm4gPSBfX3BhKHN2bS1cdTAwM2VzZXZfZXMudm1zYSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjI0PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIzMS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIzMjpcdGlmICghaXNfc2V2X3NucF9ndWVzdChcdTAwMjZzdm0tXHUwMDNldmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMzMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI5Mz1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjk5LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MzAwOlx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzAxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQzNTU9c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQzNC1cdGNhc2UgR0hDQl9NU1JfUFJFRl9HUEFfUkVROlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDM1Olx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzYtXHRcdFx0Z290byBvdXRfdGVybWluYXRlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ0NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ0NjpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQ3LVx0XHRcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NjAtXHRjYXNlIEdIQ0JfTVNSX1BTQ19SRVE6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ0NjE6XHRcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ2Mi1cdFx0XHRnb3RvIG91dF90ZXJtaW5hdGU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NDk5PWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDUzMy1cdC8qIFNFVi1TTlAgZ3Vlc3QgcmVxdWlyZXMgdGhhdCB0aGUgR0hDQiBHUEEgbXVzdCBiZSByZWdpc3RlcmVkICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1MzQ6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcdTAwMjZcdTAwMjYgIWdoY2JfZ3BhX2lzX3JlZ2lzdGVyZWQoc3ZtLCBnaGNiX2dwYSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDUzNS1cdFx0dmNwdV91bmltcGwoXHUwMDI2c3ZtLVx1MDAzZXZjcHUsIFwmIzM0O3ZtZ2V4aXQ6IEdIQ0IgR1BBIFslI2xseF0gaXMgbm90IHJlZ2lzdGVyZWQuXFxuXCYjMzQ7LCBnaGNiX2dwYSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00Nzg4PXZvaWQgc2V2X2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBpbml0X2V2ZW50KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDgwMC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDgwMTpcdGlmIChpbml0X2V2ZW50IFx1MDAyNlx1MDAyNiBpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODAyLVx0XHRzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDgzMz12b2lkIHNldl9lc19wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHNldl9lc19zYXZlX2FyZWEgKmhvc3RzYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NzMtXHQgICAgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfREVCVUdfU1dBUCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ4NzQ6XHQgICAgIGlzX3Nldl9zbnBfZ3Vlc3QoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpKSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODc1LVx0XHRob3N0c2EtXHUwMDNlZHIwX2FkZHJfbWFzayA9IGFtZF9nZXRfZHJfYWRkcl9tYXNrKDApO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTEwNT1pbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMTItXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUxMTM6XHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTExNC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MjE1PWludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyMjA6XHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIyMS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MjMwPXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjUwLVx0LyogQ2hlY2sgaWYgdGhlIFNFViBwb2xpY3kgYWxsb3dzIGRlYnVnZ2luZyAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjUxOlx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTI1Mi1cdFx0aWYgKCEoc2V2LVx1MDAzZXBvbGljeSBcdTAwMjYgU05QX1BPTElDWV9NQVNLX0RFQlVHKSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyNTgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyNTk6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjYwLVx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2RiZyBkYmcgPSB7MH07XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0xOTY1PXN0YXRpYyBpbnQgbnBmX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xOTk5LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDAwOlx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9FTkNfTUFTSykpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMDEtXHRcdGVycm9yX2NvZGUgfD0gUEZFUlJfUFJJVkFURV9BQ0NFU1M7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzY0PXN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzc4LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMzc5Olx0dm1fdHlwZSA9IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtU05QXCYjMzQ7IDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM4MC1cdFx0ICBpc19zZXZfZXNfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtRVNcJiMzNDsgOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9Mzk5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQwNS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDA2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQwNy17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MTg9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MjItXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyMzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyNC17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyNTpcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyNi19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MzI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MzYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQzNzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgUmVhY2hhYmlsaXR5IGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGt2bV9nbWVtX3BvcHVsYXRlYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiBpbnRlcm5hbCB0byBLVk0uIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVlbiB1cGRhdGVkIHRvIHRha2UgYSBgd3JpdGVgIHBhcmFtZXRlci4gIFJpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoYXQgdGhpcyBjaGFuZ2VzIGhvdyBga3ZtX2dtZW1fcG9wdWxhdGVgIGJlaGF2ZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/ICBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga3ZtX2dtZW1fcG9wdWxhdGVgIGlzIGV2ZW4gKmNhbGxlZCogZnJvbS4KCkl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGluIGBzbnBfbGF1bmNoX3VwZGF0ZWAgYW5kIGB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb25gLCB3aGljaCBhcmUgYm90aCBwYXJ0IG9mIHRoZSBTRVYtU05QIGFuZCBURFggaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgc2VjdXJpdHkgZmVhdHVyZXMgdGllZCB0byBBTUQgYW5kIEludGVsIGhhcmR3YXJlLiBDYW4gc3l6a2FsbGVyIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zPyAgV2VsbCwgaWYgU0VWLVNOUCBpcyBzdXBwb3J0ZWQsIHN5emthbGxlciAqY2FuKiBpc3N1ZSB0aGUgYEtWTV9TRVZfU05QX0xBVU5DSF9VUERBVEVgIGlvY3RsLiBCdXQgaWYgU0VWLVNOUCBpcyAqbm90KiBzdXBwb3J0ZWQsIGBzZXZfc25wX2d1ZXN0KGt2bSlgIHJldHVybnMgZmFsc2UsIGFuZCBgc25wX2xhdW5jaF91cGRhdGVgIGp1c3QgcmV0dXJucyBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGAtRUlOVkFMYC4KCk15IG5leHQgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBwYXRoIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRT8gVHlwaWNhbGx5LCBHQ0UgaW5zdGFuY2VzIGRvbiYjMzk7dCBzdXBwb3J0IG5lc3RlZCBTRVYtU05QIG9yIFREWCwgY29ycmVjdD8gQWgsIGJ1dCBob2xkIG9uLCB0aGUgaW5zdHJ1Y3Rpb25zLi4uIEkgbmVlZCB0byBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSwgdGhhdCBpZiB0aGUgcGF0Y2ggaXMgb25seSByZWxhdGVkIHRvIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiBpdCBzaG91bGQgYmUgbWFya2VkIGFzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsuCgpTaW5jZSBTRVYtU05QIGFuZCBURFggcmVxdWlyZSB0aG9zZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyAoQU1EIFNFVi1TTlAsIEludGVsIFREWCkgYW5kIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZW0gaW4gYSB3YXkgdGhhdCBhbGxvd3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIHN0YW5kYXJkIEdDRSBpbnN0YW5jZXMsIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgKmFyZSogaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50LiBXYWl0LCBkb2VzIFFFTVUgZXZlbiBlbXVsYXRlIFNFVi1TTlA/IE5vLCBRRU1VIHVzZXMgS1ZNIHRvIHN1cHBvcnQgU0VWLVNOUCwgaXQgZG9lc24mIzM5O3QgZG8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzLgoKU28sIGNhbiBLVk0gYmUgZnV6emVkIGZvciBTRVYtU05QIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydD8gSSBzaG91bGQgY2hlY2sgYF9fX19zZXZfc25wX2d1ZXN0YCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX19fc2V2X3NucF9ndWVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTE0Mz1zdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0NS1cdGt2bV9sb2NrZGVwX2Fzc2VydF9zZXZfbG9ja19oZWxkKGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0NjpcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdChrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDctfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzMwOD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjAtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzMyMTpcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjItXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTM5OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDcte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDIzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI0LXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDI1Olx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgX19fX3Nldl9zbnBfZ3Vlc3RgIERlZmluaXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgX19fX3Nldl9zbnBfZ3Vlc3RgLiYjMzQ7IEl0JiMzOTtzIGEgYml0IGNyeXB0aWMsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGhhcyBzb21lIHVuZGVybHlpbmcgc2lnbmlmaWNhbmNlIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmVmb3JlIEkgcHJvY2VlZC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc3BlY2lmaWMgbWFjcm8sIGEgdmFyaWFibGUsIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIGV2ZW4gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGNvZGViYXNlIEkmIzM5O20gd29ya2luZyB3aXRoLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEnigJltIGd1ZXNzaW5nIGl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gU0VWLVNOUCBndWVzdCBoYW5kbGluZyBpbiBzb21lIHdheS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGNvbnRleHQgaXQgb3BlcmF0ZXMgaW4gYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbmV4dCBwaWVjZSBvZiBjb2RlIEkmIzM5O20gbG9va2luZyBhdCwgc28gYmVzdCB0byBmaW5kIHRoaXMgZGVmaW5pdGlvbiBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uaD0zOTk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA1LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MDY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzOTgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEtWTS9TVk0gSW50ZXJuYWxzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBBTUQgU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gS1ZNLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBhc3BlY3QsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgIGhlYWRlciBmaWxlLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBpcyBsaWtlbHkgYXJvdW5kIGxpbmUgNDA2LiBJdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaG9uZSBpbiBvbiB0aGUgc3BlY2lmaWMgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZnVydGhlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTU6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4gMzk2Olx0e1xuIDM5NzpcdFx0cmV0dXJuIHRvX2t2bV9zZXZfaW5mbyhrdm0pLVx1MDAzZWFjdGl2ZTtcbiAzOTg6XHR9XG4gMzk5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIDQwMDpcdHtcbiA0MDE6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xuIDQwMjpcdFxuIDQwMzpcdFx0cmV0dXJuIHNldi1cdTAwM2Vlc19hY3RpdmUgXHUwMDI2XHUwMDI2ICFXQVJOX09OX09OQ0UoIXNldi1cdTAwM2VhY3RpdmUpO1xuIDQwNDpcdH1cbiA0MDU6XHRcbiA0MDY6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIDQwNzpcdHtcbiA0MDg6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xuIDQwOTpcdFxuIDQxMDpcdFx0cmV0dXJuIChzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyBcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUpIFx1MDAyNlx1MDAyNlxuIDQxMTpcdFx0ICAgICAgICFXQVJOX09OX09OQ0UoIV9fX19zZXZfZXNfZ3Vlc3Qoa3ZtKSk7XG4gNDEyOlx0fVxuIDQxMzpcdFxuIDQxNDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzIHNuaXBwZXQsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgYXMgaWYgaXQgd2VyZSBteSBvd24gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBjb2RlOgoKKipDaGVja2luZyBTRVYtU05QIEFjdGl2YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgY2hlY2tpbmcgYF9fX19zZXZfc25wX2d1ZXN0YCBhbmQgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYHNldi0mZ3Q7dm1zYV9mZWF0dXJlcyAmYW1wOyBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRWAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDtXaGVyZSBhbmQgaG93IGlzIGBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRWAgYWN0dWFsbHkgKnNldCogaW4gdGhlIGZpcnN0IHBsYWNlPyYjMzQ7IEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgdGhhdCYjMzk7cyBtYWdpY2FsbHkgdGhlcmUuIFRoZSBsb2dpYyB0cmFpbHMgYmFjayB0byBgS1ZNX1NFVl9JTklUMmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGlzIGlzIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoLiBOb3csIHRoZSByZWFsIGNydXggb2YgdGhlIGlzc3VlIGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgYEtWTV9TRVZfSU5JVDJgIGNhbGwgcmVxdWlyZXMgZXhwbGljaXQgaGFyZHdhcmUgc3VwcG9ydC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYEtWTV9TRVZfSU5JVDJgIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGlmIGFueSwgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgdGhlIFNOUCBmZWF0dXJlcyB0byBiZSBhY3RpdmUuIEkgaGF2ZSB0byB0cmFjZSBob3cgdGhpcyBmbGFnIGlzIGJlaW5nIGVuYWJsZWQgYnkgdGhlIEtWTSBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NWTV9TRVZfRkVBVF9TTlBfQUNUSVZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTMwNT1zdGF0aWNfYXNzZXJ0KChYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTMwNi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjMwNzojZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFXHRcdFx0XHRCSVQoMClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTMwOC0jZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlx0XHRCSVQoMylcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4OD1zdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzMtXHRpZiAoc25wX2FjdGl2ZSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM0Olx0XHRzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDA2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDktXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQxMDpcdHJldHVybiAoc2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVx0ICAgICAgICFXQVJOX09OX09OQ0UoIV9fX19zZXZfZXNfZ3Vlc3Qoa3ZtKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzYwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgYF9fc2V2X2d1ZXN0X2luaXRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fc2V2X2d1ZXN0X2luaXRgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgU0VWLVNOUCBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZCBoZXJlIHdpdGhpbiB0aGUgZ3Vlc3QmIzM5O3MgY29udGV4dC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgKmhvdyogYW5kIHRoZSAqd2h5Ki4gV2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYXJlIHdlIHNldHRpbmcgdXA/IFdoYXQmIzM5O3MgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnM/IEFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IGRvZXMgdGhpcyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBlbnN1cmUgdGhlIGludGVncml0eSBhbmQgY29uZmlkZW50aWFsaXR5IGFzcGVjdHMgb2YgdGhlIGd1ZXN0IGluIGFuIFNFVi1lbmFibGVkIGVudmlyb25tZW50PyBBcmUgd2Ugc2VlaW5nIHRoZSBleHBlY3RlZCBtZW1vcnkgcmVnaW9uIHByb3RlY3Rpb25zIHNldCB1cD8gQXJlIHRoZSBzZWNyZXRzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gdGhlIGF0dGVzdGF0aW9uIHByb2Nlc3M/IEFyZSB3ZSB2ZXJpZnlpbmcgdGhlIGluaXRpYWwgZmlybXdhcmUgc3RhdGU/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBzY3J1dGluaXplIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaHlwZXJ2aXNvciBvciB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS1iYXNlZCBzZWN1cml0eSBtZWNoYW5pc21zLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkgYXJlIHNldHRpbmcgdXAgdGhlIHBhZ2UgdGFibGVzLCBjb25maWd1cmluZyB0aGUgc2VjcmV0cywgYW5kIGhhbmRsaW5nIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdpdGggdGhlIGhvc3QgY29ycmVjdGx5LiBJdCYjMzk7cyB0aGUgY29yZSBvZiB0cnVzdCwgYW5kIHRoYXQmIzM5O3MgdGhlIHBhcnQgdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZCB0aGUgbW9zdC4gRnJvbSB0aGVyZSBJJiMzOTtsbCBiZSBhYmxlIHRvIHRlbGwgd2hhdCBjb3VsZCBiZSBpbXByb3ZlZCBvciBvcHRpbWl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDg4Olx0c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuIDQ4OTpcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0ICpkYXRhLFxuIDQ5MDpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXG4gNDkxOlx0e1xuIDQ5MjpcdFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XG4gNDkzOlx0XHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XG4gNDk0Olx0XHRib29sIGVzX2FjdGl2ZSA9IHZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfVk07XG4gNDk1Olx0XHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xuIDQ5NjpcdFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xuIDQ5NzpcdFx0aW50IHJldDtcbiA0OTg6XHRcbiA0OTk6XHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cylcbiA1MDA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTAxOlx0XG4gNTAyOlx0XHRpZiAoZGF0YS1cdTAwM2VmbGFncylcbiA1MDM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTA0Olx0XG4gNTA1Olx0XHRpZiAoIXNucF9hY3RpdmUpXG4gNTA2Olx0XHRcdHZhbGlkX3Ztc2FfZmVhdHVyZXMgXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XG4gNTA3Olx0XG4gNTA4Olx0XHRpZiAoZGF0YS1cdTAwM2V2bXNhX2ZlYXR1cmVzIFx1MDAyNiB+dmFsaWRfdm1zYV9mZWF0dXJlcylcbiA1MDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTEwOlx0XG4gNTExOlx0XHRpZiAoZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb24gXHUwMDNlIEdIQ0JfVkVSU0lPTl9NQVggfHwgKCFlc19hY3RpdmUgXHUwMDI2XHUwMDI2IGRhdGEtXHUwMDNlZ2hjYl92ZXJzaW9uKSlcbiA1MTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTEzOlx0XG4gNTE0Olx0XHQvKlxuIDUxNTpcdFx0ICogS1ZNIHN1cHBvcnRzIHRoZSBmdWxsIHJhbmdlIG9mIG1hbmRhdG9yeSBmZWF0dXJlcyBkZWZpbmVkIGJ5IHZlcnNpb25cbiA1MTY6XHRcdCAqIDIgb2YgdGhlIEdIQ0IgcHJvdG9jb2wsIHNvIGRlZmF1bHQgdG8gdGhhdCBmb3IgU0VWLUVTIGd1ZXN0cyBjcmVhdGVkXG4gNTE3Olx0XHQgKiB2aWEgS1ZNX1NFVl9JTklUMiAoS1ZNX1NFVl9JTklUIGZvcmNlcyB2ZXJzaW9uIDEpLlxuIDUxODpcdFx0ICovXG4gNTE5Olx0XHRpZiAoZXNfYWN0aXZlIFx1MDAyNlx1MDAyNiAhZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb24pXG4gNTIwOlx0XHRcdGRhdGEtXHUwMDNlZ2hjYl92ZXJzaW9uID0gMjtcbiA1MjE6XHRcbiA1MjI6XHRcdGlmIChzbnBfYWN0aXZlIFx1MDAyNlx1MDAyNiBkYXRhLVx1MDAzZWdoY2JfdmVyc2lvbiBcdTAwM2MgMilcbiA1MjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTI0Olx0XG4gNTI1Olx0XHRpZiAodW5saWtlbHkoc2V2LVx1MDAzZWFjdGl2ZSkpXG4gNTI2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyNzpcdFxuIDUyODpcdFx0c2V2LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4gNTI5Olx0XHRzZXYtXHUwMDNlZXNfYWN0aXZlID0gZXNfYWN0aXZlO1xuIDUzMDpcdFx0c2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgPSBkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXM7XG4gNTMxOlx0XHRzZXYtXHUwMDNlZ2hjYl92ZXJzaW9uID0gZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb247XG4gNTMyOlx0XG4gNTMzOlx0XHRpZiAoc25wX2FjdGl2ZSlcbiA1MzQ6XHRcdFx0c2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkU7XG4gNTM1Olx0XG4gNTM2Olx0XHRyZXQgPSBzZXZfYXNpZF9uZXcoc2V2LCB2bV90eXBlKTtcbiA1Mzc6XHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNFViBJbml0aWFsaXphdGlvbiBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYF9fc2V2X2d1ZXN0X2luaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgY2VudHJhbCB0byB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBndWVzdCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGUgdHJhY2Ugc2hvd3MgYSBjYWxsIHRvIGBzZXZfYXNpZF9uZXdgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgdHlpbmcgaW50byBhbnkgaGFyZHdhcmUgZmVhdHVyZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgYHNldl9hc2lkX25ld2AgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBhbmQgd2Ugc3RhcnQgbGV2ZXJhZ2luZyBhbnkgcmVxdWlyZWQgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgcmlnaHQgbm93LCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgZ28gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X2FzaWRfbmV3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQwPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2V2X2FsbG9jX2FzaWQodW5zaWduZWQgaW50IG1pbl9hc2lkLCB1bnNpZ25lZCBpbnQgbWF4X2FzaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2MjpzdGF0aWMgaW50IHNldl9hc2lkX25ldyhzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYsIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4OD1zdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzNjpcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQxOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCB0aGUgY29udGV4dCBpcyByZWxldmFudCB0byBteSB3b3JrOgoKKipDaGVja2luZyBgc2V2X2FzaWRfbmV3YCoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gaW4gdGhlIG1pZGRsZSBvZiBhIHRyb3VibGVzaG9vdGluZyBzZXNzaW9uLCBjb2RlIHJldmlldywgb3IgbWF5YmUgZXZlbiBhcmNoaXRlY3R1cmFsIGRlc2lnbi4gJiMzNDtDaGVja2luZyBgc2V2X2FzaWRfbmV3YCYjMzQ7IGluZGljYXRlcyBhIHNwZWNpZmljIHZhcmlhYmxlLCBmdW5jdGlvbiwgb3IgY29uY2VwdCByZWxhdGVkIHRvIEFTSUQgKEFkZHJlc3MgU3BhY2UgSWRlbnRpZmllcikgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU0VWIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uKSwgd2hpY2ggSSYjMzk7bSBjbGVhcmx5IGZhbWlsaWFyIHdpdGguIEl0JiMzOTtzIGEga2V5IHBpZWNlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgcmVsZXZhbmNlIHRvIHdoYXRldmVyIEkmIzM5O20gd29ya2luZyBvbiByaWdodCBub3cuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYSBzdXNwZWN0ZWQgaXNzdWUsIG9yIG1heWJlIEkmIzM5O20gdmVyaWZ5aW5nIHNvbWUgYXNzdW1wdGlvbnMuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgcGxhY2UgdG8gc3RhcnQuIFRoaXMgY2hlY2sgd2lsbCBkZXRlcm1pbmUgd2hpY2ggcGF0aCBJJiMzOTtsbCBmb2xsb3cuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjI6XHRzdGF0aWMgaW50IHNldl9hc2lkX25ldyhzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYsIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbiAyNjM6XHR7XG4gMjY0Olx0XHQvKlxuIDI2NTpcdFx0ICogU0VWLWVuYWJsZWQgZ3Vlc3RzIG11c3QgdXNlIGFzaWQgZnJvbSBtaW5fc2V2X2FzaWQgdG8gbWF4X3Nldl9hc2lkLlxuIDI2NjpcdFx0ICogU0VWLUVTLWVuYWJsZWQgZ3Vlc3QgY2FuIHVzZSBmcm9tIDEgdG8gbWluX3Nldl9hc2lkIC0gMS5cbiAyNjc6XHRcdCAqL1xuIDI2ODpcdFx0dW5zaWduZWQgaW50IG1pbl9hc2lkLCBtYXhfYXNpZCwgYXNpZDtcbiAyNjk6XHRcdGludCByZXQ7XG4gMjcwOlx0XG4gMjcxOlx0XHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xuIDI3MjpcdFx0XHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcbiAyNzM6XHRcdFx0bWF4X2FzaWQgPSBtYXhfc25wX2FzaWQ7XG4gMjc0Olx0XHR9IGVsc2UgaWYgKHNldi1cdTAwM2Vlc19hY3RpdmUpIHtcbiAyNzU6XHRcdFx0bWluX2FzaWQgPSBtaW5fc2V2X2VzX2FzaWQ7XG4gMjc2Olx0XHRcdG1heF9hc2lkID0gbWF4X3Nldl9lc19hc2lkO1xuIDI3NzpcdFx0fSBlbHNlIHtcbiAyNzg6XHRcdFx0bWluX2FzaWQgPSBtaW5fc2V2X2FzaWQ7XG4gMjc5Olx0XHRcdG1heF9hc2lkID0gbWF4X3Nldl9hc2lkO1xuIDI4MDpcdFx0fVxuIDI4MTpcdFxuIDI4MjpcdFx0LypcbiAyODM6XHRcdCAqIFRoZSBtaW4gQVNJRCBjYW4gZW5kIHVwIGxhcmdlciB0aGFuIHRoZSBtYXggaWYgYmFzaWMgU0VWIHN1cHBvcnQgaXNcbiAyODQ6XHRcdCAqIGVmZmVjdGl2ZWx5IGRpc2FibGVkIGJ5IGRpc2FsbG93aW5nIHVzZSBvZiBBU0lEcyBmb3IgU0VWIGd1ZXN0cy5cbiAyODU6XHRcdCAqIFNpbWlsYXJseSBmb3IgU0VWLUVTIGd1ZXN0cyB0aGUgbWluIEFTSUQgY2FuIGVuZCB1cCBsYXJnZXIgdGhhbiB0aGVcbiAyODY6XHRcdCAqIG1heCB3aGVuIGNpcGhlcnRleHQgaGlkaW5nIGlzIGVuYWJsZWQsIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBTRVYtRVNcbiAyODc6XHRcdCAqIHN1cHBvcnQuXG4gMjg4Olx0XHQgKi9cbiAyODk6XHRcdGlmIChtaW5fYXNpZCBcdTAwM2UgbWF4X2FzaWQpXG4gMjkwOlx0XHRcdHJldHVybiAtRU5PVFRZO1xuIDI5MTpcdFxuIDI5MjpcdFx0V0FSTl9PTl9PTkNFKHNldi1cdTAwM2VtaXNjX2NnKTtcbiAyOTM6XHRcdHNldi1cdTAwM2VtaXNjX2NnID0gZ2V0X2N1cnJlbnRfbWlzY19jZygpO1xuIDI5NDpcdFx0cmV0ID0gc2V2X21pc2NfY2dfdHJ5X2NoYXJnZShzZXYpO1xuIDI5NTpcdFx0aWYgKHJldClcbiAyOTY6XHRcdFx0Z290byBlX3B1dF9jZztcbiAyOTc6XHRcbiAyOTg6XHRcdGFzaWQgPSBzZXZfYWxsb2NfYXNpZChtaW5fYXNpZCwgbWF4X2FzaWQpO1xuIDI5OTpcdFx0aWYgKGFzaWQgXHUwMDNlIG1heF9hc2lkKSB7XG4gMzAwOlx0XHRcdHJldCA9IC1FQlVTWTtcbiAzMDE6XHRcdFx0Z290byBlX3VuY2hhcmdlO1xuIDMwMjpcdFx0fVxuIDMwMzpcdFxuIDMwNDpcdFx0c2V2LVx1MDAzZWFzaWQgPSBhc2lkO1xuIDMwNTpcdFx0cmV0dXJuIDA7XG4gMzA2Olx0XG4gMzA3Olx0ZV91bmNoYXJnZTpcbiAzMDg6XHRcdHNldl9taXNjX2NnX3VuY2hhcmdlKHNldik7XG4gMzA5Olx0ZV9wdXRfY2c6XG4gMzEwOlx0XHRwdXRfbWlzY19jZyhzZXYtXHUwMDNlbWlzY19jZyk7XG4gMzExOlx0XHRzZXYtXHUwMDNlbWlzY19jZyA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDg0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRHJpdmVyIElzc3VlKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYSBjb25kaXRpb25hbCBjaGVjazogYG1pbl9zbnBfYXNpZCAmZ3Q7IG1heF9zbnBfYXNpZGAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgcHJvYmxlbS4gSWYgdGhpcyBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUsIHRoZSBjb2RlIGlzIGV4cGxpY2l0bHkgZGVzaWduZWQgdG8gcmV0dXJuIGAtRU5PVFRZYC4gVGhhdCYjMzk7cyB0aGUga2V5IGJlaGF2aW9yIHRvIHVuZGVyc3RhbmQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCAqd2h5KiB0aGlzIHNjZW5hcmlvIHdvdWxkIGFyaXNlLCBiZWNhdXNlIGEgbmVnYXRpdmUgcmV0dXJuIGxpa2UgYC1FTk9UVFlgIHN1Z2dlc3RzIGFuICp1bmV4cGVjdGVkKiBvciBpbmFwcHJvcHJpYXRlIG9wZXJhdGlvbi4gSSBrbm93IHRoYXQgdXN1YWxseSBpbmRpY2F0ZXMgYW4gaW5hcHByb3ByaWF0ZSBpb2N0bCByZXF1ZXN0LgoKVGhlIGNydXggb2YgdGhlIG1hdHRlciB0aGVuIGJlY29tZXM6IGhvdyBhcmUgYG1pbl9zbnBfYXNpZGAgYW5kIGBtYXhfc25wX2FzaWRgIGluaXRpYWxpemVkPyBXaGVyZSBhbmQgaG93IGFyZSB0aGVzZSB2YWx1ZXMgcG9wdWxhdGVkPyBXaGF0IGNvZGUgcGF0aCBzZXRzIHRoZW0sIGFuZCB3aGF0IGRvZXMgdGhlIGRhdGEgdGhleSByZXByZXNlbnQgKmFjdHVhbGx5KiBtZWFuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXIgYW5kIHRoZSBoYXJkd2FyZSBpdCBjb250cm9scz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbiBwb2ludHMgZm9yIHRoZXNlIHR3byB2YXJpYWJsZXMuIElzIHRoZXJlIGEgcmFjZSBjb25kaXRpb24/IEEgbG9naWMgZXJyb3IgaW4gY2FsY3VsYXRpbmcgcmFuZ2VzPyBBcmUgdGhlc2Ugc3VwcG9zZWQgdG8gcmVwcmVzZW50IGFuICppbnZlcnRlZCogcmFuZ2UsIG9yIGlzIHRoaXMganVzdCBhbiB1bmluaXRpYWxpemVkIHN0YXRlPyBUaGUgYW5zd2VyIGxpZXMgaW4gdGhlIHNvdXJjZSBjb2RlOyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGVzZSB2YXJpYWJsZXMgYW5kIHRyYWNlIHRoZWlyIHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgdW50aWwgSSB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YXJpYWJsZXMgZW5kIHVwIGluIGEgc3RhdGUgdGhhdCBjb3VsZCB0cmlnZ2VyIGAtRU5PVFRZYC4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gYSBidWcgb3IgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNvbmRpdGlvbiB3b3VsZCAqZXZlciogYmUgbWV0IGFuZCBpZiBgLUVOT1RUWWAgaXMgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fc25wX2FzaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMDM9c3RhdGljIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEwNDpzdGF0aWMgdW5zaWduZWQgaW50IG1pbl9zbnBfYXNpZDtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTA1LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldl9tZV9tYXNrO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYyPXN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcxLVx0aWYgKHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjcyOlx0XHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjczLVx0XHRtYXhfYXNpZCA9IG1heF9zbnBfYXNpZDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNjg9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTY1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTY2Olx0bWluX3Nldl9lc19hc2lkID0gbWluX3NucF9hc2lkID0gMTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE2Ny1cdG1heF9zZXZfZXNfYXNpZCA9IG1heF9zbnBfYXNpZCA9IG1pbl9zZXZfYXNpZCAtIDE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjIyLVx0XHRcdHN0cl9lbmFibGVkX2Rpc2FibGVkKHNldl9zbnBfc3VwcG9ydGVkKSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIyMzpcdFx0XHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzkxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCB0aGUgbWVudGFsIGdlYXJzIGFyZSBzdGFydGluZyB0byB0dXJuLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBhcmVhLiBXaGVuIEkgc2VlIHRoYXQgbm90YXRpb24sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBzZXZfaGFyZHdhcmVfc2V0dXBgLiBJIHNlZSB0aGF0IHBocmFzZSwgSSB0aGluayBvZiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlY3VyZSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBsaW5lZCB1cCBjb3JyZWN0bHkgZnJvbSB0aGUgdmVyeSBzdGFydC4gSXMgdGhlIGhhcmR3YXJlIGFwcHJvcHJpYXRlbHkgcHJvdmlzaW9uZWQ/IEFyZSB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzIGVuYWJsZWQgYXQgdGhlIGZpcm13YXJlIGxldmVsPyBBcmUgdGhlIGtleXMgcHJvcGVybHkgaW5qZWN0ZWQ/IFRoaXMgaXMgd2hlcmUgZXZlcnl0aGluZyBiZWdpbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhbGwgc3RpbGwgbG9va2luZyBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDY4Olx0dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4zMDY5Olx0e1xuMzA3MDpcdFx0dW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeCwgc2V2X2FzaWRfY291bnQsIHNldl9lc19hc2lkX2NvdW50O1xuMzA3MTpcdFx0c3RydWN0IHNldl9wbGF0Zm9ybV9pbml0X2FyZ3MgaW5pdF9hcmdzID0gezB9O1xuMzA3MjpcdFx0Ym9vbCBzZXZfc25wX3N1cHBvcnRlZCA9IGZhbHNlO1xuMzA3MzpcdFx0Ym9vbCBzZXZfZXNfc3VwcG9ydGVkID0gZmFsc2U7XG4zMDc0Olx0XHRib29sIHNldl9zdXBwb3J0ZWQgPSBmYWxzZTtcbjMwNzU6XHRcbjMwNzY6XHRcdGlmICghc2V2X2VuYWJsZWQgfHwgIW5wdF9lbmFibGVkIHx8ICFucmlwcylcbjMwNzc6XHRcdFx0Z290byBvdXQ7XG4zMDc4Olx0XG4zMDc5Olx0XHQvKlxuMzA4MDpcdFx0ICogU0VWIG11c3Qgb2J2aW91c2x5IGJlIHN1cHBvcnRlZCBpbiBoYXJkd2FyZS4gIFNhbml0eSBjaGVjayB0aGF0IHRoZVxuMzA4MTpcdFx0ICogQ1BVIHN1cHBvcnRzIGRlY29kZSBhc3Npc3RzLCB3aGljaCBpcyBtYW5kYXRvcnkgZm9yIFNFViBndWVzdHMgdG9cbjMwODI6XHRcdCAqIHN1cHBvcnQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLiAgRGl0dG8gZm9yIGZsdXNoaW5nIGJ5IEFTSUQsIGFzIFNFVlxuMzA4MzpcdFx0ICogZ3Vlc3RzIGFyZSBib3VuZCB0byBhIHNpbmdsZSBBU0lELCBpLmUuIEtWTSBjYW4mIzM5O3Qgcm90YXRlIHRvIGEgbmV3XG4zMDg0Olx0XHQgKiBBU0lEIHRvIGVmZmVjdCBhIFRMQiBmbHVzaC5cbjMwODU6XHRcdCAqL1xuMzA4NjpcdFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWKSB8fFxuMzA4NzpcdFx0ICAgIFdBUk5fT05fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpKSB8fFxuMzA4ODpcdFx0ICAgIFdBUk5fT05fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZMVVNIQllBU0lEKSkpXG4zMDg5Olx0XHRcdGdvdG8gb3V0O1xuMzA5MDpcdFxuMzA5MTpcdFx0LypcbjMwOTI6XHRcdCAqIFRoZSBrZXJuZWwmIzM5O3MgaW5pdGNhbGwgaW5mcmFzdHJ1Y3R1cmUgbGFja3MgdGhlIGFiaWxpdHkgdG8gZXhwcmVzc1xuMzA5MzpcdFx0ICogZGVwZW5kZW5jaWVzIGJldHdlZW4gaW5pdGNhbGxzLCB3aGVyZWFzIHRoZSBtb2R1bGVzIGluZnJhc3RydWN0dXJlXG4zMDk0Olx0XHQgKiBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgZGVwZW5kZW5jaWVzIHZpYSBzeW1ib2wgbG9hZGluZy4gIEVuc3VyZSB0aGVcbjMwOTU6XHRcdCAqIFBTUCBTRVYgZHJpdmVyIGlzIGluaXRpYWxpemVkIGJlZm9yZSBwcm9jZWVkaW5nIGlmIEtWTSBpcyBidWlsdC1pbixcbjMwOTY6XHRcdCAqIGFzIHRoZSBkZXBlbmRlbmN5IGlzbiYjMzk7dCBoYW5kbGVkIGJ5IHRoZSBpbml0Y2FsbCBpbmZyYXN0cnVjdHVyZS5cbjMwOTc6XHRcdCAqL1xuMzA5ODpcdFx0aWYgKElTX0JVSUxUSU4oQ09ORklHX0tWTV9BTUQpIFx1MDAyNlx1MDAyNiBzZXZfbW9kdWxlX2luaXQoKSlcbjMwOTk6XHRcdFx0Z290byBvdXQ7XG4zMTAwOlx0XG4zMTAxOlx0XHQvKiBSZXRyaWV2ZSBTRVYgQ1BVSUQgaW5mb3JtYXRpb24gKi9cbjMxMDI6XHRcdGNwdWlkKDB4ODAwMDAwMWYsIFx1MDAyNmVheCwgXHUwMDI2ZWJ4LCBcdTAwMjZlY3gsIFx1MDAyNmVkeCk7XG4zMTAzOlx0XG4zMTA0Olx0XHQvKiBTZXQgZW5jcnlwdGlvbiBiaXQgbG9jYXRpb24gZm9yIFNFVi1FUyBndWVzdHMgKi9cbjMxMDU6XHRcdHNldl9lbmNfYml0ID0gZWJ4IFx1MDAyNiAweDNmO1xuMzEwNjpcdFxuMzEwNzpcdFx0LyogTWF4aW11bSBudW1iZXIgb2YgZW5jcnlwdGVkIGd1ZXN0cyBzdXBwb3J0ZWQgc2ltdWx0YW5lb3VzbHkgKi9cbjMxMDg6XHRcdG1heF9zZXZfYXNpZCA9IGVjeDtcbjMxMDk6XHRcdGlmICghbWF4X3Nldl9hc2lkKVxuMzExMDpcdFx0XHRnb3RvIG91dDtcbjMxMTE6XHRcbjMxMTI6XHRcdC8qIE1pbmltdW0gQVNJRCB2YWx1ZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBTRVYgZ3Vlc3QgKi9cbjMxMTM6XHRcdG1pbl9zZXZfYXNpZCA9IGVkeDtcbjMxMTQ6XHRcdHNldl9tZV9tYXNrID0gMVVMIFx1MDAzY1x1MDAzYyAoZWJ4IFx1MDAyNiAweDNmKTtcbjMxMTU6XHRcbjMxMTY6XHRcdC8qXG4zMTE3Olx0XHQgKiBJbml0aWFsaXplIFNFViBBU0lEIGJpdG1hcHMuIEFsbG9jYXRlIHNwYWNlIGZvciBBU0lEIDAgaW4gdGhlIGJpdG1hcCxcbjMxMTg6XHRcdCAqIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG5ldmVyIHVzZWQsIHNvIHRoYXQgdGhlIGJpdG1hcCBpcyBpbmRleGVkIGJ5IHRoZVxuMzExOTpcdFx0ICogYWN0dWFsIEFTSUQuXG4zMTIwOlx0XHQgKi9cbjMxMjE6XHRcdG5yX2FzaWRzID0gbWF4X3Nldl9hc2lkICYjNDM7IDE7XG4zMTIyOlx0XHRzZXZfYXNpZF9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKG5yX2FzaWRzLCBHRlBfS0VSTkVMKTtcbjMxMjM6XHRcdGlmICghc2V2X2FzaWRfYml0bWFwKVxuMzEyNDpcdFx0XHRnb3RvIG91dDtcbjMxMjU6XHRcbjMxMjY6XHRcdHNldl9yZWNsYWltX2FzaWRfYml0bWFwID0gYml0bWFwX3phbGxvYyhucl9hc2lkcywgR0ZQX0tFUk5FTCk7XG4zMTI3Olx0XHRpZiAoIXNldl9yZWNsYWltX2FzaWRfYml0bWFwKSB7XG4zMTI4Olx0XHRcdGJpdG1hcF9mcmVlKHNldl9hc2lkX2JpdG1hcCk7XG4zMTI5Olx0XHRcdHNldl9hc2lkX2JpdG1hcCA9IE5VTEw7XG4zMTMwOlx0XHRcdGdvdG8gb3V0O1xuMzEzMTpcdFx0fVxuMzEzMjpcdFxuMzEzMzpcdFx0aWYgKG1pbl9zZXZfYXNpZCBcdTAwM2M9IG1heF9zZXZfYXNpZCkge1xuMzEzNDpcdFx0XHRzZXZfYXNpZF9jb3VudCA9IG1heF9zZXZfYXNpZCAtIG1pbl9zZXZfYXNpZCAmIzQzOyAxO1xuMzEzNTpcdFx0XHRXQVJOX09OX09OQ0UobWlzY19jZ19zZXRfY2FwYWNpdHkoTUlTQ19DR19SRVNfU0VWLCBzZXZfYXNpZF9jb3VudCkpO1xuMzEzNjpcdFx0fVxuMzEzNzpcdFx0c2V2X3N1cHBvcnRlZCA9IHRydWU7XG4zMTM4Olx0XG4zMTM5Olx0XHQvKiBTRVYtRVMgc3VwcG9ydCByZXF1ZXN0ZWQ/ICovXG4zMTQwOlx0XHRpZiAoIXNldl9lc19lbmFibGVkKVxuMzE0MTpcdFx0XHRnb3RvIG91dDtcbjMxNDI6XHRcbjMxNDM6XHRcdC8qXG4zMTQ0Olx0XHQgKiBTRVYtRVMgcmVxdWlyZXMgTU1JTyBjYWNoaW5nIGFzIEtWTSBkb2VzbiYjMzk7dCBoYXZlIGFjY2VzcyB0byB0aGUgZ3Vlc3RcbjMxNDU6XHRcdCAqIGluc3RydWN0aW9uIHN0cmVhbSwgaS5lLiBjYW4mIzM5O3QgZW11bGF0ZSBpbiByZXNwb25zZSB0byBhICNOUEYgYW5kXG4zMTQ2Olx0XHQgKiBpbnN0ZWFkIHJlbGllcyBvbiAjTlBGKFJTVkQpIGJlaW5nIHJlZmxlY3RlZCBpbnRvIHRoZSBndWVzdCBhcyAjVkNcbjMxNDc6XHRcdCAqICh0aGUgZ3Vlc3QgY2FuIHRoZW4gZG8gYSAjVk1HRVhJVCB0byByZXF1ZXN0IE1NSU8gZW11bGF0aW9uKS5cbjMxNDg6XHRcdCAqL1xuMzE0OTpcdFx0aWYgKCFlbmFibGVfbW1pb19jYWNoaW5nKVxuMzE1MDpcdFx0XHRnb3RvIG91dDtcbjMxNTE6XHRcbjMxNTI6XHRcdC8qIERvZXMgdGhlIENQVSBzdXBwb3J0IFNFVi1FUz8gKi9cbjMxNTM6XHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9FUykpXG4zMTU0Olx0XHRcdGdvdG8gb3V0O1xuMzE1NTpcdFxuMzE1NjpcdFx0aWYgKCFsYnJ2KSB7XG4zMTU3Olx0XHRcdFdBUk5fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpLFxuMzE1ODpcdFx0XHRcdCAgXCYjMzQ7TEJSViBtdXN0IGJlIHByZXNlbnQgZm9yIFNFVi1FUyBzdXBwb3J0XCYjMzQ7KTtcbjMxNTk6XHRcdFx0Z290byBvdXQ7XG4zMTYwOlx0XHR9XG4zMTYxOlx0XG4zMTYyOlx0XHQvKiBIYXMgdGhlIHN5c3RlbSBiZWVuIGFsbG9jYXRlZCBBU0lEcyBmb3IgU0VWLUVTPyAqL1xuMzE2MzpcdFx0aWYgKG1pbl9zZXZfYXNpZCA9PSAxKVxuMzE2NDpcdFx0XHRnb3RvIG91dDtcbjMxNjU6XHRcbjMxNjY6XHRcdG1pbl9zZXZfZXNfYXNpZCA9IG1pbl9zbnBfYXNpZCA9IDE7XG4zMTY3Olx0XHRtYXhfc2V2X2VzX2FzaWQgPSBtYXhfc25wX2FzaWQgPSBtaW5fc2V2X2FzaWQgLSAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTRVYgSGFyZHdhcmUgU2V0dXAgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBTRVYgaGFyZHdhcmUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZSBjb2RlIHN0YXJ0cyB3aXRoIGBzZXZfaGFyZHdhcmVfc2V0dXBgLCB3aGljaCBpbW1lZGlhdGVseSBjaGVja3MgaWYgdGhlIGJvb3QgQ1BVIHN1cHBvcnRzIFNFViB1c2luZyBgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVilgLiBJZiBTRVYgaXNuJiMzOTt0IHByZXNlbnQsIGl0IGp1bXBzIHN0cmFpZ2h0IHRvIGBvdXRgLiAgVGhhdCYjMzk7cyBpbXBvcnRhbnQuCgpOb3csIGlmIHdlIGhpdCB0aGF0IGBvdXRgIHBhdGgsICBgbWluX3NucF9hc2lkYCBpcyBsZWZ0IGF0IHplcm8uIFdoaWNoIG1lYW5zIGxhdGVyIHdoZW4gYHNldl9hc2lkX25ld2AgaXMgY2FsbGVkLCBpdCB3aWxsIGJlIGhhbmRlZCBhIGBtaW5fYXNpZGAgYW5kIGBtYXhfYXNpZGAgb2YgemVyby4KCkhhbmcgb24uLi4gdGhlbiB3ZSBoYXZlIGBtaW5fYXNpZCAmZ3Q7IG1heF9hc2lkYCwgd2hpY2ggaXMgYDAgJmd0OyAwYOKAlCB0aGF0IGV2YWx1YXRlcyB0byBmYWxzZS4gU28gYHNldl9hbGxvY19hc2lkYCBpcyB0aGVuIGNhbGxlZCB3aXRoIDAsIDAuIEkgbmVlZCB0byBkaWcgaW50byBgc2V2X2FsbG9jX2FzaWRgIG5vdyBhbmQgc2VlIHdoYXQgaXQgZG9lcyB3aXRoIHRoaXMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcbiAyNDE6XHR7XG4gMjQyOlx0XHR1bnNpZ25lZCBpbnQgYXNpZDtcbiAyNDM6XHRcdGJvb2wgcmV0cnkgPSB0cnVlO1xuIDI0NDpcdFxuIDI0NTpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnNldl9iaXRtYXBfbG9jayk7XG4gMjQ2Olx0XG4gMjQ3Olx0YWdhaW46XG4gMjQ4Olx0XHRhc2lkID0gZmluZF9uZXh0X3plcm9fYml0KHNldl9hc2lkX2JpdG1hcCwgbWF4X2FzaWQgJiM0MzsgMSwgbWluX2FzaWQpO1xuIDI0OTpcdFx0aWYgKGFzaWQgXHUwMDNlIG1heF9hc2lkKSB7XG4gMjUwOlx0XHRcdGlmIChyZXRyeSBcdTAwMjZcdTAwMjYgX19zZXZfcmVjeWNsZV9hc2lkcyhtaW5fYXNpZCwgbWF4X2FzaWQpKSB7XG4gMjUxOlx0XHRcdFx0cmV0cnkgPSBmYWxzZTtcbiAyNTI6XHRcdFx0XHRnb3RvIGFnYWluO1xuIDI1MzpcdFx0XHR9XG4gMjU0Olx0XG4gMjU1Olx0XHRcdHJldHVybiBhc2lkO1xuIDI1NjpcdFx0fVxuIDI1NzpcdFxuIDI1ODpcdFx0X19zZXRfYml0KGFzaWQsIHNldl9hc2lkX2JpdG1hcCk7XG4gMjU5Olx0XHRyZXR1cm4gYXNpZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0VWIEluaXRpYWxpemF0aW9uIGFuZCBFcnJvciBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIGNyYXNoIHNjZW5hcmlvIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBJZiBgc2V2X2FzaWRfYml0bWFwYCBpcyBOVUxMLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgYHNldl9oYXJkd2FyZV9zZXR1cGAgZmFpbHMsIHRoZW4gY2FsbGluZyBgZmluZF9uZXh0X3plcm9fYml0YCBvbiB0aGF0IG51bGwgcG9pbnRlciBpcyBnb2luZyB0byBiZSBhIHByb2JsZW0uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYW5kIHdlJiMzOTtsbCBlaXRoZXIgY3Jhc2ggb3IgZ2V0IHNvbWUgZ2FyYmFnZSB2YWx1ZSBiYWNrLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBpZiBgc2V2X2hhcmR3YXJlX3NldHVwYCBmYWlscywgZG9lc24mIzM5O3QgdGhhdCBtZWFuIGBzZXZfc3VwcG9ydGVkYCBnZXRzIHNldCB0byBmYWxzZT8gT2theSwgZ29vZC4gVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgY2hlY2suCgpOb3csIGEgcXVlc3Rpb24gaXMgcG9wcGluZyBpbnRvIG15IGhlYWQ6IElzIGBLVk1fU0VWX0lOSVQyYCBldmVuIGFsbG93ZWQgdG8gYmUgY2FsbGVkIGlmIGBzZXZfc3VwcG9ydGVkYCBpcyBmYWxzZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYyBhcm91bmQgYHNldl9ndWVzdF9pbml0MmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZHJpdmVyIGNvcnJlY3RseSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgU0VWIGlzbiYjMzk7dCBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9ndWVzdF9pbml0MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU3OD1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYwMi17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ1PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY4MS1cdGNhc2UgS1ZNX1NFVl9JTklUMjpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY4MjpcdFx0ciA9IHNldl9ndWVzdF9pbml0Mihrdm0sIFx1MDAyNnNldl9jbWQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjgzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NDAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2V2X2d1ZXN0X2luaXQyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBzZXZfZ3Vlc3RfaW5pdDJgLiBJJiMzOTttIHN0YXJ0aW5nIGhlcmUgYmVjYXVzZSBpdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGd1ZXN0IGluaXRpYWxpemF0aW9uIGZsb3csIGFuZCBJIG5lZWQgYSBzdHJvbmcgZ3Jhc3Agb2YgaXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGJlY2F1c2UgYSBmdW5kYW1lbnRhbCBpc3N1ZSBvZnRlbiBtYW5pZmVzdHMgaXRzZWxmIGVhcmx5LCBtYWtpbmcgdGhpcyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGRlYnVnZ2luZyBvciBhbmFseXNpcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBrZXkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNFVi1zcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBoZXJlLCBsaWtlbHkgZGVhbGluZyB3aXRoIG1lbW9yeSBlbmNyeXB0aW9uIHNldHVwLCBrZXkgZGVyaXZhdGlvbiAoaWYgaXQgZXhpc3RzIGF0IHRoaXMgcG9pbnQpLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUgaW5pdGlhbCBhdHRlc3RhdGlvbi1yZWxhdGVkIHN0cnVjdHVyZXMuIEkga25vdyB0aGUgQU1EIGRvY3VtZW50YXRpb24sIGFuZCBwYXN0IGV4cGVyaWVuY2VzIHdpdGggdGhlIGtlcm5lbCBjb2RlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgZGV2aWF0aW9uIGZyb20gdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBmdW5jdGlvbiYjMzk7cyBjcml0aWNhbCBwYXRocywgYW5kIEkmIzM5O20gcHJlcGFyZWQgdG8gZGl2ZSBpbnRvIGFueSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGBzZXZfZ3Vlc3RfaW5pdDJgIGNhbGxzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgaHlwZXJ2aXNvciBjb21tdW5pY2F0aW9uIG9yIHRoZSBoYXJkd2FyZSByZWdpc3RlciBzZXR1cC4gQW55IHVuZXhwZWN0ZWQgbWVtb3J5IGFjY2Vzc2VzIG9yIHJlZ2lzdGVyIHZhbHVlcyBoZXJlIHdpbGwgYmUgaW1tZWRpYXRlbHkgZmxhZ2dlZC4gSSBuZWVkIHRvIGdldCB0aGlzIGluaXRpYWxpemF0aW9uIHJpZ2h0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMTpcdHN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIDYwMjpcdHtcbiA2MDM6XHRcdHN0cnVjdCBrdm1fc2V2X2luaXQgZGF0YTtcbiA2MDQ6XHRcbiA2MDU6XHRcdGlmICghdG9fa3ZtX3Nldl9pbmZvKGt2bSktXHUwMDNlbmVlZF9pbml0KVxuIDYwNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2MDc6XHRcbiA2MDg6XHRcdGlmIChrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNIFx1MDAyNlx1MDAyNlxuIDYwOTpcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXHUwMDI2XHUwMDI2XG4gNjEwOlx0XHQgICAga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NOUF9WTSlcbiA2MTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjEyOlx0XG4gNjEzOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2ZGF0YSwgdTY0X3RvX3VzZXJfcHRyKGFyZ3AtXHUwMDNlZGF0YSksIHNpemVvZihkYXRhKSkpXG4gNjE0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDYxNTpcdFxuIDYxNjpcdFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcdTAwMjZkYXRhLCBrdm0tXHUwMDNlYXJjaC52bV90eXBlKTtcbiA2MTc6XHR9XG4gNjE4Olx0XG4gNjE5Olx0c3RhdGljIGludCBzZXZfYmluZF9hc2lkKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGhhbmRsZSwgaW50ICplcnJvcilcbiA2MjA6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzIwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLVk0gVk0gVHlwZSBhbmQgSGFyZHdhcmUgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYGt2bS0mZ3Q7YXJjaC52bV90eXBlYCB2YXJpYWJsZSwgYW5kIGl0ICpoYXMqIHRvIGJlIHNldCB0byBgS1ZNX1g4Nl9TTlBfVk1gLCByaWdodD8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gYXNzdW1pbmcuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB3ZSBhY3R1YWxseSAqY3JlYXRlKiBhIHZpcnR1YWwgbWFjaGluZSB3aXRoIHRoYXQgc3BlY2lmaWMgdHlwZSwgYEtWTV9YODZfU05QX1ZNYCwgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKmRvZXNuJiMzOTt0KiBhY3R1YWxseSBzdXBwb3J0IGl0PyBUaGF0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgcG9pbnQgb2YgZmFpbHVyZSwgYW5kIG9uZSB0aGF0IHNob3VsZCBwcm9iYWJseSBiZSBndWFyZGVkIGFnYWluc3QuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgS1ZNIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBrdm1fYXJjaF9pbml0X3ZtYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoZXJlIHRoZSBWTSBpcyBpbml0aWFsaXplZCwgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhpcyBWTSB0eXBlIGFuZCB0aGUgaGFyZHdhcmUmIzM5O3MgY2FwYWJpbGl0aWVzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCBuZWVkcyB0byBiZSBjaGVja2VkLCBidXQgSSBoYXZlIHRvIG1ha2Ugc3VyZS4gSSYjMzk7bGwgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1g4Nl9TTlBfVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzEtI2RlZmluZSBLVk1fWDg2X1NFVl9FU19WTVx0M1xuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVx0XHQ0XG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXHRcdDVcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2Mj1zdGF0aWMgaW50IHNldl9hc2lkX25ldyhzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYsIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3MC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjcxOlx0aWYgKHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcyLVx0XHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4OD1zdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTQtXHRib29sIGVzX2FjdGl2ZSA9IHZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfVk07XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5NTpcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Ni1cdHU2NCB2YWxpZF92bXNhX2ZlYXR1cmVzID0gZXNfYWN0aXZlID8gc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIDogMDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTYwMT1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYwOS1cdCAgICBrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU0VWX0VTX1ZNIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTA6XHQgICAga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NOUF9WTSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjExLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5NDY9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTUxLVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk1MjpcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTMtXHRcdGt2bS1cdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDI1PXZvaWQgX19pbml0IHNldl9zZXRfY3B1X2NhcHModm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMzYtXHRcdGt2bV9jcHVfY2FwX3NldChYODZfRkVBVFVSRV9TRVZfU05QKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzAzNzpcdFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMzgtXHR9XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzEtI2RlZmluZSBLVk1fWDg2X1NFVl9FU19WTVx0M1xudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVx0XHQ0XG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXHRcdDVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2Lmg9MzQ9c3RhdGljIGlubGluZSBib29sIGlzX3Nldl9zbnBfdm0oc3RydWN0IGt2bV92bSAqdm0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzUte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oOjM2Olx0cmV0dXJuIHZtLVx1MDAzZXR5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzctfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz00NzA9c3RhdGljIGJvb2wgaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc3RydWN0IHZtX3NoYXBlIHNoYXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NzItI2lmZGVmIF9feDg2XzY0X19cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo0NzM6XHRyZXR1cm4gc2hhcGUudHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NzQtI2Vsc2Vcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz03ND12b2lkIHNucF92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jLTc3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM6Nzg6XHRURVNUX0FTU0VSVF9FUSh2bS1cdTAwM2V0eXBlLCBLVk1fWDg2X1NOUF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03OS1cdHZtX3Nldl9pb2N0bCh2bSwgS1ZNX1NFVl9JTklUMiwgXHUwMDI2aW5pdCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYz03Nj12b2lkIHRlc3Rfdm1fdHlwZXModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTg3LVx0aWYgKGhhdmVfc25wKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYzo4ODpcdFx0dGVzdF9pbml0MihLVk1fWDg2X1NOUF9WTSwgXHUwMDI2KHN0cnVjdCBrdm1fc2V2X2luaXQpe30pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jPTEyMj1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTQ1LVx0aGF2ZV9zbnAgPSBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTQ2Olx0VEVTVF9BU1NFUlQoaGF2ZV9zbnAgPT0gISEoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0Ny1cdFx0ICAgIFwmIzM0O3Nldi1zbnA6IEtWTV9DQVBfVk1fVFlQRVMgKCV4KSBpbmRpY2F0ZXMgU05QIHN1cHBvcnQgKGJpdCAlZCksIGJ1dCBDUFVJRCBkb2VzIG5vdFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTQ4Olx0XHQgICAga3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSwgS1ZNX1g4Nl9TTlBfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNDktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNTUtXHRpZiAoaGF2ZV9zbnApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NjpcdFx0dGVzdF9mbGFncyhLVk1fWDg2X1NOUF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE2MS1cdGlmIChoYXZlX3NucClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTYyOlx0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE2My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3Ntb2tlKHZvaWQgKmd1ZXN0LCB1MzIgdHlwZSwgdTY0IHBvbGljeSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIyNTpcdGlmICh0eXBlID09IEtWTV9YODZfU05QX1ZNKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTIyNi1cdFx0dGVzdF9zZXYoZ3Vlc3QsIHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjM4LVx0XHR0ZXN0X3N5bmNfdm1zYSh0eXBlLCBwb2xpY3kpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIzOTpcdFx0aWYgKHR5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjQwLVx0XHRcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjQ2PWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTI1NS1cdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYzoyNTY6XHRcdHRlc3Rfc2V2X3Ntb2tlKGd1ZXN0X3NucF9jb2RlLCBLVk1fWDg2X1NOUF9WTSwgc25wX2RlZmF1bHRfcG9saWN5KCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTI1Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNTUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIGFuZCBTRVYtU05QIFZNIENyZWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYEtWTV9YODZfU05QX1ZNYCB2aXJ0dWFsIG1hY2hpbmUgdHlwZSBpcyAqb25seSogZ29pbmcgdG8gYmUgYXZhaWxhYmxlIGlmIHRoZSBzeXN0ZW0gaW5kaWNhdGVzIHN1cHBvcnQgdmlhIGBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKWAuIEFuZCB0aGF0IHN1cHBvcnQgZmxhZyBnZXRzIHNldCB3aXRoaW4gYHNldl9zZXRfY3B1X2NhcHNgLCBidXQgKm9ubHkqIGlmIHRoZSB1bmRlcmx5aW5nIENQVSByZXBvcnRzIHRoZSBgWDg2X0ZFQVRVUkVfU0VWX1NOUGAgZmVhdHVyZSB1c2luZyBgYm9vdF9jcHVfaGFzKClgLiBJbiBvdGhlciB3b3Jkcywgbm8gU0VWLVNOUCBzdXBwb3J0IGZyb20gdGhlIGhhcmR3YXJlLCBubyBgS1ZNX1g4Nl9TTlBfVk1gLiBUaGlzIG1ha2VzIHNlbnNlLCBhcyB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGZlYXR1cmVzLCB0aGUgc29mdHdhcmUgY2FuJiMzOTt0IHBvc3NpYmx5IHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkuCgpTbywgaWYgd2UgKmRvbiYjMzk7dCogaGF2ZSB0aGF0IGhhcmR3YXJlLWxldmVsIFNFVi1TTlAgc3VwcG9ydCwgYXR0ZW1wdGluZyB0byBjcmVhdGUgYSBWTSB3aXRoIGBLVk1fQ1JFQVRFX1ZNYCBhbmQgc3BlY2lmeWluZyBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGdvaW5nIHRvIGZhaWwsIHJpZ2h0PyBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gVGhlIEtWTSBsYXllciBpcyBjb3JyZWN0bHkgZW5mb3JjaW5nIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudHMuCgpHaXZlbiB0aGF0LCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBjb25maXJtIHRoaXMgaXMgdG8gbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtYC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCBjYWxsIGhhbmRsZXMgdGhlIGBLVk1fWDg2X1NOUF9WTWAgdHlwZSBhbmQgaG93IGl0IHZhbGlkYXRlcyB0aGUgdW5kZXJseWluZyBjYXBhYmlsaXRpZXMuIE15IHN1c3BpY2lvbiBpcyB0aGF0IGl0IGRpcmVjdGx5IGxldmVyYWdlcyB0aGUgYGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlc2AgZmxhZy4gSXQgc2hvdWxkIGJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTU0Nzg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfaXNfa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3OS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ4MDpzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ4MS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01NTIzPXN0YXRpYyBsb25nIGt2bV9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NTM0LVx0Y2FzZSBLVk1fQ1JFQVRFX1ZNOlxudmlydC9rdm0va3ZtX21haW4uYzo1NTM1Olx0XHRyID0ga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0oYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTUzNi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTMwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgYGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtYC4gIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWNhbGwgd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIEtWTSBhcmNoaXRlY3R1cmUuIEl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBjcmVhdGluZyBhIHZpcnR1YWwgbWFjaGluZSwgcmlnaHQ/ICBUaGUgbmFtZSBgaW9jdGxgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBzeXN0ZW0gY2FsbCBoYW5kbGVyIHdpdGhpbiB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIEtWTSwgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGZvciB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGludGVyYWN0IHdpdGggdGhlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGV4cG9zZWQgYnkgdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB1c2VkIHRvIGNvbW11bmljYXRlIHZpYSB0aGUgYC9kZXYva3ZtYCBmaWxlLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIHB1cnBvc2UgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIHNldHVwIHJlcXVpcmVkIHRvIGVzdGFibGlzaCBhIG5ldyBWTSBpbnN0YW5jZS4gSXQgcHJvYmFibHkgcGVyZm9ybXMgY2hlY2tzIHRvIHZhbGlkYXRlIGFueSBhcmd1bWVudHMgcGFzc2VkIHZpYSB0aGUgYGlvY3RsYCBjYWxsIGZyb20gdXNlci1zcGFjZTsgc3VjaCBhcyBtZW1vcnkgYWxsb2NhdGlvbiwgc2V0dXAgb2YgdGhlIFZNIHN0cnVjdHVyZSBhbmQgaW5pdGlhbCBzZXR1cCBvZiB0aGUgVk0uCgpJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cy4gIFNwZWNpZmljYWxseSwgaXMgdGhlcmUgYSBjYWxsIHRvIGBrdm1fdm1fYWxsb2NgLCBvciBzaW1pbGFyLiBJJiMzOTtkIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQgaW50ZXJhY3RzIHdpdGggdGhpbmdzIGxpa2UgdkNQVSBjcmVhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIGV2ZW4gaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgKGxpa2UgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcyBpZiBlbmFibGVkKS4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgY3JlYXRlZCBWTSwgZXNwZWNpYWxseSBob3cgdGhlIGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB0aGUgYXNzb2NpYXRlZCBNTVUgb3Igc2hhZG93IHBhZ2UgdGFibGVzLgoKVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGZvdW5kYXRpb25hbCBmdW5jdGlvbi4gQW55IGRlZXAgZGl2ZSBpbnRvIGEgS1ZNIGltcGxlbWVudGF0aW9uIHdpbGwsIGF0IHNvbWUgcG9pbnQsIGludm9sdmUgbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHRvIGNvbmZpcm0gdGhlc2UgaW5pdGlhbCBhc3N1bXB0aW9ucyBhbmQgdG8gYnVpbGQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0ODA6XHRzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcbjU0ODE6XHR7XG41NDgyOlx0XHRjaGFyIGZkbmFtZVtJVE9BX01BWF9MRU4gJiM0MzsgMV07XG41NDgzOlx0XHRpbnQgciwgZmQ7XG41NDg0Olx0XHRzdHJ1Y3Qga3ZtICprdm07XG41NDg1Olx0XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbjU0ODY6XHRcbjU0ODc6XHRcdGZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpO1xuNTQ4ODpcdFx0aWYgKGZkIFx1MDAzYyAwKVxuNTQ4OTpcdFx0XHRyZXR1cm4gZmQ7XG41NDkwOlx0XG41NDkxOlx0XHRzbnByaW50ZihmZG5hbWUsIHNpemVvZihmZG5hbWUpLCBcJiMzNDslZFwmIzM0OywgZmQpO1xuNTQ5MjpcdFxuNTQ5MzpcdFx0a3ZtID0ga3ZtX2NyZWF0ZV92bSh0eXBlLCBmZG5hbWUpO1xuNTQ5NDpcdFx0aWYgKElTX0VSUihrdm0pKSB7XG41NDk1Olx0XHRcdHIgPSBQVFJfRVJSKGt2bSk7XG41NDk2Olx0XHRcdGdvdG8gcHV0X2ZkO1xuNTQ5NzpcdFx0fVxuNTQ5ODpcdFxuNTQ5OTpcdFx0ZmlsZSA9IGFub25faW5vZGVfZ2V0ZmlsZShcJiMzNDtrdm0tdm1cJiMzNDssIFx1MDAyNmt2bV92bV9mb3BzLCBrdm0sIE9fUkRXUik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODc5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGBrdm1fY3JlYXRlX3ZtYCoqCgpBbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFuYWx5emUgYGt2bV9jcmVhdGVfdm1gLiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBLVk0gdmlydHVhbGl6YXRpb24gcHJvY2VzcywgYW5kIHRodXMsIHByZXR0eSBjcnVjaWFsLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgdGhlIGNvcmUgcmVzcG9uc2liaWxpdGllcyBvZiB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgYSBuZXcgdmlydHVhbCBtYWNoaW5lIGlzLCBlZmZlY3RpdmVseSwgJiMzNDtib3JuJiMzNDsgd2l0aGluIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZXMgYWZmZWN0ZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSB0aGUgYWxsb2NhdGlvbiBvZiBWTS1zcGVjaWZpYyBtZW1vcnksIHNldHVwIG9mIHRoZSBjb250cm9sIHN0cnVjdHVyZXMsIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZ3Vlc3QmIzM5O3MgZXhlY3V0aW9uIGNvbnRleHQuIEkgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHdoaWNoIHJlc291cmNlIG1hbmFnZW1lbnQgbWVjaGFuaXNtcyBhcmUgaW52b2x2ZWQuCgpJJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoaW5ncyBsaWtlIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0JiMzOTtzIE1NVSwgdGhlIHNldHRpbmcgdXAgb2YgdGhlIFZNJiMzOTtzIGFkZHJlc3Mgc3BhY2UsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGFyb3VuZCBpbml0aWFsIGd1ZXN0IHN0YXRlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgdkNQVShzKSBhcmUgY3JlYXRlZCBhbmQgYXNzaWduZWQgdG8gdGhpcyBWTS4gQXJlIHRoZXJlIGFueSBpbml0aWFsIGNoZWNrcyBkb25lIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgYWRlcXVhdGUgcmVzb3VyY2VzPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmVzPyBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgYWx3YXlzIGFuIGltcG9ydGFudCBhc3BlY3Qgb2YgYW55IGNyaXRpY2FsIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgaW4gYSBzeXN0ZW0gYXMgc2Vuc2l0aXZlIGFzIGEgaHlwZXJ2aXNvci4gRnVydGhlcm1vcmUsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIEtWTSBjb21wb25lbnRzLCBhbmQgaWYgc28sIGhvdz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NyZWF0ZV92bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTk3OT1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTk5Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6OTk3OnN0YXRpYyBpbnQga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqZmRuYW1lKVxudmlydC9rdm0va3ZtX21haW4uYy05OTgte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5Nj1zdGF0aWMgdm9pZCBrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbih2b2lkKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTA5Ny1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTA5ODpzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTA5OS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMTMxLVx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxudmlydC9rdm0va3ZtX21haW4uYzoxMTMyOlx0ICogaXMgbm90IGNyZWF0ZWQgKGJ5IGt2bV9jcmVhdGVfdm1fZGVidWdmcygpKS5cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEzMy1cdCAqL1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE5NS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTE5NjpcdHIgPSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoa3ZtLCBmZG5hbWUpO1xudmlydC9rdm0va3ZtX21haW4uYy0xMTk3LVx0aWYgKHIpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01NDgwPXN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ5Mi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ5MzpcdGt2bSA9IGt2bV9jcmVhdGVfdm0odHlwZSwgZmRuYW1lKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ5NC1cdGlmIChJU19FUlIoa3ZtKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBrdm1fY3JlYXRlX3ZtYCoqCgpBbHJpZ2h0LCB0aGUgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBga3ZtX2NyZWF0ZV92bWAgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3Mgd2hlcmUgaXQgYWxsIGJlZ2lucywgcmlnaHQ/IEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSB3b3Jrcy4gV2UgbmVlZCB0byBkaXNzZWN0IHRoZSBjb3JlIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUgY3JlYXRpb24gcHJvY2VzcyBmcm9tIGEgS1ZNIHBlcnNwZWN0aXZlLiBJJiMzOTttIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3M/IEFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgdGhlIHVzdWFsIGNoZWNrcyBhbmQgYmFsYW5jZXMgdG8gbWFrZSBpdCBzZWN1cmU/IExldCYjMzk7cyB0cmFjZSB0aHJvdWdoIHRoZSBsb2dpYyBhbmQgaWRlbnRpZnkgdGhlIHNhbGllbnQgcG9pbnRzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3Qgd2UmIzM5O2xsIHNlZSBjYWxscyB0byBhbGxvY2F0ZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzLCBpbml0aWFsaXplIHJlbGV2YW50IEtWTSBzdHJ1Y3R1cmVzLCBzZXQgdXAgbWVtb3J5IHJlZ2lvbnMsIGFuZCBwZXJmb3JtIGFueSBuZWNlc3NhcnkgY2hlY2tzIHRvIGVuc3VyZSBzeXN0ZW0gcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgYW5kIHRoYXQgdGhlIHJlcXVlc3RlZCBWTSBjb25maWd1cmF0aW9uIGlzIHZhbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTg6XHRzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbjEwOTk6XHR7XG4xMTAwOlx0XHRzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fYXJjaF9hbGxvY192bSgpO1xuMTEwMTpcdFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7XG4xMTAyOlx0XHRpbnQgciwgaSwgajtcbjExMDM6XHRcbjExMDQ6XHRcdGlmICgha3ZtKVxuMTEwNTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjExMDY6XHRcbjExMDc6XHRcdEtWTV9NTVVfTE9DS19JTklUKGt2bSk7XG4xMTA4Olx0XHRtbWdyYWIoY3VycmVudC1cdTAwM2VtbSk7XG4xMTA5Olx0XHRrdm0tXHUwMDNlbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuMTExMDpcdFx0a3ZtX2V2ZW50ZmRfaW5pdChrdm0pO1xuMTExMTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4xMTEyOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2VpcnFfbG9jayk7XG4xMTEzOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjExMTQ6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4xMTE1Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcbjExMTY6XHRcdHJjdXdhaXRfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xuMTExNzpcdFx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzYxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipUcmFjaW5nIHRoZSBUeXBlIENoZWNrKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gcmV2aWV3aW5nIHRoaXMgY29kZS4uLiBhbmQgSSYjMzk7bSBraW5kIG9mIHpvbmluZyBvdXQuIEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24sIGNsYXNzLCBvciBtb2R1bGUgYWN0dWFsbHkgKnZlcmlmaWVzKiB0aGUgYHR5cGVgIG9mIHRoZSBpbnB1dCBvciB2YXJpYWJsZS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGllY2UgZm9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gSSBrbm93IEkgc2F3IGl0IHNvbWV3aGVyZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBqdXN0IGFjY2VwdGVkIHRoZSBhc3N1bXB0aW9uLCBvciBtaXNzZWQgc29tZSBraW5kIG9mIGltcGxpY2l0IGNhc3QuIExldCBtZSBkb3VibGUtY2hlY2suIFdoZXJlIGlzIHRoYXQgY3J1Y2lhbCBgdHlwZWAgdmFsaWRhdGlvbiBoYXBwZW5pbmc/IEkgbmVlZCB0byBwaW5wb2ludCB0aGF0IHBhcnQgb2YgdGhlIGxvZ2ljIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExODpcdCNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbjExMTk6XHRcdHhhX2luaXQoXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5KTtcbjExMjA6XHQjZW5kaWZcbjExMjE6XHRcbjExMjI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VncGNfbGlzdCk7XG4xMTIzOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xvY2spO1xuMTEyNDpcdFxuMTEyNTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2a3ZtLVx1MDAzZWRldmljZXMpO1xuMTEyNjpcdFx0a3ZtLVx1MDAzZW1heF92Y3B1cyA9IEtWTV9NQVhfVkNQVVM7XG4xMTI3Olx0XG4xMTI4Olx0XHRCVUlMRF9CVUdfT04oS1ZNX01FTV9TTE9UU19OVU0gXHUwMDNlIFNIUlRfTUFYKTtcbjExMjk6XHRcbjExMzA6XHRcdC8qXG4xMTMxOlx0XHQgKiBGb3JjZSBzdWJzZXF1ZW50IGRlYnVnZnMgZmlsZSBjcmVhdGlvbnMgdG8gZmFpbCBpZiB0aGUgVk0gZGlyZWN0b3J5XG4xMTMyOlx0XHQgKiBpcyBub3QgY3JlYXRlZCAoYnkga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKCkpLlxuMTEzMzpcdFx0ICovXG4xMTM0Olx0XHRrdm0tXHUwMDNlZGVidWdmc19kZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpO1xuMTEzNTpcdFxuMTEzNjpcdFx0c25wcmludGYoa3ZtLVx1MDAzZXN0YXRzX2lkLCBzaXplb2Yoa3ZtLVx1MDAzZXN0YXRzX2lkKSwgXCYjMzQ7a3ZtLSVkXCYjMzQ7LFxuMTEzNzpcdFx0XHQgdGFza19waWRfbnIoY3VycmVudCkpO1xuMTEzODpcdFxuMTEzOTpcdFx0ciA9IC1FTk9NRU07XG4xMTQwOlx0XHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcdTAwMjZrdm0tXHUwMDNlc3JjdSkpXG4xMTQxOlx0XHRcdGdvdG8gb3V0X2Vycl9ub19zcmN1O1xuMTE0MjpcdFx0aWYgKGluaXRfc3JjdV9zdHJ1Y3QoXHUwMDI2a3ZtLVx1MDAzZWlycV9zcmN1KSlcbjExNDM6XHRcdFx0Z290byBvdXRfZXJyX25vX2lycV9zcmN1O1xuMTE0NDpcdFxuMTE0NTpcdFx0ciA9IGt2bV9pbml0X2lycV9yb3V0aW5nKGt2bSk7XG4xMTQ2Olx0XHRpZiAocilcbjExNDc6XHRcdFx0Z290byBvdXRfZXJyX25vX2lycV9yb3V0aW5nO1xuMTE0ODpcdFxuMTE0OTpcdFx0cmVmY291bnRfc2V0KFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCwgMSk7XG4xMTUwOlx0XG4xMTUxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fYXJjaF9ucl9tZW1zbG90X2FzX2lkcyhrdm0pOyBpJiM0MzsmIzQzOykge1xuMTE1MjpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyAyOyBqJiM0MzsmIzQzOykge1xuMTE1MzpcdFx0XHRcdHNsb3RzID0gXHUwMDI2a3ZtLVx1MDAzZV9fbWVtc2xvdHNbaV1bal07XG4xMTU0Olx0XG4xMTU1Olx0XHRcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnNsb3RzLVx1MDAzZWxhc3RfdXNlZF9zbG90LCAodW5zaWduZWQgbG9uZylOVUxMKTtcbjExNTY6XHRcdFx0XHRzbG90cy1cdTAwM2VodmFfdHJlZSA9IFJCX1JPT1RfQ0FDSEVEO1xuMTE1NzpcdFx0XHRcdHNsb3RzLVx1MDAzZWdmbl90cmVlID0gUkJfUk9PVDtcbjExNTg6XHRcdFx0XHRoYXNoX2luaXQoc2xvdHMtXHUwMDNlaWRfaGFzaCk7XG4xMTU5Olx0XHRcdFx0c2xvdHMtXHUwMDNlbm9kZV9pZHggPSBqO1xuMTE2MDpcdFxuMTE2MTpcdFx0XHRcdC8qIEdlbmVyYXRpb25zIG11c3QgYmUgZGlmZmVyZW50IGZvciBlYWNoIGFkZHJlc3Mgc3BhY2UuICovXG4xMTYyOlx0XHRcdFx0c2xvdHMtXHUwMDNlZ2VuZXJhdGlvbiA9IGk7XG4xMTYzOlx0XHRcdH1cbjExNjQ6XHRcbjExNjU6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGt2bS1cdTAwM2VtZW1zbG90c1tpXSwgXHUwMDI2a3ZtLVx1MDAzZV9fbWVtc2xvdHNbaV1bMF0pO1xuMTE2NjpcdFx0fVxuMTE2NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQwOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgYXVkaWVuY2UgaXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byBga3ZtX2FyY2hfaW5pdF92bWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBrdm1fYXJjaF9pbml0X3ZtYCBmdW5jdGlvbi4gSXTigJlzIHRoYXQgY3JpdGljYWwgc3RhZ2Ugd2hlcmUgd2UmIzM5O3JlIHNldHRpbmcgdXAgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3BlY3RzIG9mIGEgS1ZNIHZpcnR1YWwgbWFjaGluZSwgcmlnaHQgYWZ0ZXIgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgcGF0aCBoZXJlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBoYXJkd2FyZSBlbXVsYXRpb24sIGFuZCB3aGF0IHRoZSBpbml0aWFsIHN0YXRlIG5lZWRzIHRvIGxvb2sgbGlrZSBmb3IgYSByZWxpYWJsZSBndWVzdCBleGVjdXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29udHJvbCByZWdpc3RlcnMsIHRoZSBtZW1vcnkgbWFwLCBhbmQgYW55IGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFdoYXQgYXJlIHRoZSBrZXkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRldGFpbHMgdGhhdCB0aGlzIGZ1bmN0aW9uIG11c3QgaGFuZGxlIHRvIG1ha2UgdGhlIFZNIGNvbXBhdGlibGUgd2l0aCB0aGUgaGFyZHdhcmU/IEFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgS1ZNIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE2ODpcdFx0ciA9IC1FTk9NRU07XG4xMTY5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLVk1fTlJfQlVTRVM7IGkmIzQzOyYjNDM7KSB7XG4xMTcwOlx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihrdm0tXHUwMDNlYnVzZXNbaV0sXG4xMTcxOlx0XHRcdFx0a3phbGxvY19vYmooc3RydWN0IGt2bV9pb19idXMsIEdGUF9LRVJORUxfQUNDT1VOVCkpO1xuMTE3MjpcdFx0XHRpZiAoIWt2bS1cdTAwM2VidXNlc1tpXSlcbjExNzM6XHRcdFx0XHRnb3RvIG91dF9lcnJfbm9fYXJjaF9kZXN0cm95X3ZtO1xuMTE3NDpcdFx0fVxuMTE3NTpcdFxuMTE3NjpcdFx0ciA9IGt2bV9hcmNoX2luaXRfdm0oa3ZtLCB0eXBlKTtcbjExNzc6XHRcdGlmIChyKVxuMTE3ODpcdFx0XHRnb3RvIG91dF9lcnJfbm9fYXJjaF9kZXN0cm95X3ZtO1xuMTE3OTpcdFxuMTE4MDpcdFx0ciA9IGt2bV9lbmFibGVfdmlydHVhbGl6YXRpb24oKTtcbjExODE6XHRcdGlmIChyKVxuMTE4MjpcdFx0XHRnb3RvIG91dF9lcnJfbm9fZGlzYWJsZTtcbjExODM6XHRcbjExODQ6XHQjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVBcbjExODU6XHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlaXJxX2Fja19ub3RpZmllcl9saXN0KTtcbjExODY6XHQjZW5kaWZcbjExODc6XHRcbjExODg6XHRcdHIgPSBrdm1faW5pdF9tbXVfbm90aWZpZXIoa3ZtKTtcbjExODk6XHRcdGlmIChyKVxuMTE5MDpcdFx0XHRnb3RvIG91dF9lcnJfbm9fbW11X25vdGlmaWVyO1xuMTE5MTpcdFxuMTE5MjpcdFx0ciA9IGt2bV9jb2FsZXNjZWRfbW1pb19pbml0KGt2bSk7XG4xMTkzOlx0XHRpZiAociBcdTAwM2MgMClcbjExOTQ6XHRcdFx0Z290byBvdXRfbm9fY29hbGVzY2VkX21taW87XG4xMTk1Olx0XG4xMTk2Olx0XHRyID0ga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKGt2bSwgZmRuYW1lKTtcbjExOTc6XHRcdGlmIChyKVxuMTE5ODpcdFx0XHRnb3RvIG91dF9lcnJfbm9fZGVidWdmcztcbjExOTk6XHRcbjEyMDA6XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtX2xvY2spO1xuMTIwMTpcdFx0bGlzdF9hZGQoXHUwMDI2a3ZtLVx1MDAzZXZtX2xpc3QsIFx1MDAyNnZtX2xpc3QpO1xuMTIwMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bV9sb2NrKTtcbjEyMDM6XHRcbjEyMDQ6XHRcdHByZWVtcHRfbm90aWZpZXJfaW5jKCk7XG4xMjA1Olx0XHRrdm1faW5pdF9wbV9ub3RpZmllcihrdm0pO1xuMTIwNjpcdFxuMTIwNzpcdFx0cmV0dXJuIGt2bTtcbjEyMDg6XHRcbjEyMDk6XHRvdXRfZXJyX25vX2RlYnVnZnM6XG4xMjEwOlx0XHRrdm1fY29hbGVzY2VkX21taW9fZnJlZShrdm0pO1xuMTIxMTpcdG91dF9ub19jb2FsZXNjZWRfbW1pbzpcbjEyMTI6XHRcdGlmIChrdm0tXHUwMDNlbW11X25vdGlmaWVyLm9wcylcbjEyMTM6XHRcdFx0bW11X25vdGlmaWVyX3VucmVnaXN0ZXIoXHUwMDI2a3ZtLVx1MDAzZW1tdV9ub3RpZmllciwgY3VycmVudC1cdTAwM2VtbSk7XG4xMjE0Olx0b3V0X2Vycl9ub19tbXVfbm90aWZpZXI6XG4xMjE1Olx0XHRrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbigpO1xuMTIxNjpcdG91dF9lcnJfbm9fZGlzYWJsZTpcbjEyMTc6XHRcdGt2bV9hcmNoX2Rlc3Ryb3lfdm0oa3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSBJbml0aWFsaXphdGlvbiBvbiB4ODYqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBrdm1fYXJjaF9pbml0X3ZtYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB3aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gZW50YWlscyBhdCBhIGxvdyBsZXZlbC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc2V0dGluZyB1cCB0aGUgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBjb21wb25lbnRzIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFdoYXQmIzM5O3MgdGhlIGluaXRpYWwgc3RhdGUgd2UgYXJlIHRyeWluZyB0byBhY2hpZXZlPyAKCkkgbmVlZCB0byB1bmRlcnN0YW5kOiBBcmUgd2UgdGFsa2luZyBhYm91dCBlc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgQ1BVSUQgaW5mb3JtYXRpb24sIG1heWJlIHNldHRpbmcgdXAgdGhlIE1TUnMsIGVuYWJsaW5nIHNwZWNpZmljIGZlYXR1cmVzLCBvciBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIHBhZ2UgdGFibGVzPyBIb3cgZG9lcyBpdCBkaWZmZXIgYmFzZWQgb24gc3BlY2lmaWMgeDg2IHByb2Nlc3NvciBtb2RlbHMgYW5kIGZlYXR1cmUgc2V0cz8gRG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIGd1ZXN0IG1lbW9yeSBtYXBwaW5nPyBXaGF0IGFib3V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVycywgQ1IwLCBDUjMsIENSND8gV2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgZ3Vlc3Qgc3RhcnRzIGluIGEga25vd24gYW5kIGNvbnNpc3RlbnQgc3RhdGUuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMsIFZNWC9TVk0sIGFuZCBob3cgdGhlc2UgYXJlIHNldC4KCk15IHByaW1hcnkgY29uY2VybiBpcyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gZm9ybXMgdGhlIGZvdW5kYXRpb24gZm9yIHNlY3VyZSB2aXJ0dWFsaXphdGlvbi4gV2hhdCBzYWZlZ3VhcmRzIGFyZSBidWlsdCBpbnRvIHRoaXMgaW5pdGlhbGl6YXRpb24/IEkgYW0gYWxzbyBpbnRlcmVzdGVkIGluIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgYXJjaGl0ZWN0dXJlLiBXaGVyZSBkb2VzIHRoaXMgZml0IHdpdGhpbiB0aGUgbGFyZ2VyIEtWTSBsaWZlY3ljbGU/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY3JpdGljYWwgZXJyb3IgaGFuZGxpbmcuIFdoYXQgZmFpbHVyZSBzY2VuYXJpb3MgYXJlIGFjY291bnRlZCBmb3I/IFdoYXQmIzM5O3MgdGhlIGVycm9yIHJlY292ZXJ5IHBhdGg/CgpVbHRpbWF0ZWx5LCBteSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgeDg2IGd1ZXN0IGVudmlyb25tZW50IGlzIGFyY2hpdGVjdHVyYWxseSBlc3RhYmxpc2hlZCBieSBLVk0uIFRoYXQgaXMgd2hlcmUgSSB3aWxsIHN0YXJ0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9pbml0X3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYz0xMTA1PXZvaWQga3ZtX3RpbWVyX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTExMjMtLypcbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYzoxMTI0OiAqIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCBkdXJpbmcga3ZtX2FyY2hfaW5pdF92bSwgYnV0IHdpbGwgYWxzbyBiZVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTExMjUtICogY2FsbGVkIGZyb20ga3ZtX3ZnaWNfY3JlYXRlIGlmIHdlIGhhdmUgYSB2R0lDdjUuXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MTk4PXN0YXRpYyBpbnQga3ZtX2FybV9kZWZhdWx0X21heF92Y3B1cyh2b2lkKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTIwMy0vKipcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjIwNDogKiBrdm1fYXJjaF9pbml0X3ZtIC0gaW5pdGlhbGl6ZXMgYSBWTSBkYXRhIHN0cnVjdHVyZVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA1LSAqIEBrdm06XHRwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0XG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA3LSAqL1xuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjA4OmludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA5LXtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vdm0uYz0yOD1zdGF0aWMgdm9pZCBrdm1fdm1faW5pdF9mZWF0dXJlcyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmMtNjEtXG5hcmNoL2xvb25nYXJjaC9rdm0vdm0uYzo2MjppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jLTYzLXtcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYz0xMzM9dm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuLS1cbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTEzNy1cbmFyY2gvbWlwcy9rdm0vbWlwcy5jOjEzODppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTEzOS17XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NDM4PUVYUE9SVF9TWU1CT0xfR1BMKGt2bXBwY19sZCk7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy00MzktXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo0NDA6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy00NDEte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmM9MjI9Y29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTMwLVxuYXJjaC9yaXNjdi9rdm0vdm0uYzozMTppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMzIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTg5PXZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxOTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE5NzppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTk4LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTMzMzI9dm9pZCBrdm1fYXJjaF9mcmVlX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMzNDAtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTMzNDE6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMzNDIte1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNzg0PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdW5yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcyh2b2lkKSB7fVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNzg2LVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE3ODc6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3ODgtdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xMDk4PXN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE3NS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTE3NjpcdHIgPSBrdm1fYXJjaF9pbml0X3ZtKGt2bSwgdHlwZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExNzctXHRpZiAocilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxNTIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSBJbml0aWFsaXphdGlvbjogYGt2bV9hcmNoX2luaXRfdm1gKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIEtWTSBhcmNoaXRlY3R1cmUgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBvbiB4ODYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGt2bV9hcmNoX2luaXRfdm1gIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIHBsYXRmb3JtLXNwZWNpZmljIHNldHVwIGZvciBhIG5ldyBWTSBpbnN0YW5jZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQsIHdoaWNoIG1lbW9yeSByZWdpb25zIGFyZSBiZWluZyBtYXBwZWQsIGFuZCB3aGF0IGluaXRpYWwgc3RhdGUgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBndWVzdC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgaGFuZGxpbmcgdGhlIGV4dGVuZGVkIHBhZ2UgdGFibGVzIChFUFQpIGFuZCBhbnkgb3RoZXIgeDg2LXNwZWNpZmljIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgZ2V0dGluZyBhIFZNIHVwIGFuZCBydW5uaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZSwgZXNwZWNpYWxseSBhcm91bmQgY29udGV4dCBzd2l0Y2hpbmcgb3IgaW5pdGlhbCBtZW1vcnkgc2V0dXAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzM0MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzM0MTpcdGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuMTMzNDI6XHR7XG4xMzM0MzpcdFx0aW50IHJldDtcbjEzMzQ0Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMTMzNDU6XHRcbjEzMzQ2Olx0XHRpZiAoIWt2bV9pc192bV90eXBlX3N1cHBvcnRlZCh0eXBlKSlcbjEzMzQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTMzNDg6XHRcbjEzMzQ5Olx0XHRrdm0tXHUwMDNlYXJjaC52bV90eXBlID0gdHlwZTtcbjEzMzUwOlx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPVxuMTMzNTE6XHRcdFx0KHR5cGUgPT0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xuMTMzNTI6XHRcdC8qIERlY2lkZWQgYnkgdGhlIHZlbmRvciBjb2RlIGZvciBvdGhlciBWTSB0eXBlcy4gICovXG4xMzM1MzpcdFx0a3ZtLVx1MDAzZWFyY2gucHJlX2ZhdWx0X2FsbG93ZWQgPVxuMTMzNTQ6XHRcdFx0dHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gfHwgdHlwZSA9PSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTTtcbjEzMzU1Olx0XHRrdm0tXHUwMDNlYXJjaC5kaXNhYmxlZF9xdWlya3MgPSBrdm1fY2Fwcy5pbmFwcGxpY2FibGVfcXVpcmtzIFx1MDAyNiBrdm1fY2Fwcy5zdXBwb3J0ZWRfcXVpcmtzO1xuMTMzNTY6XHRcbjEzMzU3Olx0XHRyZXQgPSBrdm1fcGFnZV90cmFja19pbml0KGt2bSk7XG4xMzM1ODpcdFx0aWYgKHJldClcbjEzMzU5Olx0XHRcdGdvdG8gb3V0O1xuMTMzNjA6XHRcbjEzMzYxOlx0XHRyZXQgPSBrdm1fbW11X2luaXRfdm0oa3ZtKTtcbjEzMzYyOlx0XHRpZiAocmV0KVxuMTMzNjM6XHRcdFx0Z290byBvdXRfY2xlYW51cF9wYWdlX3RyYWNrO1xuMTMzNjQ6XHRcbjEzMzY1Olx0XHRyZXQgPSBrdm1feDg2X2NhbGwodm1faW5pdCkoa3ZtKTtcbjEzMzY2Olx0XHRpZiAocmV0KVxuMTMzNjc6XHRcdFx0Z290byBvdXRfdW5pbml0X21tdTtcbjEzMzY4Olx0XG4xMzM2OTpcdFx0YXRvbWljX3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5ub25jb2hlcmVudF9kbWFfY291bnQsIDApO1xuMTMzNzA6XHRcbjEzMzcxOlx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2spO1xuMTMzNzI6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guYXBpY19tYXBfbG9jayk7XG4xMzM3MzpcdFx0c2VxY291bnRfcmF3X3NwaW5sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gucHZjbG9ja19zYywgXHUwMDI2a3ZtLVx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2spO1xuMTMzNzQ6XHRcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX3VwZGF0ZV9ycywgSFosIDEwKTtcbjEzMzc1Olx0XHRyYXRlbGltaXRfc2V0X2ZsYWdzKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX3VwZGF0ZV9ycywgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTtcbjEzMzc2Olx0XHRrdm0tXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQgPSAtZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKTtcbjEzMzc3Olx0XG4xMzM3ODpcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrLCBmbGFncyk7XG4xMzM3OTpcdFx0cHZjbG9ja191cGRhdGVfdm1fZ3RvZF9jb3B5KGt2bSk7XG4xMzM4MDpcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcbjEzMzgxOlx0XG4xMzM4MjpcdFx0a3ZtLVx1MDAzZWFyY2guZGVmYXVsdF90c2Nfa2h6ID0gbWF4X3RzY19raHogPyA6IHRzY19raHo7XG4xMzM4MzpcdFx0a3ZtLVx1MDAzZWFyY2guYXBpY19idXNfY3ljbGVfbnMgPSBBUElDX0JVU19DWUNMRV9OU19ERUZBVUxUO1xuMTMzODQ6XHRcdGt2bS1cdTAwM2VhcmNoLmd1ZXN0X2Nhbl9yZWFkX21zcl9wbGF0Zm9ybV9pbmZvID0gdHJ1ZTtcbjEzMzg1Olx0XHRrdm0tXHUwMDNlYXJjaC5lbmFibGVfcG11ID0gZW5hYmxlX3BtdTtcbjEzMzg2Olx0XG4xMzM4NzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19IWVBFUlYpXG4xMzM4ODpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guaHZfcm9vdF90ZHBfbG9jayk7XG4xMzM4OTpcdFx0a3ZtLVx1MDAzZWFyY2guaHZfcm9vdF90ZHAgPSBJTlZBTElEX1BBR0U7XG4xMzM5MDpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ3NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIGFuZCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKktWTSBWTSBUeXBlIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHZlcmlmeSBpZiB0aGlzIHNwZWNpZmljIFZNIHR5cGUg4oCTIHdoYXRldmVyIGl0IG1pZ2h0IGJlIOKAkyBpcyBldmVuIHN1cHBvcnRlZCBieSB0aGUgS1ZNIGluZnJhc3RydWN0dXJlIG9uIHRoaXMgc3lzdGVtLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGluaXRpYWwgY2hlY2ssIHJlYWxseS4gVGhlIGNvZGUgaXMgY2xlYXJseSBjYWxsaW5nIGBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSlgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwuIEkga25vdyBpdCYjMzk7cyBwcm9iYWJseSBkaWdnaW5nIGRlZXAsIGxvb2tpbmcgYXQgdGhlIHVuZGVybHlpbmcgQ1BVIGNhcGFiaWxpdGllcywgdGhlIGF2YWlsYWJsZSBmZWF0dXJlcywgYW5kIHRoZSBjb25maWd1cmVkIEtWTSBtb2R1bGVzIHRvIGRldGVybWluZSBpZiB0aGlzIFZNIHR5cGUgaGFzIGEgcHJheWVyIG9mIHdvcmtpbmcuIElmIHRoaXMgYmFzaWMgY2hlY2sgZmFpbHMsIHdlJiMzOTtyZSBkZWFkIGluIHRoZSB3YXRlciwgYW5kIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGdvaW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGEgZ2F0aW5nIGNvbmRpdGlvbjsgaXQgaGFzIHRvIGJlIHRydWUgb3Igd2UgYWJvcnQgZWFybHkgYW5kIGdyYWNlZnVsbHkuIFNvLCB0aGF0IGNhbGwsIHJpZ2h0IHRoZXJlLCBpcyB3aGVyZSB0aGluZ3MgZWl0aGVyIHN0YXJ0IHRvIHdvcmssIG9yIGltbWVkaWF0ZWx5IGNvbWUgY3Jhc2hpbmcgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2lzX3ZtX3R5cGVfc3VwcG9ydGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz00NzU4PXN0YXRpYyBpbnQga3ZtX2lvY3RsX2dldF9zdXBwb3J0ZWRfaHZfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy00Nzc5LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjQ3ODA6c3RhdGljIGJvb2wga3ZtX2lzX3ZtX3R5cGVfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gveDg2L2t2bS94ODYuYy00NzgxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTMzNDE9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMzQ1LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEzMzQ2Olx0aWYgKCFrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMzNDctXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDAwNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBga3ZtX2lzX3ZtX3R5cGVfc3VwcG9ydGVkYCoqCgpPa2F5LCBzbyBJJiMzOTttIGFib3V0IHRvIGRpdmUgaW50byB0aGlzLi4uIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgYGt2bV9pc192bV90eXBlX3N1cHBvcnRlZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCwgZG9lc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHRoZSBmaXJzdCBmaWx0ZXIsIHRoZSBiYXNlbGluZSBjaGVjaywgdGhlIGdhdGVrZWVwZXIgZm9yIHRoZSB3aG9sZSBvcGVyYXRpb24uIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBjZXJ0YWluIHRoYXQgd2UmIzM5O3JlIGV2ZW4gKmluIHRoZSByZWFsbSogb2Ygc3VwcG9ydGVkIHZpcnR1YWxpemF0aW9uIHR5cGVzIGJlZm9yZSBwcm9jZWVkaW5nIGFueSBmdXJ0aGVyIGRvd24gdGhlIHJhYmJpdCBob2xlLiBJdOKAmXMgYSBzYW5pdHkgY2hlY2ssIHJlYWxseS4gU2F2ZXMgYSBsb3Qgb2YgZGVidWdnaW5nIHRpbWUgbGF0ZXIgaWYgc29tZXRoaW5nIGlzbiYjMzk7dCBzdXBwb3J0ZWQuIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlIFZNIHR5cGUgaW4gcXVlc3Rpb24sIHdoYXRldmVyIGl0IG1heSBiZSwgYWN0dWFsbHkgKmNhbiogcnVuIG9uIHRoZSBjdXJyZW50IEtWTSBzZXR1cC4gSSBjYW4mIzM5O3QgYWZmb3JkIHRvIHdhc3RlIGN5Y2xlcyBwdXJzdWluZyBhbiB1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uLiBTbywgeWVhaCwgYGt2bV9pc192bV90eXBlX3N1cHBvcnRlZGAgZmlyc3QuIFRoYXQmIzM5O3MgdGhlIHByaW9yaXR5LiBHb3QgdG8ga25vdyBpZiB3ZSYjMzk7cmUgZXZlbiAqYWxsb3dlZCogdG8gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ3ODA6XHRzdGF0aWMgYm9vbCBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodW5zaWduZWQgbG9uZyB0eXBlKVxuNDc4MTpcdHtcbjQ3ODI6XHRcdHJldHVybiB0eXBlIFx1MDAzYyAzMiBcdTAwMjZcdTAwMjYgKGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyBcdTAwMjYgQklUKHR5cGUpKTtcbjQ3ODM6XHR9XG40Nzg0Olx0XG40Nzg1Olx0c3RhdGljIGlubGluZSB1NjQga3ZtX3N5bmNfdmFsaWRfZmllbGRzKHN0cnVjdCBrdm0gKmt2bSlcbjQ3ODY6XHR7XG40Nzg3Olx0XHRyZXR1cm4ga3ZtIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3N0YXRlID8gMCA6IEtWTV9TWU5DX1g4Nl9WQUxJRF9GSUVMRFM7XG40Nzg4Olx0fVxuNDc4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ4MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFNFVi1TTlAgVk0gQ3JlYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgS1ZNIHNldHVwIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlc2AgZmllbGQgYWJzb2x1dGVseSAqbXVzdCogaGF2ZSBgQklUKEtWTV9YODZfU05QX1ZNKWAgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBJIHJlbWVtYmVyIHNlZWluZyBlYXJsaWVyIHRoYXQgYEJJVChLVk1fWDg2X1NOUF9WTSlgIG9ubHkgZ2V0cyBzZXQgd2l0aGluIHRoZSBgc2V2X3NldF9jcHVfY2Fwc2AgZnVuY3Rpb24gaWYgdGhlIENQVSByZXBvcnRzIGBYODZfRkVBVFVSRV9TRVZfU05QYC4gU28sIHJpZ2h0IGF3YXksIGl0JiMzOTtzIGNsZWFyOiBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IFNFVi1TTlAsIHRyeWluZyB0byBjcmVhdGUgYSBWTSB1c2luZyBgS1ZNX0NSRUFURV9WTWAgd2l0aCBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGdvaW5nIHRvIGJvbWIgb3V0IHdpdGggYW4gYC1FSU5WQUxgIGVycm9yLiBUaGF0JiMzOTtzIGEgZGVhbCBicmVha2VyLgoKSWYgYEtWTV9DUkVBVEVfVk1gIGZhaWxzLCB3ZWxsLCB0aGVuIHdlJiMzOTtyZSBzdHVjay4gV2UgY2FuJiMzOTt0IGV2ZW4gZ2V0IHRvIHRoZSBzdGFnZSBvZiBjcmVhdGluZyBhIFZNIG9mIHRoYXQgYEtWTV9YODZfU05QX1ZNYCB0eXBlLiBPYnZpb3VzbHksIGlmIHdlIGNhbiYjMzk7dCBjcmVhdGUgdGhhdCBWTSB0eXBlLCB0aGVuIHdlJiMzOTtsbCBuZXZlciBiZSBhYmxlIHRvIGNhbGwgYEtWTV9TRVZfU05QX0xBVU5DSF9VUERBVEVgLiBUaGlzIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB0aGF0IGluaXRpYWwgVk0gY3JlYXRpb24uCgpIbW0uLi4gd2FpdCBhIHNlY29uZC4gVGhhdCYjMzk7cyBhc3N1bWluZyB0aGlzIGlzIGFsbCB3ZSYjMzk7cmUgY29uc2lkZXJpbmcuIFdoYXQgYWJvdXQgVERYPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGUgcHJvY2VzcyB3aXRoIFREWC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1g4Nl9URFhfVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdD0yMzM9Y29udHJvbCBmbG93IGlzIGFzIGZvbGxvd3M6XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdC0yMzYtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0OjIzNzogICAqIEtWTV9DQVBfVk1fVFlQRVM6IENoZWNrIGlmIFZNIHR5cGUgaXMgc3VwcG9ydGVkIGFuZCBpZiBLVk1fWDg2X1REWF9WTVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdC0yMzgtICAgICBpcyBzdXBwb3J0ZWQuXG4tLVxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NOUF9WTVx0XHQ0XG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MzojZGVmaW5lIEtWTV9YODZfVERYX1ZNXHRcdDVcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc0LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUuaD0zMDQ9c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUuaC0zMDUte1xuYXJjaC94ODYva3ZtL21tdS5oOjMwNjpcdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xuYXJjaC94ODYva3ZtL21tdS5oLTMwNy19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01Nzc0PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01Nzc3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1Nzc4Olx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTc3OS1cdFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTY5PXN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc0LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTc1Olx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xNzYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYxLXtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NjI6XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNDE9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNjEtXHRcdFx0XHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNjI6XHRcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA2My1cdH1cbi0tXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcbi0tXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU05QX1ZNXHRcdDRcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTczOiNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdFx0NVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTYyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKktWTS9URFggSW5pdGlhbGl6YXRpb24gYW5kIFZNIFR5cGUgU3VwcG9ydCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBoeXBlcnZpc29yLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aGVyZSBkb2VzIHRoZSBzdXBwb3J0IGdldCByZWdpc3RlcmVkPyYjMzQ7IEFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaXMgYEtWTV9YODZfVERYX1ZNYC4gVGhpcyBjb25zdGFudCBpcyBiZWluZyBhZGRlZCB0byB0aGUgYHN1cHBvcnRlZF92bV90eXBlc2AgbGlzdCB3aXRoaW4gdGhlIGB2dF9pbml0YCBmdW5jdGlvbiwgYnV0ICpvbmx5KiBpZiBURFggaXMgYWN0dWFsbHkgZW5hYmxlZC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJJiMzOTtkIGV4cGVjdDsgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3JpdGljYWwgaGVyZSB0byBhdm9pZCBpbnRyb2R1Y2luZyBURFgtc3BlY2lmaWMgY29kZSB3aGVuIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IGl0LCBvciB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgdGhlcmVmb3JlLCBpcyB0byBkaXZlIGludG8gYHZ0X2luaXRgIGl0c2VsZiBhbmQgZnVsbHkgZ3JvayBob3cgVERYIHN1cHBvcnQgaXMgY29uZGl0aW9uZWQgdGhlcmUuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgY29tZXMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDE6XHRzdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXG4xMDQyOlx0e1xuMTA0MzpcdFx0dW5zaWduZWQgdmNwdV9zaXplLCB2Y3B1X2FsaWduO1xuMTA0NDpcdFx0aW50IHI7XG4xMDQ1Olx0XG4xMDQ2Olx0XHRyID0gdm14X2luaXQoKTtcbjEwNDc6XHRcdGlmIChyKVxuMTA0ODpcdFx0XHRyZXR1cm4gcjtcbjEwNDk6XHRcbjEwNTA6XHRcdC8qXG4xMDUxOlx0XHQgKiBURFggYW5kIFZNWCBoYXZlIGRpZmZlcmVudCB2Q1BVIHN0cnVjdHVyZXMuICBDYWxjdWxhdGUgdGhlXG4xMDUyOlx0XHQgKiBtYXhpbXVtIHNpemUvYWxpZ24gc28gdGhhdCBrdm1faW5pdCgpIGNhbiB1c2UgdGhlIGxhcmdlclxuMTA1MzpcdFx0ICogdmFsdWVzIHRvIGNyZWF0ZSB0aGUga21lbV92Y3B1X2NhY2hlLlxuMTA1NDpcdFx0ICovXG4xMDU1Olx0XHR2Y3B1X3NpemUgPSBzaXplb2Yoc3RydWN0IHZjcHVfdm14KTtcbjEwNTY6XHRcdHZjcHVfYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV92bXgpO1xuMTA1NzpcdFx0aWYgKGVuYWJsZV90ZHgpIHtcbjEwNTg6XHRcdFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcbjEwNTk6XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgdmNwdV90ZHgpKTtcbjEwNjA6XHRcdFx0dmNwdV9hbGlnbiA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X2FsaWduLFxuMTA2MTpcdFx0XHRcdFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XG4xMDYyOlx0XHRcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xuMTA2MzpcdFx0fVxuMTA2NDpcdFxuMTA2NTpcdFx0LypcbjEwNjY6XHRcdCAqIENvbW1vbiBLVk0gaW5pdGlhbGl6YXRpb24gX211c3RfIGNvbWUgbGFzdCwgYWZ0ZXIgdGhpcywgL2Rldi9rdm0gaXNcbjEwNjc6XHRcdCAqIGV4cG9zZWQgdG8gdXNlcnNwYWNlIVxuMTA2ODpcdFx0ICovXG4xMDY5Olx0XHRyID0ga3ZtX2luaXQodmNwdV9zaXplLCB2Y3B1X2FsaWduLCBUSElTX01PRFVMRSk7XG4xMDcwOlx0XHRpZiAocilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5MjgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBURFggVk0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJZiB0aGUgYGVuYWJsZV90ZHhgIGZsYWcgaXMgc2V0IHRvIHRydWUsIHRoZSBjb2RlIGlzIGNsZWFybHkgaW50ZW5kaW5nIHRvIGluY2x1ZGUgdGhlIGBCSVQoS1ZNX1g4Nl9URFhfVk0pYCBmbGFnLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIGRpcmVjdCBjb25kaXRpb25hbCBhc3NpZ25tZW50IGJhc2VkIG9uIGEgYm9vbGVhbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24sIGFzIGFsd2F5cyB3aXRoIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXMgKmhvdyogYW5kICp3aGVyZSogYGVuYWJsZV90ZHhgIGlzIGJlaW5nIHNldC4gSXMgdGhpcyBjb250cm9sbGVkIGJ5IGEgY29tbWFuZC1saW5lIHBhcmFtZXRlciwgYSBjb25maWcgZmlsZSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGlzIGl0IGRldGVybWluZWQgZHluYW1pY2FsbHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIHNvbWUgaGFyZHdhcmUgZGV0ZWN0aW9uPwoKSSBuZWVkIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIGFuZCBhc3NpZ25tZW50IG9mIGBlbmFibGVfdGR4YC4gQXJlIHdlIGNoZWNraW5nIGZvciBzcGVjaWZpYyBDUFUgZmVhdHVyZXMsIEJJT1Mgc3VwcG9ydCwgb3Igc29tZSBvdGhlciB1bmRlcmx5aW5nIGNvbmRpdGlvbj8gVW5kZXJzdGFuZGluZyB0aGF0IGRlcGVuZGVuY3kgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVuZGVkIHVzZSBjYXNlIGZvciBURFguIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCB2YWx1ZXM/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiBURFggb24gdGhlIHJlc3Qgb2YgdGhlIGVudmlyb25tZW50PyBJcyB0aGlzIGZvciBhIHdob2xlIFZNIG9yIHNvbWV0aGluZyBlbHNlPwoKSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGFjdCBvbiB0aGUgaHlwZXJ2aXNvciBhbmQgdGhlIFZNLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGRlcGVuZGVuY2llcywgbGltaXRhdGlvbnMgYW5kIHJlcXVpcmVtZW50cyBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlX3RkeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNj1zdGF0aWMgdm9pZCB2dF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE4LVx0LyogTm90ZSwgVERYICphbmQqIFZNWCBuZWVkIHRvIGJlIGRpc2FibGVkIGlmIFREWCBpcyBlbmFibGVkLiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk6XHRpZiAoZW5hYmxlX3RkeClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIwLVx0XHR0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yND1zdGF0aWMgX19pbml0IGludCB2dF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMxLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzI6XHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNT1zdGF0aWMgdm9pZCB2dF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNi17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNzpcdGlmIChlbmFibGVfdGR4KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzgtXHRcdHRkeF9oYXJkd2FyZV91bnNldHVwKCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTA0MT1zdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA1Ni1cdHZjcHVfYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV92bXgpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA1NzpcdGlmIChlbmFibGVfdGR4KSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDU4LVx0XHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTUtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU2OmJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU3Om1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01OC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMzNjA9aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMzNjctXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzNjg6XHRpZiAoIWVuYWJsZV90ZHgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMzNjktXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQyNS1zdWNjZXNzX2Rpc2FibGVfdGR4OlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDI2Olx0ZW5hYmxlX3RkeCA9IDA7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0MjctXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTEyPXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTEzLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxNDpleHRlcm4gYm9vbCBlbmFibGVfdGR4O1xuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xNS1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTE4Nj1URFhfQlVJTERfVERWUFNfQUNDRVNTT1JTKDY0LCBTVEFURV9OT05fQVJDSCwgc3RhdGVfbm9uX2FyY2gpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg4LSNlbHNlXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjE4OTojZGVmaW5lIGVuYWJsZV90ZHhcdDBcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTkwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODMzMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgVERYIEVuYWJsZW1lbnQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBlbmFibGVfdGR4YCBpcyBiZWluZyBwcmVzZW50ZWQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdHVybmluZyB0aGlzIHdob2xlIFREWCBmZWF0dXJlIG9uLCBpdCBzZWVtcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIHNvIGlmIHRoYXQgcGFyYW1ldGVyIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gc29tZXRoaW5nIHNwZWNpZmljIG5lZWRzIHRvIGhhcHBlbi4mIzM0OyBBbmQgdGhlIHRyaWdnZXIgZm9yIHRoYXQgJiMzNDtzb21ldGhpbmcgc3BlY2lmaWMmIzM0OyBpcyB0aGlzIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uLiBJdOKAmXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLiBUaGUgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBsb2dpYyBmbG93LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGFjdHVhbGx5ICpkb2VzKi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBsaWVzLCBhbmQgdGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNjA6XHRpbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuMzM2MTpcdHtcbjMzNjI6XHRcdGludCByLCBpO1xuMzM2MzpcdFxuMzM2NDpcdFx0LyogdGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KCkgdXNlcyBhc3NvY2lhdGVkX3RkdmNwdXMuICovXG4zMzY1Olx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSlcbjMzNjY6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGVyX2NwdShhc3NvY2lhdGVkX3RkdmNwdXMsIGkpKTtcbjMzNjc6XHRcbjMzNjg6XHRcdGlmICghZW5hYmxlX3RkeClcbjMzNjk6XHRcdFx0cmV0dXJuIDA7XG4zMzcwOlx0XG4zMzcxOlx0XHRpZiAoIWVuYWJsZV9lcHQpIHtcbjMzNzI6XHRcdFx0cHJfZXJyKFwmIzM0O0VQVCBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjMzNzM6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzM3NDpcdFx0fVxuMzM3NTpcdFxuMzM3NjpcdFx0aWYgKCF0ZHBfbW11X2VuYWJsZWQgfHwgIWVuYWJsZV9tbWlvX2NhY2hpbmcgfHwgIWVuYWJsZV9lcHRfYWRfYml0cykge1xuMzM3NzpcdFx0XHRwcl9lcnIoXCYjMzQ7VERQIE1NVSBhbmQgTU1JTyBjYWNoaW5nIGFuZCBFUFQgQS9EIGJpdCBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjMzNzg6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzM3OTpcdFx0fVxuMzM4MDpcdFxuMzM4MTpcdFx0aWYgKCFlbmFibGVfYXBpY3YpIHtcbjMzODI6XHRcdFx0cHJfZXJyKFwmIzM0O0FQSUN2IGlzIHJlcXVpcmVkIGZvciBURFhcXG5cJiMzNDspO1xuMzM4MzpcdFx0XHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XG4zMzg0Olx0XHR9XG4zMzg1Olx0XG4zMzg2Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfT1NYU0FWRSkpIHtcbjMzODc6XHRcdFx0cHJfZXJyKFwmIzM0O3RkeDogT1NYU0FWRSBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjMzODg6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzM4OTpcdFx0fVxuMzM5MDpcdFxuMzM5MTpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSkge1xuMzM5MjpcdFx0XHRwcl9lcnIoXCYjMzQ7VERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXG5cJiMzNDspO1xuMzM5MzpcdFx0XHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XG4zMzk0Olx0XHR9XG4zMzk1Olx0XG4zMzk2Olx0XHRyID0gX190ZHhfaGFyZHdhcmVfc2V0dXAoKTtcbjMzOTc6XHRcdGlmIChyKSB7XG4zMzk4Olx0XHRcdC8qXG4zMzk5Olx0XHRcdCAqIERpc2FibGUgVERYIG9ubHkgYnV0IGRvbiYjMzk7dCBmYWlsIHRvIGxvYWQgbW9kdWxlIGlmIHRoZSBURFhcbjM0MDA6XHRcdFx0ICogbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuICBObyBuZWVkIHRvIHByaW50IG1lc3NhZ2Ugc2F5aW5nXG4zNDAxOlx0XHRcdCAqIFwmIzM0O21vZHVsZSBpcyBub3QgbG9hZGVkXCYjMzQ7IGJlY2F1c2UgaXQgd2FzIHByaW50ZWQgd2hlbiB0aGUgZmlyc3RcbjM0MDI6XHRcdFx0ICogU0VBTUNBTEwgZmFpbGVkLiAgRG9uJiMzOTt0IGJvdGhlciB1bndpbmRpbmcgdGhlIFMtRVBUIGhvb2tzIG9yXG4zNDAzOlx0XHRcdCAqIHZtX3NpemUsIGFzIGt2bV94ODZfb3BzIGhhdmUgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCAoYW5kIGFyZVxuMzQwNDpcdFx0XHQgKiBpbnRlbnRpb25hbGx5IG5vdCBleHBvcnRlZCkuICBUaGUgUy1FUFQgY29kZSBpcyB1bnJlYWNoYWJsZSxcbjM0MDU6XHRcdFx0ICogYW5kIGFsbG9jYXRpbmcgYSBmZXcgbW9yZSBieXRlcyBwZXIgVk0gaW4gYSBzaG91bGQtYmUtcmFyZVxuMzQwNjpcdFx0XHQgKiBmYWlsdXJlIHNjZW5hcmlvIGlzIGEgbm9uLWlzc3VlLlxuMzQwNzpcdFx0XHQgKi9cbjM0MDg6XHRcdFx0aWYgKHIgPT0gLUVOT0RFVilcbjM0MDk6XHRcdFx0XHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDIyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFREWCBWTSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIHRoZSBDUFUgZmVhdHVyZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGlzbiYjMzk7dCBlbmFibGVkLCB0aGUgY29kZSBpbW1lZGlhdGVseSBqdW1wcyB0byBgc3VjY2Vzc19kaXNhYmxlX3RkeGAuIFRoYXQgc2V0cyBgZW5hYmxlX3RkeGAgdG8gemVybywgd2hpY2ggaXMgY3JpdGljYWwuIElmIGBlbmFibGVfdGR4YCBpcyB6ZXJvLCB0aGVuIGR1cmluZyBgdnRfaW5pdGAsIGl0IHdvbiYjMzk7dCBhZGQgdGhlIGBCSVQoS1ZNX1g4Nl9URFhfVk0pYCBmbGFnIHRvIGBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXNgLiBTbywgbm8gaGFyZHdhcmUgc3VwcG9ydCwgbm8gVERYIFZNIGNyZWF0aW9uIOKAkyB0aGF0JiMzOTtzIGV4cGVjdGVkIGJlaGF2aW9yLgoKVGhlIGNvcmUgcHJvYmxlbSwgb3IgYXQgbGVhc3QgdGhlIHRoaW5nIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQsIGlzIHRoYXQgYm90aCBTRVYtU05QIGFuZCBURFggcmVxdWlyZSBoYXJkd2FyZSBzdXBwb3J0LiBBbmQsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGVudmlyb25tZW50cyBsaWtlIEdDRSBhbmQgdHlwaWNhbCBRRU1VIHNldHVwcyAqZG9uJiMzOTt0KiBleHBvc2UgdGhhdCBraW5kIG9mIGhhcmR3YXJlLiBTbywgbG9naWNhbGx5LCB0aGVzZSBzcGVjaWZpYyBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gVERYIFZNIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSB1bnJlYWNoYWJsZSBpbiB0aG9zZSB2aXJ0dWFsaXplZCBjb250ZXh0cy4KCkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBqdXN0IGJlY2F1c2UgdGhlIGNvZGUgcGF0aCBvdXRsaW5lZCBpcyBibG9ja2VkLCBkb2VzbiYjMzk7dCBtZWFuIHRoYXQgYGt2bV9nbWVtX3BvcHVsYXRlYCBjYW4mIzM5O3QgYmUgY2FsbGVkIGFub3RoZXIgd2F5LiBXaGF0IGFyZSB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgdGhhdCBmdW5jdGlvbj8gVGltZSB0byBjaGVjayB3aGVyZSBlbHNlIGBrdm1fZ21lbV9wb3B1bGF0ZWAgaXMgdXNlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciB3YXkgdG8gdHJpZ2dlciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dtZW1fcG9wdWxhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDEwPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDgxLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDgyOlx0Y291bnQgPSBrdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHBhcmFtcy5nZm5fc3RhcnQsIHNyYywgbnBhZ2VzLCB3cml0ZSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4My1cdFx0XHRcdCAgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXHUwMDI2c2V2X3BvcHVsYXRlX2FyZ3MpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4NS1cdFx0YXJncC1cdTAwM2VlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDg2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczoga3ZtX2dtZW1fcG9wdWxhdGUgZmFpbGVkLCByZXQgJWxkIChmd19lcnJvciAlZClcXG5cJiMzNDssXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0ODctXHRcdFx0IF9fZnVuY19fLCBjb3VudCwgYXJncC1cdTAwM2VlcnJvcik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMTQ1PXN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTg1LVx0XHR9O1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMTg2Olx0XHRnbWVtX3JldCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgZ3BhX3RvX2dmbihyZWdpb24uZ3BhKSxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE4Ny1cdFx0XHRcdFx0ICAgICB1NjRfdG9fdXNlcl9wdHIocmVnaW9uLnNvdXJjZV9hZGRyKSxcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU3MT1pbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZGVyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU3NS0vKipcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTc2OiAqIGt2bV9nbWVtX3BvcHVsYXRlKCkgLSBQb3B1bGF0ZS9wcmVwYXJlIGEgR1BBIHJhbmdlIHdpdGggZ3Vlc3QgZGF0YVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzctICpcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5Ny0gKi9cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk4OnR5cGVkZWYgaW50ICgqa3ZtX2dtZW1fcG9wdWxhdGVfY2IpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTktXHRcdFx0XHQgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9wYXF1ZSk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYwMC1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjAxOmxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHZvaWQgX191c2VyICpzcmMsIGxvbmcgbnBhZ2VzLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MDI6XHRcdCAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYwMy0jZW5kaWZcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTgyMD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fZ2V0X3Bmbik7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjMtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjgyNDpzdGF0aWMgbG9uZyBfX2t2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtODI1LVx0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbiwgc3RydWN0IHBhZ2UgKnNyY19wYWdlLFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo4MjY6XHRcdFx0XHRrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgyNy17XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04NjAtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODYyOlx0XHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTg2My17XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDQtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkwNTpcdFx0cmV0ID0gX19rdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHNsb3QsIGZpbGUsIHN0YXJ0X2dmbiAmIzQzOyBpLCBzcmNfcGFnZSxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTA2LVx0XHRcdFx0XHQgIHBvc3RfcG9wdWxhdGUsIG9wYXF1ZSk7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MTYtfVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo5MTc6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nbWVtX3BvcHVsYXRlKTtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE4LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI2MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb246IFVucmVhY2hhYmxlIENvZGUgaW4gU3RhbmRhcmQgRW52aXJvbm1lbnRzKioKCk9rYXksIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIFRoaXMgY29kZSwgc3BlY2lmaWNhbGx5LCBga3ZtX2dtZW1fcG9wdWxhdGVgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBzbnBfbGF1bmNoX3VwZGF0ZWAgYW5kIGB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb25gLiBCb3RoIG9mICp0aG9zZSogZnVuY3Rpb25zIHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCB0byBldmVuICpiZSogcmVhY2hlZC4gV2UmIzM5O3ZlIGNvbmZpcm1lZCB0aGlzLgoKTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IGNvdWxkIFN5emthbGxlciBiZSBydW5uaW5nIG9uIGEgbWFjaGluZSB0aGF0ICphY3R1YWxseSogc3VwcG9ydHMgU0VWLVNOUCBvciBURFg/IFRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZC4KClNpbmNlIFNFVi1TTlAgYW5kIFREWCBhcmUgZnVuZGFtZW50YWxseSBoYXJkd2FyZS1kZXBlbmRlbnQsIHRoZXkgYXJlbiYjMzk7dCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXBzLiBRRU1VIG1pZ2h0IGVtdWxhdGUgKnNvbWUqIHRoaW5ncywgYnV0IGRlZmluaXRlbHkgbm90IHRoZXNlIHNwZWNpZmljIGZlYXR1cmVzLiBUaGVyZSYjMzk7cyBubyBzdGFuZGFyZCBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIFNFVi1TTlAgb3IgVERYIHdpdGhpbiBLVk0gdGhhdCBJJiMzOTttIGF3YXJlIG9mOyBLVk0gcmVsaWVzIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIChBTUQgUFNQIG9yIEludGVsIFREWCBtb2R1bGUpIGZvciB0aGVpciBvcGVyYXRpb24uIEtWTSAqY2FuJiMzOTt0KiBvcGVyYXRlIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydCwgc3BlY2lmaWNhbGx5LgoKVGhlcmVmb3JlLCB0aGlzIGNvZGUgcGF0aCwgYWNjZXNzZWQgdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMsIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgU3l6a2FsbGVyIGVudmlyb25tZW50cy4gSXQmIzM5O3MgYSBkZWFkIGVuZCBhcyBmYXIgYXMgZnV6emluZyBnb2VzLiBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGlzIHRoZXJlICphbnkqIG90aGVyIGNvbmNlaXZhYmxlIHdheSB0byByZWFjaCBga3ZtX2dtZW1fcG9wdWxhdGVgPyBJdCYjMzk7cyBleHBvcnRlZCBmb3IgS1ZNIGludGVybmFsIHVzZSwgc28gcGVyaGFwcyB0aGVyZSYjMzk7cyBzb21lIG9ic2N1cmUgcGF0aD8gQ291bGQgd2UsIGh5cG90aGV0aWNhbGx5LCBjYWxsIGBLVk1fU0VWX1NOUF9MQVVOQ0hfVVBEQVRFYCB3aXRob3V0IGNyZWF0aW5nIGEgZnVsbCBgS1ZNX1g4Nl9TTlBfVk1gPyBMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGBzbnBfbGF1bmNoX3VwZGF0ZWAgY29kZSBwYXRoLiBOb3BlLCB0aGF0IGNvbmZpcm1zIGl0LiBUaGUgYW5zd2VyIHJlbWFpbnMgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQxMDpcdHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4yNDExOlx0e1xuMjQxMjpcdFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XG4yNDEzOlx0XHRzdHJ1Y3Qgc2V2X2dtZW1fcG9wdWxhdGVfYXJncyBzZXZfcG9wdWxhdGVfYXJncyA9IHswfTtcbjI0MTQ6XHRcdHN0cnVjdCBrdm1fc2V2X3NucF9sYXVuY2hfdXBkYXRlIHBhcmFtcztcbjI0MTU6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4yNDE2Olx0XHRsb25nIG5wYWdlcywgY291bnQ7XG4yNDE3Olx0XHR2b2lkIF9fdXNlciAqc3JjO1xuMjQxODpcdFx0aW50IHdyaXRlO1xuMjQxOTpcdFxuMjQyMDpcdFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi1cdTAwM2VzbnBfY29udGV4dClcbjI0MjE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNDIyOlx0XG4yNDIzOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cGFyYW1zLCB1NjRfdG9fdXNlcl9wdHIoYXJncC1cdTAwM2VkYXRhKSwgc2l6ZW9mKHBhcmFtcykpKVxuMjQyNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjI0MjU6XHRcbjI0MjY6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBHRk4gc3RhcnQgMHglbGx4IGxlbmd0aCAweCVsbHggdHlwZSAlZCBmbGFncyAlZFxcblwmIzM0OywgX19mdW5jX18sXG4yNDI3Olx0XHRcdCBwYXJhbXMuZ2ZuX3N0YXJ0LCBwYXJhbXMubGVuLCBwYXJhbXMudHlwZSwgcGFyYW1zLmZsYWdzKTtcbjI0Mjg6XHRcbjI0Mjk6XHRcdGlmICghcGFyYW1zLmxlbiB8fCAhUEFHRV9BTElHTkVEKHBhcmFtcy5sZW4pIHx8IHBhcmFtcy5mbGFncyB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ5NgoJCQkJCQkJb3V0cHV0OiAyMDEKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgd2h5IEkmIzM5O20gY29uY2x1ZGluZyBpdCYjMzk7cyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRmlyc3QsIEkgc2VlIGl0IG1vZGlmaWVzIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQ1BVSUQgcGFnZSB3cml0ZSByZWZlcmVuY2VzIHdpdGhpbiBLVk0mIzM5O3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucy4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYm90aCBTRVYtU05QIGFuZCBURFggYXJlIGZ1bmRhbWVudGFsbHkgaGFyZHdhcmUtZGVwZW5kZW50LgoKSSBzZWUgYSBkaXJlY3QgbGlua2FnZS4gIFRoZSBjb2RlIGV4cGxpY2l0bHkgdXNlcyBgc2V2X3NucF9ndWVzdChrdm0pYC4gSSB0cmFjZSB0aGlzIGRvd24sIGFuZCBpdCBjaGVja3MgZm9yIGBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRWAsIHdoaWNoIGlzIG9ubHkgc2V0IGlmIHRoZSBWTSB0eXBlIGlzIGBLVk1fWDg2X1NOUF9WTWAuIFRoaXMgaXMgY3J1Y2lhbC4gYEtWTV9YODZfU05QX1ZNYCBjYW4gb25seSBiZSBjcmVhdGVkIGlmIHRoZSBLVk0gZW52aXJvbm1lbnQgc3VwcG9ydHMgaXQgdmlhIGBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXNgLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYEJJVChLVk1fWDg2X1NOUF9WTSlgIGZsYWcuIFRoYXQgZmxhZywgaW4gdHVybiwgaXMgcHJlZGljYXRlZCBvbiB0aGUgaG9zdCBDUFUgaGF2aW5nIGBYODZfRkVBVFVSRV9TRVZfU05QYC4gU28sIHRoaXMgZW50aXJlIHBhdGggaXMgc3RyaWN0bHkgZ2F0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIHNwZWNpZmljYWxseSBBTUQgU0VWLVNOUCBjYXBhYmxlIENQVXMuCgpUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIFREWC4gSSBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gZnJvbSBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCAod2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGVuY3J5cHRpb24pLCBhbGwgdGhlIHdheSBiYWNrIHRocm91Z2ggYHRkeF92Y3B1X2lvY3RsYCB0byBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgd2hlbiBoYW5kbGluZyBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYC4gVGhhdCBwYXRoIG9ubHkgd29ya3MgaWYgYGlzX3RkX3ZjcHUodmNwdSlgIGlzIHRydWUgd2hpY2ggaW4gdHVybiByZXF1aXJlcyAgYHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNYCwgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBgZW5hYmxlX3RkeGAsIHdoaWNoIHJlcXVpcmVzIHRoYXQgdGhlIGhvc3QgQ1BVIGhhcyB0aGUgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmbGFnLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF04oCZcyB1bnJlYWNoYWJsZSBpbiBjb21tb24gdmlydHVhbGl6ZWQgc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgaWYgdGhlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZW4mIzM5O3QgcHJlc2VudC4gTXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSB0YXJnZXQgY29kZSwgaW5jbHVkaW5nIGBzbnBfbGF1bmNoX3VwZGF0ZWAsIGB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb25gLCBhbmQgYGt2bV9nbWVtX3BvcHVsYXRlYCwgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0UsIG9yIFFFTVUgd2l0aG91dCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQgKEFNRCBTRVYtU05QIG9yIEludGVsIFREWCkuIEJlY2F1c2Ugc3l6a2FsbGVyIGlzIHVzdWFsbHkgcnVuIG9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIHRoZXNlIHdoZXJlIHRob3NlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3QgZW11bGF0ZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3Qgd2FycmFudCBmdXp6aW5nLgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGl0cyBjYWxsZXJzIGluIEtWTSYjMzk7cyBTRVYtU05QIGFuZCBURFggaW1wbGVtZW50YXRpb25zIHRvIHN1cHBvcnQgYWNxdWlyaW5nIGEgd3JpdGUgcmVmZXJlbmNlIGZvciBDUFVJRCBwYWdlcyBhbmQgdG8gYWRkIGEgTlVMTCBjaGVjayBmb3IgdGhlIHNvdXJjZSBidWZmZXIuIFNFVi1TTlAgYW5kIFREWCBhcmUgaGFyZHdhcmUtYXNzaXN0ZWQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgQ1BVIHN1cHBvcnQgKEFNRCBTRVYtU05QIG9yIEludGVsIFREWCkuIFRoZXkgYXJlIG5vdCBlbXVsYXRlZCBpbiBzb2Z0d2FyZSBieSBRRU1VIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugd2hlcmUgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChgc25wX2xhdW5jaF91cGRhdGVgLCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCwgYW5kIGBrdm1fZ21lbV9wb3B1bGF0ZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlbSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fcG9wdWxhdGVgIGFuZCBpdHMgY2FsbGVycyBpbiBLVk0mIzM5O3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IGFjcXVpcmluZyBhIHdyaXRlIHJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYW5kIHRvIGFkZCBhIE5VTEwgY2hlY2sgZm9yIHRoZSBzb3VyY2UgYnVmZmVyLiBTRVYtU05QIGFuZCBURFggYXJlIGhhcmR3YXJlLWFzc2lzdGVkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIENQVSBzdXBwb3J0IChBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgpLiBUaGV5IGFyZSBub3QgZW11bGF0ZWQgaW4gc29mdHdhcmUgYnkgUUVNVSBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciB0eXBpY2FsbHkgcnVucy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZW0pIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCB0aGlzIHBhdGNoIHNob3VsZCBub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQwOjM2LjcyNzYxNzI1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTA0OTYzOTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX3BvcHVsYXRlYCBhbmQgaXRzIGNhbGxlcnMgaW4gS1ZNJ3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IGFjcXVpcmluZyBhIHdyaXRlIHJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYW5kIHRvIGFkZCBhIE5VTEwgY2hlY2sgZm9yIHRoZSBzb3VyY2UgYnVmZmVyLiBTRVYtU05QIGFuZCBURFggYXJlIGhhcmR3YXJlLWFzc2lzdGVkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIENQVSBzdXBwb3J0IChBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgpLiBUaGV5IGFyZSBub3QgZW11bGF0ZWQgaW4gc29mdHdhcmUgYnkgUUVNVSBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciB0eXBpY2FsbHkgcnVucy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZW0pIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCB0aGlzIHBhdGNoIHNob3VsZCBub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6MzYuNzI3NjIyNzEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ0MDExMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYzA3MDYxN2QxYzQ2ZmYzZWIxNzNiNDQzNDUyNTMyNDY0NWQ5Yzc4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDIzIDA5OjQwOjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuaW5kZXggNmM2YTZkNjYzZTI5NjMuLjVmZDA4ZDM0YmUzZjhhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTIzNjAsOCArMjM2MCw4IEBAIHN0YXRpYyBpbnQgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcXG4gXFxuIFxcdFxcdG1lbWNweShkc3RfdmFkZHIsIHNyY192YWRkciwgUEFHRV9TSVpFKTtcXG4gXFxuLVxcdFxcdGt1bm1hcF9sb2NhbChzcmNfdmFkZHIpO1xcbiBcXHRcXHRrdW5tYXBfbG9jYWwoZHN0X3ZhZGRyKTtcXG4rXFx0XFx0a3VubWFwX2xvY2FsKHNyY192YWRkcik7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IHJtcF9tYWtlX3ByaXZhdGUocGZuLCBnZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgUEdfTEVWRUxfNEssXFxuQEAgLTI0MTUsNiArMjQxNSw3IEBAIHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XFxuIFxcdGxvbmcgbnBhZ2VzLCBjb3VudDtcXG4gXFx0dm9pZCBfX3VzZXIgKnNyYztcXG4rXFx0aW50IHdyaXRlO1xcbiBcXG4gXFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi1cXHUwMDNlc25wX2NvbnRleHQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0yNDM4LDYgKzI0MzksMTMgQEAgc3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4gXFx0aWYgKCFQQUdFX0FMSUdORUQoc3JjKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBNYWtlIHN1cmUgdXNlci1tb2RlIGRpZCBub3QgcGFzcyBOVUxMIGFzIHNyYyB3aXRoXFxuK1xcdCAqIHR5cGUgIT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX1pFUk8uXFxuK1xcdCAqL1xcbitcXHRpZiAoc3JjID09IE5VTEwgXFx1MDAyNlxcdTAwMjYgcGFyYW1zLnR5cGUgIT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX1pFUk8pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0bnBhZ2VzID0gcGFyYW1zLmxlbiAvIFBBR0VfU0laRTtcXG4gXFxuIFxcdC8qXFxuQEAgLTI0NjgsNyArMjQ3NiwxMCBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbiBcXHRzZXZfcG9wdWxhdGVfYXJncy5zZXZfZmQgPSBhcmdwLVxcdTAwM2VzZXZfZmQ7XFxuIFxcdHNldl9wb3B1bGF0ZV9hcmdzLnR5cGUgPSBwYXJhbXMudHlwZTtcXG4gXFxuLVxcdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcyxcXG4rXFx0LyogQWNxdWlyZSBhIHdyaXRlLXJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYXMga2VybmVsIG1pZ2h0IHdyaXRlIHRvIGl0ICovXFxuK1xcdHdyaXRlID0gcGFyYW1zLnR5cGUgPT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX0NQVUlEO1xcbitcXG4rXFx0Y291bnQgPSBrdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHBhcmFtcy5nZm5fc3RhcnQsIHNyYywgbnBhZ2VzLCB3cml0ZSxcXG4gXFx0XFx0XFx0XFx0ICBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlLCBcXHUwMDI2c2V2X3BvcHVsYXRlX2FyZ3MpO1xcbiBcXHRpZiAoY291bnQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGFyZ3AtXFx1MDAzZWVycm9yID0gc2V2X3BvcHVsYXRlX2FyZ3MuZndfZXJyb3I7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggMDRjZTMyMWViZGYzOTYuLjQ2YjFkODRmZGRmMmFhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTMxODUsNyArMzE4NSw3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV90ZHhfY21kICpjXFxuIFxcdFxcdH07XFxuIFxcdFxcdGdtZW1fcmV0ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBncGFfdG9fZ2ZuKHJlZ2lvbi5ncGEpLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHU2NF90b191c2VyX3B0cihyZWdpb24uc291cmNlX2FkZHIpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIDEsIHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUsIFxcdTAwMjZhcmcpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgIDEsIDAsIHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUsIFxcdTAwMjZhcmcpO1xcbiBcXHRcXHRpZiAoZ21lbV9yZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHJldCA9IGdtZW1fcmV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggNGMxNGFlZTFmYjA2MzMuLjYyMmMwYjA0ZDhjMzFiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbkBAIC0yNTgxLDYgKzI1ODEsOCBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZFxcbiAgKiAgICAgICAocGFzc2VkIHRvIEBwb3N0X3BvcHVsYXRlLCBhbmQgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb25cXG4gICogICAgICAgaWYgbm90IE5VTEwpLiBNdXN0IGJlIHBhZ2UtYWxpZ25lZC5cXG4gICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkgZnJvbSB1c2Vyc3BhY2UtYnVmZmVyXFxuKyAqIEB3cml0ZTogdXNlci1zcGFjZSBwcm92aWRlZCBidWZmZXIgbXVzdCBiZSB3cml0YWJsZS4gVGhlIGZ1bmN0aW9uXFxuKyAqXFx0IHdpbGwgYWNxdWlyZSBhIHdyaXRhYmxlIHJlZmVyZW5jZSB3aGVuIHNldCB0byAxLlxcbiAgKiBAcG9zdF9wb3B1bGF0ZTogY2FsbGJhY2sgdG8gaXNzdWUgZm9yIGVhY2ggZ21lbSBwYWdlIHRoYXQgYmFja3MgdGhlIEdQQVxcbiAgKiAgICAgICAgICAgICAgICAgcmFuZ2VcXG4gICogQG9wYXF1ZTogb3BhcXVlIGRhdGEgdG8gcGFzcyB0byBAcG9zdF9wb3B1bGF0ZSBjYWxsYmFja1xcbkBAIC0yNTk3LDcgKzI1OTksNyBAQCB0eXBlZGVmIGludCAoKmt2bV9nbWVtX3BvcHVsYXRlX2NiKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvcGFxdWUpO1xcbiBcXG4gbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZyBucGFnZXMsXFxuLVxcdFxcdCAgICAgICBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpO1xcbitcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpO1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5pbmRleCA2OWM5ZDZkNTQ2YjI4Ny4uN2EyNDVhNDAyYTFiMjIgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5AQCAtODU5LDcgKzg1OSw3IEBAIHN0YXRpYyBsb25nIF9fa3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiB9XFxuIFxcbiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG4tXFx0XFx0ICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcXG4rXFx0XFx0ICAgICAgIGludCB3cml0ZSwga3ZtX2dtZW1fcG9wdWxhdGVfY2IgcG9zdF9wb3B1bGF0ZSwgdm9pZCAqb3BhcXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuIFxcdGludCByZXQgPSAwO1xcbkBAIC04OTMsNyArODkzLDcgQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZ1xcbiBcXHRcXHRpZiAoc3JjKSB7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdWFkZHIgPSAodW5zaWduZWQgbG9uZylzcmMgKyBpICogUEFHRV9TSVpFO1xcbiBcXG4tXFx0XFx0XFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgMCwgXFx1MDAyNnNyY19wYWdlKTtcXG4rXFx0XFx0XFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgd3JpdGUsIFxcdTAwMjZzcmNfcGFnZSk7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0aWYgKHJldCAhPSAxKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQwOjM3LjQzMjcwNDU1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI4MzQ0NTQ1NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fcG9wdWxhdGVgIGFuZCBpdHMgY2FsbGVycyBpbiBLVk0ncyBTRVYtU05QIGFuZCBURFggaW1wbGVtZW50YXRpb25zIHRvIHN1cHBvcnQgYWNxdWlyaW5nIGEgd3JpdGUgcmVmZXJlbmNlIGZvciBDUFVJRCBwYWdlcyBhbmQgdG8gYWRkIGEgTlVMTCBjaGVjayBmb3IgdGhlIHNvdXJjZSBidWZmZXIuIFNFVi1TTlAgYW5kIFREWCBhcmUgaGFyZHdhcmUtYXNzaXN0ZWQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgQ1BVIHN1cHBvcnQgKEFNRCBTRVYtU05QIG9yIEludGVsIFREWCkuIFRoZXkgYXJlIG5vdCBlbXVsYXRlZCBpbiBzb2Z0d2FyZSBieSBRRU1VIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugd2hlcmUgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChgc25wX2xhdW5jaF91cGRhdGVgLCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCwgYW5kIGBrdm1fZ21lbV9wb3B1bGF0ZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlbSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZjMDcwNjE3ZDFjNDZmZjNlYjE3M2I0NDM0NTI1MzI0NjQ1ZDljNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwOTo0MDozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA2YzZhNmQ2NjNlMjk2My4uNWZkMDhkMzRiZTNmOGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMjM2MCw4ICsyMzYwLDggQEAgc3RhdGljIGludCBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuIFxuIFx0XHRtZW1jcHkoZHN0X3ZhZGRyLCBzcmNfdmFkZHIsIFBBR0VfU0laRSk7XG4gXG4tXHRcdGt1bm1hcF9sb2NhbChzcmNfdmFkZHIpO1xuIFx0XHRrdW5tYXBfbG9jYWwoZHN0X3ZhZGRyKTtcbitcdFx0a3VubWFwX2xvY2FsKHNyY192YWRkcik7XG4gXHR9XG4gXG4gXHRyZXQgPSBybXBfbWFrZV9wcml2YXRlKHBmbiwgZ2ZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQR19MRVZFTF80SyxcbkBAIC0yNDE1LDYgKzI0MTUsNyBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiBcdGxvbmcgbnBhZ2VzLCBjb3VudDtcbiBcdHZvaWQgX191c2VyICpzcmM7XG4rXHRpbnQgd3JpdGU7XG4gXG4gXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSB8fCAhc2V2LVx1MDAzZXNucF9jb250ZXh0KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0yNDM4LDYgKzI0MzksMTMgQEAgc3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbiBcdGlmICghUEFHRV9BTElHTkVEKHNyYykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB1c2VyLW1vZGUgZGlkIG5vdCBwYXNzIE5VTEwgYXMgc3JjIHdpdGhcbitcdCAqIHR5cGUgIT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX1pFUk8uXG4rXHQgKi9cbitcdGlmIChzcmMgPT0gTlVMTCBcdTAwMjZcdTAwMjYgcGFyYW1zLnR5cGUgIT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX1pFUk8pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0bnBhZ2VzID0gcGFyYW1zLmxlbiAvIFBBR0VfU0laRTtcbiBcbiBcdC8qXG5AQCAtMjQ2OCw3ICsyNDc2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4gXHRzZXZfcG9wdWxhdGVfYXJncy5zZXZfZmQgPSBhcmdwLVx1MDAzZXNldl9mZDtcbiBcdHNldl9wb3B1bGF0ZV9hcmdzLnR5cGUgPSBwYXJhbXMudHlwZTtcbiBcbi1cdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcyxcbitcdC8qIEFjcXVpcmUgYSB3cml0ZS1yZWZlcmVuY2UgZm9yIENQVUlEIHBhZ2VzIGFzIGtlcm5lbCBtaWdodCB3cml0ZSB0byBpdCAqL1xuK1x0d3JpdGUgPSBwYXJhbXMudHlwZSA9PSBLVk1fU0VWX1NOUF9QQUdFX1RZUEVfQ1BVSUQ7XG4rXG4rXHRjb3VudCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgcGFyYW1zLmdmbl9zdGFydCwgc3JjLCBucGFnZXMsIHdyaXRlLFxuIFx0XHRcdFx0ICBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlLCBcdTAwMjZzZXZfcG9wdWxhdGVfYXJncyk7XG4gXHRpZiAoY291bnQgXHUwMDNjIDApIHtcbiBcdFx0YXJncC1cdTAwM2VlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCAwNGNlMzIxZWJkZjM5Ni4uNDZiMWQ4NGZkZGYyYWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtMzE4NSw3ICszMTg1LDcgQEAgc3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNcbiBcdFx0fTtcbiBcdFx0Z21lbV9yZXQgPSBrdm1fZ21lbV9wb3B1bGF0ZShrdm0sIGdwYV90b19nZm4ocmVnaW9uLmdwYSksXG4gXHRcdFx0XHRcdCAgICAgdTY0X3RvX3VzZXJfcHRyKHJlZ2lvbi5zb3VyY2VfYWRkciksXG4tXHRcdFx0XHRcdCAgICAgMSwgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXHUwMDI2YXJnKTtcbitcdFx0XHRcdFx0ICAgICAxLCAwLCB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlLCBcdTAwMjZhcmcpO1xuIFx0XHRpZiAoZ21lbV9yZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBnbWVtX3JldDtcbiBcdFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDRjMTRhZWUxZmIwNjMzLi42MjJjMGIwNGQ4YzMxYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMjU4MSw2ICsyNTgxLDggQEAgaW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmRcbiAgKiAgICAgICAocGFzc2VkIHRvIEBwb3N0X3BvcHVsYXRlLCBhbmQgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb25cbiAgKiAgICAgICBpZiBub3QgTlVMTCkuIE11c3QgYmUgcGFnZS1hbGlnbmVkLlxuICAqIEBucGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjb3B5IGZyb20gdXNlcnNwYWNlLWJ1ZmZlclxuKyAqIEB3cml0ZTogdXNlci1zcGFjZSBwcm92aWRlZCBidWZmZXIgbXVzdCBiZSB3cml0YWJsZS4gVGhlIGZ1bmN0aW9uXG4rICpcdCB3aWxsIGFjcXVpcmUgYSB3cml0YWJsZSByZWZlcmVuY2Ugd2hlbiBzZXQgdG8gMS5cbiAgKiBAcG9zdF9wb3B1bGF0ZTogY2FsbGJhY2sgdG8gaXNzdWUgZm9yIGVhY2ggZ21lbSBwYWdlIHRoYXQgYmFja3MgdGhlIEdQQVxuICAqICAgICAgICAgICAgICAgICByYW5nZVxuICAqIEBvcGFxdWU6IG9wYXF1ZSBkYXRhIHRvIHBhc3MgdG8gQHBvc3RfcG9wdWxhdGUgY2FsbGJhY2tcbkBAIC0yNTk3LDcgKzI1OTksNyBAQCB0eXBlZGVmIGludCAoKmt2bV9nbWVtX3BvcHVsYXRlX2NiKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb3BhcXVlKTtcbiBcbiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcbi1cdFx0ICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7XG4rXHRcdCAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCA2OWM5ZDZkNTQ2YjI4Ny4uN2EyNDVhNDAyYTFiMjIgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtODU5LDcgKzg1OSw3IEBAIHN0YXRpYyBsb25nIF9fa3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIH1cbiBcbiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcbi1cdFx0ICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcbitcdFx0ICAgICAgIGludCB3cml0ZSwga3ZtX2dtZW1fcG9wdWxhdGVfY2IgcG9zdF9wb3B1bGF0ZSwgdm9pZCAqb3BhcXVlKVxuIHtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC04OTMsNyArODkzLDcgQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZ1xuIFx0XHRpZiAoc3JjKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyB1YWRkciA9ICh1bnNpZ25lZCBsb25nKXNyYyArIGkgKiBQQUdFX1NJWkU7XG4gXG4tXHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgMCwgXHUwMDI2c3JjX3BhZ2UpO1xuK1x0XHRcdHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3QodWFkZHIsIDEsIHdyaXRlLCBcdTAwMjZzcmNfcGFnZSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGlmIChyZXQgIT0gMSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6MzcuNDMyNzA1OTQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzMDY0MjAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lcyogaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2Ugc2hvdWxkIGNvbnNpZGVyIGZvciBmdXp6aW5nLiBJdCdzIHRvdWNoaW5nIHNvbWUgc2Vuc2l0aXZlIGFyZWFzLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLCBhbmQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGF0J3MgS1ZNIFNFVi1TTlAsIFREWCBjb2RlLCBhbmQgZ3Vlc3QgbWVtb3J5IG1hbmFnZW1lbnQuIEJpZyByZWQgZmxhZyB0aGVyZS5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSBgd3JpdGVgIHBhcmFtZXRlciB0byBga3ZtX2dtZW1fcG9wdWxhdGVgLCB3aGljaCBpcyB0aGVuIHVzZWQgd2l0aGluIGBzbnBfbGF1bmNoX3VwZGF0ZWAgdG8gZ2V0IGEgd3JpdGUgcmVmZXJlbmNlIGZvciBDUFVJRCBwYWdlcy4gVGhlcmUncyBhbHNvIGEgbmV3IGBOVUxMYCBjaGVjayBvbiBgc3JjYCBpbiB0aGUgc2FtZSBmdW5jdGlvbiB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbi4gUGx1cywgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYGt1bm1hcF9sb2NhbGAgb3JkZXIgaW4gYHNldl9nbWVtX3Bvc3RfcG9wdWxhdGVgLiBEZWZpbml0ZWx5IGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBhdHRhY2suXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkuIElzIHRoaXMgY29kZSBwYXRoIGV2ZW4gKmFjY2Vzc2libGUqIGluIGEgZnV6emVkIGVudmlyb25tZW50PyBHaXZlbiB0aGUgY29kZSBjaGFuZ2VzLCBpdCBhcHBlYXJzIHRvIGJlIEtWTSBTRVYtU05QIGFuZCBURFggcmVsYXRlZCwgYnV0IGBrdm1fZ21lbV9wb3B1bGF0ZWAgaXMgcGFydCBvZiBndWVzdF9tZW1mZCB3aGljaCBpcyB1c2VkIGJ5IEtWTS4gVGhhdCdzIHByb21pc2luZywgc2luY2UgS1ZNIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgaW4gU3l6a2FsbGVyLiBFeGNlbGxlbnQuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciBTRVYtU05QIGFuZCBURFggbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIGhvdyB3ZSBnZXQgdG8gYGt2bV9nbWVtX3BvcHVsYXRlYC4gSXQncyBjYWxsZWQgZnJvbSBgc25wX2xhdW5jaF91cGRhdGVgIGFuZCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYC4gYHNucF9sYXVuY2hfdXBkYXRlYCByZXF1aXJlcyB0aGUgYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgY2hlY2suIE9rYXkuIFdoYXQgYWJvdXQgYGt2bV9nbWVtX3BvcHVsYXRlYCBpdHNlbGY/IEl0J3MgZXhwb3J0ZWQsIHNvIHRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IGVhc2llci4gSXQncyB1c2VkIGJ5IGJvdGggU0VWIGFuZCBURFgsIHRvby5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBmb3Igb3RoZXIsIGxlc3Mgb2J2aW91cywgdXNlcnMgb2YgYGt2bV9nbWVtX3BvcHVsYXRlYC4gV2UgY2FuJ3QgYmUgdG9vIGNhcmVmdWwuIE92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBmdXp6aW5nIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6NDQuNTYzMzUxNzM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzcyOTA1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2dtZW1fcG9wdWxhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDEwPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0ODEtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDgyOlxcdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcywgd3JpdGUsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDgzLVxcdFxcdFxcdFxcdCAgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXFx1MDAyNnNldl9wb3B1bGF0ZV9hcmdzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4NS1cXHRcXHRhcmdwLVxcdTAwM2VlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQ4NjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IGt2bV9nbWVtX3BvcHVsYXRlIGZhaWxlZCwgcmV0ICVsZCAoZndfZXJyb3IgJWQpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4Ny1cXHRcXHRcXHQgX19mdW5jX18sIGNvdW50LCBhcmdwLVxcdTAwM2VlcnJvcik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxNDU9c3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE4NS1cXHRcXHR9O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzE4NjpcXHRcXHRnbWVtX3JldCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgZ3BhX3RvX2dmbihyZWdpb24uZ3BhKSxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxODctXFx0XFx0XFx0XFx0XFx0ICAgICB1NjRfdG9fdXNlcl9wdHIocmVnaW9uLnNvdXJjZV9hZGRyKSxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTcxPWludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzUtLyoqXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1NzY6ICoga3ZtX2dtZW1fcG9wdWxhdGUoKSAtIFBvcHVsYXRlL3ByZXBhcmUgYSBHUEEgcmFuZ2Ugd2l0aCBndWVzdCBkYXRhXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzctICpcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk3LSAqL1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk4OnR5cGVkZWYgaW50ICgqa3ZtX2dtZW1fcG9wdWxhdGVfY2IpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk5LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb3BhcXVlKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYwMC1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMjpcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjAzLSNlbmRpZlxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04MjA9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nbWVtX2dldF9wZm4pO1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjMtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo4MjQ6c3RhdGljIGxvbmcgX19rdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjUtXFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbiwgc3RydWN0IHBhZ2UgKnNyY19wYWdlLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODI2OlxcdFxcdFxcdFxcdGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgyNy17XFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTg2MC1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MjpcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04NjMte1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDQtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo5MDU6XFx0XFx0cmV0ID0gX19rdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHNsb3QsIGZpbGUsIHN0YXJ0X2dmbiArIGksIHNyY19wYWdlLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTA2LVxcdFxcdFxcdFxcdFxcdCAgcG9zdF9wb3B1bGF0ZSwgb3BhcXVlKTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE2LX1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxNzpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fcG9wdWxhdGUpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MDo0Ny42MDA4NTU0MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQ4MTM4NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIGBrdm1fZ21lbV9wb3B1bGF0ZWAqKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBga3ZtX2dtZW1fcG9wdWxhdGVgIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU0VWIGFuZCBURFggY29udGV4dHMuIFNpbmNlIFNFViBhbmQgVERYIGFyZSBoYXJkd2FyZS1sZXZlbCBmZWF0dXJlcywgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgcmVhbGlzdGljYWxseSBmdXp6IHRoZXNlPyBTeXprYWxsZXIsIG9mIGNvdXJzZSwgaXMgYSBwb3dlcmZ1bCB0b29sIGZvciBLVk0gZnV6emluZywgYnV0IG15IGltbWVkaWF0ZSB3b3JyeSBpcyBhYm91dCB0aGUgZW52aXJvbm1lbnRzIGl0IHR5cGljYWxseSBydW5zIGluLiBNb3N0IGluc3RhbmNlcyBJJ20gYXdhcmUgb2YgZG9uJ3QgaGF2ZSBTRVYgb3IgVERYIGVuYWJsZWQsIGVzcGVjaWFsbHkgd2l0aGluIG5lc3RlZCBndWVzdHMgb24gYSBwbGF0Zm9ybSBsaWtlIEdDRS4gSG1tLCBvciAqZG8qIHRoZXk/IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwganVzdCBpbiBjYXNlLlxuXG5CdXQsIGlmIHdlJ3JlIG9ubHkgbG9va2luZyBhdCBTRVYgYW5kIFREWC1zcGVjaWZpYyBjb2RlLCB0aGUgcmVhY2hhYmlsaXR5IGJlY29tZXMgYSByZWFsIGNvbmNlcm4uIEhvd2V2ZXIsIGxldCBtZSBiYWNrIHVwIGEgc3RlcC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvZGXigJlzIGxvY2F0aW9uLiBSaWdodCwgYGt2bV9nbWVtX3BvcHVsYXRlYCBpdHNlbGYgaXMgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBJcyBpdCBldmVuIHJlYWNoYWJsZSB3aXRob3V0IFNFViBvciBURFg/IFRoZSBncmVwIG91dHB1dCBzaG91bGQgYmUgZGVmaW5pdGl2ZSBoZXJlLiBZZXAsIGl0IGFwcGVhcnMgaXQncyBvbmx5IGNhbGxlZCBmcm9tIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLiBTbywgaXQgbG9va3MgbGlrZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgdGlnaHRseSBjb3VwbGVkIHRvIHRob3NlIHR3byBoYXJkd2FyZSBmZWF0dXJlcy5cblxuV2FpdCBhIHNlY29uZOKApiB3YXNuJ3QgdGhlcmUgc29tZSByZWNlbnQgZGlzY3Vzc2lvbiBhcm91bmQgc3l6a2FsbGVyJ3MgU0VWIGNhcGFiaWxpdGllcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgdGhhdC4gTGV0J3MgbWFrZSBzdXJlLCBhcyBpdCBjb3VsZCBjaGFuZ2UgdGhlIGVudGlyZSBjYWxjdWx1cyBoZXJlLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLiBQZXJoYXBzIHRoZXJlIGFyZSBzb21lIHNwZWNpZmljIGNvbmZpZ3MgZm9yIFNFViBvciBURFggc3VwcG9ydC4gSSBuZWVkIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYWJvdXQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhdCBhbGwgdnVsbmVyYWJsZSB0byBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzYwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQwOjUzLjU0ODk5Njg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk5OTEwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURfU0VWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6NTUuODI4OTk3OTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU0MDI4OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkNoZWNraW5nIHRoZSBURFggQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSd2ZSBnb3QgYSBmZWVsaW5nIHNvbWV0aGluZyBtaWdodCBiZSBvZmYsIG9yIG1heWJlIEknbSBqdXN0IGJlaW5nIG92ZXJseSBjYXV0aW91cywgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgVERYIGNvbmZpZ3VyYXRpb24uIFRoZXJlJ3MgYWx3YXlzIGEgY3JpdGljYWwgY29tcG9uZW50IHNvbWV3aGVyZSwgYW5kIGl0J3MgYmVzdCB0byBiZSBwcm9hY3RpdmUgdGhhbiB0byBzcGVuZCBhbiBob3VyIHRyb3VibGVzaG9vdGluZyBhIHByb2JsZW0gdGhhdCBjb3VsZCBoYXZlIGJlZW4gYXZvaWRlZC4gVGltZSB0byBvcGVuIHRoYXQgdXAgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6NTguNDgzMDMwMTgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzI4NjUyMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTF9URFhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MTowMS4xNTU5MDc1MzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU5MTU3ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaDogU0VWIFx1MDAyNiBURFggQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgU0VWIGFuZCBURFguIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzOiBjYW4gdGhpcyBiZSBmdXp6ZWQ/IExldCdzIGJyZWFrIGl0IGRvd24uIFRoZSB0ZXh0IG1lbnRpb25zIFwiY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFwiIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgaGFyZHdhcmUuIFRoaXMgaXMga2V5LCBhcyBTRVYgYW5kIFREWCByZWx5IG9uIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSBrbm93LCBkZWZpbml0aXZlbHksIHRoYXQgUUVNVSBjYW4ndCAqZnVsbHkqIGVtdWxhdGUgU0VWIG9yIFREWCwgYmVjYXVzZSB0aG9zZSByZWx5IG9uIHRoZSBBTUQgUFNQIGFuZCBJbnRlbCBURFgtc3BlY2lmaWMgaGFyZHdhcmUgcmVzcGVjdGl2ZWx5LlxuXG5CdXQgaG9sZCBvbi4uLiBjYW4gS1ZNIHNvbWVob3cgYmUgZnV6emVkIGZvciBTRVYgd2l0aG91dCBuZWVkaW5nIHRoZSBhY3R1YWwgc2lsaWNvbj8gRGlnZ2luZyBkZWVwZXIsIEkgcmVtZW1iZXIgdGhhdCBgc2V2X3NucF9ndWVzdChrdm0pYCBpcyBhbiBpbXBvcnRhbnQgY2hlY2suIEl0IGV4cGxpY2l0bHkgdGVzdHMgaWYgYSBndWVzdCBpcyBhbiBTTlAgZ3Vlc3QuIEFuZCBpdCBhbHNvIGluZGljYXRlcyB0aGF0IGl0IHJlcXVpcmVzIHRoZSBob3N0IHRvIHN1cHBvcnQgU05QIGFuZCB0aGUgZ3Vlc3QgdG8gYmUgbGF1bmNoZWQgYXMgYW4gU05QIGd1ZXN0LlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGhlcmUgaXMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGBzZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBmdXp6aW5nIGFwcHJvYWNoIGlzIHZpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MTowNS43MTUwNzg2OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjQ4Mzc1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X3NucF9ndWVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzNz1zdGF0aWMgYm9vbCBzZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDItXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxNDM6c3RhdGljIGJvb2wgc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDQte1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ1LVxcdGt2bV9sb2NrZGVwX2Fzc2VydF9zZXZfbG9ja19oZWxkKGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxNDY6XFx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMDY9c3RhdGljIGJvb2wgc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIxMC1cXHRyZXR1cm4gKHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyBcXHUwMDI2IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjExOlxcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFzZXZfc25wX2d1ZXN0KGt2bSkpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjEyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI2ND1zdGF0aWMgaW50IHNucF9sYXVuY2hfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNzAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjcxOlxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI3Mi1cXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQxMD1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDE5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQyMDpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSB8fCAhc2V2LVxcdTAwM2VzbnBfY29udGV4dClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI1NTk9c3RhdGljIGludCBzbnBfbGF1bmNoX2ZpbmlzaChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjU2Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1Njc6XFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTY4LVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM1PXN0YXRpYyBpbnQgc25wX2VuYWJsZV9jZXJ0cyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjM2LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2Mzc6XFx0aWYgKGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAhc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY0NT1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY2OS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2NzA6XFx0aWYgKHNldl9zbnBfZ3Vlc3Qoa3ZtKSBcXHUwMDI2XFx1MDAyNiBzZXZfY21kLmlkIFxcdTAwM2MgS1ZNX1NFVl9TTlBfTEFVTkNIX1NUQVJUKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY3MS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTY4PXZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDA4LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzAwOTpcXHRpZiAoc2V2X3NucF9ndWVzdChrdm0pKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDEwLVxcdFxcdHNucF9ndWVzdF9yZXFfY2xlYW51cChrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMzA4PXZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMzIwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzMyMTpcXHRpZiAoIV9fX19zZXZfZ3Vlc3Qoa3ZtKSB8fCBfX19fc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzMyMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM0MjQ9c3RhdGljIGludCBzZXZfZXNfdmFsaWRhdGVfdm1nZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzUxMC1cXHRjYXNlIFNWTV9WTUdFWElUX0FQX0NSRUFUSU9OOlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzUxMTpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNTEyLVxcdFxcdFxcdGdvdG8gdm1nZXhpdF9lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MjQtXFx0Y2FzZSBTVk1fVk1HRVhJVF9QU0M6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTI1OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSB8fCAha3ZtX2doY2Jfc3dfc2NyYXRjaF9pc192YWxpZChzdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzUyNi1cXHRcXHRcXHRnb3RvIHZtZ2V4aXRfZXJyO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNTI5LVxcdGNhc2UgU1ZNX1ZNR0VYSVRfRVhUX0dVRVNUX1JFUVVFU1Q6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTMwOlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSB8fFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzUzMS1cXHRcXHQgICAgIVBBR0VfQUxJR05FRChjb250cm9sLVxcdTAwM2VleGl0X2luZm9fMSkgfHxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzYwNT12b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNjE4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzYxOTpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzYyMC1cXHRcXHR1NjQgcGZuID0gX19wYShzdm0tXFx1MDAzZXNldl9lcy52bXNhKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjI0PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjMxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIzMjpcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjMzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkzPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI5OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQzMDA6XFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDMwMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDM1NT1zdGF0aWMgaW50IHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzQtXFx0Y2FzZSBHSENCX01TUl9QUkVGX0dQQV9SRVE6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDM1OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzYtXFx0XFx0XFx0Z290byBvdXRfdGVybWluYXRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ0NjpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQ3LVxcdFxcdFxcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ2MC1cXHRjYXNlIEdIQ0JfTVNSX1BTQ19SRVE6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDYxOlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NjItXFx0XFx0XFx0Z290byBvdXRfdGVybWluYXRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NDk5PWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTMzLVxcdC8qIFNFVi1TTlAgZ3Vlc3QgcmVxdWlyZXMgdGhhdCB0aGUgR0hDQiBHUEEgbXVzdCBiZSByZWdpc3RlcmVkICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTM0OlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpIFxcdTAwMjZcXHUwMDI2ICFnaGNiX2dwYV9pc19yZWdpc3RlcmVkKHN2bSwgZ2hjYl9ncGEpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTM1LVxcdFxcdHZjcHVfdW5pbXBsKFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUsIFxcXCJ2bWdleGl0OiBHSENCIEdQQSBbJSNsbHhdIGlzIG5vdCByZWdpc3RlcmVkLlxcXFxuXFxcIiwgZ2hjYl9ncGEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00Nzg4PXZvaWQgc2V2X2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBpbml0X2V2ZW50KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODAwLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDgwMTpcXHRpZiAoaW5pdF9ldmVudCBcXHUwMDI2XFx1MDAyNiBpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDgwMi1cXHRcXHRzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODMzPXZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqaG9zdHNhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODczLVxcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9ERUJVR19TV0FQKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDg3NDpcXHQgICAgIGlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODc1LVxcdFxcdGhvc3RzYS1cXHUwMDNlZHIwX2FkZHJfbWFzayA9IGFtZF9nZXRfZHJfYWRkcl9tYXNrKDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTA1PWludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTEyLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTExMzpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMTQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyMTU9aW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjE5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIyMDpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMjEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyMzA9c3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTI1MC1cXHQvKiBDaGVjayBpZiB0aGUgU0VWIHBvbGljeSBhbGxvd3MgZGVidWdnaW5nICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjUxOlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjUyLVxcdFxcdGlmICghKHNldi1cXHUwMDNlcG9saWN5IFxcdTAwMjYgU05QX1BPTElDWV9NQVNLX0RFQlVHKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTI1OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyNTk6XFx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyNjAtXFx0XFx0c3RydWN0IHNldl9kYXRhX3NucF9kYmcgZGJnID0gezB9O1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0xOTY1PXN0YXRpYyBpbnQgbnBmX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTE5OTktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDAwOlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpIFxcdTAwMjZcXHUwMDI2IChlcnJvcl9jb2RlIFxcdTAwMjYgUEZFUlJfR1VFU1RfRU5DX01BU0spKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAwMS1cXHRcXHRlcnJvcl9jb2RlIHw9IFBGRVJSX1BSSVZBVEVfQUNDRVNTO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzY0PXN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMzNzgtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMzc5OlxcdHZtX3R5cGUgPSBpc19zZXZfc25wX2d1ZXN0KHZjcHUpID8gXFxcIlNFVi1TTlBcXFwiIDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMzODAtXFx0XFx0ICBpc19zZXZfZXNfZ3Vlc3QodmNwdSkgPyBcXFwiU0VWLUVTXFxcIiA6XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTM5OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQwNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDE4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MjItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MjM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyNTpcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTQzMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDM2LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDM3OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjA4LjA3OTkyNDIwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjAwNjg1NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrdm1fZ21lbV9wb3B1bGF0ZWAsIHdoaWNoIGlzIGEgZnVuY3Rpb24gaW50ZXJuYWwgdG8gS1ZNLiBJIHNlZSB0aGF0IGl0J3MgYmVlbiB1cGRhdGVkIHRvIHRha2UgYSBgd3JpdGVgIHBhcmFtZXRlci4gIFJpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoYXQgdGhpcyBjaGFuZ2VzIGhvdyBga3ZtX2dtZW1fcG9wdWxhdGVgIGJlaGF2ZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/ICBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga3ZtX2dtZW1fcG9wdWxhdGVgIGlzIGV2ZW4gKmNhbGxlZCogZnJvbS5cblxuSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaW4gYHNucF9sYXVuY2hfdXBkYXRlYCBhbmQgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIHdoaWNoIGFyZSBib3RoIHBhcnQgb2YgdGhlIFNFVi1TTlAgYW5kIFREWCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBBbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIHNlY3VyaXR5IGZlYXR1cmVzIHRpZWQgdG8gQU1EIGFuZCBJbnRlbCBoYXJkd2FyZS4gQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucz8gIFdlbGwsIGlmIFNFVi1TTlAgaXMgc3VwcG9ydGVkLCBzeXprYWxsZXIgKmNhbiogaXNzdWUgdGhlIGBLVk1fU0VWX1NOUF9MQVVOQ0hfVVBEQVRFYCBpb2N0bC4gQnV0IGlmIFNFVi1TTlAgaXMgKm5vdCogc3VwcG9ydGVkLCBgc2V2X3NucF9ndWVzdChrdm0pYCByZXR1cm5zIGZhbHNlLCBhbmQgYHNucF9sYXVuY2hfdXBkYXRlYCBqdXN0IHJldHVybnMgYW4gZXJyb3IsIHNwZWNpZmljYWxseSBgLUVJTlZBTGAuXG5cbk15IG5leHQgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBwYXRoIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRT8gVHlwaWNhbGx5LCBHQ0UgaW5zdGFuY2VzIGRvbid0IHN1cHBvcnQgbmVzdGVkIFNFVi1TTlAgb3IgVERYLCBjb3JyZWN0PyBBaCwgYnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbnMuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5LCB0aGF0IGlmIHRoZSBwYXRjaCBpcyBvbmx5IHJlbGF0ZWQgdG8gY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCB0aGVuIGl0IHNob3VsZCBiZSBtYXJrZWQgYXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi5cblxuU2luY2UgU0VWLVNOUCBhbmQgVERYIHJlcXVpcmUgdGhvc2Ugc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgKEFNRCBTRVYtU05QLCBJbnRlbCBURFgpIGFuZCB0aGF0IFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZW0gaW4gYSB3YXkgdGhhdCBhbGxvd3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIHN0YW5kYXJkIEdDRSBpbnN0YW5jZXMsIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgKmFyZSogaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50LiBXYWl0LCBkb2VzIFFFTVUgZXZlbiBlbXVsYXRlIFNFVi1TTlA/IE5vLCBRRU1VIHVzZXMgS1ZNIHRvIHN1cHBvcnQgU0VWLVNOUCwgaXQgZG9lc24ndCBkbyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMuXG5cblNvLCBjYW4gS1ZNIGJlIGZ1enplZCBmb3IgU0VWLVNOUCB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQ/IEkgc2hvdWxkIGNoZWNrIGBfX19fc2V2X3NucF9ndWVzdGAgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MTYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDE6MTYuMjgwNjEyOTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc2NzE5MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fX19zZXZfc25wX2d1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTQzPXN0YXRpYyBib29sIHNldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDUtXFx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3Nldl9sb2NrX2hlbGQoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0NjpcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMzMDg9dm9pZCBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjAtXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMzIxOlxcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMzIyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9Mzk5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA1LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDA2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDcte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MjM9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyNTpcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjE4LjU1NzMzNzc5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxMzM3NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgX19fX3Nldl9zbnBfZ3Vlc3RgIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYF9fX19zZXZfc25wX2d1ZXN0YC5cIiBJdCdzIGEgYml0IGNyeXB0aWMsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGhhcyBzb21lIHVuZGVybHlpbmcgc2lnbmlmaWNhbmNlIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmVmb3JlIEkgcHJvY2VlZC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc3BlY2lmaWMgbWFjcm8sIGEgdmFyaWFibGUsIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIGV2ZW4gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGNvZGViYXNlIEknbSB3b3JraW5nIHdpdGguIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSeKAmW0gZ3Vlc3NpbmcgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIFNFVi1TTlAgZ3Vlc3QgaGFuZGxpbmcgaW4gc29tZSB3YXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjb250ZXh0IGl0IG9wZXJhdGVzIGluIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5leHQgcGllY2Ugb2YgY29kZSBJJ20gbG9va2luZyBhdCwgc28gYmVzdCB0byBmaW5kIHRoaXMgZGVmaW5pdGlvbiBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjIxLjk3ODY4MDE4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NTIyMDM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0zOTk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDUtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MDY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQwNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjI0LjI2MzkxMDA1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk0Mjk2ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEtWTS9TVk0gSW50ZXJuYWxzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIEFNRCBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIChTVk0pIGltcGxlbWVudGF0aW9uIHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oYCBoZWFkZXIgZmlsZS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gaXMgbGlrZWx5IGFyb3VuZCBsaW5lIDQwNi4gSXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaG9uZSBpbiBvbiB0aGUgc3BlY2lmaWMgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZnVydGhlci4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM5OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjI3LjQ1ODIxMDE2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbiAzOTY6XFx0e1xcbiAzOTc6XFx0XFx0cmV0dXJuIHRvX2t2bV9zZXZfaW5mbyhrdm0pLVxcdTAwM2VhY3RpdmU7XFxuIDM5ODpcXHR9XFxuIDM5OTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuIDQwMDpcXHR7XFxuIDQwMTpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4gNDAyOlxcdFxcbiA0MDM6XFx0XFx0cmV0dXJuIHNldi1cXHUwMDNlZXNfYWN0aXZlIFxcdTAwMjZcXHUwMDI2ICFXQVJOX09OX09OQ0UoIXNldi1cXHUwMDNlYWN0aXZlKTtcXG4gNDA0OlxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4gNDA3OlxcdHtcXG4gNDA4OlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xcbiA0MDk6XFx0XFxuIDQxMDpcXHRcXHRyZXR1cm4gKHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyBcXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcXHUwMDI2XFx1MDAyNlxcbiA0MTE6XFx0XFx0ICAgICAgICFXQVJOX09OX09OQ0UoIV9fX19zZXZfZXNfZ3Vlc3Qoa3ZtKSk7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MToyNy40NTgzNTkzNzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MTMyODczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIHNuaXBwZXQsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgYXMgaWYgaXQgd2VyZSBteSBvd24gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIFNFVi1TTlAgQWN0aXZhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb2RlIGlzIGNoZWNraW5nIGBfX19fc2V2X3NucF9ndWVzdGAgYW5kIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyBcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIFwiV2hlcmUgYW5kIGhvdyBpcyBgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVgIGFjdHVhbGx5ICpzZXQqIGluIHRoZSBmaXJzdCBwbGFjZT9cIiBJdCdzIG5vdCBzb21ldGhpbmcgdGhhdCdzIG1hZ2ljYWxseSB0aGVyZS4gVGhlIGxvZ2ljIHRyYWlscyBiYWNrIHRvIGBLVk1fU0VWX0lOSVQyYCBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoaXMgaXMgdGhlIGluaXRpYWxpemF0aW9uIHBhdGguIE5vdywgdGhlIHJlYWwgY3J1eCBvZiB0aGUgaXNzdWUgaXMgd2hldGhlciBvciBub3QgdGhpcyBgS1ZNX1NFVl9JTklUMmAgY2FsbCByZXF1aXJlcyBleHBsaWNpdCBoYXJkd2FyZSBzdXBwb3J0LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBgS1ZNX1NFVl9JTklUMmAgcGF0aCBhbmQgaWRlbnRpZnkgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgaWYgYW55LCB0aGF0IGFyZSBjcnVjaWFsIGZvciB0aGUgU05QIGZlYXR1cmVzIHRvIGJlIGFjdGl2ZS4gSSBoYXZlIHRvIHRyYWNlIGhvdyB0aGlzIGZsYWcgaXMgYmVpbmcgZW5hYmxlZCBieSB0aGUgS1ZNIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NjMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjMyLjQ5OTY5MTYwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5NzE5MjU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaD0zMDU9c3RhdGljX2Fzc2VydCgoWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTMwNi1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDozMDc6I2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVxcdFxcdFxcdFxcdEJJVCgwKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTMwOC0jZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlxcdFxcdEJJVCgzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODg9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzMtXFx0aWYgKHNucF9hY3RpdmUpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzQ6XFx0XFx0c2V2LVxcdTAwM2V2bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MDY9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA5LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDEwOlxcdHJldHVybiAoc2V2LVxcdTAwM2V2bXNhX2ZlYXR1cmVzIFxcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MTEtXFx0ICAgICAgICFXQVJOX09OX09OQ0UoIV9fX19zZXZfZXNfZ3Vlc3Qoa3ZtKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjM1LjE5Njg5NDA5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYxMjU2OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgX19zZXZfZ3Vlc3RfaW5pdGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBfX3Nldl9ndWVzdF9pbml0YC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBpc24ndCBpdD8gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgU0VWLVNOUCBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGluaXRpYWxpemVkIGhlcmUgd2l0aGluIHRoZSBndWVzdCdzIGNvbnRleHQuIEknbSBmb2N1c2luZyBvbiB0aGUgKmhvdyogYW5kIHRoZSAqd2h5Ki4gV2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYXJlIHdlIHNldHRpbmcgdXA/IFdoYXQncyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucz8gQW5kLCBtb3N0IGltcG9ydGFudGx5LCBob3cgZG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGVuc3VyZSB0aGUgaW50ZWdyaXR5IGFuZCBjb25maWRlbnRpYWxpdHkgYXNwZWN0cyBvZiB0aGUgZ3Vlc3QgaW4gYW4gU0VWLWVuYWJsZWQgZW52aXJvbm1lbnQ/IEFyZSB3ZSBzZWVpbmcgdGhlIGV4cGVjdGVkIG1lbW9yeSByZWdpb24gcHJvdGVjdGlvbnMgc2V0IHVwPyBBcmUgdGhlIHNlY3JldHMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHksIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGUgYXR0ZXN0YXRpb24gcHJvY2Vzcz8gQXJlIHdlIHZlcmlmeWluZyB0aGUgaW5pdGlhbCBmaXJtd2FyZSBzdGF0ZT8gSSdsbCBuZWVkIHRvIHRyYWNlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2NydXRpbml6ZSB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGh5cGVydmlzb3Igb3IgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUtYmFzZWQgc2VjdXJpdHkgbWVjaGFuaXNtcy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5IGFyZSBzZXR0aW5nIHVwIHRoZSBwYWdlIHRhYmxlcywgY29uZmlndXJpbmcgdGhlIHNlY3JldHMsIGFuZCBoYW5kbGluZyB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aXRoIHRoZSBob3N0IGNvcnJlY3RseS4gSXQncyB0aGUgY29yZSBvZiB0cnVzdCwgYW5kIHRoYXQncyB0aGUgcGFydCB0aGF0IG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkIHRoZSBtb3N0LiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byB0ZWxsIHdoYXQgY291bGQgYmUgaW1wcm92ZWQgb3Igb3B0aW1pemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc2MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjM5LjQ1ODE1NDY1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODg6XFx0c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbiA0ODk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fc2V2X2luaXQgKmRhdGEsXFxuIDQ5MDpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XFxuIDQ5MzpcXHRcXHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XFxuIDQ5NDpcXHRcXHRib29sIGVzX2FjdGl2ZSA9IHZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfVk07XFxuIDQ5NTpcXHRcXHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xcbiA0OTY6XFx0XFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbiA0OTc6XFx0XFx0aW50IHJldDtcXG4gNDk4OlxcdFxcbiA0OTk6XFx0XFx0aWYgKGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cylcXG4gNTAwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRpZiAoZGF0YS1cXHUwMDNlZmxhZ3MpXFxuIDUwMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTA0OlxcdFxcbiA1MDU6XFx0XFx0aWYgKCFzbnBfYWN0aXZlKVxcbiA1MDY6XFx0XFx0XFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGlmIChkYXRhLVxcdTAwM2V2bXNhX2ZlYXR1cmVzIFxcdTAwMjYgfnZhbGlkX3Ztc2FfZmVhdHVyZXMpXFxuIDUwOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0aWYgKGRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbiBcXHUwMDNlIEdIQ0JfVkVSU0lPTl9NQVggfHwgKCFlc19hY3RpdmUgXFx1MDAyNlxcdTAwMjYgZGF0YS1cXHUwMDNlZ2hjYl92ZXJzaW9uKSlcXG4gNTEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTM6XFx0XFxuIDUxNDpcXHRcXHQvKlxcbiA1MTU6XFx0XFx0ICogS1ZNIHN1cHBvcnRzIHRoZSBmdWxsIHJhbmdlIG9mIG1hbmRhdG9yeSBmZWF0dXJlcyBkZWZpbmVkIGJ5IHZlcnNpb25cXG4gNTE2OlxcdFxcdCAqIDIgb2YgdGhlIEdIQ0IgcHJvdG9jb2wsIHNvIGRlZmF1bHQgdG8gdGhhdCBmb3IgU0VWLUVTIGd1ZXN0cyBjcmVhdGVkXFxuIDUxNzpcXHRcXHQgKiB2aWEgS1ZNX1NFVl9JTklUMiAoS1ZNX1NFVl9JTklUIGZvcmNlcyB2ZXJzaW9uIDEpLlxcbiA1MTg6XFx0XFx0ICovXFxuIDUxOTpcXHRcXHRpZiAoZXNfYWN0aXZlIFxcdTAwMjZcXHUwMDI2ICFkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb24pXFxuIDUyMDpcXHRcXHRcXHRkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb24gPSAyO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRpZiAoc25wX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb24gXFx1MDAzYyAyKVxcbiA1MjM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUyNDpcXHRcXG4gNTI1OlxcdFxcdGlmICh1bmxpa2VseShzZXYtXFx1MDAzZWFjdGl2ZSkpXFxuIDUyNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0c2V2LVxcdTAwM2VhY3RpdmUgPSB0cnVlO1xcbiA1Mjk6XFx0XFx0c2V2LVxcdTAwM2Vlc19hY3RpdmUgPSBlc19hY3RpdmU7XFxuIDUzMDpcXHRcXHRzZXYtXFx1MDAzZXZtc2FfZmVhdHVyZXMgPSBkYXRhLVxcdTAwM2V2bXNhX2ZlYXR1cmVzO1xcbiA1MzE6XFx0XFx0c2V2LVxcdTAwM2VnaGNiX3ZlcnNpb24gPSBkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb247XFxuIDUzMjpcXHRcXG4gNTMzOlxcdFxcdGlmIChzbnBfYWN0aXZlKVxcbiA1MzQ6XFx0XFx0XFx0c2V2LVxcdTAwM2V2bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFO1xcbiA1MzU6XFx0XFxuIDUzNjpcXHRcXHRyZXQgPSBzZXZfYXNpZF9uZXcoc2V2LCB2bV90eXBlKTtcXG4gNTM3OlxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjM5LjQ1ODY5MTM3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTU3NzEyODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgU0VWIEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYF9fc2V2X2d1ZXN0X2luaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgY2VudHJhbCB0byB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBndWVzdCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGUgdHJhY2Ugc2hvd3MgYSBjYWxsIHRvIGBzZXZfYXNpZF9uZXdgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBhY3R1YWxseSB0eWluZyBpbnRvIGFueSBoYXJkd2FyZSBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiBgc2V2X2FzaWRfbmV3YCBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGFuZCB3ZSBzdGFydCBsZXZlcmFnaW5nIGFueSByZXF1aXJlZCBoYXJkd2FyZSBzdXBwb3J0LiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIHJpZ2h0IG5vdywgYW5kIHRoYXQncyB3aGVyZSBJIHdpbGwgZ28gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjQzLjQxNjQwNzk1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNDYzODE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfYXNpZF9uZXdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDA9c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjYyOnN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDg4PXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM2OlxcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM3LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjQ1LjkzMTA1MjIxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgzNDkwNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIGNvbnRleHQgaXMgcmVsZXZhbnQgdG8gbXkgd29yazpcblxuKipDaGVja2luZyBgc2V2X2FzaWRfbmV3YCoqXG5cblJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIFRoaXMgbGlrZWx5IG1lYW5zIEknbSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJvdWJsZXNob290aW5nIHNlc3Npb24sIGNvZGUgcmV2aWV3LCBvciBtYXliZSBldmVuIGFyY2hpdGVjdHVyYWwgZGVzaWduLiBcIkNoZWNraW5nIGBzZXZfYXNpZF9uZXdgXCIgaW5kaWNhdGVzIGEgc3BlY2lmaWMgdmFyaWFibGUsIGZ1bmN0aW9uLCBvciBjb25jZXB0IHJlbGF0ZWQgdG8gQVNJRCAoQWRkcmVzcyBTcGFjZSBJZGVudGlmaWVyKSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiBTRVYgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24pLCB3aGljaCBJJ20gY2xlYXJseSBmYW1pbGlhciB3aXRoLiBJdCdzIGEga2V5IHBpZWNlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgcmVsZXZhbmNlIHRvIHdoYXRldmVyIEknbSB3b3JraW5nIG9uIHJpZ2h0IG5vdy4gUGVyaGFwcyB0aGVyZSdzIGEgc3VzcGVjdGVkIGlzc3VlLCBvciBtYXliZSBJJ20gdmVyaWZ5aW5nIHNvbWUgYXNzdW1wdGlvbnMuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgcGxhY2UgdG8gc3RhcnQuIFRoaXMgY2hlY2sgd2lsbCBkZXRlcm1pbmUgd2hpY2ggcGF0aCBJJ2xsIGZvbGxvdy4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQxOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjQ5LjcxNDU0NTc1NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjI6XFx0c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuIDI2MzpcXHR7XFxuIDI2NDpcXHRcXHQvKlxcbiAyNjU6XFx0XFx0ICogU0VWLWVuYWJsZWQgZ3Vlc3RzIG11c3QgdXNlIGFzaWQgZnJvbSBtaW5fc2V2X2FzaWQgdG8gbWF4X3Nldl9hc2lkLlxcbiAyNjY6XFx0XFx0ICogU0VWLUVTLWVuYWJsZWQgZ3Vlc3QgY2FuIHVzZSBmcm9tIDEgdG8gbWluX3Nldl9hc2lkIC0gMS5cXG4gMjY3OlxcdFxcdCAqL1xcbiAyNjg6XFx0XFx0dW5zaWduZWQgaW50IG1pbl9hc2lkLCBtYXhfYXNpZCwgYXNpZDtcXG4gMjY5OlxcdFxcdGludCByZXQ7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdGlmICh2bV90eXBlID09IEtWTV9YODZfU05QX1ZNKSB7XFxuIDI3MjpcXHRcXHRcXHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcXG4gMjczOlxcdFxcdFxcdG1heF9hc2lkID0gbWF4X3NucF9hc2lkO1xcbiAyNzQ6XFx0XFx0fSBlbHNlIGlmIChzZXYtXFx1MDAzZWVzX2FjdGl2ZSkge1xcbiAyNzU6XFx0XFx0XFx0bWluX2FzaWQgPSBtaW5fc2V2X2VzX2FzaWQ7XFxuIDI3NjpcXHRcXHRcXHRtYXhfYXNpZCA9IG1heF9zZXZfZXNfYXNpZDtcXG4gMjc3OlxcdFxcdH0gZWxzZSB7XFxuIDI3ODpcXHRcXHRcXHRtaW5fYXNpZCA9IG1pbl9zZXZfYXNpZDtcXG4gMjc5OlxcdFxcdFxcdG1heF9hc2lkID0gbWF4X3Nldl9hc2lkO1xcbiAyODA6XFx0XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHQvKlxcbiAyODM6XFx0XFx0ICogVGhlIG1pbiBBU0lEIGNhbiBlbmQgdXAgbGFyZ2VyIHRoYW4gdGhlIG1heCBpZiBiYXNpYyBTRVYgc3VwcG9ydCBpc1xcbiAyODQ6XFx0XFx0ICogZWZmZWN0aXZlbHkgZGlzYWJsZWQgYnkgZGlzYWxsb3dpbmcgdXNlIG9mIEFTSURzIGZvciBTRVYgZ3Vlc3RzLlxcbiAyODU6XFx0XFx0ICogU2ltaWxhcmx5IGZvciBTRVYtRVMgZ3Vlc3RzIHRoZSBtaW4gQVNJRCBjYW4gZW5kIHVwIGxhcmdlciB0aGFuIHRoZVxcbiAyODY6XFx0XFx0ICogbWF4IHdoZW4gY2lwaGVydGV4dCBoaWRpbmcgaXMgZW5hYmxlZCwgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIFNFVi1FU1xcbiAyODc6XFx0XFx0ICogc3VwcG9ydC5cXG4gMjg4OlxcdFxcdCAqL1xcbiAyODk6XFx0XFx0aWYgKG1pbl9hc2lkIFxcdTAwM2UgbWF4X2FzaWQpXFxuIDI5MDpcXHRcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0V0FSTl9PTl9PTkNFKHNldi1cXHUwMDNlbWlzY19jZyk7XFxuIDI5MzpcXHRcXHRzZXYtXFx1MDAzZW1pc2NfY2cgPSBnZXRfY3VycmVudF9taXNjX2NnKCk7XFxuIDI5NDpcXHRcXHRyZXQgPSBzZXZfbWlzY19jZ190cnlfY2hhcmdlKHNldik7XFxuIDI5NTpcXHRcXHRpZiAocmV0KVxcbiAyOTY6XFx0XFx0XFx0Z290byBlX3B1dF9jZztcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0YXNpZCA9IHNldl9hbGxvY19hc2lkKG1pbl9hc2lkLCBtYXhfYXNpZCk7XFxuIDI5OTpcXHRcXHRpZiAoYXNpZCBcXHUwMDNlIG1heF9hc2lkKSB7XFxuIDMwMDpcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIDMwMTpcXHRcXHRcXHRnb3RvIGVfdW5jaGFyZ2U7XFxuIDMwMjpcXHRcXHR9XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdHNldi1cXHUwMDNlYXNpZCA9IGFzaWQ7XFxuIDMwNTpcXHRcXHRyZXR1cm4gMDtcXG4gMzA2OlxcdFxcbiAzMDc6XFx0ZV91bmNoYXJnZTpcXG4gMzA4OlxcdFxcdHNldl9taXNjX2NnX3VuY2hhcmdlKHNldik7XFxuIDMwOTpcXHRlX3B1dF9jZzpcXG4gMzEwOlxcdFxcdHB1dF9taXNjX2NnKHNldi1cXHUwMDNlbWlzY19jZyk7XFxuIDMxMTpcXHRcXHRzZXYtXFx1MDAzZW1pc2NfY2cgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MTo0OS43MTUwMzQ1MTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MzE0Mjk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRHJpdmVyIElzc3VlKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGNvbmRpdGlvbmFsIGNoZWNrOiBgbWluX3NucF9hc2lkIFx1MDAzZSBtYXhfc25wX2FzaWRgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIHByb2JsZW0uIElmIHRoaXMgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLCB0aGUgY29kZSBpcyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIHJldHVybiBgLUVOT1RUWWAuIFRoYXQncyB0aGUga2V5IGJlaGF2aW9yIHRvIHVuZGVyc3RhbmQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCAqd2h5KiB0aGlzIHNjZW5hcmlvIHdvdWxkIGFyaXNlLCBiZWNhdXNlIGEgbmVnYXRpdmUgcmV0dXJuIGxpa2UgYC1FTk9UVFlgIHN1Z2dlc3RzIGFuICp1bmV4cGVjdGVkKiBvciBpbmFwcHJvcHJpYXRlIG9wZXJhdGlvbi4gSSBrbm93IHRoYXQgdXN1YWxseSBpbmRpY2F0ZXMgYW4gaW5hcHByb3ByaWF0ZSBpb2N0bCByZXF1ZXN0LlxuXG5UaGUgY3J1eCBvZiB0aGUgbWF0dGVyIHRoZW4gYmVjb21lczogaG93IGFyZSBgbWluX3NucF9hc2lkYCBhbmQgYG1heF9zbnBfYXNpZGAgaW5pdGlhbGl6ZWQ/IFdoZXJlIGFuZCBob3cgYXJlIHRoZXNlIHZhbHVlcyBwb3B1bGF0ZWQ/IFdoYXQgY29kZSBwYXRoIHNldHMgdGhlbSwgYW5kIHdoYXQgZG9lcyB0aGUgZGF0YSB0aGV5IHJlcHJlc2VudCAqYWN0dWFsbHkqIG1lYW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIGRyaXZlciBhbmQgdGhlIGhhcmR3YXJlIGl0IGNvbnRyb2xzPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGFueSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIHBvaW50cyBmb3IgdGhlc2UgdHdvIHZhcmlhYmxlcy4gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbj8gQSBsb2dpYyBlcnJvciBpbiBjYWxjdWxhdGluZyByYW5nZXM/IEFyZSB0aGVzZSBzdXBwb3NlZCB0byByZXByZXNlbnQgYW4gKmludmVydGVkKiByYW5nZSwgb3IgaXMgdGhpcyBqdXN0IGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGU/IFRoZSBhbnN3ZXIgbGllcyBpbiB0aGUgc291cmNlIGNvZGU7IEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZXNlIHZhcmlhYmxlcyBhbmQgdHJhY2UgdGhlaXIgdXNhZ2UuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIHVudGlsIEkgdW5kZXJzdGFuZCBob3cgdGhlc2UgdmFyaWFibGVzIGVuZCB1cCBpbiBhIHN0YXRlIHRoYXQgY291bGQgdHJpZ2dlciBgLUVOT1RUWWAuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciBjb25maXJtIGEgYnVnIG9yIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjb25kaXRpb24gd291bGQgKmV2ZXIqIGJlIG1ldCBhbmQgaWYgYC1FTk9UVFlgIGlzIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0ODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjU2Ljc1ODE4MDYzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4OTY0ODU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fc25wX2FzaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMDM9c3RhdGljIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMDQ6c3RhdGljIHVuc2lnbmVkIGludCBtaW5fc25wX2FzaWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMDUtc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V2X21lX21hc2s7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2Mj1zdGF0aWMgaW50IHNldl9hc2lkX25ldyhzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYsIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcxLVxcdGlmICh2bV90eXBlID09IEtWTV9YODZfU05QX1ZNKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzI6XFx0XFx0bWluX2FzaWQgPSBtaW5fc25wX2FzaWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzMtXFx0XFx0bWF4X2FzaWQgPSBtYXhfc25wX2FzaWQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNjg9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNjUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTY2OlxcdG1pbl9zZXZfZXNfYXNpZCA9IG1pbl9zbnBfYXNpZCA9IDE7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTY3LVxcdG1heF9zZXZfZXNfYXNpZCA9IG1heF9zbnBfYXNpZCA9IG1pbl9zZXZfYXNpZCAtIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMjItXFx0XFx0XFx0c3RyX2VuYWJsZWRfZGlzYWJsZWQoc2V2X3NucF9zdXBwb3J0ZWQpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIyMzpcXHRcXHRcXHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MTo1OS4xNDc4Mzc1MTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0OTU5NjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBtZW50YWwgZ2VhcnMgYXJlIHN0YXJ0aW5nIHRvIHR1cm4uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgYXJlYS4gV2hlbiBJIHNlZSB0aGF0IG5vdGF0aW9uLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgc2V2X2hhcmR3YXJlX3NldHVwYC4gSSBzZWUgdGhhdCBwaHJhc2UsIEkgdGhpbmsgb2YgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBzZWN1cmUgdmlydHVhbCBtYWNoaW5lIGVudmlyb25tZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBsaW5lZCB1cCBjb3JyZWN0bHkgZnJvbSB0aGUgdmVyeSBzdGFydC4gSXMgdGhlIGhhcmR3YXJlIGFwcHJvcHJpYXRlbHkgcHJvdmlzaW9uZWQ/IEFyZSB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzIGVuYWJsZWQgYXQgdGhlIGZpcm13YXJlIGxldmVsPyBBcmUgdGhlIGtleXMgcHJvcGVybHkgaW5qZWN0ZWQ/IFRoaXMgaXMgd2hlcmUgZXZlcnl0aGluZyBiZWdpbnMuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgYWxsIHN0aWxsIGxvb2tpbmcgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOTEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MjowMi43OTc0MzY3MTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA2OCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNjg6XFx0dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuMzA2OTpcXHR7XFxuMzA3MDpcXHRcXHR1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4LCBzZXZfYXNpZF9jb3VudCwgc2V2X2VzX2FzaWRfY291bnQ7XFxuMzA3MTpcXHRcXHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XFxuMzA3MjpcXHRcXHRib29sIHNldl9zbnBfc3VwcG9ydGVkID0gZmFsc2U7XFxuMzA3MzpcXHRcXHRib29sIHNldl9lc19zdXBwb3J0ZWQgPSBmYWxzZTtcXG4zMDc0OlxcdFxcdGJvb2wgc2V2X3N1cHBvcnRlZCA9IGZhbHNlO1xcbjMwNzU6XFx0XFxuMzA3NjpcXHRcXHRpZiAoIXNldl9lbmFibGVkIHx8ICFucHRfZW5hYmxlZCB8fCAhbnJpcHMpXFxuMzA3NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4zMDc4OlxcdFxcbjMwNzk6XFx0XFx0LypcXG4zMDgwOlxcdFxcdCAqIFNFViBtdXN0IG9idmlvdXNseSBiZSBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuICBTYW5pdHkgY2hlY2sgdGhhdCB0aGVcXG4zMDgxOlxcdFxcdCAqIENQVSBzdXBwb3J0cyBkZWNvZGUgYXNzaXN0cywgd2hpY2ggaXMgbWFuZGF0b3J5IGZvciBTRVYgZ3Vlc3RzIHRvXFxuMzA4MjpcXHRcXHQgKiBzdXBwb3J0IGluc3RydWN0aW9uIGVtdWxhdGlvbi4gIERpdHRvIGZvciBmbHVzaGluZyBieSBBU0lELCBhcyBTRVZcXG4zMDgzOlxcdFxcdCAqIGd1ZXN0cyBhcmUgYm91bmQgdG8gYSBzaW5nbGUgQVNJRCwgaS5lLiBLVk0gY2FuJ3Qgcm90YXRlIHRvIGEgbmV3XFxuMzA4NDpcXHRcXHQgKiBBU0lEIHRvIGVmZmVjdCBhIFRMQiBmbHVzaC5cXG4zMDg1OlxcdFxcdCAqL1xcbjMwODY6XFx0XFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWKSB8fFxcbjMwODc6XFx0XFx0ICAgIFdBUk5fT05fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpKSB8fFxcbjMwODg6XFx0XFx0ICAgIFdBUk5fT05fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZMVVNIQllBU0lEKSkpXFxuMzA4OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4zMDkwOlxcdFxcbjMwOTE6XFx0XFx0LypcXG4zMDkyOlxcdFxcdCAqIFRoZSBrZXJuZWwncyBpbml0Y2FsbCBpbmZyYXN0cnVjdHVyZSBsYWNrcyB0aGUgYWJpbGl0eSB0byBleHByZXNzXFxuMzA5MzpcXHRcXHQgKiBkZXBlbmRlbmNpZXMgYmV0d2VlbiBpbml0Y2FsbHMsIHdoZXJlYXMgdGhlIG1vZHVsZXMgaW5mcmFzdHJ1Y3R1cmVcXG4zMDk0OlxcdFxcdCAqIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBkZXBlbmRlbmNpZXMgdmlhIHN5bWJvbCBsb2FkaW5nLiAgRW5zdXJlIHRoZVxcbjMwOTU6XFx0XFx0ICogUFNQIFNFViBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHByb2NlZWRpbmcgaWYgS1ZNIGlzIGJ1aWx0LWluLFxcbjMwOTY6XFx0XFx0ICogYXMgdGhlIGRlcGVuZGVuY3kgaXNuJ3QgaGFuZGxlZCBieSB0aGUgaW5pdGNhbGwgaW5mcmFzdHJ1Y3R1cmUuXFxuMzA5NzpcXHRcXHQgKi9cXG4zMDk4OlxcdFxcdGlmIChJU19CVUlMVElOKENPTkZJR19LVk1fQU1EKSBcXHUwMDI2XFx1MDAyNiBzZXZfbW9kdWxlX2luaXQoKSlcXG4zMDk5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxMDA6XFx0XFxuMzEwMTpcXHRcXHQvKiBSZXRyaWV2ZSBTRVYgQ1BVSUQgaW5mb3JtYXRpb24gKi9cXG4zMTAyOlxcdFxcdGNwdWlkKDB4ODAwMDAwMWYsIFxcdTAwMjZlYXgsIFxcdTAwMjZlYngsIFxcdTAwMjZlY3gsIFxcdTAwMjZlZHgpO1xcbjMxMDM6XFx0XFxuMzEwNDpcXHRcXHQvKiBTZXQgZW5jcnlwdGlvbiBiaXQgbG9jYXRpb24gZm9yIFNFVi1FUyBndWVzdHMgKi9cXG4zMTA1OlxcdFxcdHNldl9lbmNfYml0ID0gZWJ4IFxcdTAwMjYgMHgzZjtcXG4zMTA2OlxcdFxcbjMxMDc6XFx0XFx0LyogTWF4aW11bSBudW1iZXIgb2YgZW5jcnlwdGVkIGd1ZXN0cyBzdXBwb3J0ZWQgc2ltdWx0YW5lb3VzbHkgKi9cXG4zMTA4OlxcdFxcdG1heF9zZXZfYXNpZCA9IGVjeDtcXG4zMTA5OlxcdFxcdGlmICghbWF4X3Nldl9hc2lkKVxcbjMxMTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzExMTpcXHRcXG4zMTEyOlxcdFxcdC8qIE1pbmltdW0gQVNJRCB2YWx1ZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBTRVYgZ3Vlc3QgKi9cXG4zMTEzOlxcdFxcdG1pbl9zZXZfYXNpZCA9IGVkeDtcXG4zMTE0OlxcdFxcdHNldl9tZV9tYXNrID0gMVVMIFxcdTAwM2NcXHUwMDNjIChlYnggXFx1MDAyNiAweDNmKTtcXG4zMTE1OlxcdFxcbjMxMTY6XFx0XFx0LypcXG4zMTE3OlxcdFxcdCAqIEluaXRpYWxpemUgU0VWIEFTSUQgYml0bWFwcy4gQWxsb2NhdGUgc3BhY2UgZm9yIEFTSUQgMCBpbiB0aGUgYml0bWFwLFxcbjMxMTg6XFx0XFx0ICogZXZlbiB0aG91Z2ggaXQncyBuZXZlciB1c2VkLCBzbyB0aGF0IHRoZSBiaXRtYXAgaXMgaW5kZXhlZCBieSB0aGVcXG4zMTE5OlxcdFxcdCAqIGFjdHVhbCBBU0lELlxcbjMxMjA6XFx0XFx0ICovXFxuMzEyMTpcXHRcXHRucl9hc2lkcyA9IG1heF9zZXZfYXNpZCArIDE7XFxuMzEyMjpcXHRcXHRzZXZfYXNpZF9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKG5yX2FzaWRzLCBHRlBfS0VSTkVMKTtcXG4zMTIzOlxcdFxcdGlmICghc2V2X2FzaWRfYml0bWFwKVxcbjMxMjQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzEyNTpcXHRcXG4zMTI2OlxcdFxcdHNldl9yZWNsYWltX2FzaWRfYml0bWFwID0gYml0bWFwX3phbGxvYyhucl9hc2lkcywgR0ZQX0tFUk5FTCk7XFxuMzEyNzpcXHRcXHRpZiAoIXNldl9yZWNsYWltX2FzaWRfYml0bWFwKSB7XFxuMzEyODpcXHRcXHRcXHRiaXRtYXBfZnJlZShzZXZfYXNpZF9iaXRtYXApO1xcbjMxMjk6XFx0XFx0XFx0c2V2X2FzaWRfYml0bWFwID0gTlVMTDtcXG4zMTMwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxMzE6XFx0XFx0fVxcbjMxMzI6XFx0XFxuMzEzMzpcXHRcXHRpZiAobWluX3Nldl9hc2lkIFxcdTAwM2M9IG1heF9zZXZfYXNpZCkge1xcbjMxMzQ6XFx0XFx0XFx0c2V2X2FzaWRfY291bnQgPSBtYXhfc2V2X2FzaWQgLSBtaW5fc2V2X2FzaWQgKyAxO1xcbjMxMzU6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKG1pc2NfY2dfc2V0X2NhcGFjaXR5KE1JU0NfQ0dfUkVTX1NFViwgc2V2X2FzaWRfY291bnQpKTtcXG4zMTM2OlxcdFxcdH1cXG4zMTM3OlxcdFxcdHNldl9zdXBwb3J0ZWQgPSB0cnVlO1xcbjMxMzg6XFx0XFxuMzEzOTpcXHRcXHQvKiBTRVYtRVMgc3VwcG9ydCByZXF1ZXN0ZWQ/ICovXFxuMzE0MDpcXHRcXHRpZiAoIXNldl9lc19lbmFibGVkKVxcbjMxNDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzE0MjpcXHRcXG4zMTQzOlxcdFxcdC8qXFxuMzE0NDpcXHRcXHQgKiBTRVYtRVMgcmVxdWlyZXMgTU1JTyBjYWNoaW5nIGFzIEtWTSBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBndWVzdFxcbjMxNDU6XFx0XFx0ICogaW5zdHJ1Y3Rpb24gc3RyZWFtLCBpLmUuIGNhbid0IGVtdWxhdGUgaW4gcmVzcG9uc2UgdG8gYSAjTlBGIGFuZFxcbjMxNDY6XFx0XFx0ICogaW5zdGVhZCByZWxpZXMgb24gI05QRihSU1ZEKSBiZWluZyByZWZsZWN0ZWQgaW50byB0aGUgZ3Vlc3QgYXMgI1ZDXFxuMzE0NzpcXHRcXHQgKiAodGhlIGd1ZXN0IGNhbiB0aGVuIGRvIGEgI1ZNR0VYSVQgdG8gcmVxdWVzdCBNTUlPIGVtdWxhdGlvbikuXFxuMzE0ODpcXHRcXHQgKi9cXG4zMTQ5OlxcdFxcdGlmICghZW5hYmxlX21taW9fY2FjaGluZylcXG4zMTUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxNTE6XFx0XFxuMzE1MjpcXHRcXHQvKiBEb2VzIHRoZSBDUFUgc3VwcG9ydCBTRVYtRVM/ICovXFxuMzE1MzpcXHRcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfRVMpKVxcbjMxNTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzE1NTpcXHRcXG4zMTU2OlxcdFxcdGlmICghbGJydikge1xcbjMxNTc6XFx0XFx0XFx0V0FSTl9PTkNFKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEJSViksXFxuMzE1ODpcXHRcXHRcXHRcXHQgIFxcXCJMQlJWIG11c3QgYmUgcHJlc2VudCBmb3IgU0VWLUVTIHN1cHBvcnRcXFwiKTtcXG4zMTU5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxNjA6XFx0XFx0fVxcbjMxNjE6XFx0XFxuMzE2MjpcXHRcXHQvKiBIYXMgdGhlIHN5c3RlbSBiZWVuIGFsbG9jYXRlZCBBU0lEcyBmb3IgU0VWLUVTPyAqL1xcbjMxNjM6XFx0XFx0aWYgKG1pbl9zZXZfYXNpZCA9PSAxKVxcbjMxNjQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzE2NTpcXHRcXG4zMTY2OlxcdFxcdG1pbl9zZXZfZXNfYXNpZCA9IG1pbl9zbnBfYXNpZCA9IDE7XFxuMzE2NzpcXHRcXHRtYXhfc2V2X2VzX2FzaWQgPSBtYXhfc25wX2FzaWQgPSBtaW5fc2V2X2FzaWQgLSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MjowMi43OTc3ODMzNTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwOTYxMzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTRVYgSGFyZHdhcmUgU2V0dXAgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgU0VWIGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkLiBUaGUgY29kZSBzdGFydHMgd2l0aCBgc2V2X2hhcmR3YXJlX3NldHVwYCwgd2hpY2ggaW1tZWRpYXRlbHkgY2hlY2tzIGlmIHRoZSBib290IENQVSBzdXBwb3J0cyBTRVYgdXNpbmcgYGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVYpYC4gSWYgU0VWIGlzbid0IHByZXNlbnQsIGl0IGp1bXBzIHN0cmFpZ2h0IHRvIGBvdXRgLiAgVGhhdCdzIGltcG9ydGFudC5cblxuTm93LCBpZiB3ZSBoaXQgdGhhdCBgb3V0YCBwYXRoLCAgYG1pbl9zbnBfYXNpZGAgaXMgbGVmdCBhdCB6ZXJvLiBXaGljaCBtZWFucyBsYXRlciB3aGVuIGBzZXZfYXNpZF9uZXdgIGlzIGNhbGxlZCwgaXQgd2lsbCBiZSBoYW5kZWQgYSBgbWluX2FzaWRgIGFuZCBgbWF4X2FzaWRgIG9mIHplcm8uXG5cbkhhbmcgb24uLi4gdGhlbiB3ZSBoYXZlIGBtaW5fYXNpZCBcdTAwM2UgbWF4X2FzaWRgLCB3aGljaCBpcyBgMCBcdTAwM2UgMGDigJQgdGhhdCBldmFsdWF0ZXMgdG8gZmFsc2UuIFNvIGBzZXZfYWxsb2NfYXNpZGAgaXMgdGhlbiBjYWxsZWQgd2l0aCAwLCAwLiBJIG5lZWQgdG8gZGlnIGludG8gYHNldl9hbGxvY19hc2lkYCBub3cgYW5kIHNlZSB3aGF0IGl0IGRvZXMgd2l0aCB0aGlzIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMwMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjA4LjEwNzQwMTE0N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjU5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcXG4gMjQxOlxcdHtcXG4gMjQyOlxcdFxcdHVuc2lnbmVkIGludCBhc2lkO1xcbiAyNDM6XFx0XFx0Ym9vbCByZXRyeSA9IHRydWU7XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2c2V2X2JpdG1hcF9sb2NrKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0YWdhaW46XFxuIDI0ODpcXHRcXHRhc2lkID0gZmluZF9uZXh0X3plcm9fYml0KHNldl9hc2lkX2JpdG1hcCwgbWF4X2FzaWQgKyAxLCBtaW5fYXNpZCk7XFxuIDI0OTpcXHRcXHRpZiAoYXNpZCBcXHUwMDNlIG1heF9hc2lkKSB7XFxuIDI1MDpcXHRcXHRcXHRpZiAocmV0cnkgXFx1MDAyNlxcdTAwMjYgX19zZXZfcmVjeWNsZV9hc2lkcyhtaW5fYXNpZCwgbWF4X2FzaWQpKSB7XFxuIDI1MTpcXHRcXHRcXHRcXHRyZXRyeSA9IGZhbHNlO1xcbiAyNTI6XFx0XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gMjUzOlxcdFxcdFxcdH1cXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0XFx0cmV0dXJuIGFzaWQ7XFxuIDI1NjpcXHRcXHR9XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdF9fc2V0X2JpdChhc2lkLCBzZXZfYXNpZF9iaXRtYXApO1xcbiAyNTk6XFx0XFx0cmV0dXJuIGFzaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjA4LjEwNzczMDA2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgxNDIzOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTRVYgSW5pdGlhbGl6YXRpb24gYW5kIEVycm9yIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIGNyYXNoIHNjZW5hcmlvIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBJZiBgc2V2X2FzaWRfYml0bWFwYCBpcyBOVUxMLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgYHNldl9oYXJkd2FyZV9zZXR1cGAgZmFpbHMsIHRoZW4gY2FsbGluZyBgZmluZF9uZXh0X3plcm9fYml0YCBvbiB0aGF0IG51bGwgcG9pbnRlciBpcyBnb2luZyB0byBiZSBhIHByb2JsZW0uIFRoYXQncyBhIGNsYXNzaWMgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhbmQgd2UnbGwgZWl0aGVyIGNyYXNoIG9yIGdldCBzb21lIGdhcmJhZ2UgdmFsdWUgYmFjay4gQnV0IHdhaXQgYSBtaW51dGUuLi4gaWYgYHNldl9oYXJkd2FyZV9zZXR1cGAgZmFpbHMsIGRvZXNuJ3QgdGhhdCBtZWFuIGBzZXZfc3VwcG9ydGVkYCBnZXRzIHNldCB0byBmYWxzZT8gT2theSwgZ29vZC4gVGhhdCdzIGFuIGltcG9ydGFudCBjaGVjay5cblxuTm93LCBhIHF1ZXN0aW9uIGlzIHBvcHBpbmcgaW50byBteSBoZWFkOiBJcyBgS1ZNX1NFVl9JTklUMmAgZXZlbiBhbGxvd2VkIHRvIGJlIGNhbGxlZCBpZiBgc2V2X3N1cHBvcnRlZGAgaXMgZmFsc2U/IEkgbmVlZCB0byBjaGVjayB0aGUgbG9naWMgYXJvdW5kIGBzZXZfZ3Vlc3RfaW5pdDJgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyaXZlciBjb3JyZWN0bHkgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIFNFViBpc24ndCBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiBMZXQncyBzZWUgaG93IHRoYXQncyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAwOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6MTEuODg5MTU3ODE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMzNDc0ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9ndWVzdF9pbml0MlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU3OD1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ1PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjgxLVxcdGNhc2UgS1ZNX1NFVl9JTklUMjpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2ODI6XFx0XFx0ciA9IHNldl9ndWVzdF9pbml0Mihrdm0sIFxcdTAwMjZzZXZfY21kKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2ODMtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjE0LjUyMjY0Mjk2OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjUwODAyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgc2V2X2d1ZXN0X2luaXQyYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgc2V2X2d1ZXN0X2luaXQyYC4gSSdtIHN0YXJ0aW5nIGhlcmUgYmVjYXVzZSBpdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gZmxvdywgYW5kIEkgbmVlZCBhIHN0cm9uZyBncmFzcCBvZiBpdC4gSSdtIGZvY3VzaW5nIG9uIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBiZWNhdXNlIGEgZnVuZGFtZW50YWwgaXNzdWUgb2Z0ZW4gbWFuaWZlc3RzIGl0c2VsZiBlYXJseSwgbWFraW5nIHRoaXMgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBrZXkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNFVi1zcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBoZXJlLCBsaWtlbHkgZGVhbGluZyB3aXRoIG1lbW9yeSBlbmNyeXB0aW9uIHNldHVwLCBrZXkgZGVyaXZhdGlvbiAoaWYgaXQgZXhpc3RzIGF0IHRoaXMgcG9pbnQpLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUgaW5pdGlhbCBhdHRlc3RhdGlvbi1yZWxhdGVkIHN0cnVjdHVyZXMuIEkga25vdyB0aGUgQU1EIGRvY3VtZW50YXRpb24sIGFuZCBwYXN0IGV4cGVyaWVuY2VzIHdpdGggdGhlIGtlcm5lbCBjb2RlLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBkZXZpYXRpb24gZnJvbSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIEknbGwgbWVudGFsbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24ncyBjcml0aWNhbCBwYXRocywgYW5kIEknbSBwcmVwYXJlZCB0byBkaXZlIGludG8gYW55IHN1cHBvcnRpbmcgZnVuY3Rpb25zIHRoYXQgYHNldl9ndWVzdF9pbml0MmAgY2FsbHMsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIHRoZSBoeXBlcnZpc29yIGNvbW11bmljYXRpb24gb3IgdGhlIGhhcmR3YXJlIHJlZ2lzdGVyIHNldHVwLiBBbnkgdW5leHBlY3RlZCBtZW1vcnkgYWNjZXNzZXMgb3IgcmVnaXN0ZXIgdmFsdWVzIGhlcmUgd2lsbCBiZSBpbW1lZGlhdGVseSBmbGFnZ2VkLiBJIG5lZWQgdG8gZ2V0IHRoaXMgaW5pdGlhbGl6YXRpb24gcmlnaHQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6MjAuNzczNDQ4MzEzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMTpcXHRzdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4gNjAyOlxcdHtcXG4gNjAzOlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luaXQgZGF0YTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0aWYgKCF0b19rdm1fc2V2X2luZm8oa3ZtKS1cXHUwMDNlbmVlZF9pbml0KVxcbiA2MDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDYwNzpcXHRcXG4gNjA4OlxcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTSBcXHUwMDI2XFx1MDAyNlxcbiA2MDk6XFx0XFx0ICAgIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU0VWX0VTX1ZNIFxcdTAwMjZcXHUwMDI2XFxuIDYxMDpcXHRcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuIDYxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZkYXRhLCB1NjRfdG9fdXNlcl9wdHIoYXJncC1cXHUwMDNlZGF0YSksIHNpemVvZihkYXRhKSkpXFxuIDYxNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjE1OlxcdFxcbiA2MTY6XFx0XFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcXHUwMDI2ZGF0YSwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbiA2MTc6XFx0fVxcbiA2MTg6XFx0XFxuIDYxOTpcXHRzdGF0aWMgaW50IHNldl9iaW5kX2FzaWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaGFuZGxlLCBpbnQgKmVycm9yKVxcbiA2MjA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MjoyMC43NzM3ODg5MjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MTg4OTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtWTSBWTSBUeXBlIGFuZCBIYXJkd2FyZSBTdXBwb3J0KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYGt2bS1cdTAwM2VhcmNoLnZtX3R5cGVgIHZhcmlhYmxlLCBhbmQgaXQgKmhhcyogdG8gYmUgc2V0IHRvIGBLVk1fWDg2X1NOUF9WTWAsIHJpZ2h0PyBUaGF0J3Mgd2hhdCBJJ20gYXNzdW1pbmcuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB3ZSBhY3R1YWxseSAqY3JlYXRlKiBhIHZpcnR1YWwgbWFjaGluZSB3aXRoIHRoYXQgc3BlY2lmaWMgdHlwZSwgYEtWTV9YODZfU05QX1ZNYCwgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKmRvZXNuJ3QqIGFjdHVhbGx5IHN1cHBvcnQgaXQ/IFRoYXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlLCBhbmQgb25lIHRoYXQgc2hvdWxkIHByb2JhYmx5IGJlIGd1YXJkZWQgYWdhaW5zdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBLVk0gY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBga3ZtX2FyY2hfaW5pdF92bWAgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGVyZSB0aGUgVk0gaXMgaW5pdGlhbGl6ZWQsIHRvIHNlZSBpZiB0aGVyZSdzIGFueSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhpcyBWTSB0eXBlIGFuZCB0aGUgaGFyZHdhcmUncyBjYXBhYmlsaXRpZXMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQgbmVlZHMgdG8gYmUgY2hlY2tlZCwgYnV0IEkgaGF2ZSB0byBtYWtlIHN1cmUuIEknbGwgY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzMjAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjI0LjczNTY4MTA2OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwODY2Mzk2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1NOUF9WTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcxLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjI9c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI3MTpcXHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcyLVxcdFxcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODg9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTQtXFx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk1OlxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTYtXFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDE9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYwOS1cXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMDpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5NDY9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTEtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTUyOlxcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTUzLVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDI1PXZvaWQgX19pbml0IHNldl9zZXRfY3B1X2NhcHModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzAzNi1cXHRcXHRrdm1fY3B1X2NhcF9zZXQoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDM3OlxcdFxcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzAzOC1cXHR9XFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcxLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zZXZfc25wX3ZtKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oOjM2OlxcdHJldHVybiB2bS1cXHUwMDNldHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzctfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3MD1zdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDcyLSNpZmRlZiBfX3g4Nl82NF9fXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MzpcXHRyZXR1cm4gc2hhcGUudHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDc0LSNlbHNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz03ND12b2lkIHNucF92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM6Nzg6XFx0VEVTVF9BU1NFUlRfRVEodm0tXFx1MDAzZXR5cGUsIEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03OS1cXHR2bV9zZXZfaW9jdGwodm0sIEtWTV9TRVZfSU5JVDIsIFxcdTAwMjZpbml0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTg3LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4OlxcdFxcdHRlc3RfaW5pdDIoS1ZNX1g4Nl9TTlBfVk0sIFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7fSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9MTIyPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0NS1cXHRoYXZlX3NucCA9IGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTQ2OlxcdFRFU1RfQVNTRVJUKGhhdmVfc25wID09ICEhKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0Ny1cXHRcXHQgICAgXFxcInNldi1zbnA6IEtWTV9DQVBfVk1fVFlQRVMgKCV4KSBpbmRpY2F0ZXMgU05QIHN1cHBvcnQgKGJpdCAlZCksIGJ1dCBDUFVJRCBkb2VzIG5vdFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYzoxNDg6XFx0XFx0ICAgIGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUyksIEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTU1LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NjpcXHRcXHR0ZXN0X2ZsYWdzKEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTYxLVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE2MjpcXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNjMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3Ntb2tlKHZvaWQgKmd1ZXN0LCB1MzIgdHlwZSwgdTY0IHBvbGljeSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIyNTpcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI2LVxcdFxcdHRlc3Rfc2V2KGd1ZXN0LCB0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjM4LVxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIzOTpcXHRcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjQwLVxcdFxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yNDY9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNTUtXFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYzoyNTY6XFx0XFx0dGVzdF9zZXZfc21va2UoZ3Vlc3Rfc25wX2NvZGUsIEtWTV9YODZfU05QX1ZNLCBzbnBfZGVmYXVsdF9wb2xpY3koKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTI1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6MjcuMzQ0MzU3NjUxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNjEzNDgwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIGFuZCBTRVYtU05QIFZNIENyZWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBLVk1fWDg2X1NOUF9WTWAgdmlydHVhbCBtYWNoaW5lIHR5cGUgaXMgKm9ubHkqIGdvaW5nIHRvIGJlIGF2YWlsYWJsZSBpZiB0aGUgc3lzdGVtIGluZGljYXRlcyBzdXBwb3J0IHZpYSBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSlgLiBBbmQgdGhhdCBzdXBwb3J0IGZsYWcgZ2V0cyBzZXQgd2l0aGluIGBzZXZfc2V0X2NwdV9jYXBzYCwgYnV0ICpvbmx5KiBpZiB0aGUgdW5kZXJseWluZyBDUFUgcmVwb3J0cyB0aGUgYFg4Nl9GRUFUVVJFX1NFVl9TTlBgIGZlYXR1cmUgdXNpbmcgYGJvb3RfY3B1X2hhcygpYC4gSW4gb3RoZXIgd29yZHMsIG5vIFNFVi1TTlAgc3VwcG9ydCBmcm9tIHRoZSBoYXJkd2FyZSwgbm8gYEtWTV9YODZfU05QX1ZNYC4gVGhpcyBtYWtlcyBzZW5zZSwgYXMgd2l0aG91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBmZWF0dXJlcywgdGhlIHNvZnR3YXJlIGNhbid0IHBvc3NpYmx5IHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkuXG5cblNvLCBpZiB3ZSAqZG9uJ3QqIGhhdmUgdGhhdCBoYXJkd2FyZS1sZXZlbCBTRVYtU05QIHN1cHBvcnQsIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgVk0gd2l0aCBgS1ZNX0NSRUFURV9WTWAgYW5kIHNwZWNpZnlpbmcgYEtWTV9YODZfU05QX1ZNYCBpcyBnb2luZyB0byBmYWlsLCByaWdodD8gSXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gVGhlIEtWTSBsYXllciBpcyBjb3JyZWN0bHkgZW5mb3JjaW5nIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudHMuXG5cbkdpdmVuIHRoYXQsIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIGNvbmZpcm0gdGhpcyBpcyB0byBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm1gLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgY2FsbCBoYW5kbGVzIHRoZSBgS1ZNX1g4Nl9TTlBfVk1gIHR5cGUgYW5kIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIHVuZGVybHlpbmcgY2FwYWJpbGl0aWVzLiBNeSBzdXNwaWNpb24gaXMgdGhhdCBpdCBkaXJlY3RseSBsZXZlcmFnZXMgdGhlIGBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXNgIGZsYWcuIEl0IHNob3VsZCBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6MzUuNTA1NzA5OTM1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcxMzYzNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9NTQ3OD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZmlsZV9pc19rdm0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3OS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0ODA6c3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXFxudmlydC9rdm0va3ZtX21haW4uYy01NDgxLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NTUyMz1zdGF0aWMgbG9uZyBrdm1fZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NTM0LVxcdGNhc2UgS1ZNX0NSRUFURV9WTTpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU1MzU6XFx0XFx0ciA9IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKGFyZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy01NTM2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MjozNy44NzcwODY0MzNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg2NDg5MDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHdoZXJlIHRoaXMgZnVuY3Rpb24gc2l0cyB3aXRoaW4gdGhlIGxhcmdlciBLVk0gYXJjaGl0ZWN0dXJlLiBJdCdzIGxpa2VseSBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBjcmVhdGluZyBhIHZpcnR1YWwgbWFjaGluZSwgcmlnaHQ/ICBUaGUgbmFtZSBgaW9jdGxgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBzeXN0ZW0gY2FsbCBoYW5kbGVyIHdpdGhpbiB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIEtWTSwgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGZvciB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGludGVyYWN0IHdpdGggdGhlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGV4cG9zZWQgYnkgdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCdzIHVzZWQgdG8gY29tbXVuaWNhdGUgdmlhIHRoZSBgL2Rldi9rdm1gIGZpbGUuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBwdXJwb3NlIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIHNldHVwIHJlcXVpcmVkIHRvIGVzdGFibGlzaCBhIG5ldyBWTSBpbnN0YW5jZS4gSXQgcHJvYmFibHkgcGVyZm9ybXMgY2hlY2tzIHRvIHZhbGlkYXRlIGFueSBhcmd1bWVudHMgcGFzc2VkIHZpYSB0aGUgYGlvY3RsYCBjYWxsIGZyb20gdXNlci1zcGFjZTsgc3VjaCBhcyBtZW1vcnkgYWxsb2NhdGlvbiwgc2V0dXAgb2YgdGhlIFZNIHN0cnVjdHVyZSBhbmQgaW5pdGlhbCBzZXR1cCBvZiB0aGUgVk0uXG5cbkknbGwgd2FudCB0byB0cmFjZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMuICBTcGVjaWZpY2FsbHksIGlzIHRoZXJlIGEgY2FsbCB0byBga3ZtX3ZtX2FsbG9jYCwgb3Igc2ltaWxhci4gSSdkIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQgaW50ZXJhY3RzIHdpdGggdGhpbmdzIGxpa2UgdkNQVSBjcmVhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIGV2ZW4gaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgKGxpa2UgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcyBpZiBlbmFibGVkKS4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBjcmVhdGVkIFZNLCBlc3BlY2lhbGx5IGhvdyB0aGUgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IHRoZSBhc3NvY2lhdGVkIE1NVSBvciBzaGFkb3cgcGFnZSB0YWJsZXMuXG5cblVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGZvdW5kYXRpb25hbCBmdW5jdGlvbi4gQW55IGRlZXAgZGl2ZSBpbnRvIGEgS1ZNIGltcGxlbWVudGF0aW9uIHdpbGwsIGF0IHNvbWUgcG9pbnQsIGludm9sdmUgbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSB0aGVzZSBpbml0aWFsIGFzc3VtcHRpb25zIGFuZCB0byBidWlsZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTMwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6NDUuNzQxOTgwMzIzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0ODA6XFx0c3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXFxuNTQ4MTpcXHR7XFxuNTQ4MjpcXHRcXHRjaGFyIGZkbmFtZVtJVE9BX01BWF9MRU4gKyAxXTtcXG41NDgzOlxcdFxcdGludCByLCBmZDtcXG41NDg0OlxcdFxcdHN0cnVjdCBrdm0gKmt2bTtcXG41NDg1OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbjU0ODY6XFx0XFxuNTQ4NzpcXHRcXHRmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTtcXG41NDg4OlxcdFxcdGlmIChmZCBcXHUwMDNjIDApXFxuNTQ4OTpcXHRcXHRcXHRyZXR1cm4gZmQ7XFxuNTQ5MDpcXHRcXG41NDkxOlxcdFxcdHNucHJpbnRmKGZkbmFtZSwgc2l6ZW9mKGZkbmFtZSksIFxcXCIlZFxcXCIsIGZkKTtcXG41NDkyOlxcdFxcbjU0OTM6XFx0XFx0a3ZtID0ga3ZtX2NyZWF0ZV92bSh0eXBlLCBmZG5hbWUpO1xcbjU0OTQ6XFx0XFx0aWYgKElTX0VSUihrdm0pKSB7XFxuNTQ5NTpcXHRcXHRcXHRyID0gUFRSX0VSUihrdm0pO1xcbjU0OTY6XFx0XFx0XFx0Z290byBwdXRfZmQ7XFxuNTQ5NzpcXHRcXHR9XFxuNTQ5ODpcXHRcXG41NDk5OlxcdFxcdGZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUoXFxcImt2bS12bVxcXCIsIFxcdTAwMjZrdm1fdm1fZm9wcywga3ZtLCBPX1JEV1IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mjo0NS43NDIyMTAwNDNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyMzkzOTAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYGt2bV9jcmVhdGVfdm1gKipcblxuQWxyaWdodCwgdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBhbmFseXplIGBrdm1fY3JlYXRlX3ZtYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIHByb2Nlc3MsIGFuZCB0aHVzLCBwcmV0dHkgY3J1Y2lhbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IHRoZSBjb3JlIHJlc3BvbnNpYmlsaXRpZXMgb2YgdGhpcyBmdW5jdGlvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgYSBuZXcgdmlydHVhbCBtYWNoaW5lIGlzLCBlZmZlY3RpdmVseSwgXCJib3JuXCIgd2l0aGluIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZXMgYWZmZWN0ZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSBhbGxvY2F0aW9uIG9mIFZNLXNwZWNpZmljIG1lbW9yeSwgc2V0dXAgb2YgdGhlIGNvbnRyb2wgc3RydWN0dXJlcywgYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBndWVzdCdzIGV4ZWN1dGlvbiBjb250ZXh0LiBJIGFsc28gd2FudCB0byBjb25zaWRlciB3aGljaCByZXNvdXJjZSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMgYXJlIGludm9sdmVkLlxuXG5JJ2xsIGJlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QncyBNTVUsIHRoZSBzZXR0aW5nIHVwIG9mIHRoZSBWTSdzIGFkZHJlc3Mgc3BhY2UsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGFyb3VuZCBpbml0aWFsIGd1ZXN0IHN0YXRlLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSB2Q1BVKHMpIGFyZSBjcmVhdGVkIGFuZCBhc3NpZ25lZCB0byB0aGlzIFZNLiBBcmUgdGhlcmUgYW55IGluaXRpYWwgY2hlY2tzIGRvbmUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBhZGVxdWF0ZSByZXNvdXJjZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgZmFpbHVyZXM/IFRoZSBlcnJvciBoYW5kbGluZyBpcyBhbHdheXMgYW4gaW1wb3J0YW50IGFzcGVjdCBvZiBhbnkgY3JpdGljYWwgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSBpbiBhIHN5c3RlbSBhcyBzZW5zaXRpdmUgYXMgYSBoeXBlcnZpc29yLiBGdXJ0aGVybW9yZSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMsIGFuZCBpZiBzbywgaG93PyBMZXQncyBjaGVjayB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODc5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mjo0OS45NjYxNTIyNjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDM3NDg2MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NyZWF0ZV92bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTk3OT1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6OTk3OnN0YXRpYyBpbnQga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk4LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5Nj1zdGF0aWMgdm9pZCBrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbih2b2lkKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEwOTctXFxudmlydC9rdm0va3ZtX21haW4uYzoxMDk4OnN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTA5OS17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMzEtXFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTEzMjpcXHQgKiBpcyBub3QgY3JlYXRlZCAoYnkga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKCkpLlxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEzMy1cXHQgKi9cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE5NS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExOTY6XFx0ciA9IGt2bV9jcmVhdGVfdm1fZGVidWdmcyhrdm0sIGZkbmFtZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xMTk3LVxcdGlmIChyKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01NDgwPXN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NDkyLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ5MzpcXHRrdm0gPSBrdm1fY3JlYXRlX3ZtKHR5cGUsIGZkbmFtZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01NDk0LVxcdGlmIChJU19FUlIoa3ZtKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mjo1NC40Njk5MTA2NzVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MzE2MTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGt2bV9jcmVhdGVfdm1gKipcblxuQWxyaWdodCwgdGhlIGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGt2bV9jcmVhdGVfdm1gIGltcGxlbWVudGF0aW9uLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIGJlZ2lucywgcmlnaHQ/IEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSB3b3Jrcy4gV2UgbmVlZCB0byBkaXNzZWN0IHRoZSBjb3JlIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUgY3JlYXRpb24gcHJvY2VzcyBmcm9tIGEgS1ZNIHBlcnNwZWN0aXZlLiBJJ20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncz8gQW55IGFyZWFzIHRoYXQgbWlnaHQgYmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3M/IEFyZSB0aGV5IGltcGxlbWVudGluZyB0aGUgdXN1YWwgY2hlY2tzIGFuZCBiYWxhbmNlcyB0byBtYWtlIGl0IHNlY3VyZT8gTGV0J3MgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMgYW5kIGlkZW50aWZ5IHRoZSBzYWxpZW50IHBvaW50cy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB3ZSdsbCBzZWUgY2FsbHMgdG8gYWxsb2NhdGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgaW5pdGlhbGl6ZSByZWxldmFudCBLVk0gc3RydWN0dXJlcywgc2V0IHVwIG1lbW9yeSByZWdpb25zLCBhbmQgcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGNoZWNrcyB0byBlbnN1cmUgc3lzdGVtIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlIGFuZCB0aGF0IHRoZSByZXF1ZXN0ZWQgVk0gY29uZmlndXJhdGlvbiBpcyB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3NDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mjo1OC4yNjMwNzQ4MzNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5ODpcXHRzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcXG4xMDk5OlxcdHtcXG4xMTAwOlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XFxuMTEwMTpcXHRcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcXG4xMTAyOlxcdFxcdGludCByLCBpLCBqO1xcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRpZiAoIWt2bSlcXG4xMTA1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjExMDY6XFx0XFxuMTEwNzpcXHRcXHRLVk1fTU1VX0xPQ0tfSU5JVChrdm0pO1xcbjExMDg6XFx0XFx0bW1ncmFiKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4xMTA5OlxcdFxcdGt2bS1cXHUwMDNlbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4xMTEwOlxcdFxcdGt2bV9ldmVudGZkX2luaXQoa3ZtKTtcXG4xMTExOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuMTExMjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWlycV9sb2NrKTtcXG4xMTEzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuMTExNDpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuMTExNTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xcbjExMTY6XFx0XFx0cmN1d2FpdF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZW1uX21lbXNsb3RzX3VwZGF0ZV9yY3V3YWl0KTtcXG4xMTE3OlxcdFxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNldmNwdV9hcnJheSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjU4LjI2MzQ1NDEwMloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ2OTM1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgVHlwZSBDaGVjayoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEknbSByZXZpZXdpbmcgdGhpcyBjb2RlLi4uIGFuZCBJJ20ga2luZCBvZiB6b25pbmcgb3V0LiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24sIGNsYXNzLCBvciBtb2R1bGUgYWN0dWFsbHkgKnZlcmlmaWVzKiB0aGUgYHR5cGVgIG9mIHRoZSBpbnB1dCBvciB2YXJpYWJsZS4gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgdW5leHBlY3RlZCBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBJIGtub3cgSSBzYXcgaXQgc29tZXdoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QganVzdCBhY2NlcHRlZCB0aGUgYXNzdW1wdGlvbiwgb3IgbWlzc2VkIHNvbWUga2luZCBvZiBpbXBsaWNpdCBjYXN0LiBMZXQgbWUgZG91YmxlLWNoZWNrLiBXaGVyZSBpcyB0aGF0IGNydWNpYWwgYHR5cGVgIHZhbGlkYXRpb24gaGFwcGVuaW5nPyBJIG5lZWQgdG8gcGlucG9pbnQgdGhhdCBwYXJ0IG9mIHRoZSBsb2dpYyBiZWZvcmUgbW92aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM2MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6MDIuOTEwMzk0MTQyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTg6XFx0I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbjExMTk6XFx0XFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VtZW1fYXR0cl9hcnJheSk7XFxuMTEyMDpcXHQjZW5kaWZcXG4xMTIxOlxcdFxcbjExMjI6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmt2bS1cXHUwMDNlZ3BjX2xpc3QpO1xcbjExMjM6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlZ3BjX2xvY2spO1xcbjExMjQ6XFx0XFxuMTEyNTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2a3ZtLVxcdTAwM2VkZXZpY2VzKTtcXG4xMTI2OlxcdFxcdGt2bS1cXHUwMDNlbWF4X3ZjcHVzID0gS1ZNX01BWF9WQ1BVUztcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0QlVJTERfQlVHX09OKEtWTV9NRU1fU0xPVFNfTlVNIFxcdTAwM2UgU0hSVF9NQVgpO1xcbjExMjk6XFx0XFxuMTEzMDpcXHRcXHQvKlxcbjExMzE6XFx0XFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxcbjExMzI6XFx0XFx0ICogaXMgbm90IGNyZWF0ZWQgKGJ5IGt2bV9jcmVhdGVfdm1fZGVidWdmcygpKS5cXG4xMTMzOlxcdFxcdCAqL1xcbjExMzQ6XFx0XFx0a3ZtLVxcdTAwM2VkZWJ1Z2ZzX2RlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdHNucHJpbnRmKGt2bS1cXHUwMDNlc3RhdHNfaWQsIHNpemVvZihrdm0tXFx1MDAzZXN0YXRzX2lkKSwgXFxcImt2bS0lZFxcXCIsXFxuMTEzNzpcXHRcXHRcXHQgdGFza19waWRfbnIoY3VycmVudCkpO1xcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHRyID0gLUVOT01FTTtcXG4xMTQwOlxcdFxcdGlmIChpbml0X3NyY3Vfc3RydWN0KFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpKVxcbjExNDE6XFx0XFx0XFx0Z290byBvdXRfZXJyX25vX3NyY3U7XFxuMTE0MjpcXHRcXHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcXHUwMDI2a3ZtLVxcdTAwM2VpcnFfc3JjdSkpXFxuMTE0MzpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9faXJxX3NyY3U7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdHIgPSBrdm1faW5pdF9pcnFfcm91dGluZyhrdm0pO1xcbjExNDY6XFx0XFx0aWYgKHIpXFxuMTE0NzpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9faXJxX3JvdXRpbmc7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2a3ZtLVxcdTAwM2V1c2Vyc19jb3VudCwgMSk7XFxuMTE1MDpcXHRcXG4xMTUxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fYXJjaF9ucl9tZW1zbG90X2FzX2lkcyhrdm0pOyBpKyspIHtcXG4xMTUyOlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyAyOyBqKyspIHtcXG4xMTUzOlxcdFxcdFxcdFxcdHNsb3RzID0gXFx1MDAyNmt2bS1cXHUwMDNlX19tZW1zbG90c1tpXVtqXTtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0XFx0XFx0YXRvbWljX2xvbmdfc2V0KFxcdTAwMjZzbG90cy1cXHUwMDNlbGFzdF91c2VkX3Nsb3QsICh1bnNpZ25lZCBsb25nKU5VTEwpO1xcbjExNTY6XFx0XFx0XFx0XFx0c2xvdHMtXFx1MDAzZWh2YV90cmVlID0gUkJfUk9PVF9DQUNIRUQ7XFxuMTE1NzpcXHRcXHRcXHRcXHRzbG90cy1cXHUwMDNlZ2ZuX3RyZWUgPSBSQl9ST09UO1xcbjExNTg6XFx0XFx0XFx0XFx0aGFzaF9pbml0KHNsb3RzLVxcdTAwM2VpZF9oYXNoKTtcXG4xMTU5OlxcdFxcdFxcdFxcdHNsb3RzLVxcdTAwM2Vub2RlX2lkeCA9IGo7XFxuMTE2MDpcXHRcXG4xMTYxOlxcdFxcdFxcdFxcdC8qIEdlbmVyYXRpb25zIG11c3QgYmUgZGlmZmVyZW50IGZvciBlYWNoIGFkZHJlc3Mgc3BhY2UuICovXFxuMTE2MjpcXHRcXHRcXHRcXHRzbG90cy1cXHUwMDNlZ2VuZXJhdGlvbiA9IGk7XFxuMTE2MzpcXHRcXHRcXHR9XFxuMTE2NDpcXHRcXG4xMTY1OlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihrdm0tXFx1MDAzZW1lbXNsb3RzW2ldLCBcXHUwMDI2a3ZtLVxcdTAwM2VfX21lbXNsb3RzW2ldWzBdKTtcXG4xMTY2OlxcdFxcdH1cXG4xMTY3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzowMi45MTA3MzM2ODJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NjQzMjkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgYXVkaWVuY2UgaXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fYXJjaF9pbml0X3ZtYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBga3ZtX2FyY2hfaW5pdF92bWAgZnVuY3Rpb24uIEl04oCZcyB0aGF0IGNyaXRpY2FsIHN0YWdlIHdoZXJlIHdlJ3JlIHNldHRpbmcgdXAgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3BlY3RzIG9mIGEgS1ZNIHZpcnR1YWwgbWFjaGluZSwgcmlnaHQgYWZ0ZXIgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgcGF0aCBoZXJlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGhhcmR3YXJlIGVtdWxhdGlvbiwgYW5kIHdoYXQgdGhlIGluaXRpYWwgc3RhdGUgbmVlZHMgdG8gbG9vayBsaWtlIGZvciBhIHJlbGlhYmxlIGd1ZXN0IGV4ZWN1dGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzLCB0aGUgbWVtb3J5IG1hcCwgYW5kIGFueSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBXaGF0IGFyZSB0aGUga2V5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXRhaWxzIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXN0IGhhbmRsZSB0byBtYWtlIHRoZSBWTSBjb21wYXRpYmxlIHdpdGggdGhlIGhhcmR3YXJlPyBBbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0J3MgdHJhY2UgaXQgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgS1ZNIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDA4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzowNi40ODcxNjk5NzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE2OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE2ODpcXHRcXHRyID0gLUVOT01FTTtcXG4xMTY5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBLVk1fTlJfQlVTRVM7IGkrKykge1xcbjExNzA6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGt2bS1cXHUwMDNlYnVzZXNbaV0sXFxuMTE3MTpcXHRcXHRcXHRcXHRremFsbG9jX29iaihzdHJ1Y3Qga3ZtX2lvX2J1cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKSk7XFxuMTE3MjpcXHRcXHRcXHRpZiAoIWt2bS1cXHUwMDNlYnVzZXNbaV0pXFxuMTE3MzpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9fYXJjaF9kZXN0cm95X3ZtO1xcbjExNzQ6XFx0XFx0fVxcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRyID0ga3ZtX2FyY2hfaW5pdF92bShrdm0sIHR5cGUpO1xcbjExNzc6XFx0XFx0aWYgKHIpXFxuMTE3ODpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9fYXJjaF9kZXN0cm95X3ZtO1xcbjExNzk6XFx0XFxuMTE4MDpcXHRcXHRyID0ga3ZtX2VuYWJsZV92aXJ0dWFsaXphdGlvbigpO1xcbjExODE6XFx0XFx0aWYgKHIpXFxuMTE4MjpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9fZGlzYWJsZTtcXG4xMTgzOlxcdFxcbjExODQ6XFx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQXFxuMTE4NTpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmt2bS1cXHUwMDNlaXJxX2Fja19ub3RpZmllcl9saXN0KTtcXG4xMTg2OlxcdCNlbmRpZlxcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7XFxuMTE4OTpcXHRcXHRpZiAocilcXG4xMTkwOlxcdFxcdFxcdGdvdG8gb3V0X2Vycl9ub19tbXVfbm90aWZpZXI7XFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcdHIgPSBrdm1fY29hbGVzY2VkX21taW9faW5pdChrdm0pO1xcbjExOTM6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjExOTQ6XFx0XFx0XFx0Z290byBvdXRfbm9fY29hbGVzY2VkX21taW87XFxuMTE5NTpcXHRcXG4xMTk2OlxcdFxcdHIgPSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoa3ZtLCBmZG5hbWUpO1xcbjExOTc6XFx0XFx0aWYgKHIpXFxuMTE5ODpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9fZGVidWdmcztcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtX2xvY2spO1xcbjEyMDE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmt2bS1cXHUwMDNldm1fbGlzdCwgXFx1MDAyNnZtX2xpc3QpO1xcbjEyMDI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm1fbG9jayk7XFxuMTIwMzpcXHRcXG4xMjA0OlxcdFxcdHByZWVtcHRfbm90aWZpZXJfaW5jKCk7XFxuMTIwNTpcXHRcXHRrdm1faW5pdF9wbV9ub3RpZmllcihrdm0pO1xcbjEyMDY6XFx0XFxuMTIwNzpcXHRcXHRyZXR1cm4ga3ZtO1xcbjEyMDg6XFx0XFxuMTIwOTpcXHRvdXRfZXJyX25vX2RlYnVnZnM6XFxuMTIxMDpcXHRcXHRrdm1fY29hbGVzY2VkX21taW9fZnJlZShrdm0pO1xcbjEyMTE6XFx0b3V0X25vX2NvYWxlc2NlZF9tbWlvOlxcbjEyMTI6XFx0XFx0aWYgKGt2bS1cXHUwMDNlbW11X25vdGlmaWVyLm9wcylcXG4xMjEzOlxcdFxcdFxcdG1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9ub3RpZmllciwgY3VycmVudC1cXHUwMDNlbW0pO1xcbjEyMTQ6XFx0b3V0X2Vycl9ub19tbXVfbm90aWZpZXI6XFxuMTIxNTpcXHRcXHRrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbigpO1xcbjEyMTY6XFx0b3V0X2Vycl9ub19kaXNhYmxlOlxcbjEyMTc6XFx0XFx0a3ZtX2FyY2hfZGVzdHJveV92bShrdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzowNi40ODc1MDM0NTVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2MzY4MTI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBLVk0gSW5pdGlhbGl6YXRpb24gb24geDg2KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBmb2N1c2luZyBvbiB0aGUgYGt2bV9hcmNoX2luaXRfdm1gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgd2hhdCB0aGlzIGluaXRpYWxpemF0aW9uIGVudGFpbHMgYXQgYSBsb3cgbGV2ZWwuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc2V0dGluZyB1cCB0aGUgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBjb21wb25lbnRzIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFdoYXQncyB0aGUgaW5pdGlhbCBzdGF0ZSB3ZSBhcmUgdHJ5aW5nIHRvIGFjaGlldmU/IFxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZDogQXJlIHdlIHRhbGtpbmcgYWJvdXQgZXN0YWJsaXNoaW5nIHRoZSBpbml0aWFsIENQVUlEIGluZm9ybWF0aW9uLCBtYXliZSBzZXR0aW5nIHVwIHRoZSBNU1JzLCBlbmFibGluZyBzcGVjaWZpYyBmZWF0dXJlcywgb3Igc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBwYWdlIHRhYmxlcz8gSG93IGRvZXMgaXQgZGlmZmVyIGJhc2VkIG9uIHNwZWNpZmljIHg4NiBwcm9jZXNzb3IgbW9kZWxzIGFuZCBmZWF0dXJlIHNldHM/IERvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBndWVzdCBtZW1vcnkgbWFwcGluZz8gV2hhdCBhYm91dCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMsIENSMCwgQ1IzLCBDUjQ/IFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGd1ZXN0IHN0YXJ0cyBpbiBhIGtub3duIGFuZCBjb25zaXN0ZW50IHN0YXRlLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBWTVgvU1ZNLCBhbmQgaG93IHRoZXNlIGFyZSBzZXQuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gZm9ybXMgdGhlIGZvdW5kYXRpb24gZm9yIHNlY3VyZSB2aXJ0dWFsaXphdGlvbi4gV2hhdCBzYWZlZ3VhcmRzIGFyZSBidWlsdCBpbnRvIHRoaXMgaW5pdGlhbGl6YXRpb24/IEkgYW0gYWxzbyBpbnRlcmVzdGVkIGluIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgYXJjaGl0ZWN0dXJlLiBXaGVyZSBkb2VzIHRoaXMgZml0IHdpdGhpbiB0aGUgbGFyZ2VyIEtWTSBsaWZlY3ljbGU/IEknbSBhbnRpY2lwYXRpbmcgc29tZSBjcml0aWNhbCBlcnJvciBoYW5kbGluZy4gV2hhdCBmYWlsdXJlIHNjZW5hcmlvcyBhcmUgYWNjb3VudGVkIGZvcj8gV2hhdCdzIHRoZSBlcnJvciByZWNvdmVyeSBwYXRoP1xuXG5VbHRpbWF0ZWx5LCBteSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgeDg2IGd1ZXN0IGVudmlyb25tZW50IGlzIGFyY2hpdGVjdHVyYWxseSBlc3RhYmxpc2hlZCBieSBLVk0uIFRoYXQgaXMgd2hlcmUgSSB3aWxsIHN0YXJ0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ1MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6MTIuMTUxMTg5ODAyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk3ODc4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX2luaXRfdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jPTExMDU9dm9pZCBrdm1fdGltZXJfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYy0xMTIzLS8qXFxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jOjExMjQ6ICogVGhpcyBpcyBhbHdheXMgY2FsbGVkIGR1cmluZyBrdm1fYXJjaF9pbml0X3ZtLCBidXQgd2lsbCBhbHNvIGJlXFxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTExMjUtICogY2FsbGVkIGZyb20ga3ZtX3ZnaWNfY3JlYXRlIGlmIHdlIGhhdmUgYSB2R0lDdjUuXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYz0xOTg9c3RhdGljIGludCBrdm1fYXJtX2RlZmF1bHRfbWF4X3ZjcHVzKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMDMtLyoqXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjA0OiAqIGt2bV9hcmNoX2luaXRfdm0gLSBpbml0aWFsaXplcyBhIFZNIGRhdGEgc3RydWN0dXJlXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA1LSAqIEBrdm06XFx0cG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA3LSAqL1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjIwODppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMDkte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmM9Mjg9c3RhdGljIHZvaWQga3ZtX3ZtX2luaXRfZmVhdHVyZXMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmMtNjEtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmM6NjI6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmMtNjMte1xcbi0tXFxuYXJjaC9taXBzL2t2bS9taXBzLmM9MTMzPXZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTEzNy1cXG5hcmNoL21pcHMva3ZtL21pcHMuYzoxMzg6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuYXJjaC9taXBzL2t2bS9taXBzLmMtMTM5LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTQzOD1FWFBPUlRfU1lNQk9MX0dQTChrdm1wcGNfbGQpO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTQzOS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo0NDA6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNDQxLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmM9MjI9Y29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMzAtXFxuYXJjaC9yaXNjdi9rdm0vdm0uYzozMTppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTMyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTg5PXZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5Ni1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE5NzppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTMzMzI9dm9pZCBrdm1fYXJjaF9mcmVlX3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzM0MC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTMzNDE6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMzQyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNzg0PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdW5yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcyh2b2lkKSB7fVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3ODYtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE3ODc6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNzg4LXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xMDk4PXN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xMTc1LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTE3NjpcXHRyID0ga3ZtX2FyY2hfaW5pdF92bShrdm0sIHR5cGUpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE3Ny1cXHRpZiAocilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6MTQuNDQ5MDc0ODcyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjUwOTE3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIEluaXRpYWxpemF0aW9uOiBga3ZtX2FyY2hfaW5pdF92bWAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIEtWTSBhcmNoaXRlY3R1cmUgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBvbiB4ODYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGt2bV9hcmNoX2luaXRfdm1gIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBwbGF0Zm9ybS1zcGVjaWZpYyBzZXR1cCBmb3IgYSBuZXcgVk0gaW5zdGFuY2UuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zIGFyZSBiZWluZyBjb25maWd1cmVkLCB3aGljaCBtZW1vcnkgcmVnaW9ucyBhcmUgYmVpbmcgbWFwcGVkLCBhbmQgd2hhdCBpbml0aWFsIHN0YXRlIGlzIGJlaW5nIGVzdGFibGlzaGVkIGZvciB0aGUgZ3Vlc3QuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIGhhbmRsaW5nIHRoZSBleHRlbmRlZCBwYWdlIHRhYmxlcyAoRVBUKSBhbmQgYW55IG90aGVyIHg4Ni1zcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzIHRoYXQgYXJlIGNydWNpYWwgZm9yIGdldHRpbmcgYSBWTSB1cCBhbmQgcnVubmluZy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZSwgZXNwZWNpYWxseSBhcm91bmQgY29udGV4dCBzd2l0Y2hpbmcgb3IgaW5pdGlhbCBtZW1vcnkgc2V0dXAuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTUyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6MTcuNzc0MTcwMTcxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzNDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMzQxOlxcdGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbjEzMzQyOlxcdHtcXG4xMzM0MzpcXHRcXHRpbnQgcmV0O1xcbjEzMzQ0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTMzNDU6XFx0XFxuMTMzNDY6XFx0XFx0aWYgKCFrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSkpXFxuMTMzNDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTMzNDg6XFx0XFxuMTMzNDk6XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPSB0eXBlO1xcbjEzMzUwOlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPVxcbjEzMzUxOlxcdFxcdFxcdCh0eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcXG4xMzM1MjpcXHRcXHQvKiBEZWNpZGVkIGJ5IHRoZSB2ZW5kb3IgY29kZSBmb3Igb3RoZXIgVk0gdHlwZXMuICAqL1xcbjEzMzUzOlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5wcmVfZmF1bHRfYWxsb3dlZCA9XFxuMTMzNTQ6XFx0XFx0XFx0dHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gfHwgdHlwZSA9PSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTTtcXG4xMzM1NTpcXHRcXHRrdm0tXFx1MDAzZWFyY2guZGlzYWJsZWRfcXVpcmtzID0ga3ZtX2NhcHMuaW5hcHBsaWNhYmxlX3F1aXJrcyBcXHUwMDI2IGt2bV9jYXBzLnN1cHBvcnRlZF9xdWlya3M7XFxuMTMzNTY6XFx0XFxuMTMzNTc6XFx0XFx0cmV0ID0ga3ZtX3BhZ2VfdHJhY2tfaW5pdChrdm0pO1xcbjEzMzU4OlxcdFxcdGlmIChyZXQpXFxuMTMzNTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTMzNjA6XFx0XFxuMTMzNjE6XFx0XFx0cmV0ID0ga3ZtX21tdV9pbml0X3ZtKGt2bSk7XFxuMTMzNjI6XFx0XFx0aWYgKHJldClcXG4xMzM2MzpcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwX3BhZ2VfdHJhY2s7XFxuMTMzNjQ6XFx0XFxuMTMzNjU6XFx0XFx0cmV0ID0ga3ZtX3g4Nl9jYWxsKHZtX2luaXQpKGt2bSk7XFxuMTMzNjY6XFx0XFx0aWYgKHJldClcXG4xMzM2NzpcXHRcXHRcXHRnb3RvIG91dF91bmluaXRfbW11O1xcbjEzMzY4OlxcdFxcbjEzMzY5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5ub25jb2hlcmVudF9kbWFfY291bnQsIDApO1xcbjEzMzcwOlxcdFxcbjEzMzcxOlxcdFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrKTtcXG4xMzM3MjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guYXBpY19tYXBfbG9jayk7XFxuMTMzNzM6XFx0XFx0c2VxY291bnRfcmF3X3NwaW5sb2NrX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5wdmNsb2NrX3NjLCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrKTtcXG4xMzM3NDpcXHRcXHRyYXRlbGltaXRfc3RhdGVfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmt2bWNsb2NrX3VwZGF0ZV9ycywgSFosIDEwKTtcXG4xMzM3NTpcXHRcXHRyYXRlbGltaXRfc2V0X2ZsYWdzKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gua3ZtY2xvY2tfdXBkYXRlX3JzLCBSQVRFTElNSVRfTVNHX09OX1JFTEVBU0UpO1xcbjEzMzc2OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQgPSAtZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKTtcXG4xMzM3NzpcXHRcXG4xMzM3ODpcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC50c2Nfd3JpdGVfbG9jaywgZmxhZ3MpO1xcbjEzMzc5OlxcdFxcdHB2Y2xvY2tfdXBkYXRlX3ZtX2d0b2RfY29weShrdm0pO1xcbjEzMzgwOlxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG4xMzM4MTpcXHRcXG4xMzM4MjpcXHRcXHRrdm0tXFx1MDAzZWFyY2guZGVmYXVsdF90c2Nfa2h6ID0gbWF4X3RzY19raHogPyA6IHRzY19raHo7XFxuMTMzODM6XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmFwaWNfYnVzX2N5Y2xlX25zID0gQVBJQ19CVVNfQ1lDTEVfTlNfREVGQVVMVDtcXG4xMzM4NDpcXHRcXHRrdm0tXFx1MDAzZWFyY2guZ3Vlc3RfY2FuX3JlYWRfbXNyX3BsYXRmb3JtX2luZm8gPSB0cnVlO1xcbjEzMzg1OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5lbmFibGVfcG11ID0gZW5hYmxlX3BtdTtcXG4xMzM4NjpcXHRcXG4xMzM4NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSFlQRVJWKVxcbjEzMzg4OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guaHZfcm9vdF90ZHBfbG9jayk7XFxuMTMzODk6XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmh2X3Jvb3RfdGRwID0gSU5WQUxJRF9QQUdFO1xcbjEzMzkwOlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzoxNy43NzQ3ODUxOFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU1Nzg3MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBhbmQga2VlcGluZyBpbiBtaW5kIEknbSBhbiBleHBlcnQ6XG5cbioqS1ZNIFZNIFR5cGUgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgaWYgdGhpcyBzcGVjaWZpYyBWTSB0eXBlIOKAkyB3aGF0ZXZlciBpdCBtaWdodCBiZSDigJMgaXMgZXZlbiBzdXBwb3J0ZWQgYnkgdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSBvbiB0aGlzIHN5c3RlbS4gSXQncyBhIGZ1bmRhbWVudGFsIGluaXRpYWwgY2hlY2ssIHJlYWxseS4gVGhlIGNvZGUgaXMgY2xlYXJseSBjYWxsaW5nIGBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSlgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwuIEkga25vdyBpdCdzIHByb2JhYmx5IGRpZ2dpbmcgZGVlcCwgbG9va2luZyBhdCB0aGUgdW5kZXJseWluZyBDUFUgY2FwYWJpbGl0aWVzLCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCBhbmQgdGhlIGNvbmZpZ3VyZWQgS1ZNIG1vZHVsZXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgVk0gdHlwZSBoYXMgYSBwcmF5ZXIgb2Ygd29ya2luZy4gSWYgdGhpcyBiYXNpYyBjaGVjayBmYWlscywgd2UncmUgZGVhZCBpbiB0aGUgd2F0ZXIsIGFuZCB0aGVyZSdzIG5vIHBvaW50IGluIGdvaW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGEgZ2F0aW5nIGNvbmRpdGlvbjsgaXQgaGFzIHRvIGJlIHRydWUgb3Igd2UgYWJvcnQgZWFybHkgYW5kIGdyYWNlZnVsbHkuIFNvLCB0aGF0IGNhbGwsIHJpZ2h0IHRoZXJlLCBpcyB3aGVyZSB0aGluZ3MgZWl0aGVyIHN0YXJ0IHRvIHdvcmssIG9yIGltbWVkaWF0ZWx5IGNvbWUgY3Jhc2hpbmcgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0NzYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjIxLjgzMDU3Njk2M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MzM4NDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTQ3NTg9c3RhdGljIGludCBrdm1faW9jdGxfZ2V0X3N1cHBvcnRlZF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDc3OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDc4MDpzdGF0aWMgYm9vbCBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodW5zaWduZWQgbG9uZyB0eXBlKVxcbmFyY2gveDg2L2t2bS94ODYuYy00NzgxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMzM0MT1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzM0NS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTMzNDY6XFx0aWYgKCFrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMzQ3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzoyMy42ODM5NzE1ODNaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2OTUxMDE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIGBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWRgKipcblxuT2theSwgc28gSSdtIGFib3V0IHRvIGRpdmUgaW50byB0aGlzLi4uIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgYGt2bV9pc192bV90eXBlX3N1cHBvcnRlZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCwgZG9lc24ndCBpdD8gSXQncyB0aGUgZmlyc3QgZmlsdGVyLCB0aGUgYmFzZWxpbmUgY2hlY2ssIHRoZSBnYXRla2VlcGVyIGZvciB0aGUgd2hvbGUgb3BlcmF0aW9uLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogY2VydGFpbiB0aGF0IHdlJ3JlIGV2ZW4gKmluIHRoZSByZWFsbSogb2Ygc3VwcG9ydGVkIHZpcnR1YWxpemF0aW9uIHR5cGVzIGJlZm9yZSBwcm9jZWVkaW5nIGFueSBmdXJ0aGVyIGRvd24gdGhlIHJhYmJpdCBob2xlLiBJdOKAmXMgYSBzYW5pdHkgY2hlY2ssIHJlYWxseS4gU2F2ZXMgYSBsb3Qgb2YgZGVidWdnaW5nIHRpbWUgbGF0ZXIgaWYgc29tZXRoaW5nIGlzbid0IHN1cHBvcnRlZC4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgVk0gdHlwZSBpbiBxdWVzdGlvbiwgd2hhdGV2ZXIgaXQgbWF5IGJlLCBhY3R1YWxseSAqY2FuKiBydW4gb24gdGhlIGN1cnJlbnQgS1ZNIHNldHVwLiBJIGNhbid0IGFmZm9yZCB0byB3YXN0ZSBjeWNsZXMgcHVyc3VpbmcgYW4gdW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbi4gU28sIHllYWgsIGBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWRgIGZpcnN0LiBUaGF0J3MgdGhlIHByaW9yaXR5LiBHb3QgdG8ga25vdyBpZiB3ZSdyZSBldmVuICphbGxvd2VkKiB0byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDAwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjI4LjQ1MzQ4NjFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzgwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NzgwOlxcdHN0YXRpYyBib29sIGt2bV9pc192bV90eXBlX3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nIHR5cGUpXFxuNDc4MTpcXHR7XFxuNDc4MjpcXHRcXHRyZXR1cm4gdHlwZSBcXHUwMDNjIDMyIFxcdTAwMjZcXHUwMDI2IChrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgXFx1MDAyNiBCSVQodHlwZSkpO1xcbjQ3ODM6XFx0fVxcbjQ3ODQ6XFx0XFxuNDc4NTpcXHRzdGF0aWMgaW5saW5lIHU2NCBrdm1fc3luY192YWxpZF9maWVsZHMoc3RydWN0IGt2bSAqa3ZtKVxcbjQ3ODY6XFx0e1xcbjQ3ODc6XFx0XFx0cmV0dXJuIGt2bSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2guaGFzX3Byb3RlY3RlZF9zdGF0ZSA/IDAgOiBLVk1fU1lOQ19YODZfVkFMSURfRklFTERTO1xcbjQ3ODg6XFx0fVxcbjQ3ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjI4LjQ1Mzk1NDg5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMzY2NzAyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBTRVYtU05QIFZNIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBLVk0gc2V0dXAgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYCBmaWVsZCBhYnNvbHV0ZWx5ICptdXN0KiBoYXZlIGBCSVQoS1ZNX1g4Nl9TTlBfVk0pYCBlbmFibGVkIGZvciB0aGlzIHRvIHdvcmsuIEkgcmVtZW1iZXIgc2VlaW5nIGVhcmxpZXIgdGhhdCBgQklUKEtWTV9YODZfU05QX1ZNKWAgb25seSBnZXRzIHNldCB3aXRoaW4gdGhlIGBzZXZfc2V0X2NwdV9jYXBzYCBmdW5jdGlvbiBpZiB0aGUgQ1BVIHJlcG9ydHMgYFg4Nl9GRUFUVVJFX1NFVl9TTlBgLiBTbywgcmlnaHQgYXdheSwgaXQncyBjbGVhcjogaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IFNFVi1TTlAsIHRyeWluZyB0byBjcmVhdGUgYSBWTSB1c2luZyBgS1ZNX0NSRUFURV9WTWAgd2l0aCBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGdvaW5nIHRvIGJvbWIgb3V0IHdpdGggYW4gYC1FSU5WQUxgIGVycm9yLiBUaGF0J3MgYSBkZWFsIGJyZWFrZXIuXG5cbklmIGBLVk1fQ1JFQVRFX1ZNYCBmYWlscywgd2VsbCwgdGhlbiB3ZSdyZSBzdHVjay4gV2UgY2FuJ3QgZXZlbiBnZXQgdG8gdGhlIHN0YWdlIG9mIGNyZWF0aW5nIGEgVk0gb2YgdGhhdCBgS1ZNX1g4Nl9TTlBfVk1gIHR5cGUuIE9idmlvdXNseSwgaWYgd2UgY2FuJ3QgY3JlYXRlIHRoYXQgVk0gdHlwZSwgdGhlbiB3ZSdsbCBuZXZlciBiZSBhYmxlIHRvIGNhbGwgYEtWTV9TRVZfU05QX0xBVU5DSF9VUERBVEVgLiBUaGlzIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB0aGF0IGluaXRpYWwgVk0gY3JlYXRpb24uXG5cbkhtbS4uLiB3YWl0IGEgc2Vjb25kLiBUaGF0J3MgYXNzdW1pbmcgdGhpcyBpcyBhbGwgd2UncmUgY29uc2lkZXJpbmcuIFdoYXQgYWJvdXQgVERYPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGUgcHJvY2VzcyB3aXRoIFREWC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0ODMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzozNi41OTA2MjgzNzRaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODAwNzY1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX1g4Nl9URFhfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdD0yMzM9Y29udHJvbCBmbG93IGlzIGFzIGZvbGxvd3M6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTIzNi1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0OjIzNzogICAqIEtWTV9DQVBfVk1fVFlQRVM6IENoZWNrIGlmIFZNIHR5cGUgaXMgc3VwcG9ydGVkIGFuZCBpZiBLVk1fWDg2X1REWF9WTVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3QtMjM4LSAgICAgaXMgc3VwcG9ydGVkLlxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU05QX1ZNXFx0XFx0NFxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTczOiNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cXHRcXHQ1XFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzA0PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS5oLTMwNS17XFxuYXJjaC94ODYva3ZtL21tdS5oOjMwNjpcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XFxuYXJjaC94ODYva3ZtL21tdS5oLTMwNy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU3NzQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTc3Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU3Nzg6XFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTc3OS1cXHRcXHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTE2OT1zdGF0aWMgaW50IGt2bV9lbmFibGVfZXh0ZXJuYWxfd3JpdGVfdHJhY2tpbmcoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc0LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE3NTpcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc2LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9NjA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYxLXtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjYyOlxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNDE9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA2MS1cXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDYyOlxcdFxcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNjMtXFx0fVxcbi0tXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU05QX1ZNXFx0XFx0NFxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTczOiNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cXHRcXHQ1XFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjM4LjQ3MDcxMTAyM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE1MzAwOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqS1ZNL1REWCBJbml0aWFsaXphdGlvbiBhbmQgVk0gVHlwZSBTdXBwb3J0KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBoeXBlcnZpc29yLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGVyZSBkb2VzIHRoZSBzdXBwb3J0IGdldCByZWdpc3RlcmVkP1wiIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaXMgYEtWTV9YODZfVERYX1ZNYC4gVGhpcyBjb25zdGFudCBpcyBiZWluZyBhZGRlZCB0byB0aGUgYHN1cHBvcnRlZF92bV90eXBlc2AgbGlzdCB3aXRoaW4gdGhlIGB2dF9pbml0YCBmdW5jdGlvbiwgYnV0ICpvbmx5KiBpZiBURFggaXMgYWN0dWFsbHkgZW5hYmxlZC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJJ2QgZXhwZWN0OyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBjcml0aWNhbCBoZXJlIHRvIGF2b2lkIGludHJvZHVjaW5nIFREWC1zcGVjaWZpYyBjb2RlIHdoZW4gdGhlIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBpdCwgb3IgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIHRoZXJlZm9yZSwgaXMgdG8gZGl2ZSBpbnRvIGB2dF9pbml0YCBpdHNlbGYgYW5kIGZ1bGx5IGdyb2sgaG93IFREWCBzdXBwb3J0IGlzIGNvbmRpdGlvbmVkIHRoZXJlLiBMZXQncyBzZWUgaG93IHRoYXQgY29tZXMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTYyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6NDIuMjg2MDE0NjdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNDE6XFx0c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxcbjEwNDI6XFx0e1xcbjEwNDM6XFx0XFx0dW5zaWduZWQgdmNwdV9zaXplLCB2Y3B1X2FsaWduO1xcbjEwNDQ6XFx0XFx0aW50IHI7XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdHIgPSB2bXhfaW5pdCgpO1xcbjEwNDc6XFx0XFx0aWYgKHIpXFxuMTA0ODpcXHRcXHRcXHRyZXR1cm4gcjtcXG4xMDQ5OlxcdFxcbjEwNTA6XFx0XFx0LypcXG4xMDUxOlxcdFxcdCAqIFREWCBhbmQgVk1YIGhhdmUgZGlmZmVyZW50IHZDUFUgc3RydWN0dXJlcy4gIENhbGN1bGF0ZSB0aGVcXG4xMDUyOlxcdFxcdCAqIG1heGltdW0gc2l6ZS9hbGlnbiBzbyB0aGF0IGt2bV9pbml0KCkgY2FuIHVzZSB0aGUgbGFyZ2VyXFxuMTA1MzpcXHRcXHQgKiB2YWx1ZXMgdG8gY3JlYXRlIHRoZSBrbWVtX3ZjcHVfY2FjaGUuXFxuMTA1NDpcXHRcXHQgKi9cXG4xMDU1OlxcdFxcdHZjcHVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmNwdV92bXgpO1xcbjEwNTY6XFx0XFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XFxuMTA1NzpcXHRcXHRpZiAoZW5hYmxlX3RkeCkge1xcbjEwNTg6XFx0XFx0XFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcXG4xMDU5OlxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgdmNwdV90ZHgpKTtcXG4xMDYwOlxcdFxcdFxcdHZjcHVfYWxpZ24gPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9hbGlnbixcXG4xMDYxOlxcdFxcdFxcdFxcdFxcdF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3RkeCkpO1xcbjEwNjI6XFx0XFx0XFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1REWF9WTSk7XFxuMTA2MzpcXHRcXHR9XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdC8qXFxuMTA2NjpcXHRcXHQgKiBDb21tb24gS1ZNIGluaXRpYWxpemF0aW9uIF9tdXN0XyBjb21lIGxhc3QsIGFmdGVyIHRoaXMsIC9kZXYva3ZtIGlzXFxuMTA2NzpcXHRcXHQgKiBleHBvc2VkIHRvIHVzZXJzcGFjZSFcXG4xMDY4OlxcdFxcdCAqL1xcbjEwNjk6XFx0XFx0ciA9IGt2bV9pbml0KHZjcHVfc2l6ZSwgdmNwdV9hbGlnbiwgVEhJU19NT0RVTEUpO1xcbjEwNzA6XFx0XFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjQyLjI4NjEyMDA2MVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE3NjIyMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFREWCBWTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJZiB0aGUgYGVuYWJsZV90ZHhgIGZsYWcgaXMgc2V0IHRvIHRydWUsIHRoZSBjb2RlIGlzIGNsZWFybHkgaW50ZW5kaW5nIHRvIGluY2x1ZGUgdGhlIGBCSVQoS1ZNX1g4Nl9URFhfVk0pYCBmbGFnLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIGRpcmVjdCBjb25kaXRpb25hbCBhc3NpZ25tZW50IGJhc2VkIG9uIGEgYm9vbGVhbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24sIGFzIGFsd2F5cyB3aXRoIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXMgKmhvdyogYW5kICp3aGVyZSogYGVuYWJsZV90ZHhgIGlzIGJlaW5nIHNldC4gSXMgdGhpcyBjb250cm9sbGVkIGJ5IGEgY29tbWFuZC1saW5lIHBhcmFtZXRlciwgYSBjb25maWcgZmlsZSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGlzIGl0IGRldGVybWluZWQgZHluYW1pY2FsbHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIHNvbWUgaGFyZHdhcmUgZGV0ZWN0aW9uP1xuXG5JIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gYW5kIGFzc2lnbm1lbnQgb2YgYGVuYWJsZV90ZHhgLiBBcmUgd2UgY2hlY2tpbmcgZm9yIHNwZWNpZmljIENQVSBmZWF0dXJlcywgQklPUyBzdXBwb3J0LCBvciBzb21lIG90aGVyIHVuZGVybHlpbmcgY29uZGl0aW9uPyBVbmRlcnN0YW5kaW5nIHRoYXQgZGVwZW5kZW5jeSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNlIGNhc2UgZm9yIFREWC4gQXJlIHRoZXJlIGFueSBkZWZhdWx0IHZhbHVlcz8gV2hhdCdzIHRoZSBpbXBhY3Qgb2YgVERYIG9uIHRoZSByZXN0IG9mIHRoZSBlbnZpcm9ubWVudD8gSXMgdGhpcyBmb3IgYSB3aG9sZSBWTSBvciBzb21ldGhpbmcgZWxzZT9cblxuSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGFjdCBvbiB0aGUgaHlwZXJ2aXNvciBhbmQgdGhlIFZNLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGRlcGVuZGVuY2llcywgbGltaXRhdGlvbnMgYW5kIHJlcXVpcmVtZW50cyBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MjgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjQ2LjQwMzc1NzYxMloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNzgxMTA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmFibGVfdGR4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2PXN0YXRpYyB2b2lkIHZ0X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xOC1cXHQvKiBOb3RlLCBURFggKmFuZCogVk1YIG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgVERYIGlzIGVuYWJsZWQuICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk6XFx0aWYgKGVuYWJsZV90ZHgpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjAtXFx0XFx0dGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yND1zdGF0aWMgX19pbml0IGludCB2dF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzEtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzI6XFx0cmV0dXJuIGVuYWJsZV90ZHggPyB0ZHhfaGFyZHdhcmVfc2V0dXAoKSA6IDA7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzMtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MzU9c3RhdGljIHZvaWQgdnRfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNzpcXHRpZiAoZW5hYmxlX3RkeClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zOC1cXHRcXHR0ZHhfaGFyZHdhcmVfdW5zZXR1cCgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTA0MT1zdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDU2LVxcdHZjcHVfYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV92bXgpO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNTc6XFx0aWYgKGVuYWJsZV90ZHgpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDU4LVxcdFxcdHZjcHVfc2l6ZSA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X3NpemUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTU1LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTY6Ym9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU3Om1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMzNjA9aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzNjg6XFx0aWYgKCFlbmFibGVfdGR4KVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM2OS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQyNS1zdWNjZXNzX2Rpc2FibGVfdGR4OlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQyNjpcXHRlbmFibGVfdGR4ID0gMDtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0MjctXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTEyPXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xMy1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjE0OmV4dGVybiBib29sIGVuYWJsZV90ZHg7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xNS1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTg2PVREWF9CVUlMRF9URFZQU19BQ0NFU1NPUlMoNjQsIFNUQVRFX05PTl9BUkNILCBzdGF0ZV9ub25fYXJjaCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE4OC0jZWxzZVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTg5OiNkZWZpbmUgZW5hYmxlX3RkeFxcdDBcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6NDguMzQxNTc2OTVaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMTkxNDE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBURFggRW5hYmxlbWVudCBQcm9jZXNzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZW5hYmxlX3RkeGAgaXMgYmVpbmcgcHJlc2VudGVkIGFzIGEgbW9kdWxlIHBhcmFtZXRlci4gVGhhdCdzIHRoZSBrZXkgdG8gdHVybmluZyB0aGlzIHdob2xlIFREWCBmZWF0dXJlIG9uLCBpdCBzZWVtcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIHNvIGlmIHRoYXQgcGFyYW1ldGVyIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gc29tZXRoaW5nIHNwZWNpZmljIG5lZWRzIHRvIGhhcHBlbi5cIiBBbmQgdGhlIHRyaWdnZXIgZm9yIHRoYXQgXCJzb21ldGhpbmcgc3BlY2lmaWNcIiBpcyB0aGlzIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uLiBJdOKAmXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLiBUaGUgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBsb2dpYyBmbG93LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRkeF9oYXJkd2FyZV9zZXR1cGAgYWN0dWFsbHkgKmRvZXMqLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gbGllcywgYW5kIHRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzMxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6NTEuOTYzNDk0NTcxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNjA6XFx0aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4zMzYxOlxcdHtcXG4zMzYyOlxcdFxcdGludCByLCBpO1xcbjMzNjM6XFx0XFxuMzM2NDpcXHRcXHQvKiB0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKSB1c2VzIGFzc29jaWF0ZWRfdGR2Y3B1cy4gKi9cXG4zMzY1OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKVxcbjMzNjY6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlcl9jcHUoYXNzb2NpYXRlZF90ZHZjcHVzLCBpKSk7XFxuMzM2NzpcXHRcXG4zMzY4OlxcdFxcdGlmICghZW5hYmxlX3RkeClcXG4zMzY5OlxcdFxcdFxcdHJldHVybiAwO1xcbjMzNzA6XFx0XFxuMzM3MTpcXHRcXHRpZiAoIWVuYWJsZV9lcHQpIHtcXG4zMzcyOlxcdFxcdFxcdHByX2VycihcXFwiRVBUIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjMzNzM6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjMzNzQ6XFx0XFx0fVxcbjMzNzU6XFx0XFxuMzM3NjpcXHRcXHRpZiAoIXRkcF9tbXVfZW5hYmxlZCB8fCAhZW5hYmxlX21taW9fY2FjaGluZyB8fCAhZW5hYmxlX2VwdF9hZF9iaXRzKSB7XFxuMzM3NzpcXHRcXHRcXHRwcl9lcnIoXFxcIlREUCBNTVUgYW5kIE1NSU8gY2FjaGluZyBhbmQgRVBUIEEvRCBiaXQgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMzM3ODpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XFxuMzM3OTpcXHRcXHR9XFxuMzM4MDpcXHRcXG4zMzgxOlxcdFxcdGlmICghZW5hYmxlX2FwaWN2KSB7XFxuMzM4MjpcXHRcXHRcXHRwcl9lcnIoXFxcIkFQSUN2IGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjMzODM6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjMzODQ6XFx0XFx0fVxcbjMzODU6XFx0XFxuMzM4NjpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfT1NYU0FWRSkpIHtcXG4zMzg3OlxcdFxcdFxcdHByX2VycihcXFwidGR4OiBPU1hTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjMzODg6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjMzODk6XFx0XFx0fVxcbjMzOTA6XFx0XFxuMzM5MTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuMzM5MjpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxcXG5cXFwiKTtcXG4zMzkzOlxcdFxcdFxcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcXG4zMzk0OlxcdFxcdH1cXG4zMzk1OlxcdFxcbjMzOTY6XFx0XFx0ciA9IF9fdGR4X2hhcmR3YXJlX3NldHVwKCk7XFxuMzM5NzpcXHRcXHRpZiAocikge1xcbjMzOTg6XFx0XFx0XFx0LypcXG4zMzk5OlxcdFxcdFxcdCAqIERpc2FibGUgVERYIG9ubHkgYnV0IGRvbid0IGZhaWwgdG8gbG9hZCBtb2R1bGUgaWYgdGhlIFREWFxcbjM0MDA6XFx0XFx0XFx0ICogbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuICBObyBuZWVkIHRvIHByaW50IG1lc3NhZ2Ugc2F5aW5nXFxuMzQwMTpcXHRcXHRcXHQgKiBcXFwibW9kdWxlIGlzIG5vdCBsb2FkZWRcXFwiIGJlY2F1c2UgaXQgd2FzIHByaW50ZWQgd2hlbiB0aGUgZmlyc3RcXG4zNDAyOlxcdFxcdFxcdCAqIFNFQU1DQUxMIGZhaWxlZC4gIERvbid0IGJvdGhlciB1bndpbmRpbmcgdGhlIFMtRVBUIGhvb2tzIG9yXFxuMzQwMzpcXHRcXHRcXHQgKiB2bV9zaXplLCBhcyBrdm1feDg2X29wcyBoYXZlIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQgKGFuZCBhcmVcXG4zNDA0OlxcdFxcdFxcdCAqIGludGVudGlvbmFsbHkgbm90IGV4cG9ydGVkKS4gIFRoZSBTLUVQVCBjb2RlIGlzIHVucmVhY2hhYmxlLFxcbjM0MDU6XFx0XFx0XFx0ICogYW5kIGFsbG9jYXRpbmcgYSBmZXcgbW9yZSBieXRlcyBwZXIgVk0gaW4gYSBzaG91bGQtYmUtcmFyZVxcbjM0MDY6XFx0XFx0XFx0ICogZmFpbHVyZSBzY2VuYXJpbyBpcyBhIG5vbi1pc3N1ZS5cXG4zNDA3OlxcdFxcdFxcdCAqL1xcbjM0MDg6XFx0XFx0XFx0aWYgKHIgPT0gLUVOT0RFVilcXG4zNDA5OlxcdFxcdFxcdFxcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6NTEuOTYzNjgwNTkxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjIwNjI2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVERYIFZNIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIHRoZSBDUFUgZmVhdHVyZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGlzbid0IGVuYWJsZWQsIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBzdWNjZXNzX2Rpc2FibGVfdGR4YC4gVGhhdCBzZXRzIGBlbmFibGVfdGR4YCB0byB6ZXJvLCB3aGljaCBpcyBjcml0aWNhbC4gSWYgYGVuYWJsZV90ZHhgIGlzIHplcm8sIHRoZW4gZHVyaW5nIGB2dF9pbml0YCwgaXQgd29uJ3QgYWRkIHRoZSBgQklUKEtWTV9YODZfVERYX1ZNKWAgZmxhZyB0byBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYC4gU28sIG5vIGhhcmR3YXJlIHN1cHBvcnQsIG5vIFREWCBWTSBjcmVhdGlvbiDigJMgdGhhdCdzIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5UaGUgY29yZSBwcm9ibGVtLCBvciBhdCBsZWFzdCB0aGUgdGhpbmcgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0LCBpcyB0aGF0IGJvdGggU0VWLVNOUCBhbmQgVERYIHJlcXVpcmUgaGFyZHdhcmUgc3VwcG9ydC4gQW5kLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCBlbnZpcm9ubWVudHMgbGlrZSBHQ0UgYW5kIHR5cGljYWwgUUVNVSBzZXR1cHMgKmRvbid0KiBleHBvc2UgdGhhdCBraW5kIG9mIGhhcmR3YXJlLiBTbywgbG9naWNhbGx5LCB0aGVzZSBzcGVjaWZpYyBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gVERYIFZNIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSB1bnJlYWNoYWJsZSBpbiB0aG9zZSB2aXJ0dWFsaXplZCBjb250ZXh0cy5cblxuQnV0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIGp1c3QgYmVjYXVzZSB0aGUgY29kZSBwYXRoIG91dGxpbmVkIGlzIGJsb2NrZWQsIGRvZXNuJ3QgbWVhbiB0aGF0IGBrdm1fZ21lbV9wb3B1bGF0ZWAgY2FuJ3QgYmUgY2FsbGVkIGFub3RoZXIgd2F5LiBXaGF0IGFyZSB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgdGhhdCBmdW5jdGlvbj8gVGltZSB0byBjaGVjayB3aGVyZSBlbHNlIGBrdm1fZ21lbV9wb3B1bGF0ZWAgaXMgdXNlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciB3YXkgdG8gdHJpZ2dlciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0MjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mzo1Ni44ODU3NjUzOTVaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDQ0ODYxMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2dtZW1fcG9wdWxhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDEwPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0ODEtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDgyOlxcdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcywgd3JpdGUsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDgzLVxcdFxcdFxcdFxcdCAgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXFx1MDAyNnNldl9wb3B1bGF0ZV9hcmdzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4NS1cXHRcXHRhcmdwLVxcdTAwM2VlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQ4NjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IGt2bV9nbWVtX3BvcHVsYXRlIGZhaWxlZCwgcmV0ICVsZCAoZndfZXJyb3IgJWQpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4Ny1cXHRcXHRcXHQgX19mdW5jX18sIGNvdW50LCBhcmdwLVxcdTAwM2VlcnJvcik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxNDU9c3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE4NS1cXHRcXHR9O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzE4NjpcXHRcXHRnbWVtX3JldCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgZ3BhX3RvX2dmbihyZWdpb24uZ3BhKSxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxODctXFx0XFx0XFx0XFx0XFx0ICAgICB1NjRfdG9fdXNlcl9wdHIocmVnaW9uLnNvdXJjZV9hZGRyKSxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTcxPWludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzUtLyoqXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1NzY6ICoga3ZtX2dtZW1fcG9wdWxhdGUoKSAtIFBvcHVsYXRlL3ByZXBhcmUgYSBHUEEgcmFuZ2Ugd2l0aCBndWVzdCBkYXRhXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzctICpcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk3LSAqL1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk4OnR5cGVkZWYgaW50ICgqa3ZtX2dtZW1fcG9wdWxhdGVfY2IpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk5LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb3BhcXVlKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYwMC1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMjpcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjAzLSNlbmRpZlxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04MjA9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nbWVtX2dldF9wZm4pO1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjMtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo4MjQ6c3RhdGljIGxvbmcgX19rdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjUtXFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbiwgc3RydWN0IHBhZ2UgKnNyY19wYWdlLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODI2OlxcdFxcdFxcdFxcdGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgyNy17XFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTg2MC1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MjpcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04NjMte1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDQtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo5MDU6XFx0XFx0cmV0ID0gX19rdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHNsb3QsIGZpbGUsIHN0YXJ0X2dmbiArIGksIHNyY19wYWdlLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTA2LVxcdFxcdFxcdFxcdFxcdCAgcG9zdF9wb3B1bGF0ZSwgb3BhcXVlKTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE2LX1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxNzpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fcG9wdWxhdGUpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mzo1OS4xMzAyNTk4NTZaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4Nzg0MDU2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uOiBVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBjb2RlLCBzcGVjaWZpY2FsbHksIGBrdm1fZ21lbV9wb3B1bGF0ZWAsIGlzIG9ubHkgY2FsbGVkIGZyb20gYHNucF9sYXVuY2hfdXBkYXRlYCBhbmQgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAuIEJvdGggb2YgKnRob3NlKiBmdW5jdGlvbnMgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IHRvIGV2ZW4gKmJlKiByZWFjaGVkLiBXZSd2ZSBjb25maXJtZWQgdGhpcy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IGNvdWxkIFN5emthbGxlciBiZSBydW5uaW5nIG9uIGEgbWFjaGluZSB0aGF0ICphY3R1YWxseSogc3VwcG9ydHMgU0VWLVNOUCBvciBURFg/IFRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZC5cblxuU2luY2UgU0VWLVNOUCBhbmQgVERYIGFyZSBmdW5kYW1lbnRhbGx5IGhhcmR3YXJlLWRlcGVuZGVudCwgdGhleSBhcmVuJ3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcy4gUUVNVSBtaWdodCBlbXVsYXRlICpzb21lKiB0aGluZ3MsIGJ1dCBkZWZpbml0ZWx5IG5vdCB0aGVzZSBzcGVjaWZpYyBmZWF0dXJlcy4gVGhlcmUncyBubyBzdGFuZGFyZCBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIFNFVi1TTlAgb3IgVERYIHdpdGhpbiBLVk0gdGhhdCBJJ20gYXdhcmUgb2Y7IEtWTSByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKEFNRCBQU1Agb3IgSW50ZWwgVERYIG1vZHVsZSkgZm9yIHRoZWlyIG9wZXJhdGlvbi4gS1ZNICpjYW4ndCogb3BlcmF0ZSB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQsIHNwZWNpZmljYWxseS5cblxuVGhlcmVmb3JlLCB0aGlzIGNvZGUgcGF0aCwgYWNjZXNzZWQgdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMsIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgU3l6a2FsbGVyIGVudmlyb25tZW50cy4gSXQncyBhIGRlYWQgZW5kIGFzIGZhciBhcyBmdXp6aW5nIGdvZXMuIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGlzIHRoZXJlICphbnkqIG90aGVyIGNvbmNlaXZhYmxlIHdheSB0byByZWFjaCBga3ZtX2dtZW1fcG9wdWxhdGVgPyBJdCdzIGV4cG9ydGVkIGZvciBLVk0gaW50ZXJuYWwgdXNlLCBzbyBwZXJoYXBzIHRoZXJlJ3Mgc29tZSBvYnNjdXJlIHBhdGg/IENvdWxkIHdlLCBoeXBvdGhldGljYWxseSwgY2FsbCBgS1ZNX1NFVl9TTlBfTEFVTkNIX1VQREFURWAgd2l0aG91dCBjcmVhdGluZyBhIGZ1bGwgYEtWTV9YODZfU05QX1ZNYD8gTGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGBzbnBfbGF1bmNoX3VwZGF0ZWAgY29kZSBwYXRoLiBOb3BlLCB0aGF0IGNvbmZpcm1zIGl0LiBUaGUgYW5zd2VyIHJlbWFpbnMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjYzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQ0OjEyLjAwODY2OTEwOFoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDEwOlxcdHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuMjQxMTpcXHR7XFxuMjQxMjpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4yNDEzOlxcdFxcdHN0cnVjdCBzZXZfZ21lbV9wb3B1bGF0ZV9hcmdzIHNldl9wb3B1bGF0ZV9hcmdzID0gezB9O1xcbjI0MTQ6XFx0XFx0c3RydWN0IGt2bV9zZXZfc25wX2xhdW5jaF91cGRhdGUgcGFyYW1zO1xcbjI0MTU6XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG4yNDE2OlxcdFxcdGxvbmcgbnBhZ2VzLCBjb3VudDtcXG4yNDE3OlxcdFxcdHZvaWQgX191c2VyICpzcmM7XFxuMjQxODpcXHRcXHRpbnQgd3JpdGU7XFxuMjQxOTpcXHRcXG4yNDIwOlxcdFxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pIHx8ICFzZXYtXFx1MDAzZXNucF9jb250ZXh0KVxcbjI0MjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjQyMjpcXHRcXG4yNDIzOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cGFyYW1zLCB1NjRfdG9fdXNlcl9wdHIoYXJncC1cXHUwMDNlZGF0YSksIHNpemVvZihwYXJhbXMpKSlcXG4yNDI0OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjI0MjU6XFx0XFxuMjQyNjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IEdGTiBzdGFydCAweCVsbHggbGVuZ3RoIDB4JWxseCB0eXBlICVkIGZsYWdzICVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4yNDI3OlxcdFxcdFxcdCBwYXJhbXMuZ2ZuX3N0YXJ0LCBwYXJhbXMubGVuLCBwYXJhbXMudHlwZSwgcGFyYW1zLmZsYWdzKTtcXG4yNDI4OlxcdFxcbjI0Mjk6XFx0XFx0aWYgKCFwYXJhbXMubGVuIHx8ICFQQUdFX0FMSUdORUQocGFyYW1zLmxlbikgfHwgcGFyYW1zLmZsYWdzIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQ0OjEyLjAwODk1NDUxOFoiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc2ODI2MzIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enphYmlsaXR5KipcblxuT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuZCB3aHkgSSdtIGNvbmNsdWRpbmcgaXQncyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRmlyc3QsIEkgc2VlIGl0IG1vZGlmaWVzIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQ1BVSUQgcGFnZSB3cml0ZSByZWZlcmVuY2VzIHdpdGhpbiBLVk0ncyBTRVYtU05QIGFuZCBURFggaW1wbGVtZW50YXRpb25zLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBib3RoIFNFVi1TTlAgYW5kIFREWCBhcmUgZnVuZGFtZW50YWxseSBoYXJkd2FyZS1kZXBlbmRlbnQuXG5cbkkgc2VlIGEgZGlyZWN0IGxpbmthZ2UuICBUaGUgY29kZSBleHBsaWNpdGx5IHVzZXMgYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAuIEkgdHJhY2UgdGhpcyBkb3duLCBhbmQgaXQgY2hlY2tzIGZvciBgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVgLCB3aGljaCBpcyBvbmx5IHNldCBpZiB0aGUgVk0gdHlwZSBpcyBgS1ZNX1g4Nl9TTlBfVk1gLiBUaGlzIGlzIGNydWNpYWwuIGBLVk1fWDg2X1NOUF9WTWAgY2FuIG9ubHkgYmUgY3JlYXRlZCBpZiB0aGUgS1ZNIGVudmlyb25tZW50IHN1cHBvcnRzIGl0IHZpYSBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYCwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBCSVQoS1ZNX1g4Nl9TTlBfVk0pYCBmbGFnLiBUaGF0IGZsYWcsIGluIHR1cm4sIGlzIHByZWRpY2F0ZWQgb24gdGhlIGhvc3QgQ1BVIGhhdmluZyBgWDg2X0ZFQVRVUkVfU0VWX1NOUGAuIFNvLCB0aGlzIGVudGlyZSBwYXRoIGlzIHN0cmljdGx5IGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgQU1EIFNFVi1TTlAgY2FwYWJsZSBDUFVzLlxuXG5UaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIFREWC4gSSBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gZnJvbSBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCAod2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGVuY3J5cHRpb24pLCBhbGwgdGhlIHdheSBiYWNrIHRocm91Z2ggYHRkeF92Y3B1X2lvY3RsYCB0byBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgd2hlbiBoYW5kbGluZyBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYC4gVGhhdCBwYXRoIG9ubHkgd29ya3MgaWYgYGlzX3RkX3ZjcHUodmNwdSlgIGlzIHRydWUgd2hpY2ggaW4gdHVybiByZXF1aXJlcyAgYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTWAsIHdoaWNoIGluIHR1cm4gcmVxdWlyZXMgYGVuYWJsZV90ZHhgLCB3aGljaCByZXF1aXJlcyB0aGF0IHRoZSBob3N0IENQVSBoYXMgdGhlIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgZmxhZy5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF04oCZcyB1bnJlYWNoYWJsZSBpbiBjb21tb24gdmlydHVhbGl6ZWQgc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgaWYgdGhlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZW4ndCBwcmVzZW50LiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHRhcmdldCBjb2RlLCBpbmNsdWRpbmcgYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgLCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSwgb3IgUUVNVSB3aXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCAoQU1EIFNFVi1TTlAgb3IgSW50ZWwgVERYKS4gQmVjYXVzZSBzeXprYWxsZXIgaXMgdXN1YWxseSBydW4gb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgdGhlc2Ugd2hlcmUgdGhvc2UgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBlbXVsYXRlZCwgdGhpcyBwYXRjaCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ5NiwiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0NDoyNS43NzcyMjAzWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX3BvcHVsYXRlYCBhbmQgaXRzIGNhbGxlcnMgaW4gS1ZNJ3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IGFjcXVpcmluZyBhIHdyaXRlIHJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYW5kIHRvIGFkZCBhIE5VTEwgY2hlY2sgZm9yIHRoZSBzb3VyY2UgYnVmZmVyLiBTRVYtU05QIGFuZCBURFggYXJlIGhhcmR3YXJlLWFzc2lzdGVkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIENQVSBzdXBwb3J0IChBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgpLiBUaGV5IGFyZSBub3QgZW11bGF0ZWQgaW4gc29mdHdhcmUgYnkgUUVNVSBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciB0eXBpY2FsbHkgcnVucy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZW0pIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCB0aGlzIHBhdGNoIHNob3VsZCBub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX3BvcHVsYXRlYCBhbmQgaXRzIGNhbGxlcnMgaW4gS1ZNJ3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IGFjcXVpcmluZyBhIHdyaXRlIHJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYW5kIHRvIGFkZCBhIE5VTEwgY2hlY2sgZm9yIHRoZSBzb3VyY2UgYnVmZmVyLiBTRVYtU05QIGFuZCBURFggYXJlIGhhcmR3YXJlLWFzc2lzdGVkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIENQVSBzdXBwb3J0IChBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgpLiBUaGV5IGFyZSBub3QgZW11bGF0ZWQgaW4gc29mdHdhcmUgYnkgUUVNVSBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciB0eXBpY2FsbHkgcnVucy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZW0pIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCB0aGlzIHBhdGNoIHNob3VsZCBub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowt2rxz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 09:26:32 +0000 UTC FinishedAt: 2026-06-23 09:44:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGl0cyBjYWxsZXJzIGluIEtWTSYjMzk7cyBTRVYtU05QIGFuZCBURFggaW1wbGVtZW50YXRpb25zIHRvIHN1cHBvcnQgYWNxdWlyaW5nIGEgd3JpdGUgcmVmZXJlbmNlIGZvciBDUFVJRCBwYWdlcyBhbmQgdG8gYWRkIGEgTlVMTCBjaGVjayBmb3IgdGhlIHNvdXJjZSBidWZmZXIuIFNFVi1TTlAgYW5kIFREWCBhcmUgaGFyZHdhcmUtYXNzaXN0ZWQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgQ1BVIHN1cHBvcnQgKEFNRCBTRVYtU05QIG9yIEludGVsIFREWCkuIFRoZXkgYXJlIG5vdCBlbXVsYXRlZCBpbiBzb2Z0d2FyZSBieSBRRU1VIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugd2hlcmUgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChgc25wX2xhdW5jaF91cGRhdGVgLCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCwgYW5kIGBrdm1fZ21lbV9wb3B1bGF0ZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlbSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmMwNzA2MTdkMWM0NmZmM2ViMTczYjQ0MzQ1MjUzMjQ2NDVkOWM3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA5OjQwOjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA2YzZhNmQ2NjNlMjk2My4uNWZkMDhkMzRiZTNmOGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMjM2MCw4ICYjNDM7MjM2MCw4IEBAIHN0YXRpYyBpbnQgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbiBcbiBcdFx0bWVtY3B5KGRzdF92YWRkciwgc3JjX3ZhZGRyLCBQQUdFX1NJWkUpO1xuIFxuLVx0XHRrdW5tYXBfbG9jYWwoc3JjX3ZhZGRyKTtcbiBcdFx0a3VubWFwX2xvY2FsKGRzdF92YWRkcik7XG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwoc3JjX3ZhZGRyKTtcbiBcdH1cbiBcbiBcdHJldCA9IHJtcF9tYWtlX3ByaXZhdGUocGZuLCBnZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBHX0xFVkVMXzRLLFxuQEAgLTI0MTUsNiAmIzQzOzI0MTUsNyBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiBcdGxvbmcgbnBhZ2VzLCBjb3VudDtcbiBcdHZvaWQgX191c2VyICpzcmM7XG4mIzQzO1x0aW50IHdyaXRlO1xuIFxuIFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi1cdTAwM2VzbnBfY29udGV4dClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMjQzOCw2ICYjNDM7MjQzOSwxMyBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIFx0aWYgKCFQQUdFX0FMSUdORUQoc3JjKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWtlIHN1cmUgdXNlci1tb2RlIGRpZCBub3QgcGFzcyBOVUxMIGFzIHNyYyB3aXRoXG4mIzQzO1x0ICogdHlwZSAhPSBLVk1fU0VWX1NOUF9QQUdFX1RZUEVfWkVSTy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3JjID09IE5VTEwgXHUwMDI2XHUwMDI2IHBhcmFtcy50eXBlICE9IEtWTV9TRVZfU05QX1BBR0VfVFlQRV9aRVJPKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0bnBhZ2VzID0gcGFyYW1zLmxlbiAvIFBBR0VfU0laRTtcbiBcbiBcdC8qXG5AQCAtMjQ2OCw3ICYjNDM7MjQ3NiwxMCBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIFx0c2V2X3BvcHVsYXRlX2FyZ3Muc2V2X2ZkID0gYXJncC1cdTAwM2VzZXZfZmQ7XG4gXHRzZXZfcG9wdWxhdGVfYXJncy50eXBlID0gcGFyYW1zLnR5cGU7XG4gXG4tXHRjb3VudCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgcGFyYW1zLmdmbl9zdGFydCwgc3JjLCBucGFnZXMsXG4mIzQzO1x0LyogQWNxdWlyZSBhIHdyaXRlLXJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYXMga2VybmVsIG1pZ2h0IHdyaXRlIHRvIGl0ICovXG4mIzQzO1x0d3JpdGUgPSBwYXJhbXMudHlwZSA9PSBLVk1fU0VWX1NOUF9QQUdFX1RZUEVfQ1BVSUQ7XG4mIzQzO1xuJiM0MztcdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcywgd3JpdGUsXG4gXHRcdFx0XHQgIHNldl9nbWVtX3Bvc3RfcG9wdWxhdGUsIFx1MDAyNnNldl9wb3B1bGF0ZV9hcmdzKTtcbiBcdGlmIChjb3VudCBcdTAwM2MgMCkge1xuIFx0XHRhcmdwLVx1MDAzZWVycm9yID0gc2V2X3BvcHVsYXRlX2FyZ3MuZndfZXJyb3I7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IDA0Y2UzMjFlYmRmMzk2Li40NmIxZDg0ZmRkZjJhYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC0zMTg1LDcgJiM0MzszMTg1LDcgQEAgc3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNcbiBcdFx0fTtcbiBcdFx0Z21lbV9yZXQgPSBrdm1fZ21lbV9wb3B1bGF0ZShrdm0sIGdwYV90b19nZm4ocmVnaW9uLmdwYSksXG4gXHRcdFx0XHRcdCAgICAgdTY0X3RvX3VzZXJfcHRyKHJlZ2lvbi5zb3VyY2VfYWRkciksXG4tXHRcdFx0XHRcdCAgICAgMSwgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXHUwMDI2YXJnKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgMSwgMCwgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXHUwMDI2YXJnKTtcbiBcdFx0aWYgKGdtZW1fcmV0IFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZ21lbV9yZXQ7XG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCA0YzE0YWVlMWZiMDYzMy4uNjIyYzBiMDRkOGMzMWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODEsNiAmIzQzOzI1ODEsOCBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZFxuICAqICAgICAgIChwYXNzZWQgdG8gQHBvc3RfcG9wdWxhdGUsIGFuZCBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvblxuICAqICAgICAgIGlmIG5vdCBOVUxMKS4gTXVzdCBiZSBwYWdlLWFsaWduZWQuXG4gICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkgZnJvbSB1c2Vyc3BhY2UtYnVmZmVyXG4mIzQzOyAqIEB3cml0ZTogdXNlci1zcGFjZSBwcm92aWRlZCBidWZmZXIgbXVzdCBiZSB3cml0YWJsZS4gVGhlIGZ1bmN0aW9uXG4mIzQzOyAqXHQgd2lsbCBhY3F1aXJlIGEgd3JpdGFibGUgcmVmZXJlbmNlIHdoZW4gc2V0IHRvIDEuXG4gICogQHBvc3RfcG9wdWxhdGU6IGNhbGxiYWNrIHRvIGlzc3VlIGZvciBlYWNoIGdtZW0gcGFnZSB0aGF0IGJhY2tzIHRoZSBHUEFcbiAgKiAgICAgICAgICAgICAgICAgcmFuZ2VcbiAgKiBAb3BhcXVlOiBvcGFxdWUgZGF0YSB0byBwYXNzIHRvIEBwb3N0X3BvcHVsYXRlIGNhbGxiYWNrXG5AQCAtMjU5Nyw3ICYjNDM7MjU5OSw3IEBAIHR5cGVkZWYgaW50ICgqa3ZtX2dtZW1fcG9wdWxhdGVfY2IpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvcGFxdWUpO1xuIFxuIGxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHZvaWQgX191c2VyICpzcmMsIGxvbmcgbnBhZ2VzLFxuLVx0XHQgICAgICAga3ZtX2dtZW1fcG9wdWxhdGVfY2IgcG9zdF9wb3B1bGF0ZSwgdm9pZCAqb3BhcXVlKTtcbiYjNDM7XHRcdCAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCA2OWM5ZDZkNTQ2YjI4Ny4uN2EyNDVhNDAyYTFiMjIgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtODU5LDcgJiM0Mzs4NTksNyBAQCBzdGF0aWMgbG9uZyBfX2t2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiB9XG4gXG4gbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZyBucGFnZXMsXG4tXHRcdCAgICAgICBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXG4mIzQzO1x0XHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbiBcdGludCByZXQgPSAwO1xuQEAgLTg5Myw3ICYjNDM7ODkzLDcgQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZ1xuIFx0XHRpZiAoc3JjKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyB1YWRkciA9ICh1bnNpZ25lZCBsb25nKXNyYyAmIzQzOyBpICogUEFHRV9TSVpFO1xuIFxuLVx0XHRcdHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3QodWFkZHIsIDEsIDAsIFx1MDAyNnNyY19wYWdlKTtcbiYjNDM7XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgd3JpdGUsIFx1MDAyNnNyY19wYWdlKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0aWYgKHJldCAhPSAxKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX3BvcHVsYXRlYCBhbmQgaXRzIGNhbGxlcnMgaW4gS1ZNJiMzOTtzIFNFVi1TTlAgYW5kIFREWCBpbXBsZW1lbnRhdGlvbnMgdG8gc3VwcG9ydCBhY3F1aXJpbmcgYSB3cml0ZSByZWZlcmVuY2UgZm9yIENQVUlEIHBhZ2VzIGFuZCB0byBhZGQgYSBOVUxMIGNoZWNrIGZvciB0aGUgc291cmNlIGJ1ZmZlci4gU0VWLVNOUCBhbmQgVERYIGFyZSBoYXJkd2FyZS1hc3Npc3RlZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBDUFUgc3VwcG9ydCAoQU1EIFNFVi1TTlAgb3IgSW50ZWwgVERYKS4gVGhleSBhcmUgbm90IGVtdWxhdGVkIGluIHNvZnR3YXJlIGJ5IFFFTVUgYW5kIGFyZSBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSB3aGVyZSBzeXprYWxsZXIgdHlwaWNhbGx5IHJ1bnMuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKGBzbnBfbGF1bmNoX3VwZGF0ZWAsIGB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb25gLCBhbmQgYGt2bV9nbWVtX3BvcHVsYXRlYCB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSB0aGVtKSBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCwgdGhpcyBwYXRjaCBzaG91bGQgbm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjMDcwNjE3ZDFjNDZmZjNlYjE3M2I0NDM0NTI1MzI0NjQ1ZDljNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAwOTo0MDozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDZjNmE2ZDY2M2UyOTYzLi41ZmQwOGQzNGJlM2Y4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC0yMzYwLDggJiM0MzsyMzYwLDggQEAgc3RhdGljIGludCBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLAogCiAJCW1lbWNweShkc3RfdmFkZHIsIHNyY192YWRkciwgUEFHRV9TSVpFKTsKIAotCQlrdW5tYXBfbG9jYWwoc3JjX3ZhZGRyKTsKIAkJa3VubWFwX2xvY2FsKGRzdF92YWRkcik7CiYjNDM7CQlrdW5tYXBfbG9jYWwoc3JjX3ZhZGRyKTsKIAl9CiAKIAlyZXQgPSBybXBfbWFrZV9wcml2YXRlKHBmbiwgZ2ZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBHX0xFVkVMXzRLLApAQCAtMjQxNSw2ICYjNDM7MjQxNSw3IEBAIHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApCiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKIAlsb25nIG5wYWdlcywgY291bnQ7CiAJdm9pZCBfX3VzZXIgKnNyYzsKJiM0MzsJaW50IHdyaXRlOwogCiAJaWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi0mZ3Q7c25wX2NvbnRleHQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjQzOCw2ICYjNDM7MjQzOSwxMyBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKQogCWlmICghUEFHRV9BTElHTkVEKHNyYykpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CS8qCiYjNDM7CSAqIE1ha2Ugc3VyZSB1c2VyLW1vZGUgZGlkIG5vdCBwYXNzIE5VTEwgYXMgc3JjIHdpdGgKJiM0MzsJICogdHlwZSAhPSBLVk1fU0VWX1NOUF9QQUdFX1RZUEVfWkVSTy4KJiM0MzsJICovCiYjNDM7CWlmIChzcmMgPT0gTlVMTCAmYW1wOyZhbXA7IHBhcmFtcy50eXBlICE9IEtWTV9TRVZfU05QX1BBR0VfVFlQRV9aRVJPKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJbnBhZ2VzID0gcGFyYW1zLmxlbiAvIFBBR0VfU0laRTsKIAogCS8qCkBAIC0yNDY4LDcgJiM0MzsyNDc2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApCiAJc2V2X3BvcHVsYXRlX2FyZ3Muc2V2X2ZkID0gYXJncC0mZ3Q7c2V2X2ZkOwogCXNldl9wb3B1bGF0ZV9hcmdzLnR5cGUgPSBwYXJhbXMudHlwZTsKIAotCWNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcywKJiM0MzsJLyogQWNxdWlyZSBhIHdyaXRlLXJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYXMga2VybmVsIG1pZ2h0IHdyaXRlIHRvIGl0ICovCiYjNDM7CXdyaXRlID0gcGFyYW1zLnR5cGUgPT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX0NQVUlEOwomIzQzOwomIzQzOwljb3VudCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgcGFyYW1zLmdmbl9zdGFydCwgc3JjLCBucGFnZXMsIHdyaXRlLAogCQkJCSAgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZSwgJmFtcDtzZXZfcG9wdWxhdGVfYXJncyk7CiAJaWYgKGNvdW50ICZsdDsgMCkgewogCQlhcmdwLSZndDtlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggMDRjZTMyMWViZGYzOTYuLjQ2YjFkODRmZGRmMmFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTMxODUsNyAmIzQzOzMxODUsNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqYwogCQl9OwogCQlnbWVtX3JldCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgZ3BhX3RvX2dmbihyZWdpb24uZ3BhKSwKIAkJCQkJICAgICB1NjRfdG9fdXNlcl9wdHIocmVnaW9uLnNvdXJjZV9hZGRyKSwKLQkJCQkJICAgICAxLCB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlLCAmYW1wO2FyZyk7CiYjNDM7CQkJCQkgICAgIDEsIDAsIHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUsICZhbXA7YXJnKTsKIAkJaWYgKGdtZW1fcmV0ICZsdDsgMCkgewogCQkJcmV0ID0gZ21lbV9yZXQ7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCA0YzE0YWVlMWZiMDYzMy4uNjIyYzBiMDRkOGMzMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI1ODEsNiAmIzQzOzI1ODEsOCBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZAogICogICAgICAgKHBhc3NlZCB0byBAcG9zdF9wb3B1bGF0ZSwgYW5kIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uCiAgKiAgICAgICBpZiBub3QgTlVMTCkuIE11c3QgYmUgcGFnZS1hbGlnbmVkLgogICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkgZnJvbSB1c2Vyc3BhY2UtYnVmZmVyCiYjNDM7ICogQHdyaXRlOiB1c2VyLXNwYWNlIHByb3ZpZGVkIGJ1ZmZlciBtdXN0IGJlIHdyaXRhYmxlLiBUaGUgZnVuY3Rpb24KJiM0MzsgKgkgd2lsbCBhY3F1aXJlIGEgd3JpdGFibGUgcmVmZXJlbmNlIHdoZW4gc2V0IHRvIDEuCiAgKiBAcG9zdF9wb3B1bGF0ZTogY2FsbGJhY2sgdG8gaXNzdWUgZm9yIGVhY2ggZ21lbSBwYWdlIHRoYXQgYmFja3MgdGhlIEdQQQogICogICAgICAgICAgICAgICAgIHJhbmdlCiAgKiBAb3BhcXVlOiBvcGFxdWUgZGF0YSB0byBwYXNzIHRvIEBwb3N0X3BvcHVsYXRlIGNhbGxiYWNrCkBAIC0yNTk3LDcgJiM0MzsyNTk5LDcgQEAgdHlwZWRlZiBpbnQgKCprdm1fZ21lbV9wb3B1bGF0ZV9jYikoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sCiAJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvcGFxdWUpOwogCiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcywKLQkJICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7CiYjNDM7CQkgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IDY5YzlkNmQ1NDZiMjg3Li43YTI0NWE0MDJhMWIyMiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC04NTksNyAmIzQzOzg1OSw3IEBAIHN0YXRpYyBsb25nIF9fa3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogfQogCiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcywKLQkJICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSkKJiM0MzsJCSAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSkKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCByZXQgPSAwOwpAQCAtODkzLDcgJiM0Mzs4OTMsNyBAQCBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nCiAJCWlmIChzcmMpIHsKIAkJCXVuc2lnbmVkIGxvbmcgdWFkZHIgPSAodW5zaWduZWQgbG9uZylzcmMgJiM0MzsgaSAqIFBBR0VfU0laRTsKIAotCQkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgMCwgJmFtcDtzcmNfcGFnZSk7CiYjNDM7CQkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgd3JpdGUsICZhbXA7c3JjX3BhZ2UpOwogCQkJaWYgKHJldCAmbHQ7IDApCiAJCQkJYnJlYWs7CiAJCQlpZiAocmV0ICE9IDEpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCB3ZSBzaG91bGQgY29uc2lkZXIgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgc2Vuc2l0aXZlIGFyZWFzLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLCBhbmQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGF0JiMzOTtzIEtWTSBTRVYtU05QLCBURFggY29kZSwgYW5kIGd1ZXN0IG1lbW9yeSBtYW5hZ2VtZW50LiBCaWcgcmVkIGZsYWcgdGhlcmUuCgpUaGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBhIGB3cml0ZWAgcGFyYW1ldGVyIHRvIGBrdm1fZ21lbV9wb3B1bGF0ZWAsIHdoaWNoIGlzIHRoZW4gdXNlZCB3aXRoaW4gYHNucF9sYXVuY2hfdXBkYXRlYCB0byBnZXQgYSB3cml0ZSByZWZlcmVuY2UgZm9yIENQVUlEIHBhZ2VzLiBUaGVyZSYjMzk7cyBhbHNvIGEgbmV3IGBOVUxMYCBjaGVjayBvbiBgc3JjYCBpbiB0aGUgc2FtZSBmdW5jdGlvbiB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbi4gUGx1cywgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBrdW5tYXBfbG9jYWxgIG9yZGVyIGluIGBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlYC4gRGVmaW5pdGVseSBmdW5jdGlvbmFsaXR5IHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gYXR0YWNrLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHJlYWNoYWJpbGl0eS4gSXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqYWNjZXNzaWJsZSogaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQ/IEdpdmVuIHRoZSBjb2RlIGNoYW5nZXMsIGl0IGFwcGVhcnMgdG8gYmUgS1ZNIFNFVi1TTlAgYW5kIFREWCByZWxhdGVkLCBidXQgYGt2bV9nbWVtX3BvcHVsYXRlYCBpcyBwYXJ0IG9mIGd1ZXN0X21lbWZkIHdoaWNoIGlzIHVzZWQgYnkgS1ZNLiBUaGF0JiMzOTtzIHByb21pc2luZywgc2luY2UgS1ZNIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgaW4gU3l6a2FsbGVyLiBFeGNlbGxlbnQuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciBTRVYtU05QIGFuZCBURFggbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgaG93IHdlIGdldCB0byBga3ZtX2dtZW1fcG9wdWxhdGVgLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgc25wX2xhdW5jaF91cGRhdGVgIGFuZCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYC4gYHNucF9sYXVuY2hfdXBkYXRlYCByZXF1aXJlcyB0aGUgYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgY2hlY2suIE9rYXkuIFdoYXQgYWJvdXQgYGt2bV9nbWVtX3BvcHVsYXRlYCBpdHNlbGY/IEl0JiMzOTtzIGV4cG9ydGVkLCBzbyB0aGF0IG1ha2VzIHRoaW5ncyBhIGJpdCBlYXNpZXIuIEl0JiMzOTtzIHVzZWQgYnkgYm90aCBTRVYgYW5kIFREWCwgdG9vLgoKSSBzaG91bGQgYWxzbyBjaGVjayBmb3Igb3RoZXIsIGxlc3Mgb2J2aW91cywgdXNlcnMgb2YgYGt2bV9nbWVtX3BvcHVsYXRlYC4gV2UgY2FuJiMzOTt0IGJlIHRvbyBjYXJlZnVsLiBPdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgZnV6emluZyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ21lbV9wb3B1bGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI0MTA9c3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0ODEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0ODI6XHRjb3VudCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgcGFyYW1zLmdmbl9zdGFydCwgc3JjLCBucGFnZXMsIHdyaXRlLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDgzLVx0XHRcdFx0ICBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlLCBcdTAwMjZzZXZfcG9wdWxhdGVfYXJncyk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDg1LVx0XHRhcmdwLVx1MDAzZWVycm9yID0gc2V2X3BvcHVsYXRlX2FyZ3MuZndfZXJyb3I7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0ODY6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBrdm1fZ21lbV9wb3B1bGF0ZSBmYWlsZWQsIHJldCAlbGQgKGZ3X2Vycm9yICVkKVxcblwmIzM0OyxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4Ny1cdFx0XHQgX19mdW5jX18sIGNvdW50LCBhcmdwLVx1MDAzZWVycm9yKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxNDU9c3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxODUtXHRcdH07XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMxODY6XHRcdGdtZW1fcmV0ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBncGFfdG9fZ2ZuKHJlZ2lvbi5ncGEpLFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTg3LVx0XHRcdFx0XHQgICAgIHU2NF90b191c2VyX3B0cihyZWdpb24uc291cmNlX2FkZHIpLFxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTcxPWludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTc1LS8qKlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1NzY6ICoga3ZtX2dtZW1fcG9wdWxhdGUoKSAtIFBvcHVsYXRlL3ByZXBhcmUgYSBHUEEgcmFuZ2Ugd2l0aCBndWVzdCBkYXRhXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU3Ny0gKlxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk3LSAqL1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1OTg6dHlwZWRlZiBpbnQgKCprdm1fZ21lbV9wb3B1bGF0ZV9jYikoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5OS1cdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb3BhcXVlKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjAwLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MDE6bG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZyBucGFnZXMsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMjpcdFx0ICAgICAgIGludCB3cml0ZSwga3ZtX2dtZW1fcG9wdWxhdGVfY2IgcG9zdF9wb3B1bGF0ZSwgdm9pZCAqb3BhcXVlKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjAzLSNlbmRpZlxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9ODIwPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ21lbV9nZXRfcGZuKTtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgyMy1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODI0OnN0YXRpYyBsb25nIF9fa3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjUtXHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3QgcGFnZSAqc3JjX3BhZ2UsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjgyNjpcdFx0XHRcdGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtODI3LXtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTg2MC1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODYxOmxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydF9nZm4sIHZvaWQgX191c2VyICpzcmMsIGxvbmcgbnBhZ2VzLFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo4NjI6XHRcdCAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtODYzLXtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTkwNC1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6OTA1Olx0XHRyZXQgPSBfX2t2bV9nbWVtX3BvcHVsYXRlKGt2bSwgc2xvdCwgZmlsZSwgc3RhcnRfZ2ZuICYjNDM7IGksIHNyY19wYWdlLFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDYtXHRcdFx0XHRcdCAgcG9zdF9wb3B1bGF0ZSwgb3BhcXVlKTtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTkxNi19XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxNzpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fcG9wdWxhdGUpO1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MTgtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyBga3ZtX2dtZW1fcG9wdWxhdGVgKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGl0cyBzdXJyb3VuZGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTRVYgYW5kIFREWCBjb250ZXh0cy4gU2luY2UgU0VWIGFuZCBURFggYXJlIGhhcmR3YXJlLWxldmVsIGZlYXR1cmVzLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGNhbiB3ZSByZWFsaXN0aWNhbGx5IGZ1enogdGhlc2U/IFN5emthbGxlciwgb2YgY291cnNlLCBpcyBhIHBvd2VyZnVsIHRvb2wgZm9yIEtWTSBmdXp6aW5nLCBidXQgbXkgaW1tZWRpYXRlIHdvcnJ5IGlzIGFib3V0IHRoZSBlbnZpcm9ubWVudHMgaXQgdHlwaWNhbGx5IHJ1bnMgaW4uIE1vc3QgaW5zdGFuY2VzIEkmIzM5O20gYXdhcmUgb2YgZG9uJiMzOTt0IGhhdmUgU0VWIG9yIFREWCBlbmFibGVkLCBlc3BlY2lhbGx5IHdpdGhpbiBuZXN0ZWQgZ3Vlc3RzIG9uIGEgcGxhdGZvcm0gbGlrZSBHQ0UuIEhtbSwgb3IgKmRvKiB0aGV5PyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LCBqdXN0IGluIGNhc2UuCgpCdXQsIGlmIHdlJiMzOTtyZSBvbmx5IGxvb2tpbmcgYXQgU0VWIGFuZCBURFgtc3BlY2lmaWMgY29kZSwgdGhlIHJlYWNoYWJpbGl0eSBiZWNvbWVzIGEgcmVhbCBjb25jZXJuLiBIb3dldmVyLCBsZXQgbWUgYmFjayB1cCBhIHN0ZXAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb2Rl4oCZcyBsb2NhdGlvbi4gUmlnaHQsIGBrdm1fZ21lbV9wb3B1bGF0ZWAgaXRzZWxmIGlzIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gSXMgaXQgZXZlbiByZWFjaGFibGUgd2l0aG91dCBTRVYgb3IgVERYPyBUaGUgZ3JlcCBvdXRwdXQgc2hvdWxkIGJlIGRlZmluaXRpdmUgaGVyZS4gWWVwLCBpdCBhcHBlYXJzIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AuIFNvLCBpdCBsb29rcyBsaWtlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgdG8gdGhvc2UgdHdvIGhhcmR3YXJlIGZlYXR1cmVzLgoKV2FpdCBhIHNlY29uZOKApiB3YXNuJiMzOTt0IHRoZXJlIHNvbWUgcmVjZW50IGRpc2N1c3Npb24gYXJvdW5kIHN5emthbGxlciYjMzk7cyBTRVYgY2FwYWJpbGl0aWVzPyBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBhYm91dCB0aGF0LiBMZXQmIzM5O3MgbWFrZSBzdXJlLCBhcyBpdCBjb3VsZCBjaGFuZ2UgdGhlIGVudGlyZSBjYWxjdWx1cyBoZXJlLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLiBQZXJoYXBzIHRoZXJlIGFyZSBzb21lIHNwZWNpZmljIGNvbmZpZ3MgZm9yIFNFViBvciBURFggc3VwcG9ydC4gSSBuZWVkIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYWJvdXQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhdCBhbGwgdnVsbmVyYWJsZSB0byBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipDaGVja2luZyB0aGUgVERYIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IGEgZmVlbGluZyBzb21ldGhpbmcgbWlnaHQgYmUgb2ZmLCBvciBtYXliZSBJJiMzOTttIGp1c3QgYmVpbmcgb3Zlcmx5IGNhdXRpb3VzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBURFggY29uZmlndXJhdGlvbi4gVGhlcmUmIzM5O3MgYWx3YXlzIGEgY3JpdGljYWwgY29tcG9uZW50IHNvbWV3aGVyZSwgYW5kIGl0JiMzOTtzIGJlc3QgdG8gYmUgcHJvYWN0aXZlIHRoYW4gdG8gc3BlbmQgYW4gaG91ciB0cm91Ymxlc2hvb3RpbmcgYSBwcm9ibGVtIHRoYXQgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQuIFRpbWUgdG8gb3BlbiB0aGF0IHVwIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBhcyBpdCBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTF9URFgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2g6IFNFViAmYW1wOyBURFggQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIFNFViBhbmQgVERYLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5czogY2FuIHRoaXMgYmUgZnV6emVkPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gVGhlIHRleHQgbWVudGlvbnMgJiMzNDtjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsJiMzNDsgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBoYXJkd2FyZS4gVGhpcyBpcyBrZXksIGFzIFNFViBhbmQgVERYIHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIGtub3csIGRlZmluaXRpdmVseSwgdGhhdCBRRU1VIGNhbiYjMzk7dCAqZnVsbHkqIGVtdWxhdGUgU0VWIG9yIFREWCwgYmVjYXVzZSB0aG9zZSByZWx5IG9uIHRoZSBBTUQgUFNQIGFuZCBJbnRlbCBURFgtc3BlY2lmaWMgaGFyZHdhcmUgcmVzcGVjdGl2ZWx5LgoKQnV0IGhvbGQgb24uLi4gY2FuIEtWTSBzb21laG93IGJlIGZ1enplZCBmb3IgU0VWIHdpdGhvdXQgbmVlZGluZyB0aGUgYWN0dWFsIHNpbGljb24/IERpZ2dpbmcgZGVlcGVyLCBJIHJlbWVtYmVyIHRoYXQgYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgaXMgYW4gaW1wb3J0YW50IGNoZWNrLiBJdCBleHBsaWNpdGx5IHRlc3RzIGlmIGEgZ3Vlc3QgaXMgYW4gU05QIGd1ZXN0LiBBbmQgaXQgYWxzbyBpbmRpY2F0ZXMgdGhhdCBpdCByZXF1aXJlcyB0aGUgaG9zdCB0byBzdXBwb3J0IFNOUCBhbmQgdGhlIGd1ZXN0IHRvIGJlIGxhdW5jaGVkIGFzIGFuIFNOUCBndWVzdC4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaGVyZSBpcyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYHNldl9zbnBfZ3Vlc3RgIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGZ1enppbmcgYXBwcm9hY2ggaXMgdmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfc25wX2d1ZXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTM3PXN0YXRpYyBib29sIHNldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDItXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0MzpzdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ0LXtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ1LVx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3Nldl9sb2NrX2hlbGQoa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQ2Olx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0Ny19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMDY9c3RhdGljIGJvb2wgc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTAtXHRyZXR1cm4gKHNldi1cdTAwM2V2bXNhX2ZlYXR1cmVzIFx1MDAyNiBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQykgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIxMTpcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFzZXZfc25wX2d1ZXN0KGt2bSkpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI2ND1zdGF0aWMgaW50IHNucF9sYXVuY2hfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjcwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjcxOlx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNzItXHRcdHJldHVybiAtRU5PVFRZO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQxMD1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQxOS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQyMDpcdGlmICghc2V2X3NucF9ndWVzdChrdm0pIHx8ICFzZXYtXHUwMDNlc25wX2NvbnRleHQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjEtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjU1OT1zdGF0aWMgaW50IHNucF9sYXVuY2hfZmluaXNoKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjU2Ni1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjU2NzpcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTY4LVx0XHRyZXR1cm4gLUVOT1RUWTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2MzU9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzNi17XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2Mzc6XHRpZiAoa3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMgfHwgIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzOC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ1PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY2OS1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjcwOlx0aWYgKHNldl9zbnBfZ3Vlc3Qoa3ZtKSBcdTAwMjZcdTAwMjYgc2V2X2NtZC5pZCBcdTAwM2MgS1ZNX1NFVl9TTlBfTEFVTkNIX1NUQVJUKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjcxLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk2OD12b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMDgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwMDk6XHRpZiAoc2V2X3NucF9ndWVzdChrdm0pKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMTAtXHRcdHNucF9ndWVzdF9yZXFfY2xlYW51cChrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzMwOD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjAtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzMyMTpcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjItXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM0MjQ9c3RhdGljIGludCBzZXZfZXNfdmFsaWRhdGVfdm1nZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MTAtXHRjYXNlIFNWTV9WTUdFWElUX0FQX0NSRUFUSU9OOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTExOlx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MTItXHRcdFx0Z290byB2bWdleGl0X2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MjQtXHRjYXNlIFNWTV9WTUdFWElUX1BTQzpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzUyNTpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpIHx8ICFrdm1fZ2hjYl9zd19zY3JhdGNoX2lzX3ZhbGlkKHN2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MjYtXHRcdFx0Z290byB2bWdleGl0X2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MjktXHRjYXNlIFNWTV9WTUdFWElUX0VYVF9HVUVTVF9SRVFVRVNUOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTMwOlx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgfHxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzUzMS1cdFx0ICAgICFQQUdFX0FMSUdORUQoY29udHJvbC1cdTAwM2VleGl0X2luZm9fMSkgfHxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM2MDU9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM2MTgtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzYxOTpcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM2MjAtXHRcdHU2NCBwZm4gPSBfX3BhKHN2bS1cdTAwM2VzZXZfZXMudm1zYSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjI0PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIzMS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIzMjpcdGlmICghaXNfc2V2X3NucF9ndWVzdChcdTAwMjZzdm0tXHUwMDNldmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMzMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI5Mz1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjk5LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MzAwOlx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzAxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQzNTU9c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQzNC1cdGNhc2UgR0hDQl9NU1JfUFJFRl9HUEFfUkVROlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDM1Olx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzYtXHRcdFx0Z290byBvdXRfdGVybWluYXRlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ0NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ0NjpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQ3LVx0XHRcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NjAtXHRjYXNlIEdIQ0JfTVNSX1BTQ19SRVE6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ0NjE6XHRcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ2Mi1cdFx0XHRnb3RvIG91dF90ZXJtaW5hdGU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NDk5PWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDUzMy1cdC8qIFNFVi1TTlAgZ3Vlc3QgcmVxdWlyZXMgdGhhdCB0aGUgR0hDQiBHUEEgbXVzdCBiZSByZWdpc3RlcmVkICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1MzQ6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcdTAwMjZcdTAwMjYgIWdoY2JfZ3BhX2lzX3JlZ2lzdGVyZWQoc3ZtLCBnaGNiX2dwYSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDUzNS1cdFx0dmNwdV91bmltcGwoXHUwMDI2c3ZtLVx1MDAzZXZjcHUsIFwmIzM0O3ZtZ2V4aXQ6IEdIQ0IgR1BBIFslI2xseF0gaXMgbm90IHJlZ2lzdGVyZWQuXFxuXCYjMzQ7LCBnaGNiX2dwYSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00Nzg4PXZvaWQgc2V2X2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBpbml0X2V2ZW50KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDgwMC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDgwMTpcdGlmIChpbml0X2V2ZW50IFx1MDAyNlx1MDAyNiBpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODAyLVx0XHRzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDgzMz12b2lkIHNldl9lc19wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHNldl9lc19zYXZlX2FyZWEgKmhvc3RzYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NzMtXHQgICAgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfREVCVUdfU1dBUCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ4NzQ6XHQgICAgIGlzX3Nldl9zbnBfZ3Vlc3QoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpKSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODc1LVx0XHRob3N0c2EtXHUwMDNlZHIwX2FkZHJfbWFzayA9IGFtZF9nZXRfZHJfYWRkcl9tYXNrKDApO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTEwNT1pbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMTItXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUxMTM6XHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTExNC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MjE1PWludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyMjA6XHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIyMS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MjMwPXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjUwLVx0LyogQ2hlY2sgaWYgdGhlIFNFViBwb2xpY3kgYWxsb3dzIGRlYnVnZ2luZyAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjUxOlx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTI1Mi1cdFx0aWYgKCEoc2V2LVx1MDAzZXBvbGljeSBcdTAwMjYgU05QX1BPTElDWV9NQVNLX0RFQlVHKSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyNTgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyNTk6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjYwLVx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2RiZyBkYmcgPSB7MH07XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0xOTY1PXN0YXRpYyBpbnQgbnBmX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xOTk5LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDAwOlx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9FTkNfTUFTSykpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMDEtXHRcdGVycm9yX2NvZGUgfD0gUEZFUlJfUFJJVkFURV9BQ0NFU1M7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzY0PXN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzc4LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMzc5Olx0dm1fdHlwZSA9IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtU05QXCYjMzQ7IDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM4MC1cdFx0ICBpc19zZXZfZXNfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtRVNcJiMzNDsgOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9Mzk5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQwNS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDA2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQwNy17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MTg9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MjItXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyMzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyNC17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyNTpcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyNi19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MzI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MzYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQzNzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgUmVhY2hhYmlsaXR5IGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGt2bV9nbWVtX3BvcHVsYXRlYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiBpbnRlcm5hbCB0byBLVk0uIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVlbiB1cGRhdGVkIHRvIHRha2UgYSBgd3JpdGVgIHBhcmFtZXRlci4gIFJpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoYXQgdGhpcyBjaGFuZ2VzIGhvdyBga3ZtX2dtZW1fcG9wdWxhdGVgIGJlaGF2ZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/ICBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga3ZtX2dtZW1fcG9wdWxhdGVgIGlzIGV2ZW4gKmNhbGxlZCogZnJvbS4KCkl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGluIGBzbnBfbGF1bmNoX3VwZGF0ZWAgYW5kIGB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb25gLCB3aGljaCBhcmUgYm90aCBwYXJ0IG9mIHRoZSBTRVYtU05QIGFuZCBURFggaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgc2VjdXJpdHkgZmVhdHVyZXMgdGllZCB0byBBTUQgYW5kIEludGVsIGhhcmR3YXJlLiBDYW4gc3l6a2FsbGVyIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zPyAgV2VsbCwgaWYgU0VWLVNOUCBpcyBzdXBwb3J0ZWQsIHN5emthbGxlciAqY2FuKiBpc3N1ZSB0aGUgYEtWTV9TRVZfU05QX0xBVU5DSF9VUERBVEVgIGlvY3RsLiBCdXQgaWYgU0VWLVNOUCBpcyAqbm90KiBzdXBwb3J0ZWQsIGBzZXZfc25wX2d1ZXN0KGt2bSlgIHJldHVybnMgZmFsc2UsIGFuZCBgc25wX2xhdW5jaF91cGRhdGVgIGp1c3QgcmV0dXJucyBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGAtRUlOVkFMYC4KCk15IG5leHQgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBwYXRoIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRT8gVHlwaWNhbGx5LCBHQ0UgaW5zdGFuY2VzIGRvbiYjMzk7dCBzdXBwb3J0IG5lc3RlZCBTRVYtU05QIG9yIFREWCwgY29ycmVjdD8gQWgsIGJ1dCBob2xkIG9uLCB0aGUgaW5zdHJ1Y3Rpb25zLi4uIEkgbmVlZCB0byBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSwgdGhhdCBpZiB0aGUgcGF0Y2ggaXMgb25seSByZWxhdGVkIHRvIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiBpdCBzaG91bGQgYmUgbWFya2VkIGFzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsuCgpTaW5jZSBTRVYtU05QIGFuZCBURFggcmVxdWlyZSB0aG9zZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyAoQU1EIFNFVi1TTlAsIEludGVsIFREWCkgYW5kIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZW0gaW4gYSB3YXkgdGhhdCBhbGxvd3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIHN0YW5kYXJkIEdDRSBpbnN0YW5jZXMsIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgKmFyZSogaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50LiBXYWl0LCBkb2VzIFFFTVUgZXZlbiBlbXVsYXRlIFNFVi1TTlA/IE5vLCBRRU1VIHVzZXMgS1ZNIHRvIHN1cHBvcnQgU0VWLVNOUCwgaXQgZG9lc24mIzM5O3QgZG8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzLgoKU28sIGNhbiBLVk0gYmUgZnV6emVkIGZvciBTRVYtU05QIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydD8gSSBzaG91bGQgY2hlY2sgYF9fX19zZXZfc25wX2d1ZXN0YCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX19fc2V2X3NucF9ndWVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTE0Mz1zdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0NS1cdGt2bV9sb2NrZGVwX2Fzc2VydF9zZXZfbG9ja19oZWxkKGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0NjpcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdChrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDctfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzMwOD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjAtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzMyMTpcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjItXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTM5OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDcte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDIzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI0LXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDI1Olx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgX19fX3Nldl9zbnBfZ3Vlc3RgIERlZmluaXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgX19fX3Nldl9zbnBfZ3Vlc3RgLiYjMzQ7IEl0JiMzOTtzIGEgYml0IGNyeXB0aWMsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGhhcyBzb21lIHVuZGVybHlpbmcgc2lnbmlmaWNhbmNlIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmVmb3JlIEkgcHJvY2VlZC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc3BlY2lmaWMgbWFjcm8sIGEgdmFyaWFibGUsIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIGV2ZW4gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGNvZGViYXNlIEkmIzM5O20gd29ya2luZyB3aXRoLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEnigJltIGd1ZXNzaW5nIGl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gU0VWLVNOUCBndWVzdCBoYW5kbGluZyBpbiBzb21lIHdheS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGNvbnRleHQgaXQgb3BlcmF0ZXMgaW4gYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbmV4dCBwaWVjZSBvZiBjb2RlIEkmIzM5O20gbG9va2luZyBhdCwgc28gYmVzdCB0byBmaW5kIHRoaXMgZGVmaW5pdGlvbiBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uaD0zOTk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA1LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MDY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzOTgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEtWTS9TVk0gSW50ZXJuYWxzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBBTUQgU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gS1ZNLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBhc3BlY3QsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgIGhlYWRlciBmaWxlLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBpcyBsaWtlbHkgYXJvdW5kIGxpbmUgNDA2LiBJdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaG9uZSBpbiBvbiB0aGUgc3BlY2lmaWMgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZnVydGhlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTU6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4gMzk2Olx0e1xuIDM5NzpcdFx0cmV0dXJuIHRvX2t2bV9zZXZfaW5mbyhrdm0pLVx1MDAzZWFjdGl2ZTtcbiAzOTg6XHR9XG4gMzk5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIDQwMDpcdHtcbiA0MDE6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xuIDQwMjpcdFxuIDQwMzpcdFx0cmV0dXJuIHNldi1cdTAwM2Vlc19hY3RpdmUgXHUwMDI2XHUwMDI2ICFXQVJOX09OX09OQ0UoIXNldi1cdTAwM2VhY3RpdmUpO1xuIDQwNDpcdH1cbiA0MDU6XHRcbiA0MDY6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIDQwNzpcdHtcbiA0MDg6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xuIDQwOTpcdFxuIDQxMDpcdFx0cmV0dXJuIChzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyBcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUpIFx1MDAyNlx1MDAyNlxuIDQxMTpcdFx0ICAgICAgICFXQVJOX09OX09OQ0UoIV9fX19zZXZfZXNfZ3Vlc3Qoa3ZtKSk7XG4gNDEyOlx0fVxuIDQxMzpcdFxuIDQxNDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzIHNuaXBwZXQsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgYXMgaWYgaXQgd2VyZSBteSBvd24gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBjb2RlOgoKKipDaGVja2luZyBTRVYtU05QIEFjdGl2YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgY2hlY2tpbmcgYF9fX19zZXZfc25wX2d1ZXN0YCBhbmQgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYHNldi0mZ3Q7dm1zYV9mZWF0dXJlcyAmYW1wOyBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRWAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDtXaGVyZSBhbmQgaG93IGlzIGBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRWAgYWN0dWFsbHkgKnNldCogaW4gdGhlIGZpcnN0IHBsYWNlPyYjMzQ7IEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgdGhhdCYjMzk7cyBtYWdpY2FsbHkgdGhlcmUuIFRoZSBsb2dpYyB0cmFpbHMgYmFjayB0byBgS1ZNX1NFVl9JTklUMmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGlzIGlzIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoLiBOb3csIHRoZSByZWFsIGNydXggb2YgdGhlIGlzc3VlIGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgYEtWTV9TRVZfSU5JVDJgIGNhbGwgcmVxdWlyZXMgZXhwbGljaXQgaGFyZHdhcmUgc3VwcG9ydC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYEtWTV9TRVZfSU5JVDJgIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGlmIGFueSwgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgdGhlIFNOUCBmZWF0dXJlcyB0byBiZSBhY3RpdmUuIEkgaGF2ZSB0byB0cmFjZSBob3cgdGhpcyBmbGFnIGlzIGJlaW5nIGVuYWJsZWQgYnkgdGhlIEtWTSBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NWTV9TRVZfRkVBVF9TTlBfQUNUSVZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTMwNT1zdGF0aWNfYXNzZXJ0KChYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTMwNi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjMwNzojZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFXHRcdFx0XHRCSVQoMClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTMwOC0jZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlx0XHRCSVQoMylcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4OD1zdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzMtXHRpZiAoc25wX2FjdGl2ZSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM0Olx0XHRzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDA2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDktXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQxMDpcdHJldHVybiAoc2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVx0ICAgICAgICFXQVJOX09OX09OQ0UoIV9fX19zZXZfZXNfZ3Vlc3Qoa3ZtKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzYwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgYF9fc2V2X2d1ZXN0X2luaXRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fc2V2X2d1ZXN0X2luaXRgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgU0VWLVNOUCBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZCBoZXJlIHdpdGhpbiB0aGUgZ3Vlc3QmIzM5O3MgY29udGV4dC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgKmhvdyogYW5kIHRoZSAqd2h5Ki4gV2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYXJlIHdlIHNldHRpbmcgdXA/IFdoYXQmIzM5O3MgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnM/IEFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IGRvZXMgdGhpcyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBlbnN1cmUgdGhlIGludGVncml0eSBhbmQgY29uZmlkZW50aWFsaXR5IGFzcGVjdHMgb2YgdGhlIGd1ZXN0IGluIGFuIFNFVi1lbmFibGVkIGVudmlyb25tZW50PyBBcmUgd2Ugc2VlaW5nIHRoZSBleHBlY3RlZCBtZW1vcnkgcmVnaW9uIHByb3RlY3Rpb25zIHNldCB1cD8gQXJlIHRoZSBzZWNyZXRzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gdGhlIGF0dGVzdGF0aW9uIHByb2Nlc3M/IEFyZSB3ZSB2ZXJpZnlpbmcgdGhlIGluaXRpYWwgZmlybXdhcmUgc3RhdGU/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBzY3J1dGluaXplIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaHlwZXJ2aXNvciBvciB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS1iYXNlZCBzZWN1cml0eSBtZWNoYW5pc21zLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkgYXJlIHNldHRpbmcgdXAgdGhlIHBhZ2UgdGFibGVzLCBjb25maWd1cmluZyB0aGUgc2VjcmV0cywgYW5kIGhhbmRsaW5nIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdpdGggdGhlIGhvc3QgY29ycmVjdGx5LiBJdCYjMzk7cyB0aGUgY29yZSBvZiB0cnVzdCwgYW5kIHRoYXQmIzM5O3MgdGhlIHBhcnQgdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZCB0aGUgbW9zdC4gRnJvbSB0aGVyZSBJJiMzOTtsbCBiZSBhYmxlIHRvIHRlbGwgd2hhdCBjb3VsZCBiZSBpbXByb3ZlZCBvciBvcHRpbWl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDg4Olx0c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuIDQ4OTpcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0ICpkYXRhLFxuIDQ5MDpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXG4gNDkxOlx0e1xuIDQ5MjpcdFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XG4gNDkzOlx0XHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XG4gNDk0Olx0XHRib29sIGVzX2FjdGl2ZSA9IHZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfVk07XG4gNDk1Olx0XHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xuIDQ5NjpcdFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xuIDQ5NzpcdFx0aW50IHJldDtcbiA0OTg6XHRcbiA0OTk6XHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cylcbiA1MDA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTAxOlx0XG4gNTAyOlx0XHRpZiAoZGF0YS1cdTAwM2VmbGFncylcbiA1MDM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTA0Olx0XG4gNTA1Olx0XHRpZiAoIXNucF9hY3RpdmUpXG4gNTA2Olx0XHRcdHZhbGlkX3Ztc2FfZmVhdHVyZXMgXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XG4gNTA3Olx0XG4gNTA4Olx0XHRpZiAoZGF0YS1cdTAwM2V2bXNhX2ZlYXR1cmVzIFx1MDAyNiB+dmFsaWRfdm1zYV9mZWF0dXJlcylcbiA1MDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTEwOlx0XG4gNTExOlx0XHRpZiAoZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb24gXHUwMDNlIEdIQ0JfVkVSU0lPTl9NQVggfHwgKCFlc19hY3RpdmUgXHUwMDI2XHUwMDI2IGRhdGEtXHUwMDNlZ2hjYl92ZXJzaW9uKSlcbiA1MTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTEzOlx0XG4gNTE0Olx0XHQvKlxuIDUxNTpcdFx0ICogS1ZNIHN1cHBvcnRzIHRoZSBmdWxsIHJhbmdlIG9mIG1hbmRhdG9yeSBmZWF0dXJlcyBkZWZpbmVkIGJ5IHZlcnNpb25cbiA1MTY6XHRcdCAqIDIgb2YgdGhlIEdIQ0IgcHJvdG9jb2wsIHNvIGRlZmF1bHQgdG8gdGhhdCBmb3IgU0VWLUVTIGd1ZXN0cyBjcmVhdGVkXG4gNTE3Olx0XHQgKiB2aWEgS1ZNX1NFVl9JTklUMiAoS1ZNX1NFVl9JTklUIGZvcmNlcyB2ZXJzaW9uIDEpLlxuIDUxODpcdFx0ICovXG4gNTE5Olx0XHRpZiAoZXNfYWN0aXZlIFx1MDAyNlx1MDAyNiAhZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb24pXG4gNTIwOlx0XHRcdGRhdGEtXHUwMDNlZ2hjYl92ZXJzaW9uID0gMjtcbiA1MjE6XHRcbiA1MjI6XHRcdGlmIChzbnBfYWN0aXZlIFx1MDAyNlx1MDAyNiBkYXRhLVx1MDAzZWdoY2JfdmVyc2lvbiBcdTAwM2MgMilcbiA1MjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTI0Olx0XG4gNTI1Olx0XHRpZiAodW5saWtlbHkoc2V2LVx1MDAzZWFjdGl2ZSkpXG4gNTI2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyNzpcdFxuIDUyODpcdFx0c2V2LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4gNTI5Olx0XHRzZXYtXHUwMDNlZXNfYWN0aXZlID0gZXNfYWN0aXZlO1xuIDUzMDpcdFx0c2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgPSBkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXM7XG4gNTMxOlx0XHRzZXYtXHUwMDNlZ2hjYl92ZXJzaW9uID0gZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb247XG4gNTMyOlx0XG4gNTMzOlx0XHRpZiAoc25wX2FjdGl2ZSlcbiA1MzQ6XHRcdFx0c2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkU7XG4gNTM1Olx0XG4gNTM2Olx0XHRyZXQgPSBzZXZfYXNpZF9uZXcoc2V2LCB2bV90eXBlKTtcbiA1Mzc6XHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNFViBJbml0aWFsaXphdGlvbiBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYF9fc2V2X2d1ZXN0X2luaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgY2VudHJhbCB0byB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBndWVzdCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGUgdHJhY2Ugc2hvd3MgYSBjYWxsIHRvIGBzZXZfYXNpZF9uZXdgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgdHlpbmcgaW50byBhbnkgaGFyZHdhcmUgZmVhdHVyZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgYHNldl9hc2lkX25ld2AgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBhbmQgd2Ugc3RhcnQgbGV2ZXJhZ2luZyBhbnkgcmVxdWlyZWQgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgcmlnaHQgbm93LCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgZ28gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X2FzaWRfbmV3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQwPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2V2X2FsbG9jX2FzaWQodW5zaWduZWQgaW50IG1pbl9hc2lkLCB1bnNpZ25lZCBpbnQgbWF4X2FzaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2MjpzdGF0aWMgaW50IHNldl9hc2lkX25ldyhzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYsIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4OD1zdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzNjpcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQxOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCB0aGUgY29udGV4dCBpcyByZWxldmFudCB0byBteSB3b3JrOgoKKipDaGVja2luZyBgc2V2X2FzaWRfbmV3YCoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gaW4gdGhlIG1pZGRsZSBvZiBhIHRyb3VibGVzaG9vdGluZyBzZXNzaW9uLCBjb2RlIHJldmlldywgb3IgbWF5YmUgZXZlbiBhcmNoaXRlY3R1cmFsIGRlc2lnbi4gJiMzNDtDaGVja2luZyBgc2V2X2FzaWRfbmV3YCYjMzQ7IGluZGljYXRlcyBhIHNwZWNpZmljIHZhcmlhYmxlLCBmdW5jdGlvbiwgb3IgY29uY2VwdCByZWxhdGVkIHRvIEFTSUQgKEFkZHJlc3MgU3BhY2UgSWRlbnRpZmllcikgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU0VWIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uKSwgd2hpY2ggSSYjMzk7bSBjbGVhcmx5IGZhbWlsaWFyIHdpdGguIEl0JiMzOTtzIGEga2V5IHBpZWNlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgcmVsZXZhbmNlIHRvIHdoYXRldmVyIEkmIzM5O20gd29ya2luZyBvbiByaWdodCBub3cuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYSBzdXNwZWN0ZWQgaXNzdWUsIG9yIG1heWJlIEkmIzM5O20gdmVyaWZ5aW5nIHNvbWUgYXNzdW1wdGlvbnMuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgcGxhY2UgdG8gc3RhcnQuIFRoaXMgY2hlY2sgd2lsbCBkZXRlcm1pbmUgd2hpY2ggcGF0aCBJJiMzOTtsbCBmb2xsb3cuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjI6XHRzdGF0aWMgaW50IHNldl9hc2lkX25ldyhzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYsIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbiAyNjM6XHR7XG4gMjY0Olx0XHQvKlxuIDI2NTpcdFx0ICogU0VWLWVuYWJsZWQgZ3Vlc3RzIG11c3QgdXNlIGFzaWQgZnJvbSBtaW5fc2V2X2FzaWQgdG8gbWF4X3Nldl9hc2lkLlxuIDI2NjpcdFx0ICogU0VWLUVTLWVuYWJsZWQgZ3Vlc3QgY2FuIHVzZSBmcm9tIDEgdG8gbWluX3Nldl9hc2lkIC0gMS5cbiAyNjc6XHRcdCAqL1xuIDI2ODpcdFx0dW5zaWduZWQgaW50IG1pbl9hc2lkLCBtYXhfYXNpZCwgYXNpZDtcbiAyNjk6XHRcdGludCByZXQ7XG4gMjcwOlx0XG4gMjcxOlx0XHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xuIDI3MjpcdFx0XHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcbiAyNzM6XHRcdFx0bWF4X2FzaWQgPSBtYXhfc25wX2FzaWQ7XG4gMjc0Olx0XHR9IGVsc2UgaWYgKHNldi1cdTAwM2Vlc19hY3RpdmUpIHtcbiAyNzU6XHRcdFx0bWluX2FzaWQgPSBtaW5fc2V2X2VzX2FzaWQ7XG4gMjc2Olx0XHRcdG1heF9hc2lkID0gbWF4X3Nldl9lc19hc2lkO1xuIDI3NzpcdFx0fSBlbHNlIHtcbiAyNzg6XHRcdFx0bWluX2FzaWQgPSBtaW5fc2V2X2FzaWQ7XG4gMjc5Olx0XHRcdG1heF9hc2lkID0gbWF4X3Nldl9hc2lkO1xuIDI4MDpcdFx0fVxuIDI4MTpcdFxuIDI4MjpcdFx0LypcbiAyODM6XHRcdCAqIFRoZSBtaW4gQVNJRCBjYW4gZW5kIHVwIGxhcmdlciB0aGFuIHRoZSBtYXggaWYgYmFzaWMgU0VWIHN1cHBvcnQgaXNcbiAyODQ6XHRcdCAqIGVmZmVjdGl2ZWx5IGRpc2FibGVkIGJ5IGRpc2FsbG93aW5nIHVzZSBvZiBBU0lEcyBmb3IgU0VWIGd1ZXN0cy5cbiAyODU6XHRcdCAqIFNpbWlsYXJseSBmb3IgU0VWLUVTIGd1ZXN0cyB0aGUgbWluIEFTSUQgY2FuIGVuZCB1cCBsYXJnZXIgdGhhbiB0aGVcbiAyODY6XHRcdCAqIG1heCB3aGVuIGNpcGhlcnRleHQgaGlkaW5nIGlzIGVuYWJsZWQsIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBTRVYtRVNcbiAyODc6XHRcdCAqIHN1cHBvcnQuXG4gMjg4Olx0XHQgKi9cbiAyODk6XHRcdGlmIChtaW5fYXNpZCBcdTAwM2UgbWF4X2FzaWQpXG4gMjkwOlx0XHRcdHJldHVybiAtRU5PVFRZO1xuIDI5MTpcdFxuIDI5MjpcdFx0V0FSTl9PTl9PTkNFKHNldi1cdTAwM2VtaXNjX2NnKTtcbiAyOTM6XHRcdHNldi1cdTAwM2VtaXNjX2NnID0gZ2V0X2N1cnJlbnRfbWlzY19jZygpO1xuIDI5NDpcdFx0cmV0ID0gc2V2X21pc2NfY2dfdHJ5X2NoYXJnZShzZXYpO1xuIDI5NTpcdFx0aWYgKHJldClcbiAyOTY6XHRcdFx0Z290byBlX3B1dF9jZztcbiAyOTc6XHRcbiAyOTg6XHRcdGFzaWQgPSBzZXZfYWxsb2NfYXNpZChtaW5fYXNpZCwgbWF4X2FzaWQpO1xuIDI5OTpcdFx0aWYgKGFzaWQgXHUwMDNlIG1heF9hc2lkKSB7XG4gMzAwOlx0XHRcdHJldCA9IC1FQlVTWTtcbiAzMDE6XHRcdFx0Z290byBlX3VuY2hhcmdlO1xuIDMwMjpcdFx0fVxuIDMwMzpcdFxuIDMwNDpcdFx0c2V2LVx1MDAzZWFzaWQgPSBhc2lkO1xuIDMwNTpcdFx0cmV0dXJuIDA7XG4gMzA2Olx0XG4gMzA3Olx0ZV91bmNoYXJnZTpcbiAzMDg6XHRcdHNldl9taXNjX2NnX3VuY2hhcmdlKHNldik7XG4gMzA5Olx0ZV9wdXRfY2c6XG4gMzEwOlx0XHRwdXRfbWlzY19jZyhzZXYtXHUwMDNlbWlzY19jZyk7XG4gMzExOlx0XHRzZXYtXHUwMDNlbWlzY19jZyA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDg0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRHJpdmVyIElzc3VlKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYSBjb25kaXRpb25hbCBjaGVjazogYG1pbl9zbnBfYXNpZCAmZ3Q7IG1heF9zbnBfYXNpZGAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgcHJvYmxlbS4gSWYgdGhpcyBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUsIHRoZSBjb2RlIGlzIGV4cGxpY2l0bHkgZGVzaWduZWQgdG8gcmV0dXJuIGAtRU5PVFRZYC4gVGhhdCYjMzk7cyB0aGUga2V5IGJlaGF2aW9yIHRvIHVuZGVyc3RhbmQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCAqd2h5KiB0aGlzIHNjZW5hcmlvIHdvdWxkIGFyaXNlLCBiZWNhdXNlIGEgbmVnYXRpdmUgcmV0dXJuIGxpa2UgYC1FTk9UVFlgIHN1Z2dlc3RzIGFuICp1bmV4cGVjdGVkKiBvciBpbmFwcHJvcHJpYXRlIG9wZXJhdGlvbi4gSSBrbm93IHRoYXQgdXN1YWxseSBpbmRpY2F0ZXMgYW4gaW5hcHByb3ByaWF0ZSBpb2N0bCByZXF1ZXN0LgoKVGhlIGNydXggb2YgdGhlIG1hdHRlciB0aGVuIGJlY29tZXM6IGhvdyBhcmUgYG1pbl9zbnBfYXNpZGAgYW5kIGBtYXhfc25wX2FzaWRgIGluaXRpYWxpemVkPyBXaGVyZSBhbmQgaG93IGFyZSB0aGVzZSB2YWx1ZXMgcG9wdWxhdGVkPyBXaGF0IGNvZGUgcGF0aCBzZXRzIHRoZW0sIGFuZCB3aGF0IGRvZXMgdGhlIGRhdGEgdGhleSByZXByZXNlbnQgKmFjdHVhbGx5KiBtZWFuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXIgYW5kIHRoZSBoYXJkd2FyZSBpdCBjb250cm9scz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbiBwb2ludHMgZm9yIHRoZXNlIHR3byB2YXJpYWJsZXMuIElzIHRoZXJlIGEgcmFjZSBjb25kaXRpb24/IEEgbG9naWMgZXJyb3IgaW4gY2FsY3VsYXRpbmcgcmFuZ2VzPyBBcmUgdGhlc2Ugc3VwcG9zZWQgdG8gcmVwcmVzZW50IGFuICppbnZlcnRlZCogcmFuZ2UsIG9yIGlzIHRoaXMganVzdCBhbiB1bmluaXRpYWxpemVkIHN0YXRlPyBUaGUgYW5zd2VyIGxpZXMgaW4gdGhlIHNvdXJjZSBjb2RlOyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGVzZSB2YXJpYWJsZXMgYW5kIHRyYWNlIHRoZWlyIHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgdW50aWwgSSB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YXJpYWJsZXMgZW5kIHVwIGluIGEgc3RhdGUgdGhhdCBjb3VsZCB0cmlnZ2VyIGAtRU5PVFRZYC4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gYSBidWcgb3IgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNvbmRpdGlvbiB3b3VsZCAqZXZlciogYmUgbWV0IGFuZCBpZiBgLUVOT1RUWWAgaXMgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fc25wX2FzaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMDM9c3RhdGljIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEwNDpzdGF0aWMgdW5zaWduZWQgaW50IG1pbl9zbnBfYXNpZDtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTA1LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldl9tZV9tYXNrO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYyPXN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcxLVx0aWYgKHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjcyOlx0XHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjczLVx0XHRtYXhfYXNpZCA9IG1heF9zbnBfYXNpZDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNjg9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTY1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTY2Olx0bWluX3Nldl9lc19hc2lkID0gbWluX3NucF9hc2lkID0gMTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE2Ny1cdG1heF9zZXZfZXNfYXNpZCA9IG1heF9zbnBfYXNpZCA9IG1pbl9zZXZfYXNpZCAtIDE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjIyLVx0XHRcdHN0cl9lbmFibGVkX2Rpc2FibGVkKHNldl9zbnBfc3VwcG9ydGVkKSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIyMzpcdFx0XHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzkxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCB0aGUgbWVudGFsIGdlYXJzIGFyZSBzdGFydGluZyB0byB0dXJuLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBhcmVhLiBXaGVuIEkgc2VlIHRoYXQgbm90YXRpb24sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBzZXZfaGFyZHdhcmVfc2V0dXBgLiBJIHNlZSB0aGF0IHBocmFzZSwgSSB0aGluayBvZiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlY3VyZSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBsaW5lZCB1cCBjb3JyZWN0bHkgZnJvbSB0aGUgdmVyeSBzdGFydC4gSXMgdGhlIGhhcmR3YXJlIGFwcHJvcHJpYXRlbHkgcHJvdmlzaW9uZWQ/IEFyZSB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzIGVuYWJsZWQgYXQgdGhlIGZpcm13YXJlIGxldmVsPyBBcmUgdGhlIGtleXMgcHJvcGVybHkgaW5qZWN0ZWQ/IFRoaXMgaXMgd2hlcmUgZXZlcnl0aGluZyBiZWdpbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhbGwgc3RpbGwgbG9va2luZyBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDY4Olx0dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4zMDY5Olx0e1xuMzA3MDpcdFx0dW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeCwgc2V2X2FzaWRfY291bnQsIHNldl9lc19hc2lkX2NvdW50O1xuMzA3MTpcdFx0c3RydWN0IHNldl9wbGF0Zm9ybV9pbml0X2FyZ3MgaW5pdF9hcmdzID0gezB9O1xuMzA3MjpcdFx0Ym9vbCBzZXZfc25wX3N1cHBvcnRlZCA9IGZhbHNlO1xuMzA3MzpcdFx0Ym9vbCBzZXZfZXNfc3VwcG9ydGVkID0gZmFsc2U7XG4zMDc0Olx0XHRib29sIHNldl9zdXBwb3J0ZWQgPSBmYWxzZTtcbjMwNzU6XHRcbjMwNzY6XHRcdGlmICghc2V2X2VuYWJsZWQgfHwgIW5wdF9lbmFibGVkIHx8ICFucmlwcylcbjMwNzc6XHRcdFx0Z290byBvdXQ7XG4zMDc4Olx0XG4zMDc5Olx0XHQvKlxuMzA4MDpcdFx0ICogU0VWIG11c3Qgb2J2aW91c2x5IGJlIHN1cHBvcnRlZCBpbiBoYXJkd2FyZS4gIFNhbml0eSBjaGVjayB0aGF0IHRoZVxuMzA4MTpcdFx0ICogQ1BVIHN1cHBvcnRzIGRlY29kZSBhc3Npc3RzLCB3aGljaCBpcyBtYW5kYXRvcnkgZm9yIFNFViBndWVzdHMgdG9cbjMwODI6XHRcdCAqIHN1cHBvcnQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLiAgRGl0dG8gZm9yIGZsdXNoaW5nIGJ5IEFTSUQsIGFzIFNFVlxuMzA4MzpcdFx0ICogZ3Vlc3RzIGFyZSBib3VuZCB0byBhIHNpbmdsZSBBU0lELCBpLmUuIEtWTSBjYW4mIzM5O3Qgcm90YXRlIHRvIGEgbmV3XG4zMDg0Olx0XHQgKiBBU0lEIHRvIGVmZmVjdCBhIFRMQiBmbHVzaC5cbjMwODU6XHRcdCAqL1xuMzA4NjpcdFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWKSB8fFxuMzA4NzpcdFx0ICAgIFdBUk5fT05fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpKSB8fFxuMzA4ODpcdFx0ICAgIFdBUk5fT05fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZMVVNIQllBU0lEKSkpXG4zMDg5Olx0XHRcdGdvdG8gb3V0O1xuMzA5MDpcdFxuMzA5MTpcdFx0LypcbjMwOTI6XHRcdCAqIFRoZSBrZXJuZWwmIzM5O3MgaW5pdGNhbGwgaW5mcmFzdHJ1Y3R1cmUgbGFja3MgdGhlIGFiaWxpdHkgdG8gZXhwcmVzc1xuMzA5MzpcdFx0ICogZGVwZW5kZW5jaWVzIGJldHdlZW4gaW5pdGNhbGxzLCB3aGVyZWFzIHRoZSBtb2R1bGVzIGluZnJhc3RydWN0dXJlXG4zMDk0Olx0XHQgKiBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgZGVwZW5kZW5jaWVzIHZpYSBzeW1ib2wgbG9hZGluZy4gIEVuc3VyZSB0aGVcbjMwOTU6XHRcdCAqIFBTUCBTRVYgZHJpdmVyIGlzIGluaXRpYWxpemVkIGJlZm9yZSBwcm9jZWVkaW5nIGlmIEtWTSBpcyBidWlsdC1pbixcbjMwOTY6XHRcdCAqIGFzIHRoZSBkZXBlbmRlbmN5IGlzbiYjMzk7dCBoYW5kbGVkIGJ5IHRoZSBpbml0Y2FsbCBpbmZyYXN0cnVjdHVyZS5cbjMwOTc6XHRcdCAqL1xuMzA5ODpcdFx0aWYgKElTX0JVSUxUSU4oQ09ORklHX0tWTV9BTUQpIFx1MDAyNlx1MDAyNiBzZXZfbW9kdWxlX2luaXQoKSlcbjMwOTk6XHRcdFx0Z290byBvdXQ7XG4zMTAwOlx0XG4zMTAxOlx0XHQvKiBSZXRyaWV2ZSBTRVYgQ1BVSUQgaW5mb3JtYXRpb24gKi9cbjMxMDI6XHRcdGNwdWlkKDB4ODAwMDAwMWYsIFx1MDAyNmVheCwgXHUwMDI2ZWJ4LCBcdTAwMjZlY3gsIFx1MDAyNmVkeCk7XG4zMTAzOlx0XG4zMTA0Olx0XHQvKiBTZXQgZW5jcnlwdGlvbiBiaXQgbG9jYXRpb24gZm9yIFNFVi1FUyBndWVzdHMgKi9cbjMxMDU6XHRcdHNldl9lbmNfYml0ID0gZWJ4IFx1MDAyNiAweDNmO1xuMzEwNjpcdFxuMzEwNzpcdFx0LyogTWF4aW11bSBudW1iZXIgb2YgZW5jcnlwdGVkIGd1ZXN0cyBzdXBwb3J0ZWQgc2ltdWx0YW5lb3VzbHkgKi9cbjMxMDg6XHRcdG1heF9zZXZfYXNpZCA9IGVjeDtcbjMxMDk6XHRcdGlmICghbWF4X3Nldl9hc2lkKVxuMzExMDpcdFx0XHRnb3RvIG91dDtcbjMxMTE6XHRcbjMxMTI6XHRcdC8qIE1pbmltdW0gQVNJRCB2YWx1ZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBTRVYgZ3Vlc3QgKi9cbjMxMTM6XHRcdG1pbl9zZXZfYXNpZCA9IGVkeDtcbjMxMTQ6XHRcdHNldl9tZV9tYXNrID0gMVVMIFx1MDAzY1x1MDAzYyAoZWJ4IFx1MDAyNiAweDNmKTtcbjMxMTU6XHRcbjMxMTY6XHRcdC8qXG4zMTE3Olx0XHQgKiBJbml0aWFsaXplIFNFViBBU0lEIGJpdG1hcHMuIEFsbG9jYXRlIHNwYWNlIGZvciBBU0lEIDAgaW4gdGhlIGJpdG1hcCxcbjMxMTg6XHRcdCAqIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG5ldmVyIHVzZWQsIHNvIHRoYXQgdGhlIGJpdG1hcCBpcyBpbmRleGVkIGJ5IHRoZVxuMzExOTpcdFx0ICogYWN0dWFsIEFTSUQuXG4zMTIwOlx0XHQgKi9cbjMxMjE6XHRcdG5yX2FzaWRzID0gbWF4X3Nldl9hc2lkICYjNDM7IDE7XG4zMTIyOlx0XHRzZXZfYXNpZF9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKG5yX2FzaWRzLCBHRlBfS0VSTkVMKTtcbjMxMjM6XHRcdGlmICghc2V2X2FzaWRfYml0bWFwKVxuMzEyNDpcdFx0XHRnb3RvIG91dDtcbjMxMjU6XHRcbjMxMjY6XHRcdHNldl9yZWNsYWltX2FzaWRfYml0bWFwID0gYml0bWFwX3phbGxvYyhucl9hc2lkcywgR0ZQX0tFUk5FTCk7XG4zMTI3Olx0XHRpZiAoIXNldl9yZWNsYWltX2FzaWRfYml0bWFwKSB7XG4zMTI4Olx0XHRcdGJpdG1hcF9mcmVlKHNldl9hc2lkX2JpdG1hcCk7XG4zMTI5Olx0XHRcdHNldl9hc2lkX2JpdG1hcCA9IE5VTEw7XG4zMTMwOlx0XHRcdGdvdG8gb3V0O1xuMzEzMTpcdFx0fVxuMzEzMjpcdFxuMzEzMzpcdFx0aWYgKG1pbl9zZXZfYXNpZCBcdTAwM2M9IG1heF9zZXZfYXNpZCkge1xuMzEzNDpcdFx0XHRzZXZfYXNpZF9jb3VudCA9IG1heF9zZXZfYXNpZCAtIG1pbl9zZXZfYXNpZCAmIzQzOyAxO1xuMzEzNTpcdFx0XHRXQVJOX09OX09OQ0UobWlzY19jZ19zZXRfY2FwYWNpdHkoTUlTQ19DR19SRVNfU0VWLCBzZXZfYXNpZF9jb3VudCkpO1xuMzEzNjpcdFx0fVxuMzEzNzpcdFx0c2V2X3N1cHBvcnRlZCA9IHRydWU7XG4zMTM4Olx0XG4zMTM5Olx0XHQvKiBTRVYtRVMgc3VwcG9ydCByZXF1ZXN0ZWQ/ICovXG4zMTQwOlx0XHRpZiAoIXNldl9lc19lbmFibGVkKVxuMzE0MTpcdFx0XHRnb3RvIG91dDtcbjMxNDI6XHRcbjMxNDM6XHRcdC8qXG4zMTQ0Olx0XHQgKiBTRVYtRVMgcmVxdWlyZXMgTU1JTyBjYWNoaW5nIGFzIEtWTSBkb2VzbiYjMzk7dCBoYXZlIGFjY2VzcyB0byB0aGUgZ3Vlc3RcbjMxNDU6XHRcdCAqIGluc3RydWN0aW9uIHN0cmVhbSwgaS5lLiBjYW4mIzM5O3QgZW11bGF0ZSBpbiByZXNwb25zZSB0byBhICNOUEYgYW5kXG4zMTQ2Olx0XHQgKiBpbnN0ZWFkIHJlbGllcyBvbiAjTlBGKFJTVkQpIGJlaW5nIHJlZmxlY3RlZCBpbnRvIHRoZSBndWVzdCBhcyAjVkNcbjMxNDc6XHRcdCAqICh0aGUgZ3Vlc3QgY2FuIHRoZW4gZG8gYSAjVk1HRVhJVCB0byByZXF1ZXN0IE1NSU8gZW11bGF0aW9uKS5cbjMxNDg6XHRcdCAqL1xuMzE0OTpcdFx0aWYgKCFlbmFibGVfbW1pb19jYWNoaW5nKVxuMzE1MDpcdFx0XHRnb3RvIG91dDtcbjMxNTE6XHRcbjMxNTI6XHRcdC8qIERvZXMgdGhlIENQVSBzdXBwb3J0IFNFVi1FUz8gKi9cbjMxNTM6XHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9FUykpXG4zMTU0Olx0XHRcdGdvdG8gb3V0O1xuMzE1NTpcdFxuMzE1NjpcdFx0aWYgKCFsYnJ2KSB7XG4zMTU3Olx0XHRcdFdBUk5fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpLFxuMzE1ODpcdFx0XHRcdCAgXCYjMzQ7TEJSViBtdXN0IGJlIHByZXNlbnQgZm9yIFNFVi1FUyBzdXBwb3J0XCYjMzQ7KTtcbjMxNTk6XHRcdFx0Z290byBvdXQ7XG4zMTYwOlx0XHR9XG4zMTYxOlx0XG4zMTYyOlx0XHQvKiBIYXMgdGhlIHN5c3RlbSBiZWVuIGFsbG9jYXRlZCBBU0lEcyBmb3IgU0VWLUVTPyAqL1xuMzE2MzpcdFx0aWYgKG1pbl9zZXZfYXNpZCA9PSAxKVxuMzE2NDpcdFx0XHRnb3RvIG91dDtcbjMxNjU6XHRcbjMxNjY6XHRcdG1pbl9zZXZfZXNfYXNpZCA9IG1pbl9zbnBfYXNpZCA9IDE7XG4zMTY3Olx0XHRtYXhfc2V2X2VzX2FzaWQgPSBtYXhfc25wX2FzaWQgPSBtaW5fc2V2X2FzaWQgLSAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTRVYgSGFyZHdhcmUgU2V0dXAgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBTRVYgaGFyZHdhcmUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZSBjb2RlIHN0YXJ0cyB3aXRoIGBzZXZfaGFyZHdhcmVfc2V0dXBgLCB3aGljaCBpbW1lZGlhdGVseSBjaGVja3MgaWYgdGhlIGJvb3QgQ1BVIHN1cHBvcnRzIFNFViB1c2luZyBgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVilgLiBJZiBTRVYgaXNuJiMzOTt0IHByZXNlbnQsIGl0IGp1bXBzIHN0cmFpZ2h0IHRvIGBvdXRgLiAgVGhhdCYjMzk7cyBpbXBvcnRhbnQuCgpOb3csIGlmIHdlIGhpdCB0aGF0IGBvdXRgIHBhdGgsICBgbWluX3NucF9hc2lkYCBpcyBsZWZ0IGF0IHplcm8uIFdoaWNoIG1lYW5zIGxhdGVyIHdoZW4gYHNldl9hc2lkX25ld2AgaXMgY2FsbGVkLCBpdCB3aWxsIGJlIGhhbmRlZCBhIGBtaW5fYXNpZGAgYW5kIGBtYXhfYXNpZGAgb2YgemVyby4KCkhhbmcgb24uLi4gdGhlbiB3ZSBoYXZlIGBtaW5fYXNpZCAmZ3Q7IG1heF9hc2lkYCwgd2hpY2ggaXMgYDAgJmd0OyAwYOKAlCB0aGF0IGV2YWx1YXRlcyB0byBmYWxzZS4gU28gYHNldl9hbGxvY19hc2lkYCBpcyB0aGVuIGNhbGxlZCB3aXRoIDAsIDAuIEkgbmVlZCB0byBkaWcgaW50byBgc2V2X2FsbG9jX2FzaWRgIG5vdyBhbmQgc2VlIHdoYXQgaXQgZG9lcyB3aXRoIHRoaXMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcbiAyNDE6XHR7XG4gMjQyOlx0XHR1bnNpZ25lZCBpbnQgYXNpZDtcbiAyNDM6XHRcdGJvb2wgcmV0cnkgPSB0cnVlO1xuIDI0NDpcdFxuIDI0NTpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnNldl9iaXRtYXBfbG9jayk7XG4gMjQ2Olx0XG4gMjQ3Olx0YWdhaW46XG4gMjQ4Olx0XHRhc2lkID0gZmluZF9uZXh0X3plcm9fYml0KHNldl9hc2lkX2JpdG1hcCwgbWF4X2FzaWQgJiM0MzsgMSwgbWluX2FzaWQpO1xuIDI0OTpcdFx0aWYgKGFzaWQgXHUwMDNlIG1heF9hc2lkKSB7XG4gMjUwOlx0XHRcdGlmIChyZXRyeSBcdTAwMjZcdTAwMjYgX19zZXZfcmVjeWNsZV9hc2lkcyhtaW5fYXNpZCwgbWF4X2FzaWQpKSB7XG4gMjUxOlx0XHRcdFx0cmV0cnkgPSBmYWxzZTtcbiAyNTI6XHRcdFx0XHRnb3RvIGFnYWluO1xuIDI1MzpcdFx0XHR9XG4gMjU0Olx0XG4gMjU1Olx0XHRcdHJldHVybiBhc2lkO1xuIDI1NjpcdFx0fVxuIDI1NzpcdFxuIDI1ODpcdFx0X19zZXRfYml0KGFzaWQsIHNldl9hc2lkX2JpdG1hcCk7XG4gMjU5Olx0XHRyZXR1cm4gYXNpZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0VWIEluaXRpYWxpemF0aW9uIGFuZCBFcnJvciBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIGNyYXNoIHNjZW5hcmlvIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBJZiBgc2V2X2FzaWRfYml0bWFwYCBpcyBOVUxMLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgYHNldl9oYXJkd2FyZV9zZXR1cGAgZmFpbHMsIHRoZW4gY2FsbGluZyBgZmluZF9uZXh0X3plcm9fYml0YCBvbiB0aGF0IG51bGwgcG9pbnRlciBpcyBnb2luZyB0byBiZSBhIHByb2JsZW0uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYW5kIHdlJiMzOTtsbCBlaXRoZXIgY3Jhc2ggb3IgZ2V0IHNvbWUgZ2FyYmFnZSB2YWx1ZSBiYWNrLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBpZiBgc2V2X2hhcmR3YXJlX3NldHVwYCBmYWlscywgZG9lc24mIzM5O3QgdGhhdCBtZWFuIGBzZXZfc3VwcG9ydGVkYCBnZXRzIHNldCB0byBmYWxzZT8gT2theSwgZ29vZC4gVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgY2hlY2suCgpOb3csIGEgcXVlc3Rpb24gaXMgcG9wcGluZyBpbnRvIG15IGhlYWQ6IElzIGBLVk1fU0VWX0lOSVQyYCBldmVuIGFsbG93ZWQgdG8gYmUgY2FsbGVkIGlmIGBzZXZfc3VwcG9ydGVkYCBpcyBmYWxzZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYyBhcm91bmQgYHNldl9ndWVzdF9pbml0MmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZHJpdmVyIGNvcnJlY3RseSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgU0VWIGlzbiYjMzk7dCBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9ndWVzdF9pbml0MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU3OD1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYwMi17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ1PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY4MS1cdGNhc2UgS1ZNX1NFVl9JTklUMjpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY4MjpcdFx0ciA9IHNldl9ndWVzdF9pbml0Mihrdm0sIFx1MDAyNnNldl9jbWQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjgzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NDAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2V2X2d1ZXN0X2luaXQyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBzZXZfZ3Vlc3RfaW5pdDJgLiBJJiMzOTttIHN0YXJ0aW5nIGhlcmUgYmVjYXVzZSBpdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGd1ZXN0IGluaXRpYWxpemF0aW9uIGZsb3csIGFuZCBJIG5lZWQgYSBzdHJvbmcgZ3Jhc3Agb2YgaXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGJlY2F1c2UgYSBmdW5kYW1lbnRhbCBpc3N1ZSBvZnRlbiBtYW5pZmVzdHMgaXRzZWxmIGVhcmx5LCBtYWtpbmcgdGhpcyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGRlYnVnZ2luZyBvciBhbmFseXNpcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBrZXkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNFVi1zcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBoZXJlLCBsaWtlbHkgZGVhbGluZyB3aXRoIG1lbW9yeSBlbmNyeXB0aW9uIHNldHVwLCBrZXkgZGVyaXZhdGlvbiAoaWYgaXQgZXhpc3RzIGF0IHRoaXMgcG9pbnQpLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUgaW5pdGlhbCBhdHRlc3RhdGlvbi1yZWxhdGVkIHN0cnVjdHVyZXMuIEkga25vdyB0aGUgQU1EIGRvY3VtZW50YXRpb24sIGFuZCBwYXN0IGV4cGVyaWVuY2VzIHdpdGggdGhlIGtlcm5lbCBjb2RlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgZGV2aWF0aW9uIGZyb20gdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBmdW5jdGlvbiYjMzk7cyBjcml0aWNhbCBwYXRocywgYW5kIEkmIzM5O20gcHJlcGFyZWQgdG8gZGl2ZSBpbnRvIGFueSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGBzZXZfZ3Vlc3RfaW5pdDJgIGNhbGxzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgaHlwZXJ2aXNvciBjb21tdW5pY2F0aW9uIG9yIHRoZSBoYXJkd2FyZSByZWdpc3RlciBzZXR1cC4gQW55IHVuZXhwZWN0ZWQgbWVtb3J5IGFjY2Vzc2VzIG9yIHJlZ2lzdGVyIHZhbHVlcyBoZXJlIHdpbGwgYmUgaW1tZWRpYXRlbHkgZmxhZ2dlZC4gSSBuZWVkIHRvIGdldCB0aGlzIGluaXRpYWxpemF0aW9uIHJpZ2h0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMTpcdHN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIDYwMjpcdHtcbiA2MDM6XHRcdHN0cnVjdCBrdm1fc2V2X2luaXQgZGF0YTtcbiA2MDQ6XHRcbiA2MDU6XHRcdGlmICghdG9fa3ZtX3Nldl9pbmZvKGt2bSktXHUwMDNlbmVlZF9pbml0KVxuIDYwNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2MDc6XHRcbiA2MDg6XHRcdGlmIChrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNIFx1MDAyNlx1MDAyNlxuIDYwOTpcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXHUwMDI2XHUwMDI2XG4gNjEwOlx0XHQgICAga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NOUF9WTSlcbiA2MTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjEyOlx0XG4gNjEzOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2ZGF0YSwgdTY0X3RvX3VzZXJfcHRyKGFyZ3AtXHUwMDNlZGF0YSksIHNpemVvZihkYXRhKSkpXG4gNjE0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDYxNTpcdFxuIDYxNjpcdFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcdTAwMjZkYXRhLCBrdm0tXHUwMDNlYXJjaC52bV90eXBlKTtcbiA2MTc6XHR9XG4gNjE4Olx0XG4gNjE5Olx0c3RhdGljIGludCBzZXZfYmluZF9hc2lkKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGhhbmRsZSwgaW50ICplcnJvcilcbiA2MjA6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzIwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLVk0gVk0gVHlwZSBhbmQgSGFyZHdhcmUgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYGt2bS0mZ3Q7YXJjaC52bV90eXBlYCB2YXJpYWJsZSwgYW5kIGl0ICpoYXMqIHRvIGJlIHNldCB0byBgS1ZNX1g4Nl9TTlBfVk1gLCByaWdodD8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gYXNzdW1pbmcuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB3ZSBhY3R1YWxseSAqY3JlYXRlKiBhIHZpcnR1YWwgbWFjaGluZSB3aXRoIHRoYXQgc3BlY2lmaWMgdHlwZSwgYEtWTV9YODZfU05QX1ZNYCwgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKmRvZXNuJiMzOTt0KiBhY3R1YWxseSBzdXBwb3J0IGl0PyBUaGF0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgcG9pbnQgb2YgZmFpbHVyZSwgYW5kIG9uZSB0aGF0IHNob3VsZCBwcm9iYWJseSBiZSBndWFyZGVkIGFnYWluc3QuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgS1ZNIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBrdm1fYXJjaF9pbml0X3ZtYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoZXJlIHRoZSBWTSBpcyBpbml0aWFsaXplZCwgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhpcyBWTSB0eXBlIGFuZCB0aGUgaGFyZHdhcmUmIzM5O3MgY2FwYWJpbGl0aWVzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCBuZWVkcyB0byBiZSBjaGVja2VkLCBidXQgSSBoYXZlIHRvIG1ha2Ugc3VyZS4gSSYjMzk7bGwgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1g4Nl9TTlBfVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzEtI2RlZmluZSBLVk1fWDg2X1NFVl9FU19WTVx0M1xuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVx0XHQ0XG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXHRcdDVcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2Mj1zdGF0aWMgaW50IHNldl9hc2lkX25ldyhzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYsIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3MC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjcxOlx0aWYgKHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcyLVx0XHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4OD1zdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTQtXHRib29sIGVzX2FjdGl2ZSA9IHZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfVk07XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5NTpcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Ni1cdHU2NCB2YWxpZF92bXNhX2ZlYXR1cmVzID0gZXNfYWN0aXZlID8gc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIDogMDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTYwMT1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYwOS1cdCAgICBrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU0VWX0VTX1ZNIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTA6XHQgICAga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NOUF9WTSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjExLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5NDY9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTUxLVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk1MjpcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTMtXHRcdGt2bS1cdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDI1PXZvaWQgX19pbml0IHNldl9zZXRfY3B1X2NhcHModm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMzYtXHRcdGt2bV9jcHVfY2FwX3NldChYODZfRkVBVFVSRV9TRVZfU05QKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzAzNzpcdFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMzgtXHR9XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzEtI2RlZmluZSBLVk1fWDg2X1NFVl9FU19WTVx0M1xudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVx0XHQ0XG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXHRcdDVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2Lmg9MzQ9c3RhdGljIGlubGluZSBib29sIGlzX3Nldl9zbnBfdm0oc3RydWN0IGt2bV92bSAqdm0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzUte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oOjM2Olx0cmV0dXJuIHZtLVx1MDAzZXR5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzctfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz00NzA9c3RhdGljIGJvb2wgaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc3RydWN0IHZtX3NoYXBlIHNoYXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NzItI2lmZGVmIF9feDg2XzY0X19cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo0NzM6XHRyZXR1cm4gc2hhcGUudHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NzQtI2Vsc2Vcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz03ND12b2lkIHNucF92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jLTc3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM6Nzg6XHRURVNUX0FTU0VSVF9FUSh2bS1cdTAwM2V0eXBlLCBLVk1fWDg2X1NOUF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03OS1cdHZtX3Nldl9pb2N0bCh2bSwgS1ZNX1NFVl9JTklUMiwgXHUwMDI2aW5pdCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYz03Nj12b2lkIHRlc3Rfdm1fdHlwZXModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTg3LVx0aWYgKGhhdmVfc25wKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYzo4ODpcdFx0dGVzdF9pbml0MihLVk1fWDg2X1NOUF9WTSwgXHUwMDI2KHN0cnVjdCBrdm1fc2V2X2luaXQpe30pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jPTEyMj1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTQ1LVx0aGF2ZV9zbnAgPSBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTQ2Olx0VEVTVF9BU1NFUlQoaGF2ZV9zbnAgPT0gISEoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0Ny1cdFx0ICAgIFwmIzM0O3Nldi1zbnA6IEtWTV9DQVBfVk1fVFlQRVMgKCV4KSBpbmRpY2F0ZXMgU05QIHN1cHBvcnQgKGJpdCAlZCksIGJ1dCBDUFVJRCBkb2VzIG5vdFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTQ4Olx0XHQgICAga3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSwgS1ZNX1g4Nl9TTlBfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNDktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNTUtXHRpZiAoaGF2ZV9zbnApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NjpcdFx0dGVzdF9mbGFncyhLVk1fWDg2X1NOUF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE2MS1cdGlmIChoYXZlX3NucClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTYyOlx0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE2My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3Ntb2tlKHZvaWQgKmd1ZXN0LCB1MzIgdHlwZSwgdTY0IHBvbGljeSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIyNTpcdGlmICh0eXBlID09IEtWTV9YODZfU05QX1ZNKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTIyNi1cdFx0dGVzdF9zZXYoZ3Vlc3QsIHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjM4LVx0XHR0ZXN0X3N5bmNfdm1zYSh0eXBlLCBwb2xpY3kpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIzOTpcdFx0aWYgKHR5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjQwLVx0XHRcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjQ2PWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTI1NS1cdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYzoyNTY6XHRcdHRlc3Rfc2V2X3Ntb2tlKGd1ZXN0X3NucF9jb2RlLCBLVk1fWDg2X1NOUF9WTSwgc25wX2RlZmF1bHRfcG9saWN5KCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTI1Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNTUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIGFuZCBTRVYtU05QIFZNIENyZWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYEtWTV9YODZfU05QX1ZNYCB2aXJ0dWFsIG1hY2hpbmUgdHlwZSBpcyAqb25seSogZ29pbmcgdG8gYmUgYXZhaWxhYmxlIGlmIHRoZSBzeXN0ZW0gaW5kaWNhdGVzIHN1cHBvcnQgdmlhIGBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKWAuIEFuZCB0aGF0IHN1cHBvcnQgZmxhZyBnZXRzIHNldCB3aXRoaW4gYHNldl9zZXRfY3B1X2NhcHNgLCBidXQgKm9ubHkqIGlmIHRoZSB1bmRlcmx5aW5nIENQVSByZXBvcnRzIHRoZSBgWDg2X0ZFQVRVUkVfU0VWX1NOUGAgZmVhdHVyZSB1c2luZyBgYm9vdF9jcHVfaGFzKClgLiBJbiBvdGhlciB3b3Jkcywgbm8gU0VWLVNOUCBzdXBwb3J0IGZyb20gdGhlIGhhcmR3YXJlLCBubyBgS1ZNX1g4Nl9TTlBfVk1gLiBUaGlzIG1ha2VzIHNlbnNlLCBhcyB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGZlYXR1cmVzLCB0aGUgc29mdHdhcmUgY2FuJiMzOTt0IHBvc3NpYmx5IHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkuCgpTbywgaWYgd2UgKmRvbiYjMzk7dCogaGF2ZSB0aGF0IGhhcmR3YXJlLWxldmVsIFNFVi1TTlAgc3VwcG9ydCwgYXR0ZW1wdGluZyB0byBjcmVhdGUgYSBWTSB3aXRoIGBLVk1fQ1JFQVRFX1ZNYCBhbmQgc3BlY2lmeWluZyBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGdvaW5nIHRvIGZhaWwsIHJpZ2h0PyBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gVGhlIEtWTSBsYXllciBpcyBjb3JyZWN0bHkgZW5mb3JjaW5nIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudHMuCgpHaXZlbiB0aGF0LCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBjb25maXJtIHRoaXMgaXMgdG8gbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtYC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCBjYWxsIGhhbmRsZXMgdGhlIGBLVk1fWDg2X1NOUF9WTWAgdHlwZSBhbmQgaG93IGl0IHZhbGlkYXRlcyB0aGUgdW5kZXJseWluZyBjYXBhYmlsaXRpZXMuIE15IHN1c3BpY2lvbiBpcyB0aGF0IGl0IGRpcmVjdGx5IGxldmVyYWdlcyB0aGUgYGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlc2AgZmxhZy4gSXQgc2hvdWxkIGJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTU0Nzg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfaXNfa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3OS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ4MDpzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ4MS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01NTIzPXN0YXRpYyBsb25nIGt2bV9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NTM0LVx0Y2FzZSBLVk1fQ1JFQVRFX1ZNOlxudmlydC9rdm0va3ZtX21haW4uYzo1NTM1Olx0XHRyID0ga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0oYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTUzNi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTMwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgYGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtYC4gIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWNhbGwgd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIEtWTSBhcmNoaXRlY3R1cmUuIEl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBjcmVhdGluZyBhIHZpcnR1YWwgbWFjaGluZSwgcmlnaHQ/ICBUaGUgbmFtZSBgaW9jdGxgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBzeXN0ZW0gY2FsbCBoYW5kbGVyIHdpdGhpbiB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIEtWTSwgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGZvciB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGludGVyYWN0IHdpdGggdGhlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGV4cG9zZWQgYnkgdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB1c2VkIHRvIGNvbW11bmljYXRlIHZpYSB0aGUgYC9kZXYva3ZtYCBmaWxlLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIHB1cnBvc2UgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIHNldHVwIHJlcXVpcmVkIHRvIGVzdGFibGlzaCBhIG5ldyBWTSBpbnN0YW5jZS4gSXQgcHJvYmFibHkgcGVyZm9ybXMgY2hlY2tzIHRvIHZhbGlkYXRlIGFueSBhcmd1bWVudHMgcGFzc2VkIHZpYSB0aGUgYGlvY3RsYCBjYWxsIGZyb20gdXNlci1zcGFjZTsgc3VjaCBhcyBtZW1vcnkgYWxsb2NhdGlvbiwgc2V0dXAgb2YgdGhlIFZNIHN0cnVjdHVyZSBhbmQgaW5pdGlhbCBzZXR1cCBvZiB0aGUgVk0uCgpJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cy4gIFNwZWNpZmljYWxseSwgaXMgdGhlcmUgYSBjYWxsIHRvIGBrdm1fdm1fYWxsb2NgLCBvciBzaW1pbGFyLiBJJiMzOTtkIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQgaW50ZXJhY3RzIHdpdGggdGhpbmdzIGxpa2UgdkNQVSBjcmVhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIGV2ZW4gaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgKGxpa2UgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcyBpZiBlbmFibGVkKS4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgY3JlYXRlZCBWTSwgZXNwZWNpYWxseSBob3cgdGhlIGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB0aGUgYXNzb2NpYXRlZCBNTVUgb3Igc2hhZG93IHBhZ2UgdGFibGVzLgoKVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGZvdW5kYXRpb25hbCBmdW5jdGlvbi4gQW55IGRlZXAgZGl2ZSBpbnRvIGEgS1ZNIGltcGxlbWVudGF0aW9uIHdpbGwsIGF0IHNvbWUgcG9pbnQsIGludm9sdmUgbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHRvIGNvbmZpcm0gdGhlc2UgaW5pdGlhbCBhc3N1bXB0aW9ucyBhbmQgdG8gYnVpbGQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0ODA6XHRzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcbjU0ODE6XHR7XG41NDgyOlx0XHRjaGFyIGZkbmFtZVtJVE9BX01BWF9MRU4gJiM0MzsgMV07XG41NDgzOlx0XHRpbnQgciwgZmQ7XG41NDg0Olx0XHRzdHJ1Y3Qga3ZtICprdm07XG41NDg1Olx0XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbjU0ODY6XHRcbjU0ODc6XHRcdGZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpO1xuNTQ4ODpcdFx0aWYgKGZkIFx1MDAzYyAwKVxuNTQ4OTpcdFx0XHRyZXR1cm4gZmQ7XG41NDkwOlx0XG41NDkxOlx0XHRzbnByaW50ZihmZG5hbWUsIHNpemVvZihmZG5hbWUpLCBcJiMzNDslZFwmIzM0OywgZmQpO1xuNTQ5MjpcdFxuNTQ5MzpcdFx0a3ZtID0ga3ZtX2NyZWF0ZV92bSh0eXBlLCBmZG5hbWUpO1xuNTQ5NDpcdFx0aWYgKElTX0VSUihrdm0pKSB7XG41NDk1Olx0XHRcdHIgPSBQVFJfRVJSKGt2bSk7XG41NDk2Olx0XHRcdGdvdG8gcHV0X2ZkO1xuNTQ5NzpcdFx0fVxuNTQ5ODpcdFxuNTQ5OTpcdFx0ZmlsZSA9IGFub25faW5vZGVfZ2V0ZmlsZShcJiMzNDtrdm0tdm1cJiMzNDssIFx1MDAyNmt2bV92bV9mb3BzLCBrdm0sIE9fUkRXUik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODc5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGBrdm1fY3JlYXRlX3ZtYCoqCgpBbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFuYWx5emUgYGt2bV9jcmVhdGVfdm1gLiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBLVk0gdmlydHVhbGl6YXRpb24gcHJvY2VzcywgYW5kIHRodXMsIHByZXR0eSBjcnVjaWFsLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgdGhlIGNvcmUgcmVzcG9uc2liaWxpdGllcyBvZiB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgYSBuZXcgdmlydHVhbCBtYWNoaW5lIGlzLCBlZmZlY3RpdmVseSwgJiMzNDtib3JuJiMzNDsgd2l0aGluIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZXMgYWZmZWN0ZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSB0aGUgYWxsb2NhdGlvbiBvZiBWTS1zcGVjaWZpYyBtZW1vcnksIHNldHVwIG9mIHRoZSBjb250cm9sIHN0cnVjdHVyZXMsIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZ3Vlc3QmIzM5O3MgZXhlY3V0aW9uIGNvbnRleHQuIEkgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHdoaWNoIHJlc291cmNlIG1hbmFnZW1lbnQgbWVjaGFuaXNtcyBhcmUgaW52b2x2ZWQuCgpJJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoaW5ncyBsaWtlIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0JiMzOTtzIE1NVSwgdGhlIHNldHRpbmcgdXAgb2YgdGhlIFZNJiMzOTtzIGFkZHJlc3Mgc3BhY2UsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGFyb3VuZCBpbml0aWFsIGd1ZXN0IHN0YXRlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgdkNQVShzKSBhcmUgY3JlYXRlZCBhbmQgYXNzaWduZWQgdG8gdGhpcyBWTS4gQXJlIHRoZXJlIGFueSBpbml0aWFsIGNoZWNrcyBkb25lIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgYWRlcXVhdGUgcmVzb3VyY2VzPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmVzPyBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgYWx3YXlzIGFuIGltcG9ydGFudCBhc3BlY3Qgb2YgYW55IGNyaXRpY2FsIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgaW4gYSBzeXN0ZW0gYXMgc2Vuc2l0aXZlIGFzIGEgaHlwZXJ2aXNvci4gRnVydGhlcm1vcmUsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIEtWTSBjb21wb25lbnRzLCBhbmQgaWYgc28sIGhvdz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NyZWF0ZV92bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTk3OT1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTk5Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6OTk3OnN0YXRpYyBpbnQga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqZmRuYW1lKVxudmlydC9rdm0va3ZtX21haW4uYy05OTgte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5Nj1zdGF0aWMgdm9pZCBrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbih2b2lkKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTA5Ny1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTA5ODpzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTA5OS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMTMxLVx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxudmlydC9rdm0va3ZtX21haW4uYzoxMTMyOlx0ICogaXMgbm90IGNyZWF0ZWQgKGJ5IGt2bV9jcmVhdGVfdm1fZGVidWdmcygpKS5cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEzMy1cdCAqL1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE5NS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTE5NjpcdHIgPSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoa3ZtLCBmZG5hbWUpO1xudmlydC9rdm0va3ZtX21haW4uYy0xMTk3LVx0aWYgKHIpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01NDgwPXN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ5Mi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ5MzpcdGt2bSA9IGt2bV9jcmVhdGVfdm0odHlwZSwgZmRuYW1lKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ5NC1cdGlmIChJU19FUlIoa3ZtKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBrdm1fY3JlYXRlX3ZtYCoqCgpBbHJpZ2h0LCB0aGUgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBga3ZtX2NyZWF0ZV92bWAgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3Mgd2hlcmUgaXQgYWxsIGJlZ2lucywgcmlnaHQ/IEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSB3b3Jrcy4gV2UgbmVlZCB0byBkaXNzZWN0IHRoZSBjb3JlIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUgY3JlYXRpb24gcHJvY2VzcyBmcm9tIGEgS1ZNIHBlcnNwZWN0aXZlLiBJJiMzOTttIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3M/IEFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgdGhlIHVzdWFsIGNoZWNrcyBhbmQgYmFsYW5jZXMgdG8gbWFrZSBpdCBzZWN1cmU/IExldCYjMzk7cyB0cmFjZSB0aHJvdWdoIHRoZSBsb2dpYyBhbmQgaWRlbnRpZnkgdGhlIHNhbGllbnQgcG9pbnRzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3Qgd2UmIzM5O2xsIHNlZSBjYWxscyB0byBhbGxvY2F0ZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzLCBpbml0aWFsaXplIHJlbGV2YW50IEtWTSBzdHJ1Y3R1cmVzLCBzZXQgdXAgbWVtb3J5IHJlZ2lvbnMsIGFuZCBwZXJmb3JtIGFueSBuZWNlc3NhcnkgY2hlY2tzIHRvIGVuc3VyZSBzeXN0ZW0gcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgYW5kIHRoYXQgdGhlIHJlcXVlc3RlZCBWTSBjb25maWd1cmF0aW9uIGlzIHZhbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTg6XHRzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbjEwOTk6XHR7XG4xMTAwOlx0XHRzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fYXJjaF9hbGxvY192bSgpO1xuMTEwMTpcdFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7XG4xMTAyOlx0XHRpbnQgciwgaSwgajtcbjExMDM6XHRcbjExMDQ6XHRcdGlmICgha3ZtKVxuMTEwNTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjExMDY6XHRcbjExMDc6XHRcdEtWTV9NTVVfTE9DS19JTklUKGt2bSk7XG4xMTA4Olx0XHRtbWdyYWIoY3VycmVudC1cdTAwM2VtbSk7XG4xMTA5Olx0XHRrdm0tXHUwMDNlbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuMTExMDpcdFx0a3ZtX2V2ZW50ZmRfaW5pdChrdm0pO1xuMTExMTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4xMTEyOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2VpcnFfbG9jayk7XG4xMTEzOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjExMTQ6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4xMTE1Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcbjExMTY6XHRcdHJjdXdhaXRfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xuMTExNzpcdFx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzYxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipUcmFjaW5nIHRoZSBUeXBlIENoZWNrKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gcmV2aWV3aW5nIHRoaXMgY29kZS4uLiBhbmQgSSYjMzk7bSBraW5kIG9mIHpvbmluZyBvdXQuIEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24sIGNsYXNzLCBvciBtb2R1bGUgYWN0dWFsbHkgKnZlcmlmaWVzKiB0aGUgYHR5cGVgIG9mIHRoZSBpbnB1dCBvciB2YXJpYWJsZS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGllY2UgZm9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gSSBrbm93IEkgc2F3IGl0IHNvbWV3aGVyZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBqdXN0IGFjY2VwdGVkIHRoZSBhc3N1bXB0aW9uLCBvciBtaXNzZWQgc29tZSBraW5kIG9mIGltcGxpY2l0IGNhc3QuIExldCBtZSBkb3VibGUtY2hlY2suIFdoZXJlIGlzIHRoYXQgY3J1Y2lhbCBgdHlwZWAgdmFsaWRhdGlvbiBoYXBwZW5pbmc/IEkgbmVlZCB0byBwaW5wb2ludCB0aGF0IHBhcnQgb2YgdGhlIGxvZ2ljIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExODpcdCNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbjExMTk6XHRcdHhhX2luaXQoXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5KTtcbjExMjA6XHQjZW5kaWZcbjExMjE6XHRcbjExMjI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VncGNfbGlzdCk7XG4xMTIzOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xvY2spO1xuMTEyNDpcdFxuMTEyNTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2a3ZtLVx1MDAzZWRldmljZXMpO1xuMTEyNjpcdFx0a3ZtLVx1MDAzZW1heF92Y3B1cyA9IEtWTV9NQVhfVkNQVVM7XG4xMTI3Olx0XG4xMTI4Olx0XHRCVUlMRF9CVUdfT04oS1ZNX01FTV9TTE9UU19OVU0gXHUwMDNlIFNIUlRfTUFYKTtcbjExMjk6XHRcbjExMzA6XHRcdC8qXG4xMTMxOlx0XHQgKiBGb3JjZSBzdWJzZXF1ZW50IGRlYnVnZnMgZmlsZSBjcmVhdGlvbnMgdG8gZmFpbCBpZiB0aGUgVk0gZGlyZWN0b3J5XG4xMTMyOlx0XHQgKiBpcyBub3QgY3JlYXRlZCAoYnkga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKCkpLlxuMTEzMzpcdFx0ICovXG4xMTM0Olx0XHRrdm0tXHUwMDNlZGVidWdmc19kZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpO1xuMTEzNTpcdFxuMTEzNjpcdFx0c25wcmludGYoa3ZtLVx1MDAzZXN0YXRzX2lkLCBzaXplb2Yoa3ZtLVx1MDAzZXN0YXRzX2lkKSwgXCYjMzQ7a3ZtLSVkXCYjMzQ7LFxuMTEzNzpcdFx0XHQgdGFza19waWRfbnIoY3VycmVudCkpO1xuMTEzODpcdFxuMTEzOTpcdFx0ciA9IC1FTk9NRU07XG4xMTQwOlx0XHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcdTAwMjZrdm0tXHUwMDNlc3JjdSkpXG4xMTQxOlx0XHRcdGdvdG8gb3V0X2Vycl9ub19zcmN1O1xuMTE0MjpcdFx0aWYgKGluaXRfc3JjdV9zdHJ1Y3QoXHUwMDI2a3ZtLVx1MDAzZWlycV9zcmN1KSlcbjExNDM6XHRcdFx0Z290byBvdXRfZXJyX25vX2lycV9zcmN1O1xuMTE0NDpcdFxuMTE0NTpcdFx0ciA9IGt2bV9pbml0X2lycV9yb3V0aW5nKGt2bSk7XG4xMTQ2Olx0XHRpZiAocilcbjExNDc6XHRcdFx0Z290byBvdXRfZXJyX25vX2lycV9yb3V0aW5nO1xuMTE0ODpcdFxuMTE0OTpcdFx0cmVmY291bnRfc2V0KFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCwgMSk7XG4xMTUwOlx0XG4xMTUxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fYXJjaF9ucl9tZW1zbG90X2FzX2lkcyhrdm0pOyBpJiM0MzsmIzQzOykge1xuMTE1MjpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyAyOyBqJiM0MzsmIzQzOykge1xuMTE1MzpcdFx0XHRcdHNsb3RzID0gXHUwMDI2a3ZtLVx1MDAzZV9fbWVtc2xvdHNbaV1bal07XG4xMTU0Olx0XG4xMTU1Olx0XHRcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnNsb3RzLVx1MDAzZWxhc3RfdXNlZF9zbG90LCAodW5zaWduZWQgbG9uZylOVUxMKTtcbjExNTY6XHRcdFx0XHRzbG90cy1cdTAwM2VodmFfdHJlZSA9IFJCX1JPT1RfQ0FDSEVEO1xuMTE1NzpcdFx0XHRcdHNsb3RzLVx1MDAzZWdmbl90cmVlID0gUkJfUk9PVDtcbjExNTg6XHRcdFx0XHRoYXNoX2luaXQoc2xvdHMtXHUwMDNlaWRfaGFzaCk7XG4xMTU5Olx0XHRcdFx0c2xvdHMtXHUwMDNlbm9kZV9pZHggPSBqO1xuMTE2MDpcdFxuMTE2MTpcdFx0XHRcdC8qIEdlbmVyYXRpb25zIG11c3QgYmUgZGlmZmVyZW50IGZvciBlYWNoIGFkZHJlc3Mgc3BhY2UuICovXG4xMTYyOlx0XHRcdFx0c2xvdHMtXHUwMDNlZ2VuZXJhdGlvbiA9IGk7XG4xMTYzOlx0XHRcdH1cbjExNjQ6XHRcbjExNjU6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGt2bS1cdTAwM2VtZW1zbG90c1tpXSwgXHUwMDI2a3ZtLVx1MDAzZV9fbWVtc2xvdHNbaV1bMF0pO1xuMTE2NjpcdFx0fVxuMTE2NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQwOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgYXVkaWVuY2UgaXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byBga3ZtX2FyY2hfaW5pdF92bWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBrdm1fYXJjaF9pbml0X3ZtYCBmdW5jdGlvbi4gSXTigJlzIHRoYXQgY3JpdGljYWwgc3RhZ2Ugd2hlcmUgd2UmIzM5O3JlIHNldHRpbmcgdXAgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3BlY3RzIG9mIGEgS1ZNIHZpcnR1YWwgbWFjaGluZSwgcmlnaHQgYWZ0ZXIgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgcGF0aCBoZXJlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBoYXJkd2FyZSBlbXVsYXRpb24sIGFuZCB3aGF0IHRoZSBpbml0aWFsIHN0YXRlIG5lZWRzIHRvIGxvb2sgbGlrZSBmb3IgYSByZWxpYWJsZSBndWVzdCBleGVjdXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29udHJvbCByZWdpc3RlcnMsIHRoZSBtZW1vcnkgbWFwLCBhbmQgYW55IGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFdoYXQgYXJlIHRoZSBrZXkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRldGFpbHMgdGhhdCB0aGlzIGZ1bmN0aW9uIG11c3QgaGFuZGxlIHRvIG1ha2UgdGhlIFZNIGNvbXBhdGlibGUgd2l0aCB0aGUgaGFyZHdhcmU/IEFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgS1ZNIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE2ODpcdFx0ciA9IC1FTk9NRU07XG4xMTY5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLVk1fTlJfQlVTRVM7IGkmIzQzOyYjNDM7KSB7XG4xMTcwOlx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihrdm0tXHUwMDNlYnVzZXNbaV0sXG4xMTcxOlx0XHRcdFx0a3phbGxvY19vYmooc3RydWN0IGt2bV9pb19idXMsIEdGUF9LRVJORUxfQUNDT1VOVCkpO1xuMTE3MjpcdFx0XHRpZiAoIWt2bS1cdTAwM2VidXNlc1tpXSlcbjExNzM6XHRcdFx0XHRnb3RvIG91dF9lcnJfbm9fYXJjaF9kZXN0cm95X3ZtO1xuMTE3NDpcdFx0fVxuMTE3NTpcdFxuMTE3NjpcdFx0ciA9IGt2bV9hcmNoX2luaXRfdm0oa3ZtLCB0eXBlKTtcbjExNzc6XHRcdGlmIChyKVxuMTE3ODpcdFx0XHRnb3RvIG91dF9lcnJfbm9fYXJjaF9kZXN0cm95X3ZtO1xuMTE3OTpcdFxuMTE4MDpcdFx0ciA9IGt2bV9lbmFibGVfdmlydHVhbGl6YXRpb24oKTtcbjExODE6XHRcdGlmIChyKVxuMTE4MjpcdFx0XHRnb3RvIG91dF9lcnJfbm9fZGlzYWJsZTtcbjExODM6XHRcbjExODQ6XHQjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVBcbjExODU6XHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlaXJxX2Fja19ub3RpZmllcl9saXN0KTtcbjExODY6XHQjZW5kaWZcbjExODc6XHRcbjExODg6XHRcdHIgPSBrdm1faW5pdF9tbXVfbm90aWZpZXIoa3ZtKTtcbjExODk6XHRcdGlmIChyKVxuMTE5MDpcdFx0XHRnb3RvIG91dF9lcnJfbm9fbW11X25vdGlmaWVyO1xuMTE5MTpcdFxuMTE5MjpcdFx0ciA9IGt2bV9jb2FsZXNjZWRfbW1pb19pbml0KGt2bSk7XG4xMTkzOlx0XHRpZiAociBcdTAwM2MgMClcbjExOTQ6XHRcdFx0Z290byBvdXRfbm9fY29hbGVzY2VkX21taW87XG4xMTk1Olx0XG4xMTk2Olx0XHRyID0ga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKGt2bSwgZmRuYW1lKTtcbjExOTc6XHRcdGlmIChyKVxuMTE5ODpcdFx0XHRnb3RvIG91dF9lcnJfbm9fZGVidWdmcztcbjExOTk6XHRcbjEyMDA6XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtX2xvY2spO1xuMTIwMTpcdFx0bGlzdF9hZGQoXHUwMDI2a3ZtLVx1MDAzZXZtX2xpc3QsIFx1MDAyNnZtX2xpc3QpO1xuMTIwMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bV9sb2NrKTtcbjEyMDM6XHRcbjEyMDQ6XHRcdHByZWVtcHRfbm90aWZpZXJfaW5jKCk7XG4xMjA1Olx0XHRrdm1faW5pdF9wbV9ub3RpZmllcihrdm0pO1xuMTIwNjpcdFxuMTIwNzpcdFx0cmV0dXJuIGt2bTtcbjEyMDg6XHRcbjEyMDk6XHRvdXRfZXJyX25vX2RlYnVnZnM6XG4xMjEwOlx0XHRrdm1fY29hbGVzY2VkX21taW9fZnJlZShrdm0pO1xuMTIxMTpcdG91dF9ub19jb2FsZXNjZWRfbW1pbzpcbjEyMTI6XHRcdGlmIChrdm0tXHUwMDNlbW11X25vdGlmaWVyLm9wcylcbjEyMTM6XHRcdFx0bW11X25vdGlmaWVyX3VucmVnaXN0ZXIoXHUwMDI2a3ZtLVx1MDAzZW1tdV9ub3RpZmllciwgY3VycmVudC1cdTAwM2VtbSk7XG4xMjE0Olx0b3V0X2Vycl9ub19tbXVfbm90aWZpZXI6XG4xMjE1Olx0XHRrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbigpO1xuMTIxNjpcdG91dF9lcnJfbm9fZGlzYWJsZTpcbjEyMTc6XHRcdGt2bV9hcmNoX2Rlc3Ryb3lfdm0oa3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSBJbml0aWFsaXphdGlvbiBvbiB4ODYqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBrdm1fYXJjaF9pbml0X3ZtYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB3aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gZW50YWlscyBhdCBhIGxvdyBsZXZlbC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc2V0dGluZyB1cCB0aGUgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBjb21wb25lbnRzIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFdoYXQmIzM5O3MgdGhlIGluaXRpYWwgc3RhdGUgd2UgYXJlIHRyeWluZyB0byBhY2hpZXZlPyAKCkkgbmVlZCB0byB1bmRlcnN0YW5kOiBBcmUgd2UgdGFsa2luZyBhYm91dCBlc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgQ1BVSUQgaW5mb3JtYXRpb24sIG1heWJlIHNldHRpbmcgdXAgdGhlIE1TUnMsIGVuYWJsaW5nIHNwZWNpZmljIGZlYXR1cmVzLCBvciBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIHBhZ2UgdGFibGVzPyBIb3cgZG9lcyBpdCBkaWZmZXIgYmFzZWQgb24gc3BlY2lmaWMgeDg2IHByb2Nlc3NvciBtb2RlbHMgYW5kIGZlYXR1cmUgc2V0cz8gRG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIGd1ZXN0IG1lbW9yeSBtYXBwaW5nPyBXaGF0IGFib3V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVycywgQ1IwLCBDUjMsIENSND8gV2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgZ3Vlc3Qgc3RhcnRzIGluIGEga25vd24gYW5kIGNvbnNpc3RlbnQgc3RhdGUuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMsIFZNWC9TVk0sIGFuZCBob3cgdGhlc2UgYXJlIHNldC4KCk15IHByaW1hcnkgY29uY2VybiBpcyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gZm9ybXMgdGhlIGZvdW5kYXRpb24gZm9yIHNlY3VyZSB2aXJ0dWFsaXphdGlvbi4gV2hhdCBzYWZlZ3VhcmRzIGFyZSBidWlsdCBpbnRvIHRoaXMgaW5pdGlhbGl6YXRpb24/IEkgYW0gYWxzbyBpbnRlcmVzdGVkIGluIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgYXJjaGl0ZWN0dXJlLiBXaGVyZSBkb2VzIHRoaXMgZml0IHdpdGhpbiB0aGUgbGFyZ2VyIEtWTSBsaWZlY3ljbGU/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY3JpdGljYWwgZXJyb3IgaGFuZGxpbmcuIFdoYXQgZmFpbHVyZSBzY2VuYXJpb3MgYXJlIGFjY291bnRlZCBmb3I/IFdoYXQmIzM5O3MgdGhlIGVycm9yIHJlY292ZXJ5IHBhdGg/CgpVbHRpbWF0ZWx5LCBteSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgeDg2IGd1ZXN0IGVudmlyb25tZW50IGlzIGFyY2hpdGVjdHVyYWxseSBlc3RhYmxpc2hlZCBieSBLVk0uIFRoYXQgaXMgd2hlcmUgSSB3aWxsIHN0YXJ0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9pbml0X3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYz0xMTA1PXZvaWQga3ZtX3RpbWVyX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTExMjMtLypcbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYzoxMTI0OiAqIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCBkdXJpbmcga3ZtX2FyY2hfaW5pdF92bSwgYnV0IHdpbGwgYWxzbyBiZVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTExMjUtICogY2FsbGVkIGZyb20ga3ZtX3ZnaWNfY3JlYXRlIGlmIHdlIGhhdmUgYSB2R0lDdjUuXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MTk4PXN0YXRpYyBpbnQga3ZtX2FybV9kZWZhdWx0X21heF92Y3B1cyh2b2lkKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTIwMy0vKipcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjIwNDogKiBrdm1fYXJjaF9pbml0X3ZtIC0gaW5pdGlhbGl6ZXMgYSBWTSBkYXRhIHN0cnVjdHVyZVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA1LSAqIEBrdm06XHRwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0XG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA3LSAqL1xuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjA4OmludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA5LXtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vdm0uYz0yOD1zdGF0aWMgdm9pZCBrdm1fdm1faW5pdF9mZWF0dXJlcyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmMtNjEtXG5hcmNoL2xvb25nYXJjaC9rdm0vdm0uYzo2MjppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jLTYzLXtcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYz0xMzM9dm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuLS1cbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTEzNy1cbmFyY2gvbWlwcy9rdm0vbWlwcy5jOjEzODppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTEzOS17XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NDM4PUVYUE9SVF9TWU1CT0xfR1BMKGt2bXBwY19sZCk7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy00MzktXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo0NDA6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy00NDEte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmM9MjI9Y29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTMwLVxuYXJjaC9yaXNjdi9rdm0vdm0uYzozMTppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMzIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTg5PXZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxOTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE5NzppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTk4LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTMzMzI9dm9pZCBrdm1fYXJjaF9mcmVlX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMzNDAtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTMzNDE6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMzNDIte1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNzg0PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdW5yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcyh2b2lkKSB7fVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNzg2LVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE3ODc6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3ODgtdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xMDk4PXN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE3NS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTE3NjpcdHIgPSBrdm1fYXJjaF9pbml0X3ZtKGt2bSwgdHlwZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExNzctXHRpZiAocilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxNTIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSBJbml0aWFsaXphdGlvbjogYGt2bV9hcmNoX2luaXRfdm1gKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIEtWTSBhcmNoaXRlY3R1cmUgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBvbiB4ODYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGt2bV9hcmNoX2luaXRfdm1gIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIHBsYXRmb3JtLXNwZWNpZmljIHNldHVwIGZvciBhIG5ldyBWTSBpbnN0YW5jZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQsIHdoaWNoIG1lbW9yeSByZWdpb25zIGFyZSBiZWluZyBtYXBwZWQsIGFuZCB3aGF0IGluaXRpYWwgc3RhdGUgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBndWVzdC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgaGFuZGxpbmcgdGhlIGV4dGVuZGVkIHBhZ2UgdGFibGVzIChFUFQpIGFuZCBhbnkgb3RoZXIgeDg2LXNwZWNpZmljIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgZ2V0dGluZyBhIFZNIHVwIGFuZCBydW5uaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZSwgZXNwZWNpYWxseSBhcm91bmQgY29udGV4dCBzd2l0Y2hpbmcgb3IgaW5pdGlhbCBtZW1vcnkgc2V0dXAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzM0MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzM0MTpcdGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuMTMzNDI6XHR7XG4xMzM0MzpcdFx0aW50IHJldDtcbjEzMzQ0Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMTMzNDU6XHRcbjEzMzQ2Olx0XHRpZiAoIWt2bV9pc192bV90eXBlX3N1cHBvcnRlZCh0eXBlKSlcbjEzMzQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTMzNDg6XHRcbjEzMzQ5Olx0XHRrdm0tXHUwMDNlYXJjaC52bV90eXBlID0gdHlwZTtcbjEzMzUwOlx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPVxuMTMzNTE6XHRcdFx0KHR5cGUgPT0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xuMTMzNTI6XHRcdC8qIERlY2lkZWQgYnkgdGhlIHZlbmRvciBjb2RlIGZvciBvdGhlciBWTSB0eXBlcy4gICovXG4xMzM1MzpcdFx0a3ZtLVx1MDAzZWFyY2gucHJlX2ZhdWx0X2FsbG93ZWQgPVxuMTMzNTQ6XHRcdFx0dHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gfHwgdHlwZSA9PSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTTtcbjEzMzU1Olx0XHRrdm0tXHUwMDNlYXJjaC5kaXNhYmxlZF9xdWlya3MgPSBrdm1fY2Fwcy5pbmFwcGxpY2FibGVfcXVpcmtzIFx1MDAyNiBrdm1fY2Fwcy5zdXBwb3J0ZWRfcXVpcmtzO1xuMTMzNTY6XHRcbjEzMzU3Olx0XHRyZXQgPSBrdm1fcGFnZV90cmFja19pbml0KGt2bSk7XG4xMzM1ODpcdFx0aWYgKHJldClcbjEzMzU5Olx0XHRcdGdvdG8gb3V0O1xuMTMzNjA6XHRcbjEzMzYxOlx0XHRyZXQgPSBrdm1fbW11X2luaXRfdm0oa3ZtKTtcbjEzMzYyOlx0XHRpZiAocmV0KVxuMTMzNjM6XHRcdFx0Z290byBvdXRfY2xlYW51cF9wYWdlX3RyYWNrO1xuMTMzNjQ6XHRcbjEzMzY1Olx0XHRyZXQgPSBrdm1feDg2X2NhbGwodm1faW5pdCkoa3ZtKTtcbjEzMzY2Olx0XHRpZiAocmV0KVxuMTMzNjc6XHRcdFx0Z290byBvdXRfdW5pbml0X21tdTtcbjEzMzY4Olx0XG4xMzM2OTpcdFx0YXRvbWljX3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5ub25jb2hlcmVudF9kbWFfY291bnQsIDApO1xuMTMzNzA6XHRcbjEzMzcxOlx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2spO1xuMTMzNzI6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guYXBpY19tYXBfbG9jayk7XG4xMzM3MzpcdFx0c2VxY291bnRfcmF3X3NwaW5sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gucHZjbG9ja19zYywgXHUwMDI2a3ZtLVx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2spO1xuMTMzNzQ6XHRcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX3VwZGF0ZV9ycywgSFosIDEwKTtcbjEzMzc1Olx0XHRyYXRlbGltaXRfc2V0X2ZsYWdzKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX3VwZGF0ZV9ycywgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTtcbjEzMzc2Olx0XHRrdm0tXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQgPSAtZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKTtcbjEzMzc3Olx0XG4xMzM3ODpcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrLCBmbGFncyk7XG4xMzM3OTpcdFx0cHZjbG9ja191cGRhdGVfdm1fZ3RvZF9jb3B5KGt2bSk7XG4xMzM4MDpcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcbjEzMzgxOlx0XG4xMzM4MjpcdFx0a3ZtLVx1MDAzZWFyY2guZGVmYXVsdF90c2Nfa2h6ID0gbWF4X3RzY19raHogPyA6IHRzY19raHo7XG4xMzM4MzpcdFx0a3ZtLVx1MDAzZWFyY2guYXBpY19idXNfY3ljbGVfbnMgPSBBUElDX0JVU19DWUNMRV9OU19ERUZBVUxUO1xuMTMzODQ6XHRcdGt2bS1cdTAwM2VhcmNoLmd1ZXN0X2Nhbl9yZWFkX21zcl9wbGF0Zm9ybV9pbmZvID0gdHJ1ZTtcbjEzMzg1Olx0XHRrdm0tXHUwMDNlYXJjaC5lbmFibGVfcG11ID0gZW5hYmxlX3BtdTtcbjEzMzg2Olx0XG4xMzM4NzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19IWVBFUlYpXG4xMzM4ODpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guaHZfcm9vdF90ZHBfbG9jayk7XG4xMzM4OTpcdFx0a3ZtLVx1MDAzZWFyY2guaHZfcm9vdF90ZHAgPSBJTlZBTElEX1BBR0U7XG4xMzM5MDpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ3NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIGFuZCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKktWTSBWTSBUeXBlIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHZlcmlmeSBpZiB0aGlzIHNwZWNpZmljIFZNIHR5cGUg4oCTIHdoYXRldmVyIGl0IG1pZ2h0IGJlIOKAkyBpcyBldmVuIHN1cHBvcnRlZCBieSB0aGUgS1ZNIGluZnJhc3RydWN0dXJlIG9uIHRoaXMgc3lzdGVtLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGluaXRpYWwgY2hlY2ssIHJlYWxseS4gVGhlIGNvZGUgaXMgY2xlYXJseSBjYWxsaW5nIGBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSlgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwuIEkga25vdyBpdCYjMzk7cyBwcm9iYWJseSBkaWdnaW5nIGRlZXAsIGxvb2tpbmcgYXQgdGhlIHVuZGVybHlpbmcgQ1BVIGNhcGFiaWxpdGllcywgdGhlIGF2YWlsYWJsZSBmZWF0dXJlcywgYW5kIHRoZSBjb25maWd1cmVkIEtWTSBtb2R1bGVzIHRvIGRldGVybWluZSBpZiB0aGlzIFZNIHR5cGUgaGFzIGEgcHJheWVyIG9mIHdvcmtpbmcuIElmIHRoaXMgYmFzaWMgY2hlY2sgZmFpbHMsIHdlJiMzOTtyZSBkZWFkIGluIHRoZSB3YXRlciwgYW5kIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGdvaW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGEgZ2F0aW5nIGNvbmRpdGlvbjsgaXQgaGFzIHRvIGJlIHRydWUgb3Igd2UgYWJvcnQgZWFybHkgYW5kIGdyYWNlZnVsbHkuIFNvLCB0aGF0IGNhbGwsIHJpZ2h0IHRoZXJlLCBpcyB3aGVyZSB0aGluZ3MgZWl0aGVyIHN0YXJ0IHRvIHdvcmssIG9yIGltbWVkaWF0ZWx5IGNvbWUgY3Jhc2hpbmcgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2lzX3ZtX3R5cGVfc3VwcG9ydGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz00NzU4PXN0YXRpYyBpbnQga3ZtX2lvY3RsX2dldF9zdXBwb3J0ZWRfaHZfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy00Nzc5LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjQ3ODA6c3RhdGljIGJvb2wga3ZtX2lzX3ZtX3R5cGVfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgdHlwZSlcbmFyY2gveDg2L2t2bS94ODYuYy00NzgxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTMzNDE9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMzQ1LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEzMzQ2Olx0aWYgKCFrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMzNDctXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDAwNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBga3ZtX2lzX3ZtX3R5cGVfc3VwcG9ydGVkYCoqCgpPa2F5LCBzbyBJJiMzOTttIGFib3V0IHRvIGRpdmUgaW50byB0aGlzLi4uIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgYGt2bV9pc192bV90eXBlX3N1cHBvcnRlZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCwgZG9lc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHRoZSBmaXJzdCBmaWx0ZXIsIHRoZSBiYXNlbGluZSBjaGVjaywgdGhlIGdhdGVrZWVwZXIgZm9yIHRoZSB3aG9sZSBvcGVyYXRpb24uIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBjZXJ0YWluIHRoYXQgd2UmIzM5O3JlIGV2ZW4gKmluIHRoZSByZWFsbSogb2Ygc3VwcG9ydGVkIHZpcnR1YWxpemF0aW9uIHR5cGVzIGJlZm9yZSBwcm9jZWVkaW5nIGFueSBmdXJ0aGVyIGRvd24gdGhlIHJhYmJpdCBob2xlLiBJdOKAmXMgYSBzYW5pdHkgY2hlY2ssIHJlYWxseS4gU2F2ZXMgYSBsb3Qgb2YgZGVidWdnaW5nIHRpbWUgbGF0ZXIgaWYgc29tZXRoaW5nIGlzbiYjMzk7dCBzdXBwb3J0ZWQuIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlIFZNIHR5cGUgaW4gcXVlc3Rpb24sIHdoYXRldmVyIGl0IG1heSBiZSwgYWN0dWFsbHkgKmNhbiogcnVuIG9uIHRoZSBjdXJyZW50IEtWTSBzZXR1cC4gSSBjYW4mIzM5O3QgYWZmb3JkIHRvIHdhc3RlIGN5Y2xlcyBwdXJzdWluZyBhbiB1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uLiBTbywgeWVhaCwgYGt2bV9pc192bV90eXBlX3N1cHBvcnRlZGAgZmlyc3QuIFRoYXQmIzM5O3MgdGhlIHByaW9yaXR5LiBHb3QgdG8ga25vdyBpZiB3ZSYjMzk7cmUgZXZlbiAqYWxsb3dlZCogdG8gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ3ODA6XHRzdGF0aWMgYm9vbCBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodW5zaWduZWQgbG9uZyB0eXBlKVxuNDc4MTpcdHtcbjQ3ODI6XHRcdHJldHVybiB0eXBlIFx1MDAzYyAzMiBcdTAwMjZcdTAwMjYgKGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyBcdTAwMjYgQklUKHR5cGUpKTtcbjQ3ODM6XHR9XG40Nzg0Olx0XG40Nzg1Olx0c3RhdGljIGlubGluZSB1NjQga3ZtX3N5bmNfdmFsaWRfZmllbGRzKHN0cnVjdCBrdm0gKmt2bSlcbjQ3ODY6XHR7XG40Nzg3Olx0XHRyZXR1cm4ga3ZtIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3N0YXRlID8gMCA6IEtWTV9TWU5DX1g4Nl9WQUxJRF9GSUVMRFM7XG40Nzg4Olx0fVxuNDc4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ4MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFNFVi1TTlAgVk0gQ3JlYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgS1ZNIHNldHVwIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlc2AgZmllbGQgYWJzb2x1dGVseSAqbXVzdCogaGF2ZSBgQklUKEtWTV9YODZfU05QX1ZNKWAgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBJIHJlbWVtYmVyIHNlZWluZyBlYXJsaWVyIHRoYXQgYEJJVChLVk1fWDg2X1NOUF9WTSlgIG9ubHkgZ2V0cyBzZXQgd2l0aGluIHRoZSBgc2V2X3NldF9jcHVfY2Fwc2AgZnVuY3Rpb24gaWYgdGhlIENQVSByZXBvcnRzIGBYODZfRkVBVFVSRV9TRVZfU05QYC4gU28sIHJpZ2h0IGF3YXksIGl0JiMzOTtzIGNsZWFyOiBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IFNFVi1TTlAsIHRyeWluZyB0byBjcmVhdGUgYSBWTSB1c2luZyBgS1ZNX0NSRUFURV9WTWAgd2l0aCBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGdvaW5nIHRvIGJvbWIgb3V0IHdpdGggYW4gYC1FSU5WQUxgIGVycm9yLiBUaGF0JiMzOTtzIGEgZGVhbCBicmVha2VyLgoKSWYgYEtWTV9DUkVBVEVfVk1gIGZhaWxzLCB3ZWxsLCB0aGVuIHdlJiMzOTtyZSBzdHVjay4gV2UgY2FuJiMzOTt0IGV2ZW4gZ2V0IHRvIHRoZSBzdGFnZSBvZiBjcmVhdGluZyBhIFZNIG9mIHRoYXQgYEtWTV9YODZfU05QX1ZNYCB0eXBlLiBPYnZpb3VzbHksIGlmIHdlIGNhbiYjMzk7dCBjcmVhdGUgdGhhdCBWTSB0eXBlLCB0aGVuIHdlJiMzOTtsbCBuZXZlciBiZSBhYmxlIHRvIGNhbGwgYEtWTV9TRVZfU05QX0xBVU5DSF9VUERBVEVgLiBUaGlzIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB0aGF0IGluaXRpYWwgVk0gY3JlYXRpb24uCgpIbW0uLi4gd2FpdCBhIHNlY29uZC4gVGhhdCYjMzk7cyBhc3N1bWluZyB0aGlzIGlzIGFsbCB3ZSYjMzk7cmUgY29uc2lkZXJpbmcuIFdoYXQgYWJvdXQgVERYPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGUgcHJvY2VzcyB3aXRoIFREWC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1g4Nl9URFhfVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdD0yMzM9Y29udHJvbCBmbG93IGlzIGFzIGZvbGxvd3M6XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdC0yMzYtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0OjIzNzogICAqIEtWTV9DQVBfVk1fVFlQRVM6IENoZWNrIGlmIFZNIHR5cGUgaXMgc3VwcG9ydGVkIGFuZCBpZiBLVk1fWDg2X1REWF9WTVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdC0yMzgtICAgICBpcyBzdXBwb3J0ZWQuXG4tLVxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NOUF9WTVx0XHQ0XG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MzojZGVmaW5lIEtWTV9YODZfVERYX1ZNXHRcdDVcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc0LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUuaD0zMDQ9c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUuaC0zMDUte1xuYXJjaC94ODYva3ZtL21tdS5oOjMwNjpcdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xuYXJjaC94ODYva3ZtL21tdS5oLTMwNy19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01Nzc0PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01Nzc3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1Nzc4Olx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTc3OS1cdFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTY5PXN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc0LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTc1Olx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xNzYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYxLXtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NjI6XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNDE9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNjEtXHRcdFx0XHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNjI6XHRcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA2My1cdH1cbi0tXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcbi0tXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU05QX1ZNXHRcdDRcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTczOiNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdFx0NVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTYyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKktWTS9URFggSW5pdGlhbGl6YXRpb24gYW5kIFZNIFR5cGUgU3VwcG9ydCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBoeXBlcnZpc29yLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aGVyZSBkb2VzIHRoZSBzdXBwb3J0IGdldCByZWdpc3RlcmVkPyYjMzQ7IEFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaXMgYEtWTV9YODZfVERYX1ZNYC4gVGhpcyBjb25zdGFudCBpcyBiZWluZyBhZGRlZCB0byB0aGUgYHN1cHBvcnRlZF92bV90eXBlc2AgbGlzdCB3aXRoaW4gdGhlIGB2dF9pbml0YCBmdW5jdGlvbiwgYnV0ICpvbmx5KiBpZiBURFggaXMgYWN0dWFsbHkgZW5hYmxlZC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJJiMzOTtkIGV4cGVjdDsgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3JpdGljYWwgaGVyZSB0byBhdm9pZCBpbnRyb2R1Y2luZyBURFgtc3BlY2lmaWMgY29kZSB3aGVuIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IGl0LCBvciB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgdGhlcmVmb3JlLCBpcyB0byBkaXZlIGludG8gYHZ0X2luaXRgIGl0c2VsZiBhbmQgZnVsbHkgZ3JvayBob3cgVERYIHN1cHBvcnQgaXMgY29uZGl0aW9uZWQgdGhlcmUuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgY29tZXMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDE6XHRzdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXG4xMDQyOlx0e1xuMTA0MzpcdFx0dW5zaWduZWQgdmNwdV9zaXplLCB2Y3B1X2FsaWduO1xuMTA0NDpcdFx0aW50IHI7XG4xMDQ1Olx0XG4xMDQ2Olx0XHRyID0gdm14X2luaXQoKTtcbjEwNDc6XHRcdGlmIChyKVxuMTA0ODpcdFx0XHRyZXR1cm4gcjtcbjEwNDk6XHRcbjEwNTA6XHRcdC8qXG4xMDUxOlx0XHQgKiBURFggYW5kIFZNWCBoYXZlIGRpZmZlcmVudCB2Q1BVIHN0cnVjdHVyZXMuICBDYWxjdWxhdGUgdGhlXG4xMDUyOlx0XHQgKiBtYXhpbXVtIHNpemUvYWxpZ24gc28gdGhhdCBrdm1faW5pdCgpIGNhbiB1c2UgdGhlIGxhcmdlclxuMTA1MzpcdFx0ICogdmFsdWVzIHRvIGNyZWF0ZSB0aGUga21lbV92Y3B1X2NhY2hlLlxuMTA1NDpcdFx0ICovXG4xMDU1Olx0XHR2Y3B1X3NpemUgPSBzaXplb2Yoc3RydWN0IHZjcHVfdm14KTtcbjEwNTY6XHRcdHZjcHVfYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV92bXgpO1xuMTA1NzpcdFx0aWYgKGVuYWJsZV90ZHgpIHtcbjEwNTg6XHRcdFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcbjEwNTk6XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgdmNwdV90ZHgpKTtcbjEwNjA6XHRcdFx0dmNwdV9hbGlnbiA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X2FsaWduLFxuMTA2MTpcdFx0XHRcdFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XG4xMDYyOlx0XHRcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xuMTA2MzpcdFx0fVxuMTA2NDpcdFxuMTA2NTpcdFx0LypcbjEwNjY6XHRcdCAqIENvbW1vbiBLVk0gaW5pdGlhbGl6YXRpb24gX211c3RfIGNvbWUgbGFzdCwgYWZ0ZXIgdGhpcywgL2Rldi9rdm0gaXNcbjEwNjc6XHRcdCAqIGV4cG9zZWQgdG8gdXNlcnNwYWNlIVxuMTA2ODpcdFx0ICovXG4xMDY5Olx0XHRyID0ga3ZtX2luaXQodmNwdV9zaXplLCB2Y3B1X2FsaWduLCBUSElTX01PRFVMRSk7XG4xMDcwOlx0XHRpZiAocilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5MjgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBURFggVk0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJZiB0aGUgYGVuYWJsZV90ZHhgIGZsYWcgaXMgc2V0IHRvIHRydWUsIHRoZSBjb2RlIGlzIGNsZWFybHkgaW50ZW5kaW5nIHRvIGluY2x1ZGUgdGhlIGBCSVQoS1ZNX1g4Nl9URFhfVk0pYCBmbGFnLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIGRpcmVjdCBjb25kaXRpb25hbCBhc3NpZ25tZW50IGJhc2VkIG9uIGEgYm9vbGVhbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24sIGFzIGFsd2F5cyB3aXRoIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXMgKmhvdyogYW5kICp3aGVyZSogYGVuYWJsZV90ZHhgIGlzIGJlaW5nIHNldC4gSXMgdGhpcyBjb250cm9sbGVkIGJ5IGEgY29tbWFuZC1saW5lIHBhcmFtZXRlciwgYSBjb25maWcgZmlsZSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGlzIGl0IGRldGVybWluZWQgZHluYW1pY2FsbHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIHNvbWUgaGFyZHdhcmUgZGV0ZWN0aW9uPwoKSSBuZWVkIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIGFuZCBhc3NpZ25tZW50IG9mIGBlbmFibGVfdGR4YC4gQXJlIHdlIGNoZWNraW5nIGZvciBzcGVjaWZpYyBDUFUgZmVhdHVyZXMsIEJJT1Mgc3VwcG9ydCwgb3Igc29tZSBvdGhlciB1bmRlcmx5aW5nIGNvbmRpdGlvbj8gVW5kZXJzdGFuZGluZyB0aGF0IGRlcGVuZGVuY3kgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVuZGVkIHVzZSBjYXNlIGZvciBURFguIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCB2YWx1ZXM/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiBURFggb24gdGhlIHJlc3Qgb2YgdGhlIGVudmlyb25tZW50PyBJcyB0aGlzIGZvciBhIHdob2xlIFZNIG9yIHNvbWV0aGluZyBlbHNlPwoKSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGFjdCBvbiB0aGUgaHlwZXJ2aXNvciBhbmQgdGhlIFZNLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGRlcGVuZGVuY2llcywgbGltaXRhdGlvbnMgYW5kIHJlcXVpcmVtZW50cyBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlX3RkeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNj1zdGF0aWMgdm9pZCB2dF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE4LVx0LyogTm90ZSwgVERYICphbmQqIFZNWCBuZWVkIHRvIGJlIGRpc2FibGVkIGlmIFREWCBpcyBlbmFibGVkLiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk6XHRpZiAoZW5hYmxlX3RkeClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIwLVx0XHR0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yND1zdGF0aWMgX19pbml0IGludCB2dF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMxLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzI6XHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNT1zdGF0aWMgdm9pZCB2dF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNi17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNzpcdGlmIChlbmFibGVfdGR4KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzgtXHRcdHRkeF9oYXJkd2FyZV91bnNldHVwKCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTA0MT1zdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA1Ni1cdHZjcHVfYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV92bXgpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA1NzpcdGlmIChlbmFibGVfdGR4KSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDU4LVx0XHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTUtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU2OmJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU3Om1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01OC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMzNjA9aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMzNjctXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzNjg6XHRpZiAoIWVuYWJsZV90ZHgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMzNjktXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQyNS1zdWNjZXNzX2Rpc2FibGVfdGR4OlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDI2Olx0ZW5hYmxlX3RkeCA9IDA7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0MjctXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTEyPXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTEzLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxNDpleHRlcm4gYm9vbCBlbmFibGVfdGR4O1xuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xNS1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTE4Nj1URFhfQlVJTERfVERWUFNfQUNDRVNTT1JTKDY0LCBTVEFURV9OT05fQVJDSCwgc3RhdGVfbm9uX2FyY2gpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg4LSNlbHNlXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjE4OTojZGVmaW5lIGVuYWJsZV90ZHhcdDBcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTkwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODMzMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgVERYIEVuYWJsZW1lbnQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBlbmFibGVfdGR4YCBpcyBiZWluZyBwcmVzZW50ZWQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdHVybmluZyB0aGlzIHdob2xlIFREWCBmZWF0dXJlIG9uLCBpdCBzZWVtcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIHNvIGlmIHRoYXQgcGFyYW1ldGVyIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gc29tZXRoaW5nIHNwZWNpZmljIG5lZWRzIHRvIGhhcHBlbi4mIzM0OyBBbmQgdGhlIHRyaWdnZXIgZm9yIHRoYXQgJiMzNDtzb21ldGhpbmcgc3BlY2lmaWMmIzM0OyBpcyB0aGlzIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uLiBJdOKAmXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLiBUaGUgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBsb2dpYyBmbG93LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGFjdHVhbGx5ICpkb2VzKi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBsaWVzLCBhbmQgdGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNjA6XHRpbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuMzM2MTpcdHtcbjMzNjI6XHRcdGludCByLCBpO1xuMzM2MzpcdFxuMzM2NDpcdFx0LyogdGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KCkgdXNlcyBhc3NvY2lhdGVkX3RkdmNwdXMuICovXG4zMzY1Olx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSlcbjMzNjY6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGVyX2NwdShhc3NvY2lhdGVkX3RkdmNwdXMsIGkpKTtcbjMzNjc6XHRcbjMzNjg6XHRcdGlmICghZW5hYmxlX3RkeClcbjMzNjk6XHRcdFx0cmV0dXJuIDA7XG4zMzcwOlx0XG4zMzcxOlx0XHRpZiAoIWVuYWJsZV9lcHQpIHtcbjMzNzI6XHRcdFx0cHJfZXJyKFwmIzM0O0VQVCBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjMzNzM6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzM3NDpcdFx0fVxuMzM3NTpcdFxuMzM3NjpcdFx0aWYgKCF0ZHBfbW11X2VuYWJsZWQgfHwgIWVuYWJsZV9tbWlvX2NhY2hpbmcgfHwgIWVuYWJsZV9lcHRfYWRfYml0cykge1xuMzM3NzpcdFx0XHRwcl9lcnIoXCYjMzQ7VERQIE1NVSBhbmQgTU1JTyBjYWNoaW5nIGFuZCBFUFQgQS9EIGJpdCBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjMzNzg6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzM3OTpcdFx0fVxuMzM4MDpcdFxuMzM4MTpcdFx0aWYgKCFlbmFibGVfYXBpY3YpIHtcbjMzODI6XHRcdFx0cHJfZXJyKFwmIzM0O0FQSUN2IGlzIHJlcXVpcmVkIGZvciBURFhcXG5cJiMzNDspO1xuMzM4MzpcdFx0XHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XG4zMzg0Olx0XHR9XG4zMzg1Olx0XG4zMzg2Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfT1NYU0FWRSkpIHtcbjMzODc6XHRcdFx0cHJfZXJyKFwmIzM0O3RkeDogT1NYU0FWRSBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjMzODg6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzM4OTpcdFx0fVxuMzM5MDpcdFxuMzM5MTpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSkge1xuMzM5MjpcdFx0XHRwcl9lcnIoXCYjMzQ7VERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXG5cJiMzNDspO1xuMzM5MzpcdFx0XHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XG4zMzk0Olx0XHR9XG4zMzk1Olx0XG4zMzk2Olx0XHRyID0gX190ZHhfaGFyZHdhcmVfc2V0dXAoKTtcbjMzOTc6XHRcdGlmIChyKSB7XG4zMzk4Olx0XHRcdC8qXG4zMzk5Olx0XHRcdCAqIERpc2FibGUgVERYIG9ubHkgYnV0IGRvbiYjMzk7dCBmYWlsIHRvIGxvYWQgbW9kdWxlIGlmIHRoZSBURFhcbjM0MDA6XHRcdFx0ICogbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuICBObyBuZWVkIHRvIHByaW50IG1lc3NhZ2Ugc2F5aW5nXG4zNDAxOlx0XHRcdCAqIFwmIzM0O21vZHVsZSBpcyBub3QgbG9hZGVkXCYjMzQ7IGJlY2F1c2UgaXQgd2FzIHByaW50ZWQgd2hlbiB0aGUgZmlyc3RcbjM0MDI6XHRcdFx0ICogU0VBTUNBTEwgZmFpbGVkLiAgRG9uJiMzOTt0IGJvdGhlciB1bndpbmRpbmcgdGhlIFMtRVBUIGhvb2tzIG9yXG4zNDAzOlx0XHRcdCAqIHZtX3NpemUsIGFzIGt2bV94ODZfb3BzIGhhdmUgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCAoYW5kIGFyZVxuMzQwNDpcdFx0XHQgKiBpbnRlbnRpb25hbGx5IG5vdCBleHBvcnRlZCkuICBUaGUgUy1FUFQgY29kZSBpcyB1bnJlYWNoYWJsZSxcbjM0MDU6XHRcdFx0ICogYW5kIGFsbG9jYXRpbmcgYSBmZXcgbW9yZSBieXRlcyBwZXIgVk0gaW4gYSBzaG91bGQtYmUtcmFyZVxuMzQwNjpcdFx0XHQgKiBmYWlsdXJlIHNjZW5hcmlvIGlzIGEgbm9uLWlzc3VlLlxuMzQwNzpcdFx0XHQgKi9cbjM0MDg6XHRcdFx0aWYgKHIgPT0gLUVOT0RFVilcbjM0MDk6XHRcdFx0XHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDIyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFREWCBWTSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIHRoZSBDUFUgZmVhdHVyZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGlzbiYjMzk7dCBlbmFibGVkLCB0aGUgY29kZSBpbW1lZGlhdGVseSBqdW1wcyB0byBgc3VjY2Vzc19kaXNhYmxlX3RkeGAuIFRoYXQgc2V0cyBgZW5hYmxlX3RkeGAgdG8gemVybywgd2hpY2ggaXMgY3JpdGljYWwuIElmIGBlbmFibGVfdGR4YCBpcyB6ZXJvLCB0aGVuIGR1cmluZyBgdnRfaW5pdGAsIGl0IHdvbiYjMzk7dCBhZGQgdGhlIGBCSVQoS1ZNX1g4Nl9URFhfVk0pYCBmbGFnIHRvIGBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXNgLiBTbywgbm8gaGFyZHdhcmUgc3VwcG9ydCwgbm8gVERYIFZNIGNyZWF0aW9uIOKAkyB0aGF0JiMzOTtzIGV4cGVjdGVkIGJlaGF2aW9yLgoKVGhlIGNvcmUgcHJvYmxlbSwgb3IgYXQgbGVhc3QgdGhlIHRoaW5nIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQsIGlzIHRoYXQgYm90aCBTRVYtU05QIGFuZCBURFggcmVxdWlyZSBoYXJkd2FyZSBzdXBwb3J0LiBBbmQsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGVudmlyb25tZW50cyBsaWtlIEdDRSBhbmQgdHlwaWNhbCBRRU1VIHNldHVwcyAqZG9uJiMzOTt0KiBleHBvc2UgdGhhdCBraW5kIG9mIGhhcmR3YXJlLiBTbywgbG9naWNhbGx5LCB0aGVzZSBzcGVjaWZpYyBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gVERYIFZNIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSB1bnJlYWNoYWJsZSBpbiB0aG9zZSB2aXJ0dWFsaXplZCBjb250ZXh0cy4KCkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBqdXN0IGJlY2F1c2UgdGhlIGNvZGUgcGF0aCBvdXRsaW5lZCBpcyBibG9ja2VkLCBkb2VzbiYjMzk7dCBtZWFuIHRoYXQgYGt2bV9nbWVtX3BvcHVsYXRlYCBjYW4mIzM5O3QgYmUgY2FsbGVkIGFub3RoZXIgd2F5LiBXaGF0IGFyZSB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgdGhhdCBmdW5jdGlvbj8gVGltZSB0byBjaGVjayB3aGVyZSBlbHNlIGBrdm1fZ21lbV9wb3B1bGF0ZWAgaXMgdXNlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciB3YXkgdG8gdHJpZ2dlciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dtZW1fcG9wdWxhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDEwPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDgxLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDgyOlx0Y291bnQgPSBrdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHBhcmFtcy5nZm5fc3RhcnQsIHNyYywgbnBhZ2VzLCB3cml0ZSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4My1cdFx0XHRcdCAgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXHUwMDI2c2V2X3BvcHVsYXRlX2FyZ3MpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4NS1cdFx0YXJncC1cdTAwM2VlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDg2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczoga3ZtX2dtZW1fcG9wdWxhdGUgZmFpbGVkLCByZXQgJWxkIChmd19lcnJvciAlZClcXG5cJiMzNDssXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0ODctXHRcdFx0IF9fZnVuY19fLCBjb3VudCwgYXJncC1cdTAwM2VlcnJvcik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMTQ1PXN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTg1LVx0XHR9O1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMTg2Olx0XHRnbWVtX3JldCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgZ3BhX3RvX2dmbihyZWdpb24uZ3BhKSxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE4Ny1cdFx0XHRcdFx0ICAgICB1NjRfdG9fdXNlcl9wdHIocmVnaW9uLnNvdXJjZV9hZGRyKSxcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU3MT1pbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZGVyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU3NS0vKipcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTc2OiAqIGt2bV9nbWVtX3BvcHVsYXRlKCkgLSBQb3B1bGF0ZS9wcmVwYXJlIGEgR1BBIHJhbmdlIHdpdGggZ3Vlc3QgZGF0YVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzctICpcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5Ny0gKi9cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk4OnR5cGVkZWYgaW50ICgqa3ZtX2dtZW1fcG9wdWxhdGVfY2IpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTktXHRcdFx0XHQgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9wYXF1ZSk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYwMC1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjAxOmxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHZvaWQgX191c2VyICpzcmMsIGxvbmcgbnBhZ2VzLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MDI6XHRcdCAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYwMy0jZW5kaWZcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTgyMD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fZ2V0X3Bmbik7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjMtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjgyNDpzdGF0aWMgbG9uZyBfX2t2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtODI1LVx0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbiwgc3RydWN0IHBhZ2UgKnNyY19wYWdlLFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo4MjY6XHRcdFx0XHRrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgyNy17XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04NjAtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODYyOlx0XHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTg2My17XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDQtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkwNTpcdFx0cmV0ID0gX19rdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHNsb3QsIGZpbGUsIHN0YXJ0X2dmbiAmIzQzOyBpLCBzcmNfcGFnZSxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTA2LVx0XHRcdFx0XHQgIHBvc3RfcG9wdWxhdGUsIG9wYXF1ZSk7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MTYtfVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo5MTc6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nbWVtX3BvcHVsYXRlKTtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE4LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI2MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb246IFVucmVhY2hhYmxlIENvZGUgaW4gU3RhbmRhcmQgRW52aXJvbm1lbnRzKioKCk9rYXksIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIFRoaXMgY29kZSwgc3BlY2lmaWNhbGx5LCBga3ZtX2dtZW1fcG9wdWxhdGVgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBzbnBfbGF1bmNoX3VwZGF0ZWAgYW5kIGB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb25gLiBCb3RoIG9mICp0aG9zZSogZnVuY3Rpb25zIHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCB0byBldmVuICpiZSogcmVhY2hlZC4gV2UmIzM5O3ZlIGNvbmZpcm1lZCB0aGlzLgoKTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IGNvdWxkIFN5emthbGxlciBiZSBydW5uaW5nIG9uIGEgbWFjaGluZSB0aGF0ICphY3R1YWxseSogc3VwcG9ydHMgU0VWLVNOUCBvciBURFg/IFRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZC4KClNpbmNlIFNFVi1TTlAgYW5kIFREWCBhcmUgZnVuZGFtZW50YWxseSBoYXJkd2FyZS1kZXBlbmRlbnQsIHRoZXkgYXJlbiYjMzk7dCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXBzLiBRRU1VIG1pZ2h0IGVtdWxhdGUgKnNvbWUqIHRoaW5ncywgYnV0IGRlZmluaXRlbHkgbm90IHRoZXNlIHNwZWNpZmljIGZlYXR1cmVzLiBUaGVyZSYjMzk7cyBubyBzdGFuZGFyZCBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIFNFVi1TTlAgb3IgVERYIHdpdGhpbiBLVk0gdGhhdCBJJiMzOTttIGF3YXJlIG9mOyBLVk0gcmVsaWVzIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIChBTUQgUFNQIG9yIEludGVsIFREWCBtb2R1bGUpIGZvciB0aGVpciBvcGVyYXRpb24uIEtWTSAqY2FuJiMzOTt0KiBvcGVyYXRlIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydCwgc3BlY2lmaWNhbGx5LgoKVGhlcmVmb3JlLCB0aGlzIGNvZGUgcGF0aCwgYWNjZXNzZWQgdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMsIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgU3l6a2FsbGVyIGVudmlyb25tZW50cy4gSXQmIzM5O3MgYSBkZWFkIGVuZCBhcyBmYXIgYXMgZnV6emluZyBnb2VzLiBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGlzIHRoZXJlICphbnkqIG90aGVyIGNvbmNlaXZhYmxlIHdheSB0byByZWFjaCBga3ZtX2dtZW1fcG9wdWxhdGVgPyBJdCYjMzk7cyBleHBvcnRlZCBmb3IgS1ZNIGludGVybmFsIHVzZSwgc28gcGVyaGFwcyB0aGVyZSYjMzk7cyBzb21lIG9ic2N1cmUgcGF0aD8gQ291bGQgd2UsIGh5cG90aGV0aWNhbGx5LCBjYWxsIGBLVk1fU0VWX1NOUF9MQVVOQ0hfVVBEQVRFYCB3aXRob3V0IGNyZWF0aW5nIGEgZnVsbCBgS1ZNX1g4Nl9TTlBfVk1gPyBMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGBzbnBfbGF1bmNoX3VwZGF0ZWAgY29kZSBwYXRoLiBOb3BlLCB0aGF0IGNvbmZpcm1zIGl0LiBUaGUgYW5zd2VyIHJlbWFpbnMgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQxMDpcdHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4yNDExOlx0e1xuMjQxMjpcdFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XG4yNDEzOlx0XHRzdHJ1Y3Qgc2V2X2dtZW1fcG9wdWxhdGVfYXJncyBzZXZfcG9wdWxhdGVfYXJncyA9IHswfTtcbjI0MTQ6XHRcdHN0cnVjdCBrdm1fc2V2X3NucF9sYXVuY2hfdXBkYXRlIHBhcmFtcztcbjI0MTU6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4yNDE2Olx0XHRsb25nIG5wYWdlcywgY291bnQ7XG4yNDE3Olx0XHR2b2lkIF9fdXNlciAqc3JjO1xuMjQxODpcdFx0aW50IHdyaXRlO1xuMjQxOTpcdFxuMjQyMDpcdFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi1cdTAwM2VzbnBfY29udGV4dClcbjI0MjE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNDIyOlx0XG4yNDIzOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cGFyYW1zLCB1NjRfdG9fdXNlcl9wdHIoYXJncC1cdTAwM2VkYXRhKSwgc2l6ZW9mKHBhcmFtcykpKVxuMjQyNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjI0MjU6XHRcbjI0MjY6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBHRk4gc3RhcnQgMHglbGx4IGxlbmd0aCAweCVsbHggdHlwZSAlZCBmbGFncyAlZFxcblwmIzM0OywgX19mdW5jX18sXG4yNDI3Olx0XHRcdCBwYXJhbXMuZ2ZuX3N0YXJ0LCBwYXJhbXMubGVuLCBwYXJhbXMudHlwZSwgcGFyYW1zLmZsYWdzKTtcbjI0Mjg6XHRcbjI0Mjk6XHRcdGlmICghcGFyYW1zLmxlbiB8fCAhUEFHRV9BTElHTkVEKHBhcmFtcy5sZW4pIHx8IHBhcmFtcy5mbGFncyB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ5NgoJCQkJCQkJb3V0cHV0OiAyMDEKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgd2h5IEkmIzM5O20gY29uY2x1ZGluZyBpdCYjMzk7cyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRmlyc3QsIEkgc2VlIGl0IG1vZGlmaWVzIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQ1BVSUQgcGFnZSB3cml0ZSByZWZlcmVuY2VzIHdpdGhpbiBLVk0mIzM5O3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucy4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYm90aCBTRVYtU05QIGFuZCBURFggYXJlIGZ1bmRhbWVudGFsbHkgaGFyZHdhcmUtZGVwZW5kZW50LgoKSSBzZWUgYSBkaXJlY3QgbGlua2FnZS4gIFRoZSBjb2RlIGV4cGxpY2l0bHkgdXNlcyBgc2V2X3NucF9ndWVzdChrdm0pYC4gSSB0cmFjZSB0aGlzIGRvd24sIGFuZCBpdCBjaGVja3MgZm9yIGBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRWAsIHdoaWNoIGlzIG9ubHkgc2V0IGlmIHRoZSBWTSB0eXBlIGlzIGBLVk1fWDg2X1NOUF9WTWAuIFRoaXMgaXMgY3J1Y2lhbC4gYEtWTV9YODZfU05QX1ZNYCBjYW4gb25seSBiZSBjcmVhdGVkIGlmIHRoZSBLVk0gZW52aXJvbm1lbnQgc3VwcG9ydHMgaXQgdmlhIGBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXNgLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYEJJVChLVk1fWDg2X1NOUF9WTSlgIGZsYWcuIFRoYXQgZmxhZywgaW4gdHVybiwgaXMgcHJlZGljYXRlZCBvbiB0aGUgaG9zdCBDUFUgaGF2aW5nIGBYODZfRkVBVFVSRV9TRVZfU05QYC4gU28sIHRoaXMgZW50aXJlIHBhdGggaXMgc3RyaWN0bHkgZ2F0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIHNwZWNpZmljYWxseSBBTUQgU0VWLVNOUCBjYXBhYmxlIENQVXMuCgpUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIFREWC4gSSBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gZnJvbSBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCAod2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGVuY3J5cHRpb24pLCBhbGwgdGhlIHdheSBiYWNrIHRocm91Z2ggYHRkeF92Y3B1X2lvY3RsYCB0byBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgd2hlbiBoYW5kbGluZyBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYC4gVGhhdCBwYXRoIG9ubHkgd29ya3MgaWYgYGlzX3RkX3ZjcHUodmNwdSlgIGlzIHRydWUgd2hpY2ggaW4gdHVybiByZXF1aXJlcyAgYHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNYCwgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBgZW5hYmxlX3RkeGAsIHdoaWNoIHJlcXVpcmVzIHRoYXQgdGhlIGhvc3QgQ1BVIGhhcyB0aGUgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmbGFnLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF04oCZcyB1bnJlYWNoYWJsZSBpbiBjb21tb24gdmlydHVhbGl6ZWQgc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgaWYgdGhlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZW4mIzM5O3QgcHJlc2VudC4gTXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSB0YXJnZXQgY29kZSwgaW5jbHVkaW5nIGBzbnBfbGF1bmNoX3VwZGF0ZWAsIGB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb25gLCBhbmQgYGt2bV9nbWVtX3BvcHVsYXRlYCwgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0UsIG9yIFFFTVUgd2l0aG91dCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQgKEFNRCBTRVYtU05QIG9yIEludGVsIFREWCkuIEJlY2F1c2Ugc3l6a2FsbGVyIGlzIHVzdWFsbHkgcnVuIG9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIHRoZXNlIHdoZXJlIHRob3NlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3QgZW11bGF0ZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3Qgd2FycmFudCBmdXp6aW5nLgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGl0cyBjYWxsZXJzIGluIEtWTSYjMzk7cyBTRVYtU05QIGFuZCBURFggaW1wbGVtZW50YXRpb25zIHRvIHN1cHBvcnQgYWNxdWlyaW5nIGEgd3JpdGUgcmVmZXJlbmNlIGZvciBDUFVJRCBwYWdlcyBhbmQgdG8gYWRkIGEgTlVMTCBjaGVjayBmb3IgdGhlIHNvdXJjZSBidWZmZXIuIFNFVi1TTlAgYW5kIFREWCBhcmUgaGFyZHdhcmUtYXNzaXN0ZWQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgQ1BVIHN1cHBvcnQgKEFNRCBTRVYtU05QIG9yIEludGVsIFREWCkuIFRoZXkgYXJlIG5vdCBlbXVsYXRlZCBpbiBzb2Z0d2FyZSBieSBRRU1VIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugd2hlcmUgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChgc25wX2xhdW5jaF91cGRhdGVgLCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCwgYW5kIGBrdm1fZ21lbV9wb3B1bGF0ZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlbSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fcG9wdWxhdGVgIGFuZCBpdHMgY2FsbGVycyBpbiBLVk0mIzM5O3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IGFjcXVpcmluZyBhIHdyaXRlIHJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYW5kIHRvIGFkZCBhIE5VTEwgY2hlY2sgZm9yIHRoZSBzb3VyY2UgYnVmZmVyLiBTRVYtU05QIGFuZCBURFggYXJlIGhhcmR3YXJlLWFzc2lzdGVkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIENQVSBzdXBwb3J0IChBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgpLiBUaGV5IGFyZSBub3QgZW11bGF0ZWQgaW4gc29mdHdhcmUgYnkgUUVNVSBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciB0eXBpY2FsbHkgcnVucy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZW0pIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCB0aGlzIHBhdGNoIHNob3VsZCBub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQwOjM2LjcyNzYxNzI1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTA0OTYzOTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX3BvcHVsYXRlYCBhbmQgaXRzIGNhbGxlcnMgaW4gS1ZNJ3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IGFjcXVpcmluZyBhIHdyaXRlIHJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYW5kIHRvIGFkZCBhIE5VTEwgY2hlY2sgZm9yIHRoZSBzb3VyY2UgYnVmZmVyLiBTRVYtU05QIGFuZCBURFggYXJlIGhhcmR3YXJlLWFzc2lzdGVkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIENQVSBzdXBwb3J0IChBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgpLiBUaGV5IGFyZSBub3QgZW11bGF0ZWQgaW4gc29mdHdhcmUgYnkgUUVNVSBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciB0eXBpY2FsbHkgcnVucy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZW0pIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCB0aGlzIHBhdGNoIHNob3VsZCBub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6MzYuNzI3NjIyNzEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ0MDExMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYzA3MDYxN2QxYzQ2ZmYzZWIxNzNiNDQzNDUyNTMyNDY0NWQ5Yzc4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDIzIDA5OjQwOjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuaW5kZXggNmM2YTZkNjYzZTI5NjMuLjVmZDA4ZDM0YmUzZjhhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTIzNjAsOCArMjM2MCw4IEBAIHN0YXRpYyBpbnQgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcXG4gXFxuIFxcdFxcdG1lbWNweShkc3RfdmFkZHIsIHNyY192YWRkciwgUEFHRV9TSVpFKTtcXG4gXFxuLVxcdFxcdGt1bm1hcF9sb2NhbChzcmNfdmFkZHIpO1xcbiBcXHRcXHRrdW5tYXBfbG9jYWwoZHN0X3ZhZGRyKTtcXG4rXFx0XFx0a3VubWFwX2xvY2FsKHNyY192YWRkcik7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IHJtcF9tYWtlX3ByaXZhdGUocGZuLCBnZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgUEdfTEVWRUxfNEssXFxuQEAgLTI0MTUsNiArMjQxNSw3IEBAIHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XFxuIFxcdGxvbmcgbnBhZ2VzLCBjb3VudDtcXG4gXFx0dm9pZCBfX3VzZXIgKnNyYztcXG4rXFx0aW50IHdyaXRlO1xcbiBcXG4gXFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi1cXHUwMDNlc25wX2NvbnRleHQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0yNDM4LDYgKzI0MzksMTMgQEAgc3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4gXFx0aWYgKCFQQUdFX0FMSUdORUQoc3JjKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBNYWtlIHN1cmUgdXNlci1tb2RlIGRpZCBub3QgcGFzcyBOVUxMIGFzIHNyYyB3aXRoXFxuK1xcdCAqIHR5cGUgIT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX1pFUk8uXFxuK1xcdCAqL1xcbitcXHRpZiAoc3JjID09IE5VTEwgXFx1MDAyNlxcdTAwMjYgcGFyYW1zLnR5cGUgIT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX1pFUk8pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0bnBhZ2VzID0gcGFyYW1zLmxlbiAvIFBBR0VfU0laRTtcXG4gXFxuIFxcdC8qXFxuQEAgLTI0NjgsNyArMjQ3NiwxMCBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbiBcXHRzZXZfcG9wdWxhdGVfYXJncy5zZXZfZmQgPSBhcmdwLVxcdTAwM2VzZXZfZmQ7XFxuIFxcdHNldl9wb3B1bGF0ZV9hcmdzLnR5cGUgPSBwYXJhbXMudHlwZTtcXG4gXFxuLVxcdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcyxcXG4rXFx0LyogQWNxdWlyZSBhIHdyaXRlLXJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYXMga2VybmVsIG1pZ2h0IHdyaXRlIHRvIGl0ICovXFxuK1xcdHdyaXRlID0gcGFyYW1zLnR5cGUgPT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX0NQVUlEO1xcbitcXG4rXFx0Y291bnQgPSBrdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHBhcmFtcy5nZm5fc3RhcnQsIHNyYywgbnBhZ2VzLCB3cml0ZSxcXG4gXFx0XFx0XFx0XFx0ICBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlLCBcXHUwMDI2c2V2X3BvcHVsYXRlX2FyZ3MpO1xcbiBcXHRpZiAoY291bnQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGFyZ3AtXFx1MDAzZWVycm9yID0gc2V2X3BvcHVsYXRlX2FyZ3MuZndfZXJyb3I7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggMDRjZTMyMWViZGYzOTYuLjQ2YjFkODRmZGRmMmFhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTMxODUsNyArMzE4NSw3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV90ZHhfY21kICpjXFxuIFxcdFxcdH07XFxuIFxcdFxcdGdtZW1fcmV0ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBncGFfdG9fZ2ZuKHJlZ2lvbi5ncGEpLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHU2NF90b191c2VyX3B0cihyZWdpb24uc291cmNlX2FkZHIpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIDEsIHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUsIFxcdTAwMjZhcmcpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgIDEsIDAsIHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUsIFxcdTAwMjZhcmcpO1xcbiBcXHRcXHRpZiAoZ21lbV9yZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHJldCA9IGdtZW1fcmV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggNGMxNGFlZTFmYjA2MzMuLjYyMmMwYjA0ZDhjMzFiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbkBAIC0yNTgxLDYgKzI1ODEsOCBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZFxcbiAgKiAgICAgICAocGFzc2VkIHRvIEBwb3N0X3BvcHVsYXRlLCBhbmQgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb25cXG4gICogICAgICAgaWYgbm90IE5VTEwpLiBNdXN0IGJlIHBhZ2UtYWxpZ25lZC5cXG4gICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkgZnJvbSB1c2Vyc3BhY2UtYnVmZmVyXFxuKyAqIEB3cml0ZTogdXNlci1zcGFjZSBwcm92aWRlZCBidWZmZXIgbXVzdCBiZSB3cml0YWJsZS4gVGhlIGZ1bmN0aW9uXFxuKyAqXFx0IHdpbGwgYWNxdWlyZSBhIHdyaXRhYmxlIHJlZmVyZW5jZSB3aGVuIHNldCB0byAxLlxcbiAgKiBAcG9zdF9wb3B1bGF0ZTogY2FsbGJhY2sgdG8gaXNzdWUgZm9yIGVhY2ggZ21lbSBwYWdlIHRoYXQgYmFja3MgdGhlIEdQQVxcbiAgKiAgICAgICAgICAgICAgICAgcmFuZ2VcXG4gICogQG9wYXF1ZTogb3BhcXVlIGRhdGEgdG8gcGFzcyB0byBAcG9zdF9wb3B1bGF0ZSBjYWxsYmFja1xcbkBAIC0yNTk3LDcgKzI1OTksNyBAQCB0eXBlZGVmIGludCAoKmt2bV9nbWVtX3BvcHVsYXRlX2NiKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvcGFxdWUpO1xcbiBcXG4gbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZyBucGFnZXMsXFxuLVxcdFxcdCAgICAgICBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpO1xcbitcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpO1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5pbmRleCA2OWM5ZDZkNTQ2YjI4Ny4uN2EyNDVhNDAyYTFiMjIgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5AQCAtODU5LDcgKzg1OSw3IEBAIHN0YXRpYyBsb25nIF9fa3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiB9XFxuIFxcbiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG4tXFx0XFx0ICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcXG4rXFx0XFx0ICAgICAgIGludCB3cml0ZSwga3ZtX2dtZW1fcG9wdWxhdGVfY2IgcG9zdF9wb3B1bGF0ZSwgdm9pZCAqb3BhcXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuIFxcdGludCByZXQgPSAwO1xcbkBAIC04OTMsNyArODkzLDcgQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZ1xcbiBcXHRcXHRpZiAoc3JjKSB7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdWFkZHIgPSAodW5zaWduZWQgbG9uZylzcmMgKyBpICogUEFHRV9TSVpFO1xcbiBcXG4tXFx0XFx0XFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgMCwgXFx1MDAyNnNyY19wYWdlKTtcXG4rXFx0XFx0XFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgd3JpdGUsIFxcdTAwMjZzcmNfcGFnZSk7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0aWYgKHJldCAhPSAxKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQwOjM3LjQzMjcwNDU1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI4MzQ0NTQ1NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fcG9wdWxhdGVgIGFuZCBpdHMgY2FsbGVycyBpbiBLVk0ncyBTRVYtU05QIGFuZCBURFggaW1wbGVtZW50YXRpb25zIHRvIHN1cHBvcnQgYWNxdWlyaW5nIGEgd3JpdGUgcmVmZXJlbmNlIGZvciBDUFVJRCBwYWdlcyBhbmQgdG8gYWRkIGEgTlVMTCBjaGVjayBmb3IgdGhlIHNvdXJjZSBidWZmZXIuIFNFVi1TTlAgYW5kIFREWCBhcmUgaGFyZHdhcmUtYXNzaXN0ZWQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgQ1BVIHN1cHBvcnQgKEFNRCBTRVYtU05QIG9yIEludGVsIFREWCkuIFRoZXkgYXJlIG5vdCBlbXVsYXRlZCBpbiBzb2Z0d2FyZSBieSBRRU1VIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugd2hlcmUgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChgc25wX2xhdW5jaF91cGRhdGVgLCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCwgYW5kIGBrdm1fZ21lbV9wb3B1bGF0ZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlbSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZjMDcwNjE3ZDFjNDZmZjNlYjE3M2I0NDM0NTI1MzI0NjQ1ZDljNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwOTo0MDozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA2YzZhNmQ2NjNlMjk2My4uNWZkMDhkMzRiZTNmOGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMjM2MCw4ICsyMzYwLDggQEAgc3RhdGljIGludCBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuIFxuIFx0XHRtZW1jcHkoZHN0X3ZhZGRyLCBzcmNfdmFkZHIsIFBBR0VfU0laRSk7XG4gXG4tXHRcdGt1bm1hcF9sb2NhbChzcmNfdmFkZHIpO1xuIFx0XHRrdW5tYXBfbG9jYWwoZHN0X3ZhZGRyKTtcbitcdFx0a3VubWFwX2xvY2FsKHNyY192YWRkcik7XG4gXHR9XG4gXG4gXHRyZXQgPSBybXBfbWFrZV9wcml2YXRlKHBmbiwgZ2ZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQR19MRVZFTF80SyxcbkBAIC0yNDE1LDYgKzI0MTUsNyBAQCBzdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiBcdGxvbmcgbnBhZ2VzLCBjb3VudDtcbiBcdHZvaWQgX191c2VyICpzcmM7XG4rXHRpbnQgd3JpdGU7XG4gXG4gXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSB8fCAhc2V2LVx1MDAzZXNucF9jb250ZXh0KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0yNDM4LDYgKzI0MzksMTMgQEAgc3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbiBcdGlmICghUEFHRV9BTElHTkVEKHNyYykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB1c2VyLW1vZGUgZGlkIG5vdCBwYXNzIE5VTEwgYXMgc3JjIHdpdGhcbitcdCAqIHR5cGUgIT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX1pFUk8uXG4rXHQgKi9cbitcdGlmIChzcmMgPT0gTlVMTCBcdTAwMjZcdTAwMjYgcGFyYW1zLnR5cGUgIT0gS1ZNX1NFVl9TTlBfUEFHRV9UWVBFX1pFUk8pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0bnBhZ2VzID0gcGFyYW1zLmxlbiAvIFBBR0VfU0laRTtcbiBcbiBcdC8qXG5AQCAtMjQ2OCw3ICsyNDc2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4gXHRzZXZfcG9wdWxhdGVfYXJncy5zZXZfZmQgPSBhcmdwLVx1MDAzZXNldl9mZDtcbiBcdHNldl9wb3B1bGF0ZV9hcmdzLnR5cGUgPSBwYXJhbXMudHlwZTtcbiBcbi1cdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcyxcbitcdC8qIEFjcXVpcmUgYSB3cml0ZS1yZWZlcmVuY2UgZm9yIENQVUlEIHBhZ2VzIGFzIGtlcm5lbCBtaWdodCB3cml0ZSB0byBpdCAqL1xuK1x0d3JpdGUgPSBwYXJhbXMudHlwZSA9PSBLVk1fU0VWX1NOUF9QQUdFX1RZUEVfQ1BVSUQ7XG4rXG4rXHRjb3VudCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgcGFyYW1zLmdmbl9zdGFydCwgc3JjLCBucGFnZXMsIHdyaXRlLFxuIFx0XHRcdFx0ICBzZXZfZ21lbV9wb3N0X3BvcHVsYXRlLCBcdTAwMjZzZXZfcG9wdWxhdGVfYXJncyk7XG4gXHRpZiAoY291bnQgXHUwMDNjIDApIHtcbiBcdFx0YXJncC1cdTAwM2VlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCAwNGNlMzIxZWJkZjM5Ni4uNDZiMWQ4NGZkZGYyYWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtMzE4NSw3ICszMTg1LDcgQEAgc3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNcbiBcdFx0fTtcbiBcdFx0Z21lbV9yZXQgPSBrdm1fZ21lbV9wb3B1bGF0ZShrdm0sIGdwYV90b19nZm4ocmVnaW9uLmdwYSksXG4gXHRcdFx0XHRcdCAgICAgdTY0X3RvX3VzZXJfcHRyKHJlZ2lvbi5zb3VyY2VfYWRkciksXG4tXHRcdFx0XHRcdCAgICAgMSwgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXHUwMDI2YXJnKTtcbitcdFx0XHRcdFx0ICAgICAxLCAwLCB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlLCBcdTAwMjZhcmcpO1xuIFx0XHRpZiAoZ21lbV9yZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBnbWVtX3JldDtcbiBcdFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDRjMTRhZWUxZmIwNjMzLi42MjJjMGIwNGQ4YzMxYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMjU4MSw2ICsyNTgxLDggQEAgaW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmRcbiAgKiAgICAgICAocGFzc2VkIHRvIEBwb3N0X3BvcHVsYXRlLCBhbmQgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb25cbiAgKiAgICAgICBpZiBub3QgTlVMTCkuIE11c3QgYmUgcGFnZS1hbGlnbmVkLlxuICAqIEBucGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjb3B5IGZyb20gdXNlcnNwYWNlLWJ1ZmZlclxuKyAqIEB3cml0ZTogdXNlci1zcGFjZSBwcm92aWRlZCBidWZmZXIgbXVzdCBiZSB3cml0YWJsZS4gVGhlIGZ1bmN0aW9uXG4rICpcdCB3aWxsIGFjcXVpcmUgYSB3cml0YWJsZSByZWZlcmVuY2Ugd2hlbiBzZXQgdG8gMS5cbiAgKiBAcG9zdF9wb3B1bGF0ZTogY2FsbGJhY2sgdG8gaXNzdWUgZm9yIGVhY2ggZ21lbSBwYWdlIHRoYXQgYmFja3MgdGhlIEdQQVxuICAqICAgICAgICAgICAgICAgICByYW5nZVxuICAqIEBvcGFxdWU6IG9wYXF1ZSBkYXRhIHRvIHBhc3MgdG8gQHBvc3RfcG9wdWxhdGUgY2FsbGJhY2tcbkBAIC0yNTk3LDcgKzI1OTksNyBAQCB0eXBlZGVmIGludCAoKmt2bV9nbWVtX3BvcHVsYXRlX2NiKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb3BhcXVlKTtcbiBcbiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcbi1cdFx0ICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7XG4rXHRcdCAgICAgICBpbnQgd3JpdGUsIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCA2OWM5ZDZkNTQ2YjI4Ny4uN2EyNDVhNDAyYTFiMjIgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtODU5LDcgKzg1OSw3IEBAIHN0YXRpYyBsb25nIF9fa3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIH1cbiBcbiBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcbi1cdFx0ICAgICAgIGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcbitcdFx0ICAgICAgIGludCB3cml0ZSwga3ZtX2dtZW1fcG9wdWxhdGVfY2IgcG9zdF9wb3B1bGF0ZSwgdm9pZCAqb3BhcXVlKVxuIHtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC04OTMsNyArODkzLDcgQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywgbG9uZ1xuIFx0XHRpZiAoc3JjKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyB1YWRkciA9ICh1bnNpZ25lZCBsb25nKXNyYyArIGkgKiBQQUdFX1NJWkU7XG4gXG4tXHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgMSwgMCwgXHUwMDI2c3JjX3BhZ2UpO1xuK1x0XHRcdHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3QodWFkZHIsIDEsIHdyaXRlLCBcdTAwMjZzcmNfcGFnZSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGlmIChyZXQgIT0gMSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6MzcuNDMyNzA1OTQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzMDY0MjAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lcyogaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2Ugc2hvdWxkIGNvbnNpZGVyIGZvciBmdXp6aW5nLiBJdCdzIHRvdWNoaW5nIHNvbWUgc2Vuc2l0aXZlIGFyZWFzLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLCBhbmQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGF0J3MgS1ZNIFNFVi1TTlAsIFREWCBjb2RlLCBhbmQgZ3Vlc3QgbWVtb3J5IG1hbmFnZW1lbnQuIEJpZyByZWQgZmxhZyB0aGVyZS5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSBgd3JpdGVgIHBhcmFtZXRlciB0byBga3ZtX2dtZW1fcG9wdWxhdGVgLCB3aGljaCBpcyB0aGVuIHVzZWQgd2l0aGluIGBzbnBfbGF1bmNoX3VwZGF0ZWAgdG8gZ2V0IGEgd3JpdGUgcmVmZXJlbmNlIGZvciBDUFVJRCBwYWdlcy4gVGhlcmUncyBhbHNvIGEgbmV3IGBOVUxMYCBjaGVjayBvbiBgc3JjYCBpbiB0aGUgc2FtZSBmdW5jdGlvbiB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbi4gUGx1cywgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYGt1bm1hcF9sb2NhbGAgb3JkZXIgaW4gYHNldl9nbWVtX3Bvc3RfcG9wdWxhdGVgLiBEZWZpbml0ZWx5IGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBhdHRhY2suXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkuIElzIHRoaXMgY29kZSBwYXRoIGV2ZW4gKmFjY2Vzc2libGUqIGluIGEgZnV6emVkIGVudmlyb25tZW50PyBHaXZlbiB0aGUgY29kZSBjaGFuZ2VzLCBpdCBhcHBlYXJzIHRvIGJlIEtWTSBTRVYtU05QIGFuZCBURFggcmVsYXRlZCwgYnV0IGBrdm1fZ21lbV9wb3B1bGF0ZWAgaXMgcGFydCBvZiBndWVzdF9tZW1mZCB3aGljaCBpcyB1c2VkIGJ5IEtWTS4gVGhhdCdzIHByb21pc2luZywgc2luY2UgS1ZNIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgaW4gU3l6a2FsbGVyLiBFeGNlbGxlbnQuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciBTRVYtU05QIGFuZCBURFggbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIGhvdyB3ZSBnZXQgdG8gYGt2bV9nbWVtX3BvcHVsYXRlYC4gSXQncyBjYWxsZWQgZnJvbSBgc25wX2xhdW5jaF91cGRhdGVgIGFuZCBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYC4gYHNucF9sYXVuY2hfdXBkYXRlYCByZXF1aXJlcyB0aGUgYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgY2hlY2suIE9rYXkuIFdoYXQgYWJvdXQgYGt2bV9nbWVtX3BvcHVsYXRlYCBpdHNlbGY/IEl0J3MgZXhwb3J0ZWQsIHNvIHRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IGVhc2llci4gSXQncyB1c2VkIGJ5IGJvdGggU0VWIGFuZCBURFgsIHRvby5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBmb3Igb3RoZXIsIGxlc3Mgb2J2aW91cywgdXNlcnMgb2YgYGt2bV9nbWVtX3BvcHVsYXRlYC4gV2UgY2FuJ3QgYmUgdG9vIGNhcmVmdWwuIE92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBmdXp6aW5nIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6NDQuNTYzMzUxNzM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzcyOTA1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2dtZW1fcG9wdWxhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDEwPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0ODEtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDgyOlxcdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcywgd3JpdGUsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDgzLVxcdFxcdFxcdFxcdCAgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXFx1MDAyNnNldl9wb3B1bGF0ZV9hcmdzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4NS1cXHRcXHRhcmdwLVxcdTAwM2VlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQ4NjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IGt2bV9nbWVtX3BvcHVsYXRlIGZhaWxlZCwgcmV0ICVsZCAoZndfZXJyb3IgJWQpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4Ny1cXHRcXHRcXHQgX19mdW5jX18sIGNvdW50LCBhcmdwLVxcdTAwM2VlcnJvcik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxNDU9c3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE4NS1cXHRcXHR9O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzE4NjpcXHRcXHRnbWVtX3JldCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgZ3BhX3RvX2dmbihyZWdpb24uZ3BhKSxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxODctXFx0XFx0XFx0XFx0XFx0ICAgICB1NjRfdG9fdXNlcl9wdHIocmVnaW9uLnNvdXJjZV9hZGRyKSxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTcxPWludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzUtLyoqXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1NzY6ICoga3ZtX2dtZW1fcG9wdWxhdGUoKSAtIFBvcHVsYXRlL3ByZXBhcmUgYSBHUEEgcmFuZ2Ugd2l0aCBndWVzdCBkYXRhXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzctICpcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk3LSAqL1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk4OnR5cGVkZWYgaW50ICgqa3ZtX2dtZW1fcG9wdWxhdGVfY2IpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk5LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb3BhcXVlKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYwMC1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMjpcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjAzLSNlbmRpZlxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04MjA9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nbWVtX2dldF9wZm4pO1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjMtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo4MjQ6c3RhdGljIGxvbmcgX19rdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjUtXFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbiwgc3RydWN0IHBhZ2UgKnNyY19wYWdlLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODI2OlxcdFxcdFxcdFxcdGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgyNy17XFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTg2MC1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MjpcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04NjMte1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDQtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo5MDU6XFx0XFx0cmV0ID0gX19rdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHNsb3QsIGZpbGUsIHN0YXJ0X2dmbiArIGksIHNyY19wYWdlLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTA2LVxcdFxcdFxcdFxcdFxcdCAgcG9zdF9wb3B1bGF0ZSwgb3BhcXVlKTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE2LX1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxNzpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fcG9wdWxhdGUpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MDo0Ny42MDA4NTU0MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQ4MTM4NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIGBrdm1fZ21lbV9wb3B1bGF0ZWAqKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBga3ZtX2dtZW1fcG9wdWxhdGVgIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU0VWIGFuZCBURFggY29udGV4dHMuIFNpbmNlIFNFViBhbmQgVERYIGFyZSBoYXJkd2FyZS1sZXZlbCBmZWF0dXJlcywgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgcmVhbGlzdGljYWxseSBmdXp6IHRoZXNlPyBTeXprYWxsZXIsIG9mIGNvdXJzZSwgaXMgYSBwb3dlcmZ1bCB0b29sIGZvciBLVk0gZnV6emluZywgYnV0IG15IGltbWVkaWF0ZSB3b3JyeSBpcyBhYm91dCB0aGUgZW52aXJvbm1lbnRzIGl0IHR5cGljYWxseSBydW5zIGluLiBNb3N0IGluc3RhbmNlcyBJJ20gYXdhcmUgb2YgZG9uJ3QgaGF2ZSBTRVYgb3IgVERYIGVuYWJsZWQsIGVzcGVjaWFsbHkgd2l0aGluIG5lc3RlZCBndWVzdHMgb24gYSBwbGF0Zm9ybSBsaWtlIEdDRS4gSG1tLCBvciAqZG8qIHRoZXk/IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwganVzdCBpbiBjYXNlLlxuXG5CdXQsIGlmIHdlJ3JlIG9ubHkgbG9va2luZyBhdCBTRVYgYW5kIFREWC1zcGVjaWZpYyBjb2RlLCB0aGUgcmVhY2hhYmlsaXR5IGJlY29tZXMgYSByZWFsIGNvbmNlcm4uIEhvd2V2ZXIsIGxldCBtZSBiYWNrIHVwIGEgc3RlcC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvZGXigJlzIGxvY2F0aW9uLiBSaWdodCwgYGt2bV9nbWVtX3BvcHVsYXRlYCBpdHNlbGYgaXMgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBJcyBpdCBldmVuIHJlYWNoYWJsZSB3aXRob3V0IFNFViBvciBURFg/IFRoZSBncmVwIG91dHB1dCBzaG91bGQgYmUgZGVmaW5pdGl2ZSBoZXJlLiBZZXAsIGl0IGFwcGVhcnMgaXQncyBvbmx5IGNhbGxlZCBmcm9tIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLiBTbywgaXQgbG9va3MgbGlrZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgdGlnaHRseSBjb3VwbGVkIHRvIHRob3NlIHR3byBoYXJkd2FyZSBmZWF0dXJlcy5cblxuV2FpdCBhIHNlY29uZOKApiB3YXNuJ3QgdGhlcmUgc29tZSByZWNlbnQgZGlzY3Vzc2lvbiBhcm91bmQgc3l6a2FsbGVyJ3MgU0VWIGNhcGFiaWxpdGllcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgdGhhdC4gTGV0J3MgbWFrZSBzdXJlLCBhcyBpdCBjb3VsZCBjaGFuZ2UgdGhlIGVudGlyZSBjYWxjdWx1cyBoZXJlLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLiBQZXJoYXBzIHRoZXJlIGFyZSBzb21lIHNwZWNpZmljIGNvbmZpZ3MgZm9yIFNFViBvciBURFggc3VwcG9ydC4gSSBuZWVkIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYWJvdXQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhdCBhbGwgdnVsbmVyYWJsZSB0byBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzYwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQwOjUzLjU0ODk5Njg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk5OTEwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURfU0VWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6NTUuODI4OTk3OTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU0MDI4OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkNoZWNraW5nIHRoZSBURFggQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSd2ZSBnb3QgYSBmZWVsaW5nIHNvbWV0aGluZyBtaWdodCBiZSBvZmYsIG9yIG1heWJlIEknbSBqdXN0IGJlaW5nIG92ZXJseSBjYXV0aW91cywgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgVERYIGNvbmZpZ3VyYXRpb24uIFRoZXJlJ3MgYWx3YXlzIGEgY3JpdGljYWwgY29tcG9uZW50IHNvbWV3aGVyZSwgYW5kIGl0J3MgYmVzdCB0byBiZSBwcm9hY3RpdmUgdGhhbiB0byBzcGVuZCBhbiBob3VyIHRyb3VibGVzaG9vdGluZyBhIHByb2JsZW0gdGhhdCBjb3VsZCBoYXZlIGJlZW4gYXZvaWRlZC4gVGltZSB0byBvcGVuIHRoYXQgdXAgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDA6NTguNDgzMDMwMTgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzI4NjUyMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTF9URFhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MTowMS4xNTU5MDc1MzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU5MTU3ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaDogU0VWIFx1MDAyNiBURFggQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgU0VWIGFuZCBURFguIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzOiBjYW4gdGhpcyBiZSBmdXp6ZWQ/IExldCdzIGJyZWFrIGl0IGRvd24uIFRoZSB0ZXh0IG1lbnRpb25zIFwiY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFwiIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgaGFyZHdhcmUuIFRoaXMgaXMga2V5LCBhcyBTRVYgYW5kIFREWCByZWx5IG9uIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSBrbm93LCBkZWZpbml0aXZlbHksIHRoYXQgUUVNVSBjYW4ndCAqZnVsbHkqIGVtdWxhdGUgU0VWIG9yIFREWCwgYmVjYXVzZSB0aG9zZSByZWx5IG9uIHRoZSBBTUQgUFNQIGFuZCBJbnRlbCBURFgtc3BlY2lmaWMgaGFyZHdhcmUgcmVzcGVjdGl2ZWx5LlxuXG5CdXQgaG9sZCBvbi4uLiBjYW4gS1ZNIHNvbWVob3cgYmUgZnV6emVkIGZvciBTRVYgd2l0aG91dCBuZWVkaW5nIHRoZSBhY3R1YWwgc2lsaWNvbj8gRGlnZ2luZyBkZWVwZXIsIEkgcmVtZW1iZXIgdGhhdCBgc2V2X3NucF9ndWVzdChrdm0pYCBpcyBhbiBpbXBvcnRhbnQgY2hlY2suIEl0IGV4cGxpY2l0bHkgdGVzdHMgaWYgYSBndWVzdCBpcyBhbiBTTlAgZ3Vlc3QuIEFuZCBpdCBhbHNvIGluZGljYXRlcyB0aGF0IGl0IHJlcXVpcmVzIHRoZSBob3N0IHRvIHN1cHBvcnQgU05QIGFuZCB0aGUgZ3Vlc3QgdG8gYmUgbGF1bmNoZWQgYXMgYW4gU05QIGd1ZXN0LlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGhlcmUgaXMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGBzZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBmdXp6aW5nIGFwcHJvYWNoIGlzIHZpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MTowNS43MTUwNzg2OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjQ4Mzc1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X3NucF9ndWVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzNz1zdGF0aWMgYm9vbCBzZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDItXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxNDM6c3RhdGljIGJvb2wgc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDQte1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ1LVxcdGt2bV9sb2NrZGVwX2Fzc2VydF9zZXZfbG9ja19oZWxkKGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxNDY6XFx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMDY9c3RhdGljIGJvb2wgc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIxMC1cXHRyZXR1cm4gKHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyBcXHUwMDI2IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjExOlxcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFzZXZfc25wX2d1ZXN0KGt2bSkpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjEyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI2ND1zdGF0aWMgaW50IHNucF9sYXVuY2hfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNzAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjcxOlxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI3Mi1cXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQxMD1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDE5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQyMDpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSB8fCAhc2V2LVxcdTAwM2VzbnBfY29udGV4dClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI1NTk9c3RhdGljIGludCBzbnBfbGF1bmNoX2ZpbmlzaChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjU2Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1Njc6XFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTY4LVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM1PXN0YXRpYyBpbnQgc25wX2VuYWJsZV9jZXJ0cyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjM2LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2Mzc6XFx0aWYgKGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAhc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY0NT1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY2OS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2NzA6XFx0aWYgKHNldl9zbnBfZ3Vlc3Qoa3ZtKSBcXHUwMDI2XFx1MDAyNiBzZXZfY21kLmlkIFxcdTAwM2MgS1ZNX1NFVl9TTlBfTEFVTkNIX1NUQVJUKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY3MS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTY4PXZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDA4LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzAwOTpcXHRpZiAoc2V2X3NucF9ndWVzdChrdm0pKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDEwLVxcdFxcdHNucF9ndWVzdF9yZXFfY2xlYW51cChrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMzA4PXZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMzIwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzMyMTpcXHRpZiAoIV9fX19zZXZfZ3Vlc3Qoa3ZtKSB8fCBfX19fc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzMyMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM0MjQ9c3RhdGljIGludCBzZXZfZXNfdmFsaWRhdGVfdm1nZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzUxMC1cXHRjYXNlIFNWTV9WTUdFWElUX0FQX0NSRUFUSU9OOlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzUxMTpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNTEyLVxcdFxcdFxcdGdvdG8gdm1nZXhpdF9lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1MjQtXFx0Y2FzZSBTVk1fVk1HRVhJVF9QU0M6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTI1OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSB8fCAha3ZtX2doY2Jfc3dfc2NyYXRjaF9pc192YWxpZChzdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzUyNi1cXHRcXHRcXHRnb3RvIHZtZ2V4aXRfZXJyO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNTI5LVxcdGNhc2UgU1ZNX1ZNR0VYSVRfRVhUX0dVRVNUX1JFUVVFU1Q6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTMwOlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSB8fFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzUzMS1cXHRcXHQgICAgIVBBR0VfQUxJR05FRChjb250cm9sLVxcdTAwM2VleGl0X2luZm9fMSkgfHxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzYwNT12b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNjE4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzYxOTpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzYyMC1cXHRcXHR1NjQgcGZuID0gX19wYShzdm0tXFx1MDAzZXNldl9lcy52bXNhKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjI0PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjMxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIzMjpcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjMzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkzPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI5OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQzMDA6XFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDMwMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDM1NT1zdGF0aWMgaW50IHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzQtXFx0Y2FzZSBHSENCX01TUl9QUkVGX0dQQV9SRVE6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDM1OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzYtXFx0XFx0XFx0Z290byBvdXRfdGVybWluYXRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ0NjpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQ3LVxcdFxcdFxcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ2MC1cXHRjYXNlIEdIQ0JfTVNSX1BTQ19SRVE6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDYxOlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NjItXFx0XFx0XFx0Z290byBvdXRfdGVybWluYXRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NDk5PWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTMzLVxcdC8qIFNFVi1TTlAgZ3Vlc3QgcmVxdWlyZXMgdGhhdCB0aGUgR0hDQiBHUEEgbXVzdCBiZSByZWdpc3RlcmVkICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTM0OlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpIFxcdTAwMjZcXHUwMDI2ICFnaGNiX2dwYV9pc19yZWdpc3RlcmVkKHN2bSwgZ2hjYl9ncGEpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTM1LVxcdFxcdHZjcHVfdW5pbXBsKFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUsIFxcXCJ2bWdleGl0OiBHSENCIEdQQSBbJSNsbHhdIGlzIG5vdCByZWdpc3RlcmVkLlxcXFxuXFxcIiwgZ2hjYl9ncGEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00Nzg4PXZvaWQgc2V2X2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBpbml0X2V2ZW50KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODAwLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDgwMTpcXHRpZiAoaW5pdF9ldmVudCBcXHUwMDI2XFx1MDAyNiBpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDgwMi1cXHRcXHRzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODMzPXZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqaG9zdHNhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODczLVxcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9ERUJVR19TV0FQKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDg3NDpcXHQgICAgIGlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODc1LVxcdFxcdGhvc3RzYS1cXHUwMDNlZHIwX2FkZHJfbWFzayA9IGFtZF9nZXRfZHJfYWRkcl9tYXNrKDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTA1PWludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTEyLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTExMzpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMTQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyMTU9aW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjE5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIyMDpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMjEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyMzA9c3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTI1MC1cXHQvKiBDaGVjayBpZiB0aGUgU0VWIHBvbGljeSBhbGxvd3MgZGVidWdnaW5nICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjUxOlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjUyLVxcdFxcdGlmICghKHNldi1cXHUwMDNlcG9saWN5IFxcdTAwMjYgU05QX1BPTElDWV9NQVNLX0RFQlVHKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTI1OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyNTk6XFx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyNjAtXFx0XFx0c3RydWN0IHNldl9kYXRhX3NucF9kYmcgZGJnID0gezB9O1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0xOTY1PXN0YXRpYyBpbnQgbnBmX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTE5OTktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDAwOlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpIFxcdTAwMjZcXHUwMDI2IChlcnJvcl9jb2RlIFxcdTAwMjYgUEZFUlJfR1VFU1RfRU5DX01BU0spKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAwMS1cXHRcXHRlcnJvcl9jb2RlIHw9IFBGRVJSX1BSSVZBVEVfQUNDRVNTO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzY0PXN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMzNzgtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMzc5OlxcdHZtX3R5cGUgPSBpc19zZXZfc25wX2d1ZXN0KHZjcHUpID8gXFxcIlNFVi1TTlBcXFwiIDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMzODAtXFx0XFx0ICBpc19zZXZfZXNfZ3Vlc3QodmNwdSkgPyBcXFwiU0VWLUVTXFxcIiA6XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTM5OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQwNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDE4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MjItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MjM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyNTpcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTQzMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDM2LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDM3OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjA4LjA3OTkyNDIwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjAwNjg1NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrdm1fZ21lbV9wb3B1bGF0ZWAsIHdoaWNoIGlzIGEgZnVuY3Rpb24gaW50ZXJuYWwgdG8gS1ZNLiBJIHNlZSB0aGF0IGl0J3MgYmVlbiB1cGRhdGVkIHRvIHRha2UgYSBgd3JpdGVgIHBhcmFtZXRlci4gIFJpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoYXQgdGhpcyBjaGFuZ2VzIGhvdyBga3ZtX2dtZW1fcG9wdWxhdGVgIGJlaGF2ZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/ICBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga3ZtX2dtZW1fcG9wdWxhdGVgIGlzIGV2ZW4gKmNhbGxlZCogZnJvbS5cblxuSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaW4gYHNucF9sYXVuY2hfdXBkYXRlYCBhbmQgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIHdoaWNoIGFyZSBib3RoIHBhcnQgb2YgdGhlIFNFVi1TTlAgYW5kIFREWCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBBbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIHNlY3VyaXR5IGZlYXR1cmVzIHRpZWQgdG8gQU1EIGFuZCBJbnRlbCBoYXJkd2FyZS4gQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucz8gIFdlbGwsIGlmIFNFVi1TTlAgaXMgc3VwcG9ydGVkLCBzeXprYWxsZXIgKmNhbiogaXNzdWUgdGhlIGBLVk1fU0VWX1NOUF9MQVVOQ0hfVVBEQVRFYCBpb2N0bC4gQnV0IGlmIFNFVi1TTlAgaXMgKm5vdCogc3VwcG9ydGVkLCBgc2V2X3NucF9ndWVzdChrdm0pYCByZXR1cm5zIGZhbHNlLCBhbmQgYHNucF9sYXVuY2hfdXBkYXRlYCBqdXN0IHJldHVybnMgYW4gZXJyb3IsIHNwZWNpZmljYWxseSBgLUVJTlZBTGAuXG5cbk15IG5leHQgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBwYXRoIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRT8gVHlwaWNhbGx5LCBHQ0UgaW5zdGFuY2VzIGRvbid0IHN1cHBvcnQgbmVzdGVkIFNFVi1TTlAgb3IgVERYLCBjb3JyZWN0PyBBaCwgYnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbnMuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5LCB0aGF0IGlmIHRoZSBwYXRjaCBpcyBvbmx5IHJlbGF0ZWQgdG8gY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCB0aGVuIGl0IHNob3VsZCBiZSBtYXJrZWQgYXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi5cblxuU2luY2UgU0VWLVNOUCBhbmQgVERYIHJlcXVpcmUgdGhvc2Ugc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgKEFNRCBTRVYtU05QLCBJbnRlbCBURFgpIGFuZCB0aGF0IFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZW0gaW4gYSB3YXkgdGhhdCBhbGxvd3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIHN0YW5kYXJkIEdDRSBpbnN0YW5jZXMsIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgKmFyZSogaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50LiBXYWl0LCBkb2VzIFFFTVUgZXZlbiBlbXVsYXRlIFNFVi1TTlA/IE5vLCBRRU1VIHVzZXMgS1ZNIHRvIHN1cHBvcnQgU0VWLVNOUCwgaXQgZG9lc24ndCBkbyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMuXG5cblNvLCBjYW4gS1ZNIGJlIGZ1enplZCBmb3IgU0VWLVNOUCB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQ/IEkgc2hvdWxkIGNoZWNrIGBfX19fc2V2X3NucF9ndWVzdGAgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MTYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDE6MTYuMjgwNjEyOTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc2NzE5MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fX19zZXZfc25wX2d1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTQzPXN0YXRpYyBib29sIHNldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDUtXFx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3Nldl9sb2NrX2hlbGQoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0NjpcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMzMDg9dm9pZCBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzMjAtXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMzIxOlxcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMzIyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9Mzk5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA1LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDA2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDcte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MjM9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyNTpcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjE4LjU1NzMzNzc5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxMzM3NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgX19fX3Nldl9zbnBfZ3Vlc3RgIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYF9fX19zZXZfc25wX2d1ZXN0YC5cIiBJdCdzIGEgYml0IGNyeXB0aWMsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGhhcyBzb21lIHVuZGVybHlpbmcgc2lnbmlmaWNhbmNlIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmVmb3JlIEkgcHJvY2VlZC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc3BlY2lmaWMgbWFjcm8sIGEgdmFyaWFibGUsIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIGV2ZW4gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGNvZGViYXNlIEknbSB3b3JraW5nIHdpdGguIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSeKAmW0gZ3Vlc3NpbmcgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIFNFVi1TTlAgZ3Vlc3QgaGFuZGxpbmcgaW4gc29tZSB3YXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjb250ZXh0IGl0IG9wZXJhdGVzIGluIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5leHQgcGllY2Ugb2YgY29kZSBJJ20gbG9va2luZyBhdCwgc28gYmVzdCB0byBmaW5kIHRoaXMgZGVmaW5pdGlvbiBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjIxLjk3ODY4MDE4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NTIyMDM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0zOTk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MDUtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MDY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQwNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjI0LjI2MzkxMDA1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk0Mjk2ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEtWTS9TVk0gSW50ZXJuYWxzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIEFNRCBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIChTVk0pIGltcGxlbWVudGF0aW9uIHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oYCBoZWFkZXIgZmlsZS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gaXMgbGlrZWx5IGFyb3VuZCBsaW5lIDQwNi4gSXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaG9uZSBpbiBvbiB0aGUgc3BlY2lmaWMgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZnVydGhlci4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM5OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjI3LjQ1ODIxMDE2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbiAzOTY6XFx0e1xcbiAzOTc6XFx0XFx0cmV0dXJuIHRvX2t2bV9zZXZfaW5mbyhrdm0pLVxcdTAwM2VhY3RpdmU7XFxuIDM5ODpcXHR9XFxuIDM5OTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuIDQwMDpcXHR7XFxuIDQwMTpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4gNDAyOlxcdFxcbiA0MDM6XFx0XFx0cmV0dXJuIHNldi1cXHUwMDNlZXNfYWN0aXZlIFxcdTAwMjZcXHUwMDI2ICFXQVJOX09OX09OQ0UoIXNldi1cXHUwMDNlYWN0aXZlKTtcXG4gNDA0OlxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4gNDA3OlxcdHtcXG4gNDA4OlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xcbiA0MDk6XFx0XFxuIDQxMDpcXHRcXHRyZXR1cm4gKHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyBcXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcXHUwMDI2XFx1MDAyNlxcbiA0MTE6XFx0XFx0ICAgICAgICFXQVJOX09OX09OQ0UoIV9fX19zZXZfZXNfZ3Vlc3Qoa3ZtKSk7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MToyNy40NTgzNTkzNzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MTMyODczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIHNuaXBwZXQsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgYXMgaWYgaXQgd2VyZSBteSBvd24gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIFNFVi1TTlAgQWN0aXZhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb2RlIGlzIGNoZWNraW5nIGBfX19fc2V2X3NucF9ndWVzdGAgYW5kIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyBcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIFwiV2hlcmUgYW5kIGhvdyBpcyBgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVgIGFjdHVhbGx5ICpzZXQqIGluIHRoZSBmaXJzdCBwbGFjZT9cIiBJdCdzIG5vdCBzb21ldGhpbmcgdGhhdCdzIG1hZ2ljYWxseSB0aGVyZS4gVGhlIGxvZ2ljIHRyYWlscyBiYWNrIHRvIGBLVk1fU0VWX0lOSVQyYCBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoaXMgaXMgdGhlIGluaXRpYWxpemF0aW9uIHBhdGguIE5vdywgdGhlIHJlYWwgY3J1eCBvZiB0aGUgaXNzdWUgaXMgd2hldGhlciBvciBub3QgdGhpcyBgS1ZNX1NFVl9JTklUMmAgY2FsbCByZXF1aXJlcyBleHBsaWNpdCBoYXJkd2FyZSBzdXBwb3J0LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBgS1ZNX1NFVl9JTklUMmAgcGF0aCBhbmQgaWRlbnRpZnkgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgaWYgYW55LCB0aGF0IGFyZSBjcnVjaWFsIGZvciB0aGUgU05QIGZlYXR1cmVzIHRvIGJlIGFjdGl2ZS4gSSBoYXZlIHRvIHRyYWNlIGhvdyB0aGlzIGZsYWcgaXMgYmVpbmcgZW5hYmxlZCBieSB0aGUgS1ZNIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NjMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjMyLjQ5OTY5MTYwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5NzE5MjU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaD0zMDU9c3RhdGljX2Fzc2VydCgoWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTMwNi1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDozMDc6I2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVxcdFxcdFxcdFxcdEJJVCgwKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTMwOC0jZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlxcdFxcdEJJVCgzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODg9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzMtXFx0aWYgKHNucF9hY3RpdmUpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzQ6XFx0XFx0c2V2LVxcdTAwM2V2bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MDY9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDA5LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDEwOlxcdHJldHVybiAoc2V2LVxcdTAwM2V2bXNhX2ZlYXR1cmVzIFxcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MTEtXFx0ICAgICAgICFXQVJOX09OX09OQ0UoIV9fX19zZXZfZXNfZ3Vlc3Qoa3ZtKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjM1LjE5Njg5NDA5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYxMjU2OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgX19zZXZfZ3Vlc3RfaW5pdGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBfX3Nldl9ndWVzdF9pbml0YC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBpc24ndCBpdD8gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgU0VWLVNOUCBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGluaXRpYWxpemVkIGhlcmUgd2l0aGluIHRoZSBndWVzdCdzIGNvbnRleHQuIEknbSBmb2N1c2luZyBvbiB0aGUgKmhvdyogYW5kIHRoZSAqd2h5Ki4gV2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYXJlIHdlIHNldHRpbmcgdXA/IFdoYXQncyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucz8gQW5kLCBtb3N0IGltcG9ydGFudGx5LCBob3cgZG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGVuc3VyZSB0aGUgaW50ZWdyaXR5IGFuZCBjb25maWRlbnRpYWxpdHkgYXNwZWN0cyBvZiB0aGUgZ3Vlc3QgaW4gYW4gU0VWLWVuYWJsZWQgZW52aXJvbm1lbnQ/IEFyZSB3ZSBzZWVpbmcgdGhlIGV4cGVjdGVkIG1lbW9yeSByZWdpb24gcHJvdGVjdGlvbnMgc2V0IHVwPyBBcmUgdGhlIHNlY3JldHMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHksIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGUgYXR0ZXN0YXRpb24gcHJvY2Vzcz8gQXJlIHdlIHZlcmlmeWluZyB0aGUgaW5pdGlhbCBmaXJtd2FyZSBzdGF0ZT8gSSdsbCBuZWVkIHRvIHRyYWNlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2NydXRpbml6ZSB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGh5cGVydmlzb3Igb3IgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUtYmFzZWQgc2VjdXJpdHkgbWVjaGFuaXNtcy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5IGFyZSBzZXR0aW5nIHVwIHRoZSBwYWdlIHRhYmxlcywgY29uZmlndXJpbmcgdGhlIHNlY3JldHMsIGFuZCBoYW5kbGluZyB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aXRoIHRoZSBob3N0IGNvcnJlY3RseS4gSXQncyB0aGUgY29yZSBvZiB0cnVzdCwgYW5kIHRoYXQncyB0aGUgcGFydCB0aGF0IG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkIHRoZSBtb3N0LiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byB0ZWxsIHdoYXQgY291bGQgYmUgaW1wcm92ZWQgb3Igb3B0aW1pemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc2MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjM5LjQ1ODE1NDY1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODg6XFx0c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbiA0ODk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fc2V2X2luaXQgKmRhdGEsXFxuIDQ5MDpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XFxuIDQ5MzpcXHRcXHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XFxuIDQ5NDpcXHRcXHRib29sIGVzX2FjdGl2ZSA9IHZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfVk07XFxuIDQ5NTpcXHRcXHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xcbiA0OTY6XFx0XFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbiA0OTc6XFx0XFx0aW50IHJldDtcXG4gNDk4OlxcdFxcbiA0OTk6XFx0XFx0aWYgKGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cylcXG4gNTAwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRpZiAoZGF0YS1cXHUwMDNlZmxhZ3MpXFxuIDUwMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTA0OlxcdFxcbiA1MDU6XFx0XFx0aWYgKCFzbnBfYWN0aXZlKVxcbiA1MDY6XFx0XFx0XFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGlmIChkYXRhLVxcdTAwM2V2bXNhX2ZlYXR1cmVzIFxcdTAwMjYgfnZhbGlkX3Ztc2FfZmVhdHVyZXMpXFxuIDUwOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0aWYgKGRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbiBcXHUwMDNlIEdIQ0JfVkVSU0lPTl9NQVggfHwgKCFlc19hY3RpdmUgXFx1MDAyNlxcdTAwMjYgZGF0YS1cXHUwMDNlZ2hjYl92ZXJzaW9uKSlcXG4gNTEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTM6XFx0XFxuIDUxNDpcXHRcXHQvKlxcbiA1MTU6XFx0XFx0ICogS1ZNIHN1cHBvcnRzIHRoZSBmdWxsIHJhbmdlIG9mIG1hbmRhdG9yeSBmZWF0dXJlcyBkZWZpbmVkIGJ5IHZlcnNpb25cXG4gNTE2OlxcdFxcdCAqIDIgb2YgdGhlIEdIQ0IgcHJvdG9jb2wsIHNvIGRlZmF1bHQgdG8gdGhhdCBmb3IgU0VWLUVTIGd1ZXN0cyBjcmVhdGVkXFxuIDUxNzpcXHRcXHQgKiB2aWEgS1ZNX1NFVl9JTklUMiAoS1ZNX1NFVl9JTklUIGZvcmNlcyB2ZXJzaW9uIDEpLlxcbiA1MTg6XFx0XFx0ICovXFxuIDUxOTpcXHRcXHRpZiAoZXNfYWN0aXZlIFxcdTAwMjZcXHUwMDI2ICFkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb24pXFxuIDUyMDpcXHRcXHRcXHRkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb24gPSAyO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRpZiAoc25wX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb24gXFx1MDAzYyAyKVxcbiA1MjM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUyNDpcXHRcXG4gNTI1OlxcdFxcdGlmICh1bmxpa2VseShzZXYtXFx1MDAzZWFjdGl2ZSkpXFxuIDUyNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0c2V2LVxcdTAwM2VhY3RpdmUgPSB0cnVlO1xcbiA1Mjk6XFx0XFx0c2V2LVxcdTAwM2Vlc19hY3RpdmUgPSBlc19hY3RpdmU7XFxuIDUzMDpcXHRcXHRzZXYtXFx1MDAzZXZtc2FfZmVhdHVyZXMgPSBkYXRhLVxcdTAwM2V2bXNhX2ZlYXR1cmVzO1xcbiA1MzE6XFx0XFx0c2V2LVxcdTAwM2VnaGNiX3ZlcnNpb24gPSBkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb247XFxuIDUzMjpcXHRcXG4gNTMzOlxcdFxcdGlmIChzbnBfYWN0aXZlKVxcbiA1MzQ6XFx0XFx0XFx0c2V2LVxcdTAwM2V2bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFO1xcbiA1MzU6XFx0XFxuIDUzNjpcXHRcXHRyZXQgPSBzZXZfYXNpZF9uZXcoc2V2LCB2bV90eXBlKTtcXG4gNTM3OlxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjM5LjQ1ODY5MTM3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTU3NzEyODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgU0VWIEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYF9fc2V2X2d1ZXN0X2luaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgY2VudHJhbCB0byB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBndWVzdCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGUgdHJhY2Ugc2hvd3MgYSBjYWxsIHRvIGBzZXZfYXNpZF9uZXdgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBhY3R1YWxseSB0eWluZyBpbnRvIGFueSBoYXJkd2FyZSBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiBgc2V2X2FzaWRfbmV3YCBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGFuZCB3ZSBzdGFydCBsZXZlcmFnaW5nIGFueSByZXF1aXJlZCBoYXJkd2FyZSBzdXBwb3J0LiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIHJpZ2h0IG5vdywgYW5kIHRoYXQncyB3aGVyZSBJIHdpbGwgZ28gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjQzLjQxNjQwNzk1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNDYzODE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfYXNpZF9uZXdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDA9c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjYyOnN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDg4PXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM2OlxcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM3LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjQ1LjkzMTA1MjIxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgzNDkwNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIGNvbnRleHQgaXMgcmVsZXZhbnQgdG8gbXkgd29yazpcblxuKipDaGVja2luZyBgc2V2X2FzaWRfbmV3YCoqXG5cblJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIFRoaXMgbGlrZWx5IG1lYW5zIEknbSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJvdWJsZXNob290aW5nIHNlc3Npb24sIGNvZGUgcmV2aWV3LCBvciBtYXliZSBldmVuIGFyY2hpdGVjdHVyYWwgZGVzaWduLiBcIkNoZWNraW5nIGBzZXZfYXNpZF9uZXdgXCIgaW5kaWNhdGVzIGEgc3BlY2lmaWMgdmFyaWFibGUsIGZ1bmN0aW9uLCBvciBjb25jZXB0IHJlbGF0ZWQgdG8gQVNJRCAoQWRkcmVzcyBTcGFjZSBJZGVudGlmaWVyKSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiBTRVYgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24pLCB3aGljaCBJJ20gY2xlYXJseSBmYW1pbGlhciB3aXRoLiBJdCdzIGEga2V5IHBpZWNlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgcmVsZXZhbmNlIHRvIHdoYXRldmVyIEknbSB3b3JraW5nIG9uIHJpZ2h0IG5vdy4gUGVyaGFwcyB0aGVyZSdzIGEgc3VzcGVjdGVkIGlzc3VlLCBvciBtYXliZSBJJ20gdmVyaWZ5aW5nIHNvbWUgYXNzdW1wdGlvbnMuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgcGxhY2UgdG8gc3RhcnQuIFRoaXMgY2hlY2sgd2lsbCBkZXRlcm1pbmUgd2hpY2ggcGF0aCBJJ2xsIGZvbGxvdy4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQxOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjQ5LjcxNDU0NTc1NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjI6XFx0c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuIDI2MzpcXHR7XFxuIDI2NDpcXHRcXHQvKlxcbiAyNjU6XFx0XFx0ICogU0VWLWVuYWJsZWQgZ3Vlc3RzIG11c3QgdXNlIGFzaWQgZnJvbSBtaW5fc2V2X2FzaWQgdG8gbWF4X3Nldl9hc2lkLlxcbiAyNjY6XFx0XFx0ICogU0VWLUVTLWVuYWJsZWQgZ3Vlc3QgY2FuIHVzZSBmcm9tIDEgdG8gbWluX3Nldl9hc2lkIC0gMS5cXG4gMjY3OlxcdFxcdCAqL1xcbiAyNjg6XFx0XFx0dW5zaWduZWQgaW50IG1pbl9hc2lkLCBtYXhfYXNpZCwgYXNpZDtcXG4gMjY5OlxcdFxcdGludCByZXQ7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdGlmICh2bV90eXBlID09IEtWTV9YODZfU05QX1ZNKSB7XFxuIDI3MjpcXHRcXHRcXHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcXG4gMjczOlxcdFxcdFxcdG1heF9hc2lkID0gbWF4X3NucF9hc2lkO1xcbiAyNzQ6XFx0XFx0fSBlbHNlIGlmIChzZXYtXFx1MDAzZWVzX2FjdGl2ZSkge1xcbiAyNzU6XFx0XFx0XFx0bWluX2FzaWQgPSBtaW5fc2V2X2VzX2FzaWQ7XFxuIDI3NjpcXHRcXHRcXHRtYXhfYXNpZCA9IG1heF9zZXZfZXNfYXNpZDtcXG4gMjc3OlxcdFxcdH0gZWxzZSB7XFxuIDI3ODpcXHRcXHRcXHRtaW5fYXNpZCA9IG1pbl9zZXZfYXNpZDtcXG4gMjc5OlxcdFxcdFxcdG1heF9hc2lkID0gbWF4X3Nldl9hc2lkO1xcbiAyODA6XFx0XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHQvKlxcbiAyODM6XFx0XFx0ICogVGhlIG1pbiBBU0lEIGNhbiBlbmQgdXAgbGFyZ2VyIHRoYW4gdGhlIG1heCBpZiBiYXNpYyBTRVYgc3VwcG9ydCBpc1xcbiAyODQ6XFx0XFx0ICogZWZmZWN0aXZlbHkgZGlzYWJsZWQgYnkgZGlzYWxsb3dpbmcgdXNlIG9mIEFTSURzIGZvciBTRVYgZ3Vlc3RzLlxcbiAyODU6XFx0XFx0ICogU2ltaWxhcmx5IGZvciBTRVYtRVMgZ3Vlc3RzIHRoZSBtaW4gQVNJRCBjYW4gZW5kIHVwIGxhcmdlciB0aGFuIHRoZVxcbiAyODY6XFx0XFx0ICogbWF4IHdoZW4gY2lwaGVydGV4dCBoaWRpbmcgaXMgZW5hYmxlZCwgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIFNFVi1FU1xcbiAyODc6XFx0XFx0ICogc3VwcG9ydC5cXG4gMjg4OlxcdFxcdCAqL1xcbiAyODk6XFx0XFx0aWYgKG1pbl9hc2lkIFxcdTAwM2UgbWF4X2FzaWQpXFxuIDI5MDpcXHRcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0V0FSTl9PTl9PTkNFKHNldi1cXHUwMDNlbWlzY19jZyk7XFxuIDI5MzpcXHRcXHRzZXYtXFx1MDAzZW1pc2NfY2cgPSBnZXRfY3VycmVudF9taXNjX2NnKCk7XFxuIDI5NDpcXHRcXHRyZXQgPSBzZXZfbWlzY19jZ190cnlfY2hhcmdlKHNldik7XFxuIDI5NTpcXHRcXHRpZiAocmV0KVxcbiAyOTY6XFx0XFx0XFx0Z290byBlX3B1dF9jZztcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0YXNpZCA9IHNldl9hbGxvY19hc2lkKG1pbl9hc2lkLCBtYXhfYXNpZCk7XFxuIDI5OTpcXHRcXHRpZiAoYXNpZCBcXHUwMDNlIG1heF9hc2lkKSB7XFxuIDMwMDpcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIDMwMTpcXHRcXHRcXHRnb3RvIGVfdW5jaGFyZ2U7XFxuIDMwMjpcXHRcXHR9XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdHNldi1cXHUwMDNlYXNpZCA9IGFzaWQ7XFxuIDMwNTpcXHRcXHRyZXR1cm4gMDtcXG4gMzA2OlxcdFxcbiAzMDc6XFx0ZV91bmNoYXJnZTpcXG4gMzA4OlxcdFxcdHNldl9taXNjX2NnX3VuY2hhcmdlKHNldik7XFxuIDMwOTpcXHRlX3B1dF9jZzpcXG4gMzEwOlxcdFxcdHB1dF9taXNjX2NnKHNldi1cXHUwMDNlbWlzY19jZyk7XFxuIDMxMTpcXHRcXHRzZXYtXFx1MDAzZW1pc2NfY2cgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MTo0OS43MTUwMzQ1MTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MzE0Mjk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRHJpdmVyIElzc3VlKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGNvbmRpdGlvbmFsIGNoZWNrOiBgbWluX3NucF9hc2lkIFx1MDAzZSBtYXhfc25wX2FzaWRgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIHByb2JsZW0uIElmIHRoaXMgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLCB0aGUgY29kZSBpcyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIHJldHVybiBgLUVOT1RUWWAuIFRoYXQncyB0aGUga2V5IGJlaGF2aW9yIHRvIHVuZGVyc3RhbmQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCAqd2h5KiB0aGlzIHNjZW5hcmlvIHdvdWxkIGFyaXNlLCBiZWNhdXNlIGEgbmVnYXRpdmUgcmV0dXJuIGxpa2UgYC1FTk9UVFlgIHN1Z2dlc3RzIGFuICp1bmV4cGVjdGVkKiBvciBpbmFwcHJvcHJpYXRlIG9wZXJhdGlvbi4gSSBrbm93IHRoYXQgdXN1YWxseSBpbmRpY2F0ZXMgYW4gaW5hcHByb3ByaWF0ZSBpb2N0bCByZXF1ZXN0LlxuXG5UaGUgY3J1eCBvZiB0aGUgbWF0dGVyIHRoZW4gYmVjb21lczogaG93IGFyZSBgbWluX3NucF9hc2lkYCBhbmQgYG1heF9zbnBfYXNpZGAgaW5pdGlhbGl6ZWQ/IFdoZXJlIGFuZCBob3cgYXJlIHRoZXNlIHZhbHVlcyBwb3B1bGF0ZWQ/IFdoYXQgY29kZSBwYXRoIHNldHMgdGhlbSwgYW5kIHdoYXQgZG9lcyB0aGUgZGF0YSB0aGV5IHJlcHJlc2VudCAqYWN0dWFsbHkqIG1lYW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIGRyaXZlciBhbmQgdGhlIGhhcmR3YXJlIGl0IGNvbnRyb2xzPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGFueSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIHBvaW50cyBmb3IgdGhlc2UgdHdvIHZhcmlhYmxlcy4gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbj8gQSBsb2dpYyBlcnJvciBpbiBjYWxjdWxhdGluZyByYW5nZXM/IEFyZSB0aGVzZSBzdXBwb3NlZCB0byByZXByZXNlbnQgYW4gKmludmVydGVkKiByYW5nZSwgb3IgaXMgdGhpcyBqdXN0IGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGU/IFRoZSBhbnN3ZXIgbGllcyBpbiB0aGUgc291cmNlIGNvZGU7IEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZXNlIHZhcmlhYmxlcyBhbmQgdHJhY2UgdGhlaXIgdXNhZ2UuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIHVudGlsIEkgdW5kZXJzdGFuZCBob3cgdGhlc2UgdmFyaWFibGVzIGVuZCB1cCBpbiBhIHN0YXRlIHRoYXQgY291bGQgdHJpZ2dlciBgLUVOT1RUWWAuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciBjb25maXJtIGEgYnVnIG9yIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjb25kaXRpb24gd291bGQgKmV2ZXIqIGJlIG1ldCBhbmQgaWYgYC1FTk9UVFlgIGlzIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0ODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQxOjU2Ljc1ODE4MDYzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4OTY0ODU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fc25wX2FzaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMDM9c3RhdGljIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMDQ6c3RhdGljIHVuc2lnbmVkIGludCBtaW5fc25wX2FzaWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMDUtc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V2X21lX21hc2s7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2Mj1zdGF0aWMgaW50IHNldl9hc2lkX25ldyhzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYsIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcxLVxcdGlmICh2bV90eXBlID09IEtWTV9YODZfU05QX1ZNKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzI6XFx0XFx0bWluX2FzaWQgPSBtaW5fc25wX2FzaWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzMtXFx0XFx0bWF4X2FzaWQgPSBtYXhfc25wX2FzaWQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNjg9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNjUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTY2OlxcdG1pbl9zZXZfZXNfYXNpZCA9IG1pbl9zbnBfYXNpZCA9IDE7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTY3LVxcdG1heF9zZXZfZXNfYXNpZCA9IG1heF9zbnBfYXNpZCA9IG1pbl9zZXZfYXNpZCAtIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMjItXFx0XFx0XFx0c3RyX2VuYWJsZWRfZGlzYWJsZWQoc2V2X3NucF9zdXBwb3J0ZWQpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIyMzpcXHRcXHRcXHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MTo1OS4xNDc4Mzc1MTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0OTU5NjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBtZW50YWwgZ2VhcnMgYXJlIHN0YXJ0aW5nIHRvIHR1cm4uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgYXJlYS4gV2hlbiBJIHNlZSB0aGF0IG5vdGF0aW9uLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgc2V2X2hhcmR3YXJlX3NldHVwYC4gSSBzZWUgdGhhdCBwaHJhc2UsIEkgdGhpbmsgb2YgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBzZWN1cmUgdmlydHVhbCBtYWNoaW5lIGVudmlyb25tZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBsaW5lZCB1cCBjb3JyZWN0bHkgZnJvbSB0aGUgdmVyeSBzdGFydC4gSXMgdGhlIGhhcmR3YXJlIGFwcHJvcHJpYXRlbHkgcHJvdmlzaW9uZWQ/IEFyZSB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzIGVuYWJsZWQgYXQgdGhlIGZpcm13YXJlIGxldmVsPyBBcmUgdGhlIGtleXMgcHJvcGVybHkgaW5qZWN0ZWQ/IFRoaXMgaXMgd2hlcmUgZXZlcnl0aGluZyBiZWdpbnMuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgYWxsIHN0aWxsIGxvb2tpbmcgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOTEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MjowMi43OTc0MzY3MTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA2OCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNjg6XFx0dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuMzA2OTpcXHR7XFxuMzA3MDpcXHRcXHR1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4LCBzZXZfYXNpZF9jb3VudCwgc2V2X2VzX2FzaWRfY291bnQ7XFxuMzA3MTpcXHRcXHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XFxuMzA3MjpcXHRcXHRib29sIHNldl9zbnBfc3VwcG9ydGVkID0gZmFsc2U7XFxuMzA3MzpcXHRcXHRib29sIHNldl9lc19zdXBwb3J0ZWQgPSBmYWxzZTtcXG4zMDc0OlxcdFxcdGJvb2wgc2V2X3N1cHBvcnRlZCA9IGZhbHNlO1xcbjMwNzU6XFx0XFxuMzA3NjpcXHRcXHRpZiAoIXNldl9lbmFibGVkIHx8ICFucHRfZW5hYmxlZCB8fCAhbnJpcHMpXFxuMzA3NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4zMDc4OlxcdFxcbjMwNzk6XFx0XFx0LypcXG4zMDgwOlxcdFxcdCAqIFNFViBtdXN0IG9idmlvdXNseSBiZSBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuICBTYW5pdHkgY2hlY2sgdGhhdCB0aGVcXG4zMDgxOlxcdFxcdCAqIENQVSBzdXBwb3J0cyBkZWNvZGUgYXNzaXN0cywgd2hpY2ggaXMgbWFuZGF0b3J5IGZvciBTRVYgZ3Vlc3RzIHRvXFxuMzA4MjpcXHRcXHQgKiBzdXBwb3J0IGluc3RydWN0aW9uIGVtdWxhdGlvbi4gIERpdHRvIGZvciBmbHVzaGluZyBieSBBU0lELCBhcyBTRVZcXG4zMDgzOlxcdFxcdCAqIGd1ZXN0cyBhcmUgYm91bmQgdG8gYSBzaW5nbGUgQVNJRCwgaS5lLiBLVk0gY2FuJ3Qgcm90YXRlIHRvIGEgbmV3XFxuMzA4NDpcXHRcXHQgKiBBU0lEIHRvIGVmZmVjdCBhIFRMQiBmbHVzaC5cXG4zMDg1OlxcdFxcdCAqL1xcbjMwODY6XFx0XFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWKSB8fFxcbjMwODc6XFx0XFx0ICAgIFdBUk5fT05fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpKSB8fFxcbjMwODg6XFx0XFx0ICAgIFdBUk5fT05fT05DRSghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZMVVNIQllBU0lEKSkpXFxuMzA4OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4zMDkwOlxcdFxcbjMwOTE6XFx0XFx0LypcXG4zMDkyOlxcdFxcdCAqIFRoZSBrZXJuZWwncyBpbml0Y2FsbCBpbmZyYXN0cnVjdHVyZSBsYWNrcyB0aGUgYWJpbGl0eSB0byBleHByZXNzXFxuMzA5MzpcXHRcXHQgKiBkZXBlbmRlbmNpZXMgYmV0d2VlbiBpbml0Y2FsbHMsIHdoZXJlYXMgdGhlIG1vZHVsZXMgaW5mcmFzdHJ1Y3R1cmVcXG4zMDk0OlxcdFxcdCAqIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBkZXBlbmRlbmNpZXMgdmlhIHN5bWJvbCBsb2FkaW5nLiAgRW5zdXJlIHRoZVxcbjMwOTU6XFx0XFx0ICogUFNQIFNFViBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHByb2NlZWRpbmcgaWYgS1ZNIGlzIGJ1aWx0LWluLFxcbjMwOTY6XFx0XFx0ICogYXMgdGhlIGRlcGVuZGVuY3kgaXNuJ3QgaGFuZGxlZCBieSB0aGUgaW5pdGNhbGwgaW5mcmFzdHJ1Y3R1cmUuXFxuMzA5NzpcXHRcXHQgKi9cXG4zMDk4OlxcdFxcdGlmIChJU19CVUlMVElOKENPTkZJR19LVk1fQU1EKSBcXHUwMDI2XFx1MDAyNiBzZXZfbW9kdWxlX2luaXQoKSlcXG4zMDk5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxMDA6XFx0XFxuMzEwMTpcXHRcXHQvKiBSZXRyaWV2ZSBTRVYgQ1BVSUQgaW5mb3JtYXRpb24gKi9cXG4zMTAyOlxcdFxcdGNwdWlkKDB4ODAwMDAwMWYsIFxcdTAwMjZlYXgsIFxcdTAwMjZlYngsIFxcdTAwMjZlY3gsIFxcdTAwMjZlZHgpO1xcbjMxMDM6XFx0XFxuMzEwNDpcXHRcXHQvKiBTZXQgZW5jcnlwdGlvbiBiaXQgbG9jYXRpb24gZm9yIFNFVi1FUyBndWVzdHMgKi9cXG4zMTA1OlxcdFxcdHNldl9lbmNfYml0ID0gZWJ4IFxcdTAwMjYgMHgzZjtcXG4zMTA2OlxcdFxcbjMxMDc6XFx0XFx0LyogTWF4aW11bSBudW1iZXIgb2YgZW5jcnlwdGVkIGd1ZXN0cyBzdXBwb3J0ZWQgc2ltdWx0YW5lb3VzbHkgKi9cXG4zMTA4OlxcdFxcdG1heF9zZXZfYXNpZCA9IGVjeDtcXG4zMTA5OlxcdFxcdGlmICghbWF4X3Nldl9hc2lkKVxcbjMxMTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzExMTpcXHRcXG4zMTEyOlxcdFxcdC8qIE1pbmltdW0gQVNJRCB2YWx1ZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBTRVYgZ3Vlc3QgKi9cXG4zMTEzOlxcdFxcdG1pbl9zZXZfYXNpZCA9IGVkeDtcXG4zMTE0OlxcdFxcdHNldl9tZV9tYXNrID0gMVVMIFxcdTAwM2NcXHUwMDNjIChlYnggXFx1MDAyNiAweDNmKTtcXG4zMTE1OlxcdFxcbjMxMTY6XFx0XFx0LypcXG4zMTE3OlxcdFxcdCAqIEluaXRpYWxpemUgU0VWIEFTSUQgYml0bWFwcy4gQWxsb2NhdGUgc3BhY2UgZm9yIEFTSUQgMCBpbiB0aGUgYml0bWFwLFxcbjMxMTg6XFx0XFx0ICogZXZlbiB0aG91Z2ggaXQncyBuZXZlciB1c2VkLCBzbyB0aGF0IHRoZSBiaXRtYXAgaXMgaW5kZXhlZCBieSB0aGVcXG4zMTE5OlxcdFxcdCAqIGFjdHVhbCBBU0lELlxcbjMxMjA6XFx0XFx0ICovXFxuMzEyMTpcXHRcXHRucl9hc2lkcyA9IG1heF9zZXZfYXNpZCArIDE7XFxuMzEyMjpcXHRcXHRzZXZfYXNpZF9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKG5yX2FzaWRzLCBHRlBfS0VSTkVMKTtcXG4zMTIzOlxcdFxcdGlmICghc2V2X2FzaWRfYml0bWFwKVxcbjMxMjQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzEyNTpcXHRcXG4zMTI2OlxcdFxcdHNldl9yZWNsYWltX2FzaWRfYml0bWFwID0gYml0bWFwX3phbGxvYyhucl9hc2lkcywgR0ZQX0tFUk5FTCk7XFxuMzEyNzpcXHRcXHRpZiAoIXNldl9yZWNsYWltX2FzaWRfYml0bWFwKSB7XFxuMzEyODpcXHRcXHRcXHRiaXRtYXBfZnJlZShzZXZfYXNpZF9iaXRtYXApO1xcbjMxMjk6XFx0XFx0XFx0c2V2X2FzaWRfYml0bWFwID0gTlVMTDtcXG4zMTMwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxMzE6XFx0XFx0fVxcbjMxMzI6XFx0XFxuMzEzMzpcXHRcXHRpZiAobWluX3Nldl9hc2lkIFxcdTAwM2M9IG1heF9zZXZfYXNpZCkge1xcbjMxMzQ6XFx0XFx0XFx0c2V2X2FzaWRfY291bnQgPSBtYXhfc2V2X2FzaWQgLSBtaW5fc2V2X2FzaWQgKyAxO1xcbjMxMzU6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKG1pc2NfY2dfc2V0X2NhcGFjaXR5KE1JU0NfQ0dfUkVTX1NFViwgc2V2X2FzaWRfY291bnQpKTtcXG4zMTM2OlxcdFxcdH1cXG4zMTM3OlxcdFxcdHNldl9zdXBwb3J0ZWQgPSB0cnVlO1xcbjMxMzg6XFx0XFxuMzEzOTpcXHRcXHQvKiBTRVYtRVMgc3VwcG9ydCByZXF1ZXN0ZWQ/ICovXFxuMzE0MDpcXHRcXHRpZiAoIXNldl9lc19lbmFibGVkKVxcbjMxNDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzE0MjpcXHRcXG4zMTQzOlxcdFxcdC8qXFxuMzE0NDpcXHRcXHQgKiBTRVYtRVMgcmVxdWlyZXMgTU1JTyBjYWNoaW5nIGFzIEtWTSBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBndWVzdFxcbjMxNDU6XFx0XFx0ICogaW5zdHJ1Y3Rpb24gc3RyZWFtLCBpLmUuIGNhbid0IGVtdWxhdGUgaW4gcmVzcG9uc2UgdG8gYSAjTlBGIGFuZFxcbjMxNDY6XFx0XFx0ICogaW5zdGVhZCByZWxpZXMgb24gI05QRihSU1ZEKSBiZWluZyByZWZsZWN0ZWQgaW50byB0aGUgZ3Vlc3QgYXMgI1ZDXFxuMzE0NzpcXHRcXHQgKiAodGhlIGd1ZXN0IGNhbiB0aGVuIGRvIGEgI1ZNR0VYSVQgdG8gcmVxdWVzdCBNTUlPIGVtdWxhdGlvbikuXFxuMzE0ODpcXHRcXHQgKi9cXG4zMTQ5OlxcdFxcdGlmICghZW5hYmxlX21taW9fY2FjaGluZylcXG4zMTUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxNTE6XFx0XFxuMzE1MjpcXHRcXHQvKiBEb2VzIHRoZSBDUFUgc3VwcG9ydCBTRVYtRVM/ICovXFxuMzE1MzpcXHRcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfRVMpKVxcbjMxNTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzE1NTpcXHRcXG4zMTU2OlxcdFxcdGlmICghbGJydikge1xcbjMxNTc6XFx0XFx0XFx0V0FSTl9PTkNFKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEJSViksXFxuMzE1ODpcXHRcXHRcXHRcXHQgIFxcXCJMQlJWIG11c3QgYmUgcHJlc2VudCBmb3IgU0VWLUVTIHN1cHBvcnRcXFwiKTtcXG4zMTU5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxNjA6XFx0XFx0fVxcbjMxNjE6XFx0XFxuMzE2MjpcXHRcXHQvKiBIYXMgdGhlIHN5c3RlbSBiZWVuIGFsbG9jYXRlZCBBU0lEcyBmb3IgU0VWLUVTPyAqL1xcbjMxNjM6XFx0XFx0aWYgKG1pbl9zZXZfYXNpZCA9PSAxKVxcbjMxNjQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzE2NTpcXHRcXG4zMTY2OlxcdFxcdG1pbl9zZXZfZXNfYXNpZCA9IG1pbl9zbnBfYXNpZCA9IDE7XFxuMzE2NzpcXHRcXHRtYXhfc2V2X2VzX2FzaWQgPSBtYXhfc25wX2FzaWQgPSBtaW5fc2V2X2FzaWQgLSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MjowMi43OTc3ODMzNTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwOTYxMzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTRVYgSGFyZHdhcmUgU2V0dXAgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgU0VWIGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkLiBUaGUgY29kZSBzdGFydHMgd2l0aCBgc2V2X2hhcmR3YXJlX3NldHVwYCwgd2hpY2ggaW1tZWRpYXRlbHkgY2hlY2tzIGlmIHRoZSBib290IENQVSBzdXBwb3J0cyBTRVYgdXNpbmcgYGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVYpYC4gSWYgU0VWIGlzbid0IHByZXNlbnQsIGl0IGp1bXBzIHN0cmFpZ2h0IHRvIGBvdXRgLiAgVGhhdCdzIGltcG9ydGFudC5cblxuTm93LCBpZiB3ZSBoaXQgdGhhdCBgb3V0YCBwYXRoLCAgYG1pbl9zbnBfYXNpZGAgaXMgbGVmdCBhdCB6ZXJvLiBXaGljaCBtZWFucyBsYXRlciB3aGVuIGBzZXZfYXNpZF9uZXdgIGlzIGNhbGxlZCwgaXQgd2lsbCBiZSBoYW5kZWQgYSBgbWluX2FzaWRgIGFuZCBgbWF4X2FzaWRgIG9mIHplcm8uXG5cbkhhbmcgb24uLi4gdGhlbiB3ZSBoYXZlIGBtaW5fYXNpZCBcdTAwM2UgbWF4X2FzaWRgLCB3aGljaCBpcyBgMCBcdTAwM2UgMGDigJQgdGhhdCBldmFsdWF0ZXMgdG8gZmFsc2UuIFNvIGBzZXZfYWxsb2NfYXNpZGAgaXMgdGhlbiBjYWxsZWQgd2l0aCAwLCAwLiBJIG5lZWQgdG8gZGlnIGludG8gYHNldl9hbGxvY19hc2lkYCBub3cgYW5kIHNlZSB3aGF0IGl0IGRvZXMgd2l0aCB0aGlzIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMwMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjA4LjEwNzQwMTE0N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjU5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcXG4gMjQxOlxcdHtcXG4gMjQyOlxcdFxcdHVuc2lnbmVkIGludCBhc2lkO1xcbiAyNDM6XFx0XFx0Ym9vbCByZXRyeSA9IHRydWU7XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2c2V2X2JpdG1hcF9sb2NrKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0YWdhaW46XFxuIDI0ODpcXHRcXHRhc2lkID0gZmluZF9uZXh0X3plcm9fYml0KHNldl9hc2lkX2JpdG1hcCwgbWF4X2FzaWQgKyAxLCBtaW5fYXNpZCk7XFxuIDI0OTpcXHRcXHRpZiAoYXNpZCBcXHUwMDNlIG1heF9hc2lkKSB7XFxuIDI1MDpcXHRcXHRcXHRpZiAocmV0cnkgXFx1MDAyNlxcdTAwMjYgX19zZXZfcmVjeWNsZV9hc2lkcyhtaW5fYXNpZCwgbWF4X2FzaWQpKSB7XFxuIDI1MTpcXHRcXHRcXHRcXHRyZXRyeSA9IGZhbHNlO1xcbiAyNTI6XFx0XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gMjUzOlxcdFxcdFxcdH1cXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0XFx0cmV0dXJuIGFzaWQ7XFxuIDI1NjpcXHRcXHR9XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdF9fc2V0X2JpdChhc2lkLCBzZXZfYXNpZF9iaXRtYXApO1xcbiAyNTk6XFx0XFx0cmV0dXJuIGFzaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjA4LjEwNzczMDA2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgxNDIzOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTRVYgSW5pdGlhbGl6YXRpb24gYW5kIEVycm9yIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIGNyYXNoIHNjZW5hcmlvIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBJZiBgc2V2X2FzaWRfYml0bWFwYCBpcyBOVUxMLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgYHNldl9oYXJkd2FyZV9zZXR1cGAgZmFpbHMsIHRoZW4gY2FsbGluZyBgZmluZF9uZXh0X3plcm9fYml0YCBvbiB0aGF0IG51bGwgcG9pbnRlciBpcyBnb2luZyB0byBiZSBhIHByb2JsZW0uIFRoYXQncyBhIGNsYXNzaWMgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhbmQgd2UnbGwgZWl0aGVyIGNyYXNoIG9yIGdldCBzb21lIGdhcmJhZ2UgdmFsdWUgYmFjay4gQnV0IHdhaXQgYSBtaW51dGUuLi4gaWYgYHNldl9oYXJkd2FyZV9zZXR1cGAgZmFpbHMsIGRvZXNuJ3QgdGhhdCBtZWFuIGBzZXZfc3VwcG9ydGVkYCBnZXRzIHNldCB0byBmYWxzZT8gT2theSwgZ29vZC4gVGhhdCdzIGFuIGltcG9ydGFudCBjaGVjay5cblxuTm93LCBhIHF1ZXN0aW9uIGlzIHBvcHBpbmcgaW50byBteSBoZWFkOiBJcyBgS1ZNX1NFVl9JTklUMmAgZXZlbiBhbGxvd2VkIHRvIGJlIGNhbGxlZCBpZiBgc2V2X3N1cHBvcnRlZGAgaXMgZmFsc2U/IEkgbmVlZCB0byBjaGVjayB0aGUgbG9naWMgYXJvdW5kIGBzZXZfZ3Vlc3RfaW5pdDJgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyaXZlciBjb3JyZWN0bHkgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIFNFViBpc24ndCBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiBMZXQncyBzZWUgaG93IHRoYXQncyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAwOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6MTEuODg5MTU3ODE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMzNDc0ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9ndWVzdF9pbml0MlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU3OD1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ1PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjgxLVxcdGNhc2UgS1ZNX1NFVl9JTklUMjpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2ODI6XFx0XFx0ciA9IHNldl9ndWVzdF9pbml0Mihrdm0sIFxcdTAwMjZzZXZfY21kKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2ODMtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjE0LjUyMjY0Mjk2OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjUwODAyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgc2V2X2d1ZXN0X2luaXQyYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgc2V2X2d1ZXN0X2luaXQyYC4gSSdtIHN0YXJ0aW5nIGhlcmUgYmVjYXVzZSBpdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gZmxvdywgYW5kIEkgbmVlZCBhIHN0cm9uZyBncmFzcCBvZiBpdC4gSSdtIGZvY3VzaW5nIG9uIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBiZWNhdXNlIGEgZnVuZGFtZW50YWwgaXNzdWUgb2Z0ZW4gbWFuaWZlc3RzIGl0c2VsZiBlYXJseSwgbWFraW5nIHRoaXMgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBrZXkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNFVi1zcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBoZXJlLCBsaWtlbHkgZGVhbGluZyB3aXRoIG1lbW9yeSBlbmNyeXB0aW9uIHNldHVwLCBrZXkgZGVyaXZhdGlvbiAoaWYgaXQgZXhpc3RzIGF0IHRoaXMgcG9pbnQpLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUgaW5pdGlhbCBhdHRlc3RhdGlvbi1yZWxhdGVkIHN0cnVjdHVyZXMuIEkga25vdyB0aGUgQU1EIGRvY3VtZW50YXRpb24sIGFuZCBwYXN0IGV4cGVyaWVuY2VzIHdpdGggdGhlIGtlcm5lbCBjb2RlLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBkZXZpYXRpb24gZnJvbSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIEknbGwgbWVudGFsbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24ncyBjcml0aWNhbCBwYXRocywgYW5kIEknbSBwcmVwYXJlZCB0byBkaXZlIGludG8gYW55IHN1cHBvcnRpbmcgZnVuY3Rpb25zIHRoYXQgYHNldl9ndWVzdF9pbml0MmAgY2FsbHMsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIHRoZSBoeXBlcnZpc29yIGNvbW11bmljYXRpb24gb3IgdGhlIGhhcmR3YXJlIHJlZ2lzdGVyIHNldHVwLiBBbnkgdW5leHBlY3RlZCBtZW1vcnkgYWNjZXNzZXMgb3IgcmVnaXN0ZXIgdmFsdWVzIGhlcmUgd2lsbCBiZSBpbW1lZGlhdGVseSBmbGFnZ2VkLiBJIG5lZWQgdG8gZ2V0IHRoaXMgaW5pdGlhbGl6YXRpb24gcmlnaHQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6MjAuNzczNDQ4MzEzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMTpcXHRzdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4gNjAyOlxcdHtcXG4gNjAzOlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luaXQgZGF0YTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0aWYgKCF0b19rdm1fc2V2X2luZm8oa3ZtKS1cXHUwMDNlbmVlZF9pbml0KVxcbiA2MDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDYwNzpcXHRcXG4gNjA4OlxcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTSBcXHUwMDI2XFx1MDAyNlxcbiA2MDk6XFx0XFx0ICAgIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU0VWX0VTX1ZNIFxcdTAwMjZcXHUwMDI2XFxuIDYxMDpcXHRcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuIDYxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZkYXRhLCB1NjRfdG9fdXNlcl9wdHIoYXJncC1cXHUwMDNlZGF0YSksIHNpemVvZihkYXRhKSkpXFxuIDYxNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjE1OlxcdFxcbiA2MTY6XFx0XFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcXHUwMDI2ZGF0YSwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbiA2MTc6XFx0fVxcbiA2MTg6XFx0XFxuIDYxOTpcXHRzdGF0aWMgaW50IHNldl9iaW5kX2FzaWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaGFuZGxlLCBpbnQgKmVycm9yKVxcbiA2MjA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MjoyMC43NzM3ODg5MjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MTg4OTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtWTSBWTSBUeXBlIGFuZCBIYXJkd2FyZSBTdXBwb3J0KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYGt2bS1cdTAwM2VhcmNoLnZtX3R5cGVgIHZhcmlhYmxlLCBhbmQgaXQgKmhhcyogdG8gYmUgc2V0IHRvIGBLVk1fWDg2X1NOUF9WTWAsIHJpZ2h0PyBUaGF0J3Mgd2hhdCBJJ20gYXNzdW1pbmcuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB3ZSBhY3R1YWxseSAqY3JlYXRlKiBhIHZpcnR1YWwgbWFjaGluZSB3aXRoIHRoYXQgc3BlY2lmaWMgdHlwZSwgYEtWTV9YODZfU05QX1ZNYCwgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKmRvZXNuJ3QqIGFjdHVhbGx5IHN1cHBvcnQgaXQ/IFRoYXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlLCBhbmQgb25lIHRoYXQgc2hvdWxkIHByb2JhYmx5IGJlIGd1YXJkZWQgYWdhaW5zdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBLVk0gY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBga3ZtX2FyY2hfaW5pdF92bWAgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGVyZSB0aGUgVk0gaXMgaW5pdGlhbGl6ZWQsIHRvIHNlZSBpZiB0aGVyZSdzIGFueSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhpcyBWTSB0eXBlIGFuZCB0aGUgaGFyZHdhcmUncyBjYXBhYmlsaXRpZXMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQgbmVlZHMgdG8gYmUgY2hlY2tlZCwgYnV0IEkgaGF2ZSB0byBtYWtlIHN1cmUuIEknbGwgY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzMjAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjI0LjczNTY4MTA2OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwODY2Mzk2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1NOUF9WTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcxLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjI9c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI3MTpcXHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcyLVxcdFxcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODg9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTQtXFx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk1OlxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTYtXFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDE9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYwOS1cXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMDpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5NDY9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTEtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTUyOlxcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTUzLVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDI1PXZvaWQgX19pbml0IHNldl9zZXRfY3B1X2NhcHModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzAzNi1cXHRcXHRrdm1fY3B1X2NhcF9zZXQoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDM3OlxcdFxcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzAzOC1cXHR9XFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcxLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zZXZfc25wX3ZtKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oOjM2OlxcdHJldHVybiB2bS1cXHUwMDNldHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzctfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3MD1zdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDcyLSNpZmRlZiBfX3g4Nl82NF9fXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MzpcXHRyZXR1cm4gc2hhcGUudHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDc0LSNlbHNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz03ND12b2lkIHNucF92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM6Nzg6XFx0VEVTVF9BU1NFUlRfRVEodm0tXFx1MDAzZXR5cGUsIEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03OS1cXHR2bV9zZXZfaW9jdGwodm0sIEtWTV9TRVZfSU5JVDIsIFxcdTAwMjZpbml0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTg3LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4OlxcdFxcdHRlc3RfaW5pdDIoS1ZNX1g4Nl9TTlBfVk0sIFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7fSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9MTIyPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0NS1cXHRoYXZlX3NucCA9IGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTQ2OlxcdFRFU1RfQVNTRVJUKGhhdmVfc25wID09ICEhKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0Ny1cXHRcXHQgICAgXFxcInNldi1zbnA6IEtWTV9DQVBfVk1fVFlQRVMgKCV4KSBpbmRpY2F0ZXMgU05QIHN1cHBvcnQgKGJpdCAlZCksIGJ1dCBDUFVJRCBkb2VzIG5vdFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYzoxNDg6XFx0XFx0ICAgIGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUyksIEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTU1LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NjpcXHRcXHR0ZXN0X2ZsYWdzKEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTYxLVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE2MjpcXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNjMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3Ntb2tlKHZvaWQgKmd1ZXN0LCB1MzIgdHlwZSwgdTY0IHBvbGljeSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIyNTpcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI2LVxcdFxcdHRlc3Rfc2V2KGd1ZXN0LCB0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjM4LVxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIzOTpcXHRcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjQwLVxcdFxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yNDY9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNTUtXFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYzoyNTY6XFx0XFx0dGVzdF9zZXZfc21va2UoZ3Vlc3Rfc25wX2NvZGUsIEtWTV9YODZfU05QX1ZNLCBzbnBfZGVmYXVsdF9wb2xpY3koKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTI1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6MjcuMzQ0MzU3NjUxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNjEzNDgwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIGFuZCBTRVYtU05QIFZNIENyZWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBLVk1fWDg2X1NOUF9WTWAgdmlydHVhbCBtYWNoaW5lIHR5cGUgaXMgKm9ubHkqIGdvaW5nIHRvIGJlIGF2YWlsYWJsZSBpZiB0aGUgc3lzdGVtIGluZGljYXRlcyBzdXBwb3J0IHZpYSBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSlgLiBBbmQgdGhhdCBzdXBwb3J0IGZsYWcgZ2V0cyBzZXQgd2l0aGluIGBzZXZfc2V0X2NwdV9jYXBzYCwgYnV0ICpvbmx5KiBpZiB0aGUgdW5kZXJseWluZyBDUFUgcmVwb3J0cyB0aGUgYFg4Nl9GRUFUVVJFX1NFVl9TTlBgIGZlYXR1cmUgdXNpbmcgYGJvb3RfY3B1X2hhcygpYC4gSW4gb3RoZXIgd29yZHMsIG5vIFNFVi1TTlAgc3VwcG9ydCBmcm9tIHRoZSBoYXJkd2FyZSwgbm8gYEtWTV9YODZfU05QX1ZNYC4gVGhpcyBtYWtlcyBzZW5zZSwgYXMgd2l0aG91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBmZWF0dXJlcywgdGhlIHNvZnR3YXJlIGNhbid0IHBvc3NpYmx5IHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkuXG5cblNvLCBpZiB3ZSAqZG9uJ3QqIGhhdmUgdGhhdCBoYXJkd2FyZS1sZXZlbCBTRVYtU05QIHN1cHBvcnQsIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgVk0gd2l0aCBgS1ZNX0NSRUFURV9WTWAgYW5kIHNwZWNpZnlpbmcgYEtWTV9YODZfU05QX1ZNYCBpcyBnb2luZyB0byBmYWlsLCByaWdodD8gSXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gVGhlIEtWTSBsYXllciBpcyBjb3JyZWN0bHkgZW5mb3JjaW5nIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudHMuXG5cbkdpdmVuIHRoYXQsIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIGNvbmZpcm0gdGhpcyBpcyB0byBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm1gLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgY2FsbCBoYW5kbGVzIHRoZSBgS1ZNX1g4Nl9TTlBfVk1gIHR5cGUgYW5kIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIHVuZGVybHlpbmcgY2FwYWJpbGl0aWVzLiBNeSBzdXNwaWNpb24gaXMgdGhhdCBpdCBkaXJlY3RseSBsZXZlcmFnZXMgdGhlIGBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXNgIGZsYWcuIEl0IHNob3VsZCBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6MzUuNTA1NzA5OTM1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcxMzYzNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9NTQ3OD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZmlsZV9pc19rdm0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3OS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0ODA6c3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXFxudmlydC9rdm0va3ZtX21haW4uYy01NDgxLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NTUyMz1zdGF0aWMgbG9uZyBrdm1fZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NTM0LVxcdGNhc2UgS1ZNX0NSRUFURV9WTTpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU1MzU6XFx0XFx0ciA9IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKGFyZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy01NTM2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MjozNy44NzcwODY0MzNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg2NDg5MDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHdoZXJlIHRoaXMgZnVuY3Rpb24gc2l0cyB3aXRoaW4gdGhlIGxhcmdlciBLVk0gYXJjaGl0ZWN0dXJlLiBJdCdzIGxpa2VseSBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBjcmVhdGluZyBhIHZpcnR1YWwgbWFjaGluZSwgcmlnaHQ/ICBUaGUgbmFtZSBgaW9jdGxgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBzeXN0ZW0gY2FsbCBoYW5kbGVyIHdpdGhpbiB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIEtWTSwgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGZvciB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGludGVyYWN0IHdpdGggdGhlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGV4cG9zZWQgYnkgdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCdzIHVzZWQgdG8gY29tbXVuaWNhdGUgdmlhIHRoZSBgL2Rldi9rdm1gIGZpbGUuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBwdXJwb3NlIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIHNldHVwIHJlcXVpcmVkIHRvIGVzdGFibGlzaCBhIG5ldyBWTSBpbnN0YW5jZS4gSXQgcHJvYmFibHkgcGVyZm9ybXMgY2hlY2tzIHRvIHZhbGlkYXRlIGFueSBhcmd1bWVudHMgcGFzc2VkIHZpYSB0aGUgYGlvY3RsYCBjYWxsIGZyb20gdXNlci1zcGFjZTsgc3VjaCBhcyBtZW1vcnkgYWxsb2NhdGlvbiwgc2V0dXAgb2YgdGhlIFZNIHN0cnVjdHVyZSBhbmQgaW5pdGlhbCBzZXR1cCBvZiB0aGUgVk0uXG5cbkknbGwgd2FudCB0byB0cmFjZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMuICBTcGVjaWZpY2FsbHksIGlzIHRoZXJlIGEgY2FsbCB0byBga3ZtX3ZtX2FsbG9jYCwgb3Igc2ltaWxhci4gSSdkIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQgaW50ZXJhY3RzIHdpdGggdGhpbmdzIGxpa2UgdkNQVSBjcmVhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIGV2ZW4gaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgKGxpa2UgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcyBpZiBlbmFibGVkKS4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBjcmVhdGVkIFZNLCBlc3BlY2lhbGx5IGhvdyB0aGUgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IHRoZSBhc3NvY2lhdGVkIE1NVSBvciBzaGFkb3cgcGFnZSB0YWJsZXMuXG5cblVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGZvdW5kYXRpb25hbCBmdW5jdGlvbi4gQW55IGRlZXAgZGl2ZSBpbnRvIGEgS1ZNIGltcGxlbWVudGF0aW9uIHdpbGwsIGF0IHNvbWUgcG9pbnQsIGludm9sdmUgbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSB0aGVzZSBpbml0aWFsIGFzc3VtcHRpb25zIGFuZCB0byBidWlsZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTMwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDI6NDUuNzQxOTgwMzIzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0ODA6XFx0c3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXFxuNTQ4MTpcXHR7XFxuNTQ4MjpcXHRcXHRjaGFyIGZkbmFtZVtJVE9BX01BWF9MRU4gKyAxXTtcXG41NDgzOlxcdFxcdGludCByLCBmZDtcXG41NDg0OlxcdFxcdHN0cnVjdCBrdm0gKmt2bTtcXG41NDg1OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbjU0ODY6XFx0XFxuNTQ4NzpcXHRcXHRmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTtcXG41NDg4OlxcdFxcdGlmIChmZCBcXHUwMDNjIDApXFxuNTQ4OTpcXHRcXHRcXHRyZXR1cm4gZmQ7XFxuNTQ5MDpcXHRcXG41NDkxOlxcdFxcdHNucHJpbnRmKGZkbmFtZSwgc2l6ZW9mKGZkbmFtZSksIFxcXCIlZFxcXCIsIGZkKTtcXG41NDkyOlxcdFxcbjU0OTM6XFx0XFx0a3ZtID0ga3ZtX2NyZWF0ZV92bSh0eXBlLCBmZG5hbWUpO1xcbjU0OTQ6XFx0XFx0aWYgKElTX0VSUihrdm0pKSB7XFxuNTQ5NTpcXHRcXHRcXHRyID0gUFRSX0VSUihrdm0pO1xcbjU0OTY6XFx0XFx0XFx0Z290byBwdXRfZmQ7XFxuNTQ5NzpcXHRcXHR9XFxuNTQ5ODpcXHRcXG41NDk5OlxcdFxcdGZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUoXFxcImt2bS12bVxcXCIsIFxcdTAwMjZrdm1fdm1fZm9wcywga3ZtLCBPX1JEV1IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mjo0NS43NDIyMTAwNDNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyMzkzOTAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYGt2bV9jcmVhdGVfdm1gKipcblxuQWxyaWdodCwgdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBhbmFseXplIGBrdm1fY3JlYXRlX3ZtYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIHByb2Nlc3MsIGFuZCB0aHVzLCBwcmV0dHkgY3J1Y2lhbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IHRoZSBjb3JlIHJlc3BvbnNpYmlsaXRpZXMgb2YgdGhpcyBmdW5jdGlvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgYSBuZXcgdmlydHVhbCBtYWNoaW5lIGlzLCBlZmZlY3RpdmVseSwgXCJib3JuXCIgd2l0aGluIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZXMgYWZmZWN0ZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSBhbGxvY2F0aW9uIG9mIFZNLXNwZWNpZmljIG1lbW9yeSwgc2V0dXAgb2YgdGhlIGNvbnRyb2wgc3RydWN0dXJlcywgYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBndWVzdCdzIGV4ZWN1dGlvbiBjb250ZXh0LiBJIGFsc28gd2FudCB0byBjb25zaWRlciB3aGljaCByZXNvdXJjZSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMgYXJlIGludm9sdmVkLlxuXG5JJ2xsIGJlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QncyBNTVUsIHRoZSBzZXR0aW5nIHVwIG9mIHRoZSBWTSdzIGFkZHJlc3Mgc3BhY2UsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGFyb3VuZCBpbml0aWFsIGd1ZXN0IHN0YXRlLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSB2Q1BVKHMpIGFyZSBjcmVhdGVkIGFuZCBhc3NpZ25lZCB0byB0aGlzIFZNLiBBcmUgdGhlcmUgYW55IGluaXRpYWwgY2hlY2tzIGRvbmUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBhZGVxdWF0ZSByZXNvdXJjZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgZmFpbHVyZXM/IFRoZSBlcnJvciBoYW5kbGluZyBpcyBhbHdheXMgYW4gaW1wb3J0YW50IGFzcGVjdCBvZiBhbnkgY3JpdGljYWwgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSBpbiBhIHN5c3RlbSBhcyBzZW5zaXRpdmUgYXMgYSBoeXBlcnZpc29yLiBGdXJ0aGVybW9yZSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMsIGFuZCBpZiBzbywgaG93PyBMZXQncyBjaGVjayB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODc5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mjo0OS45NjYxNTIyNjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDM3NDg2MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NyZWF0ZV92bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTk3OT1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6OTk3OnN0YXRpYyBpbnQga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk4LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5Nj1zdGF0aWMgdm9pZCBrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbih2b2lkKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEwOTctXFxudmlydC9rdm0va3ZtX21haW4uYzoxMDk4OnN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTA5OS17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMzEtXFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTEzMjpcXHQgKiBpcyBub3QgY3JlYXRlZCAoYnkga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKCkpLlxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEzMy1cXHQgKi9cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE5NS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExOTY6XFx0ciA9IGt2bV9jcmVhdGVfdm1fZGVidWdmcyhrdm0sIGZkbmFtZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xMTk3LVxcdGlmIChyKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01NDgwPXN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NDkyLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ5MzpcXHRrdm0gPSBrdm1fY3JlYXRlX3ZtKHR5cGUsIGZkbmFtZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01NDk0LVxcdGlmIChJU19FUlIoa3ZtKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mjo1NC40Njk5MTA2NzVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MzE2MTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGt2bV9jcmVhdGVfdm1gKipcblxuQWxyaWdodCwgdGhlIGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGt2bV9jcmVhdGVfdm1gIGltcGxlbWVudGF0aW9uLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIGJlZ2lucywgcmlnaHQ/IEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSB3b3Jrcy4gV2UgbmVlZCB0byBkaXNzZWN0IHRoZSBjb3JlIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUgY3JlYXRpb24gcHJvY2VzcyBmcm9tIGEgS1ZNIHBlcnNwZWN0aXZlLiBJJ20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncz8gQW55IGFyZWFzIHRoYXQgbWlnaHQgYmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3M/IEFyZSB0aGV5IGltcGxlbWVudGluZyB0aGUgdXN1YWwgY2hlY2tzIGFuZCBiYWxhbmNlcyB0byBtYWtlIGl0IHNlY3VyZT8gTGV0J3MgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMgYW5kIGlkZW50aWZ5IHRoZSBzYWxpZW50IHBvaW50cy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB3ZSdsbCBzZWUgY2FsbHMgdG8gYWxsb2NhdGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgaW5pdGlhbGl6ZSByZWxldmFudCBLVk0gc3RydWN0dXJlcywgc2V0IHVwIG1lbW9yeSByZWdpb25zLCBhbmQgcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGNoZWNrcyB0byBlbnN1cmUgc3lzdGVtIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlIGFuZCB0aGF0IHRoZSByZXF1ZXN0ZWQgVk0gY29uZmlndXJhdGlvbiBpcyB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3NDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mjo1OC4yNjMwNzQ4MzNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5ODpcXHRzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcXG4xMDk5OlxcdHtcXG4xMTAwOlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XFxuMTEwMTpcXHRcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcXG4xMTAyOlxcdFxcdGludCByLCBpLCBqO1xcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRpZiAoIWt2bSlcXG4xMTA1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjExMDY6XFx0XFxuMTEwNzpcXHRcXHRLVk1fTU1VX0xPQ0tfSU5JVChrdm0pO1xcbjExMDg6XFx0XFx0bW1ncmFiKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4xMTA5OlxcdFxcdGt2bS1cXHUwMDNlbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4xMTEwOlxcdFxcdGt2bV9ldmVudGZkX2luaXQoa3ZtKTtcXG4xMTExOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuMTExMjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWlycV9sb2NrKTtcXG4xMTEzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuMTExNDpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuMTExNTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xcbjExMTY6XFx0XFx0cmN1d2FpdF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZW1uX21lbXNsb3RzX3VwZGF0ZV9yY3V3YWl0KTtcXG4xMTE3OlxcdFxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNldmNwdV9hcnJheSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQyOjU4LjI2MzQ1NDEwMloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ2OTM1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgVHlwZSBDaGVjayoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEknbSByZXZpZXdpbmcgdGhpcyBjb2RlLi4uIGFuZCBJJ20ga2luZCBvZiB6b25pbmcgb3V0LiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24sIGNsYXNzLCBvciBtb2R1bGUgYWN0dWFsbHkgKnZlcmlmaWVzKiB0aGUgYHR5cGVgIG9mIHRoZSBpbnB1dCBvciB2YXJpYWJsZS4gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgdW5leHBlY3RlZCBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBJIGtub3cgSSBzYXcgaXQgc29tZXdoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QganVzdCBhY2NlcHRlZCB0aGUgYXNzdW1wdGlvbiwgb3IgbWlzc2VkIHNvbWUga2luZCBvZiBpbXBsaWNpdCBjYXN0LiBMZXQgbWUgZG91YmxlLWNoZWNrLiBXaGVyZSBpcyB0aGF0IGNydWNpYWwgYHR5cGVgIHZhbGlkYXRpb24gaGFwcGVuaW5nPyBJIG5lZWQgdG8gcGlucG9pbnQgdGhhdCBwYXJ0IG9mIHRoZSBsb2dpYyBiZWZvcmUgbW92aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM2MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6MDIuOTEwMzk0MTQyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTg6XFx0I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbjExMTk6XFx0XFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VtZW1fYXR0cl9hcnJheSk7XFxuMTEyMDpcXHQjZW5kaWZcXG4xMTIxOlxcdFxcbjExMjI6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmt2bS1cXHUwMDNlZ3BjX2xpc3QpO1xcbjExMjM6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlZ3BjX2xvY2spO1xcbjExMjQ6XFx0XFxuMTEyNTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2a3ZtLVxcdTAwM2VkZXZpY2VzKTtcXG4xMTI2OlxcdFxcdGt2bS1cXHUwMDNlbWF4X3ZjcHVzID0gS1ZNX01BWF9WQ1BVUztcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0QlVJTERfQlVHX09OKEtWTV9NRU1fU0xPVFNfTlVNIFxcdTAwM2UgU0hSVF9NQVgpO1xcbjExMjk6XFx0XFxuMTEzMDpcXHRcXHQvKlxcbjExMzE6XFx0XFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxcbjExMzI6XFx0XFx0ICogaXMgbm90IGNyZWF0ZWQgKGJ5IGt2bV9jcmVhdGVfdm1fZGVidWdmcygpKS5cXG4xMTMzOlxcdFxcdCAqL1xcbjExMzQ6XFx0XFx0a3ZtLVxcdTAwM2VkZWJ1Z2ZzX2RlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdHNucHJpbnRmKGt2bS1cXHUwMDNlc3RhdHNfaWQsIHNpemVvZihrdm0tXFx1MDAzZXN0YXRzX2lkKSwgXFxcImt2bS0lZFxcXCIsXFxuMTEzNzpcXHRcXHRcXHQgdGFza19waWRfbnIoY3VycmVudCkpO1xcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHRyID0gLUVOT01FTTtcXG4xMTQwOlxcdFxcdGlmIChpbml0X3NyY3Vfc3RydWN0KFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpKVxcbjExNDE6XFx0XFx0XFx0Z290byBvdXRfZXJyX25vX3NyY3U7XFxuMTE0MjpcXHRcXHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcXHUwMDI2a3ZtLVxcdTAwM2VpcnFfc3JjdSkpXFxuMTE0MzpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9faXJxX3NyY3U7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdHIgPSBrdm1faW5pdF9pcnFfcm91dGluZyhrdm0pO1xcbjExNDY6XFx0XFx0aWYgKHIpXFxuMTE0NzpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9faXJxX3JvdXRpbmc7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2a3ZtLVxcdTAwM2V1c2Vyc19jb3VudCwgMSk7XFxuMTE1MDpcXHRcXG4xMTUxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fYXJjaF9ucl9tZW1zbG90X2FzX2lkcyhrdm0pOyBpKyspIHtcXG4xMTUyOlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyAyOyBqKyspIHtcXG4xMTUzOlxcdFxcdFxcdFxcdHNsb3RzID0gXFx1MDAyNmt2bS1cXHUwMDNlX19tZW1zbG90c1tpXVtqXTtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0XFx0XFx0YXRvbWljX2xvbmdfc2V0KFxcdTAwMjZzbG90cy1cXHUwMDNlbGFzdF91c2VkX3Nsb3QsICh1bnNpZ25lZCBsb25nKU5VTEwpO1xcbjExNTY6XFx0XFx0XFx0XFx0c2xvdHMtXFx1MDAzZWh2YV90cmVlID0gUkJfUk9PVF9DQUNIRUQ7XFxuMTE1NzpcXHRcXHRcXHRcXHRzbG90cy1cXHUwMDNlZ2ZuX3RyZWUgPSBSQl9ST09UO1xcbjExNTg6XFx0XFx0XFx0XFx0aGFzaF9pbml0KHNsb3RzLVxcdTAwM2VpZF9oYXNoKTtcXG4xMTU5OlxcdFxcdFxcdFxcdHNsb3RzLVxcdTAwM2Vub2RlX2lkeCA9IGo7XFxuMTE2MDpcXHRcXG4xMTYxOlxcdFxcdFxcdFxcdC8qIEdlbmVyYXRpb25zIG11c3QgYmUgZGlmZmVyZW50IGZvciBlYWNoIGFkZHJlc3Mgc3BhY2UuICovXFxuMTE2MjpcXHRcXHRcXHRcXHRzbG90cy1cXHUwMDNlZ2VuZXJhdGlvbiA9IGk7XFxuMTE2MzpcXHRcXHRcXHR9XFxuMTE2NDpcXHRcXG4xMTY1OlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihrdm0tXFx1MDAzZW1lbXNsb3RzW2ldLCBcXHUwMDI2a3ZtLVxcdTAwM2VfX21lbXNsb3RzW2ldWzBdKTtcXG4xMTY2OlxcdFxcdH1cXG4xMTY3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzowMi45MTA3MzM2ODJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NjQzMjkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgYXVkaWVuY2UgaXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fYXJjaF9pbml0X3ZtYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBga3ZtX2FyY2hfaW5pdF92bWAgZnVuY3Rpb24uIEl04oCZcyB0aGF0IGNyaXRpY2FsIHN0YWdlIHdoZXJlIHdlJ3JlIHNldHRpbmcgdXAgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3BlY3RzIG9mIGEgS1ZNIHZpcnR1YWwgbWFjaGluZSwgcmlnaHQgYWZ0ZXIgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgcGF0aCBoZXJlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGhhcmR3YXJlIGVtdWxhdGlvbiwgYW5kIHdoYXQgdGhlIGluaXRpYWwgc3RhdGUgbmVlZHMgdG8gbG9vayBsaWtlIGZvciBhIHJlbGlhYmxlIGd1ZXN0IGV4ZWN1dGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzLCB0aGUgbWVtb3J5IG1hcCwgYW5kIGFueSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBXaGF0IGFyZSB0aGUga2V5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXRhaWxzIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXN0IGhhbmRsZSB0byBtYWtlIHRoZSBWTSBjb21wYXRpYmxlIHdpdGggdGhlIGhhcmR3YXJlPyBBbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0J3MgdHJhY2UgaXQgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgS1ZNIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDA4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzowNi40ODcxNjk5NzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE2OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE2ODpcXHRcXHRyID0gLUVOT01FTTtcXG4xMTY5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBLVk1fTlJfQlVTRVM7IGkrKykge1xcbjExNzA6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGt2bS1cXHUwMDNlYnVzZXNbaV0sXFxuMTE3MTpcXHRcXHRcXHRcXHRremFsbG9jX29iaihzdHJ1Y3Qga3ZtX2lvX2J1cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKSk7XFxuMTE3MjpcXHRcXHRcXHRpZiAoIWt2bS1cXHUwMDNlYnVzZXNbaV0pXFxuMTE3MzpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9fYXJjaF9kZXN0cm95X3ZtO1xcbjExNzQ6XFx0XFx0fVxcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRyID0ga3ZtX2FyY2hfaW5pdF92bShrdm0sIHR5cGUpO1xcbjExNzc6XFx0XFx0aWYgKHIpXFxuMTE3ODpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9fYXJjaF9kZXN0cm95X3ZtO1xcbjExNzk6XFx0XFxuMTE4MDpcXHRcXHRyID0ga3ZtX2VuYWJsZV92aXJ0dWFsaXphdGlvbigpO1xcbjExODE6XFx0XFx0aWYgKHIpXFxuMTE4MjpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9fZGlzYWJsZTtcXG4xMTgzOlxcdFxcbjExODQ6XFx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQXFxuMTE4NTpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmt2bS1cXHUwMDNlaXJxX2Fja19ub3RpZmllcl9saXN0KTtcXG4xMTg2OlxcdCNlbmRpZlxcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7XFxuMTE4OTpcXHRcXHRpZiAocilcXG4xMTkwOlxcdFxcdFxcdGdvdG8gb3V0X2Vycl9ub19tbXVfbm90aWZpZXI7XFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcdHIgPSBrdm1fY29hbGVzY2VkX21taW9faW5pdChrdm0pO1xcbjExOTM6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjExOTQ6XFx0XFx0XFx0Z290byBvdXRfbm9fY29hbGVzY2VkX21taW87XFxuMTE5NTpcXHRcXG4xMTk2OlxcdFxcdHIgPSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoa3ZtLCBmZG5hbWUpO1xcbjExOTc6XFx0XFx0aWYgKHIpXFxuMTE5ODpcXHRcXHRcXHRnb3RvIG91dF9lcnJfbm9fZGVidWdmcztcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtX2xvY2spO1xcbjEyMDE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmt2bS1cXHUwMDNldm1fbGlzdCwgXFx1MDAyNnZtX2xpc3QpO1xcbjEyMDI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm1fbG9jayk7XFxuMTIwMzpcXHRcXG4xMjA0OlxcdFxcdHByZWVtcHRfbm90aWZpZXJfaW5jKCk7XFxuMTIwNTpcXHRcXHRrdm1faW5pdF9wbV9ub3RpZmllcihrdm0pO1xcbjEyMDY6XFx0XFxuMTIwNzpcXHRcXHRyZXR1cm4ga3ZtO1xcbjEyMDg6XFx0XFxuMTIwOTpcXHRvdXRfZXJyX25vX2RlYnVnZnM6XFxuMTIxMDpcXHRcXHRrdm1fY29hbGVzY2VkX21taW9fZnJlZShrdm0pO1xcbjEyMTE6XFx0b3V0X25vX2NvYWxlc2NlZF9tbWlvOlxcbjEyMTI6XFx0XFx0aWYgKGt2bS1cXHUwMDNlbW11X25vdGlmaWVyLm9wcylcXG4xMjEzOlxcdFxcdFxcdG1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9ub3RpZmllciwgY3VycmVudC1cXHUwMDNlbW0pO1xcbjEyMTQ6XFx0b3V0X2Vycl9ub19tbXVfbm90aWZpZXI6XFxuMTIxNTpcXHRcXHRrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbigpO1xcbjEyMTY6XFx0b3V0X2Vycl9ub19kaXNhYmxlOlxcbjEyMTc6XFx0XFx0a3ZtX2FyY2hfZGVzdHJveV92bShrdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzowNi40ODc1MDM0NTVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2MzY4MTI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBLVk0gSW5pdGlhbGl6YXRpb24gb24geDg2KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBmb2N1c2luZyBvbiB0aGUgYGt2bV9hcmNoX2luaXRfdm1gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgd2hhdCB0aGlzIGluaXRpYWxpemF0aW9uIGVudGFpbHMgYXQgYSBsb3cgbGV2ZWwuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc2V0dGluZyB1cCB0aGUgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBjb21wb25lbnRzIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFdoYXQncyB0aGUgaW5pdGlhbCBzdGF0ZSB3ZSBhcmUgdHJ5aW5nIHRvIGFjaGlldmU/IFxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZDogQXJlIHdlIHRhbGtpbmcgYWJvdXQgZXN0YWJsaXNoaW5nIHRoZSBpbml0aWFsIENQVUlEIGluZm9ybWF0aW9uLCBtYXliZSBzZXR0aW5nIHVwIHRoZSBNU1JzLCBlbmFibGluZyBzcGVjaWZpYyBmZWF0dXJlcywgb3Igc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBwYWdlIHRhYmxlcz8gSG93IGRvZXMgaXQgZGlmZmVyIGJhc2VkIG9uIHNwZWNpZmljIHg4NiBwcm9jZXNzb3IgbW9kZWxzIGFuZCBmZWF0dXJlIHNldHM/IERvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBndWVzdCBtZW1vcnkgbWFwcGluZz8gV2hhdCBhYm91dCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMsIENSMCwgQ1IzLCBDUjQ/IFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGd1ZXN0IHN0YXJ0cyBpbiBhIGtub3duIGFuZCBjb25zaXN0ZW50IHN0YXRlLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBWTVgvU1ZNLCBhbmQgaG93IHRoZXNlIGFyZSBzZXQuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gZm9ybXMgdGhlIGZvdW5kYXRpb24gZm9yIHNlY3VyZSB2aXJ0dWFsaXphdGlvbi4gV2hhdCBzYWZlZ3VhcmRzIGFyZSBidWlsdCBpbnRvIHRoaXMgaW5pdGlhbGl6YXRpb24/IEkgYW0gYWxzbyBpbnRlcmVzdGVkIGluIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgYXJjaGl0ZWN0dXJlLiBXaGVyZSBkb2VzIHRoaXMgZml0IHdpdGhpbiB0aGUgbGFyZ2VyIEtWTSBsaWZlY3ljbGU/IEknbSBhbnRpY2lwYXRpbmcgc29tZSBjcml0aWNhbCBlcnJvciBoYW5kbGluZy4gV2hhdCBmYWlsdXJlIHNjZW5hcmlvcyBhcmUgYWNjb3VudGVkIGZvcj8gV2hhdCdzIHRoZSBlcnJvciByZWNvdmVyeSBwYXRoP1xuXG5VbHRpbWF0ZWx5LCBteSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgeDg2IGd1ZXN0IGVudmlyb25tZW50IGlzIGFyY2hpdGVjdHVyYWxseSBlc3RhYmxpc2hlZCBieSBLVk0uIFRoYXQgaXMgd2hlcmUgSSB3aWxsIHN0YXJ0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ1MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6MTIuMTUxMTg5ODAyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk3ODc4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX2luaXRfdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jPTExMDU9dm9pZCBrdm1fdGltZXJfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYy0xMTIzLS8qXFxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jOjExMjQ6ICogVGhpcyBpcyBhbHdheXMgY2FsbGVkIGR1cmluZyBrdm1fYXJjaF9pbml0X3ZtLCBidXQgd2lsbCBhbHNvIGJlXFxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTExMjUtICogY2FsbGVkIGZyb20ga3ZtX3ZnaWNfY3JlYXRlIGlmIHdlIGhhdmUgYSB2R0lDdjUuXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYz0xOTg9c3RhdGljIGludCBrdm1fYXJtX2RlZmF1bHRfbWF4X3ZjcHVzKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMDMtLyoqXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjA0OiAqIGt2bV9hcmNoX2luaXRfdm0gLSBpbml0aWFsaXplcyBhIFZNIGRhdGEgc3RydWN0dXJlXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA1LSAqIEBrdm06XFx0cG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjA3LSAqL1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjIwODppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMDkte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmM9Mjg9c3RhdGljIHZvaWQga3ZtX3ZtX2luaXRfZmVhdHVyZXMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmMtNjEtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmM6NjI6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmMtNjMte1xcbi0tXFxuYXJjaC9taXBzL2t2bS9taXBzLmM9MTMzPXZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTEzNy1cXG5hcmNoL21pcHMva3ZtL21pcHMuYzoxMzg6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuYXJjaC9taXBzL2t2bS9taXBzLmMtMTM5LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTQzOD1FWFBPUlRfU1lNQk9MX0dQTChrdm1wcGNfbGQpO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTQzOS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo0NDA6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNDQxLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmM9MjI9Y29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMzAtXFxuYXJjaC9yaXNjdi9rdm0vdm0uYzozMTppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTMyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTg5PXZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5Ni1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE5NzppbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTMzMzI9dm9pZCBrdm1fYXJjaF9mcmVlX3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzM0MC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTMzNDE6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMzQyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNzg0PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdW5yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcyh2b2lkKSB7fVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3ODYtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE3ODc6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNzg4LXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xMDk4PXN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xMTc1LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTE3NjpcXHRyID0ga3ZtX2FyY2hfaW5pdF92bShrdm0sIHR5cGUpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE3Ny1cXHRpZiAocilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6MTQuNDQ5MDc0ODcyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjUwOTE3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIEluaXRpYWxpemF0aW9uOiBga3ZtX2FyY2hfaW5pdF92bWAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIEtWTSBhcmNoaXRlY3R1cmUgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBvbiB4ODYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGt2bV9hcmNoX2luaXRfdm1gIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBwbGF0Zm9ybS1zcGVjaWZpYyBzZXR1cCBmb3IgYSBuZXcgVk0gaW5zdGFuY2UuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zIGFyZSBiZWluZyBjb25maWd1cmVkLCB3aGljaCBtZW1vcnkgcmVnaW9ucyBhcmUgYmVpbmcgbWFwcGVkLCBhbmQgd2hhdCBpbml0aWFsIHN0YXRlIGlzIGJlaW5nIGVzdGFibGlzaGVkIGZvciB0aGUgZ3Vlc3QuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIGhhbmRsaW5nIHRoZSBleHRlbmRlZCBwYWdlIHRhYmxlcyAoRVBUKSBhbmQgYW55IG90aGVyIHg4Ni1zcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzIHRoYXQgYXJlIGNydWNpYWwgZm9yIGdldHRpbmcgYSBWTSB1cCBhbmQgcnVubmluZy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZSwgZXNwZWNpYWxseSBhcm91bmQgY29udGV4dCBzd2l0Y2hpbmcgb3IgaW5pdGlhbCBtZW1vcnkgc2V0dXAuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTUyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6MTcuNzc0MTcwMTcxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzNDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMzQxOlxcdGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbjEzMzQyOlxcdHtcXG4xMzM0MzpcXHRcXHRpbnQgcmV0O1xcbjEzMzQ0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTMzNDU6XFx0XFxuMTMzNDY6XFx0XFx0aWYgKCFrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSkpXFxuMTMzNDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTMzNDg6XFx0XFxuMTMzNDk6XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPSB0eXBlO1xcbjEzMzUwOlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPVxcbjEzMzUxOlxcdFxcdFxcdCh0eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcXG4xMzM1MjpcXHRcXHQvKiBEZWNpZGVkIGJ5IHRoZSB2ZW5kb3IgY29kZSBmb3Igb3RoZXIgVk0gdHlwZXMuICAqL1xcbjEzMzUzOlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5wcmVfZmF1bHRfYWxsb3dlZCA9XFxuMTMzNTQ6XFx0XFx0XFx0dHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gfHwgdHlwZSA9PSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTTtcXG4xMzM1NTpcXHRcXHRrdm0tXFx1MDAzZWFyY2guZGlzYWJsZWRfcXVpcmtzID0ga3ZtX2NhcHMuaW5hcHBsaWNhYmxlX3F1aXJrcyBcXHUwMDI2IGt2bV9jYXBzLnN1cHBvcnRlZF9xdWlya3M7XFxuMTMzNTY6XFx0XFxuMTMzNTc6XFx0XFx0cmV0ID0ga3ZtX3BhZ2VfdHJhY2tfaW5pdChrdm0pO1xcbjEzMzU4OlxcdFxcdGlmIChyZXQpXFxuMTMzNTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTMzNjA6XFx0XFxuMTMzNjE6XFx0XFx0cmV0ID0ga3ZtX21tdV9pbml0X3ZtKGt2bSk7XFxuMTMzNjI6XFx0XFx0aWYgKHJldClcXG4xMzM2MzpcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwX3BhZ2VfdHJhY2s7XFxuMTMzNjQ6XFx0XFxuMTMzNjU6XFx0XFx0cmV0ID0ga3ZtX3g4Nl9jYWxsKHZtX2luaXQpKGt2bSk7XFxuMTMzNjY6XFx0XFx0aWYgKHJldClcXG4xMzM2NzpcXHRcXHRcXHRnb3RvIG91dF91bmluaXRfbW11O1xcbjEzMzY4OlxcdFxcbjEzMzY5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5ub25jb2hlcmVudF9kbWFfY291bnQsIDApO1xcbjEzMzcwOlxcdFxcbjEzMzcxOlxcdFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrKTtcXG4xMzM3MjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guYXBpY19tYXBfbG9jayk7XFxuMTMzNzM6XFx0XFx0c2VxY291bnRfcmF3X3NwaW5sb2NrX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5wdmNsb2NrX3NjLCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrKTtcXG4xMzM3NDpcXHRcXHRyYXRlbGltaXRfc3RhdGVfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmt2bWNsb2NrX3VwZGF0ZV9ycywgSFosIDEwKTtcXG4xMzM3NTpcXHRcXHRyYXRlbGltaXRfc2V0X2ZsYWdzKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gua3ZtY2xvY2tfdXBkYXRlX3JzLCBSQVRFTElNSVRfTVNHX09OX1JFTEVBU0UpO1xcbjEzMzc2OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQgPSAtZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKTtcXG4xMzM3NzpcXHRcXG4xMzM3ODpcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC50c2Nfd3JpdGVfbG9jaywgZmxhZ3MpO1xcbjEzMzc5OlxcdFxcdHB2Y2xvY2tfdXBkYXRlX3ZtX2d0b2RfY29weShrdm0pO1xcbjEzMzgwOlxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG4xMzM4MTpcXHRcXG4xMzM4MjpcXHRcXHRrdm0tXFx1MDAzZWFyY2guZGVmYXVsdF90c2Nfa2h6ID0gbWF4X3RzY19raHogPyA6IHRzY19raHo7XFxuMTMzODM6XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmFwaWNfYnVzX2N5Y2xlX25zID0gQVBJQ19CVVNfQ1lDTEVfTlNfREVGQVVMVDtcXG4xMzM4NDpcXHRcXHRrdm0tXFx1MDAzZWFyY2guZ3Vlc3RfY2FuX3JlYWRfbXNyX3BsYXRmb3JtX2luZm8gPSB0cnVlO1xcbjEzMzg1OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5lbmFibGVfcG11ID0gZW5hYmxlX3BtdTtcXG4xMzM4NjpcXHRcXG4xMzM4NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSFlQRVJWKVxcbjEzMzg4OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guaHZfcm9vdF90ZHBfbG9jayk7XFxuMTMzODk6XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmh2X3Jvb3RfdGRwID0gSU5WQUxJRF9QQUdFO1xcbjEzMzkwOlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzoxNy43NzQ3ODUxOFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU1Nzg3MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBhbmQga2VlcGluZyBpbiBtaW5kIEknbSBhbiBleHBlcnQ6XG5cbioqS1ZNIFZNIFR5cGUgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgaWYgdGhpcyBzcGVjaWZpYyBWTSB0eXBlIOKAkyB3aGF0ZXZlciBpdCBtaWdodCBiZSDigJMgaXMgZXZlbiBzdXBwb3J0ZWQgYnkgdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSBvbiB0aGlzIHN5c3RlbS4gSXQncyBhIGZ1bmRhbWVudGFsIGluaXRpYWwgY2hlY2ssIHJlYWxseS4gVGhlIGNvZGUgaXMgY2xlYXJseSBjYWxsaW5nIGBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSlgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwuIEkga25vdyBpdCdzIHByb2JhYmx5IGRpZ2dpbmcgZGVlcCwgbG9va2luZyBhdCB0aGUgdW5kZXJseWluZyBDUFUgY2FwYWJpbGl0aWVzLCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCBhbmQgdGhlIGNvbmZpZ3VyZWQgS1ZNIG1vZHVsZXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgVk0gdHlwZSBoYXMgYSBwcmF5ZXIgb2Ygd29ya2luZy4gSWYgdGhpcyBiYXNpYyBjaGVjayBmYWlscywgd2UncmUgZGVhZCBpbiB0aGUgd2F0ZXIsIGFuZCB0aGVyZSdzIG5vIHBvaW50IGluIGdvaW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGEgZ2F0aW5nIGNvbmRpdGlvbjsgaXQgaGFzIHRvIGJlIHRydWUgb3Igd2UgYWJvcnQgZWFybHkgYW5kIGdyYWNlZnVsbHkuIFNvLCB0aGF0IGNhbGwsIHJpZ2h0IHRoZXJlLCBpcyB3aGVyZSB0aGluZ3MgZWl0aGVyIHN0YXJ0IHRvIHdvcmssIG9yIGltbWVkaWF0ZWx5IGNvbWUgY3Jhc2hpbmcgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0NzYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjIxLjgzMDU3Njk2M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MzM4NDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTQ3NTg9c3RhdGljIGludCBrdm1faW9jdGxfZ2V0X3N1cHBvcnRlZF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDc3OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDc4MDpzdGF0aWMgYm9vbCBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodW5zaWduZWQgbG9uZyB0eXBlKVxcbmFyY2gveDg2L2t2bS94ODYuYy00NzgxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMzM0MT1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzM0NS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTMzNDY6XFx0aWYgKCFrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMzQ3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzoyMy42ODM5NzE1ODNaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2OTUxMDE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIGBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWRgKipcblxuT2theSwgc28gSSdtIGFib3V0IHRvIGRpdmUgaW50byB0aGlzLi4uIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgYGt2bV9pc192bV90eXBlX3N1cHBvcnRlZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCwgZG9lc24ndCBpdD8gSXQncyB0aGUgZmlyc3QgZmlsdGVyLCB0aGUgYmFzZWxpbmUgY2hlY2ssIHRoZSBnYXRla2VlcGVyIGZvciB0aGUgd2hvbGUgb3BlcmF0aW9uLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogY2VydGFpbiB0aGF0IHdlJ3JlIGV2ZW4gKmluIHRoZSByZWFsbSogb2Ygc3VwcG9ydGVkIHZpcnR1YWxpemF0aW9uIHR5cGVzIGJlZm9yZSBwcm9jZWVkaW5nIGFueSBmdXJ0aGVyIGRvd24gdGhlIHJhYmJpdCBob2xlLiBJdOKAmXMgYSBzYW5pdHkgY2hlY2ssIHJlYWxseS4gU2F2ZXMgYSBsb3Qgb2YgZGVidWdnaW5nIHRpbWUgbGF0ZXIgaWYgc29tZXRoaW5nIGlzbid0IHN1cHBvcnRlZC4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgVk0gdHlwZSBpbiBxdWVzdGlvbiwgd2hhdGV2ZXIgaXQgbWF5IGJlLCBhY3R1YWxseSAqY2FuKiBydW4gb24gdGhlIGN1cnJlbnQgS1ZNIHNldHVwLiBJIGNhbid0IGFmZm9yZCB0byB3YXN0ZSBjeWNsZXMgcHVyc3VpbmcgYW4gdW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbi4gU28sIHllYWgsIGBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWRgIGZpcnN0LiBUaGF0J3MgdGhlIHByaW9yaXR5LiBHb3QgdG8ga25vdyBpZiB3ZSdyZSBldmVuICphbGxvd2VkKiB0byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDAwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjI4LjQ1MzQ4NjFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzgwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NzgwOlxcdHN0YXRpYyBib29sIGt2bV9pc192bV90eXBlX3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nIHR5cGUpXFxuNDc4MTpcXHR7XFxuNDc4MjpcXHRcXHRyZXR1cm4gdHlwZSBcXHUwMDNjIDMyIFxcdTAwMjZcXHUwMDI2IChrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgXFx1MDAyNiBCSVQodHlwZSkpO1xcbjQ3ODM6XFx0fVxcbjQ3ODQ6XFx0XFxuNDc4NTpcXHRzdGF0aWMgaW5saW5lIHU2NCBrdm1fc3luY192YWxpZF9maWVsZHMoc3RydWN0IGt2bSAqa3ZtKVxcbjQ3ODY6XFx0e1xcbjQ3ODc6XFx0XFx0cmV0dXJuIGt2bSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2guaGFzX3Byb3RlY3RlZF9zdGF0ZSA/IDAgOiBLVk1fU1lOQ19YODZfVkFMSURfRklFTERTO1xcbjQ3ODg6XFx0fVxcbjQ3ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjI4LjQ1Mzk1NDg5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMzY2NzAyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBTRVYtU05QIFZNIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBLVk0gc2V0dXAgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYCBmaWVsZCBhYnNvbHV0ZWx5ICptdXN0KiBoYXZlIGBCSVQoS1ZNX1g4Nl9TTlBfVk0pYCBlbmFibGVkIGZvciB0aGlzIHRvIHdvcmsuIEkgcmVtZW1iZXIgc2VlaW5nIGVhcmxpZXIgdGhhdCBgQklUKEtWTV9YODZfU05QX1ZNKWAgb25seSBnZXRzIHNldCB3aXRoaW4gdGhlIGBzZXZfc2V0X2NwdV9jYXBzYCBmdW5jdGlvbiBpZiB0aGUgQ1BVIHJlcG9ydHMgYFg4Nl9GRUFUVVJFX1NFVl9TTlBgLiBTbywgcmlnaHQgYXdheSwgaXQncyBjbGVhcjogaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IFNFVi1TTlAsIHRyeWluZyB0byBjcmVhdGUgYSBWTSB1c2luZyBgS1ZNX0NSRUFURV9WTWAgd2l0aCBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGdvaW5nIHRvIGJvbWIgb3V0IHdpdGggYW4gYC1FSU5WQUxgIGVycm9yLiBUaGF0J3MgYSBkZWFsIGJyZWFrZXIuXG5cbklmIGBLVk1fQ1JFQVRFX1ZNYCBmYWlscywgd2VsbCwgdGhlbiB3ZSdyZSBzdHVjay4gV2UgY2FuJ3QgZXZlbiBnZXQgdG8gdGhlIHN0YWdlIG9mIGNyZWF0aW5nIGEgVk0gb2YgdGhhdCBgS1ZNX1g4Nl9TTlBfVk1gIHR5cGUuIE9idmlvdXNseSwgaWYgd2UgY2FuJ3QgY3JlYXRlIHRoYXQgVk0gdHlwZSwgdGhlbiB3ZSdsbCBuZXZlciBiZSBhYmxlIHRvIGNhbGwgYEtWTV9TRVZfU05QX0xBVU5DSF9VUERBVEVgLiBUaGlzIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB0aGF0IGluaXRpYWwgVk0gY3JlYXRpb24uXG5cbkhtbS4uLiB3YWl0IGEgc2Vjb25kLiBUaGF0J3MgYXNzdW1pbmcgdGhpcyBpcyBhbGwgd2UncmUgY29uc2lkZXJpbmcuIFdoYXQgYWJvdXQgVERYPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGUgcHJvY2VzcyB3aXRoIFREWC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0ODMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0MzozNi41OTA2MjgzNzRaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODAwNzY1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX1g4Nl9URFhfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdD0yMzM9Y29udHJvbCBmbG93IGlzIGFzIGZvbGxvd3M6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTIzNi1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0OjIzNzogICAqIEtWTV9DQVBfVk1fVFlQRVM6IENoZWNrIGlmIFZNIHR5cGUgaXMgc3VwcG9ydGVkIGFuZCBpZiBLVk1fWDg2X1REWF9WTVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3QtMjM4LSAgICAgaXMgc3VwcG9ydGVkLlxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU05QX1ZNXFx0XFx0NFxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTczOiNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cXHRcXHQ1XFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzA0PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS5oLTMwNS17XFxuYXJjaC94ODYva3ZtL21tdS5oOjMwNjpcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XFxuYXJjaC94ODYva3ZtL21tdS5oLTMwNy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU3NzQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTc3Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU3Nzg6XFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTc3OS1cXHRcXHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTE2OT1zdGF0aWMgaW50IGt2bV9lbmFibGVfZXh0ZXJuYWxfd3JpdGVfdHJhY2tpbmcoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc0LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE3NTpcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc2LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9NjA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYxLXtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjYyOlxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNDE9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA2MS1cXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDYyOlxcdFxcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNjMtXFx0fVxcbi0tXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU05QX1ZNXFx0XFx0NFxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTczOiNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cXHRcXHQ1XFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjM4LjQ3MDcxMTAyM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE1MzAwOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqS1ZNL1REWCBJbml0aWFsaXphdGlvbiBhbmQgVk0gVHlwZSBTdXBwb3J0KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBoeXBlcnZpc29yLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGVyZSBkb2VzIHRoZSBzdXBwb3J0IGdldCByZWdpc3RlcmVkP1wiIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaXMgYEtWTV9YODZfVERYX1ZNYC4gVGhpcyBjb25zdGFudCBpcyBiZWluZyBhZGRlZCB0byB0aGUgYHN1cHBvcnRlZF92bV90eXBlc2AgbGlzdCB3aXRoaW4gdGhlIGB2dF9pbml0YCBmdW5jdGlvbiwgYnV0ICpvbmx5KiBpZiBURFggaXMgYWN0dWFsbHkgZW5hYmxlZC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJJ2QgZXhwZWN0OyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBjcml0aWNhbCBoZXJlIHRvIGF2b2lkIGludHJvZHVjaW5nIFREWC1zcGVjaWZpYyBjb2RlIHdoZW4gdGhlIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBpdCwgb3IgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIHRoZXJlZm9yZSwgaXMgdG8gZGl2ZSBpbnRvIGB2dF9pbml0YCBpdHNlbGYgYW5kIGZ1bGx5IGdyb2sgaG93IFREWCBzdXBwb3J0IGlzIGNvbmRpdGlvbmVkIHRoZXJlLiBMZXQncyBzZWUgaG93IHRoYXQgY29tZXMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTYyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6NDIuMjg2MDE0NjdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNDE6XFx0c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxcbjEwNDI6XFx0e1xcbjEwNDM6XFx0XFx0dW5zaWduZWQgdmNwdV9zaXplLCB2Y3B1X2FsaWduO1xcbjEwNDQ6XFx0XFx0aW50IHI7XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdHIgPSB2bXhfaW5pdCgpO1xcbjEwNDc6XFx0XFx0aWYgKHIpXFxuMTA0ODpcXHRcXHRcXHRyZXR1cm4gcjtcXG4xMDQ5OlxcdFxcbjEwNTA6XFx0XFx0LypcXG4xMDUxOlxcdFxcdCAqIFREWCBhbmQgVk1YIGhhdmUgZGlmZmVyZW50IHZDUFUgc3RydWN0dXJlcy4gIENhbGN1bGF0ZSB0aGVcXG4xMDUyOlxcdFxcdCAqIG1heGltdW0gc2l6ZS9hbGlnbiBzbyB0aGF0IGt2bV9pbml0KCkgY2FuIHVzZSB0aGUgbGFyZ2VyXFxuMTA1MzpcXHRcXHQgKiB2YWx1ZXMgdG8gY3JlYXRlIHRoZSBrbWVtX3ZjcHVfY2FjaGUuXFxuMTA1NDpcXHRcXHQgKi9cXG4xMDU1OlxcdFxcdHZjcHVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmNwdV92bXgpO1xcbjEwNTY6XFx0XFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XFxuMTA1NzpcXHRcXHRpZiAoZW5hYmxlX3RkeCkge1xcbjEwNTg6XFx0XFx0XFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcXG4xMDU5OlxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgdmNwdV90ZHgpKTtcXG4xMDYwOlxcdFxcdFxcdHZjcHVfYWxpZ24gPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9hbGlnbixcXG4xMDYxOlxcdFxcdFxcdFxcdFxcdF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3RkeCkpO1xcbjEwNjI6XFx0XFx0XFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1REWF9WTSk7XFxuMTA2MzpcXHRcXHR9XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdC8qXFxuMTA2NjpcXHRcXHQgKiBDb21tb24gS1ZNIGluaXRpYWxpemF0aW9uIF9tdXN0XyBjb21lIGxhc3QsIGFmdGVyIHRoaXMsIC9kZXYva3ZtIGlzXFxuMTA2NzpcXHRcXHQgKiBleHBvc2VkIHRvIHVzZXJzcGFjZSFcXG4xMDY4OlxcdFxcdCAqL1xcbjEwNjk6XFx0XFx0ciA9IGt2bV9pbml0KHZjcHVfc2l6ZSwgdmNwdV9hbGlnbiwgVEhJU19NT0RVTEUpO1xcbjEwNzA6XFx0XFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjQyLjI4NjEyMDA2MVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE3NjIyMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFREWCBWTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJZiB0aGUgYGVuYWJsZV90ZHhgIGZsYWcgaXMgc2V0IHRvIHRydWUsIHRoZSBjb2RlIGlzIGNsZWFybHkgaW50ZW5kaW5nIHRvIGluY2x1ZGUgdGhlIGBCSVQoS1ZNX1g4Nl9URFhfVk0pYCBmbGFnLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIGRpcmVjdCBjb25kaXRpb25hbCBhc3NpZ25tZW50IGJhc2VkIG9uIGEgYm9vbGVhbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24sIGFzIGFsd2F5cyB3aXRoIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXMgKmhvdyogYW5kICp3aGVyZSogYGVuYWJsZV90ZHhgIGlzIGJlaW5nIHNldC4gSXMgdGhpcyBjb250cm9sbGVkIGJ5IGEgY29tbWFuZC1saW5lIHBhcmFtZXRlciwgYSBjb25maWcgZmlsZSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGlzIGl0IGRldGVybWluZWQgZHluYW1pY2FsbHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIHNvbWUgaGFyZHdhcmUgZGV0ZWN0aW9uP1xuXG5JIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gYW5kIGFzc2lnbm1lbnQgb2YgYGVuYWJsZV90ZHhgLiBBcmUgd2UgY2hlY2tpbmcgZm9yIHNwZWNpZmljIENQVSBmZWF0dXJlcywgQklPUyBzdXBwb3J0LCBvciBzb21lIG90aGVyIHVuZGVybHlpbmcgY29uZGl0aW9uPyBVbmRlcnN0YW5kaW5nIHRoYXQgZGVwZW5kZW5jeSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNlIGNhc2UgZm9yIFREWC4gQXJlIHRoZXJlIGFueSBkZWZhdWx0IHZhbHVlcz8gV2hhdCdzIHRoZSBpbXBhY3Qgb2YgVERYIG9uIHRoZSByZXN0IG9mIHRoZSBlbnZpcm9ubWVudD8gSXMgdGhpcyBmb3IgYSB3aG9sZSBWTSBvciBzb21ldGhpbmcgZWxzZT9cblxuSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGFjdCBvbiB0aGUgaHlwZXJ2aXNvciBhbmQgdGhlIFZNLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGRlcGVuZGVuY2llcywgbGltaXRhdGlvbnMgYW5kIHJlcXVpcmVtZW50cyBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MjgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQzOjQ2LjQwMzc1NzYxMloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNzgxMTA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmFibGVfdGR4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2PXN0YXRpYyB2b2lkIHZ0X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xOC1cXHQvKiBOb3RlLCBURFggKmFuZCogVk1YIG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgVERYIGlzIGVuYWJsZWQuICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk6XFx0aWYgKGVuYWJsZV90ZHgpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjAtXFx0XFx0dGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yND1zdGF0aWMgX19pbml0IGludCB2dF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzEtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzI6XFx0cmV0dXJuIGVuYWJsZV90ZHggPyB0ZHhfaGFyZHdhcmVfc2V0dXAoKSA6IDA7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzMtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MzU9c3RhdGljIHZvaWQgdnRfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNzpcXHRpZiAoZW5hYmxlX3RkeClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zOC1cXHRcXHR0ZHhfaGFyZHdhcmVfdW5zZXR1cCgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTA0MT1zdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDU2LVxcdHZjcHVfYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV92bXgpO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNTc6XFx0aWYgKGVuYWJsZV90ZHgpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDU4LVxcdFxcdHZjcHVfc2l6ZSA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X3NpemUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTU1LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTY6Ym9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU3Om1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMzNjA9aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzNjg6XFx0aWYgKCFlbmFibGVfdGR4KVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM2OS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQyNS1zdWNjZXNzX2Rpc2FibGVfdGR4OlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQyNjpcXHRlbmFibGVfdGR4ID0gMDtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0MjctXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTEyPXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xMy1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjE0OmV4dGVybiBib29sIGVuYWJsZV90ZHg7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xNS1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTg2PVREWF9CVUlMRF9URFZQU19BQ0NFU1NPUlMoNjQsIFNUQVRFX05PTl9BUkNILCBzdGF0ZV9ub25fYXJjaCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE4OC0jZWxzZVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTg5OiNkZWZpbmUgZW5hYmxlX3RkeFxcdDBcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6NDguMzQxNTc2OTVaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMTkxNDE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBURFggRW5hYmxlbWVudCBQcm9jZXNzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZW5hYmxlX3RkeGAgaXMgYmVpbmcgcHJlc2VudGVkIGFzIGEgbW9kdWxlIHBhcmFtZXRlci4gVGhhdCdzIHRoZSBrZXkgdG8gdHVybmluZyB0aGlzIHdob2xlIFREWCBmZWF0dXJlIG9uLCBpdCBzZWVtcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIHNvIGlmIHRoYXQgcGFyYW1ldGVyIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gc29tZXRoaW5nIHNwZWNpZmljIG5lZWRzIHRvIGhhcHBlbi5cIiBBbmQgdGhlIHRyaWdnZXIgZm9yIHRoYXQgXCJzb21ldGhpbmcgc3BlY2lmaWNcIiBpcyB0aGlzIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uLiBJdOKAmXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLiBUaGUgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBsb2dpYyBmbG93LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRkeF9oYXJkd2FyZV9zZXR1cGAgYWN0dWFsbHkgKmRvZXMqLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gbGllcywgYW5kIHRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzMxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6NTEuOTYzNDk0NTcxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNjA6XFx0aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4zMzYxOlxcdHtcXG4zMzYyOlxcdFxcdGludCByLCBpO1xcbjMzNjM6XFx0XFxuMzM2NDpcXHRcXHQvKiB0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKSB1c2VzIGFzc29jaWF0ZWRfdGR2Y3B1cy4gKi9cXG4zMzY1OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKVxcbjMzNjY6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlcl9jcHUoYXNzb2NpYXRlZF90ZHZjcHVzLCBpKSk7XFxuMzM2NzpcXHRcXG4zMzY4OlxcdFxcdGlmICghZW5hYmxlX3RkeClcXG4zMzY5OlxcdFxcdFxcdHJldHVybiAwO1xcbjMzNzA6XFx0XFxuMzM3MTpcXHRcXHRpZiAoIWVuYWJsZV9lcHQpIHtcXG4zMzcyOlxcdFxcdFxcdHByX2VycihcXFwiRVBUIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjMzNzM6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjMzNzQ6XFx0XFx0fVxcbjMzNzU6XFx0XFxuMzM3NjpcXHRcXHRpZiAoIXRkcF9tbXVfZW5hYmxlZCB8fCAhZW5hYmxlX21taW9fY2FjaGluZyB8fCAhZW5hYmxlX2VwdF9hZF9iaXRzKSB7XFxuMzM3NzpcXHRcXHRcXHRwcl9lcnIoXFxcIlREUCBNTVUgYW5kIE1NSU8gY2FjaGluZyBhbmQgRVBUIEEvRCBiaXQgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMzM3ODpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XFxuMzM3OTpcXHRcXHR9XFxuMzM4MDpcXHRcXG4zMzgxOlxcdFxcdGlmICghZW5hYmxlX2FwaWN2KSB7XFxuMzM4MjpcXHRcXHRcXHRwcl9lcnIoXFxcIkFQSUN2IGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjMzODM6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjMzODQ6XFx0XFx0fVxcbjMzODU6XFx0XFxuMzM4NjpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfT1NYU0FWRSkpIHtcXG4zMzg3OlxcdFxcdFxcdHByX2VycihcXFwidGR4OiBPU1hTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjMzODg6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjMzODk6XFx0XFx0fVxcbjMzOTA6XFx0XFxuMzM5MTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuMzM5MjpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxcXG5cXFwiKTtcXG4zMzkzOlxcdFxcdFxcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcXG4zMzk0OlxcdFxcdH1cXG4zMzk1OlxcdFxcbjMzOTY6XFx0XFx0ciA9IF9fdGR4X2hhcmR3YXJlX3NldHVwKCk7XFxuMzM5NzpcXHRcXHRpZiAocikge1xcbjMzOTg6XFx0XFx0XFx0LypcXG4zMzk5OlxcdFxcdFxcdCAqIERpc2FibGUgVERYIG9ubHkgYnV0IGRvbid0IGZhaWwgdG8gbG9hZCBtb2R1bGUgaWYgdGhlIFREWFxcbjM0MDA6XFx0XFx0XFx0ICogbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuICBObyBuZWVkIHRvIHByaW50IG1lc3NhZ2Ugc2F5aW5nXFxuMzQwMTpcXHRcXHRcXHQgKiBcXFwibW9kdWxlIGlzIG5vdCBsb2FkZWRcXFwiIGJlY2F1c2UgaXQgd2FzIHByaW50ZWQgd2hlbiB0aGUgZmlyc3RcXG4zNDAyOlxcdFxcdFxcdCAqIFNFQU1DQUxMIGZhaWxlZC4gIERvbid0IGJvdGhlciB1bndpbmRpbmcgdGhlIFMtRVBUIGhvb2tzIG9yXFxuMzQwMzpcXHRcXHRcXHQgKiB2bV9zaXplLCBhcyBrdm1feDg2X29wcyBoYXZlIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQgKGFuZCBhcmVcXG4zNDA0OlxcdFxcdFxcdCAqIGludGVudGlvbmFsbHkgbm90IGV4cG9ydGVkKS4gIFRoZSBTLUVQVCBjb2RlIGlzIHVucmVhY2hhYmxlLFxcbjM0MDU6XFx0XFx0XFx0ICogYW5kIGFsbG9jYXRpbmcgYSBmZXcgbW9yZSBieXRlcyBwZXIgVk0gaW4gYSBzaG91bGQtYmUtcmFyZVxcbjM0MDY6XFx0XFx0XFx0ICogZmFpbHVyZSBzY2VuYXJpbyBpcyBhIG5vbi1pc3N1ZS5cXG4zNDA3OlxcdFxcdFxcdCAqL1xcbjM0MDg6XFx0XFx0XFx0aWYgKHIgPT0gLUVOT0RFVilcXG4zNDA5OlxcdFxcdFxcdFxcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NDM6NTEuOTYzNjgwNTkxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjIwNjI2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVERYIFZNIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIHRoZSBDUFUgZmVhdHVyZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGlzbid0IGVuYWJsZWQsIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBzdWNjZXNzX2Rpc2FibGVfdGR4YC4gVGhhdCBzZXRzIGBlbmFibGVfdGR4YCB0byB6ZXJvLCB3aGljaCBpcyBjcml0aWNhbC4gSWYgYGVuYWJsZV90ZHhgIGlzIHplcm8sIHRoZW4gZHVyaW5nIGB2dF9pbml0YCwgaXQgd29uJ3QgYWRkIHRoZSBgQklUKEtWTV9YODZfVERYX1ZNKWAgZmxhZyB0byBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYC4gU28sIG5vIGhhcmR3YXJlIHN1cHBvcnQsIG5vIFREWCBWTSBjcmVhdGlvbiDigJMgdGhhdCdzIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5UaGUgY29yZSBwcm9ibGVtLCBvciBhdCBsZWFzdCB0aGUgdGhpbmcgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0LCBpcyB0aGF0IGJvdGggU0VWLVNOUCBhbmQgVERYIHJlcXVpcmUgaGFyZHdhcmUgc3VwcG9ydC4gQW5kLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCBlbnZpcm9ubWVudHMgbGlrZSBHQ0UgYW5kIHR5cGljYWwgUUVNVSBzZXR1cHMgKmRvbid0KiBleHBvc2UgdGhhdCBraW5kIG9mIGhhcmR3YXJlLiBTbywgbG9naWNhbGx5LCB0aGVzZSBzcGVjaWZpYyBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gVERYIFZNIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSB1bnJlYWNoYWJsZSBpbiB0aG9zZSB2aXJ0dWFsaXplZCBjb250ZXh0cy5cblxuQnV0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIGp1c3QgYmVjYXVzZSB0aGUgY29kZSBwYXRoIG91dGxpbmVkIGlzIGJsb2NrZWQsIGRvZXNuJ3QgbWVhbiB0aGF0IGBrdm1fZ21lbV9wb3B1bGF0ZWAgY2FuJ3QgYmUgY2FsbGVkIGFub3RoZXIgd2F5LiBXaGF0IGFyZSB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgdGhhdCBmdW5jdGlvbj8gVGltZSB0byBjaGVjayB3aGVyZSBlbHNlIGBrdm1fZ21lbV9wb3B1bGF0ZWAgaXMgdXNlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciB3YXkgdG8gdHJpZ2dlciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0MjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mzo1Ni44ODU3NjUzOTVaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDQ0ODYxMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2dtZW1fcG9wdWxhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDEwPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0ODEtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDgyOlxcdGNvdW50ID0ga3ZtX2dtZW1fcG9wdWxhdGUoa3ZtLCBwYXJhbXMuZ2ZuX3N0YXJ0LCBzcmMsIG5wYWdlcywgd3JpdGUsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDgzLVxcdFxcdFxcdFxcdCAgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZSwgXFx1MDAyNnNldl9wb3B1bGF0ZV9hcmdzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4NS1cXHRcXHRhcmdwLVxcdTAwM2VlcnJvciA9IHNldl9wb3B1bGF0ZV9hcmdzLmZ3X2Vycm9yO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQ4NjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IGt2bV9nbWVtX3BvcHVsYXRlIGZhaWxlZCwgcmV0ICVsZCAoZndfZXJyb3IgJWQpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ4Ny1cXHRcXHRcXHQgX19mdW5jX18sIGNvdW50LCBhcmdwLVxcdTAwM2VlcnJvcik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxNDU9c3RhdGljIGludCB0ZHhfdmNwdV9pbml0X21lbV9yZWdpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE4NS1cXHRcXHR9O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzE4NjpcXHRcXHRnbWVtX3JldCA9IGt2bV9nbWVtX3BvcHVsYXRlKGt2bSwgZ3BhX3RvX2dmbihyZWdpb24uZ3BhKSxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxODctXFx0XFx0XFx0XFx0XFx0ICAgICB1NjRfdG9fdXNlcl9wdHIocmVnaW9uLnNvdXJjZV9hZGRyKSxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTcxPWludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzUtLyoqXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1NzY6ICoga3ZtX2dtZW1fcG9wdWxhdGUoKSAtIFBvcHVsYXRlL3ByZXBhcmUgYSBHUEEgcmFuZ2Ugd2l0aCBndWVzdCBkYXRhXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzctICpcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk3LSAqL1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk4OnR5cGVkZWYgaW50ICgqa3ZtX2dtZW1fcG9wdWxhdGVfY2IpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk5LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb3BhcXVlKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYwMC1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwMjpcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjAzLSNlbmRpZlxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04MjA9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nbWVtX2dldF9wZm4pO1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjMtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo4MjQ6c3RhdGljIGxvbmcgX19rdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04MjUtXFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbiwgc3RydWN0IHBhZ2UgKnNyY19wYWdlLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODI2OlxcdFxcdFxcdFxcdGt2bV9nbWVtX3BvcHVsYXRlX2NiIHBvc3RfcG9wdWxhdGUsIHZvaWQgKm9wYXF1ZSlcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgyNy17XFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTg2MC1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MTpsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLCBsb25nIG5wYWdlcyxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjg2MjpcXHRcXHQgICAgICAgaW50IHdyaXRlLCBrdm1fZ21lbV9wb3B1bGF0ZV9jYiBwb3N0X3BvcHVsYXRlLCB2b2lkICpvcGFxdWUpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy04NjMte1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDQtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo5MDU6XFx0XFx0cmV0ID0gX19rdm1fZ21lbV9wb3B1bGF0ZShrdm0sIHNsb3QsIGZpbGUsIHN0YXJ0X2dmbiArIGksIHNyY19wYWdlLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTA2LVxcdFxcdFxcdFxcdFxcdCAgcG9zdF9wb3B1bGF0ZSwgb3BhcXVlKTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE2LX1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxNzpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fcG9wdWxhdGUpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTE4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0Mzo1OS4xMzAyNTk4NTZaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4Nzg0MDU2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uOiBVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBjb2RlLCBzcGVjaWZpY2FsbHksIGBrdm1fZ21lbV9wb3B1bGF0ZWAsIGlzIG9ubHkgY2FsbGVkIGZyb20gYHNucF9sYXVuY2hfdXBkYXRlYCBhbmQgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAuIEJvdGggb2YgKnRob3NlKiBmdW5jdGlvbnMgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IHRvIGV2ZW4gKmJlKiByZWFjaGVkLiBXZSd2ZSBjb25maXJtZWQgdGhpcy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IGNvdWxkIFN5emthbGxlciBiZSBydW5uaW5nIG9uIGEgbWFjaGluZSB0aGF0ICphY3R1YWxseSogc3VwcG9ydHMgU0VWLVNOUCBvciBURFg/IFRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZC5cblxuU2luY2UgU0VWLVNOUCBhbmQgVERYIGFyZSBmdW5kYW1lbnRhbGx5IGhhcmR3YXJlLWRlcGVuZGVudCwgdGhleSBhcmVuJ3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcy4gUUVNVSBtaWdodCBlbXVsYXRlICpzb21lKiB0aGluZ3MsIGJ1dCBkZWZpbml0ZWx5IG5vdCB0aGVzZSBzcGVjaWZpYyBmZWF0dXJlcy4gVGhlcmUncyBubyBzdGFuZGFyZCBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIFNFVi1TTlAgb3IgVERYIHdpdGhpbiBLVk0gdGhhdCBJJ20gYXdhcmUgb2Y7IEtWTSByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKEFNRCBQU1Agb3IgSW50ZWwgVERYIG1vZHVsZSkgZm9yIHRoZWlyIG9wZXJhdGlvbi4gS1ZNICpjYW4ndCogb3BlcmF0ZSB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQsIHNwZWNpZmljYWxseS5cblxuVGhlcmVmb3JlLCB0aGlzIGNvZGUgcGF0aCwgYWNjZXNzZWQgdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMsIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgU3l6a2FsbGVyIGVudmlyb25tZW50cy4gSXQncyBhIGRlYWQgZW5kIGFzIGZhciBhcyBmdXp6aW5nIGdvZXMuIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGlzIHRoZXJlICphbnkqIG90aGVyIGNvbmNlaXZhYmxlIHdheSB0byByZWFjaCBga3ZtX2dtZW1fcG9wdWxhdGVgPyBJdCdzIGV4cG9ydGVkIGZvciBLVk0gaW50ZXJuYWwgdXNlLCBzbyBwZXJoYXBzIHRoZXJlJ3Mgc29tZSBvYnNjdXJlIHBhdGg/IENvdWxkIHdlLCBoeXBvdGhldGljYWxseSwgY2FsbCBgS1ZNX1NFVl9TTlBfTEFVTkNIX1VQREFURWAgd2l0aG91dCBjcmVhdGluZyBhIGZ1bGwgYEtWTV9YODZfU05QX1ZNYD8gTGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGBzbnBfbGF1bmNoX3VwZGF0ZWAgY29kZSBwYXRoLiBOb3BlLCB0aGF0IGNvbmZpcm1zIGl0LiBUaGUgYW5zd2VyIHJlbWFpbnMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjYzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQ0OjEyLjAwODY2OTEwOFoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDEwOlxcdHN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuMjQxMTpcXHR7XFxuMjQxMjpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4yNDEzOlxcdFxcdHN0cnVjdCBzZXZfZ21lbV9wb3B1bGF0ZV9hcmdzIHNldl9wb3B1bGF0ZV9hcmdzID0gezB9O1xcbjI0MTQ6XFx0XFx0c3RydWN0IGt2bV9zZXZfc25wX2xhdW5jaF91cGRhdGUgcGFyYW1zO1xcbjI0MTU6XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG4yNDE2OlxcdFxcdGxvbmcgbnBhZ2VzLCBjb3VudDtcXG4yNDE3OlxcdFxcdHZvaWQgX191c2VyICpzcmM7XFxuMjQxODpcXHRcXHRpbnQgd3JpdGU7XFxuMjQxOTpcXHRcXG4yNDIwOlxcdFxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pIHx8ICFzZXYtXFx1MDAzZXNucF9jb250ZXh0KVxcbjI0MjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjQyMjpcXHRcXG4yNDIzOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cGFyYW1zLCB1NjRfdG9fdXNlcl9wdHIoYXJncC1cXHUwMDNlZGF0YSksIHNpemVvZihwYXJhbXMpKSlcXG4yNDI0OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjI0MjU6XFx0XFxuMjQyNjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IEdGTiBzdGFydCAweCVsbHggbGVuZ3RoIDB4JWxseCB0eXBlICVkIGZsYWdzICVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4yNDI3OlxcdFxcdFxcdCBwYXJhbXMuZ2ZuX3N0YXJ0LCBwYXJhbXMubGVuLCBwYXJhbXMudHlwZSwgcGFyYW1zLmZsYWdzKTtcXG4yNDI4OlxcdFxcbjI0Mjk6XFx0XFx0aWYgKCFwYXJhbXMubGVuIHx8ICFQQUdFX0FMSUdORUQocGFyYW1zLmxlbikgfHwgcGFyYW1zLmZsYWdzIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjQ0OjEyLjAwODk1NDUxOFoiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc2ODI2MzIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enphYmlsaXR5KipcblxuT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuZCB3aHkgSSdtIGNvbmNsdWRpbmcgaXQncyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRmlyc3QsIEkgc2VlIGl0IG1vZGlmaWVzIGBrdm1fZ21lbV9wb3B1bGF0ZWAgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQ1BVSUQgcGFnZSB3cml0ZSByZWZlcmVuY2VzIHdpdGhpbiBLVk0ncyBTRVYtU05QIGFuZCBURFggaW1wbGVtZW50YXRpb25zLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBib3RoIFNFVi1TTlAgYW5kIFREWCBhcmUgZnVuZGFtZW50YWxseSBoYXJkd2FyZS1kZXBlbmRlbnQuXG5cbkkgc2VlIGEgZGlyZWN0IGxpbmthZ2UuICBUaGUgY29kZSBleHBsaWNpdGx5IHVzZXMgYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAuIEkgdHJhY2UgdGhpcyBkb3duLCBhbmQgaXQgY2hlY2tzIGZvciBgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVgLCB3aGljaCBpcyBvbmx5IHNldCBpZiB0aGUgVk0gdHlwZSBpcyBgS1ZNX1g4Nl9TTlBfVk1gLiBUaGlzIGlzIGNydWNpYWwuIGBLVk1fWDg2X1NOUF9WTWAgY2FuIG9ubHkgYmUgY3JlYXRlZCBpZiB0aGUgS1ZNIGVudmlyb25tZW50IHN1cHBvcnRzIGl0IHZpYSBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYCwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBCSVQoS1ZNX1g4Nl9TTlBfVk0pYCBmbGFnLiBUaGF0IGZsYWcsIGluIHR1cm4sIGlzIHByZWRpY2F0ZWQgb24gdGhlIGhvc3QgQ1BVIGhhdmluZyBgWDg2X0ZFQVRVUkVfU0VWX1NOUGAuIFNvLCB0aGlzIGVudGlyZSBwYXRoIGlzIHN0cmljdGx5IGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgQU1EIFNFVi1TTlAgY2FwYWJsZSBDUFVzLlxuXG5UaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIFREWC4gSSBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gZnJvbSBgdGR4X3ZjcHVfaW5pdF9tZW1fcmVnaW9uYCAod2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGVuY3J5cHRpb24pLCBhbGwgdGhlIHdheSBiYWNrIHRocm91Z2ggYHRkeF92Y3B1X2lvY3RsYCB0byBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgd2hlbiBoYW5kbGluZyBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYC4gVGhhdCBwYXRoIG9ubHkgd29ya3MgaWYgYGlzX3RkX3ZjcHUodmNwdSlgIGlzIHRydWUgd2hpY2ggaW4gdHVybiByZXF1aXJlcyAgYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTWAsIHdoaWNoIGluIHR1cm4gcmVxdWlyZXMgYGVuYWJsZV90ZHhgLCB3aGljaCByZXF1aXJlcyB0aGF0IHRoZSBob3N0IENQVSBoYXMgdGhlIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgZmxhZy5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF04oCZcyB1bnJlYWNoYWJsZSBpbiBjb21tb24gdmlydHVhbGl6ZWQgc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgaWYgdGhlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZW4ndCBwcmVzZW50LiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHRhcmdldCBjb2RlLCBpbmNsdWRpbmcgYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgLCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSwgb3IgUUVNVSB3aXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCAoQU1EIFNFVi1TTlAgb3IgSW50ZWwgVERYKS4gQmVjYXVzZSBzeXprYWxsZXIgaXMgdXN1YWxseSBydW4gb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgdGhlc2Ugd2hlcmUgdGhvc2UgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBlbXVsYXRlZCwgdGhpcyBwYXRjaCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ5NiwiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo0NDoyNS43NzcyMjAzWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX3BvcHVsYXRlYCBhbmQgaXRzIGNhbGxlcnMgaW4gS1ZNJ3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IGFjcXVpcmluZyBhIHdyaXRlIHJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYW5kIHRvIGFkZCBhIE5VTEwgY2hlY2sgZm9yIHRoZSBzb3VyY2UgYnVmZmVyLiBTRVYtU05QIGFuZCBURFggYXJlIGhhcmR3YXJlLWFzc2lzdGVkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIENQVSBzdXBwb3J0IChBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgpLiBUaGV5IGFyZSBub3QgZW11bGF0ZWQgaW4gc29mdHdhcmUgYnkgUUVNVSBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciB0eXBpY2FsbHkgcnVucy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZW0pIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCB0aGlzIHBhdGNoIHNob3VsZCBub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX3BvcHVsYXRlYCBhbmQgaXRzIGNhbGxlcnMgaW4gS1ZNJ3MgU0VWLVNOUCBhbmQgVERYIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IGFjcXVpcmluZyBhIHdyaXRlIHJlZmVyZW5jZSBmb3IgQ1BVSUQgcGFnZXMgYW5kIHRvIGFkZCBhIE5VTEwgY2hlY2sgZm9yIHRoZSBzb3VyY2UgYnVmZmVyLiBTRVYtU05QIGFuZCBURFggYXJlIGhhcmR3YXJlLWFzc2lzdGVkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIENQVSBzdXBwb3J0IChBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgpLiBUaGV5IGFyZSBub3QgZW11bGF0ZWQgaW4gc29mdHdhcmUgYnkgUUVNVSBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciB0eXBpY2FsbHkgcnVucy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoYHNucF9sYXVuY2hfdXBkYXRlYCwgYHRkeF92Y3B1X2luaXRfbWVtX3JlZ2lvbmAsIGFuZCBga3ZtX2dtZW1fcG9wdWxhdGVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZW0pIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCB0aGlzIHBhdGNoIHNob3VsZCBub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowt2rxz[1] Phase: Running StartedAt: 2026-06-23 09:44:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2rxz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-23 09:44:52 +0000 UTC FinishedAt: 2026-06-23 09:45:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}