ZGlmZiAtLWdpdCBhL2RvYy9sZnVuLy5kZWZhdWx0IGIvZG9jL2xmdW4vLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxOWY2OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuLy5kZWZhdWx0CkBAIC0wLDAgKzEsMTYgQEAKK211c3RlcigpCisKK0ZVTktUSU9OOgorCXR5cGUgbXVzdGVyKC4uLikKKwkKK0FSR1VNRU5URToKKwkKK0JFU0NIUkVJQlVORzoKKworUlVFQ0tHQUJFV0VSVDoKKwkKK0JFTUVSS1VORzoKKwkKK0JFSVNQSUVMOgorCitTSUVIRSBBVUNIOgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vLnN5bm9ueW0gYi9kb2MvbGZ1bi8uc3lub255bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2M5MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vLnN5bm9ueW0KQEAgLTAsMCArMSwxNCBAQAorQV9DT04gUXVlcnlBdHRyaWJ1dGUKK0FfREVYIFF1ZXJ5QXR0cmlidXRlCitBX0lOVCBRdWVyeUF0dHJpYnV0ZQorQV9TVFIgUXVlcnlBdHRyaWJ1dGUKK3BhdGhkIFNlYXJjaFBhdGgKK3FwcCBRdWVyeVBvc3NQcm9ub3VuCitTUF9OQU1FIERlZmVuZAorU1BfTk9fQUNUSVZFX0RFRkVOU0UgRGVmZW5kCitTUF9OT19FTkVNWSBEZWZlbmQKK1NQX1BIWVNJQ0FMX0FUVEFDSyBEZWZlbmQKK1NQX1JFQ1VSU0lWRSBEZWZlbmQKK1NQX1JFRFVDRV9BUk1PVVIgRGVmZW5kCitTUF9TSE9XX0RBTUFHRSBEZWZlbmQKK1Rlc3RJZ25vcmVFeHQgVGVzdElnbm9yZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkQWN0aW9uIGIvZG9jL2xmdW4vQWRkQWN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTgzY2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRBY3Rpb24KQEAgLTAsMCArMSw3NiBAQAorQWRkQWN0aW9uKEwpCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyB2b2lkIEFkZEFjdGlvbihtaXhlZCBmdW4sIG1peGVkIGNtZCwgaW50IGZsYWcsIGludCBsdmwpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcGxheWVyL2NvbW1hbmQuYworCitBUkdVTUVOVEU6CisgICAgIGZ1bgl6dSBydWZlbmRlIE1ldGhvZGUgaW0gU3BpZWxlciBvZGVyIGVpbmUgQ2xvc3VyZQorICAgICBjbWQJYXVzbG9lc2VuZGVzIEtvbW1hbmRvdmVyYgorICAgICBmbGFnCXVuc2NoYXJmIGF1c2Z1ZWhyZW4KKyAgICAgbHZsCWFiIHdlbGNoZW0gKE1hZ2llcmxldmVsKSBmdW5rdGlvbmllcnQgZGFzIEtvbW1hbmRvCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGVtIFNwaWVsZXIgd2lyZCBlaW4gbmV1ZXMgS29tbWFuZG8gZGVmaW5pZXJ0LiBEaWVzZXMga2FubiBlaW5lIE1ldGhvZGUKKyAgICAgaW4gaWhtIHNlaW4sIHNvIHdpZSBiZWkgYWxsZW4gU3BpZWxlcmtvbW1hbmRvcyB1ZWJsaWNoLCBrYW5uIGFiZXIgYXVjaAorICAgICBlaW5lIENsb3N1cmUgKExmdW4tQ2xvc3VyZSBvZGVyIExhbWJkYSkgZW50aGFsdGVuLgorCisgICAgIE1pdHRlbHMgImZsYWciIGthbm4gbWFuIGRpZSBLb21tYW5kb2Vya2VubnVuZyB1bnNjaGFyZiBoYWx0ZW4sIGQuaC4gd2llCisgICAgIGJlaSBBZGRDbWQoTCkgdW5kIGFkZF9hY3Rpb24oRSkgd2lyZCBlaW4gJ2NtZCcgYmVpICdmbGFnID0gMScgYXVjaAorICAgICBzY2hvbiB2b24gUHJhZWZpeC1TdHJpbmdzIChoaWVyIG9obmUgTGVlcnplaWNoZW4pIGdldHJpZ2dlcnQ6CisgICAgIEFkZEFjdGlvbihbLi4uXSwgIm11aCIsIDEsIDApIHdpcmQgekIgYXVjaCB2b24gJ211aHRlbnMnIG9kZXIgJ211aDQnCisgICAgIGF1c2dlbG9lc3QuCisKKyAgICAgTWl0ICJsdmwiIGJlZ3Jlbnp0IG1hbiBkaWUgQXVzZnVlaHJiYXJrZWl0LiBTcGllbGVyIGhhYmVuIGVpbgorICAgICBNYWdpZXJsZXZlbCB2b24gMCwgU2VoZXIgdm9uIDEuCisKKyAgICAgRGFzIEtvbW1hbmRvIHdpcmQgaW4gUF9MT0NBTENNRFMgZWluZ2V0cmFnZW4uIERpZXNlIFByb3BlcnR5IHdpcmQKKyAgICAgbmljaHQgZ2VzcGVpY2hlcnQhIEVmZmVrdGl2IGthbm4gbWFuIG1pdCBBZGRBY3Rpb24oKSBlaW4ga29tbWFuZG8tCisgICAgIGdlYmVuZGVzIE9iamVrdCBpbSBTcGllbGVyIGVpbnNwYXJlbi4KKworQkVNRVJLVU5HRU46CisgICAgIC0gZXMgZ2lidCBfbm9jaF8ga2VpbiBSZW1vdmVBY3Rpb24hIFBlciBIYW5kIGluIFBfTE9DQUxDTURTIGVkaXRpZXJlbgorICAgICAgIGthbm4genUgZXJuc3RlbiBGZWhsZXJuIGZ1ZWhyZW4uCisgICAgIC0gZWNodGUgU3BpZWxlcmtvbW1hbmRvcyBrYW5uIG1hbiBkYW1pdCBfbmljaHRfIHVlYmVyc2NocmVpYmVuLAorICAgICAgIGVpbiBBZGRBY3Rpb24oLi4uLCJzYWciLDEsMCk7IGZ1bmt0aW9uaWVydCBuaWNodAorICAgICAtIGVpbiBnZW5lcmVsbGVzIEFkZEFjdGlvbiguLi4sIiIsMSwwKTsgZ2VodCBuaWNodAorCitCRUlTUElFTEU6CisgICAgIC4uLgorICAgICB0aGlzX3BsYXllcigpLT5BZGRBY3Rpb24oc3ltYm9sX2Z1bmN0aW9uKCJ6ZWlnZV9teXN0ZXJpdW0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRfb2JqZWN0KCIuLi4vbXlzdHplaWdlciIpKSwKKwkJCSAgICAgICJrbm9yZnVsYSIsMCwwKTsKKyAgICAgd3JpdGUoYnJlYWtfc3RyaW5nKCJXYW5uIGltbWVyIGR1IGpldHp0IGRhcyBLb21tYW5kbyBcImtub3JmdWxhXCIgIgorCQkJImVpbmdpYnN0LCB3ZXJkZW4gZGlyIE15c3RlcmllbiBlbnRodWVsbHQhIiw3OCkpOworICAgICAuLi4KKworICAgICAvLyBpbSBPYmpla3QgImtub3JmdWxhIiAuLi4KKyAgICAgaW50IHplaWdlX215c3Rlcml1bShzdHJpbmcgc3RyKSB7CisgICAgICAgc3RyaW5nIG15c3Q7CisgICAgICAgbXlzdD1lbnZpcm9ubWVudChUUCktPlF1ZXJ5TXlzdGVyaXVtKHN0cik7CisgICAgICAgaWYobXlzdCkgeworICAgICAgICAgd3JpdGUoIkR1IGhhc3QgZWluIE15c3Rlcml1bSBlbnRkZWNrdCFcbiIpOworCSB3cml0ZShicmVha19zdHJpbmcobXlzdCw3OCkpOworCSBzYXkoYnJlYWtfc3RyaW5nKAorCQlUUC0+TmFtZShXRVIpKyIgc2NoZWludCBuYWNoIGt1cnplciBLb256ZW50cmF0aW9uIGV0d2FzICIKKwkJImVudGRlY2t0IHp1IGhhYmVuISIsNzgpKTsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAgd3JpdGUoYnJlYWtfc3RyaW5nKAorCQkiTGVpZGVyIGVudGRlY2tzdCBkdSB0cm90eiBkZWluZXIgbWFnaXNjaGVuIEZhZWhpZ2tlaXQgIgorCQkia2VpbiBNeXN0ZXJpdW0gaW4gZGVpbmVyIFVtZ2VidW5nLiIsNzgpKTsKKwkgc2F5KGJyZWFrX3N0cmluZygKKwkJVFAtPk5hbWUoV0VSKSsiIGtvbnplbnRyaWVydCBzaWNoIHNpY2h0YmFyLCBzaWVodCBkYW5uICIKKwkJImplZG9jaCBldHdhcyBlbnR0YWV1c2NodCBhdXMuIiw3OCkpOworICAgICAgIH0KKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorCitTSUVIRSBBVUNIOgorCQkJUF9MT0NBTENNRFMKKyAgICAgRmVobGVybWVsZHVuZ2VuOglub3RpZnlfZmFpbChFKSwgX25vdGlmeV9mYWlsKEUpCisgICAgIEFyZ3VtZW50c3RyaW5nOglxdWVyeV92ZXJiKEUpLCBfdW5wYXJzZWRfYXJncyhMKQorICAgICBTb25zdGlnZXM6CQlyZXBsYWNlX3BlcnNvbmFsKEUpLCBlbmFibGVfY29tbWFuZHMoRSkKKyAgICAgQWx0ZXJuYXRpdmVuOglBZGRDbWQoTCksIGFkZF9hY3Rpb24oRSkKKworMjQuIE1hZXJ6IDIwMDQgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZEFkamVjdGl2ZSBiL2RvYy9sZnVuL0FkZEFkamVjdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjU4MTAxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkQWRqZWN0aXZlCkBAIC0wLDAgKzEsMzkgQEAKK0FkZEFkamVjdGl2ZSgpCisKK0ZVTktUSU9OOgorICAgICB2b2lkIEFkZEFkamVjdGl2ZShzdHJpbmd8c3RyaW5nKiBhZGopOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgIGFkagorICAgICAgICAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmcgbWl0IGRlbiBBZGpla3RpdmVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgIFp1c2FldHpsaWNoIHp1IGRlbiBtaXQgQWRkSWQoKSB2ZXJnZWJlbmVuIEJlemVpY2huZXJuIGxhZXNzdCBzaWNoIG1pdAorICAgICBkZXIgVmVyZ2FiZSB2b24gQWRqZWt0aXZlbiBkaWUgQW5zcHJlY2hiYXJrZWl0IGVpbmVzIE9iamVrdGVzIGVyaG9laGVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVNRVJLVU5HRU46CisgICAgIERpZSBBZGpla3RpdmUgd2VyZGVuIG5pY2h0IGRla2xpbmllcnQsIG1hbiBtdXNzIGFsc28gZnVlciBqZWRlbgorICAgICBzaW5udm9sbGVuIEZhbGwgZWluIEFkamVrdGl2IHVlYmVyZ2ViZW4uCisKK0JFSVNQSUVMRToKKworICAgICAgIEFkZElkKCAoeyAiemV0dGVsIiwgImJsYXR0IiB9KSApOworICAgICAgIEFkZEFkamVjdGl2ZSggKHsgImtsZWluZW4iLCAia2xlaW5lcyIgfSkgKTsKKworICAgICBEYXMgT2JqZWt0IHJlYWdpZXJ0IGpldHp0IGF1ZiAiemV0dGVsIiwgImtsZWluZW4gemV0dGVsIiwgImJsYXR0IiwKKyAgICAgImtsZWluZXMgYmxhdHQiIHNvd2llIGF1ZiBkaWUgKHNwcmFjaGxpY2ggbmljaHQgZ2FueiBzbyBrb3JyZWt0ZW4pCisgICAgIEtvbnN0cnVrdGlvbmVuICJrbGVpbmVzIHpldHRlbCIsICJrbGVpbmVuIGJsYXR0IiwgImtsZWluZXMga2xlaW5lbgorICAgICB6ZXR0ZWwiLCAuLi4KKworU0lFSEUgQVVDSDoKKyAgICAgQWRkSWQoKSwgUmVtb3ZlQWRqZWN0aXZlKCkgaWQoKSwgcHJlc2VudCgpLCAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjAuMDEuMjAxNSwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRBbW91bnQgYi9kb2MvbGZ1bi9BZGRBbW91bnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlOGUzZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZEFtb3VudApAQCAtMCwwICsxLDI1IEBACitBZGRBbW91bnQoKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBBZGRBbW91bnQoaW50IG1lbmdlKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3VuaXQuYworCitBUkdVTUVOVEU6CisgICAgIG1lbmdlCisgICAgICAgICAgRGllIE1lbmdlLCBkaWUgZGVyIFVuaXQgaGluenVnZWZ1ZWd0IHdlcmRlbiBzb2xsIChrYW5uIGF1Y2gKKyAgICAgICAgICBuZWdhdGl2IHNlaW4pLgorCitCRVNDSFJFSUJVTkc6CisgICAgIG1lbmdlIHdpcmQgenVyIGFrdHVlbGxlbiBNZW5nZSBoaW56dWdlemFlaGx0LiBTb2xsdGUgZGFzIEVyZ2VibmlzIDAKKyAgICAgd2VyZGVuLCB3aXJkIGRpZSBVbml0IGluIGFic2VoYmFyZXIgWmVpdCB6ZXJzdG9lcnQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitTSUVIRSBBVUNIOgorICAgICAvc3RkL3VuaXQuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDggMTA6MTU6NTAgMTk5NiBieSBXYXJnb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZENsYXNzIGIvZG9jL2xmdW4vQWRkQ2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3NzMwYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZENsYXNzCkBAIC0wLDAgKzEsMjggQEAKK0FkZENsYXNzKCkKK0ZVTktUSU9OOgorICAgICB2b2lkIEFkZENsYXNzKHN0cmluZ3xzdHJpbmcqIGNsYXNzKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcvc3RyaW5nKiBjbGFzcwktIFN0cmluZyBvZGVyIFN0cmluZ2FycmF5IGRlciBLbGFzc2UobikKKworQkVTQ0hSRUlCVU5HOgorICAgICBEZW0gT2JqZWt0IHdlcmRlbiB3ZWl0ZXJlIEtsYXNzaWZpemllcnVuZ2VuIGhpbnp1Z2VmdWVndC4KKworICAgICBEaWUgYWxsZ2VtZWluIHZlcmZ1ZWdiYXJlbiBLbGFzc2VuIHNpbmQgdW50ZXIgL3N5cy9jbGFzcy5oIGRlZmluaWVydC4KKworQkVNRVJLVU5HRU46CisgICAgIFZvciBkZW0gNy4gTm92IDIwMTIgcHJ1ZWZ0ZSBpc19jbGFzc19tZW1iZXIoKSBhdWNoIGRpZSBQX0lEUy4gRGFtaXQgd2FyCisgICAgIHpCIGVpbiBBZGRJZCgiZGFlbW9uIikgZ2xlaWNoYmVkZXV0ZW5kIGVpbmVtIEFkZENsYXNzKENMX0RFTU9OKS4KKworICAgICBCaXR0ZSBwcnVlZnQgZXVyZSBPYmpla3RlIChOUENzLCBLcmFua2hlaXRlbiwgR2lmdGUsIC4uLikgYXVmIGtvcnJla3RlCisgICAgIEtsYXNzaWZpemllcnVuZy4KKworU0lFSEUgQVVDSDoKKyAgICAgUmVtb3ZlQ2xhc3MoKSwgaXNfY2xhc3NfbWVtYmVyKCkKKyAgICAgUF9DTEFTUworCisyMC4wMS4yMDE1LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZENtZCBiL2RvYy9sZnVuL0FkZENtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWVhOGRiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkQ21kCkBAIC0wLDAgKzEsMjEwIEBACitBZGRDbWQoTCkKK0ZVTktUSU9OOgorICAgIHZhcmFyZ3Mgdm9pZCBBZGRDbWQobWl4ZWQgY21kLCBtaXhlZCBmdW5jLCBbbWl4ZWQgZmxhZywgW21peGVkIGlkXV0pOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC90aGluZy9jb21tYW5kcy5jCisKK0FSR1VNRU5URToKKyAgICBjbWQKKyAgICAgICBWZXJiZW4sIGF1ZiBkaWUgcmVhZ2llcnQgd2VyZGVuIHNvbGwKKyAgICAgICBPREVSCisgICAgICAgUmVnZWwgbWl0IFRyaWdnZXJ2ZXJiIHVuZCBub2V0aWdlbiBLZXl3b3Jkcy9TeW5vbnltZW4KKyAgICBmdW5jCisgICAgICAgRnVua3Rpb25zbmFtZSBpbSBzZWxiZW4gT2JqZWt0IG9kZXIgQ2xvc3VyZSAoRnVua3Rpb25zcG9pbnRlcikKKyAgICBmbGFnIChvcHRpb25hbCkKKyAgICAgICBVbnNjaGFyZmUgQXVzZnVlaHJ1bmcgPT0gMQorICAgICAgIE9ERVIKKyAgICAgICBGZWhsZXJtZWxkdW5nZW4gYmVpIE51dHp1bmcgdm9uIFJlZ2VsbgorICAgIGlkIChvcHRpb25hbCkKKyAgICAgICBlaW5lIElELCB1ZWJlciBkaWUgZGFzIEtvbW1hbmRvIGVpbmRldXRpZyB3aWVkZXIgZ2Vsb2VzY2h0CisgICAgICAgd2VyZGVuIGthbm4KKworQkVTQ0hSRUlCVU5HOgorICAgIFdlbm4gZWluIFNwaWVsZXIgaW0gRWluZmx1c3NiZXJlaWNoIGRlcyBPYmpla3RlcyBkYXMgVmVyYiBiZW51dHp0LAorICAgIHdpcmQgZGllIGVudHNwcmVjaGVuZGUgRnVua3Rpb24gaW0gT2JqZWt0IGF1ZmdlcnVmZW46CisgICAgLSBkaWUgVmVyYmVuIHNvbGx0ZW4gSW1wZXJhdGl2ZSBzZWluCisgICAgLSBkaWUgRnVua3Rpb24gbXVzcyAxIGZ1ZXIgRVJGT0xHICh1bmQgRlBzISkgdW5kIDAgc29uc3QgenVydWVja2dlYmVuCisgICAgICAoc29uc3Qgd2VyZGVuIGV2dGwuIHdlaXRlcmUgRnVua3Rpb25lbiBtaXQgZGllc2VtIEtvbW1hbmRvdmVyYiBnZXJ1ZmVuKQorICAgIC0gaW5uZXJoYWxiIGRlciBGdW5rdGlvbmVuIGtvZW5uZW4gRmVobGVybWVsZHVuZ2VuIGZ1ZXIgZGVuIHRvdGFsZW4KKyAgICAgIE1pc3NlcmZvbGcgZGVzIEtvbW1hbmRvcyBtaXQgbm90aWZ5X2ZhaWwgZ2VzZXR6dCB3ZXJkZW4KKyAgICAgIChhbnN0YXR0ICJXaWUgYml0dGU/IikKKworICAgIEFkZENtZCBpc3QgZWluIGR5bmFtaXNjaGVyIEVyc2F0eiBmdWVyIGFkZF9hY3Rpb24gLSBpbSBHZWdlbnNhdHoKKyAgICB6dSBhZGRfYWN0aW9uIGtvZW5uZW4gYXVjaCBvaG5lIGVybmV1dGVuIEF1ZnJ1ZiBkZXIgaW5pdCgpIG5ldWUKKyAgICBLb21tYW5kb3MgaGluenVnZWZ1ZWd0IHdlcmRlbi4KKworICAgIEFkZENtZCBrYW5uIGRhcyBMZWJlbiBlaW5mYWNoZXIgbWFjaGVuIG1pdDoKKyAgICAjIyMgUkVHRUxOOiAjIyMKKyAgICAgIEJlaSBrb21wbGV4ZW4gU3ludGF4ZW4ga2FubiBlaW4gU3RyaW5nIGFuZ2VnZWJlbiB3ZXJkZW4sIGRlciBkaWUKKyAgICAgIF9ub3R3ZW5kaWdlbl8gKG5pY2h0IGRpZSBlcmxhdWJ0ZW4hKSBTY2hsdWVzc2Vsd29ydGUgdW5kIGRlcmVuCisgICAgICB6dWxhZXNzaWdlIFN5bm9ueW1lIGJlc2NocmVpYnQuIERhbWl0IGthbm4gbWFuIHNpY2ggZWluZW4gZ3Jvc3NlbgorICAgICAgVGVpbCBlaWdlbmVyIEF1c3dlcnR1bmcgZXJzcGFyZW4uCisKKyAgICAgIE51ciB3ZW5uIGluIHJpY2h0aWdlciBSZWloZW5mb2xnZSBhdXMgSkVERVIgZGVyIGR1cmNoICYgZ2V0cmVubnRlbgorICAgICAgU3lub255bWdydXBwZW4gZWluIFdvcnQgaW0gU3BpZWxlcmtvbW1hbmRvIGVudGhhbHRlbiBpc3QsIHdpcmQKKyAgICAgIGRpZSB6dWdlaG9lcmlnZSBGdW5rdGlvbiBhdXNnZWZ1ZWhydC4KKworICAgICAgVHJlbm5lciBzaW5kOiB8IGZ1ZXIgQWx0ZXJuYXRpdmVuCisgICAgICAgICAgICAgICAgICAgICYgZnVlciBLb25qdW5rdGlvbmVuCisKKyAgICAgIEJlaXNwaWVsOgorICAgICAgICAicml0enxyaXR6ZXxzY2huaXR6fHNjaG5pdHplJm1pdCZtZXNzZXJ8c2Nobml0em1lc3NlciYiCisgICAgICAgICJoZXJ6fGhlcnpjaGVuJnJpbmRlfGJhdW1yaW5kZSIKKyAgICAgIHd1ZXJkZSB6LkIuIGR1cmNoCisgICAgICAgICJyaXR6IG1pdCBkZW0gTWVzc2VyIGVpbiBIZXJ6IGluIGRpZSBSaW5kZSBkZXMgQmF1bWVzIgorICAgICAgICAic2Nobml0eiBtaXQgTWVzc2VyIEhlcnpjaGVuIEJhdW1yaW5kZSIKKyAgICAgICAgInNjaG5pdHogbWl0IG1laW5lbSBNZXNzZXIgSGVyemNoZW4gaW4gZGllIGhhcnRlIEJhdW1yaW5kZSIKKyAgICAgIGVyZnVlbGx0IHdlcmRlbi4KKworICAgICAgU3BlemlhbHJlZ2VsdGVpbGUgc2luZDoKKyAgICAgIC0gQFBSRVNFTlQ6IGVudHNwcmljaHQgZWluZW0gT2JqZWt0IGluIEludiBvZGVyIEVudiBkZXMgU3BpZWxlcnMKKyAgICAgIC0gQElEOiAgICAgIGVudHNwcmljaHQgZGVyIElEIGRlcyBrb21tYW5kb2Jlc2l0emVuZGVuIE9iamVrdGVzCisgICAgICAgICAgICAgICAgICAod28gZGllIEtvbW1hbmRvbWV0aG9kZSBkZWZpbmllcnQgaXN0LCBpc3Qgbm9jaCB1bndpY2h0aWcpCisgICAgICAtIEBQVVRfR0VUX0RST1AsIEBQVVRfR0VUX1RBS0UsIEBQVVRfR0VUX05PTkU6CisgICAgICAgICAgICAgICAgICBlbnRzcHJlY2hlbmQgZGVuIEZpbHRlcm9wdGlvbmVuIGZ1ZXIgZmluZF9vYnMoKQorICAgICAgQUNIVFVORzogWnVzYWV0emxpY2hlIFppZmZlcm4gaW4gVmVyYmluZHVuZyBtaXQgZGVuIEAtU3BlemlhbHJlZ2VsbgorICAgICAgICAgICAgICAgc2luZCBzY2hsZWNodC4gQC1SZWdlbG4gdmVyc3VjaGVuIGdpZXJpZywgT2JqZWt0ZSBleGFrdCBpbQorICAgICAgICAgICAgICAgSW52ZW50b3J5IHp1IG1hdGNoZW4gKCJvYmpla3QgMyIgYW5zdGF0dCAib2JqZWt0IikgdW5kIG1pc3MtCisgICAgICAgICAgICAgICBpbnRlcnByZXRpZXJlbiBkYWhlciB6QiBkaWUgNCBpbiAic3RvcGYgb2JqZWt0IDMgaW4gbG9jaCA0IiBhbHMKKyAgICAgICAgICAgICAgIFRlaWwgZGVzIE9iamVrdC1JRC1TdHJpbmdzLgorICAgICAgICAgICAgICAgSW50ZXJuYTogMyBTdWJzdHJpbmdzIGZ1ZXIgQFBSRVNFTlQvQElEICgiZ3J1ZW5lciBrcmlzdGFsbCAyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDUgZnVlciBAUFVULi4uICgia3Jpc3RhbGwgMiBpbiBiZXV0ZWwgMyIpCisKKyAgICAjIyMgRkVITEVSTUVMRFVOR0VOIChiZWkgQW53ZW5kdW5nIHZvbiBSZWdlbG4pOiAjIyMKKyAgICAgIEFscyBkcml0dGVyIFBhcmFtZXRlciBrb2VubmVuIGF1Y2ggRmVobGVybWVsZHVuZ2VuIGZ1ZXIgamV3ZWlscworICAgICAgZmVobGVuZGUgU3lub255bWdydXBwZW4gKGF1c3NlciBkZXIgZXJzdGVuIC0gZGVuIEtvbW1hbmRvdmVyYmVuKQorICAgICAgYW5nZWdlYmVuIHdlcmRlbi4gU2llIHdlcmRlbiBpbiBkZXJzZWxiZW4gUmVpaGVuZm9sZ2UgKCEpIHdpZSBkaWUKKyAgICAgIFN5bm9ueW1ncnVwcGVuIGFuZ2VnZWJlbi4KKworICAgICAgTWl0IG5pY2h0IHZvbiBTcGllbGVybiBlcmZ1ZWxsYmFyZW4gUmVnZWxuIHVuZCBeLUZlaGxlcm1lbGR1bmdlbgorICAgICAga2FubiBtYW4gYXVjaCBvaG5lIEF1c2Z1ZWhydW5nIGVpbmVyIEZ1bmt0aW9uIFRleHRlIGFuIFNwaWVsZXIKKyAgICAgIHVuZCBVbWdlYnVuZyBhdXNnZWJlbi4gU2llaGUgZGF6dSBBZGRDbWRfYnNwLgorCisgICAgICBUcmVubmVyIHNpbmQ6IHwgenVtIFRyZW5uZW4gZGVyIGVpbnplbG5lbiBGZWhsZXJtZWxkdW5nZW4KKyAgICAgICAgICAgICAgICAgICAgXiB1bQorICAgICAgICAgICAgICAgICAgICAgICAtIGRpZSBBdXN3ZXJ0dW5nIChhYiBkaWVzZXIgRmVobGVybWVsZHVuZyEpIG1pdAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4gMTsiIHp1IGJlZW5kZW4gdW5kCisgICAgICAgICAgICAgICAgICAgICAgIC0gZWluZSB3cml0ZV5zYXktTWVsZHVuZyB6dSB0cmVubmVuIHVuZAorICAgICAgICAgICAgICAgICAgICAgICAtIChmdWVyIGZ1bmt0aW9uc2xvc2UgQWRkQ21kIGF1Y2ggRlBzIHp1IHZlcmdlYmVuISkKKworICAgICAgQmVpc3BpZWxmZWhsZXJtZWxkdW5nZW4gZnVlciBvYmlnZSBSZWdlbDoKKyAgICAgICAgIldvbWl0IHdpbGxzdCBEdSBzY2huaXR6ZW4/fFdhcyB3aWxsc3QgRHUgc2Nobml0emVuP3wiCisgICAgICAgICJXb2hpbmVpbiB3aWxsc3QgRHUgZGFzIHNjaG5pdHplbj8iCisKKyAgICAgIEVzIGtvZW5uZW4gaW4gZGVuIEZlaGxlcm1lbGR1bmdlbiBmb2xnZW5kZSBQbGF0emhhbHRlciBiZW51dHp0CisgICAgICB3ZXJkZW46CisgICAgICAtIEB2ZXJiIChlcnNldHp0IGR1cmNoIHF1ZXJ5X3ZlcmIoKSBvaG5lIGJlZW5kZW5kZXMgJ2UnKQorICAgICAgLSBAVkVSQiAoZXJzZXR6dCBkdXJjaCBjYXBpdGFsaXplKHF1ZXJ5X3ZlcmIoKSkgb2huZSBiZWVuZGVuZGVzICdlJykKKyAgICAgIC0gQFdFUngsIEBXRVNTRU54LCBAV0VNeCwgQFdFTng6IHNpZWhlIGFsbGVzIGF1cyByZXBsYWNlX3BlcnNvbmFsKCkKKyAgICAgICAgLSBAV0UuLjEgaXN0IGltbWVyIGRlciBha3RpdmUgU3BpZWxlcgorICAgICAgICAtIGFsbGUgZm9sZ2VuZGVuIHNpbmQgZGllIG1hdGNoZW5kZW4gUGFyYW1ldGVyIGRlciBTcGllbGVyZWluZ2FiZQorICAgICAgICAgIC0gKHgtMSk8PUZlaGxlcm1lbGR1bmcgKGRhIHg9MSBTcGllbGVyIHVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4LTEpPkZlaGxlcm1lbGR1bmdzb2JqZWt0IG5pY2h0IGV4aXN0ZW50KQorCisgICAgICBBdXNmdWVocnVuZ3NiZWlzcGllbDoKKyAgICAgICAgQWRkQ21kKCJyaXR6fHJpdHplfHNjaG5pdHp8c2Nobml0emUmbWl0Jm1lc3NlcnxzY2huaXR6bWVzc2VyJiIKKyAgICAgICAgICAgICAgICJoZXJ6fGhlcnpjaGVuJnJpbmRlfGJhdW1yaW5kZSIsIydmdW4sCisgICAgICAgICAgICAgICJXaWxsc3QgRHUgbWl0IGV0d2FzIEB2ZXJiZW4/fFdvbWl0IHdpbGxzdCBkdSBAdmVyYmVuP3wiCisgICAgICAgICAgICAgICJXYXMgd2lsbHN0IGR1IG1pdCBkZW0gQFdFTTMgQHZlcmJlbj98IgorICAgICAgICAgICAgICAiV29oaW5laW4gd2lsbHN0IER1IGRhcyBAV0VONCBzY2huaXR6ZW4/Iik7CisgICAgICAgIDEuICJyaXR6ZSIgPT0gIldpbGxzdCBEdSBtaXQgZXR3YXMgcml0emVuPyIKKyAgICAgICAgMi4gInNjaG5pdHogbWl0IiA9PSAiV29taXQgd2lsbHN0IGR1IHNjaG5pdHplbj8iCisgICAgICAgIDMuICJyaXR6IG1pdCBtZXNzZXIiID09ICJXYXMgd2lsbHN0IGR1IG1pdCBkZW0gbWVzc2VyIHJpdHplbj8iCisgICAgICAgIDQuICJyaXR6ZSBtaXQgZGVtIG1lc3NlciBlaW4gaGVyeiIgPT0KKyAgICAgICAgICAgICAiV29oaW5laW4gd2lsbHN0IER1IGRhcyBoZXJ6IHNjaG5pdHplbj8iCisgICAgICAgIDUuICJyaXR6ZSBtaXQgZGVtIG1lc3NlciBlaW4gaGVyemNoZW4gaW4gZGllIGJhdW1yaW5kZSIKKyAgICAgICAgICAgICA9PSBFcmZvbGchCisKKyAgICAjIyMgVU5TQ0hBUkZFUiBBVVNGVUVIUlVORzogIyMjCisgICAgICBCZWkgdW5zY2hhcmZlciBBdXNmdWVocnVuZyB3aXJkIGRpZSB6dWdlaG9lcmlnZSBNZXRob2RlIGF1Y2ggZGFubgorICAgICAgYXVzZ2VmdWVocnQsIHdlbm4gZGFzIHZlcndlbmRldGUgVmVyYiBlaW4gU3VwZXJzdHJpbmcgaXN0IHVuZAorICAgICAgYmlzaGVyIG5vY2ggbmljaHQgYmVoYW5kZWx0IHd1cmRlLgorICAgICAgRGllc2VzIFZlcmhhbHRlbiBzb2xsdGUgbnVyIGJlaW0gZ2VuZXJlbGxlbiBBYmZhbmdlbiB2b24KKyAgICAgIEJlZmVobHNncnVwcGVuIGJlbnV0enQgd2VyZGVuIHVuZCBpc3QgYW5zb25zdGVuIHZlcmFsdGV0LiBFcworICAgICAgZW50c3ByaWNoIGFkZF9hY3Rpb24oImZ1biIsImtvbW1hbmRvIiwxKS4KKworCisgICAgICBCZWlzcGllbDoKKyAgICAgICAgMS4gQWRkQ21kKCJrbGV0dCIsImZ1biIsMSk7CisgICAgICAgIDIuIEFkZENtZCgia2xldHRlcnxrbGV0dGVyZSZob2NoIiwjJ2Z1bjIsIldvaGluIGtsZXR0ZXJuPyIpOworCisgICAgICAgIGEpICJrbGV0dCIKKyAgICAgICAgYikgImtsZXR0ZXIiCisgICAgICAgIGMpICJrbGV0dGVyZSBob2NoIgorCisgICAgICAgIEF1c2dlZnVlaHJ0ZSBGdW5rdGlvbiBiZWk6IDFhLCAxYiwgMWM7IDJjCisgICAgICAgKDEgd3VlcmRlIGFsc28gaW1tZXIgYXVzZ2VmdWVocnQpCisgICAgICAgIEZlaGxlcm1lbGR1bmcgYmVpOiAyYiAoIldvaGluIGtsZXR0ZXJuPyIpCisKK0JFTUVSS1VOR0VOOgorICAgIC0gTWV0aG9kZW4gZGVyIHB1dF9hbmRfZ2V0IChuaW1tL25laG1lKSBzb2xsdGVuIHNvIG5pY2h0IHZlcnN1Y2h0CisgICAgICB3ZXJkZW4genUgdWViZXJzY2hyZWliZW4gLSBkYXp1IHNpbmQgaW52aXMgQ29udGFpbmVyIGRhCisgICAgLSBiZW51dHp0IG1hbiBmdWVyIDxmdW5jdGlvbj4gZWluZSBDbG9zdXJlLCBrYW5uIG1hbiBkaWUgRmt0LiBhdWNoCisgICAgICBwcm90ZWN0ZWQgb2RlciBwcml2YXRlIGRla2xhcmllcmVuIF91bmRfIHNpZSBrYW5uIGluIGVpbmVtCisgICAgICBhbmRlcmVuIE9iamVrdCBzZWluCisgICAgLSBiZWkgUmVnZWxuIHdpcmQgYW4gZGllIGdnZi4gZ2VydWZlbmUgTWV0aG9kZSBhbHMgendlaXRlciBQYXJhbWV0ZXIKKyAgICAgIGVpbiBBcnJheSBkZXIgZXJmdWVsbGVuZGVuIEVpbmdhYmV0ZWlsZSB1ZWJlcmdlYmVuOgorICAgICAgInN0ZWNrJkBQUkVTRU5UJmluJmxvY2giIGJlaSBFcmZ1ZWxsdW5nIC0+ICh7PE9iamVrdD4sImluIiwibG9jaH0pCisgICAgICAtIGJlaSBOdXR6dW5nIHZvbiBAUFVUX0dFVF9YWFgga29lbm5lbiBkaWUgUGFyYW1ldGVyIHdpZWRlcnVtCisgICAgICAgIEFycmF5cyBzZWluICgiamVkZSBIb3NlIiAtPiBtZWhyZXJlIGd1ZWx0aWdlIE9iamVrdGUpCisgICAgLSBqdWVuZ2VyZSBBZGRDbWQgdWViZXJzY2hyZWliZW4gYWVsdGVyZSwgYnp3LiB3ZXJkZW4gdm9yIGRpZXNlbgorICAgICAgYXVzZ2V3ZXJ0ZXQKKyAgICAtIEBQVVRfR0VUX1hYWCBrb3N0ZW4gc2VociB2aWVsIEF1c3dlcnR1bmdzemVpdAorCitCRUlTUElFTEUgKFNJRUhFIEFVQ0ggQUREQ01EX0JTUCk6CisgICAgLy8gU0lNUEVMOiBnYW56IHNpbXBlbCwgYmVpbmFoZSB3aWUgYWRkX2FjdGlvbgorICAgIEFkZENtZCgiYmVmaWVobCIsImFjdGlvbl9iZWZlaGxlbiIpOworICAgIC4uLgorICAgIGludCBhY3Rpb25fYmVmZWhsZW4oc3RyaW5nIHN0cikgeworICAgICBpZighc3RyIHx8ICFzdHJsZW4oc3RyKSkKKyAgICAgIC8vIEZlaGxlcm1lbGR1bmcsIGZhbGxzIGdhciBrZWluZSBGdW5rdGlvbiAxIGRhZnVlciB6dXJ1ZWNrZ2lidAorICAgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgZHUgYmVmZWhsZW4/IVxuIik7CisgICAgIGVsc2UgeworICAgICAgd3JpdGUoIkR1IGJlZmllaGxzdCBcIiIrc3RyKyJcIiwgdW5kIGFsbGUgZm9sZ2VuIVxuIik7CisgICAgICBzYXkoVFAtPk5hbWUoV0VSKSsiIGJlZmllaGx0IFwiIitzdHIrIlwiLCB1bmQgZHUgZm9sZ3N0IVxuIik7CisgICAgICByZXR1cm4gMTsgIC8vIEVSRk9MRyAtIEFiYnJ1Y2ggZGVyIEtvbW1hbmRvYXVzd2VydHVuZworICAgICB9CisgICAgIHJldHVybiAwOyAgLy8gTUlTU0VSRk9MRyAtIEZlaGxlcm1lbGR1bmcgb2JlbiBnZXNldHp0CisgICAgfQorCisgICAgLy8gU0lNUEVMIC4uIHdlaXRlcmUgQmVpc3BpZWxlCisgICAgQWRkQ21kKCh7ImtsZXR0ZXIiLCJrbGV0dGVyZSJ9KSwiYWN0aW9uX2tsZXR0ZXJuIiApOworICAgIEFkZENtZCgoeyJyZW5uIiwicmVubmUifSksIydhY3Rpb25fcmVubmVuKTsKKworICAgIC8vIFJFR0VMTjogZWluZSBrb21wbGV4ZXJlIFJlZ2VsCisgICAgQWRkQ21kKCJsb2VzY2h8bG9lc2NoZXxlcnN0aWNrZSZmZXVlcnxicmFuZHxmbGFtbWVuJmRlY2tlfHdvbGxkZWNrZSIsCisgICAgICAgICAgICJhY3Rpb25fbG9lc2NoZW4iLAorICAgICAgICAgICAiV2FzIHdpbGxzdCBkdSBsb2VzY2hlbj98V29taXQgd2lsbHN0IGR1IGxvZXNjaGVuPyIpOworCisgICAgLy8gUkVHRUxOOiBtaXQgUGxhdHpoYWx0ZXJuIGltIEZlaGxlcnN0cmluZworICAgIEFkZENtZCgic3ByaW5nfHNwcmluZ2V8aHVlcGZ8aHVlcGZlJnZvbnx2b20mYmF1bXxhc3R8ZWljaGUiLAorICAgICAgICAgICAjJ2FjdGlvbl9odWVwZmUsCisgICAgICAgICAgICJXaWxsc3QgZHUgdm9uIGV0d2FzIEB2ZXJiZW4/fFZvbiB3byB3aWxsc3QgZHUgQHZlcmJlbj8iKTsKKworICAgIC8vIFNDSExFQ0hUOiBlaW5lIHVuc2NoYXJmZSBSZWdlbCAtIHNpZSBzb2xsdGVuIGVpbmUgQXVzbmFobWUgc2VpbiAoISkKKyAgICBBZGRDbWQoImtsZXR0ZXIiLCJmdW5fa2xldHRlcm4iLDEpOworCisgICAgLy8gRkFMU0NIOiBzZWhyIHNjaGxlY2h0LCBrZWluIEltcGVyYXRpdiB2ZXJ3ZW5kZXQKKyAgICAvLyBhdXNzZXJkZW0gc29sbHRlIG1hbiBmdWVyIHNvbGNoZSBTeW50YXhlbiBBZGRSZWFkRGV0YWlsIGJlbnV0emVuCisgICAgQWRkQ21kKCJsZXNlIiwiZXZhbF9sZXNlbiIpOworCisgICAgLy8gU0lNUExFIFJFR0VMIE9ITkUgTUVUSE9ERQorICAgIC8vIG1pdCBSZWdlbG4ga2FubiBtYW4gYXVjaCBBa3Rpdml0YWV0ZW4gaW0gUmF1bSBlcmxhdWJlbiwgb2huZSBlaW5lCisgICAgLy8gRnVua3Rpb24gYXVmcnVmZW4genUgbXVlc3NlbjogZGllIGxldHp0ZSBSZWdlbCBpc3QgZnVlciBTcGllbGVyCisgICAgLy8gdW5tb2VnbGljaCB6dSBlcmZ1ZWxsZW4sIGRpZSBkYXp1Z2Vob2VyaWdlIEZlaGxlcm1lbGR1bmcgd2lyZCBtaXQKKyAgICAvLyBkZW0gXiAod3JpdGUtRmxhZykgdmVyc2VoZW4gdW5kIGVudHNwcmVjaGVuZCBhbiBkZW4gU3BpZWxlcgorICAgIC8vICh1bmQgZGVuIFJhdW0gKGhpbnRlciBkZW0gXikpIGF1c2dlZ2ViZW4KKyAgICBBZGRDbWQoInNwcmluZ3xzcHJpbmdlJmhlcnVudGVyfHJ1bnRlciZcblxiaW1wb3NzaWJsZSIsMCwKKyAgICAgICAgICAgIldvaGluIG9kZXIgd292b24gd2lsbHN0IER1IHNwcmluZ2VuP3wiCisgICAgICAgICAgICJEdSBzcHJpbmdzdCB2b20gQmF1bSB1bmQga29tbXN0IGhhcnQgYXVmLl4iCisgICAgICAgICAgICJAV0VSMSBzcHJpbmd0IHZvbSBCYXVtIHVuZCBrb21tdCBoYXJ0IGF1Zi4iKTsKKworU0lFSEUgQVVDSDoKKyAgICBBZGRDbWRfYnNwLCBSZW1vdmVDbWQoTCksIGluaXQoRSkKKyAgICBGZWhsZXJtZWxkdW5nZW46IG5vdGlmeV9mYWlsKEUpLCBfbm90aWZ5X2ZhaWwoRSkKKyAgICBBcmd1bWVudHN0cmluZzogcXVlcnlfdmVyYihFKSwgX3VucGFyc2VkX2FyZ3MoTCkKKyAgICBTb25zdGlnZXM6ICByZXBsYWNlX3BlcnNvbmFsKEUpLCBlbmFibGVfY29tbWFuZHMoRSkKKyAgICBBbHRlcm5hdGl2ZW46IEFkZEFjdGlvbihMKSwgYWRkX2FjdGlvbihFKQorCiszMC4gQXVnIDIwMTMgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZENtZF9ic3AgYi9kb2MvbGZ1bi9BZGRDbWRfYnNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYjhkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRDbWRfYnNwCkBAIC0wLDAgKzEsMzIwIEBACitBRERDTUQoKSAtIEJFSVNQSUVMRQorRlVOS1RJT04KKyAgICB2YXJhcmdzIHZvaWQgQWRkQ21kKG1peGVkIGNtZCwgbWl4ZWQgZnVuYywgbWl4ZWQgZmxhZyk7CisKK0JFTUVSS1VOR0VOCisgICAgRGllIGhpZXIgYXVmZ2VmdWVocnRlbiBLb21wbGV4YmVpc3BpZWxlIHNpbmQgenVtIFZlcnN0YWVuZG5pcyBnZWRhY2h0LAorICAgIGRhaGVyIGZ1ZWhyZW4gc2llIG9mdCBBbHRlcm5hdGl2ZW4gYXVmLiBEaWUgbGV0enRlIFZhcmlhbnRlIGlzdCBkYW5uCisgICAgamV3ZWlscyBkaWVqZW5pZ2UsIHdlbGNoZSBhbSBsZWljaHRlc3RlbiBkYXMgUHJvYmxlbSBsb2VzZW4ga29lbm50ZS4KKyAgICBGYWxscyBkaWUgZWluZW0genUga29tcGxleCBpc3QsIGhpbGZ0IHZpZWxsZWljaHQgZGllIHZvcmxldHp0ZS4KKworQkVJU1BJRUxFCisgICAgLy8gU0lNUEVMOiBnYW56IHNpbXBlbCwgYmVpbmFoZSB3aWUgYWRkX2FjdGlvbgorICAgIEFkZENtZCgiYmVmaWVobCIsImFjdGlvbl9iZWZlaGxlbiIpOworICAgIC4uLgorICAgIGludCBhY3Rpb25fYmVmZWhsZW4oc3RyaW5nIHN0cikgeworICAgICBpZighc3RyIHx8ICFzdHJsZW4oc3RyKSkKKyAgICAgIC8vIEZlaGxlcm1lbGR1bmcsIGZhbGxzIGdhciBrZWluZSBGdW5rdGlvbiAxIGRhZnVlciB6dXJ1ZWNrZ2lidAorICAgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgZHUgYmVmZWhsZW4/IVxuIik7CisgICAgIGVsc2UgeworICAgICAgd3JpdGUoIkR1IGJlZmllaGxzdCBcIiIrc3RyKyJcIiwgdW5kIGFsbGUgZm9sZ2VuIVxuIik7CisgICAgICBzYXkoVFAtPk5hbWUoV0VSKSsiIGJlZmllaGx0IFwiIitzdHIrIlwiLCB1bmQgZHUgZm9sZ3N0IVxuIik7CisgICAgICByZXR1cm4gMTsJCS8vIEVSRk9MRyAtIEFiYnJ1Y2ggZGVyIEtvbW1hbmRvYXVzd2VydHVuZworICAgICB9CisgICAgIHJldHVybiAwOwkJLy8gTUlTU0VSRk9MRyAtIEZlaGxlcm1lbGR1bmcgb2JlbiBnZXNldHp0CisgICAgfQorCisgICAgLy8gU0lNUEVMIC4uIHdlaXRlcmUgQmVpc3BpZWxlCisgICAgQWRkQ21kKCh7ImtsZXR0ZXIiLCJrbGV0dGVyZSJ9KSwiYWN0aW9uX2tsZXR0ZXJuIiApOworICAgIEFkZENtZCgoeyJyZW5uIiwicmVubmUifSksIydhY3Rpb25fcmVubmVuKTsKKworICAgIC8vIFJFR0VMTjogZWluZSBrb21wbGV4ZXJlIFJlZ2VsCisgICAgQWRkQ21kKCJsb2VzY2h8bG9lc2NoZXxlcnN0aWNrZSZmZXVlcnxicmFuZHxmbGFtbWVuJmRlY2tlfHdvbGxkZWNrZSIsCisgICAgICAgICAgICJhY3Rpb25fbG9lc2NoZW4iLAorICAgICAgICAgICAiV2FzIHdpbGxzdCBkdSBsb2VzY2hlbj98V29taXQgd2lsbHN0IGR1IGxvZXNjaGVuPyIpOworCisgICAgLy8gUkVHRUxOOiBtaXQgUGxhdHpoYWx0ZXJuIGltIEZlaGxlcnN0cmluZworICAgIEFkZENtZCgic3ByaW5nfHNwcmluZ2V8aHVlcGZ8aHVlcGZlJnZvbnx2b20mYmF1bXxhc3R8ZWljaGUiLAorICAgICAgICAgICAjJ2FjdGlvbl9odWVwZmUsCisgICAgICAgICAgICJXaWxsc3QgZHUgdm9uIGV0d2FzIEB2ZXJiZW4/fFZvbiB3byB3aWxsc3QgZHUgQHZlcmJlbj8iKTsKKworICAgIC8vIFNDSExFQ0hUOiBlaW5lIHVuc2NoYXJmZSBSZWdlbCAtIHNpZSBzb2xsdGVuIGVpbmUgQXVzbmFobWUgc2VpbiAoISkKKyAgICBBZGRDbWQoImtsZXR0ZXIiLCJmdW5fa2xldHRlcm4iLDEpOworCisgICAgLy8gRkFMU0NIOiBzZWhyIHNjaGxlY2h0LCBrZWluIEltcGVyYXRpdiB2ZXJ3ZW5kZXQKKyAgICAvLyBhdXNzZXJkZW0gc29sbHRlIG1hbiBmdWVyIHNvbGNoZSBTeW50YXhlbiBBZGRSZWFkRGV0YWlsIGJlbnV0emVuCisgICAgQWRkQ21kKCJsZXNlIiwiZXZhbF9sZXNlbiIpOworCisgICAgLy8gU0lNUExFIFJFR0VMCisgICAgc3RhdGljIGludCBhY3Rpb25fanVtcChzdHJpbmcgc3RyKTsgICAgICAgIC8vIFByb3RvdHlwZSAod2VnZW4gY2xvc3VyZSkKKyAgICAuLi4KKyAgICBBZGRDbWQoInNwcmluZ3xzcHJpbmdlfGh1ZXBmfGh1ZXBmZSZ2b24mYmF1bXxhc3QiLCMnYWN0aW9uX2p1bXAsCisgICAgICAgICAgICJXaWxsc3QgRHUgdm9uIGV0d2FzIEB2ZXJiZW4/fFdvdm9uIHdpbGxzdCBEdSBAdmVyYmVuPyIpOworICAgIC4uLgorICAgIHN0YXRpYyBpbnQgYWN0aW9uX2p1bXAoc3RyaW5nIHN0cikgeworICAgICAgd3JpdGUoYnJlYWtfc3RyaW5nKCJEdSBzcHJpbmdzdCB2b20gQmF1bSB1bmQga29tbXN0IGhhcnQgYXVmISIsNzgpKTsKKyAgICAgIHRoaXNfcGxheWVyKCktPm1vdmUoKFhYWFJPT00rImJvZGVuIiksIE1fR08sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJzcHJpbmd0IHVuZWxlZ2FudCB2b20gQmF1bSIsImZhZWxsdCB2b20gQmF1bSIpOworICAgICAgdGhpc19wbGF5ZXIoKS0+RGVmZW5kKHJhbmRvbSgxMDApLCh7RFRfQkxVREdFT059KSwoW1NQX1JFQ1VSU0lWRToxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmplY3QoKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvLyBTSU1QTEUgUkVHRUwgT0hORSBNRVRIT0RFCisgICAgLy8gbWl0IFJlZ2VsbiBrYW5uIG1hbiBhdWNoIEFrdGl2aXRhZXRlbiBpbSBSYXVtIGVybGF1YmVuLCBvaG5lIGVpbmUKKyAgICAvLyBGdW5rdGlvbiBhdWZydWZlbiB6dSBtdWVzc2VuOiBkaWUgbGV0enRlIFJlZ2VsIGlzdCBmdWVyIFNwaWVsZXIKKyAgICAvLyB1bm1vZWdsaWNoIHp1IGVyZnVlbGxlbiwgZGllIGRhenVnZWhvZXJpZ2UgRmVobGVybWVsZHVuZyB3aXJkIG1pdAorICAgIC8vIGRlbSBeICh3cml0ZS1GbGFnKSB2ZXJzZWhlbiB1bmQgZW50c3ByZWNoZW5kIGFuIGRlbiBTcGllbGVyCisgICAgLy8gKHVuZCBkZW4gUmF1bSAoaGludGVyIGRlbSBeKSkgYXVzZ2VnZWJlbgorICAgIEFkZENtZCgic3ByaW5nfHNwcmluZ2UmaGVydW50ZXJ8cnVudGVyJlxuXGJpbXBvc3NpYmxlIiwwLAorICAgICAgICAgICAiV29oaW4gb2RlciB3b3ZvbiB3aWxsc3QgRHUgc3ByaW5nZW4/fCIKKyAgICAgICAgICAgIkR1IHNwcmluZ3N0IHZvbSBCYXVtIHVuZCBrb21tc3QgaGFydCBhdWYuXiIKKyAgICAgICAgICAgIkBXRVIxIHNwcmluZ3Qgdm9tIEJhdW0gdW5kIGtvbW10IGhhcnQgYXVmLiIpOworCisjIyBLb21wbGV4YmVpc3BpZWw6IFJlZ2VsbiBtaXQgRmVobGVybWVsZHVuZ2VuICMjCisgIyMgVmFyaWFudGUgMSwgT0hORSBSRUdFTE4gIyMKKyAgICAvLyBiZWkgTmljaHR2ZXJ3ZW5kdW5nIHZvbiBSZWdlbG4gbXVzcyBtYW4gUGFyYW1ldGVyIHNlbGJzdCBhdXN3ZXJ0ZW4KKyAgICBBZGRDbWQoKHsiYm9ociIsImJvaHJlIn0pLCMnYWN0aW9uX2JvaHJlbik7CisgICAgLi4uCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGFjdGlvbl9ib2hyZW4oc3RyaW5nIHN0cikgeworICAgICAgc3RyaW5nICp0bXA7CisgICAgICBub3RpZnlfZmFpbCgiV28gd2lsbHN0IChldHdhcykgRHUgYm9ocmVuP1xuIik7CisgICAgICBpZighc3RyKSByZXR1cm4gMDsgICAgICAgLy8gVGphLCBrZWluZSBBcmd1bWVudGUgLi4uCisgICAgICB0bXA9ZXhwbG9kZShzdHIsIiAiKTsgICAgLy8gbmFjaCAiICIgaW4gQXJndW1lbnQtQXJyYXkgYXVmc3BhbHRlbgorICAgICAgaWYoKGk9bWVtYmVyKHRtcCwibG9jaCIpKT49MCkgeyAvLyBhaGEsIGFiIGpldHp0IHVlYmVybmVobWVuIHdpciA6KQorICAgICAgIGlmKChqPW1lbWJlcih0bXBbKGkrMSkuLl0sImluIikpPDAgJiYKKyAgICAgICAgICAoaj1tZW1iZXIodG1wWyhpKzEpLi5dLCJkdXJjaCIpKTwwKQorICAgICAgICAgd3JpdGUoIldpbGxzdCBEdSBkYXMgTG9jaCBpbiBldHdhcyBib2hyZW4/XG4iKTsKKyAgICAgICAgZWxzZSBpZigoaT1tZW1iZXIodG1wWyhqKzEpLi5dLCJib2RlbiIpKTwwICYmCisgICAgICAgICAgICAgICAgKGk9bWVtYmVyKHRtcFsoaisxKS4uXSwiZXJkZSIpKTwwKQorICAgICAgICAgd3JpdGUoIkluL0R1cmNoIHdhcyB3aWxsc3QgZHUgZGFzIExvY2ggYm9ocmVuP1xuIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgd3JpdGUoIkR1IGJvaHJzdCBlaW4gTG9jaCBpbiBkZW4gQm9kZW4uXG4iKTsKKyAgICAgICAgIHNheSh0aGlzX3BsYXllcigpLT5OYW1lKFdFUikrIiBib2hydCBlaW4gTG9jaCBpbiBkZW4gQm9kZW4uXG4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsgICAgICAvLyAiYm9ocmUgbG9jaCIgd2FyIHNvIGVpbmRldXRpZywgZGFzcyBudXIgZGllc2UKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gTWV0aG9kZSBnZW1laW50IHNlaW4ga29ubnRlLCBhbHNvIGJyZWNoZW4gd2lyIGRpZQorICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZWl0ZXJlIEF1c3dlcnR1bmcgYXVmIGplZGVuIEZhbGwgYWIgKHVuZCBnZWJlbgorICAgICAgICAgICAgICAgICAgICAgICAvLyBlaW5lIHdyaXRlLUZlaGxlcm1lbGR1bmcpCisgICAgICB9IC8vIGVuZCBpZiguLi4ibG9jaCIpCisgICAgICByZXR1cm4gMDsgICAgICAgIC8vICJib2hyZSIgYWxsZWluIG11c3MgbmljaHQgZGllc2UgTWV0aG9kZSBtZWluZW4sCisgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gbnVyIG9iaWdlIG5vdGlmeV9mYWlsKCktTWVsZHVuZywgZmFsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gc2ljaCBuYWNoIGRpZXNlciBNZXRob2RlIGdhciBrZWluZSBzb25zdAorICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmdlc3Byb2NoZW4gZnVlaGx0CisgICAgfSAvLyBlbmQgZnVuCisKKyAjIyBWYXJpYW50ZSAxYSwgT0hORSBSRUdFTE4gIyMKKyAgICAvLyBwcmluemlwaWVsbCBrb2VubnRlIGRpZSBNZXRob2RlIGFjdGlvbl9ib2hyZW4gYXVjaCBzbworICAgIC8vIGF1c3NlaGVuLCBpc3QgYWJlciBuaWNodCBnYW56IHNvIGZsZXhpYmVsOgorICAgIHByaXZhdGUgc3RhdGljIGludCBhY3Rpb25fYm9ocmVuKHN0cmluZyBzdHIpIHsKKyAgICAgc3RyaW5nIHRtcDsKKyAgICAgaWYoIXN0ciB8fCAoc3ByaW50ZihzdHIsImxvY2ggaW4gZXJkZSVzIix0bXApIT0xICYmCisgICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCJsb2NoIGR1cmNoIGVyZGUlcyIsdG1wKSE9MSAmJgorICAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwibG9jaCBpbiBib2RlbiVzIix0bXApIT0xICYmCisgICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCJsb2NoIGR1cmNoIGJvZGVuJXMiLHRtcCkhPTEpKQorICAgICAgbm90aWZ5X2ZhaWwoIldpbGxzdCBEdSBpbiBpcmdlbmR3YXMgZWluIExvY2ggYm9ocmVuP1xuIik7CisgICAgIGVsc2UgeworICAgICAgLi4uCisgICAgICByZXR1cm4gMTsKKyAgICAgfQorICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAjIyBWYXJpYW50ZSAyLCBNSVQgUkVHRUwgIyMKKyAgICAvLyBkYXMgZ2xlaWNoZSBpbiBldHdhIG1hbCBhbHMgZWluZmFjaGUgUmVnZWwKKyAgICBBZGRDbWQoImJvaHJ8Ym9ocmUmbG9jaCZpbnxkdXJjaCZlcmRlfGJvZGVuIiwjJ2FjdGlvbl9ib2hyZW4sCisgICAgICAgICAgICJXYXMgd2lsbHN0IGR1ICh3b2hpbikgYm9ocmVuP3wiCisgICAgICAgICAgICJXaWxsc3QgZHUgZGFzIExvY2ggaW4gZXR3YXMgYm9ocmVuP3wiCisgICAgICAgICAgICJXb2hpbiB3aWxsc3QgZHUgZGFzIExvY2ggYm9ocmVuPyIpOworICAgIC4uLgorICAgIHByaXZhdGUgc3RhdGljIGludCBhY3Rpb25fYm9ocmVuKHN0cmluZyBzdHIsIG1peGVkICpwYXJhbSkgeworICAgICB3cml0ZSgiRHUgYm9ocnN0IGVpbiBMb2NoIGluIGRlbiBCb2Rlbi5cbiIpOworICAgICBzYXkodGhpc19wbGF5ZXIoKS0+TmFtZShXRVIpKyIgYm9ocnQgZWluIExvY2ggaW4gZGVuIEJvZGVuLlxuIik7CisgICAgIC4uLgorICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAjIyBWYXJpYW50ZSAzLCBNSVQgUkVHRUwgVU5EIEZFSExFUk1FTERVTkcgIyMKKyAgICAvLyB1bmQgbnVuIG1pdCBGZWhsZXJtZWxkdW5nZW4gbWl0IEVyc2V0enVuZ2VuLCBzbyBkYXNzIHdpciBtZWhyCisgICAgLy8gYXVmIGRpZSBFaW5nYWJlbiBkZXMgU3BpZWxlcnMgZWluZ2VoZW4KKyAgICBBZGRDbWQoImJvaHJ8Ym9ocmUmbG9jaCZpbnxkdXJjaCZlcmRlfGJvZGVuIiwjJ2FjdGlvbl9ib2hyZW4sCisgICAgICAgICAgICJXYXMgd2lsbHN0IGR1ICh3b2hpbikgQHZlcmJlbj98IgorICAgICAgICAgICAiV2lsbHN0IGR1IGRhcyBMb2NoIGluIGV0d2FzIEB2ZXJiZW4/fCIKKyAgICAgICAgICAgIkBXRVIzIHdhcyB3aWxsc3QgZHUgZGFzIExvY2ggQHZlcmJlbj8iKTsKKyAgICAuLi4KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgYWN0aW9uX2JvaHJlbihzdHJpbmcgc3RyLCBtaXhlZCAqcGFyYW0pIC4uLgorCisgIyMgVmFyaWFudGUgNCwgTUlUIFJFR0VMLCBGRUhMRVJNRUxEVU5HIFVORCBSRVRVUk4gMSAjIworICAgIC8vIGluIFZhcmlhbnRlIDEga2FtIHNpbm52b2xsZXJ3ZWlzZSBzZWhyIGZydWVoIGRlciBBYmJydWNoIG1pdAorICAgIC8vICJyZXR1cm4gMTsiIHVuZCBkaWUgQXVzZ2FiZSB2b24gd3JpdGUtRmVobGVybWVsZHVuZ2VuLAorICAgIC8vIGRhcyBrb2VubmVuIHdpciBhdWNoCisgICAgQWRkQ21kKCJib2hyfGJvaHJlJmxvY2gmaW58ZHVyY2gmZXJkZXxib2RlbiIsIydhY3Rpb25fYm9ocmVuLAorICAgICAgICAgICAiV2FzIHdpbGxzdCBkdSAod29oaW4pIEB2ZXJiZW4/fCIKKyAgICAgICAgICAgIldpbGxzdCBkdSBkYXMgTG9jaCBpbiBldHdhcyBAdmVyYmVuP158IgorICAgICAgICAgICAiQFdFUjMgd2FzIHdpbGxzdCBkdSBkYXMgTG9jaCBAdmVyYmVuP14iKTsKKyAgICAuLi4KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgYWN0aW9uX2JvaHJlbihzdHJpbmcgc3RyLCBtaXhlZCAqcGFyYW0pIC4uLgorCisgIyMgVmFyaWFudGUgNSwgTUlUIFJFR0VMLCBGRUhMRVJNRUxEVU5HLCBSRVRVUk4gMSwgT0hORSBGVU4gIyMKKyAgICAvLyB1bmQgZmFsbHMgaW4gYWN0aW9uX2JvaHJlbigpIG5pY2h0cyBhdXNzZXIgQXVzZ2FiZW4gcGFzc2llcnQsIGtvZW5uZW4KKyAgICAvLyB3aXIgdW5zIGRpZSBhdWNoIGdhbnogc3BhcmVuIGluZGVtIHdpciBlaW5lIG5pY2h0ZXJmdWVsbGJhcmUgUmVnZWwKKyAgICAvLyBzYW10IEZlaGxlcm1lbGR1bmcgYmF1ZW4KKyAgICBBZGRDbWQoImJvaHJ8Ym9ocmUmbG9jaCZpbnxkdXJjaCZlcmRlfGJvZGVuJlxuaW1wb3NzaWJsZSIsMCwKKyAgICAgICAgICAgIldhcyB3aWxsc3QgZHUgKHdvaGluKSBAdmVyYmVuP3wiCisgICAgICAgICAgICJXaWxsc3QgZHUgZGFzIExvY2ggaW4gZXR3YXMgQHZlcmJlbj9efCIKKyAgICAgICAgICAgIkBXRVIzIHdhcyB3aWxsc3QgZHUgZGFzIExvY2ggQHZlcmJlbj9efCIKKyAgICAgICAgICAgIkR1IEB2ZXJic3QgZWluIExvY2ggQFdFUjMgZGVuIEJvZGVuLl5AV0VSMSBAdmVyYnQgIgorICAgICAgICAgICAiZWluIExvY2ggQFdFUjMgZGVuIEJvZGVuLiIpOworCisgICAtLS0gRW5kZSBLb21wbGV4YmVpc3BpZWwgUmVnZWxuIG1pdCBGZWhsZXJtZWxkdW5nZW4gLS0tCisKKyMjIEtvbXBsZXhiZWlzcGllbDogU3BlemlhbHJlZ2VsbiBAUFJFU0VOVCB1bmQgQElEICMjCisgIyMgVmFyaWFudGUgMSwgT0hORSBSRUdFTE4gIyMKKyAgICAvLyBvZnQgYWdpZXJlbiBLb21tYW5kb3MgYXVmIE9iamVrdGVuIGltIFJhdW0sIGRpZXNlIG11ZXNzZW4gZGFiZWkgcGVyCisgICAgLy8gcHJlc2VudCgpIGlkZW50aWZpemllcnQgd2VyZGVuOgorICAgIC8vIEJlaXNwaWVsIGlzdCBlaW4gR2VsZGF1dG9tYXQgKGRlbiBtYW4gYmVzc2VyIG1pdCBlaW5lbSBDb250YWluZXIKKyAgICAvLyBtaXQgUHJldmVudEluc2VydCgpIGJhc3RlbG4gc29sbHRlKQorICAgIEFkZENtZCgoeyJzdG9wZiIsInN0b3BmZSJ9KSwjJ2FjdGlvbl9zdG9wZik7CisgICAgLi4uCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGFjdGlvbl9zdG9wZihzdHJpbmcgc3RyKSB7CisgICAgIHN0cmluZyB0bXAsdG1wMjsKKyAgICAgb2JqZWN0IG87CisKKyAgICAgaWYoc3RyICYmIChzcHJpbnRmKCIlcyBpbiBhdXRvbWF0JXMiLHRtcCx0bXAyKT09MiB8fAorICAgICAgICAgICAgICAgIHNwcmludGYoIiVzIGluIGdlbGRhdXRvbWF0JXMiLHRtcCx0bXAyKT09MiB8fAorICAgICAgICAgICAgICAgIHNwcmludGYoIiVzIGluIGJhbmtvbWF0JXMiLHRtcCx0bXAyKT09MikgeworICAgICAgbz1wcmVzZW50KHRtcCx0aGlzX3BsYXllcigpKTsKKyAgICAgIGlmKG8pIHsKKyAgICAgICBpZihvLT5RdWVyeVByb3AoLi4uKSkgeworICAgICAgICB3cml0ZShicmVha19zdHJpbmcoCisgICAgICAgICAiRHUgc3RvcGZzdCAiK28tPm5hbWUoV0VOLDEpKyIgaW4gZGVuIEF1dG9tYXRlbi4iLDc4KSk7CisgICAgICAgIHNheSguLi4pOworICAgICAgIH0gZWxzZSB7CisgICAgICAgIHdyaXRlKGJyZWFrX3N0cmluZygKKyAgICAgICAgICJEdSB2ZXJzdWNoc3QgIitvLT5uYW1lKFdFTiwxKSsiIGluIGRlbiBBdXRvbWF0ZW4genUgc3RvcGZlbiwgIgorICAgICAgICAgImFiZXIgIitvLT5RdWVyeVByb25vdW4oV0VSKSsiIHBhc3N0IG5pY2h0IGhpbmVpbi4iLDc4KSk7CisgICAgICAgIHNheSguLi4pOworICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgd3JpdGUoIldhcyB3aWxsc3QgZHUgaW4gZGVuIEF1dG9tYXRlbiBzdG9wZmVuP1xuIik7CisgICAgICAgc2F5KC4uLi4pOworICAgICAgfQorICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgZHUgd29oaW4gc3RlY2tlbj9cbiIpOworICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAjIyBWYXJpYW50ZSAyLCBNSVQgUkVHRUwgIyMKKyAgICAvLyBlaW5lcnNlaXRzIGtvZW5uZW4gd2lyIGRhcyBGaW5kZW4gdm9uIE9iamVrdGVuIGluIEludiB1bmQgRW52CisgICAgLy8gaW50ZWdyaWVyZW4gdW5kIHVucyBhbmRlcmVyc2VpdHMgZGFzIEF1ZnphZWhsZW4gYWxsZXIgSURzIGRlcworICAgIC8vIEF1dG9tYXRlbiBlcnNwYXJlbgorICAgIEFkZENtZCgic3RlY2t8c3RlY2tlJkBQUkVTRU5UJmluJkBJRCIsIydhY3Rpb25fc3RvcGYsCisgICAgICAgICAgICJXYXMgd2lsbHN0IGR1IHdvaGluIHN0b3BmZW4/fCIKKyAgICAgICAgICAgIldpbGxzdCBkdSBAV0VOMiBpbiBldHdhcyBzdG9wZmVuP3wiCisgICAgICAgICAgICJXb2hpbmVpbiB3aWxsc3QgZHUgQFdFTjIgc3RvcGZlbj8iKTsKKyAgICAuLi4KKyAgICAvLyBkYWJlaSB3ZXJkZW4gd2llIGltbWVyIGRpZSBnZWZ1bmRlbiBNYXRjaGVzIGFscyBQYXJhbWV0ZXJhcnJheQorICAgIC8vIHVlYmVyZ2ViZW4gLi4uIHVuZCBkaWUgQFBSRVNFTlQgdW5kIEBJRCBhbHMgT2JqZWt0ZSEKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgYWN0aW9uX3N0b3BmKHN0cmluZyBzdHIsIG1peGVkICpwYXJhbSkgeworICAgICBpZihwYXJhbVswXS0+UXVlcnlQcm9wKC4uLikpIHsKKyAgICAgIHdyaXRlKGJyZWFrX3N0cmluZygKKyAgICAgICAiRHUgc3RvcGZzdCAiK3BhcmFtWzBdLT5uYW1lKFdFTiwxKSsiIGluIGRlbiBBdXRvbWF0ZW4uIiw3OCkpOworICAgICAgc2F5KC4uLik7CisgICAgIH0gZWxzZSB7CisgICAgICB3cml0ZShicmVha19zdHJpbmcoCisgICAgICAgIkR1IHZlcnN1Y2hzdCAiK3BhcmFtWzBdLT5uYW1lKFdFTiwxKSsiIGluIGRlbiBBdXRvbWF0ZW4genUgIgorICAgICAgICJzdG9wZmVuLCBhYmVyICIrcGFyYW1bMF0tPlF1ZXJ5UHJvbm91bihXRVIpKyIgcGFzc3QgbmljaHQgIgorICAgICAgICJoaW5laW4uIiw3OCkpOworICAgICAgc2F5KC4uLik7CisgICAgIH0KKyAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAtLS0gRW5kZSBLb21wbGV4YmVpc3BpZWwgU3BlemlhbHJlZ2VsbiBAUFJFU0VOVCB1bmQgQElEICAtLS0KKworIyMgS29tcGxleGJlaXNwaWVsOiBnbGVpY2hlcyBWZXJiLCBtZWhyZXJlIFJlZ2VsbiAjIworIC8vIERhcyBQcm9ibGVtIG1laHJlcmVyIFJlZ2VsbiBmdWVyIGVpbiBLb21tYW5kb3ZlcmIgYmVzdGVodCBkYXJpbiwgZGFzcworIC8vIGxldHp0bGljaCBudXIgZWluZSBkZXIgRmVobGVybWVsZHVuZ2VuIHp1bSBUcmFnZW4ga29tbXQgLSB3ZWxjaGUKKyAvLyBnZW5hdSBpc3QgZXR3YXMgdmFnZS4KKyAvLyBEYWJlaSBrYW5uIG1hbiBzaWNoIGF1ZiBlaW5lcyB2ZXJsYXNzZW46IGp1ZW5nZXJlIEFkZENtZCB3ZXJkZW4KKyAvLyB6dWVyc3QgYXVzZ2V3ZXJ0ZXQuIFdlbm4gc2ljaCBkYXMgYWVuZGVydCwgdHJldGV0IGV1cmVuIEVNLgorCisgIyMgUHJvYmxlbSAxOiBNZWhyZXJlIFJlZ2VsbiB3ZWlsIG1laHJlcmUgWndlY2tlICMjCisgICAgIyMgVmFyaWFudGUgMSAtIEdMRUlDSExBVVRFTkRFIEZFSExFUk1FTERVTkcKKyAgICAvLyBmdWVyIGFsbGVzIHdpcmQgZWluZSBpZGVudGlzY2hlIEZlaGxlcm1lbGR1bmcgZ2VzZXR6dCwgZGFzIGlzdAorICAgIC8vIG5hdHVlcmxpY2ggbmljaHQgc2VociBmbGV4aWJlbCBvZGVyIHNjaG9lbgorICAgIEFkZENtZCgia3JpZWNofGtyaWVjaGUmaG9jaHxoaW5hdWZ8aGluYXVzfGhlcmF1c3xyYXVzIiwjJ3Jlc3VsdF9rcmllY2gsCisgICAgICAgICAgICJXb2hpbiB3aWxsc3QgRHUga3JpZWNoZW4/Iik7CisgICAgQWRkQ21kKCJrcmllY2h8a3JpZWNoZSZuYWNoJm9iZW4iLCMncmVzdWx0X2tyaWVjaCwKKyAgICAgICAgICAgIldvaGluIHdpbGxzdCBEdSBrcmllY2hlbj8/fFdvaGluIHdpbGxzdCBEdSBrcmllY2hlbj8iKTsKKyAgICBBZGRDbWQoImtyaWVjaHxrcmllY2hlJmF1cyZsb2NofGdydWJlfGZhbGxlIiwjJ3Jlc3VsdF9rcmllY2gpOworICAgICAgICAgICAiV29oaW4gd2lsbHN0IER1IGtyaWVjaGVuP3xXb2hpbiB3aWxsc3QgRHUga3JpZWNoZW4/Iik7CisKKyAgICAvLyBvZGVyIG1hbiB2ZXJzdWNodCBlaW5lIGJlc3NlcmUgUmVnZWwgenUgc2NoYWZmZW4sIHdhcyBoaWVyIGR1cmNoCisgICAgLy8gZGllIE1vZWdsaWNoa2VpdCB2b24gendlaSBvZGVyIGRyZWkgUGFyYW1ldGVyIHVubW9lZ2xpY2ggaXN0CisKKyAgICAjIyBWYXJpYW50ZSAyIC0gRUlHRU5FIEFVU1dFUlRVTkcKKyAgICAvLyBlcyBiaWV0ZXQgc2ljaCBhbHNvIGVpZ2VuZSBXZWl0ZXJhdXN3ZXJ0dW5nIGFuLCB3YXMgZHVyY2ggZGllCisgICAgLy8gVWViZXJnYWJlIGRlciBnZXRyaWdnZXJ0ZW4gVmVyYmVuIGVybGVpY2h0ZXJ0IHdpcmQ6CisgICAgQWRkQ21kKCJrcmllY2h8a3JpZWNoZSZob2NofGhpbmF1ZnxoaW5hdXN8aGVyYXVzfHJhdXN8YXVzfG5hY2giLAorICAgICAgICAgICAjJ3Jlc3VsdF9rcmllY2gsCisgICAgICAgICAgICJXb2hpbiB3aWxsc3QgRHUga3JpZWNoZW4/Iik7CisgICAgLi4uCisgICAgc3RhdGljIGludCByZXN1bHRfa3JpZWNoKHN0cmluZyBzdHIsIG1peGVkICpleHRyYSkgeworICAgICAgaWYobWVtYmVyKGV4dHJhLCJhdXMiKT49MCAmJgorICAgICAgICAgIXNpemVvZigoe3N0cn0pLCIqLlxcPChob2VobGV8Z3J1YmV8ZmFsbGUpXFw+LioiKSkKKyAgICAgICBub3RpZnlfZmFpbCgiV29yYXVzIHdpbGxzdCBEdSBrcmllY2hlbj9cbiIpOworICAgICAgZWxzZSBpZihtZW1iZXIoZXh0cmEsIm5hY2giKT49MCAmJiBzdHJzdHIoc3RyLCJvYmVuIik8MCkKKyAgICAgICBub3RpZnlfZmFpbCgiSW4gd2VsY2hlIFJpY2h0dW5nIHdpbGxzdCBEdSBrcmllY2hlbj9cbiIpOworICAgICAgZWxzZSBpZih0aGlzX3BsYXllcigpLT5RdWVyeUF0dHJpYnV0ZShBX0RFWCk+MTAgfHwKKyAgICAgICAgICAgICAgbWVtYmVyKGhvbGRpbmdfcm9vdCx0aGlzX3BsYXllcigpKSkgeworICAgICAgICB3cml0ZSgiRHUga3JpZWNoc3QgbWl0IE11ZWhlIGhlcmF1cy5cbiIpOworICAgICAgICB0aGlzX3BsYXllcigpLT5tb3ZlKChYWFhST09NKyJkcmF1c3NlbiIpLCBNX0dPLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrcmllY2h0IG1pdCBNdWVoZSBhdXMgZGVyIEdydWJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAia3JpZWNodCBhdXMgZWluZXIgR3J1YmUiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9IGVsc2UKKyAgICAgICAgd3JpdGUoIkR1IGJpc3QgenUgdW5nZXNjaGlja3QsIGhhbHQgRGljaCBpcmdlbmR3byBmZXN0LlxuIik7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIC8vIChvYiBzaWNoIGRlciBBdWZ3YW5kIGZ1ZXIgZGllc2UgQmVpc3BpZWxzeW50YXggbG9obnQgaXN0IGZyYWdsaWNoKQorCisgIyMgUHJvYmxlbSAyOiBtZWhyZXJlIFJlZ2Vsbiwgd2VpbCBvcHRpb25hbGUgUGFyYW1ldGVyICMjCisgICAgLy8gTWFuY2htYWwgd2lsbCBtYW4gb3B0aW9uYWxlIFBhcmFtZXRlciBlcmxhdWJlbiwgZGllIGFiZXIgZWluZQorICAgIC8vIFdpcmt1bmcgemVpZ2VuIHNvbGxlbjoKKyAgICBBZGRDbWQoInNjaGxhZ3xzY2hsYWdlJkBJRCZoYXJ0IiwjJ2FjdGlvbl9zY2hsYWdfaGFydCwKKyAgICAgICAgICAgIldhcyBvZGVyIHdlbiB3aWxsc3QgZHUgQHZlcmJlbj98IgorICAgICAgICAgICAiV2llIHdpbGxzdCBkdSBAV0VOMiBzY2hsYWdlbj8iKTsKKyAgICBBZGRDbWQoInNjaGxhZ3xzY2hsYWdlJkBJRCIsIydhY3Rpb25fc2NobGFnLAorICAgICAgICAgICAiV2FzIG9kZXIgd2VuIHdpbGxzdCBkdSBAdmVyYmVuPyIpOworCisgICAgLy8gRGEganVlbmdlcmUgQWRkQ21kIGFlbHRlcmVuIHZvcmdlaGVuLCB3aXJkIGRpZSBrb21wbGV4ZXJlIFJlZ2VsIHNhbXQKKyAgICAvLyBpaHJlciBGZWhsZXJtZWxkdW5nIG5pZSBhdXNnZXdlcnRldCwgZGEgZWluICJzY2hsYWcgYmFsbCBoYXJ0IiBhdWNoCisgICAgLy8gZGllIHp3ZWl0ZSBSZWdlbCB0cmlnZ2VydC4KKworICAgIC8vIGFuZGVycyBoZXJ1bToKKyAgICBBZGRDbWQoInNjaGxhZ3xzY2hsYWdlJkBJRCIsIydhY3Rpb25fc2NobGFnLAorICAgICAgICAgICAiV2FzIG9kZXIgd2VuIHdpbGxzdCBkdSBAdmVyYmVuPyIpOworICAgIEFkZENtZCgic2NobGFnfHNjaGxhZ2UmQElEJmhhcnQiLCMnYWN0aW9uX3NjaGxhZ19oYXJ0LAorICAgICAgICAgICAiV2FzIG9kZXIgd2VuIHdpbGxzdCBkdSBAdmVyYmVuP3wiCisgICAgICAgICAgICJXaWUgd2lsbHN0IGR1IEBXRU4yIHNjaGxhZ2VuPyIpOworCisgICAgLy8gSmV0enQgd2lyZCBkaWUga29tcGxleGVyZSBSZWdlbCB6dWVyc3QgdWViZXJwcnVlZnQgdW5kIHRyaWdnZXJ0CisgICAgLy8gYXVjaCBkaWUgcmljaHRpZ2UgRnVua3Rpb24uCisgICAgLy8gTGVpZGVyIGtvbW10IGRpZSBGZWhsZXJtZWxkdW5nIG5pZSB6dW0gVHJhZ2VuLCBkZW5uIHdhcyBkdXJjaCBSZWdlbCAyCisgICAgLy8gZHVyY2hmYWVsbHQsIHRyaWdnZXJ0IGVudHdlZGVyIFJlZ2VsIDEgb2RlciBmYWVsbHQgYXVjaCBkdXJjaCBSZWdlbCAxCisgICAgLy8gZHVyY2ggdW5kIHVlYmVyc2NocmVpYnQgZGFiZWkgZGllIE1lbGR1bmcuCisKKyAgICBBZGRDbWQoInNjaGxhZ3xzY2hsYWdlJkBJRCIsIydhY3Rpb25fc2NobGFnLAorICAgICAgICAgICAiV2FzIG9kZXIgd2VuIHdpbGxzdCBkdSB3aWUgQHZlcmJlbj8iKTsKKyAgICBBZGRDbWQoInNjaGxhZ3xzY2hsYWdlJkBJRCZoYXJ0IiwjJ2FjdGlvbl9zY2hsYWdfaGFydCk7CisKKyAgICAvLyBGYXN0IHBlcmZla3QuIEJlc3NlciB3aXJkIGVzIG5pY2h0LgorCisKKyAgICAtLS0gRW5kZSBLb21wbGV4YmVpc3BpZWwgbWVocmVyZSBSZWdlbG4gLS0tCisKKzEwIEp1bmkgMjAwNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkRGVmZW5kZXIgYi9kb2MvbGZ1bi9BZGREZWZlbmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWI3OTIzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkRGVmZW5kZXIKQEAgLTAsMCArMSwzNCBAQAorQWRkRGVmZW5kZXIoKQorCitGVU5LVElPTjoKKwl2b2lkIEFkZERlZmVuZGVyKG9iamVjdCBmcmllbmQpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9saXZpbmcvY29tYmF0LmMKKworQVJHVU1FTlRFOgorCWZyaWVuZAorCSAgT2JqZWt0IChub3JtYWwgTGViZXdlc2VuKSwgd2VsY2hlcyB6dWt1ZW5mdGlnIHVlYmVyIEFuZ3JpZmZlCisJICBpbmZvcm1pZXJ0IHdlcmRlbiBzb2xsIG9kZXIgZGllc2Ugc29nYXIgYWJ3ZWhydC4KKworQkVTQ0hSRUlCVU5HOgorCUVpbiBMZWJld2VzZW4sIHdlbGNoZXMgYW5nZWdyaWZmZW4gd2lyZCwga2FubiBhbmRlcmUgT2JqZWt0ZSB1ZWJlcgorCWVpbmVuIHNvbGNoZW4gQW5ncmlmZiBwZXIgSW5mb3JtRGVmZW5kKCkgaW5mb3JtaWVyZW4gb2RlciBpaG5lbgorCXNvZ2FyIGRpZSBNb2VnbGljaGtlaXQgZ2ViZW4sIHBlciBEZWZlbmRPdGhlcigpIGRpcmVrdCBpbiBkZW4KKwlsYXVmZW5kZW4gQW5ncmlmZiBlaW56dWdyZWlmZW4gKFNjaGFlZGVuIGFid2VocmVuIG9kZXIgdW13YW5kZWxuKS4KKwlJbSBOb3JtYWxmYWxsIGhhbmRlbHQgZXMgc2ljaCBoaWVyYmVpIHVtIGFuZGVyZSBMZWJld2VzZW4sIHdlbGNoZQorCWFscyBWZXJ0ZWlkaWdlciBkZXMgYW5nZWdyaWZmZW5lbiBMZWJld2VzZW5zIGF1ZnRyZXRlbjogRGFoZXIgZGVyCisJTmFtZSBkZXIgRnVua3Rpb24uCisJRGllIE9iamVrdGUgc2luZCBpbiBGb3JtIGVpbmVzIEFycmF5cyBpbiBkZXIgUHJvcGVydHkgUF9ERUZFTkRFUlMKKwlhYmdlc3BlaWNoZXJ0IHVuZCBrb2VubmVuIGRvcnQgYWJnZXJ1ZmVuIHdlcmRlbi4gTmF0dWVybGljaCBrYW5uCisJbWFuIHdlaXRlcmUgT2JqZWt0ZSBkaXJla3QgZG9ydCBlaW50cmFnZW4sIGplZG9jaCBzb2xsdGUgbWFuIGRpZQorCWhpZXJmdWVyIGJlcmVpdGdlc3RlbGx0ZSBGdW5rdGlvbmVuIEFkZERlZmVuZGVyKCkgdmVyd2VuZGVuLgorCVp1bSBMb2VzY2hlbiB2b24gRWludHJhZWdlbiBpbSBBcnJheSBzdGVodCBlYmVuZmFsbHMgZWluZSBGdW5rdGlvbgorCWJlcmVpdDogUmVtb3ZlRGVmZW5kZXIoKS4KKworU0lFSEUgQVVDSDoKKwlSZW1vdmVEZWZlbmRlcigpLCBJbmZvcm1EZWZlbmQoKSwgRGVmZW5kT3RoZXIoKSwKKwlQX0RFRkVOREVSUywgL3N0ZC9saXZpbmcvY29tYmF0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogVGh1IEp1bCAyOSAxODo0ODo0NSAxOTk5IGJ5IFBhdHJ5bgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkRGV0YWlsIGIvZG9jL2xmdW4vQWRkRGV0YWlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTE5N2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGREZXRhaWwKQEAgLTAsMCArMSw5MSBAQAorQWRkRGV0YWlsKCkKKworRlVOS1RJT046CisgICAgdm9pZCBBZGREZXRhaWwoc3RyaW5nfHN0cmluZyoga2V5cywKKyAgICAgICAgICAgICAgICAgICBzdHJpbmd8c3RyaW5nKnxtYXBwaW5nfGNsb3N1cmUgZGVzYyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorICAgIGtleXMKKyAgICAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzIG1pdCBkZW4gTmFtZW4gZGVyIERldGFpbHMuCisgICAgZGVzYworICAgICAgU3RyaW5nLCBNYXBwaW5nLCBTdHJpbmctQXJyYXkgb2RlciBDbG9zdXJlIG1pdC96dXIgQmVzY2hyZWlidW5nLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllIEJlc2NocmVpYnVuZyBkZXIgRGV0YWlscyA8a2V5cz4gd2lyZCBnZXNldHp0LiBXaWUgZGllIERldGFpbHMKKyAgICBiZWkgZGVyIFVudGVyc3VjaHVuZyBhdXNzZWhlbiwgaGFlbmd0IGltIHdlc2VudGxpY2hlbiB2b20gVHlwIGRlcgorICAgIEJlc2NocmVpYnVuZyA8ZGVzYz4gYWI6CisgICAgICA8ZGVzYz4gaXN0IGVpbiBTdHJpbmcuCisgICAgICAgIEJlaW0gVW50ZXJzdWNoZW4gd2lyZCBkaWVzZXIgU3RyaW5nIHp1cnVlY2tnZWdlYmVuLgorICAgICAgPGRlc2M+IGlzdCBlaW4gU3RyaW5nLUFycmF5LgorICAgICAgICBCZWltIFVudGVyc3VjaGVuIHdpcmQgenVmYWVsbGlnIGVpbmVyIGRlciBTdHJpbmdzIHp1cnVlY2tnZWdlYmVuLgorICAgICAgPGRlc2M+IGlzdCBlaW4gTWFwcGluZy4KKyAgICAgICAgRGFzIE1hcHBpbmcgbXVzcyBmb2xnZW5kZW4gQXVmYmF1IGhhYmVuOgorICAgICAgICAgIChbMDogICAgICAgICJEZWZhdWx0dGV4dCIsCisgICAgICAgICAgICAicmFzc2UxIjogInIxdGV4dCIsIC4uLl0pLgorCisgICAgICAgIEZhbGxzIGZ1ZXIgZGllIFJhc3NlIGRlcyBkYXMgRGV0YWlsIHVudGVyc3VjaGVuZGVuIFNwaWVsZXJzIGVpbgorICAgICAgICBFaW50cmFnIGltIE1hcHBpbmcgZXhpc3RpZXJ0LCB3aXJkIGRlciBlbnRzcHJlY2hlbmRlIFRleHQKKyAgICAgICAgenVydWVja2dlZ2ViZW4sIGFuc29uc3RlbiBkZXIgRGVmYXVsdHRleHQuIEF1ZiBkaWVzZSBXZWlzZSBzaW5kCisgICAgICAgIHJhc3NlbmFiaGFlbmdpZ2UgRGV0YWlscyBtb2VnbGljaC4gU2llaGUgYXVjaCBkaWUgQmVpc3BpZWxlLgorICAgICAgPGRlc2M+IGlzdCBlaW5lIENsb3N1cmUuCisgICAgICAgIEluIGRpZXNlbSBGYWxsIHdpcmQgZGllIENsb3N1cmUgYXVzZ2VmdWVocnQgdW5kIGRhcyBFcmdlYm5pcworICAgICAgICB6dXJ1ZWNrZ2VnZWJlbi4gRGllIENsb3N1cmUgYmVrb21tdCBkYWJlaSBkZW4gTmFtZW4gZGVzIERldGFpbHMKKyAgICAgICAgYWxzIFBhcmFtZXRlciB1ZWJlcmdlYmVuLgorCisgICAgRnVlciBEZXRhaWxzIGtvZW5uZW4gRm9yc2NoZXJwdW5rdGUgZWluZ2V0cmFnZW4gd2VyZGVuLgorCitCRUlTUElFTEU6CisgICAgRWluIHNjaGxpY2h0ZXMgRGV0YWlsOgorCisgICAgICBBZGREZXRhaWwoKHsic29mYSIsImNvdWNoIn0pLCAiRWluZSBrbGVpbmUgQ291Y2guXG4iKTsKKworICAgIExhZW5nZXJlIERldGFpbHMgc29sbHRlbiBoaWVyYmVpIG5pY2h0IHBlciBIYW5kIHVtZ2Vicm9jaGVuIHdlcmRlbiwKKyAgICBzb25kZXJuIG1hbiBrYW5uIGhpZXJ6dSBkaWUgRnVua3Rpb24gYnJlYWtfc3RyaW5nKCkgbnV0emVuOgorCisgICAgICBBZGREZXRhaWwoImRldGFpbCIsIGJyZWFrX3N0cmluZygKKyAgICAgICAgIkR1IHdvbGx0ZXN0IGVzIGphIG5pY2h0IGFuZGVycywgamV0enQgbXVzc3QgRHUgRGlyIGRpZXNlcyAiCisgICAgICAgICJmdWVyY2h0ZXJsaWNoIGxhbmdlIERldGFpbCBkdXJjaGxlc2VuISEhIiwgNzgpKTsKKworICAgIE5vZXRpZ2UgWmVpbGVudW1icnVlY2hlIGJlaSBaZWlsZW5sYWVuZ2VuIGdyb2Vzc2VyIDc3IHdlcmRlbiBzbworICAgIGF1dG9tYXRpc2NoIGdlbmVyaWVydC4KKyAgICBFaW4gcmFzc2VuYWJoYWVuZ2lnZXMgRGV0YWlsOgorCisgICAgICBBZGREZXRhaWwoKHsiYmV0dCIsImJldHRjaGVuIn0pLAorICAgICAgICAoWzAgICAgICA6IkVpbmUga2xlaW5lcyBCZXR0LlxuIiwgLy8gRGVyIERlZmF1bHR0ZXh0CisgICAgICAgICAgInp3ZXJnIjogICAgICAgICAgICAgICAgICAgICAgICAvLyBEaWUgUmFzc2Uga2xlaW4gc2NocmVpYmVuCisgICAgICAgICAgICAgICAgIkRhcyBCZXR0IGxhZWR0IGdlcmFkZXp1IHp1IGVpbmVtIE5pY2tlcmNoZW4gZWluLlxuIl0pKTsKKworICAgIFVuZCBudW4gZWluIERldGFpbCBtaXQgQ2xvc3VyZSAoZGllc2UgVmVyc2lvbiBlcnNldHp0IGRhcyBWZXJoYWx0ZW4KKyAgICAgdm9uIEFkZFNwZWNpYWxEZXRhaWwpLgorCisgICAgICBpbnQgaGViZWxfYmV0YWV0aWd0OworICAgICAgLi4uCisgICAgICBzdHJpbmcgaGViZWwoc3RyaW5nIHN0cik7IC8vIEZ1bmt0aW9uIGJla2FubnQgbWFjaGVuIChQcm90b3R5cGluZykKKyAgICAgIC4uLgorICAgICAgQWRkRGV0YWlsKCh7ImhlYmVsIiwic2NoYWx0ZXIifSksICMnaGViZWwpOworICAgICAgLi4uCisgICAgICBzdHJpbmcgaGViZWwoc3RyaW5nIGtleSkgeworICAgICAgICBpZihoZWJlbF9iZXRhZXRpZ3QpCisgICAgICAgICAgcmV0dXJuICJEZXIgIitjYXBpdGFsaXplKGtleSkrIiBzdGVodCBhdWYgRUlOLlxuIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiAiRGVyICIrY2FwaXRhbGl6ZShrZXkpKyIgc3RlaHQgYXVmIEFVUy5cbiI7CisgICAgICB9CisKKyAgICBNYW4gZXJoYWVsdCB2ZXJzY2hpZWRlbmUgRXJnZWJuaXNzZSBiZWltIFVudGVyc3VjaGVuLCBqZSBuYWNoZGVtCisgICAgb2IgZGFzIEZsYWcgaGViZWxfYmV0YWV0aWd0IGdlc2V0enQgaXN0IG9kZXIgbmljaHQuCisKK1NJRUhFIEFVQ0g6CisgICAgU2V0emVuOiAgICBBZGRSZWFkRGV0YWlsKCksIEFkZFNtZWxscygpLCBBZGRTb3VuZHMoKSwKKyAgICAgICAgICAgICAgIEFkZFRvdWNoRGV0YWlsKCkKKyAgICBMb2VzY2hlbjogIFJlbW92ZURldGFpbCgpLCBSZW1vdmVSZWFkRGV0YWlsKCksIFJlbW92ZVNtZWxscygpLAorICAgICAgICAgICAgICAgUmVtb3ZlU291bmRzKCksIFJlbW92ZVRvdWNoRGV0YWlsKCkKKyAgICBEYXRlbjogICAgIFBfREVUQUlMUywgUF9SRUFEX0RFVEFJTFMsIFBfU01FTExTLCBQX1NPVU5EUywKKyAgICAgICAgICAgICAgIFBfVE9VQ0hfREVUQUlMUywgUF9TUEVDSUFMX0RFVEFJTFMKKyAgICBWZXJhbHRldDogIEFkZFNwZWNpYWxEZXRhaWwoKSwgUmVtb3ZlU3BlY2lhbERldGFpbCgpLCBQX1JFQURfTVNHCisgICAgU29uc3RpZ2VzOiBHZXREZXRhaWwoKSwgYnJlYWtfc3RyaW5nKCkKKworMjAuMDEuMjAxNSwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGREcmluayBiL2RvYy9sZnVuL0FkZERyaW5rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiOTllMDgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGREcmluawpAQCAtMCwwICsxLDEyIEBACitBZGREcmluaygpCisKK0JFTUVSS1VOR0VOOgorCisgICAgICAgIERpZSBGdW5rdGlvbiBBZGREcmluaygpIHNvbGx0ZSBOSUNIVCBNRUhSIEJFTlVUWlQgd2VyZGVuLgorICAgICAgICBCaXR0ZSBBZGRUb01lbnUoKSB2ZXJ3ZW5kZW4uCisKK1NJRUhFIEFVQ0g6CisJQWRkVG9NZW51KCksIFJlbW92ZUZyb21NZW51KCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogRnJpIE1hciAwMyAxMzoyMzowMCAyMDAwIGJ5IFBhcmFjZWxzdXMKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZEV4aXQgYi9kb2MvbGZ1bi9BZGRFeGl0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNzA2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRFeGl0CkBAIC0wLDAgKzEsOTEgQEAKK0FkZEV4aXQoKQorRlVOS1RJT046CisgICAgIHZvaWQgQWRkRXhpdChzdHJpbmd8c3RyaW5nKiBjbWQsIGNsb3N1cmV8c3RyaW5nIGRlc3QpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcm9vbS9leGl0cworCitBUkdVTUVOVEU6CisgICAgIHN0cmluZy9zdHJpbmcqIGNtZAorICAgICAgICAgIGRpZSBSaWNodHVuZyhlbiksIGluIGRpZSBkZXIgQXVzZ2FuZyBmdWVocnQKKyAgICAgc3RyaW5nL2Nsb3N1cmUgZGVzdAorICAgICAgICAgIGRhcyBaaWVsIGRlcyBBdXNnYW5ncyBtaXQgVGV4dC9DbG9zdXJlCisKK0JFU0NIUkVJQlVORzoKKworICAgICBFcyB3aXJkIGVpbiBBdXNnYW5nIGluIGRpZSBSaWNodHVuZyhlbikgY21kIGVpbmdlZnVlZ3QuIERpZSBBcnQgZGVzCisgICAgIEF1c2dhbmdzIGhhZW5ndCBhYiB2b24gZGVzdDoKKworICAgICAtIGVpbiBTdHJpbmc6CisgICAgICAgLSBtaXQgZWluZW0gRGF0ZWluYW1lbjoKKyAgICAgICAgIERlciBBdXNnYW5nIGZ1ZWhydCBpbiBkZW4gUmF1bSwgZGVuIGRlciBEYXRlaW5hbWUgYmV6ZWljaG5ldC4KKyAgICAgICAtIGRlciBGb3JtICI8bXNnPiNkYXRlaW5hbWUiCisgICAgICAgICBEZXIgQXVzZ2FuZyBmdWVocnQgaW4gZGVuIFJhdW0sIGRlbiBkZXIgRGF0ZWluYW1lIGJlemVpY2huZXQsCisgICAgICAgICBiZWkgZGVyIEJlbnV0enVuZyB3aXJkIGplZG9jaCBzdGF0dCAiPG5hbWU+IGdlaHQgbmFjaCA8cmljaHR1bmc+IgorICAgICAgICAgIjxuYW1lPiBnZWh0IG5hY2ggPG1zZz4iIGF1c2dlZ2ViZW4uCisgICAgIC0gZWluZSBDbG9zdXJlOgorICAgICAgIERpZSBDbG9zdXJlIHdpcmQgYmVpIE51dHp1bmcgZGVzIEF1c2dhbmdzIGF1ZmdlcnVmZW4uIERhcyBlbnRzcHJpY2h0CisgICAgICAgZWluZSBTcGVjaWFsRXhpdCAtIGluIGRlciBnZXJ1ZmVuZW4gRnVua3Rpb24gbXVzcyBtYW4gZGVuIFNwaWVsZXIKKyAgICAgICBzZWxic3QgaW4gZGVuIFppZWxyYXVtIGJld2VnZW4uCisgICAgICAgR2VnZWJlbmVuZmFsbHMga2FubiBkYXMgZHVyY2ggQWRkQ21kKCkgZXJzZXR6dCB3ZXJkZW4uCisKK0JFTUVSS1VOR0VOOgorICAgICBNYW4ga2FubiBmdWVyIGRlbiBEYXRlaW5hbWVuIGRlcyBaaWVscmF1bWVzIGF1Y2ggZWluZW4gcmVsYXRpdmVuIFBmYWQKKyAgICAgYW5nZWJlbi4gRGllIEF1c3dlcnR1bmcgZXJmb2xndCBuYWNoIGZvbGdlbmRlbSBTY2hlbWE6CisgICAgIC0gIi4vPGRhdGVpbmFtZT4iCisgICAgICAgRXMgd2lyZCBlaW4gWmllbHJhdW0gcmVsYXRpdiB6dW0gZ2xlaWNoZW4gVmVyemVpY2huaXMgd2llIGRpZXNlcgorICAgICAgIFJhdW0gYW5nZXNwcm9jaGVuLgorICAgICAtICIuLi88ZGF0ZWluYW1lPiIKKyAgICAgICBFcyB3aXJkIGVpbiBaaWVscmF1bSByZWxhdGl2IHp1ciBWZXJ6ZWljaG5pc2ViZW5lIHVlYmVyIGRlcgorICAgICAgIGRpZXNlcyBSYXVtZXMgYW5nZXNwcm9jaGVuIChhbmFsb2cgbWl0IG1laHJlcmVybiAiLi4vLi4iKQorCisgICAgIE1pdHRlbHMgUF9ISURFX0VYSVRTIGthbm4gbWFuIEF1c2dhZW5nZSB2ZXJzdGVja2VuLgorCisgICAgIEJlaSBkZXIgQmVudXR6dW5nIGVpbmVzIEF1c2dhbmdzIHdpcmQgZGVyIEhvb2sgSF9IT09LX0VYSVRfVVNFCisgICAgIGF1c2dlbG9lc3QuCisKK0JFSVNQSUVMRToKKyAgICAgIyMjIG5vcm1hbGUgQXVzZ2FlbmdlICMjIworICAgICAvLyBCZWltIEtvbW1hbmRvICJzdWVkZW4iIGtvbW10OiAiPG5hbWU+IGdlaHQgbmFjaCBTdWVkZW4uIgorICAgICBBZGRFeGl0KCJzdWVkZW4iLCAiL2dpbGRlbi9hYmVudGV1cmVyIik7CisKKyAgICAgLy8gQmVpbSBLb21tYW5kbyAic3VlZGVuIiBrb21tdDogIjxuYW1lPiBnZWh0IGluIGRpZSBHaWxkZS4iCisgICAgIEFkZEV4aXQoInN1ZWRlbiIsICJpbiBkaWUgR2lsZGUjL2dpbGRlbi9hYmVudGV1cmVyIik7CisKKyAgICAgIyMjIEF1c2dhZW5nZSBtaXQgcmVsYXRpdmVuIFBmYWRlbiAjIyMKKyAgICAgLy8gRGVyIE5hbWUgZGVzIFJhdW1lcyBzZWkgIi9kL2luc2Vsbi93YXJnb24vaGFmZW4xIgorICAgICAvLyBEaWVzZXIgQXVzZ2FuZyBnZWh0IG5hY2ggIi9kL2luc2Vsbi93YXJnb24va25laXBlIjoKKyAgICAgQWRkRXhpdCgibm9yZGVuIiwgIi4va25laXBlIiApOworCisgICAgIC8vIFVuZCBkaWVzZXIgbmFjaCAiL2QvaW5zZWxuL2FudGhlYS9hbmxlZ2UiOgorICAgICBBZGRFeGl0KCJzdWVkZW4iLCAiLi4vYW50aGVhL2FubGVnZSIgKTsKKworICAgICAjIyMgZHluYW1pc2NoZSBBdXNnYWVuZ2UgIyMjCisgICAgIC8vIGVpbiBBdXNnYW5nIHNvbGwgbnVyIHZvbiBGcm9lc2NoZW4gYmVudXR6YmFyIHNlaW46CisKKyAgICAgc3RhdGljIGludCBsb2NoZmt0KHN0cmluZyBkaXIpOwkJLy8gUHJvdG90eXAKKyAgICAgLi4uCisgICAgIEFkZEV4aXQoImxvY2giLCAjJ2xvY2hma3QpOworICAgICAvLyBhdWNoIGlkZW50aXNjaCB6dToKKyAgICAgLy8gQWRkU3BlY2lhbEV4aXQoImxvY2giLCAjJ2xvY2hma3QpOyBbZWluZSBDbG9zdXJlXSBvZGVyCisgICAgIC8vIEFkZFNwZWNpYWxFeGl0KCJsb2NoIiwgImxvY2hma3QiKTsgW2VpbiBGdW5rdGlvbnNuYW1lXQorCisgICAgIHN0YXRpYyBpbnQgbG9jaGZrdChzdHJpbmcgZGlyKSB7CisgICAgICAgaWYgKCEodGhpc19wbGF5ZXIoKS0+UXVlcnlQcm9wKFBfRlJPRykpKSB7CisgICAgICAgICAvLyBLZWluIEZyb3NjaCA9PiBwYXNzdCBuaWNodCEKKyAgICAgICAgIG5vdGlmeV9mYWlsKCJEdSBiaXN0IHp1IGdyb3NzIVxuIik7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgICB9CisgICAgICAgLy8gTWVsZHVuZ2VuIHdlcmRlbiBpbSBtb3ZlKCkgZ2xlaWNoIG1pdGdlZ2ViZW4KKyAgICAgICByZXR1cm4gdGhpc19wbGF5ZXIoKS0+bW92ZSgiL3Jvb20vbG9jaCIsIE1fR08sIDAsCisgICAgICAgICAgICAgICAgICAgICJodWVwZnQgaW5zIExvY2giLCAiaHVlcGZ0IGhlcmVpbiIpOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZFNwZWNpYWxFeGl0KCksIEdldEV4aXRzKCkKKyAgICAgUmVtb3ZlRXhpdCgpLCBSZW1vdmVTcGVjaWFsRXhpdCgpLAorICAgICBIX0hPT0tfRVhJVF9VU0UsIFBfRVhJVFMsIFBfSElERV9FWElUUywgL3N0ZC9yb29tL2V4aXRzLmMKKyAgICAgYXVzZ2FlbmdlCisKKzMxLjAxLjIwMTUsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkRXhwIGIvZG9jL2xmdW4vQWRkRXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYWVkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRFeHAKQEAgLTAsMCArMSwzMiBAQAorQWRkRXhwKCkKK0ZVTktUSU9OOgorICAgICBpbnQgQWRkRXhwKGludCBlKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgIGludCBlIC0gQW56YWhsIGRlciBoaW56dXp1ZnVlZ2VuZGVuIChhYnp1emllaGVuZGVuKSBYUAorCitCRVNDSFJFSUJVTkc6CisgICAgIERlbSBMaXZpbmcgd2VyZGVuIGUgWFAgYXVmIHNlaW5lIGJpc2hlcmlnZW4gUF9YUCBhZGRpZXJ0LgorCisgICAgIEZhbGxzIGVzIHNpY2ggdW0gZWluZW4gU3BpZWxlciBtaXQgUF9LSUxMUz4wIGhhbmRlbHQgdW5kCisgICAgIGUgcG9zaXRpdiBpc3QsIGJla29tbXQgZGVyIFNwaWVsZXIga2VpbmUgWFAgZ3V0Z2VzY2hyaWViZW4uCisKKyAgICAgUF9MQVNUX1hQIHdpcmQgYWt0dWFsaXNpZXJ0LgorCitCRU1FUktVTkc6CisgICAgIC0gcG9zaXRpdmUgdW5kIG5lZ2F0aXZlIFdlcnRlIHNpbmQgbW9lZ2xpY2gKKyAgICAgLSBQX1hQIHdpcmQgbmljaHQgPDAgZ2VzZXR6dC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgaW50IC0gbmV1ZXIgWFAtV2VydAorCitTSUVIRSBBVUNIOgorICAgICBGdW5rdGlvbmVuOiAgZG9fZGFtYWdlKCksIERpc3RyaWJ1dGVFeHAoKQorICAgICBQcm9wZXJ0aWVzOiAgUF9YUCwgUF9MQVNUX1hQCisgICAgIFNvbnN0aWdlczogICBQX05PX1hQLCBQX05PX1NDT1JFCisgICAgICAgICAgICAgICAgICBjcmVhdGVfZGVmYXVsdF9ucGMoKQorCisxNC5GZWIgMjAwNyBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZEV4dHJhTG9vayBiL2RvYy9sZnVuL0FkZEV4dHJhTG9vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjZhODUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkRXh0cmFMb29rCkBAIC0wLDAgKzEsOTYgQEAKK0FkZEV4dHJhTG9vaygpCit2YXJhcmdzIGludCBBZGRFeHRyYUxvb2soc3RyaW5nIGxvb2ssIFtpbnQgZHVyYXRpb24sIHN0cmluZyBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGxvb2tlbmRlLCBvYmplY3Qgb2JdKTsKK0RFRklOSUVSVCBJTjoKKyAgIC9zdGQvbGl2aW5nL2Rlc2NyaXB0aW9uLmMKKworQkVTQ0hSRUlCVU5HOgorICAgRGVyIEV4dHJhbG9vayBlcnNjaGVpbnQgaW4gZGVyIExhbmdiZXNjaHJlaWJ1bmcgZGVzIExlYmV3ZXNlbnMuCisgICBFaW50cmFlZ2Uga29lbm5lbiBtaXQgZGllc2VyIEZ1bmt0aW9uIGhpbnp1Z2VmdWVndCB3ZXJkZW4uIERpZXMgaXN0IGRlcgorICAgYmV2b3J6dWd0ZSBXZWcsIHdlbm4gYW5zb25zdGVuIGV4dHJhIGVpbiBPYmpla3QgaW0gU3BpZWxlcmludmVudGFyIGFiZ2VsZWd0CisgICB3ZXJkZW4gbXVlc3N0ZS4KKyAgIAorICAgQWxsZSBQYXJhbWV0ZXIgYmlzIGF1ZiA8bG9vaz4gc2luZCBvcHRpb25hbC4KKworQVJHVU1FTlRFOgorICAtIHN0cmluZyBsb29rOgorICAgIFN0cmluZywgZGVyIGluIGRlciBMYW5nYmVzY2hyZWlidW5nIGRlcyBMZWJld2VzZW5zIHp1c2FldHpsaWNoIGF1c2dlZ2ViZW4KKyAgICB3aXJkLgorICAgIEthbm4gYXVjaCBlaW4gRnVua3Rpb25zbmFtZSBzZWluLCB3ZW5uIDxvYj4gYW5nZWdlYmVuIHdpcmQgKHMudS4pLgorICAtIGludCBkdXJhdGlvbjoKKyAgICA+IDA6IFdpZSBsYW5nIGJsZWlidCBkZXIgRXh0cmFsb29rIGd1ZWx0aWcgKGluIFNla3VuZGVuKT8gQW5zY2hsaWVzc2VuZCAKKyAgICAgICAgIHdpcmQgZXIgYXV0b21hdGlzY2ggZ2Vsb2VzY2h0LgorICAgIDA6ICAgRGllc2VyIEVpbnRyYWcgYmxlaWJ0IHVuYmVncmVuenQgZ3VlbHRpZy4KKyAgICA8IDA6IERpZXNlciBFaW50cmFnIGJsZWlidCBiaXMgenVtIEVuZGUvUmVib290IGJlc3RlaGVuLgorICAtIHN0cmluZyBrZXk6CisgICAgU2NobHVlc3NlbHdvcnQsIHVudGVyIGRlbSBkZXIgRWludHJhZyByZWdpc3RyaWVydCB3aXJkIHVuZCBtaXQgZGVtIG1hbiBpaG4KKyAgICBhdWNoIG1pdHRlbHMgUmVtb3ZlRXh0cmFMb29rKCkgZW50ZmVybmVuIGthbm4uIFNvbGx0ZSBuYXR1ZXJsaWNoCisgICAgbW9lZ2xpY2hzdCBlaW5kZXV0aWcgc2Vpbi4gOy0pIFdlbm4gPGtleT4gbmljaHQgYW5nZWJlbiB3aXJkLCB3aXJkIGRlciAKKyAgICBPYmpla3RuYW1lIChvYmplY3RfbmFtZSgpKSBiZW51dHp0LgorICAtIHN0cmluZyBsb29rZW5kZToKKyAgICBTdHJpbmcsIGRlciBhbiBkYXMgTGViZXdlc2VuIChudXIgYmVpIFNwaWVsZXJuKSBhdXNnZWdlYmVuIHdpcmQsIHdlbm4gZGVyCisgICAgZWluZ2V0cmFnZW5lIEV4dHJhbG9vayBhYmdlbGF1ZmVuIGlzdC4KKyAgICBLYW5uIGF1Y2ggZWluIEZ1bmt0aW9uc25hbWUgc2Vpbiwgd2VubiA8b2I+IGFuZ2VnZWJlbiB3aXJkLgorICAtIG9iamVjdCBvYjoKKyAgICBXZW5uIGhpZXIgZWluIE9iamVrdCBhbmdlZ2ViZW4gd2lyZCwgd2VyZGVuIDxsb29rPiB1bmQgPGxvb2tlbmRlPiBhbHMKKyAgICBGdW5rdG9uc25hbWVuIGF1ZmdlZmFzc3QuIERpZXNlIEZ1bmt0aW9uZW4gd2VyZGVuIGluIDxvYj4gYXVmZ2VydWZlbiwgd2VubgorICAgIGRlciBFeHRyYWxvb2sgZGVzIExlYmV3ZXNlbiBhbmdlemVpZ3Qgd2lyZCBiencuIGRlciBlaW5nZXRyYWdlbmUgRXh0cmFsb29rCisgICAgYWJnZWxhdWZlbiBpc3QuIERpZXNlIEZ1bmt0aW9uZW4gYmVrb21tZW4gZGFzIGpld2VpbGlnZSBMZWJlbndlc2VuIGFscworICAgIE9iamVrdCB1ZWJlcmdlYmVuLiBTaWUgbXVlc3NlbiBlaW5lbiBTdHJpbmcgenVydWVja2xpZWZlcm4sIGRlciBhdXNnZWdlYmVuCisgICAgd2lyZC4gRGllc2VyIFN0cmluZyB3aXJkIGRpcmVrdCBzbyBhdXNnZWJlbiwgYWxzbyBzZWxiZXIgZnVlciBaZWlsZW51bWJydWNoCisgICAgZXRjLiBzb3JnZW4hCisgICAgV0lDSFRJRzogRGFzIE9iamVrdCBzb2xsdGUgbmFjaCBNb2VnbGljaGtlaXQgZWluZSBCbHVlcHJpbnQgc2VpbiwgZGEgZGFzCisgICAgZ2FuemUgbml4IG1laHIgYXVzZ2lidCwgc29iYWxkIGRlciBDbG9uZSB6ZXJzdG9lcnQgd2lyZCwgZmFsbHMgaGllciAKKyAgICBlaW5lciBhbmdlYmVuIHdpcmQuIFdlbm4gaWhyIGtlaW5lIEJQIHVlYmVyZ2VidDogV2lzc3QsIHdhcyBpaHIgdHV0LiA7LSkKKworUlVFQ0tHQUJFV0VSVEU6CisgID4gMCwgZmFsbHMgZGVyIEVpbnRyYWcgZXJmb2xncmVpY2ggcmVnaXN0cmllcnQgd3VyZGUuCisgIDwgMCBzb25zdC4KKyAgICAtMTogPGtleT4gd2FyIG5pY2h0IGd1ZWx0aWcgdW5kIGVzIGtvbm50ZSBrZWluZXIgZXJtaXR0ZWx0IHdlcmRlbi4KKyAgICAtMjogPGxvb2s+IHdhciBrZWluIGd1ZWx0aWdlciBTdHJpbmcuCisgICAgLTM6IDxkdXJhdGlvbj4gd2FyIGtlaW4gSW50ZWdlci4KKyAgICAtNDogdW50ZXIgPGtleT4gZ2lidCBlcyBzY2hvbiBlaW5lbiBFaW50cmFnLgorCitCRU1FUktVTkdFTjoKKyAgRGllIFN0cmluZ3MgPGxvb2s+IHVuZCA8bG9va2VuZGU+IHdlcmRlbiB2b3IgQXVzZ2FiZSBkdXJjaAorICByZXBsYWNlX3BlcnNvbmFsKCkgZ2VzY2hpY2t0LCBkYWhlciBpc3QgZGllIFZlcndlbmR1bmcgdm9uIEBXRVIxLCBAV0VTU0VOMQorICB1c3cuIG1vZWdsaWNoIChzLiByZXBsYWNlX3BlcnNvbmFsKS4gRGllcyBnaWx0IGFiZXIgX25pY2h0XyBmdWVyIGRlbiBGYWxsLAorICBkYXNzIGRpZSBlbnRzcHJlY2hlbmRlbiBGdW5rdGlvbmVuIGluIDxvYj4gZ2VydWZlbiB3ZXJkZW4sIGRhbm4gbXVlc3NlbiBkaWUKKyAgRnVua3Rpb25lbiBzZWxiZXIgdW1icmVjaGVuLCBldGMuCisgIE5hY2ggcmVwbGFjZV9wZXJzb25hbCgpIHdlcmRlbiBkaWUgU3RyaW5ncyBub2NoIHZvbiBicmVha19zdHJpbmcoKSBhdWYgNzgKKyAgWmVpbGVuIHVtZ2Vicm9jaGVuLCBhbGxlcmRpbmdzIGJsZWliZW4gZGFiZWkgdm9yaGFuZGVuZSBVbWJydWVjaGUgZXJoYWx0ZW4uCisgIERpZSBNZWxkdW5nIHZvbiA8bG9va2VuZGU+IGJ6dy4gZGVyIEZ1bmt0aW9uc2F1ZnJ1ZiBlcmZvbGd0LCB3ZW5uIGRlcgorICBFeHRyYWxvb2sgZGVyIExlYmV3ZXNlbiBkYXMgZXJzdGUgTWFsIG5hY2ggQWJsYXVmIGRlciBHdWVsdGlna2VpdCBhdWZnZXJ1ZmVuCisgIHdpcmQuCisKK0JFSVNQSUVMRToKKyAgIyBlaW5mYWNoZXIgRWludHJhZywgImZ1ZXIgZGllIEV3aWdrZWl0IgorICBsaXZpbmctPkFkZEV4dHJhTG9vaygiQFdFUjEgaGF0IGRlbiBEcmFjaGVuZ290dCBkZXIgU1NQIGJlc2llZ3QuIik7CisKKyAgIyBFaW50cmFnIGRlciBuYWNoIDFoIGF1dG9tYXRpc2NoIHdlZyBpc3QuCisgIGxpdmluZy0+QWRkRXh0cmFMb29rKCJAV0VSMSBpc3QgZ2FueiBtaXQgTWFybWVsYWRlIGJlZGVja3QuIiwgMzYwMCk7CisgIAorICAjIEVpbnRyYWcgbWl0IGJlc3RpbW10ZW4gU2NobHVlc3NlbCwgZGFtaXQgbWFuIGlobiB3aWVkZXIgZW50ZmVybmVuIGthbm4uCisgIGxpdmluZy0+QWRkRXh0cmFMb29rKCJAV0VSMSBpc3QgZ2FueiBtaXQgTWFybWVsYWRlIGJlZGVja3QuIiwgMzYwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh1bW5pX21hcm1lbGFkZW5fbG9vayIpOworICAKKyAgIyBNaXQgIkVuZGUiLU1lbGR1bmcsIGFiZXIga2VpbiBlaWdlbmVyIFNjaGx1ZXNzZWwuCisgIGxpdmluZy0+QWRkRXh0cmFMb29rKCJAV0VSMSBpc3QgcGF0c2NobmFzcy4iLCAxMjAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiRHUgYmlzdCBlbmRsaWNoIHdpZWRlciB0cm9ja2VuLiBQdXVoLiIpOworICAKKyAgIyBNaXQgT2JqZWt0LCB3YXMgZGVuIEV4dHJhbG9vayBkeW5hbWlzY2ggZXJ6ZXVndAorICBsaXZpbmctPkFkZEV4dHJhTG9vaygiZ2V0X215X3NwZWNpYWxfZXh0cmFsb29rIiwgMzYwMCwgMCwgMCwgdGhpc19vYmplY3QoKSk7CisgICAgSW4gZGllc2VtIEZhbGwgbXVzcyB0aGlzX29iamVjdCgpIG5hdHVlcmxpY2ggZGllIEZ1bmt0aW9uCisgICAgImdldF9teV9zcGVjaWFsX2V4dHJhbG9vaygpIiBkZWZpbmllcmVuLCBkaWUgZWluZW4gU3RyaW5nIHp1cnVlY2tnaWJ0LgorCisgICMgTWl0IE9iamVrdCwgd2FzIGRlbiBFeHRyYWxvb2sgdW5kIGRpZSBFbmRlbWVsZHVuZyBkeW5hbWlzY2ggZXJ6ZXVndAorICBsaXZpbmctPkFkZEV4dHJhTG9vaygiZ2V0X215X3NwZWNpYWxfZXh0cmFsb29rIiwgMzYwMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImV4dHJhbG9va2VuZGUiLCB0aGlzX29iamVjdCgpKTsKKworU0lFSEUgQVVDSDoKKyAgIFJlbW92ZUV4dHJhTG9vaygpLAorICAgcmVwbGFjZV9wZXJzb25hbCgpLCBicmVha19zdHJpbmcoKQorICAgUF9JTlRFUk5BTF9FWFRSQV9MT09LCisKKzE0LjA1LjIwMDcsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkRml4ZWRPYmplY3QgYi9kb2MvbGZ1bi9BZGRGaXhlZE9iamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJlMTcyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkRml4ZWRPYmplY3QKQEAgLTAsMCArMSw1MiBAQAorQWRkRml4ZWRPYmplY3QoKQorCitGVU5LVElPTjoKKyAgICAgICAgdmFyYXJncyB2b2lkIEFkZEZpeGVkT2JqZWN0KHN0cmluZyBzdHIsIGludCB2YWwsIG1peGVkIGlkcyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3N0ZC9yb29tL3Nob3AuYworCitBUkdVTUVOVEU6CisgICAgICAgIHN0cgorICAgICAgICAgIERlciBhYnNvbHV0ZSBGaWxlbmFtZSBlaW5lcyBPYmpla3RzLCBkYXMgaW4gcXVhc2kgYmVsaWViaWdlciBNZW5nZQorICAgICAgICAgIHZvbSBiZXRyZWZmZW5kZW4gTGFkZW4gdmVya2F1ZnQgd2VyZGVuIHNvbGwuCisgICAgICAgIHZhbAorICAgICAgICAgIFNvZmVybiBhbmdlZ2ViZW4gZGVyIGFuZ2Vub21tZW5lIFdlcnQgZGVzIE9iamVrdHMuIEZhbGxzIHZhbCBuaWNodAorICAgICAgICAgIGFuZ2VnZWJlbiBvZGVyIDAgaXN0LCB3aXJkIGRlciBXZXJ0IGF1cyBkZW0gYW5nZWdlYmVuZW4gT2JqZWt0CisgICAgICAgICAgc2VsYnN0IGVybWl0dGVsdC4KKyAgICAgICAgICBEZXIgVmVya2F1ZnNwcmVpcyBpc3QgMyAqIFdlcnQgZGVzIE9iamVrdHMuCisgICAgICAgIGlkcworICAgICAgICAgIFN0cmluZyBvZGVyIFN0cmluZ2FycmF5IG1pdCBkZXIgSUQgb2RlciBkZW4gSURzLCB1ZWJlciBkaWUgbWFuIGRhcworICAgICAgICAgIE9iamVrdCBpbSBMYWRlbiBhbnNwcmVjaGVuIGthbm4uIEZhbGxzIG5pY2h0IGFuZ2VnZWJlbiwgd2lyZCBkaWUKKyAgICAgICAgICBJRC1MaXN0ZSBhdXMgZGVyIGJsdWVwcmludCBkZXMgT2JqZWt0cyBhdXNnZWxlc2VuLgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24ga2FubiBtYW4gZWluZW0gTGFkZW4gbWl0dGVpbGVuLCBkYXNzIGVpbiBPYmpla3QKKyAgICAgICAgaW4gaWhtIGluIHVuYmVncmVuenRlciBBbnphaGwgdmVya2F1ZnQgd2VyZGVuIHNvbGwuCisgICAgICAgIFdJQ0hUSUc6IERhcyB6dSB2ZXJrYXVmZW5kZSBPYmpla3Qgc29sbHRlIGRpZXMgaW5zb2Zlcm4gdW50ZXJzdHVldHplbiwgCisgICAgICAgIGRhc3MgZGllIEJsdWVwcmludCBkaWUgbm90d2VuZGlnZW4gSW5mb3JtYXRpb25lbgorICAgICAgICAoUF9TSE9SVCwgUF9JRFMsIFBfVkFMVUUsIFBfTE9ORywgUF9OQU1FKSBiZWluaGFsdGV0LiBEaWVzIGJlZGV1dGV0IGltCisgICAgICAgIGVpbmZhY2hzdGVuIEZhbGwsIGRhc3MgaW0gY3JlYXRlKCkgYXVmCisgICAgICAgICAgaWYgKCFjbG9uZXAoKSkgcmV0dXJuOworICAgICAgICB2ZXJ6aWNodGV0IHdpcmQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgICAgIGtlaW5lcgorICAgICAgICAKK0JFSVNQSUVMRToKKyAgICAgICAgQWRkRml4ZWRPYmplY3QoIi9vYmovZmFja2VsIiwgNTAwMCwgImZhY2tlbCIpOworICAgICAgICAgIERlciBMYWRlbiB2ZXJrYXVmdCBGYWNrZWxuIHp1bSBQcmVpcyB2b24gMyo1MDAwIEdvbGRtdWVuemVuIHVuZCBtYW4KKyAgICAgICAgICBrYW5uIGRpZSBGYWNrZWwgKGF1c3NlciB1ZWJlciBkaWUgSW52ZW50YXJudW1tZXIpIG51ciBtaXR0ZWxzIGRlcgorICAgICAgICAgIGlkICJmYWNrZWwiIGthdWZlbi4KKyAgICAgICAgICAKKyAgICAgICAgQWRkRml4ZWRPYmplY3QoIi9vYmovZmFja2VsIik7CisgICAgICAgICAgRGVyIExhZGVuIHZlcmthdWZ0IEZhY2tlbG4genVtIGRyZWlmYWNoZW4gV2VydCBkZXNzZW4sIHdhcyBpbSBPYmpla3QKKyAgICAgICAgICAvb2JqL2ZhY2tlbC5jIGFuZ2VnZWJlbiBpc3QgKGRlcnplaXQgc2luZCBkYXMgNSBNdWVuemVuKSB1bmQgbGFlc3N0CisgICAgICAgICAgYWxsZSBJRHMgenUsIGRpZSBpbiAvb2JqL2ZhY2tlbC5jIGFuZ2VnZWJlbiBzaW5kLiBEZXJ6ZWl0IGlzdCBkYXMKKyAgICAgICAgICBhdWNoIG51ciAiZmFja2VsIi4KKworU0lFSEUgQVVDSDoKKwlSZW1vdmVGaXhlZE9iamVjdCgpLCBTZXRTdG9yYWdlUm9vbSgpLCAvc3RkL3N0b3JlLmMKKyAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMZXR6dGUgQWVuZGVydW5nOiBTYXQgTm92ICA5IDEyOjU5OjI1IDIwMDIgZHVyY2ggQmFtYmkKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZEZvb2QgYi9kb2MvbGZ1bi9BZGRGb29kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYTE4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRGb29kCkBAIC0wLDAgKzEsMTIgQEAKK0FkZEZvb2QoKQorCitCRU1FUktVTkdFTjoKKworICAgICAgICBEaWUgRnVua3Rpb24gQWRkRm9vZCgpIHNvbGx0ZSBOSUNIVCBNRUhSIEJFTlVUWlQgd2VyZGVuLgorICAgICAgICBCaXR0ZSBBZGRUb01lbnUoKSB2ZXJ3ZW5kZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIEFkZFRvTWVudSgpLCBSZW1vdmVGcm9tTWVudSgpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IEZyaSBNYXIgMDMgMTM6MjM6MDAgMjAwMCBieSBQYXJhY2Vsc3VzCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRGdWVsIGIvZG9jL2xmdW4vQWRkRnVlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjAwMzUwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkRnVlbApAQCAtMCwwICsxLDI5IEBACitBZGRGdWVsKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgQWRkRnVlbChpbnQgZnVlbCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saWdodHNvdXJjZS5jCisKK0FSR1VNRU5URToKKyAgICAgZnVlbAorICAgICAgICAgIERpZSB6dXNhZXR6bGljaGUgQnJlbm5kYXVlciBpbiBTZWt1bmRlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWUgQnJlbm5kYXVlciBkZXIgTGljaHRxdWVsbGUgd2lyZCB1bSBmdWVsIFNla3VuZGVuIHZlcmxhZW5nZXJ0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVNRVJLVU5HRU46CisgICAgIEVzIHdlcmRlbiBrZWluZSBDaGVja3MgZHVyY2hnZWZ1ZWhydCEgV2VubiBtYW4gc2VpbmUgTGljaHRxdWVsbGUKKyAgICAgbmFjaGZ1ZWxsYmFyIGdlc3RhbHRlbiB3aWxsLCBzb2xsdGUgZGllIE5hY2hmdWVsbGZ1bmt0aW9uIHZvciBkZW0KKyAgICAgQWRkRnVlbCgpLUF1ZnJ1ZiBuYWNoc2VoZW4sIHdpZSB2b2xsIGRpZSBMaWNodHF1ZWxsZSBub2NoIGlzdCwgdW5kIGZ1ZWwKKyAgICAgZW50c3ByZWNoZW5kIGJlZ3Jlbnplbi4KKworU0lFSEUgQVVDSDoKKyAgICAgL3N0ZC9saWdodHNvdXJjZS5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoxNjozOSAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkRnVuIGIvZG9jL2xmdW4vQWRkRnVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNWI1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRGdW4KQEAgLTAsMCArMSw2MyBAQAorQWRkRnVuKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgQWRkRnVuKHN0cmluZyBmdW4sIGludCBuZXh0KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RyYW5zcG9ydC5jCisKK0FSR1VNRU5URToKKyAgICAgZnVuCisgICAgICAgICAgTmFtZSBkZXIgRnVua3Rpb24uCisgICAgIG5leHQKKyAgICAgICAgICBaZWl0IGJpcyB6dXIgbmFlY2hzdGVuIEZhaHJwbGFuc3RhdGlvbi4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEZW0gRmFocnBsYW4gd2lyZCBkZXIgQXVmcnVmIGRlciBGdW5rdGlvbiBmdW4sIGRpZSBpbSBUcmFuc3BvcnRlcgorICAgICBkZWZpbmllcnQgc2VpbiBtdXNzLCBoaW56dWdlZnVlZ3QuIE5hY2ggQXVmcnVmIGRlciBGdW5rdGlvbiB2ZXJnZWhlbgorICAgICBuZXh0IFNla3VuZGVuLCBiaXMgZGllIG5hZWNoc3RlIFN0YXRpb24gYW5nZWZhaHJlbiB3aXJkLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVJU1BJRUxFOgorICAgICBXZW5uIGVpbiB6dWZhZWxsaWcgYXVzZ2V3YWVobHRlciBQYXNzYWdpZXIgZWluZXMgU2NoaWZmZXMgdW50ZXJ3ZWdzCisgICAgIHNlZWtyYW5rIHdlcmRlbiBzb2xsLCBrb2VubnRlIG1hbiBkYXMgd2llIGZvbGd0IHJlYWxpc2llcmVuOgorCisgICAgIGNyZWF0ZSgpCisgICAgIHsKKyAgICAgICAuLi4KKworICAgICAgIEFkZEZ1bigic2Vla3JhbmsiLCA1KTsKKyAgICAgICAuLi4KKyAgICAgfQorCisgICAgIHNlZWtyYW5rKCkKKyAgICAgeworICAgICAgIG9iamVjdCAqcGFzc2FnaWVyZSwgb3BmZXI7CisKKyAgICAgICAvLyBzb2xsIG5pY2h0IGltbWVyIHBhc3NpZXJlbgorICAgICAgIGlmIChyYW5kb20oNSkpCisgICAgICAgICByZXR1cm47CisKKyAgICAgICAvLyBPcGZlciBhdXN3YWVobGVuCisgICAgICAgcGFzc2FnaWVyZSA9IFF1ZXJ5UGFzc2VuZ2VycygpOworICAgICAgIGlmIChzaXplb2YocGFzc2FnaWVyZSkpCisgICAgICAgICBvcGZlciA9IHBhc3NhZ2llcmVbcmFuZG9tKHNpemVvZihwYXNzYWdpZXJlKSldOworCisgICAgICAgLy8gVW5kIHZpZWwgU3Bhc3MuLi4KKyAgICAgICB0ZWxsX29iamVjdChvcGZlciwKKyAgICAgICAgICJEdSB3aXJzdCBzZWVrcmFuayEgU2NobmVsbCBzdHVlcnp0IER1IHp1ciBSZWxpbmcgdW0gIERpY2ggenVcbiIKKyAgICAgICAgKyJ1ZWJlcmdlYmVuLlxuIik7CisgICAgICAgdGVsbF9yb29tKHRoaXNfb2JqZWN0KCksCisgICAgICAgICBzcHJpbnRmKCIlcyB1ZWJlcmtvbW10IGRpZSBTZWVrcmFua2hlaXQhXG4lcyBzdHVlcnp0IGFuIGRpZSBSZWxpbmcsICIKKyAgICAgICAgICAgICAgICArInVtIHNpY2ggenUgdWViZXJnZWJlbi5cbiIsCisgICAgICAgICAgICAgICAgIGNhcGl0YWxpemUob3BmZXItPm5hbWUoV0VOKSksCisgICAgICAgICAgICAgICAgIGNhcGl0YWxpemUob3BmZXItPlF1ZXJ5UHJvbm91bihXRVIpKSksICh7IG9wZmVyIH0pICk7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgQWRkUm91dGUoKSwgQWRkTXNnKCksIC9zdGQvdHJhbnNwb3J0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjE2OjQ2IDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRJZCBiL2RvYy9sZnVuL0FkZElkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMWNlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRJZApAQCAtMCwwICsxLDUwIEBACitBZGRJZCgpCisKK0ZVTktUSU9OOgorICAgICB2b2lkIEFkZElkKHN0cmluZ3xzdHJpbmcqIGlkcyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgaWRzCisgICAgICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiBCZXplaWNobnVuZ2VuLCBtaXQgZGVuZW4KKyAgICAgICAgICBzaWNoIHNpY2ggZGFzIE9iamVrdCBhbnNwcmVjaGVuIGxhc3NlbiBzb2xsLgorCitCRVNDSFJFSUJVTkc6CisgICAgIEplZGVzIE9iamVrdCBzb2xsdGUgc2ljaCBhdWYgZGllIGVpbmUgb2RlciBhbmRlcmUgV2Vpc2UgYW5zcHJlY2hlbgorICAgICBsYXNzZW4uIFp1IGRpZXNlbSBad2VjayBrYW5uIG1hbiBkZW0gT2JqZWt0IG1pdCBkaWVzZXIgRnVua3Rpb24KKyAgICAgQmV6ZWljaG5lciB1ZWJlcmdlYmVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVNRVJLVU5HRU46CisgICAgIEplZGVzIE9iamVrdCBzb2xsdGUgbWFuIHp1bWluZGVzdCBtaXQgc2VpbmVyIEt1cnpiZXNjaHJlaWJ1bmcKKyAgICAgYW5zcHJlY2hlbiBrb2VubmVuISBGdWVyIEFiZnJhZ2VuIHZvbiBRdWVzdG9iamVrZW4gby5hZS4gc29sbHRlIG1hbgorICAgICB6dXNhZXR6bGljaCBJRHMgdmVyd2VuZGVuLCBkaWUgU29uZGVyemVpY2hlbiB3aWUgIlxuIiBvZGVyICJcdCIKKyAgICAgZW50aGFsdGVuLCBkYW1pdCBzaWNoZXJnZXN0ZWxsdCBpc3QsIGRhc3MgZGVyIFNwaWVsZXIgYXVjaCB3aXJrbGljaCBkaWUKKyAgICAgcmljaHRpZ2VuIE9iamVrdGUgZGFiZWloYXQuCisKK0JFSVNQSUVMRToKKworICAgICBBZGRJZCggImJ1Y2giICk7CisgICAgIEFkZElkKCAiYnVlY2hsZWluIiApOworCisgICAgIERhcyBPYmpla3QgbGFlc3N0IHNpY2ggamV0enQgYWxzICJidWNoIiB1bmQgYWxzICJidWVjaGxlaW4iIGFuc3ByZWNoZW4uCisKKyAgICAgQWRkSWQoICh7ICJidWNoIiwgImJ1ZWNobGVpbiIgfSkgKTsKKworICAgICBEaWVzZSBaZWlsZSBiZXdpcmt0IGRhcyBnbGVpY2hlIHdpZSBkaWUgb2JpZ2VuIHp3ZWkgWmVpbGVuLgorCisgICAgIEFkZElkKCAoeyAicHV6emxlIiwgIlxucXVlc3RfcHV6emxlIiB9KSApOworCisgICAgIERlciBTcGllbGVyIGthbm4gZGFzIE9iamVrdCBhbHMgInB1enpsZSIgYW5zcHJlY2hlbiwgcXVlc3RyZWxldmFudGUKKyAgICAgT2JqZWt0ZSBrb2VubmVuIG1pdCBkZXIgSUQgIlxucXVlc3RfcHV6emxlIiBuYWNoIGlobSBzdWNoZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZEFkamVjdGl2ZSgpLCBSZW1vdmVJZCgpLCBpZCgpLCBwcmVzZW50KCksIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyMC4wMS4yMDE1LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZEluZm8gYi9kb2MvbGZ1bi9BZGRJbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTdiZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRJbmZvCkBAIC0wLDAgKzEsMjE5IEBACitBZGRJbmZvKCkKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIHZvaWQgQWRkSW5mbyggZnJhZ2UsIG1lbGR1bmcKKwkJCSAgIFssIGluZGVudCBbLCBbc2lsZW50IFssIGNhc2ViYXNlZF0gXSBdICk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9ucGMvaW5mby5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nL3N0cmluZyogZnJhZ2UKKwlTY2hsdWVzc2VsdGV4dChlKSBhdWYgZGllIEluZm9ybWF0aW9uZW4gZ2VnZWJlbiB3ZXJkZW4gc29sbGVuLgorICAgICBzdHJpbmcvY2xvc3VyZSBtZWxkdW5nCisJSW5mb3JtYXRpb24sIGRpZSBnZWdlYmVuIHdlcmRlbiBzb2xsL0Nsb3N1cmUKKyAgICAgc3RyaW5nIGluZGVudAorCVRleHQsIGRlciBzaWNoIGJlaSBtZWhyemVpbGlnZW4gTWVsZHVuZ2VuIHdpZWRlcmhvbGVuIHNvbGwuCisgICAgIGludC9zdHJpbmcgc2lsZW50CisJSXN0IHNpbGVudCBnZXNldHp0LCBzbyBlcmZvbGd0IEFudHdvcnQgbnVyIGFuIEZyYWdlbmRlbi4KKyAgICAgc3RyaW5nL2Nsb3N1cmUgY2FzZWJhc2VkCisJQ2xvc3VyZSBtaXQgUmV0dXJud2VydCBzdHJpbmcgb2RlciBpbnQuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgV2VubiBlaW4gU3BpZWxlciBlaW4gTlBDIG1pdHRlbHMgImZyYWdlIDxtb25zdGVybmFtZT4gbmFjaCA8ZnJhZ2U+IiBuYWNoCisgICAgIGVpbmVyIEluZm9ybWF0aW9uIG1pdCBkZW0gU2NobHVlc3NlbCAnZnJhZ2UnIGZyYWd0LCBzbyB3aXJkIGRpZQorICAgICBlbnRzcHJlY2hlbmRlICdtZWxkdW5nJyBhdXNnZWdlYmVuIChvZGVyIGRpZSBDbG9zdXJlIGluICdtZWxkdW5nJworICAgICBnZXJ1ZmVuIHVuZCBkZXIgenVydWVja2dlZ2ViZW5lIFRleHQgYXVzZ2VnZWJlbikuIERlciBNZWxkdW5nIHdpcmQKKyAgICAgZGVyIE5hbWUgZGVzIE1vbnN0ZXJzIHZvcmFuZ2VzdGVsbHQuCisKKyAgICAgRnJhZ2U6CisgICAgICBTY2hsdWVzc2VsIG11ZXNzZW4ga2xlaW5nZXNjaHJpZWJlbiBzZWluLCBrb2VubmVuIGFiZXIgTGVlcnplaWNoZW4KKyAgICAgIGVudGhhbHRlbi4KKworICAgICBNZWxkdW5nOgorICAgICAgV2VubiBrZWluICdpbmRlbnQnIGFuZ2VnZWJlbiBpc3QsIG11c3MgbWFuIGRpZSBNZWxkdW5nIHNlbGJzdAorICAgICAgdW1icmVjaGVuLgorCisgICAgIEluZGVudDoKKyAgICAgIFdpcmQgZWluICdpbmRlbnQnIGFuZ2VnZWJlbiBzbyB3aXJkIGplZGVyIFplaWxlIGhpbnRlciBkZW0KKyAgICAgIE1vbnN0ZXJuYW1lbiBub2NoIGRhcyAnaW5kZW50JyB2b3Jhbmdlc2V0enQuIFp1c2FldHpsaWNoIHdpcmQKKyAgICAgICdtZWxkdW5nJyBhdWYgamVkZW4gRmFsbCBzYXViZXIgdW1nZWJyb2NoZW4uCisgICAgICBFaW4gdHlwaXNjaGVzIGluZGVudCBpc3QgInNhZ3Q6ICIuCisKKyAgICAgU2lsZW50OgorICAgICAgQmVpICdzaWxlbnQnPT0xIGVyZm9sZ3Qga2VpbmUgVGV4dGF1c2dhYmUgZGVyIEFudHdvcnRtZWxkdW5nIGltIFJhdW0sCisgICAgICBpc3QgJ3NpbGVudCcgZWluIFN0cmluZywgc28gd2lyZCBqZW5lciBhbiBhbGxlIGFuZGVyZW4gU3BpZWxlciBhdXNzZXIKKyAgICAgIGRlbSBGcmFnZXN0ZWxsZXIgaW0gUmF1bSBhdXNnZWdlYmVuLgorCisgICAgIENhc2ViYXNlZDoKKyAgICAgIERpZSBhbHMgQ2xvc3VyZSBhbmdlZ2ViZW5lIE1ldGhvZGUgZW50c2NoZWlkZXQsIG9iIG9kZXIgd2llIGRlciBOUEMgCisgICAgICBhdWYgZGllc2UgRnJhZ2UgYW50d29ydGVuIHNvbGw6CisgICAgICAtIHJldHVybiAwOglub3JtYWxlIEFudHdvcnQgbWl0ICJtZWxkdW5nIgorICAgICAgLSByZXR1cm4gMToJa2VpbmUgQW50d29ydC9BbnR3b3J0IG1pdCBERUZBVUxUX05PSU5GTworICAgICAgLSByZXR1cm4gc3RyaW5nOglBbnR3b3J0IG1pdCBzdHJpbmcgdW50ZXIgQmVydWVja3NpY2h0aWd1bmcgZWluZXMKKwkJCWluZGVudAorCisgICAgIERpZSBTdHJpbmdzIHZvbiAnc2lsZW50JyB1bmQgJ21lbGR1bmcnIHdlcmRlbiBnZXBhcnNlZC4gRGFiZWkgd2VyZGVuIGRpZQorICAgICBTY2hsdWVzc2Vsd29ydGUgQFdFUiwgQFdFU1NFTiwgQFdFTSwgQFdFTiBkdXJjaCBUUC0+TmFtZSguLikgZXJzZXR6dCB1bmQKKyAgICAgQENBUF9XRVIsIEBDQVBfV0VTU0VOLCBAQ0FQX1dFTSwgQENBUF9XRU4gZHVyY2ggY2FwaXRhbGl6ZShUUC1OYW1lKC4uKSkuCisKKyAgICAgTWl0dGVscyBkZXIgaW4gPG5wYy5oPiBkZWZpbmllcnRlbiBGcmFnZSBERUZBVUxUX0lORk8ga2FubiBlaW5lCisgICAgIE1lbGR1bmcgZ2VzZXR6dCB3ZXJkZW4sIGRpZSBnZWdlYmVuIHdlcmRlbiBzb2xsLCB3ZW5uIGRlciBTcGllbGVyCisgICAgIGV0d2FzIGZyYWd0LCBhdWYgZGFzIGtlaW5lIEFudHdvcnQgdm9yZ2VnZWJlbiBpc3QgKGRhcyBsb2VzdAorICAgICBTZXRQcm9wKFBfREVGQVVMVF9JTkZPLCA8dGV4dD4pIGFiKS4KKworQkVJU1BJRUxFOgorICAgICAjIyMgZWluZSBTdGFuZGFyZGFudHdvcnQgc2V0emVuICMjIworICAgICBBZGRJbmZvKERFRkFVTFRfSU5GTywgInN0YXJydCBEaXIgYm9lc2UgaW4gZGllIEF1Z2VuLlxuIik7CisgICAgIC8vIGlkZW50aXNjaCB6dQorICAgICBTZXRQcm9wKFBfREVGQVVMVF9JTkZPLCAic3RhcnJ0IERpciBib2VzZSBpbiBkaWUgQXVnZW4uXG4iKTsKKworICAgICAjIyMgZWluZmFjaGUgQmVpc3BpZWxlLCBhdWNoIG1pdCBjYXNlYmFzZWQgIyMjCisgICAgIEFkZEluZm8oKHsia25ldGUiLCJrb2hsZSJ9KSwKKwkgICAgICJzYWd0OiBpY2ggaGFiZSBzbyBldHdhcyBuaWNodC5cbiIpOworICAgICBBZGRJbmZvKCJnZWxkIiwKKwkgICAgICJJY2ggaGFiZSB6d2FyIGtlaW4gR2VsZCwgYWJlciAuLi4gYmxhYmxhYmxhIC4uLiIsCisJICAgICAic2FndDogIiApOworICAgICBBZGRJbmZvKCJtdWVuemVuIiwKKwkgICAgICJmbHVlc3RlcnQ6IER1IHdpbGxzdCBHZWxkP1xuIiwKKwkgICAgIDAsCisJICAgICAiZmx1ZXN0ZXJ0IEBXRU0gZXR3YXMgenUuXG4iKTsKKworICAgICAvLyAiZnJhZ2UgbW9uc3RlciBuYWNoIGdlbGQiOiBhbGxlIGltIFJhdW0gaG9lcmVuCisgICAgIC8vICBEYXMgTW9uc3RlciBzYWd0OiBJY2ggaGFiZSB6d2FyIGtlaW4gR2VsZCwgYWJlciAuLi4KKyAgICAgLy8gIERhcyBNb25zdGVyIHNhZ3Q6IC4uLiBibGFibGFibGEgLi4uCisKKyAgICAgLy8gImZyYWdlIG1vbnN0ZXIgbmFjaCBtdWVuemVuIjoKKyAgICAgLy8gLSBkZXIgRnJhZ2Vuc3RlbGxlciBob2VydDoKKyAgICAgLy8gICAiRGFzIE1vbnN0ZXIgZmx1ZXN0ZXJ0OiBEdSB3aWxsc3QgR2VsZD8iCisgICAgIC8vIC0gYWxsZSBhbmRlcmUgaG9lcmVuOgorICAgICAvLyAgICJEYXMgTW9uc3RlciBmbHVlc3RlcnQgPEZyYWdlbnN0ZWxsZXJuYW1lbj4gZXR3YXMgenUuIgorCisgICAgICMjIyBkeW5hbWlzY2ggIyMjCisgICAgIC8vIGVpbiBQcm90b3R5cCwgZGFtaXQgd2lyIGRpZSBNZXRob2RlIGJla2FubnQgbWFjaGVuCisgICAgIHN0YXRpYyBzdHJpbmcgcXVlcnlfa2Vrc2UoKTsKKyAgICAgLi4uCisgICAgIEFkZEluZm8oKHsia2VrcyIsImtla3NlIn0pLAorCSAgICAgIydxdWVyeV9rZWtzZSwJCS8vIGVpbiBWZXJ3ZWlzIGF1ZiBkaWUgRnVua3Rpb24KKwkgICAgICJzYWd0OiAiKTsKKyAgICAgLi4uCisgICAgIHN0YXRpYyBzdHJpbmcgcXVlcnlfa2Vrc2UoKSB7CisgICAgICBpZihwcmVzZW50KCJrZWtzIikpCisgICAgICAgcmV0dXJuKCJJY2ggaGFiIG5vY2ggd2VsY2hlLiBBZXRzY2ghIik7CisgICAgICByZXR1cm4oIk1lbm5vLiBLZWluZSBtZWhyIGRhISIpOworICAgICB9CisKKyAgICAgLy8gImZyYWdlIG1vbnN0ZXIgbmFjaCBrZWtzIjoKKyAgICAgLy8gLSB3ZW5uIGVzIG5vY2ggS2Vrc2UgaGF0LCBob2VyZW4gYWxsZToKKyAgICAgLy8gICAiRGFzIE1vbnN0ZXIgc2FndDogSWNoIGhhYiBub2NoIHdlbGNoZS4gQWV0c2NoIQorICAgICAvLyAtIHNvbnN0OgorICAgICAvLyAgICJEYXMgTW9uc3RlciBzYWd0OiAiTWVubm8uIEtlaW5lIG1laHIgZGEhCisKKyAgICAgIyMjIGR5bmFtaXNjaGVyICMjIworICAgICAvLyBlaW4gUHJvdG90eXAsIGRhbWl0IHdpciBkaWUgTWV0aG9kZSBiZWthbm50IG1hY2hlbgorICAgICBzdGF0aWMgc3RyaW5nIHF1ZXJ5X2tla3NlKCk7CisgICAgIHN0YXRpYyBtaXhlZCBjYXNlX2ZpZ2h0aW5nKCk7CisgICAgIC4uLgorICAgICBBZGRJbmZvKCh7Imtla3MiLCJrZWtzZSJ9KSwKKwkgICAgICMncXVlcnlfa2Vrc2UsIgkJLy8gZWluIFZlcndlaXMgYXVmIGRpZSBGdW5rdGlvbgorCSAgICAgc2FndDogIiwKKwkgICAgIDAsCQkJCS8vIG5pY2h0IHNpbGVudCA6KQorCSAgICAgIydjYXNlX2ZpZ2h0aW5nKTsJCS8vIG5vY2ggZWluIEZ1bmt0aW9uc3ZlcndlaXMKKyAgICAgLi4uCisgICAgIHN0YXRpYyBzdHJpbmcgcXVlcnlfa2Vrc2UoKSB7CisgICAgICBpZihwcmVzZW50KCJrZWtzIikpCisgICAgICAgcmV0dXJuKCJJY2ggaGFiIG5vY2ggd2VsY2hlLiBBZXRzY2ghIik7CisgICAgICByZXR1cm4oIk1lbm5vLiBLZWluZSBtZWhyIGRhISIpOworICAgICB9CisKKyAgICAgc3RhdGljIG1peGVkIGNhc2VfZmlnaHRpbmcoKSB7CisgICAgICBpZihJbkZpZ2h0KCkpCisgICAgICAgcmV0dXJuKCJLZWluZSBaZWl0IGZ1ZXIgS2Vrc2UuIE11c3Mga2FlbXBmZW4uIik7CisgICAgICByZXR1cm4gMDsKKyAgICAgfQorCisgICAgIC8vICJmcmFnZSBtb25zdGVyIG5hY2gga2VrcyI6CisgICAgIC8vIC0gd2VubiBlcyBrYWVtcGZ0LCBob2VyZW4gYWxsZToKKyAgICAgLy8gICAiRGFzIE1vbnN0ZXIgc2FndDogS2VpbmUgWmVpdCBmdWVyIEtla3NlLiBNdXNzIGthZW1wZmVuLgorICAgICAvLyAtIHNvbnN0LCB3ZW5uIGVzIG5vY2ggS2Vrc2UgaGF0LCBob2VyZW4gYWxsZToKKyAgICAgLy8gICAiRGFzIE1vbnN0ZXIgc2FndDogSWNoIGhhYiBub2NoIHdlbGNoZS4gQWV0c2NoIQorICAgICAvLyAtIHNvbnN0OgorICAgICAvLyAgICJEYXMgTW9uc3RlciBzYWd0OiAiTWVubm8uIEtlaW5lIG1laHIgZGEhCisKKworICAgICAjIyMgZHluYW1pc2NoIHVuZCBrb21wbGV4ICMjIworICAgICAvLyBlaW4gUHJvdG90eXAsIGRhbWl0IHdpciBkaWUgTWV0aG9kZSBiZWthbm50IG1hY2hlbgorICAgICBzdGF0aWMgc3RyaW5nIHF1ZXN0aW9uX2dvbGQoKTsKKyAgICAgLi4uCisKKyAgICAgLy8gImdvbGQiIHdpcmQgZWluZSBDbG9zdXJlIGF1ZiBkaWUgTWV0aG9kZSBxdWVzdGlvbl9nb2xkKCkKKyAgICAgLy8genVnZXdpZXNlbiwgYXVzc2VyZGVtIHNvbGwgZXMgc3RpbGwgYmxlaWJlbiAod2lyIGluZm9ybWllcmVuCisgICAgIC8vIGRlbiBSZXN0cmF1bSBzZWxic3QpCisgICAgIEFkZEluZm8oImdvbGQiLCMncXVlc3Rpb25fZ29sZCwibXVybWVsdDogIiwxKTsKKyAgICAgLi4uCisKKyAgICAgLy8gbG9zIGdlaHRzLCB3aXIgZ2VuZXJpZXJlbiB1bnNlcmUgQW50d29ydCBzZWxic3QKKyAgICAgc3RhdGljIHN0cmluZyBxdWVzdGlvbl9nb2xkKCkgeworICAgICAgaW50IG1vbmV5OworICAgICAgc3RyaW5nICp5LCBvYmpzdHI7CisgICAgICBvYmplY3QgbzsKKyAgICAgIC8vIHdpZXZpZWwgS29obGUgaGF0IGRlciBTcGllbGVyCisgICAgICBtb25leT10aGlzX3BsYXllcigpLT5RdWVyeU1vbmV5KCk7CisgICAgICB5PWFsbG9jYXRlKDApOworICAgICAgLy8gdW5kIGpldHp0IHN1Y2hlbiB3aXIgZGllIERpbmdlIGF1cyBHb2xkCisgICAgICBvPWZpcnN0X2ludmVudG9yeSh0aGlzX3BsYXllcigpKTsKKyAgICAgIHdoaWxlKG8pIHsKKyAgICAgICBpZihvLT5RdWVyeU1hdGVyaWFsKE1BVF9HT0xEKT4wICYmCisgICAgICAgICAgc3Ryc3RyKG9iamVjdF9uYW1lKG8pLCIvb2JqL21vbmV5IikpCisgICAgICAgIHkrPSh7by0+bmFtZShXRVIsMSl9KTsKKyAgICAgICBvPW5leHRfaW52ZW50b3J5KG8pOworICAgICAgfQorCisgICAgICAvLyBkYXMgZ2VodCBhbiBhbGxlIGFuZGVyZW4gaW0gUmF1bSwgc2lsZW50IGJpZXRldCBzaWNoIGhpZXIKKyAgICAgIC8vIG5pY2h0IGFuLCB3ZWlsIGVzIG1laHJlcmUgTW9lZ2xpY2hrZWl0ZW4gZ2lidAorICAgICAgc2F5KGJyZWFrX3N0cmluZygKKyAgICAgICBOYW1lKFdFUiwxKSsiIG11cm1lbHQgIisKKyAgICAgICB0aGlzX3BsYXllcigpLT5uYW1lKFdFTSwxKSsKKyAgICAgICAiIGV0d2FzIHp1IisKKyAgICAgICAoKG1vbmV5IHx8IHNpemVvZih5KSk/CisgICAgICAgICIgdW5kIGdsb3R6dCAiKworICAgICAgICB0aGlzX3BsYXllcigpLT5RdWVyeVByb25vdW4oV0VOKSsiIGdpZXJpZyBhbi4iOgorICAgICAgICAiLiIpLDc4KSwoe3RoaXNfcGxheWVyKCl9KSk7CisKKyAgICAgIC8vIHVuZCBoaWVyIGRpZSBBbnR3b3J0IGFuIGRlbiBTcGllbGVyIHNlbGJzdCwgbWl0IHZpZWxlbgorICAgICAgLy8gVmVyendlaWd1bmdlbiBmdWVyIGRlc3NlbiBCZXNpdHp0dW0KKyAgICAgIHJldHVybigiSWNoIGhhYiBrZWluIEdvbGQgYmVpIG1pci4iKworICAgICAgICAgICgobW9uZXkgfHwgc2l6ZW9mKHkpKT8KKyAgICAgICAgICAgIiBBYmVyIGR1ICIrCisgICAgICAgICAgIChtb25leT8iaGFzdCBqYSBqZWRlIE1lbmdlIEtvaGxlIGJlaSBkaXIsIHNvIGV0d2EgIittb25leSsKKyAgICAgICAgICAgICIgTXVlbnplbi4iKworICAgICAgICAgICAgKHNpemVvZih5KT8KKyAgICAgICAgICAgICAiIEF1c3NlcmRlbSAiKworICAgICAgICAgICAgICgoc2l6ZW9mKHkpPT0xKT8iaXN0Ijoic2luZCIpKworICAgICAgICAgICAgICIgYXVjaCBub2NoICIrQ291bnRVcCh5KSsiIGF1cyBHb2xkLiI6CisgICAgICAgICAgICAgIiIpOgorICAgICAgICAgICAgKHNpemVvZih5KT8iIEFiZXIgd2FzIGR1IHNvIGJlaSBkaXIgaGFzdDogIisKKyAgICAgICAgICAgICBDb3VudFVwKHkpKworICAgICAgICAgICAgIChzaXplb2YoeSk9PTE/IiBpc3QiOiIgc2luZCIpKworICAgICAgICAgICAgICIgYXVzIEdvbGQuIjoiIikpOgorICAgICAgICAgICAiIikpOworICAgICB9CisKKyAgICAgLy8gImZyYWdlIG1vbnN0ZXIgbmFjaCBnb2xkIgorICAgICAvLyAtIGRlciBGcmFnZXN0ZWxsZXIgaG9lcnQgekI6CisgICAgIC8vICAgRGFzIE1vbnN0ZXIgbXVybWVsdDogSWNoIGhhYiBrZWluIEdvbGQgYmVpIG1pci4gQWJlciBkdSBoYXN0IGphCisgICAgIC8vICAgRGFzIE1vbnN0ZXIgbXVybWVsdDogamVkZSBNZW5nZSBLb2hsZSBiZWkgZGlyLCBzbyBldHdhcyA8bnVtYmVyPgorICAgICAvLyAgIERhcyBNb25zdGVyIG11cm1lbHQ6IE11ZW56ZW4uIEF1c3NlcmRlbSBpc3Qvc2luZCBub2NoIDxvYmplY3QxPgorICAgICAvLyAgIERhcyBNb25zdGVyIG11cm1lbHQ6IHVuZCA8b2JqZWN0Mj4gYXVzIEdvbGQuIgorICAgICAvLyAtIGRpZSBVbXN0ZWhlbmRlbiBob2VyZW46CisgICAgIC8vICAgIkRhcyBNb25zdGVyIG11cm1lbHQgQFdFTSBldHdhcyB6dS4iCisgICAgIC8vICAgb2RlcgorICAgICAvLyAgICJEYXMgTW9uc3RlciBtdXJtZWx0IEBXRU0gZXR3YXMgenUgdW5kIGdsb3R6dCBpaG4vc2llIGdpZXJpZyBhbi4iCisKK1NJRUhFIEFVQ0g6CisgICAgIFZlcndhbmR0OiAgQWRkU3BlY2lhbEluZm8oTCksIFJlbW92ZUluZm8oTCkKKyAgICAgUHJvcHM6ICAgICBQX1BSRV9JTkZPLCBQX0RFRkFVTFRfSU5GTworICAgICBGaWxlczogICAgIC9zdGQvbnBjL2luZm8uYworICAgICBMb2dnZW46ICAgIFBfTE9HX0lORk8KKyAgICAgSW50ZXJuYTogICBHZXRJbmZvQXJyLCBkb19mcmFnZQorCis3LkFwciAyMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRJdGVtIGIvZG9jL2xmdW4vQWRkSXRlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTgxMmVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkSXRlbQpAQCAtMCwwICsxLDE1OSBAQAorQWRkSXRlbSgpCisKK0ZVTktUSU9OOgorCXZhcmFyZ3Mgb2JqZWN0IEFkZEl0ZW0obWl4ZWQgZmlsZW5hbWUsaW50IHJlZnJlc2gsbWl4ZWQgcHJvcHMpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9yb29tL2l0ZW1zLmMKKwkvc3RkL25wYy9pdGVtcy5jCisKK0FSR1VNRU5URToKKwlmaWxlbmFtZQorCSAgU3RyaW5nIG1pdCBkZW0gTmFtZW4gZGVzIHp1IGVyemV1Z2VuZGVuIE9iamVrdGVzIG9kZXIgQXJyYXkgdm9uCisJICBTdHJpbmdzIG1pdCBkZW4gTmFtZW4gZGVyIHp1IGVyemV1Z2VuZGVuIE9iamVrdGUuIEJlaSBlaW5lbSBBcnJheQorCSAgd2lyZCBlaW4gTmFtZSB6dWZhZWxsaWcgYXVzZ2V3YWVobHQuCisJcmVmcmVzaAorCSAgV2FubiB1bmQgd2llIHNvbGwgZGFzIE9iamVrdCBlcm5ldWVydCB3ZXJkZW46CisJICAtIFJFRlJFU0hfTk9ORSAgICAgIC0gS2VpbiBSZWZyZXNoIGJpcyB6dW0gTmV1bGFkZW4gZGVzIFJhdW1zCisgICAgICAgICAgICAgICAgICAgICAgICAtIG9kZXIgTlBDcy4KKwkgIC0gUkVGUkVTSF9ERVNUUlVDVCAgLSBSZWZyZXNoIGJlaSBSZXNldCwgd2VubiBJdGVtIHplcnN0b2VydAorCSAgICAgICAgICAgICAgICAgICAgICAgIHd1cmRlLgorCSAgLSBSRUZSRVNIX1JFTU9WRSAgICAtIFJlZnJlc2ggYmVpIFJlc2V0LCB3ZW5uIEl0ZW0gZW50ZmVybnQgd3VyZGUuCisJICAtIFJFRlJFU0hfQUxXQVlTICAgIC0gTmV1ZXIgQ2xvbmUgYmVpIGplZGVtIFJlc2V0LgorCSAgLSBSRUZSRVNIX01PVkVfSE9NRSAtIE9iamVrdCB3aXJkIGJlaSBSZXNldCBhdXRvbWF0aXNjaAorCSAgICAgICAgICAgICAgICAgICAgICAgIHp1cnVlY2tnZWhvbHQsIHdlbm4gZXMgd2VnYmV3ZWd0IHd1cmRlLgorCSAgICAgICAgICAgICAgICAgICAgICAgIChudXIgaW4gUmFldW1lbiEpCisJICBCZWkgTlBDJ3MgZ2lsdCB6dXNhZXR6bGljaDoKKwkgIC0gQ0xPTkVfV0VBUiAgICAgICAtIEl0ZW0gQW56aWVoZW4sIHdlbm4gZXMgZWluZSBSdWVzdHVuZyBpc3QuCisJICAtIENMT05FX1dJRUxEICAgICAgLSBJdGVtIHp1ZWNrZW4sIHdlbm4gZXMgZWluZSBXYWZmZSBpc3QuCisJICAtIENMT05FX05PX0NIRUNLICAgLSBadWVja2VuIG9kZXIgQW56aWVoZW4gb2huZSBVZWJlcnBydWVmdW5nZW4uCisJcHJvcHMgKG9wdGlvbmFsKQorCSAgTWFwcGluZyBtaXQgZGVuZW4gaW4gZWluZW0gZ2VjbG9udGVuIE9iamVrdCB6dSBzZXR6ZW5kZW4KKwkgIFByb3BlcnRpZXMgb2RlciAxIGZ1ZXIgZGllIEVyemV1Z3VuZyBlaW5lciBCbHVlcHJpbnQuCisKK1JVZUNLR0FCRVdFUlQ6CisJSW5uZXJoYWxiIHZvbiBSYWV1bWVuIHdpcmQgZGFzIGVyemV1Z3RlIE9iamVrdCB6dXJ1ZWNrZ2VsaWVmZXJ0LiBCZWkKKwlOUEMncyBrbGFwcHQgZGllcyBsZWlkZXIgbmljaHQsIGRhIGRvcnQgZGllIE9iamVrdGUgbmljaHQgc29mb3J0CisJZXJ6ZXVndCB3ZXJkZW4sIHNvbmRlcm4gZXJzdCwgbmFjaGRlbSBkZXIgTlBDIGFuIHNlaW5lbgorCUJlc3RpbW11bmdzb3J0IHRyYW5zZmVyaWVydCB3dXJkZS4gRGFoZXIgd2lyZCBiZWkgTlBDIGltbWVyIDAgCisJenVydWVja2dlZ2ViZW4uCisKK0JFU0NIUkVJQlVORzoKKwlBYmhhZW5naWcgdm9uIDxmaWxlbmFtZT4gdW5kIDxwcm9wcz4gd2lyZCBlaW4gT2JqZWt0IGVyemV1Z3QgdW5kIGluCisJZGVuIFJhdW0gYnp3LiBOUEMgYmV3ZWd0LiBEYWJlaSBnaWJ0IGVzIGZvbGdlbmRlIE1vZWdsaWNoa2VpdGVuOgorCS0gPGZpbGVuYW1lPiBpc3QgZWluIERhdGVpbmFtZS4KKwkgIEVzIHdpcmQgZWluIENsb25lIGRpZXNlciBEYXRlaSBlcnN0ZWxsdCBvZGVyICh3ZW5uIDxwcm9wcz49MSBpc3QpCisJICBkZXJlbiBCbHVlcHJpbnQgdmVyd2VuZGV0LgorCS0gPGZpbGVuYW1lPiBpc3QgZWluIEFycmF5IHZvbiBEYXRlaW5hbWVuLgorCSAgRXMgd2lyZCBlaW5lIERhdGVpIHp1ZmFlbGxpZyBhdXMgZGVtIEFycmF5IGF1c2dld2FlaGx0IHVuZCB2b24KKwkgIGRpZXNlciBEYXRlaSBlaW4gQ2xvbmUgZXJzdGVsbHQgb2RlciAod2VubiA8cHJvcHM+PTEgaXN0KSBkZXJlbgorCSAgQmx1ZXByaW50IHZlcndlbmRldC4KKwlVZWJlcmdpYnQgbWFuIGZ1ZXIgPHByb3BzPiBlaW4gTWFwcGluZyBtaXQgZGVtIEF1ZmJhdQorCSAgKFtwcm9wX25hbWU6cHJvcF93ZXJ0LC4uLl0pLAorCXNvIHdlcmRlbiBkaWVzZSBQcm9wZXJ0aWVzIGltIGVyemV1Z3RlbiBPYmpla3QgZ2VzZXR6dC4KKwlEZXIgUGFyYW1ldGVyIDxyZWZyZXNoPiBnaWJ0IGFuLCB3YXMgd2FlaHJlbmQgZWluZXMgUmVzZXRzIGltIFJhdW0KKwliencuIGluIE5QQydzIG9kZXIgd2FzIGJlaW0gRXJ6ZXVnZW4gdm9uIE5QQydzIGdlc2NoZWhlbiBzb2xsOgorCUluIDxyb29tcy5oPiBzaW5kIGRhenUgZm9sZ2VuZGUgTW9lZ2xpY2hrZWl0ZW4gZGVmaW5pZXJ0OgorCS0gUkVGUkVTSF9OT05FCisgICAgICAgICAgICBEYXMgT2JqZWt0IHdpcmQgbmllbWFscyBlcm5ldWVydDsgZmFsbHMgZXMgemVyc3RvZXJ0IHd1cmRlLCB3aXJkCisJICAgIGVzIGVyc3QgZGFubiB3aWVkZXIgZXJ6ZXVndCwgd2VubiBkZXIgUmF1bSBlcm5ldXQgZ2VsYWRlbiBiencuCisJICAgIGRlciBOUEMgbmV1IGVyemV1Z3Qgd2lyZC4gTWFuIGJlYWNodGUsIGRhc3MgbmljaHQgamVkZXIgTlBDCisJICAgIHdpcmtsaWNoIHJlZnJlc2hlbmRlIE9iamVrdGUgYmVub2V0aWd0LCBSRUZSRVNIX05PTkUgc3BhcnQKKwkgICAgaGllcmJlaSBzb3dvaGwgUmVjaGVuemVpdCBhbHMgYXVjaCBTcGVpY2hlciEKKwktIFJFRlJFU0hfREVTVFJVQ1QKKwkgICAgRGFzIE9iamVrdCB3aXJkIG51ciBkYW5uIGVybmV1ZXJ0LCB3ZW5uIGVzIGluIGRlciBad2lzY2hlbnplaXQKKwkgICAgemVyc3RvZXJ0IHd1cmRlIChiZWkgTlBDJ3MgaXN0IGRhcyB6dW0gQmVpc3BpZWwgZGVyIEZhbGwsIHdlbm4KKwkgICAgc2llIGdldG9ldGV0IHd1cmRlbikuCisJICAgIFJFRlJFU0hfTk9ORSAmIFJFRlJFU0hfREVTVFJVQ1QgKyBCbHVlcHJpbnQtT2JqZWt0IGJlZGV1dGV0IGJlaQorCSAgICBOUEMncyBlaW4gVW5pcXVlLU9iamVrdCwgZXMgd2lyZCBhbHNvIG5pY2h0IGJlaW0gTmV1ZXJ6ZXVnZW4gZGVzCisJICAgIE5QQydzIHp1cnVlY2tnZXNldHp0LgorCS0gUkVGUkVTSF9SRU1PVkUKKwkgICAgRGFzIE9iamVrdCB3aXJkIGVybmV1ZXJ0LCB3ZW5uIGVzIHNpY2ggbmljaHQgbWVociBpbSBSYXVtIGJ6dy4KKwkgICAgaW0gTlBDIGJlZmluZGV0LiBEYXMga2VpbiBzZWluLCB3ZWlsIGVzIHplcnN0b2VydCB3dXJkZSwgYWJlcgorCSAgICBhdWNoIHp1bSBCZWlzcGllbCBpbiBmb2xnZW5kZW4gRmFlbGxlbjoKKwkgICAgKiB3ZWlsIGVzIGplbWFuZCBtaXRnZW5vbW1lbiBoYXQKKwkgICAgICAgKGluIFJhZXVtZW4gYmVpIEdlZ2Vuc3RhZW5kZW4pCisJICAgICogd2VpbCBlcyBmb3J0Z2VnYW5nZW4gaXN0CisJICAgICAgIChpbiBSYWV1bWVuIGJlaSBOUEMncywgZGllIGhlcnVtbGF1ZmVuKQorCSAgICAqIHdlaWwgZXMgd2VnZ2V3b3JmZW4gd3VyZGUKKwkgICAgICAgKGluIE5QQydzIGJlaSBHZWdlbnN0YWVuZGVuKQorCS0gUkVGUkVTSF9BTFdBWVMKKwkgICAgRGFzIE9iamVrdCB3aXJkIGltbWVyIGVybmV1ZXJ0LiBWb24gZGllc2VyIFJlZnJlc2htZXRob2RlIHNvbGx0ZQorCSAgICBtYW4gYWxsZXJkaW5ncyBBYnN0YW5kIG5laG1lbiwgZGEgc2ljaCBzb25zdCBtaXQgZGVyIFplaXQKKwkgICAgZ2V3YWx0aWdlIE1lbmdlbiB2b24gT2JqZWt0ZW4gYW5zYW1tZWxuIGtvZW5uZW4hCisJLSBSRUZSRVNIX01PVkVfSE9NRQorCSAgICBEYXMgT2JqZWt0IHdpcmQgaW4gZWluZW4gUmF1bSB6dXJ1ZWNrYmV3ZWd0LCBzb2Zlcm4gZXMgbm9jaAorCSAgICBleGlzdGllcnQsIGplZG9jaCBuaWNodCBtZWhyIGluIGRlbSBSYXVtIGlzdC4gU2lubnZvbGwgaXN0IGRpZXMKKwkgICAgZWlnZW50bGljaCBudXIgZnVlciBMZWJld2VzZW4sIGZ1bmt0aW9uaWVydCBhYmVyIGF1Y2ggYmVpCisJICAgIGJlbGllYmlnZW4gT2JqZWt0ZW4uIEhhdXB0c2FlY2hsaWNoIGdlaHQgZXMgaGllcmJlaSBkYXJ1bSwKKwkgICAgaGVydW1sYXVmZW5kZSBOUENzIG9kZXIgYmVpIGVyend1bmdlbmVuIEJld2VndW5nZW4gbmljaHQgdm9uCisJICAgIFBfR1VBUkQgenVydWVja2dlaGFsdGVuZSBOUENzIHdpZWRlciBhbiBlaW5lbiBkZWZpbmllcnRlbgorCSAgICBBdXNnYW5nc29ydCB6dXJ1ZWNrenVicmluZ2VuLgorCUhhdCBtYW4gaW4gUmFldW1lbiBhbHMgPGZpbGVuYW1lPiBlaW4gQXJyYXkgdm9uIERhdGVpbmFtZW4KKwl1ZWJlcmdlYmVuLCBzbyB3aXJkIGJlaW0gUmVzZXQgamVkZXNtYWwgYXVmcyBOZXVlIGVpbiB6dWZhZWxsaWdlcworCU9iamVrdCBhdXMgZGVyIExpc3RlIGF1c2dld2FlaGx0IChuaWNodCBpbiBOUEMncykuCisJSW4gTlBDJ3MgZ2lsdCBkZXIgR3J1bmRzYXR6IGRlciBWZXJtZWlkdW5nIHZvbiB1ZWJlcmZsdWVzc2lnZW4KKwlPYmpla3RlbiBpbSBNVUQuIE5ldSBlcnpldWd0IHdlcmRlbiBPYmpla3RlIGJlaW0gRXJ6ZXVnZW4gZWluZXMKKwlOUEMncyBvZGVyIGJlaSBlaW5lbSBSZXNldCBpbSBzZWxiaWdlbi4gQW5zdGF0dCBkaWUgT2JqZWt0ZSBnbGVpY2gKKwluZXUgenUgZXJzY2hhZmZlbiwgd2lyZCBlcnN0IGdlc2NoYXV0LCBvYiBzaWNoIGlkZW50aXNjaGUgT2JqZWt0ZQorCXNjaG9uIGltIFJhdW0gYmVmaW5kZW4uIElzdCBkaWVzIGRlciBGYWxsLCBzbyBuaW1tdCBkZXIgTlBDIHNpZSBhdWYsCisJcnVmdCBqZWRvY2ggdm9yaGVyIG5vY2htYWxzIGNyZWF0ZSgpIGluIGlobmVuIGF1ZiEKKwkgIChub2V0aWcgd2VnZW4gbW9lZ2xpY2hlciBWZXJhZW5kZXJ1bmdlbiBhbiBkZW4gT2JqZWt0ZW4pCisJV2FzIGRhbm4gcGFzc2llcnQsIGhhZW5ndCB2b24gd2VpdGVyZW4gQW5nYWJlbiBpbiA8cmVmcmVzaD4gYWIuCisJRm9sZ2VuZGUgd2VpdGVyZSBNb2VnbGljaGtlaXRlbiBzaW5kIGluIDxucGMuaD4gZGVmaW5pZXJ0OgorICAgICAgICAtIENMT05FX1dFQVIKKwkgIElzdCBkYXMgaGluenVnZWZ1ZWd0ZSBJdGVtIGVpbmUgUnVlc3R1bmcsIHNvIHdpcmQgc2llIG5hY2gKKwkgIEF1Zm5haG1lIG9kZXIgTmV1ZXJ6ZXVndW5nIGFuZ2V6b2dlbi4KKyAgICAgICAgLSBDTE9ORV9XSUVMRAorCSAgSXN0IGRhcyBoaW56dWdlZnVlZ3RlIEl0ZW0gZWluZSBXYWZmZSwgc28gd2lyZCBzaWUgbmFjaCBBdWZuYWhtZQorCSAgb2RlciBOZXVlcnpldWd1bmcgZ2V6dWVja3QuCisgICAgICAgIC0gQ0xPTkVfTk9fQ0hFQ0sKKwkgIEhpZXJtaXQgdmVyaGluZGVydCBtYW4gZWluZSBVZWJlcnBydWVmdW5nLCBvYiBlaW5lIFJ1ZXN0dW5nCisJICBhbmdlem9nZW4gb2RlciBlaW5lIFdhZmZlIGdlenVlY2t0IHdlcmRlbiBrYW5uLiBFcyBpc3QgamVkb2NoCisJICBWb3JzaWNodCBnZWJvdGVuOiBTbyBrYW5uIGVzIG9obmUgd2VpdGVyZXMgcGFzc2llcmVuLCBkYXNzIGVpbiBOUEMKKwkgIG1laHJlcmUgUnVlc3R1bmdlbiBnbGVpY2hlbiBUeXBzIGFuZ2V6b2dlbiBvZGVyIG1laHJlcmUgV2FmZmVuCisJICBnZXp1ZWNrdCBoYXQuCisJQmVudXR6dCBtYW4gQmx1ZXByaW50cyAoPHByb3BzPj0xKSBtaXQgUkVGUkVTSF9SRU1PVkUgb2RlcgorCVJFRlJFU0hfQUxXQVlTLCBzbyBrYW5uIGVzIHp1IHVuZ2V3b2xsdGVuIFVlYmVycmFzY2h1bmdlbiBrb21tZW4sIGRhCisJZGllIEJsdWVwcmludCBkYW5uIHVuYWJoYWVuZ2lnIHZvbiBpaHJlbSBtb21lbnRhbmVuIEF1ZmVudGhhbHRzb3J0CisJd2llZGVyIGluIGRlbiBSYXVtIGJ6dy4gTlBDIGJld2VndCB3aXJkLCB2b24gZGVtIHNpZSBlcnpldWd0IHd1cmRlIQorCitCRU1FUktVTkdFTjoKKwlXZW5uIG1hbiBCbHVlcHJpbnRzIGJlbnV0enQsIHNvbGx0ZSBtYW4gZGFyYW4gZGVua2VuLCBkYXNzIHNpY2ggdm9uCisJZGllc2VyIGRhbm4ga2VpbmUgQ2xvbmVzIG1laHIgZXJzdGVsbGVuIGxhc3NlbiEKKwlSZW1vdmVJdGVtKCkgenVtIEVudGZlcm5lbiB2b24gSXRlbXMgaXN0IG51ciBmdWVyIFJhZXVtZSBkZWZpbmllcnQhCisKKwlEaWUgT3B0aW9uIENMT05FX05FVyBpc3QgdmVyYWx0ZXQuIERpZSBPYmpla3RlIHdlcmRlbiBudW4gaW1tZXIKKwluZXUgZXJ6ZXVndC4gRGllIE9wdGlvbiBkYXJmIG5vY2ggYW5nZWdlYmVuIHdlcmRlbiwgaGF0IGFiZXIga2VpbmUKKwlCZWRldXR1bmcgbWVoci4KKworQkVJU1BJRUxFOgorCS8vIEVpbiBXdWVyZmVsLCBkZXIgc2ljaCBuYWNoIEVudGZlcm5lbiBlcm5ldWVydDoKKwkgIEFkZEl0ZW0oIi9vYmovbWlzYy93dWVyZmVsIixSRUZSRVNIX1JFTU9WRSk7CisJLy8gRWluIGV0d2FzIHZlcmFlbmRlcnRlciBXdWVyZmVsOgorCSAgQWRkSXRlbSgiL29iai9taXNjL3d1ZXJmZWwiLAorCSAgICAgICAgICBSRUZSRVNIX1JFTU9WRSwKKwkgICAgICAgICAgKFtQX1NIT1JUIDoiRWluIHNjaHdlcmVyIFd1ZXJmZWwiLAorCSAgICAgICAgICAgIFBfV0VJR0hUOjEwMF0pKTsKKwkvLyBFaW5lIEJsdWVwcmludCwgZGllIG51ciBlaW5tYWwgaW0gTVVEIGV4aXN0aWVydC4gV2VubiBzaWUKKwkvLyB6ZXJzdG9lcnQgd3VyZGUsIHdpcmQgc2llIGJlaSBSZXNldCBuZXUgZXJ6ZXVndDoKKwkgIEFkZEl0ZW0oIi9tb24vYW5nc3RoYXNlIixSRUZSRVNIX0RFU1RSVUNULDEpOworCS8vIEVpbmUgQmx1ZXByaW50LCBkaWUgbnVyIGVpbm1hbCBpbSBNVUQgZXhpc3RpZXJ0LiBXZW5uIHNpZSBhdXMgZGVtCisJLy8gUmF1bSBlbnRmZXJudCB3dXJkZSwgd2lyZCBzaWUgYmVpIFJlc2V0IHp1cnVlY2tnZWhvbHQ6CisJICBBZGRJdGVtKCIvbW9uL2FuZ3N0aGFzZSIsUkVGUkVTSF9NT1ZFX0hPTUUsMSk7CisJLy8gRWluIHp1ZmFlbGxpZ2VzIE9iamVrdDoKKwkgIEFkZEl0ZW0oKHsiL29iai9taXNjL2xvbGxpIiwKKwkgICAgICAgICAgICAiL29iai9taXNjL2JvbmJvbiIsCisJICAgICAgICAgICAgIi9vYmovbWlzYy9iaWVyIn0pLFJFRlJFU0hfUkVNT1ZFKTsKKwkvLyBFaW5lIFJ1ZXN0dW5nLCBkaWUgYXVjaCBhbmdlem9nZW4gd2lyZCAobnVyIGluIE5QQydzKToKKwkgIEFkZEl0ZW0oIi9ydWVzdHVuZy9zb21tZXJrbGVpZCIsUkVGUkVTSF9SRU1PVkV8Q0xPTkVfV0VBUik7CisJLy8gRWluZSBVbmlxdWUtV2FmZmUsIGRpZSBhdWNoIGdlenVlY2t0IHdpcmQgKG51ciBpbiBOUEMncyk6CisJICBBZGRJdGVtKCIvd2FmZmUvemFwcGVyIixSRUZSRVNIX0RFU1RSVUNUfENMT05FX1dJRUxELDEpOworCitTSUVIRSBBVUNIOgorCVJlbW92ZUl0ZW0oKSwgcmVwbGFjZV9wcm9ncmFtKCksIGNyZWF0ZSgpLCBQX0dVQVJELAorCS9zdGQvcm9vbS9pdGVtcy5jLCAvc3RkL25wYy9pdGVtcy5jLAorCS9zeXMvcm9vbXMuaCwgL3N5cy9ucGMuaAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBUaHUgTm92IDIzIDEzOjQzOjMwIENFVCAyMDA2IGJ5IFJ1bWF0YQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkS25vd25Qb3Rpb24gYi9kb2MvbGZ1bi9BZGRLbm93blBvdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDRkMjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkS25vd25Qb3Rpb24KQEAgLTAsMCArMSwyNSBAQAorQWRkS25vd25Qb3Rpb24oKQorCitGVU5LVElPTjoKKyAgICAgaW50IEFkZEtub3duUG90aW9uKGludCBucikKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9wb3Rpb24uYworCitBUkdVTUVOVEU6CisgICAgIGludCBuciAgICAgICBOdW1tZXIgZWluZXMgWlRzCisKK0JFU0NIUkVJQlVORzoKKyAgICAgQWRkaWVydCBlaW5lbiBaVCBhbHMgYmVrYW5udCBpbiBlaW5lbSBTcGllbGVyLiBOdXIgdm9tIE9yYWtlbCBydWZiYXIuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDEgIEVyZm9sZworICAgICAtMSBmZWhsZW5kZSBCZXJlY2h0aWd1bmcKKyAgICAgLTIgTnVtbWVyIGJlcmVpdHMgZWluZ2V0cmFnZW4KKworU0lFSEUgQVVDSDoKKyAgICAgU29uc3RpZ2VzOiB6YXViZXJ0cmFlbmtlLCAvc2VjdXJlL3BvdGlvbm1hc3Rlci5jLCAvcm9vbS9vcmFrZWwuYworICAgICBWZXJ3YW5kdDogIEZpbmRQb3Rpb24oKSwgUmVtb3ZlS25vd25Qb3Rpb24oKSwgSW5MaXN0KCkKKyAgICAgUHJvcHM6ICAgICBQX1BPVElPTlJPT01TLCBQX0tOT1dOX1BPVElPTlJPT01TCisKKzYuRmViIDIwMTYgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZE1hdGVyaWFsIGIvZG9jL2xmdW4vQWRkTWF0ZXJpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmNTBiNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZE1hdGVyaWFsCkBAIC0wLDAgKzEsNzYgQEAKK0FkZE1hdGVyaWFsKCkKK0ZVTktUSU9OOgorICAgICBwcml2YXRlIHN0YXRpYyB2YXJhcmdzIHZvaWQgQWRkTWF0ZXJpYWwoc3RyaW5nIG1hdCwgaW50IGdlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1peGVkIG5hbWVzLCBtaXhlZCBncm91cHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhlZCBkaWYpIHsKKworREVGSU5JRVJUIElOOgorICAgICAvcC9kYWVtb24vbWF0ZXJpYWxkYi5jIChNQVRFUklBTERCKQorCitBUkdVTUVOVEU6CisgICAgIHN0cmluZyBtYXQKKyAgICAgICBNYXRlcmlhbHN0cmluZywgZGVmaW5pZXJ0IGluIDx0aGluZy9tYXRlcmlhbC5oPgorCisgICAgIGludCBnZW5kZXIKKyAgICAgICBHZXNjaGxlY2h0IGRlcyBlaW56dXRyYWdlbmRlbiBNYXRlcmlhbHMKKworICAgICBtaXhlZCBuYW1lcworICAgICAgIE5hbWUgZGVzIE1hdGVyaWFsczoKKyAgICAgICAtICI8Tm9taW5hdGl2PiIgb2RlciAobWVpc3QgbnVyIE5vbS4gdW5kIEdlbi4gbm9ldGlnKQorICAgICAgIC0gKHsiPE5vbWluYXRpdj4iLCI8R2VuaXRpdj4iLCI8RGF0aXY+IiwiPEFra3VzYXRpdj4ifSkKKworICAgICBtaXhlZCBncm91cHMKKyAgICAgICBFaW5ncnVwcGllcnVuZyBkZXMgTWF0ZXJpYWxzOgorICAgICAgIC0gTUFUR1JPVVBfWFhYIG9kZXIgKHtNQVRHUk9VUF9YWFgsLi4ufSkKKyAgICAgICAtIChbTUFUX0dST1VQX1hYWDp4eCxNQVRHUk9VUF9ZWVk6eXksLi4uXSkKKworICAgICBtaXhlZCBkaWYKKyAgICAgICBTY2h3aWVyaWdrZWl0ZW4gYmVpIGRlciBFcmtlbm5iYXJrZWl0OgorICAgICAgIC0gaW50IHggb2RlciAoe01JTk1BVCx4MSxNQVRQT1MxLHgyLE1BVFBPUzIgLi4ufSkKKyAgICAgICAtIHhuOiBFcmtlbm5iYXJrZWl0c3NjaHdpZXJpZ2tlaXQgKDEwMD0xMDAlKSAtMTAwLi4xMDAKKyAgICAgICAtIE1JTk1BVDogRXJrZW5udW5nIHp1bWluZGVzdCBhbHMgX2RpZXNlc18gTWF0ZXJpYWwKKyAgICAgICAgICAgICAgICAgbW9lZ2xpY2gKKyAgICAgICAtIE1BVFBPU246IG1vZWdsaWNoZXMgTWF0ZXJpYWwsIGVya2VubmJhciwgd2VubgorICAgICAgICAgICAgICAgICAgRXJrZW5uYmFya2VpdGZhZWhpZ2tlaXQ+PXhuCisgICAgICAgICAgICAgICAgICAtPiBkYXMgbGV0enRlIE1BVFBPUyBtdXNzIG5hdHVlcmxpY2gKKyAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBtYXQgZW50c3ByZWNoZW4KKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3aXJkIGluIGRpZSBNYXRlcmlhbGllbmRhdGVuYmFuayBlaW5lIG5ldWVzIE1hdGVyaWFsIGF1Zmdlbm9tbWVuLAorICAgICBkaWUgU3RyaW5na29uc3RhbnRlIGRhZnVlciB3aXJkIHZvcmhlciBpbiA8dGhpbmcvbWF0ZXJpYWwuaD4gZmVzdC0KKyAgICAgZ2VsZWd0LiBGYWxscyBkZXIgR2VuaXRpdiBuaWNodCBOb21pbmF0aXYrInMiIGVudHNwcmljaHQgKHouQi4gIlNlaWRlIiksCisgICAgIHNvbGx0ZSBkaWVzZXIgZXhwbGl6aXQgYW5nZWdlYmVuIHdlcmRlbi4KKyAgICAgTmFjaCBOZXVsYWRlbiBkZXIgRGF0ZW5iYW5rIGlzdCBkaWVzZXMgTWF0ZXJpYWwgYXVjaCBwZXIgTWF0ZXJpYWxOYW1lKCksCisgICAgICdlcmtlbm5iYXInIChzaWVoZSBtaXhlZCBkaWYsIHNpZWhlIEJlaXNwaWVsKSBiencuIHNlaW5lbiBlaW56ZWxuZW4KKyAgICAgR3J1cHBlbiB6dW9yZG5iYXIuCisKK0JFSVNQSUVMRToKKyAgICAgQWRkTWF0ZXJpYWwoTUFUX05JVFJPR0xZQ0VSSU5FLE5FVVRFUiwiTml0cm9nbHljZXJpbiIsCisgICAgICAgICAgICAgICAgICh7TUFUR1JPVVBfRVhQTE9TSVZFLE1BVEdST1VQX0ZMVUlEfSksCisgICAgICAgICAgICAgICAgICh7TUFUX09JTCwyNSxNQVRfTUlTQ19FWFBMT1NJVkUsNTAsTUFUX05JVFJPR0xZQ0VSSU5FfSkpOworCisgICAgIERhbWl0IHdpcmQgZGFzIE1hdGVyaWFsIE55dHJvZ2x5Y2VyaW4gYXVmZ2Vub21tZW4sIGVpbiBleHBsb3NpdmVyCisgICAgIChkYW1pdCBlbnRmbGFtbWJhcmVyKSBzb3dpZSBmbHVlc3NpZ2VyIFN0b2ZmLiBMaWVndCBkaWUgRXJrZW5udW5ncy0KKyAgICAgZmFlaGlna2VpdCAoTWF0ZXJpYWxOYW1lKCkpIHVudGVyIDI1LCB3aXJkIGVzIG51ciBhbHMgT2VsIGVya2FubnQsCisgICAgIGxpZWd0IHNpZSB1bnRlciA1MCwgd2lyZCBlcyB6dW1pbmRlc3QgYWxzIGV4cGxvc2l2ZXMgTWF0ZXJpYWwgZXJrYW5udCwKKyAgICAgbGllZ3Qgc2llIHVlYmVyIDQ5LCBzbyB3aXJkIGVzIGtvcnJla3QgZXJrYW5udCAod2llIHNjaGFkZSA6KSApLgorCitCRU1FUktVTkdFTjoKKyAgICAgV2lyZCBpbiBkZXIgY3JlYXRlKCkgZGVyIERhdGVuYmFuayBhdWZnZXJ1ZmVuLiBadSBiZWFjaHRlbjoKKyAgICAgLSB2b3IgRWludHJhZyBlaW5lcyBfbmV1ZW5fIE1hdGVyaWFscyBkaWUgRGF0ZW5iYW5rIGR1cmNoc3VjaGVuIQorICAgICAtIGJlaSBkZW4gTWF0ZXJpYWxpZW5ncnVwcGVuIGRpZSBhdXRvbWF0aXNjaGVuIEFiaGFlbmdpZ2tlaXRlbiBpbgorICAgICAgIEFkZE1hdGVyaWFsKCkgZHVyY2hzZWhlbiEKKyAgICAgLSBiaXR0ZSBEYXRlbmJhbmsgbmV1IGxhZGVuCisKK1NJRUhFIEFVQ0g6CisgICAgIEtvbnplcHRlOgkgIG1hdGVyaWFsLCBtYXRlcmlhbGVya2VubnVuZworICAgICBHcnVuZGxlZ2VuZDogUF9NQVRFUklBTCwgL3N5cy90aGluZy9tYXRlcmlhbC5oCisgICAgIE1ldGhvZGVuOiAgICBRdWVyeU1hdGVyaWFsKCksIFF1ZXJ5TWF0ZXJpYWxHcm91cCgpLCBNYXRlcmlhbExpc3QoKSwKKyAgICAgTGlzdGVuOgkgIEFsbE1hdGVyaWFscygpLCBBbGxHcm91cHMoKSwgRHVtcCgpCisJCSAgbWF0ZXJpYWxsaXN0ZSwgbWF0ZXJpYWxncnVwcGVuCisgICAgIE1hc3RlcjoJICBDb252TWF0ZXJpYWxMaXN0KCksIE1hdGVyaWFsR3JvdXAoKSwKKwkJICBHcm91cE5hbWUoKSwgTWF0ZXJpYWxOYW1lKCksCisJCSAgR2V0R3JvdXBNZW1iZXJzKCksIEdldE1hdE1lbWJlcnNoaXAoKQorICAgICBTb25zdGlnZXM6CSAgUF9NQVRFUklBTF9LTk9XTEVER0UKKworNy4gTWFpIDIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRNaW5pUXVlc3QgYi9kb2MvbGZ1bi9BZGRNaW5pUXVlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlNzg1NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZE1pbmlRdWVzdApAQCAtMCwwICsxLDU0IEBACitBZGRNaW5pUXVlc3QoKQorCitGVU5LVElPTjoKKyAgICBpbnQgQWRkTWluaVF1ZXN0KGludCBzdHVwc2UsIHN0cmluZyBxdWVzdGdlYmVyLCBzdHJpbmcgZGVzYywgaW50IGFjdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmluZyB0aXRlbCwgc3RyaW5nIGVybGVkaWd0LCBtYXBwaW5nIHZvcmF1c3NldHp1bmdlbiwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmluZyByZWdpb24sIHN0cmluZyAqZXJsYXVidGUpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc2VjdXJlL3F1ZXN0bWFzdGVyCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiB0cmFlZ3QgZWluZSBuZXVlIE1pbmlxdWVzdCBpbSBRdWVzdG1hc3RlciBlaW4uCisKK0FSR1VNRU5URToKKworICAgIHN0dXBzZSAoPjApICAtIEFuemFobCBTdHVmZW5wdW5rdGUsIGRpZSBmdWVyIGRpZSBNUSBndXRnZXNjaHJpZWJlbiB3ZXJkZW4KKyAgICBxdWVzdGdlYmVyICAgLSBMYWRlbmFtZSBkZXMgT2JqZWt0cywgZGFzIEdpdmVNaW5pUXVlc3QoKSBhdWZydWZ0CisgICAgZGVzYyAgICAgICAgIC0gQXVmZ2FiZW5iZXNjaHJlaWJ1bmcgZGVyIE1pbmlxdWVzdAorICAgIGFjdGl2ZSAoMC8xKSAtIGlzdCBkaWUgTWluaXF1ZXN0IGFrdGl2LCBkLmguIHNwaWVsYmFyLCBvZGVyIG5pY2h0PworICAgIHRpdGVsICAgICAgICAtIFRpdGVsIGRlciBNaW5pcXVlc3QsIGRhcmYgd2VkZXIgImluIiwgbm9jaCAiaW0iIGVudGhhbHRlbiwKKyAgICAgICAgICAgICAgICAgICB3ZWlsIGRhbm4gZGVyIEVpbnRyYWcgaW4gZGVyIEZyYXRlcm5pdGFzLUJpYmxpb3RoZWsgbmljaHQKKyAgICAgICAgICAgICAgICAgICBnZWxlc2VuIHdlcmRlbiBrYW5uLgorICAgIGVybGVkaWd0ICAgICAtIEJlc2NocmVpYnVuZyBkZXIgTWluaXF1ZXN0LCBuYWNoZGVtIG1hbiBzaWUgZXJsZWRpZ3QgaGF0CisgICAgICAgICAgICAgICAgICAgRGVyIFRleHQga2FubiBpbiBkZXIgQmlibGlvdGhlayBkZXIga2xlaW5lbiB1bmQgZ3Jvc3NlbgorICAgICAgICAgICAgICAgICAgIEhlbGRlbnRhdGVuIGluIGRlciBGcmF0ZXJuaXRhcyBlaW5nZXNlaGVuIHdlcmRlbi4KKyAgICB2b3JhdXNzZXR6dW5nZW4gLSBNYXBwaW5nIGltIEZvcm1hdCB2b24gUF9SRVNUUklDVElPTlMgKHMuIGRvcnQpLCB1bQorICAgICAgICAgICAgICAgICAgIGRpZSBWb3JhdXNzZXR6dW5nZW4gZmVzdHp1bGVnZW4sIGRpZSBlaW4gU3BpZWxlciAKKyAgICAgICAgICAgICAgICAgICBlcmZ1ZWxsZW4gbXVzcywgdW0gZGllIE1RIHVlYmVyaGF1cHQgc3BpZWxlbiB6dSBrb2VubmVuCisgICAgICAgICAgICAgICAgICAgV2lyZCBmdWVyIGRpZSByZWdpb25zYmV6b2dlbmVuIEluZm9ybWF0aW9uc3B1bmt0ZS8tTlBDcworICAgICAgICAgICAgICAgICAgIGF1c2dld2VydGV0LiAwIG9kZXIgKFtdKSBlaW50cmFnZW4sIHdlbm4ga2VpbmUgCisgICAgICAgICAgICAgICAgICAgVm9yYXVzc2V0enVuZ2VuIGJlc3RlaGVuLgorICAgIHJlZ2lvbiAgICAgICAtIFp1b3JkbnVuZyBkZXIgTWluaXF1ZXN0IHp1IGVpbmVyIFJlZ2lvbjsgd2lyZCBmdWVyIGRlcgorICAgICAgICAgICAgICAgICAgIEJpYmxpb3RoZWsgZGVyIEZyYXRlcm5pdGFzIHZlcndlbmRldCwgdW0gZGllIE1RcyBkZXIKKyAgICAgICAgICAgICAgICAgICBlaW56ZWxuZW4gUmVnaW9uZW4gaGVyYXVzenVmaWx0ZXJuLgorICAgIGVybGF1YnRlICAgICAtIEFycmF5IG1pdCBMYWRlbmFtZW4gdm9uIE9iamVrdGVuLCBkaWUgYmVyZWNodGlndCBzaW5kLAorICAgICAgICAgICAgICAgICAgIGRpZSBEYXRlbiBkZXIgTVEgYWJ6dWZyYWdlbiwgdW0gU3BpZWxlcm4gZWluZW4gSGlud2VpcworICAgICAgICAgICAgICAgICAgIGRhcmF1ZiB6dSBnZWJlbiwgZGllIHNpZSBub2NoIG5pY2h0IGJlc3RhbmRlbiBoYWJlbi4KKworUlVFQ0tHQUJFV0VSVEU6CisgICAgIDE6IEhhdCBnZWtsYXBwdAorICAgIC0xOiBQYXJhbWV0ZXJmb3JtYXQgc3RpbW10IG5pY2h0IChxdWVzdGdlYmVyIGtlaW4gU3RyaW5nIG9kZXIgTGVlcnN0cmluZywKKyAgICAgICAgdm9yYXVzc2V0enVuZ2VuIGtlaW4gTWFwcGluZywgcmVnaW9uIG9kZXIgdGl0ZWwga2VpbmUgU3RyaW5ncywgCisgICAgICAgIGVybGF1YnRlIGtlaW4gQXJyYXkpCisgICAgLTI6IHdlbmlnZXIgYWxzIDEgU3R1ZmVucHVua3QgZWluenV0cmFnZW4gdmVyc3VjaHQKKyAgICAtMzogRGFzIEFycmF5IGluICJlcmxhdWJ0ZSIgaXN0IGxlZXIsIG9kZXIgenVtIGFuZ2VnZWJlbmVuIFF1ZXN0Z2ViZXIKKyAgICAgICAgd3VyZGUga2VpbmUgRGF0ZWkgZ2VmdW5kZW4uCisgICAgLTQ6IERlciBhbmdlZ2ViZW5lIFF1ZXN0Z2ViZXIgdmVyZ2lidCBzY2hvbiBlaW5lIGFuZGVyZSBNaW5pcXVlc3QKKworCitTSUVIRSBBVUNIOgorICAgIEdpdmVNaW5pUXVlc3QoTCksIEhhc01pbmlRdWVzdChMKQorICAgIFBfUkVTVFJJQ1RJT05TCisgICAgL3NlY3VyZS9xdWVzdG1hc3Rlci5jCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZE1vbmV5IGIvZG9jL2xmdW4vQWRkTW9uZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5ZDFjYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZE1vbmV5CkBAIC0wLDAgKzEsNjIgQEAKK0FkZE1vbmV5KEwpCitGVU5LVElPTjoKKyAgICAgcHVibGljIGludCBBZGRNb25leShpbnQgYW1vdW50KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2NvbnRhaW5lci9tb25leWhhbmRsZXIuYworICAgICAvc3RkL2xpdmluZy9tb25leWhhbmRsZXIuYworICAgICAvc3RkL3BsYXllci9tb25leWhhbmRsZXIuYworCitBUkdVTUVOVEU6CisgICAgIGludCBhbW91bnQKKyAgICAgICAgIERpZSB6dWZ1ZWhyZW5kZSBvZGVyIGFiemllaGVuZGUgR2VsZG1lbmdlCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGVtIFNwaWVsZXIgd2lyZCBkaWUgaW4gPGFtb3VudD4gZmVzdGdlbGVndGUgR2VsZG1lbmdlIGFiZ2V6b2dlbiBvZGVyCisgICAgIHp1Z2VmdWVocnQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIFRlY2huaXNjaCBnZXNlaGVuIHdpcmQgR2VsZCBtaXQgZW50c3ByZWNoZW5kZW0gPGFtb3VudD4gZXJ6ZXVndAorICAgICAoIi9pdGVtcy9tb25leS5jIikgdW5kIG1pdHRlbHMgIm1vdmUiIGluIGRlbiBTcGllbGVyIGJld2VndC4gIERhcyBFcmdlYm5pcworICAgICBkaWVzZXMgIm1vdmUiLUF1ZnJ1ZmVzIHdpcmQgaGllciB1ZWJlcmdlYmVuLCB6LkIuIDEgZnVlciBPSy4KKyAgICAgRGllIG1vZWdsaWNoZW4gRmVobGVyLUtvbnN0YW50ZW4gc2luZCBpbiAvc3lzL21vdmluZy5oIGRlZmluaWVydCwgc2llaGUKKyAgICAgYXVjaCBEb2t1bWVudGF0aW9uIHp1ICJtb3ZlIi4KKworQkVNRVJLVU5HRU46CisgICAgIDxhbW91bnQ+IGthbm4gc293b2hsIHBvc2l0aXYgYWxzIGF1Y2ggbmVnYXRpdiBzZWluLiBXZWxjaGUgQXVzd2lya3VuZ2VuCisgICAgIGJlaWRlIEZhZWxsZSBoYWJlbiwgc29sbHRlIGtsYXIgc2Vpbi4gRG9jaCBzb2xsdGUgYmVpIGVpbmVtIG5lZ2F0aXZlbgorICAgICA8YW1vdW50PiB2b3JoZXIgbWl0dGVscyBRdWVyeU1vbmV5KCkgYWJnZWZyYWd0IHdlcmRlbiwgb2IgZGVyIFNwaWVsZXIKKyAgICAgYXVjaCB1ZWJlciBhdXNyZWljaGVuZCBHZWxkIHZlcmZ1ZWd0LgorICAgICBXaXJkIGRlbSBTcGllbGVyIEdlbGQgYWJnZXpvZ2VuLCBpc3QgZGFyYXVmIHp1IGFjaHRlbiwgZGllc2VzIGluIGRlcgorICAgICBaZW50cmFsYmFuayBlaW56dXphaGxlbiAocy5hLjpQYXlJbigpICkuIAorICAgICBWZXJzY2hhZmZ0IG1hbiBkZW0gU3BpZWxlciBHZWxkIGF1cyBkZW0gTmljaHRzLCBtdXNzIGVzIHZvcmhlciBiZWkgZGVyCisgICAgIFplbnRyYWxiYW5rIGFiZ2VidWNodCAoV2l0aERyYXcoKSkgd2VyZGVuLgorCisgICAgIEFjaHR1bmc6IEthbm4gZGVyIFNwaWVsZXIgZGllIGluIDxhbW91bnQ+IGFuZ2ViZW5lIEdlbGRtZW5nZSBuaWNodAorCSAgICAgIHRyYWdlbiwgd2VyZGVuIGlobSBrZWluZSBNdWVuemVuIGluIHNlaW4gSW52ZW50YXIgYmV3ZWd0LiAgRGllCisJICAgICAgRmVobGVybWVsZHVuZyBlcmtlbm50IG1hbiBhbiBkZW0gUnVlY2tnYWJld2VydCBNRV9UT09fSEVBVlkuCisKKyAgICAgSW0gR2VnZW5zYXR6IHp1IFNwaWVsZXJuIGhhYmVuIGFsbGUgYW5kZXJlbiBPYmpla3RlIChSYWV1bWUsIE5QQywgZXRjLikKKyAgICAgc3RhbmRhcmRtYWVzc2lnIGtlaW5lbiBNb25leWhhbmRsZXIuIEluIGRpZXNlbSBGYWxsIG11c3MgaW4gTGViZXdlc2VuCisgICAgICIvc3RkL2xpdmluZy9tb25leWhhbmRsZXIiCisgICAgIHVuZCBpbiBuaWNodC1MZWJld2VzZW4KKyAgICAgIi9zdGQvY29udGFpbmVyL21vbmV5aGFuZGxlciIKKyAgICAgZ2VlcmJ0IHdlcmRlbi4KKworQkVJU1BJRUxFOgorICAgICAvLyBnaWIgaWhtIEdlbGQKKyAgICAgdGhpc19wbGF5ZXIoKS0+QWRkTW9uZXkoNTApOworCisgICAgIC8vIG5pbW0gaWhtIEdlbGQKKyAgICAgaWYodGhpc19wbGF5ZXIoKS0+QWRkTW9uZXkoLTUwKT09MSkKKyAgICAgIHdyaXRlKCJEZXIgT3JrIGJla2xhdXQgZGljaCFcbiIpOworCitTSUVIRSBBVUNIOgorICAgICBHZWxkaGFuZGxpbmc6CVF1ZXJ5TW9uZXkoTCkKKyAgICAgWmVudHJhbGJhbms6CVBheUluKEwpLCBXaXRoRHJhdyhMKQorICAgICBTb25zdGlnZXM6CQltb3ZlKEwpLAorCQkJL2l0ZW1zL21vbmV5LmMsIC9zeXMvbW92aW5nLmgsIC9zeXMvbW9uZXkuaCwgL3N5cy9iYW5rLmgKKwkJCS9zdGQvY29udGFpbmVyL21vbmV5aGFuZGxlci5jCisKKzE4LjAyLjIwMTMsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkTXNnIGIvZG9jL2xmdW4vQWRkTXNnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NGM5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRNc2cKQEAgLTAsMCArMSw0MiBAQAorQWRkTXNnKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgQWRkTXNnKHN0cmluZyBtc2csIGludCBuZXh0KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RyYW5zcG9ydC5jCisKK0FSR1VNRU5URToKKyAgICAgbXNnCisgICAgICAgICAgRGllIGF1c3p1Z2ViZW5kZSBNZWxkdW5nLgorICAgICBuZXh0CisgICAgICAgICAgWmVpdCBiaXMgenVyIG5hZWNoc3RlbiBGYWhycGxhbnN0YXRpb24uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGVtIEZhaHJwbGFuIHdpcmQgZGllIEF1c2dhYmUgZWluZXIgTWVsZHVuZyBhbiBkZW4gVHJhbnNwb3J0ZXIKKyAgICAgaGluenVnZWZ1ZWd0LiBEaWVzZSBNZWxkdW5nIGtvZW5udGUgenVtIEJlaXNwaWVsIGRhcyBOYWhlbiBkZXIKKyAgICAgbmFlY2hzdGVuIEhhbHRlc3RlbGxlIGFua3VlbmRpZ2VuIG8uYWUuIE5hY2ggQXVzZ2FiZSBkZXIgTWVsZHVuZworICAgICB2ZXJnZWhlbiBuZXh0IFNla3VuZGVuLCBiaXMgZGllIG5hZWNoc3RlIFN0YXRpb24gYW5nZWZhaHJlbiB3aXJkLgorCisgICAgIFVtIGRhcyBVbWJyZWNoZW4gZGVyIE1lbGR1bmcgKG5vcm1hbGVyd2Vpc2UgYXVmIDc4IFplaWNoZW4gcHJvIFplaWxlKQorICAgICBtdXNzIHNpY2ggZGVyIEF1ZnJ1ZmVyIHNlbGJlciBrdWVtbWVybi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFSVNQSUVMRToKKworICAgICBBZGRNc2coIkluIGRlciBGZXJuZSB0YXVjaHQgZWluZSBrbGVpbmUgSW5zZWxuIGF1Zi5cbiIsIDEwKTsKKyAgICAgQWRkTXNnKCJEYXMgU2NoaWZmIHN0ZXVlcnQgZWluZW4ga2xlaW5lbiBTdGVnIGFuLlxuIik7CisgICAgIEFkZFJvdXRlKC4uLik7CisKKyAgICAgTmFjaCBkZXIgQW5rdWVuZGlndW5nIGRlciBJbnNlbCB2ZXJnZWhlbiAxMCBTZWt1bmRlbiwgYmlzIGRpZSBuYWVjaHN0ZQorICAgICBNZWxkdW5nIGF1c2dlZ2ViZW4gd2lyZC4gRGEgYmVpIGRlciB6d2VpdGVuIE1lbGR1bmcga2VpbmUgWmVpdAorICAgICBhbmdlZ2ViZW4gd2FyLCBsZWd0IGRhcyBTY2hpZmYgZGlyZWt0IG5hY2ggZGVyIEF1c2dhYmUgZGVyIE1lbGR1bmcgYW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZFJvdXRlKCksIEFkZEZ1bigpLCAvc3RkL3RyYW5zcG9ydC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI1LjAxLjIwMTUsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkUGxhbnQgYi9kb2MvbGZ1bi9BZGRQbGFudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzliY2ZmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkUGxhbnQKQEAgLTAsMCArMSw1OCBAQAorQWRkUGxhbnQoKQorCitGVU5LVElPTjoKKyAgICAgICAgdmFyYXJncyBpbnQgQWRkUGxhbnQoc3RyaW5nIGZpbGVuYW1lLCBbc3RyaW5nfHN0cmluZyogbnBjSWRdKSAKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL3Jvb20va3JhZXV0ZXIuYworCitBUkdVTUVOVEU6CisgICAgICAgIGZpbGVuYW1lCisgICAgICAgICAgRGVyIEZpbGVuYW1lIGRlcyBLcmF1dHMgZGFzIGhpZXIgZ2VmdW5kZW4gd2VyZGVuIHNvbGwuCisgICAgICAgIG5wY0lkCisgICAgICAgICAgRGllIElEIGVpbmVzIE5QQ3Mgb2RlciBkaWUgSURzIGVpbmVyIExpc3RlIHZvbiBOUENzLCBkZXIvZGllIGRhcyAKKyAgICAgICAgICBLcmF1dCBiZXdhY2hlbiBzb2xsL2VuLiBCZWZpbmRldCBzaWNoIGVpbiBOUEMgbWl0IGVpbmVyIGRpZXNlciBJRHMKKyAgICAgICAgICBpbSBSYXVtLCBrYW5uIGRhcyBLcmF1dCBuaWNodCBnZXBmbHVlY2t0IHdlcmRlbi4gRGllc2VzIEFyZ3VtZW50IAorICAgICAgICAgIGlzdCBvcHRpb25hbCEKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgICAgLTEgd2VubiBkYXMgT2JqZWt0IG5pY2h0IGdlY2xvbnQgd2VyZGVuIGtvbm50ZQorICAgICAgICA+PTAgc29uc3QKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBNaXQgSGlsZmUgZGllc2VyIEZ1bmt0aW9uIGtvZW5uZW4gS3JhZXV0ZXIgZnVlciBkZW4gbXVkd2VpdGVuCisgICAgICAgIEtyYWV1dGVyc2tpbGwgcmVjaHQgZWluZmFjaCBlaW5nZWJhdXQgd2VyZGVuLiBBbGxlcyB3YXMgbWFuCisgICAgICAgIG5vY2ggbWFjaGVuIG11c3MsIGlzdCBkZW4gTmFtZW4gZGVyIFBmbGFuemUgaW4gZWluZW0gRGV0YWlsIG9kZXIKKyAgICAgICAgZGVyIExhbmdiZXNjaHJlaWJ1bmcgenUgZXJ3YWVobmVuLgorICAgICAgICBNaXQgZGVtIEJlZmVobCAic2hvd3BsYW50IiBpbiAvb2JqL3Rvb2xzL3BsYW50dG9vbCBrYW5uIG1hbiBzaWNoIAorICAgICAgICBiZXF1ZW0gYW56ZWlnZW4gbGFzc2VuLCB3YXMgZXMgYWxsZXMgYW4gS3JhZXV0ZXJuIGdpYnQsIGRpZSBtYW4gCisgICAgICAgIG5laG1lbiBrYW5uLgorCitCRU1FUktVTkdFTjoKKyAgICAgICAgRGFtaXQgZGllIEtyYWV1dGVyIHZvbiBkZW4gU3BpZWxlcm4genVtIEJyYXVlbiB2b24gVHJhZW5rZW4gYmVudXR6dAorICAgICAgICB3ZXJkZW4ga29lbm5lbiwgbXVzcyBkZXIgUmF1bSBlcnN0IGluIGVpbmVtIE1hc3RlciBlaW5nZXRyYWdlbiB3ZXJkZW4uCisgICAgICAgIERlcnplaXQgc2NoaWNrdCBpaHIgZGF6dSBhbSBiZXN0ZW4gZWluZSBrdXJ6ZSBNYWlsIGFuIGVpbmVuIEVyem1hZ2llciwKKyAgICAgICAgZ2VybmUgbmltbXQgSHVtbmkgZGllIGRlcnplaXQgZW50Z2VnZW4uCisgICAgICAgIERpZSBLcmFldXRlciB3dXJkZW4gdm9uIGRlciBCYWxhbmNlIGJlcmVpdHMgYWxsZSBpbSB2b3JoaW5laW4KKyAgICAgICAgYWJnZW5vbW1lbi4gTGVkaWdsaWNoIGRpZSBFaW5oYWx0dW5nIGRlciBLYXRlZ29yaWVuIGlzdCB6dSBiZWFjaHRlbi4KKyAgICAgICAgU2luZCBLcmFldXRlciBuaWNodCBpbSBNYXN0ZXIga29uZmlndXJpZXJ0ICh3aWUgei5CLiBpbSBIb21lbXVkKSwgc2luZAorICAgICAgICBhbGxlIGVyemV1Z3RlbiBLcmFldXRlciBudXIgIlRlc3RrcmFldXRlciIgbWl0IG51ciBkZXIgSUQgImtyYXV0Ii4KKworQkVJU1BJRUxFOgorICAgICAgICAjaW5jbHVkZSA8aXRlbXMva3JhZXV0ZXIva3JhZXV0ZXJsaXN0ZS5oPgorICAgICAgICBpbmhlcml0ICIvc3RkL3Jvb20va3JhZXV0ZXIiOworICAgICAgICBpbmhlcml0ICIvc3RkL3Jvb20iOworICAgICAgICAKKyAgICAgICAgdm9pZCBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAgICAgOjpjcmVhdGUoKTsKKyAgICAgICAgICBTZXRQcm9wKFBfSU5UX0xPTkcsICJEdSBzaWVoc3QgZWluZSBXaWVzZSB2b2xsZXIgRmVsZGtsZWUuXG4iKTsKKyAgICAgICAgICBBZGRQbGFudChGRUxES0xFRSk7CisgICAgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgICAgQWRkSXRlbSgpOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxOC4wMS4yMDE1LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZFBsdXJhbElkIGIvZG9jL2xmdW4vQWRkUGx1cmFsSWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzN2JiMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZFBsdXJhbElkCkBAIC0wLDAgKzEsMjcgQEAKK0FkZFBsdXJhbElkKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgQWRkUGx1cmFsSWQobWl4ZWQgaWQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdW5pdC5jCisKK0FSR1VNRU5URToKKyAgICAgaWQKKyAgICAgICAgICBJZGVudGZpa2F0aW9uc3N0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2VyZGVuIGVpbiBvZGVyIG1laHJlcmUgQmV6ZWljaG5lciBoaW56dWdlZnVlZ3QsIG1pdCBkZW5lbiBzaWNoIAorICAgICBtZWhyZXJlIEVpbmhlaXRlbiBkZXIgTWVuZ2UgYW5zcHJlY2hlbiBsYXNzZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitCRUlTUElFTEU6CisgICAgIHNpZWhlIC9pdGVtcy9tb25leS5jCisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZFNpbmd1bGFySWQoKSwgUmVtb3ZlUGx1cmFsSWQoKSwgQWRkSWQoKSwgaWQoKSwgL3N0ZC91bml0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogTW9uIEp1bCAxNCAxMTozMDowMCAxOTk3IGJ5IFNpbHZhbmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZFB1cnN1ZXIgYi9kb2MvbGZ1bi9BZGRQdXJzdWVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MWVhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRQdXJzdWVyCkBAIC0wLDAgKzEsMjkgQEAKK0FkZFB1cnN1ZXIoKQorCitGVU5LVElPTjoKKyAgdm9pZCBBZGRQdXJzdWVyKG9iamVjdCBwdXJzdWVyKQorCitBUkdVTUVOVEU6CisgIHB1cnN1ZXI6IE9iamVrdCwgZGFzIGRlbWplbmlnZW4gZm9sZ2VuIHNvbGwsIGluIGRlbSBBZGRQdXJzdWVyCisgICAgICAgICAgIGF1ZmdlcnVmZW4gd3VyZGUuCisKK0ZVTktUSU9OOgorICBEdXJjaCBkZW4gQXVmcnVmIHZvbiBBZGRQdXJzdWVyIGluIGVpbmVtIE9iamVrdCwgd2VsY2hlcyBsaXZpbmcoKSBpc3QsCisgIHdpcmQgZGFzIE9iamVjdCwgd2VsY2hlcyBhbHMgQXJndW1lbnQgdWViZXJnZWJlbiB3dXJkZSBpbiBkaWUgTGlzdGUKKyAgZGVyIFZlcmZvbGdlciBlaW5nZXRyYWdlbi4gQWxsZSBPYmpla3RlLCBkaWUgaW4gZGVyIFZlcmZvbGdlcmxpc3RlIHN0ZWhlbgorICB3ZXJkZW4gYmVpIEJld2VndW5nZW4gZGVzIFZlcmZvbGd0ZW4gaW4gZGFzc2VsYmUgRW52aXJvbm1lbnQgYmV3ZWd0LgorCitSVUVDS0dBQkVXRVJUOgorICBrZWluZXIKKworQkVNRVJLVU5HOgorICBJbSBWZXJmb2xnZXIgd2lyZCBQcmV2ZW50Rm9sbG93IG1pdCBkZW0gWmllbG9iamVrdCwgaW4gZGFzIGRlciBWZXJmb2xndGUgCisgIGJld2VndCB3aXJkLCBhdWZnZXJ1ZmVuLiBEYWR1cmNoIGthbm4gZGVyIHJhZXVtbGljaGUgQmVyZWljaCwgaW4gZGVtIAorICB2ZXJmb2xndCB3aXJkLCBlaW5nZXNjaHJhZW5rdCB3ZXJkZW4uCisKK0JFSVNQSUVMRToKKyAgZmluZF9wbGF5ZXIoImpvZiIpLT5BZGRQdXJzdWVyKGZpbmRfcGxheWVyKCJraXJrIikpCisgIERhbmFjaCB3aXJkIEpvZiB2b24gS2lyayB2ZXJmb2xndC4KKworU0lFSEUgQVVDSDoKKyAgIlJlbW92ZVB1cnN1ZXIiLCAiUHJldmVudEZvbGxvdyIKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZFJlYWREZXRhaWwgYi9kb2MvbGZ1bi9BZGRSZWFkRGV0YWlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZGU3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRSZWFkRGV0YWlsCkBAIC0wLDAgKzEsODAgQEAKK0FkZFJlYWREZXRhaWwoKQorCitGVU5LVElPTjoKKyAgICB2b2lkIEFkZFJlYWREZXRhaWwoc3RyaW5nfHN0cmluZyprZXlzLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmd8c3RyaW5nKnxtYXBwaW5nfGNsb3N1cmUgZGVzYyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorICAgIGtleXMKKyAgICAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzIG1pdCBkZW4gTmFtZW4gZGVyIERldGFpbHMuCisgICAgZGVzYworICAgICAgU3RyaW5nLCBNYXBwaW5nLCBTdHJpbmctQXJyYXkgb2RlciBDbG9zdXJlIG1pdC96dXIgQmVzY2hyZWlidW5nLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllIEJlc2NocmVpYnVuZyBkZXIgRGV0YWlscyA8a2V5cz4gd2lyZCBnZXNldHp0LiBXaWUgZGllIERldGFpbHMKKyAgICBiZWltIExlc2VuIGF1c2dlZ2ViZW4gd2VyZGVuLCBoYWVuZ3QgaW0gd2VzZW50bGljaGVuIHZvbSBUeXAgZGVyCisgICAgQmVzY2hyZWlidW5nIDxkZXNjPiBhYjoKKyAgICAgIDxkZXNjPiBpc3QgZWluIFN0cmluZy4KKyAgICAgICBCZWltIExlc2VuIHdpcmQgZGllc2VyIFN0cmluZyB6dXJ1ZWNrZ2VnZWJlbi4KKyAgICAgIDxkZXNjPiBpc3QgZWluIFN0cmluZy1BcnJheS4KKyAgICAgICBCZWltIExlc2VuIHdpcmQgenVmYWVsbGlnIGVpbmVyIGRlciBTdHJpbmdzIHp1cnVlY2tnZWdlYmVuLgorICAgICAgPGRlc2M+IGlzdCBlaW4gTWFwcGluZy4KKyAgICAgICAgRGFzIE1hcHBpbmcgbXVzcyBmb2xnZW5kZW4gQXVmYmF1IGhhYmVuOgorICAgICAgICAgIChbMDogICAgICAgICJEZWZhdWx0dGV4dCIsCisgICAgICAgICAgICAicmFzc2UxIjogInIxdGV4dCIsIC4uLl0pLgorCisgICAgICAgIEZhbGxzIGZ1ZXIgZGllIFJhc3NlIGRlcyBkYXMgRGV0YWlsIHVudGVyc3VjaGVuZGVuIFNwaWVsZXJzIGVpbgorICAgICAgICBFaW50cmFnIGltIE1hcHBpbmcgZXhpc3RpZXJ0LCB3aXJkIGRlciBlbnRzcHJlY2hlbmRlIFRleHQKKyAgICAgICAgenVydWVja2dlZ2ViZW4sIGFuc29uc3RlbiBkZXIgRGVmYXVsdHRleHQuIEF1ZiBkaWVzZSBXZWlzZSBzaW5kCisgICAgICAgIHJhc3NlbmFiaGFlbmdpZ2UgVGV4dGUgbW9lZ2xpY2guCisgICAgICA8ZGVzYz4gaXN0IGVpbmUgQ2xvc3VyZS4KKyAgICAgICAgSW4gZGllc2VtIEZhbGwgd2lyZCBkaWUgQ2xvc3VyZSBhdXNnZWZ1ZWhydCB1bmQgZGFzIEVyZ2VibmlzCisgICAgICAgIHp1cnVlY2tnZWdlYmVuLiBEaWUgQ2xvc3VyZSBiZWtvbW10IGRhYmVpIGRlbiBOYW1lbiBkZXMgRGV0YWlscworICAgICAgICBhbHMgUGFyYW1ldGVyIHVlYmVyZ2ViZW4uCisKKyAgICBGdWVyIGxlc2JhcmUgRGV0YWlscyBrb2VubmVuIEZvcnNjaGVycHVua3RlIGVpbmdldHJhZ2VuIHdlcmRlbi4KKworICAgIFdpbGwgbWFuIGVpbiBsZXNiYXJlcyBEZXRhaWwgYW4gZWluZW0gT2JqZWt0IGhhYmVuLCB3ZWxjaGVzIGRlciBTcGllbGVyCisgICAgbWl0ICJsaWVzIDxpZD4iICg8aWQ+IGlzdCBlaW5lIElEIGRlcyBPYmpla3RzKSBiZWtvbW10LCBtdXNzIG1hbiBlaW4KKyAgICBEZXRhaWwgU0VOU0VfREVGQVVMVCBoaW56dWZ1ZWdlbi4KKyAgICAoRWluIERldGFpbCAiPGlkPiIgaGluenV6dWZ1ZWdlbiwgaGF0IGVpbmVuIGdhbnogYW5kZXJlcyBFZmZla3QhIERpZXNlcworICAgICB3dWVyZGUgdm9tIFNwaWVsZXIgbWl0ICJsaWVzIDxpZD4gYW4gPGlkPiIgZ2VsZXNlbiB3ZXJkZW4gdW5kIGlzdAorICAgICBtZWlzdGVucyBuaWNodCBkYXMsIHdhcyBnZXd1ZW5zY2h0IHdpcmQuKQorCitCRU1FUktVTkdFTjoKKyAgICAoMSkgQXVmIGRpZSAnZGVzYycgd2lyZCBrZWluIHByb2Nlc3Nfc3RyaW5nKCkgbWVociBhbmdld2VuZGV0LgorICAgICAgICBCaXR0ZSBzdGF0dGRlc3NlbiBsZnVuIGNsb3N1cmVzIGJ6dy4gJ2lubGluZSBjbG9zdXJlcycKKyAgICAgICAgdmVyd2VuZGVuLgorCisgICAgKDIpIEltIEdlZ2Vuc2F0eiB6dW0gVmVyaGFsdGVuIHZvbiBBZGRUb3VjaERldGFpbCgpLCBBZGRTbWVsbHMoKSB1bmQKKyAgICAgICAgQWRkU291bmRzKCkgd2lya3QgZWluIFNFTlNFX0RFRkFVTFQtRGV0YWlsIGluIGVpbmVtIFJhdW0gbmljaHQuCisgICAgICAgIEVpbiBlaW5mYWNoZXMgImxpZXMiIGJsZWlidCBkYW5uIG9obmUgUnVlY2tnYWJld2VydC4KKworQkVJU1BJRUxFOgorICAgIEFkZFJlYWREZXRhaWwoICh7ICJzY2hpbGQiIH0pLAorICAgICAgIkJFVFJFVEVOIFNUUkVOR1NURU5TIFZFUkJPVEVOIVxuIiApOworCisgICAgQWRkUmVhZERldGFpbCgiaW5zY2hyaWZ0IiwKKyAgICAgICAgICAgICAgICAgIChbMDogIkRvcnQgc3RlaHQ6IEVpbiBSaW5nIHNpZSB6dSBiaW5kZW4uIC4uLi5cbiIsCisgICAgICAgICAgICAgICAgICAgICJlbGYiOiAiQWxsZXMgaW4gZGlyIHN0cmFldWJ0IHNpY2gsIERBUyBEQSB6dSBsZXNlbi5cbiJdKSk7CisKKyAgICBBZGRSZWFkRGV0YWlsKCJyZWdlbG4iLAorICAgICAgZnVuY3Rpb24gc3RyaW5nKCkgeworICAgICAgICB0aGlzX3BsYXllcigpLT5Nb3JlKCIvZXRjL1dJWlJVTEVTIiwgMSk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICAgIH0pOworCitTSUVIRSBBVUNIOgorICAgIFNldHplbjogICAgQWRkRGV0YWlsKCksIEFkZFNtZWxscygpLCBBZGRTb3VuZHMoKSwKKyAgICAgICAgICAgICAgIEFkZFRvdWNoRGV0YWlsKCkKKyAgICBMb2VzY2hlbjogIFJlbW92ZURldGFpbCgpLCBSZW1vdmVSZWFkRGV0YWlsKCksIFJlbW92ZVNtZWxscygpLAorICAgICAgICAgICAgICAgUmVtb3ZlU291bmRzKCksIFJlbW92ZVRvdWNoRGV0YWlsKCkKKyAgICBEYXRlbjogICAgIFBfREVUQUlMUywgUF9SRUFEX0RFVEFJTFMsIFBfU01FTExTLCBQX1NPVU5EUywgUF9UT1VDSF9ERVRBSUxTCisgICAgVmVyYWx0ZXQ6ICBBZGRTcGVjaWFsRGV0YWlsKCksIFJlbW92ZVNwZWNpYWxEZXRhaWwoKSwgUF9SRUFEX01TRworICAgIFNvbnN0aWdlczogR2V0RGV0YWlsKCksIGJyZWFrX3N0cmluZygpCisKKzIwLjAxLjIwMTUsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkUmVzaXN0YW5jZU1vZGlmaWVyIGIvZG9jL2xmdW4vQWRkUmVzaXN0YW5jZU1vZGlmaWVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NzZmODYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRSZXNpc3RhbmNlTW9kaWZpZXIKQEAgLTAsMCArMSw0OSBAQAorQWRkUmVzaXN0YW5jZU1vZGlmaWVyKCkKKworRlVOS1RJT046CisgICAgIHZhcmFyZ3MgaW50IEFkZFJlc2lzdGFuY2VNb2RpZmllcihtYXBwaW5nIG1vZCwgc3RyaW5nIGFkZCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIG1hcHBpbmcgbW9kOgorICAgICAgTWFwcGluZyBtaXQgU2NoYWRlbnNhcnRlbiB1bmQgaWhyZW0gUmVzaXN0ZW56bW9kaWZpa2F0b3IgKGRlciBpbSBCZXJlaWNoCisgICAgICB2b24gLTEuMCBiaXMgK3ggbGllZ2VuIGthbm4pLCB6LkIuIChbRFRfRklSRTotMS4wXSkgKFRvdGFscmVzaXN0ZW56KS4KKyAgICAgc3RyaW5nIGFkZDoKKyAgICAgIEVpbiBJZGVudGlmaWthdG9yIGZ1ZXIgX2RpZXNlbl8gRWludHJhZyBkZXMgc2V0emVuZGVuIE9iamVrdGVzLgorCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdlcmRlbiBSZXNpc3RlbnplbiBpbiBkZW0gT2JqZWt0IGdlc2V0enQsIGRpZSBzb2xhbmdlIGJlc3RlaGVuLCB3aWUKKyAgICAgZGFzIHNldHplbmRlIE9iamVrdCBleGlzdGllcnQsIG9kZXIgbmljaHQgUmVtb3ZlUmVzaXN0YW5jZU1vZGlmaWVyCisgICAgIChtaXQgZXZlbnR1ZWxsZW0gU2NobHVlc3NlbCBhZGQpIGF1ZmdlcnVmZW4gd2lyZC4gWnVzYWV0emxpY2hlIFJlc2lzdGVuemVuCisgICAgIHdlcmRlbiBlaW5nZXJlY2huZXQuCisKK0JFTUVSS1VOR0VOOgorICAgICBGdWVyIFJ1ZXN0dW5nZW4ga2FubiB1bmQgc29sbHRlIG1hbiBQX1JFU0lTVEFOQ0VfU1RSRU5HVEhTIHZlcndlbmRlbi4KKworQkVJU1BJRUxFOgorICAgICAvLyBPZWwgbWl0IHZlcnZpZXJmYWNodGVtIEZldWVyc2NoYWRlbgorICAgICBpbnQgYWRkX2FjdGlvbigpIHsKKyAgICAgIC4uLgorICAgICAgd3JpdGUoYnJlYWtfc3RyaW5nKCJEdSBzY2h1ZXR0ZXN0IGRhcyBPZWwgdWViZXIgIisKKwkJCSBucGMtPm5hbWUoV0VOKSsiLiIsNzgpKTsKKyAgICAgIC4uLgorICAgICAgbnBjLT5BZGRSZXNpc3RhbmNlTW9kaWZpZXIoKFtEVF9GSVJFOjMuMF0pLCAib2VsIik7CisgICAgICBTZXRQcm9wKFBfSU5WSVMsMSk7CisgICAgICBTZXRQcm9wKFBfRVhUUkFfTE9PSywgIlVlYmVyYWxsIHRyb3BmdCBPZWwgaGVydW50ZXIuXG4iKTsKKyAgICAgIG1vdmUobnBjLE1fTk9DSEVDSyk7CisgICAgICAuLi4KKyAgICAgfQorCitSVWVDS0dBQkVXRVJUOgorICAgICAxIGZ1ZXIgRXJmb2xnCisKK1NJRUhFIEFVQ0g6CisgICAgIE1vZGlmaWthdG9yZW46CVJlbW92ZVJlc2lzdGFuY2VNb2RpZmllcigpLCBQX1JFU0lTVEFOQ0VfTU9ESUZJRVIKKyAgICAgc2ltcGxlIFJlc2lzdGVuejoJUF9SRVNJU1RBTkNFLCBQX1ZVTE5FUkFCSUxJVFkKKyAgICAgSGF1cHRtYXBwaW5nOglQX1JFU0lTVEFOQ0VfU1RSRU5HVEhTCisgICAgIEJlcmVjaG51bmc6CUNoZWNrUmVzaXN0YW5jZSgpLCBVcGRhdGVSZXNpc3RhbmNlU3RyZW5ndGhzKCkKKyAgICAgYW5kZXJlczoJCWJhbGFuY2UsIC9zdGQvYXJtb3VyL2NvbWJhdC5jLCAvc3RkL2xpdmluZy9jb21iYXQuYworCisyOS5BcHIgMjAwMiwgR2xvaW5zb25ATUcKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZFJvb21DbWQgYi9kb2MvbGZ1bi9BZGRSb29tQ21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMjA2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRSb29tQ21kCkBAIC0wLDAgKzEsMTMgQEAKK0FkZFJvb21DbWQoKQorCitTWU5UQVg6CisJQWRkUm9vbUNtZCggc3RyaW5nIGtvbW1hbmRvLCBzdHJpbmcgZnVua3Rpb24gKTsKKwlBZGRSb29tQ21kKCBzdHJpbmcgKmtvbW1hbmRvcywgc3RyaW5nIGZ1bmt0aW9uICk7CisKK0ZVTktUSU9OOgorCQorCURpZXNlIEZ1bmt0aW9uIGlzdCB2ZXJhbHRldC4gU2llIHdpcmQgdm9sbHN0YWVuZGlnIGR1cmNoCisJZGllIEZ1bmt0aW9uIEFkZENtZCBlcnNldHp0LgorCitTSUVIRSBBVUNIOgorCSJBZGRDbWQiCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRSb29tTWVzc2FnZSBiL2RvYy9sZnVuL0FkZFJvb21NZXNzYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOWNhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRSb29tTWVzc2FnZQpAQCAtMCwwICsxLDgwIEBACitBZGRSb29tTWVzc2FnZSgpCisKK0ZVTktUSU9OOgorICAgICB2b2lkIEFkZFJvb21NZXNzYWdlKHN0cmluZyAqbXNnLCBpbnQgdGltZSwgbWl4ZWQgKmZ1bmMpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcm9vbS9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgbXNnCisgICAgICAgICAgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiBNZWxkdW5nZW4uCisgICAgIHRpbWUKKyAgICAgICAgICBEZXIgQWJzdGFuZCB6d2lzY2hlbiB6d2VpIE1lbGR1bmdlbiBpbiBTZWt1bmRlbi4KKyAgICAgZnVuYyAob3B0aW9uYWwpCisgICAgICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IEZ1bmt0aW9uc25hbWVuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgTWl0IGRpZXNlciBGdW5rdGlvbiBsZWd0IG1hbiBmZXN0LCBkYXNzIGluIGJlc3RpbW10ZW4gWmVpdGFic3RhZW5kZW4KKyAgICAgTWVsZHVuZ2VuIGFuIGRlbiBSYXVtIGdlc2NoaWNrdCB3ZXJkZW4gc29sbGVuLgorCisgICAgIEVzIHdpcmQgYWxsZSB0aW1lIFNla3VuZGVuIHp1ZmFlbGxpZyBlaW5lIGRlciBpbiBtc2cgYW5nZWdlYmVuZW4KKyAgICAgTWVsZHVuZ2VuIGF1c2dlZ2ViZW4uIEhhdCBtYW4gYXVjaCBub2NoIGZ1bmMgYW5nZWdlYmVuLCBzbyB3aXJkCisgICAgIHp1c2FldHpsaWNoIGRpZXNlIEZ1bmt0aW9uIChiZWkgZWluZW0gQXJyYXk6IGVpbmUgenVmYWVsbGlnIGF1c2dlc3VjaHRlCisgICAgIEZ1bmt0aW9uKSBpbSBSYXVtIGF1ZmdlcnVmZW4uIEFscyBQYXJhbWV0ZXIgYmVrb21tdCBkaWUgRnVua3Rpb24gZGllCisgICAgIE51bW1lciBkZXIgYXVzZ2VnZWJlbmVuIE1lbGR1bmcuCisKKyAgICAgQmV2b3IgbWFuIGFsbGVyZGluZ3MgamVkZW4gUmF1bSBtaXQgQWRkUm9vbU1lc3NhZ2UoKSBwZmxhc3RlcnQsIHNvbGx0ZQorICAgICBtYW4gZm9sZ2VuZGVzIGJlZGVua2VuOgorICAgICAgICBvIFZpZWxlIE1lbGR1bmdlbiBpbiB2aWVsZW4gUmFldW1lbiB0ZW5kaWVyZW4gZGF6dSwgZGVuIFNwaWVsZXJuIGF1ZgorICAgICAgICAgIGRpZSBOZXJ2ZW4genUgZ2VoZW4hCisgICAgICAgIG8gRGEgZGFzIFRpbWluZyB1ZWJlciBlaW5lbiBjYWxsX291dCgpIGdlc3RldWVydCB3aXJkLCBpc3QgZGFzIEdhbnplCisgICAgICAgICAgYXVzIFNpY2h0IGRlcyBHYW1lRHJpdmVycyBhdWNoIG5vY2ggcmVsYXRpdiB0ZXVlciEKKyAgICAgRmF6aXQ6IHdlbmlnZXIgaXN0IG1laHIhCisKK0JFTUVSS1VOR0VOOgorICAgICAqIEZhbGxzIHRpbWUgPCAxNSBTZWt1bmRlbiBpc3QsIHdpcmQgYXVmIDE1IFNla3VuZGVuIGF1ZmdlcnVuZGV0LgorICAgICAqIGRlciBQcmFlZml4IEFkZC4uLiB0YWV1c2NodCBoaWVyLiBFaW4gQXVmcnVmIHZvbiBBZGRSb29tTWVzc2FnZSgpCisgICAgICAgdWViZXJzY2hyZWlidCBhbGxlIHZvcmhlcmlnZW4gV2VydGUKKyAgICAgKiBUSElTX1BMQVlFUigpIE5JQ0hUIFZFUldFTkRFTiEKKyAgICAgSW4gRnVua3Rpb25lbiwgZGllIGR1cmNoIEFkZFJvb21NZXNzYWdlKCkgYXVzZ2Vsb2VzdCB3ZXJkZW4sIGRhcmYKKyAgICAgdGhpc19wbGF5ZXIoKSBuaWNodCB2ZXJ3ZW5kZXQgd2VyZGVuLiBBZGRSb29tTWVzc2FnZSBpc3QgY2FsbF9vdXQtCisgICAgIGdlc3RldWVydCB1bmQgc3BlaWNoZXJ0IHNvbWl0IGRhcyB0aGlzX3BsYXllcigpLiBEYW1pdCBpc3QgdGhpc19wbGF5ZXIoKQorICAgICBpbW1lciBkZXIgU3BpZWxlciwgZGVyIGRlbiBSYXVtIGdlbGFkZW4sIGFsc28gZGVuIFJhdW0gYWxzIGVyc3RlcgorICAgICBiZXRyZXRlbiBoYXQuIAorICAgICBTcGllbGVyIGFsc28gYml0dGUgc2VsYnN0IHVlYmVyIGZpbHRlcihhbGxfaW52ZW50b3J5KHRoaXNfb2JqZWN0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ2ludGVyYWN0aXZlKSBzdWNoZW4uCisKK0JFSVNQSUVMRToKKyAgICAgRXMgc29sbCBhbGxlIGhhbGJlIE1pbnV0ZSBlaW5lIE1lbGR1bmcgYXVzZ2VnZWJlbiB3ZXJkZW4uIEZhbGxzIGVzCisgICAgIHVudGVyIGRlbiBGdWVzc2VuIGtuYWNrdCwgc29sbCBtYW4genVkZW0gbWl0IDMwJS1pZ2VyCisgICAgIFdhaHJzY2hlaW5saWNoa2VpdCB6dXNhbW1lbnp1Y2tlbjoKKworICAgICBpbmhlcml0ICIvc3RkL3Jvb20iOworCisgICAgIHZvaWQgY3JlYXRlKCkgeworICAgICAgIDo6Y3JlYXRlKCk7CisgICAgICAgQWRkUm9vbU1lc3NhZ2UoICh7ICJJbiBkZXIgRmVybmUgc2NocmVpdCBlaW4gS2FldXpjaGVuLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkVzIHJhc2NoZWx0IGltIEdlYnVlc2NoLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkV0d2FzIGtuYWNrdCB1bnRlciBEZWluZW4gRnVlc3Nlbi5cbiIgfSksCisgICAgICAgICAgICAgICAgICAgICAgICAzMCwgKHsic291bmQiLCAic291bmRfbW9yZV9ybmQifSkgKTsKKyAgICAgICAuLi4KKyAgICAgfQorCisgICAgIHZvaWQgc291bmQoaW50IG1zZykgeworICAgICAgIGlmIChtc2cgPT0gMikgICAgICAgICAvLyBFcyBoYXQgZ2VrbmFja3QuLi4KKyAgICAgICAgIGlmIChyYW5kb20oMTApIDwgMykgLy8gU2NocmVjayBsYXNzIG5hY2ghIDstKQorICAgICAgICAgICB0ZWxsX3Jvb20odGhpc19vYmplY3QoKSwgIkVyc2Nocm9ja2VuIGZhZWhyc3QgRHUgenVzYW1tZW4hXG4iICk7CisgICAgIH0KKworICAgICAvLyBFeHRyYS1CZWlzcGllbDogd2lyIHNldHplbiBkaWUgV2FydGVkYXVlciAoUGFyYW1ldGVyIHRpbSkgbmV1CisgICAgIHZvaWQgc291bmRfbW9yZV9ybmQoKSB7CisgICAgICAgc291bmQoMCk7ICAgLy8gZGllIE1lc3NhZ2UtTnVtbWVyIGlzdCBoaWVyIHVud2ljaHRpZworICAgICAgIFNldFByb3AoUF9NU0dfUFJPQiwgMjUrcmFuZG9tKDIwKSk7ICAvLyBuZXVlIFdhcnRlZGF1ZXIKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBWZXJ3YW5kdDogdGVsbF9yb29tKCksIFJlY2VpdmVNc2coKQorICAgICBQcm9wczogICAgUF9ST09NX01TRywgUF9GVU5DX01TRywgUF9NU0dfUFJPQgorCisyLkZlYiAyMDE2IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRSb3V0ZSBiL2RvYy9sZnVuL0FkZFJvdXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYTAwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRSb3V0ZQpAQCAtMCwwICsxLDg0IEBACitBZGRSb3V0ZSgpCitGVU5LVElPTjoKKyAgICBwdWJsaWMgdmFyYXJncyB2b2lkIEFkZFJvdXRlKHN0cmluZyByb29tLCBpbnQgc3RheSwgaW50IG5leHQsIAorICAgICAgICBzdHJpbmcgaGFyYm91cl9kZXNjLCBtaXhlZCBkZXN0X2lkcywgc3RyaW5nIGRlc3RzdHIpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3RyYW5zcG9ydC5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgcm9vbQorICAgICAgICBGaWxlbmFtZSBkZXIgSGFsdGVzdGVsbGUgKGRlcyBaaWVscykKKyAgICBpbnQgc3RheQorICAgICAgICBBdWZlbnRoYWx0c3plaXQgYW4gZGVyIEhhbHRlc3RlbGxlLgorICAgIGludCBuZXh0CisgICAgICAgIEZhaHJ0emVpdCB2b24gZG9ydCBiaXMgenVtIG5hZWNoc3RlbiBGYWhycGxhbnB1bmt0CisgICAgc3RyaW5nIGhhcmJvdXJfZGVzYworICAgICAgICBOYW1lIGRlciBIYWx0ZXN0ZWxsZSAoZnVlciBRdWVyeUFycml2ZWQpCisgICAgbWl4ZWQgZGVzdF9pZHMKKyAgICAgICAga2xlaW5nZXNjaHJpZWJlbmUgSURzIGRlciBIYWx0ZXN0ZWxsZQorICAgIHN0cmluZyBkZXN0cnN0cgorICAgICAgICBVbmJlbnV0enQgLyBVbmRlZmluaWVydC4KKworQkVTQ0hSRUlCVU5HOgorICAgIERlbSBGYWhycGxhbiBkZXMgVHJhbnNwb3J0ZXJzIHdpcmQgZWluZSBuZXVlIEhhbHRlc3RlbGxlIGhpbnp1Z2VmdWVndC4KKworICAgIEJlaSBFcnJlaWNoZW4gZGVyIEhhbHRlc3RlbGxlIHdpcmQgZGVyIFRyYW5zcG9ydGVyIGluIGRlbiBSYXVtICdyb29tJworICAgIGJld2VndCB1bmQgc2ljaHRiYXIgZ2VtYWNodC4gTnVuIGthbm4gbWFuIGlobiBmdWVyICdzdGF5JyBTZWt1bmRlbgorICAgIGJldHJldGVuIG9kZXIgdmVybGFzc2VuLCBiZXZvciBlciBhYmxlZ3QgKHVuc2ljaHRiYXIgZ2VtYWNodCB3aXJkKS4KKyAgICBOYWNoICduZXh0JyBTZWt1bmRlbiB3aXJkIGRhbm4gZGVyIG5hZWNoc3RlIFB1bmt0IGRlcyBGYWhycGxhbnMKKyAgICBhdXNnZWZ1ZWhydC4KKyAgICAgCisgICAgJ2hhcmJvdXJfZGVzYycgaXN0IGVpbiBTdHJpbmcsIGRlbiBRdWVyeUFycml2ZWQoKSB6dXJ1ZWNrZ2lidCwgd2VubiBzaWNoCisgICAgZGVyIFRyYW5zcG9ydGVyIGFuIGVpbmVyIEhhbHRlc3RlbGxlIGJlZmluZGV0LiBJbiBkZXIgUmVnZWwgaXN0IGRhcyBlaW4KKyAgICBTdHJpbmcsIGRlciBkaWUgSGFsdGVzdGVsbGUgbmFlaGVyIGJlc2NocmVpYnQuCisgICAgCisgICAgJ2Rlc3RfaWRzJyBpc3QgZWluIEFycmF5IHZvbiBTdHJpbmdzLCBkaWUgYWxzIElELUNvZGUgZnVlciBkaWVzZSAKKyAgICBIYWx0c3RlbGxlIGRpZW5lbi4gRGFzIHdpcmQgekIgYmVpIGRlciBFcm1pdHRsdW5nIGVpbmVyIEhhbHRlc3RlbGxlIGJlaSAKKyAgICAicmVpc2UgbmFjaCIgYmVudXR6dC4gV2VubiAnZGVzdF9pZHMnIG5pY2h0IGdlc2V0enQgaXN0LCB1bmQgYXVjaCAKKyAgICBQX0hBUkJPVVIgZGVzIFppZWxoYWZlbnMgbmljaHQga29ycmVrdCBnZXNldHp0IGlzdCwgd2VyZGVuIAorICAgIGdyb3NzZ2VzY2hyaWViZW5lIEJlZ3JpZmZlIGF1cyAnaGFyYm91cl9kZXNjJyB2ZXJ3ZW5kZXQuCisKK0JFSVNQSUVMRToKKyAgICAjMSBIaWVyIGVpbiBBdXN6dWcgYXVzIC9kL2luc2Vsbi9zY2hpZmZlL2pvbGxlLmM6CisKKyAgICAgIEFkZFJvdXRlKCIvZC9lYmVuZS9yb29tL1BvcnRWYWluL3BvX2hhZjIiLCA0MCwKKyAgICAgICAgICAgICAgIDEwLCAiSGFmZW4gdm9uIFBvcnQgVmFpbiIpOworCisgICAgRGllIEpvbGxlIHdpcmQgYWxzbyBiZWltIEFubGVnZW4gaW4gZGVuIFBvcnQgVmFpbmVyIEhhZmVuIGJld2VndCB1bmQKKyAgICBsYWVzc3Qgc2ljaCBkb3J0IDQwIFNla3VuZGVuIGxhbmcgYmV0cmV0ZW4gb2RlciB2ZXJsYXNzZW4uCisgICAgUXVlcnlBcnJpdmVkKCkgbGllZmVydCB3YWVocmVuZCBkaWVzZXIgWmVpdCBkZW4gU3RyaW5nICJIYWZlbiB2b24gUG9ydAorICAgIFZhaW4iIHp1cnVlY2suIE5hY2ggZGVuIDQwIFNla3VuZGVuIGxlZ3QgZGllIEpvbGxlIGFiLCB1bmQgbmFjaAorICAgIHdlaXRlcmVuIDEwIFNla3VuZGVuIHdpcmQgZGllIG5hZWNoc3RlIFN0YXRpb24gaW4gaWhyZW0gRmFocnBsYW4KKyAgICBhbmdlZmFocmVuLgorCisgICAgIzIgRGllIEdhbGVlcmUgbmFjaCBPcmtoYXVzZW46CisgICAgICBBZGRSb3V0ZShJTlNFTCgic3RlZyIpLCAzMCwgMjAsICJWZXJsb3JlbmUgTGFuZCAoIE9ya2hhdXNlbiApIiApOworICAgICAgLSBoYWVsdCAzMCBTZWt1bmRlbgorICAgICAgLSByZWlzdCAyMCBTZWt1bmRlbgorICAgICAgLSByZWlzdCBuYWNoIElOU0VMKCJzdGVnIiksIGJla2FubnQgYWxzICJWZXJsb3JlbmUgTGFuZCAoIE9ya2hhdXNlbiApIgorICAgICAgLSBkYSBrZWluZSAnZGVzdF9pZHMnIGFuZ2VnZWJlbiBzaW5kLCB3YWVyZSBlaW5lIHNvIGRlZmluaWVydGUgCisgICAgICAgIEhhbHRzdGVsbGUgbnVyIG1pdCBkZW4gSURzIGFuc3ByZWNoYmFyLCBkaWUgaW4gUF9IQVJCT1VSUyBpbSBaaWVscmF1bQorICAgICAgICBhbmdlZ2ViZW4gc2luZC4KKworICAgIFdlbm4gbWFuIG51biBlcnJlaWNoZW4gd29sbHRlLCBkYXNzIGRhcyBaaWVsIGF1Y2ggbWl0IGRlbSBLdWVyemVsICJ2bGFuZCIKKyAgICBhbnNwcmVjaGJhciBpc3QsIGthbm4gbWFuIHp1bSBlaW5lbiBleHBsaXppdGUgJ2Rlc3RfaWRzJyBlaW50cmFnZW46CisgICAgICBBZGRSb3V0ZShJTlNFTCgic3RlZyIpLCAzMCwgMjAsICJWZXJsb3JlbmUgTGFuZCAoIE9ya2hhdXNlbiApIiwKKyAgICAgICAgICAgICAgICh7InZlcmxvcmVuZXMiLCAibGFuZCIsICJvcmtoYXVzZW4iLCAidmxhbmQifSkpOworICAgIERpZXMgbGFlc3N0IHNpY2ggaW0gWmllbGhhZmVuIGFiZXIgYXVjaCBkdXJjaCBFaW50cmFnZW4gZGVzIEt1ZXJ6ZWxzCisgICAgInZsYW5kIiBpbiBQX0hBUkJPVVIgZXJyZWljaGVuLiBEaWVzIGhhdCBkZW4gVm9ydGVpbCwgZGFzcyBkaWVzZXIgSGFmZW4KKyAgICBkYW5uIHZvbiBhbGxlbiBUcmFuc3BvcnRlcm4sIGRpZSBkb3J0IGFubGVnZW4sIHVudGVyIGRlbXNlbGJlbiBOYW1lbgorICAgIGVycmVpY2h0IHdlcmRlbiBrYW5uLgorICAgIAorSElOV0VJU0U6CisgICAgRGFkdXJjaCwgZGFzcyBkaWUgRWludHJhZWdlIGF1cyBQX0hBUkJPVVIgdW5kICdkZXN0X2lkcycgZ2xlaWNoYmVyZWNodGlndAorICAgIGZ1ZXIgInJlaXNlIG5hY2ggPHppZWw+IiB2ZXJ3ZW5kZXQgd2VyZGVuIGtvZW5uZW4sIGlzdCBlcyBtb2VnbGljaCwKKyAgICBkYXNzIGRpZSBSZWlzZXppZWxlIGF1ZiBlaW5lbSBTY2hpZmYgdW50ZXIgenVzYWV0emxpY2hlbiBCZXplaWNobnVuZ2VuIAorICAgIGJla2FubnQgc2luZCwgYWxzIGFuIExhbmQgKHp1bSBCZWlzcGllbCBrb2VubnRlIGVpbmUgZmVybndlc3RsaWNoZQorICAgIEJlc2F0enVuZyBkaWUgWmllbGUgYW5kZXJzIG5lbm5lbikuCisKK1NJRUhFIEFVQ0g6CitGdW5rdGlvbmVuOiAgQWRkTXNnKEwpLCBBZGRGdW4oTCksIC9zdGQvdHJhbnNwb3J0LmMKK1Byb3BlcnRpZXM6ICBQX0hBUkJPVVIsIFBfTk9fVFJBVkVMSU5HLCBQX1RSQVZFTF9JTkZPCisKKzIwMTUtSmFuLTE4LCBBcmF0aG9ybi4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZFNpbmd1bGFySWQgYi9kb2MvbGZ1bi9BZGRTaW5ndWxhcklkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NTY1NjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRTaW5ndWxhcklkCkBAIC0wLDAgKzEsMjcgQEAKK0FkZFNpbmd1bGFySWQoKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBBZGRTaW5ndWxhcklkKG1peGVkIGlkKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3VuaXQuYworCitBUkdVTUVOVEU6CisgICAgIGlkCisgICAgICAgICAgSWRlbnRpZmlrYXRpb25zc3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MKKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3ZXJkZW4gZWluIG9kZXIgbWVocmVyZSBCZXplaWNobmVyIGhpbnp1Z2VmdWVndCwgbWl0IGRlbmVuIHNpY2ggZWluZQorICAgICBlaW56ZWxuZSBFaW5oZWl0IGFuc3ByZWNoZW4gbGFlc3N0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVJU1BJRUxFOgorICAgICBzaWVoZSAvaXRlbXMvbW9uZXkuYworCitTSUVIRSBBVUNIOgorICAgICBBZGRQbHVyYWxJZCgpLCBSZW1vdmVTaW5ndWxhcklkKCksIEFkZElkKCksIGlkKCksIC9zdGQvdW5pdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IE1vbiBKdWwgMTQgMTE6MzE6MDAgMTk5NyBieSBTaWx2YW5hCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRTbWVsbHMgYi9kb2MvbGZ1bi9BZGRTbWVsbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4MmYwMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZFNtZWxscwpAQCAtMCwwICsxLDcxIEBACitBZGRTbWVsbHMoKQorCitGVU5LVElPTjoKKyAgICB2b2lkIEFkZFNtZWxscyhzdHJpbmd8c3RyaW5nKiBrZXlzLCBzdHJpbmd8c3RyaW5nKnxtYXBwaW5nfGNsb3N1cmUgZGVzYyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorICAgIGtleXMKKyAgICAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzIG1pdCBkZW4gTmFtZW4gZGVyIERldGFpbHMuCisgICAgZGVzYworICAgICAgU3RyaW5nLCBNYXBwaW5nLCBTdHJpbmctQXJyYXkgb2RlciBDbG9zdXJlIG1pdC96dXIgQmVzY2hyZWlidW5nLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllc2UgRnVua3Rpb24gZW50c3ByaWNodCBkZW0gQWRkRGV0YWlsKCkgZnVlciBTdGFuZGFyZGRldGFpbHMsIG51cgorICAgIGtvZW5uZW4gaGllcm1pdCBHZXJ1ZWNoZSByZWFsaXNpZXJ0IHdlcmRlbjoKKyAgICBEaWUgQmVzY2hyZWlidW5nIGRlciBEZXRhaWxzIDxrZXlzPiB3aXJkIGdlc2V0enQuIFdpZSBkaWUgRGV0YWlscworICAgIGJlaSBkZXIgVW50ZXJzdWNodW5nIGF1c3NlaGVuLCBoYWVuZ3QgaW0gd2VzZW50bGljaGVuIHZvbSBUeXAgZGVyCisgICAgQmVzY2hyZWlidW5nIDxkZXNjPiBhYjoKKyAgICAgIDxkZXNjPiBpc3QgZWluIFN0cmluZy4KKyAgICAgICAgQmVpbSBVbnRlcnN1Y2hlbiB3aXJkIGRpZXNlciBTdHJpbmcgenVydWVja2dlZ2ViZW4uCisgICAgICA8ZGVzYz4gaXN0IGVpbiBTdHJpbmctQXJyYXkuCisgICAgICAgIEJlaW0gVW50ZXJzdWNoZW4gd2lyZCB6dWZhZWxsaWcgZWluZXIgZGVyIFN0cmluZ3MgenVydWVja2dlZ2ViZW4uCisgICAgICA8ZGVzYz4gaXN0IGVpbiBNYXBwaW5nLgorICAgICAgICBEYXMgTWFwcGluZyBtdXNzIGZvbGdlbmRlbiBBdWZiYXUgaGFiZW46CisgICAgICAgICAgKFswOiAgICAgICAgIkRlZmF1bHR0ZXh0IiwKKyAgICAgICAgICAgICJyYXNzZTEiOiAicjF0ZXh0IiwgLi4uXSkuCisKKyAgICAgICAgRmFsbHMgZnVlciBkaWUgUmFzc2UgZGVzIGRhcyBEZXRhaWwgdW50ZXJzdWNoZW5kZW4gU3BpZWxlcnMgZWluCisgICAgICAgIEVpbnRyYWcgaW0gTWFwcGluZyBleGlzdGllcnQsIHdpcmQgZGVyIGVudHNwcmVjaGVuZGUgVGV4dAorICAgICAgICB6dXJ1ZWNrZ2VnZWJlbiwgYW5zb25zdGVuIGRlciBEZWZhdWx0dGV4dC4gQXVmIGRpZXNlIFdlaXNlIHNpbmQKKyAgICAgICAgcmFzc2VuYWJoYWVuZ2lnZSBEZXRhaWxzIG1vZWdsaWNoLiBTaWVoZSBhdWNoIGRpZSBCZWlzcGllbGUuCisgICAgICA8ZGVzYz4gaXN0IGVpbmUgQ2xvc3VyZS4KKyAgICAgICAgSW4gZGllc2VtIEZhbGwgd2lyZCBkaWUgQ2xvc3VyZSBhdXNnZWZ1ZWhydCB1bmQgZGFzIEVyZ2VibmlzCisgICAgICAgIHp1cnVlY2tnZWdlYmVuLiBEaWUgQ2xvc3VyZSBiZWtvbW10IGRhYmVpIGRlbiBOYW1lbiBkZXMgRGV0YWlscworICAgICAgICBhbHMgUGFyYW1ldGVyIHVlYmVyZ2ViZW4uCisKKyAgICBGdWVyIEdlcnVjaHNkZXRhaWxzIGtvZW5uZW4gRm9yc2NoZXJwdW5rdGUgZWluZ2V0cmFnZW4gd2VyZGVuLgorCisgICAgR2VydWVjaGUga29lbm5lbiBhbGxnZW1laW4gZWluZW4gUmF1bSBvZGVyIE9iamVrdCB6dWdlb3JkbmV0IHdlcmRlbjoKKyAgICBkYWZ1ZXIgbXVzcyBtYW4gYWxzIDxrZXk+IFNFTlNFX0RFRkFVTFQgdWViZXJnZWJlbi4KKyAgICAKKyAgICBTcGllbGVya29tbWFuZG9zOiAicmllY2giLCAicmllY2hlIiwgInNjaG51cHBlciIsICJzY2hudXBwZXJlIgorCitCRUlTUElFTEU6CisgICAgRWluIGtsZWluZXMgQmVpc3BpZWwgZnVlciByYXNzZW5hYmhhZW5naWdlIEdlcnVlY2hlIG1pdCBDbG9zdXJlczoKKyAgICAgIHN0cmluZyBzdHJhZmUoc3RyaW5nIGtleSk7CisgICAgICAuLi4KKyAgICAgIEFkZFNtZWxscyhTRU5TRV9ERUZBVUxULAorICAgICAgICAiRGVyIEdlcnVjaCB2b24gS25vYmxhdWNoIGlzdCB1ZWJlcndhZWx0aWdlbmQhXG4iKTsKKyAgICAgIEFkZFNtZWxscygoeyJrbm9ibGF1Y2giLCJnZXJ1Y2gifSksCisgICAgICAgICAgICAgICAgKFswOiAgICAgICAgIlB1aGgsIGRhcyBzdGlua3QhXG4iLAorICAgICAgICAgICAgICAgICAgInZhbXBpciI6ICMnc3RyYWZlXSkpOworICAgICAgLi4uCisgICAgICBzdHJpbmcgc3RyYWZlKHN0cmluZyBrZXkpIHsKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+cmVkdWNlX2hpdF9wb2ludHMoMTAwKTsKKyAgICAgICAgcmV0dXJuICJEZXIgS25vYmxhdWNoIHNjaG1lcnp0IGRpY2ggZnVyY2h0YmFyIVxuIjsKKyAgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICBTZXR6ZW46ICAgIEFkZERldGFpbCgpLCBBZGRSZWFkRGV0YWlsKCksIEFkZFNvdW5kcygpLAorICAgICAgICAgICAgICAgQWRkVG91Y2hEZXRhaWwoKQorICAgIExvZXNjaGVuOiAgUmVtb3ZlRGV0YWlsKCksIFJlbW92ZVJlYWREZXRhaWwoKSwgUmVtb3ZlU21lbGxzKCksCisgICAgICAgICAgICAgICBSZW1vdmVTb3VuZHMoKSwgUmVtb3ZlVG91Y2hEZXRhaWwoKQorICAgIERhdGVuOiAgICAgUF9ERVRBSUxTLCBQX1JFQURfREVUQUlMUywgUF9TTUVMTFMsIFBfU09VTkRTLCBQX1RPVUNIX0RFVEFJTFMKKyAgICBWZXJhbHRldDogIEFkZFNwZWNpYWxEZXRhaWwoKSwgUmVtb3ZlU3BlY2lhbERldGFpbCgpLCBQX1JFQURfTVNHCisgICAgU29uc3RpZ2VzOiBHZXREZXRhaWwoKSwgYnJlYWtfc3RyaW5nKCkKKworMjAuMDEuMjAxNSwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRTb3VuZHMgYi9kb2MvbGZ1bi9BZGRTb3VuZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4Mzg5YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZFNvdW5kcwpAQCAtMCwwICsxLDYzIEBACitBZGRTb3VuZHMoKQorCitGVU5LVElPTjoKKyAgICB2b2lkIEFkZFNvdW5kcyhzdHJpbmd8c3RyaW5nKiBrZXlzLCBzdHJpbmd8c3RyaW5nKnxtYXBwaW5nfGNsb3N1cmUgZGVzYyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorICAgIGtleXMKKyAgICAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzIG1pdCBkZW4gTmFtZW4gZGVyIERldGFpbHMuCisgICAgZGVzYworICAgICAgU3RyaW5nLCBNYXBwaW5nLCBTdHJpbmctQXJyYXkgb2RlciBDbG9zdXJlIG1pdC96dXIgQmVzY2hyZWlidW5nLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllc2UgRnVua3Rpb24gZW50c3ByaWNodCBkZW0gQWRkRGV0YWlsKCkgZnVlciBTdGFuZGFyZGRldGFpbHMsIG51cgorICAgIGtvZW5uZW4gaGllcm1pdCBHZXJhZXVzY2hlIHJlYWxpc2llcnQgd2VyZGVuOgorICAgIERpZSBCZXNjaHJlaWJ1bmcgZGVyIERldGFpbHMgPGtleXM+IHdpcmQgZ2VzZXR6dC4gV2llIGRpZSBEZXRhaWxzCisgICAgYmVpIGRlciBVbnRlcnN1Y2h1bmcgYXVzc2VoZW4sIGhhZW5ndCBpbSB3ZXNlbnRsaWNoZW4gdm9tIFR5cCBkZXIKKyAgICBCZXNjaHJlaWJ1bmcgPGRlc2M+IGFiOgorICAgICAgPGRlc2M+IGlzdCBlaW4gU3RyaW5nLgorICAgICAgICBCZWltIFVudGVyc3VjaGVuIHdpcmQgZGllc2VyIFN0cmluZyB6dXJ1ZWNrZ2VnZWJlbi4KKyAgICAgIDxkZXNjPiBpc3QgZWluIFN0cmluZy1BcnJheS4KKyAgICAgICAgQmVpbSBVbnRlcnN1Y2hlbiB3aXJkIHp1ZmFlbGxpZyBlaW5lciBkZXIgU3RyaW5ncyB6dXJ1ZWNrZ2VnZWJlbi4KKyAgICAgIDxkZXNjPiBpc3QgZWluIE1hcHBpbmcuCisgICAgICAgIERhcyBNYXBwaW5nIG11c3MgZm9sZ2VuZGVuIEF1ZmJhdSBoYWJlbjoKKyAgICAgICAgICAoWzA6ICAgICAgICAiRGVmYXVsdHRleHQiLAorICAgICAgICAgICAicmFzc2UxIjogInIxdGV4dCIsIC4uLl0pLgorCisgICAgICAgIEZhbGxzIGZ1ZXIgZGllIFJhc3NlIGRlcyBkYXMgRGV0YWlsIHVudGVyc3VjaGVuZGVuIFNwaWVsZXJzIGVpbgorICAgICAgICBFaW50cmFnIGltIE1hcHBpbmcgZXhpc3RpZXJ0LCB3aXJkIGRlciBlbnRzcHJlY2hlbmRlIFRleHQKKyAgICAgICAgenVydWVja2dlZ2ViZW4sIGFuc29uc3RlbiBkZXIgRGVmYXVsdHRleHQuIEF1ZiBkaWVzZSBXZWlzZSBzaW5kCisgICAgICAgIHJhc3NlbmFiaGFlbmdpZ2UgRGV0YWlscyBtb2VnbGljaC4gU2llaGUgYXVjaCBkaWUgQmVpc3BpZWxlLgorICAgICAgPGRlc2M+IGlzdCBlaW5lIENsb3N1cmUuCisgICAgICAgIEluIGRpZXNlbSBGYWxsIHdpcmQgZGllIENsb3N1cmUgYXVzZ2VmdWVocnQgdW5kIGRhcyBFcmdlYm5pcworICAgICAgICB6dXJ1ZWNrZ2VnZWJlbi4gRGllIENsb3N1cmUgYmVrb21tdCBkYWJlaSBkZW4gTmFtZW4gZGVzIERldGFpbHMKKyAgICAgICAgYWxzIFBhcmFtZXRlciB1ZWJlcmdlYmVuLgorCisgICAgRnVlciBHZXJhZXVzY2hkZXRhaWxzIGtvZW5uZW4gRm9yc2NoZXJwdW5rdGUgZWluZ2V0cmFnZW4gd2VyZGVuLgorCisgICAgR2VyYXVlc2NoZSBrb2VubmVuIGFsbGdlbWVpbiBlaW5lbiBSYXVtIG9kZXIgT2JqZWt0IHp1Z2VvcmRuZXQgd2VyZGVuOgorICAgIGRhZnVlciBtdXNzIG1hbiBhbHMgPGtleT4gU0VOU0VfREVGQVVMVCB1ZWJlcmdlYmVuLgorCisgICAgU3BpZWxlcmtvbW1hbmRvczogImxhdXNjaGUiLCAibGF1c2NoIiwgImhvZXIiLCAiaG9lcmUiCisKK0JFSVNQSUVMRToKKyAgICBFaW4ga2xlaW5lcyBCZWlzcGllbCBmdWVyIHJhc3NlbmFiaGFlbmdpZ2UgR2VyYXVlc2NoZQorICAgICAgQWRkU291bmRzKFNFTlNFX0RFRkFVTFQsICJEaWUgWndlcmdlbm11c2lrIHVlYmVydG9lbnQgYWxsZXMhXG4iKTsKKyAgICAgIEFkZFNvdW5kcygoeyJ6d2VyZ2VubXVzaWsiLCJtdXNpayJ9KSwKKyAgICAgICAgICAgICAgICAoWzAgICAgICA6ICJTZWx0c2FtZXIgS3JhY2ghXG4iLAorICAgICAgICAgICAgICAgICAgInp3ZXJnIjogIkRhcyBrbGluZ3QgZWluZmFjaCBmYW50YXN0aXNjaCFcbiJdKSk7CisKK1NJRUhFIEFVQ0g6CisgICAgU2V0emVuOiAgICBBZGREZXRhaWwoKSwgQWRkUmVhZERldGFpbCgpLCBBZGRTbWVsbHMoKSwKKyAgICAgICAgICAgICAgIEFkZFRvdWNoRGV0YWlsKCkKKyAgICBMb2VzY2hlbjogIFJlbW92ZURldGFpbCgpLCBSZW1vdmVSZWFkRGV0YWlsKCksIFJlbW92ZVNtZWxscygpLAorICAgICAgICAgICAgICAgUmVtb3ZlU291bmRzKCksIFJlbW92ZVRvdWNoRGV0YWlsKCkKKyAgICBEYXRlbjogICAgIFBfREVUQUlMUywgUF9SRUFEX0RFVEFJTFMsIFBfU01FTExTLCBQX1NPVU5EUywgUF9UT1VDSF9ERVRBSUxTCisgICAgVmVyYWx0ZXQ6ICBBZGRTcGVjaWFsRGV0YWlsKCksIFJlbW92ZVNwZWNpYWxEZXRhaWwoKSwgUF9SRUFEX01TRworICAgIFNvbnN0aWdlczogR2V0RGV0YWlsKCksIGJyZWFrX3N0cmluZygpCisKKzIwLjAxLjIwMTUsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkU3BlY2lhbERldGFpbCBiL2RvYy9sZnVuL0FkZFNwZWNpYWxEZXRhaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjNTU0MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0FkZFNwZWNpYWxEZXRhaWwKQEAgLTAsMCArMSw2MSBAQAorVkVSQUxURVQ6IEFkZFNwZWNpYWxEZXRhaWwoKQorCitGVU5LVElPTjoKKyAgICB2b2lkIEFkZFNwZWNpYWxEZXRhaWwoc3RyaW5nfHN0cmluZyoga2V5cywgc3RyaW5nIGZ1bmMpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICBrZXlzCisgICAgICBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncyBtaXQgZGVuIE5hbWVuIGRlciBEZXRhaWxzLgorICAgIGZ1bmMKKyAgICAgIFN0cmluZyBtaXQgZGVtIE5hbWVuIGRlciBGdW5rdGlvbiwgZGllIHp1ciBBdXN3ZXJ0dW5nIGF1ZmdlcnVmZW4KKyAgICAgIHdpcmQuCisKK0JFU0NIUkVJQlVORzoKKyAgICBFcyB3aXJkIGVpbiBEZXRhaWwgaGluenVnZWZ1ZWd0LCBkZXNzZW4gSW5oYWx0IG5pY2h0IHZvbiB2b3JuaGVyZWluCisgICAgZmVzdHN0ZWh0LCBzb25kZXJuIHZvbiBhZXVzc2VyZW4gQmVkaW5ndW5nZW4gYWJoYWVuZ3QuIFp1IGRpZXNlbQorICAgIFp3ZWNrIHdpcmQgaW1tZXIsIHdlbm4gZGllc2VzIERldGFpbCB1bnRlcnN1Y2h0IHdpcmQsIGRpZSBGdW5rdGlvbgorICAgIGZ1bmMgYXVmZ2VydWZlbiwgdW0gZGVuIGFrdHVlbGxlbiBadXN0YW5kIGRlcyBEZXRhaWxzIHp1IGJlc3RpbW1lbi4KKyAgICBEZXIgRnVua3Rpb24gd2lyZCBhbHMgUGFyYW1ldGVyIGRhcyBTY2hsdWVzc2Vsd29ydCB1ZWJlcmdlYmVuLCBtaXQKKyAgICBkZW0gZGFzIERldGFpbCB1bnRlcnN1Y2h0IHd1cmRlLgorCisgICAgVkVSQUxURVQ6IEJpdHRlIEFkZERldGFpbCBtaXQgQ2xvc3VyZSBiZW51dHplbi4KKworQkVJU1BJRUxFOgorICAgIEVpbiB6dXN0YW5kc2FiaGFlbmdpZ2VzIERldGFpbDoKKworICAgICAgaW50IGhlYmVsX2JldGFldGlndDsKKyAgICAgIHN0cmluZyBoZWJlbChzdHJpbmcga2V5KTsKKyAgICAgIC4uLgorICAgICAgLy8gQUxUOiBBZGRTcGVjaWFsRGV0YWlsKCAoeyAiaGViZWwiLCAic2NoYWx0ZXIiIH0pLCAiaGViZWwiICk7CisgICAgICBBZGREZXRhaWwoKHsgImhlYmVsIiwgInNjaGFsdGVyIiB9KSwgIydoZWJlbCApOworICAgICAgLi4uCisgICAgICBzdHJpbmcgaGViZWwoc3RyaW5nIGtleSkKKyAgICAgIHsgaWYoaGViZWxfYmV0YWV0aWd0KQorICAgICAgICAgIHJldHVybiAiRGVyICIrY2FwaXRhbGl6ZShrZXkpKyIgc3RlaHQgYXVmIEVJTi5cbiI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gIkRlciAiK2NhcGl0YWxpemUoa2V5KSsiIHN0ZWh0IGF1ZiBBVVMuXG4iOworICAgICAgfQorCisgICAgTWFuIGVyaGFlbHQgdmVyc2NoaWVkZW5lIEVyZ2Vibmlzc2UgYmVpbSBVbnRlcnN1Y2hlbiwgamUgbmFjaGRlbQorICAgIG9iIGRhcyBGbGFnIGhlYmVsX2JldGFldGlndCBnZXNldHp0IGlzdCBvZGVyIG5pY2h0LgorCitCRU1FUktVTkc6CisgICAgSW50ZXJuIHdlcmRlbiBEZXRhaWxzIHVuZCBTcGVjaWFsRGV0YWlscyBpbSBzZWxiZW4gTWFwcGluZworICAgIHZlcndhbHRldC4KKyAgICBNYW4ga2FubiBzdGF0dCBkaWVzZXIgRnVua3Rpb24gZGVzaGFsYiBhdWNoIEFkZERldGFpbCBtaXQgQ2xvc3VyZXMKKyAgICBudXR6ZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgU2V0emVuIDogICBBZGREZXRhaWwoKSwgQWRkUmVhZERldGFpbCgpLCBBZGRTbWVsbHMoKSwgQWRkU291bmRzKCksCisgICAgICAgICAgICAgICBBZGRUb3VjaERldGFpbCgpCisgICAgTG9lc2NoZW46ICBSZW1vdmVEZXRhaWwoKSwgUmVtb3ZlUmVhZERldGFpbCgpLCBSZW1vdmVTbWVsbHMoKSwKKyAgICAgICAgICAgICAgIFJlbW92ZVNvdW5kcygpLCBSZW1vdmVUb3VjaERldGFpbCgpCisgICAgRGF0ZW46ICAgICBQX0RFVEFJTFMsIFBfUkVBRF9ERVRBSUxTLCBQX1NNRUxMUywgUF9TT1VORFMsIFBfVE9VQ0hfREVUQUlMUworICAgIFZlcmFsdGV0OiAgUmVtb3ZlU3BlY2lhbERldGFpbCgpLCBQX1JFQURfTVNHCisgICAgU29uc3RpZ2VzOiBHZXREZXRhaWwoKSwgYnJlYWtfc3RyaW5nKCkKKworMjAuMDEuMjAxNSwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRTcGVjaWFsRXhpdCBiL2RvYy9sZnVuL0FkZFNwZWNpYWxFeGl0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2U1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRTcGVjaWFsRXhpdApAQCAtMCwwICsxLDU3IEBACitBZGRTcGVjaWFsRXhpdCgpCitGVU5LVElPTjoKKyAgICAgdm9pZCBBZGRTcGVjaWFsRXhpdChzdHJpbmd8c3RyaW5nKiBjbWQsIHN0cmluZ3xjbG9zdXJlIGZ1bmMpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcm9vbS9leGl0cworCitBUkdVTUVOVEU6CisgICAgIHN0cmluZy9zdHJpbmcqIGNtZAorICAgICAgICAgIGRpZSBSaWNodHVuZyhlbiksIGluIGRpZSBkZXIgQXVzZ2FuZyBmdWVocnQKKyAgICAgc3RyaW5nL2Nsb3N1cmUgZnVuYworICAgICAgICAgIGRlciBOYW1lIGRlciBhdWZ6dXJ1ZmVuZGVuIEZ1bmt0aW9uL0Nsb3N1cmUKKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3aXJkIGVpbiBBdXNnYW5nIGluIGRpZSBSaWNodHVuZyhlbikgY21kIGVpbmdlZnVlZ3QuIFdpcmQgZGVyCisgICAgIEF1c2dhbmcgYmVudXR6dCwgc28gd2lyZCBkaWUgQ2xvc3VyZSBiencuIEZ1bmt0aW9uIGZ1bmMgYXVzZ2VmdWVocnQuCisKKyAgICAgQWRkU3BlY2lhbEV4aXQoY21kLCAiZnVuYyIpIGVudHNwcmljaHQ6CisgICAgIC0gQWRkRXhpdChrZXlzLCAjJ2Z1bmMpCisKK0JFTUVSS1VOR0VOOgorICAgICBJbiBmdW5jIG11c3MgbWFuIGRlbiBTcGllbGVyIHNlbGJzdCBpbiBkZW4gWmllbHJhdW0gYmV3ZWdlbi4gSW0KKyAgICAgRXJmb2xnc2ZhbGwgc29sbHRlIG1hbiBlaW5lbiBXZXJ0ID4wIHp1cnVlY2tnZWJlbiwgaW0gRmVobGVyZmFsbCBlaW5lbgorICAgICBXZXJ0IDw9MC4KKworICAgICBmdW5jIGJla29tbXQgYWxzIFBhcmFtZXRlciBlaW5lbiBTdHJpbmcgbWl0IGRlciBnZXdhZWhsdGVuCisgICAgIEJld2VndW5nc3JpY2h0dW5nIHVlYmVyZ2ViZW4uCisKK0JFSVNQSUVMRToKKyAgICAgLy8gZWluIEF1c2dhbmcgc29sbCBudXIgdm9uIEZyb2VzY2hlbiBiZW51dHpiYXIgc2VpbjoKKworICAgICBBZGRTcGVjaWFsRXhpdCgibG9jaCIsICJsb2NoZmt0Iik7CisgICAgIC8vIGRlciBnbGVpY2hlIEF1ZnJ1ZiwgbnVyIGFuZGVyczoKKyAgICAgLy8gc3RhdGljIGludCBsb2NoZmt0KHN0cmluZyBkaXIpOwkJLy8gUHJvdG90eXAKKyAgICAgLy8gLi4uCisgICAgIC8vIEFkZFNwZWNpYWxFeGl0KCJsb2NoIiwgIydsb2NoZmt0KTsKKyAgICAgLy8gYXVjaCBpZGVudGlzY2ggenU6CisgICAgIC8vIEFkZEV4aXQoImxvY2giLCAjJ2xvY2hma3QpOworCisgICAgIHN0YXRpYyBpbnQgbG9jaGZrdChzdHJpbmcgZGlyKSB7CisgICAgICAgaWYgKCEodGhpc19wbGF5ZXIoKS0+UXVlcnlQcm9wKFBfRlJPRykpKSB7CisgICAgICAgICAvLyBLZWluIEZyb3NjaCA9PiBwYXNzdCBuaWNodCEKKyAgICAgICAgIG5vdGlmeV9mYWlsKCJEdSBiaXN0IHp1IGdyb3NzIVxuIik7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgICB9CisgICAgICAgLy8gTWVsZHVuZ2VuIHdlcmRlbiBpbSBtb3ZlKCkgZ2xlaWNoIG1pdGdlZ2ViZW4KKyAgICAgICByZXR1cm4gdGhpc19wbGF5ZXIoKS0+bW92ZSgiL3Jvb20vbG9jaCIsIE1fR08sIDAsCisgICAgICAgICAgICAgICAgICAgICJodWVwZnQgaW5zIExvY2giLCAiaHVlcGZ0IGhlcmVpbiIpOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZEV4aXQoKSwgR2V0RXhpdHMoKQorICAgICBSZW1vdmVFeGl0KCksIFJlbW92ZVNwZWNpYWxFeGl0KCkKKyAgICAgSF9IT09LX0VYSVRfVVNFLCBQX0VYSVRTLCBQX0hJREVfRVhJVFMsIC9zdGQvcm9vbS9leGl0cy5jCisgICAgIGF1c2dhZW5nZQorCiszMS4wMS4yMDE1LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9BZGRTcGVjaWFsSW5mbyBiL2RvYy9sZnVuL0FkZFNwZWNpYWxJbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTk4M2YKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BZGRTcGVjaWFsSW5mbwpAQCAtMCwwICsxLDY0IEBACitBZGRTcGVjaWFsSW5mbygpCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyB2b2lkIEFkZFNwZWNpYWxJbmZvKCBmcmFnZSwgbWVsZHVuZworCQkJICAgWywgaW5kZW50IFssIFtzaWxlbnQgWywgY2FzZWJhc2VkXSBdIF0gKTsKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcvc3RyaW5nKiBmcmFnZQorCVNjaGx1ZXNzZWx0ZXh0KGUpIGF1ZiBkaWUgSW5mb3JtYXRpb25lbiBnZWdlYmVuIHdlcmRlbiBzb2xsZW4uCisgICAgIHN0cmluZy9jbG9zdXJlIGZ1bmN0aW9uCisJTWV0aG9kZW5uYW1lIGltIE5QQy9DbG9zdXJlCisgICAgIHN0cmluZyBpbmRlbnQKKwlUZXh0LCBkZXIgc2ljaCBiZWkgbWVocnplaWxpZ2VuIE1lbGR1bmdlbiB3aWVkZXJob2xlbiBzb2xsLgorICAgICBpbnQvc3RyaW5nIHNpbGVudAorCUlzdCBzaWxlbnQgZ2VzZXR6dCwgc28gZXJmb2xndCBBbnR3b3J0IG51ciBhbiBGcmFnZW5kZW4uCisgICAgIHN0cmluZy9jbG9zdXJlIGNhc2ViYXNlZAorCUZ1bmt0aW9uc25hbWUgb2RlciBDbG9zdXJlIG1pdCBSZXR1cm53ZXJ0IHN0cmluZyBvZGVyIGludC4KKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL25wYy9pbmZvLmMKKworQkVTQ0hSRUlCVU5HOgorICAgICBXZW5uIGVpbiBTcGllbGVyIGVpbiBOUEMgbWl0dGVscyAiZnJhZ2UgPG1vbnN0ZXJuYW1lPiBuYWNoIDxmcmFnZT4iIG5hY2gKKyAgICAgZWluZXIgSW5mb3JtYXRpb24gbWl0IGRlbSBTY2hsdWVzc2VsIGZyYWdlIGZyYWd0LCBzbyB3aXJkIGRpZSBNZXRob2RlCisgICAgICJmdW5jdGlvbiIgZ2VydWZlbi4gRGllIFJ1ZWNrZ2FiZSB3aXJkIGFscyBNZWxkdW5nIGF1c2dlZ2ViZW4uCisKKyAgICAgRnVlciBkaWUgQmVzY2hyZWlidW5nIGRlciB3ZWl0ZXJlbiBQYXJhbWV0ZXIgc2llaGUgbWFuIEFkZEluZm8oTCkuCisKKyAgICAgQWRkU3BlY2lhbEluZm8oa2V5cywgImZ1bmN0aW9uIiwgLi4uKSBlbnRzcHJpY2h0OgorICAgICAtIEFkZEluZm8oa2V5cywgIydmdW5jdGlvbiwgLi4uKSAKKworQkVNRVJLVU5HRU46CisgICAgIERhIEFkZFNwZWNpYWxJbmZvKCkgdW5kIEFkZEluZm8oKSBhdWYgZGllIGdsZWljaGVuIERhdGVuIHp1Z3JlaWZlbiwKKyAgICAga2FubiBtYW4gSW5mb3JtYXRpb25lbiwgZGllIG1pdCBBZGRTcGVjaWFsSW5mbygpIGdlc2V0enQgd3VyZGVuLCBhdWNoCisgICAgIG1pdCBSZW1vdmVJbmZvKCkgZW50ZmVybmVuLiBFcyBnaWJ0IGtlaW4gUmVtb3ZlU3BlY2lhbEluZm8oKS4KKworQkVJU1BJRUxFOgorICAgICAvLyBEYXMgZm9sZ2VuZGUgQmVpc3BpZWwgaXN0IGF1Y2ggdW50ZXIgbWFuIEFkZEluZm8oTCkgenUgZmluZGVuLgorICAgICAjIyMgZHluYW1pc2NoICMjIworICAgICBBZGRTcGVjaWFsSW5mbygoeyJrZWtzIiwia2Vrc2UifSksCisJCSAgICAicXVlcnlfa2Vrc2UiLAkvLyBkZXIgTWV0aG9kZW5uYW1lCisJCSAgICAic2FndDogIik7CisgICAgIC8vIGlzdCB1ZWJyaWdlbnMgZGFzIGdsZWljaGUgd2llOgorICAgICAvLyBzdGF0aWMgc3RyaW5nIHF1ZXJ5X2tla3NlKCk7CisgICAgIC8vIC4uLgorICAgICAvLyBBZGRJbmZvKCh7Imtla3MiLCJrZWtzZSJ9KSwKKyAgICAgLy8JCSMncXVlcnlfa2Vrc2UsCQkvLyBlaW4gVmVyd2VpcyBhdWYgZGllIE1ldGhvZGUKKyAgICAgLy8JCSJzYWd0OiAiKTsKKyAgICAgLi4uCisgICAgIHN0YXRpYyBzdHJpbmcgcXVlcnlfa2Vrc2UoKSB7CisgICAgICBpZihwcmVzZW50KCJrZWtzIikpCisgICAgICAgcmV0dXJuKCJJY2ggaGFiIG5vY2ggd2VsY2hlLiBBZXRzY2ghIik7CisgICAgICByZXR1cm4oIk1lbm5vLiBLZWluZSBtZWhyIGRhISIpOworICAgICB9CisKKyAgICAgLy8gImZyYWdlIG1vbnN0ZXIgbmFjaCBrZWtzIjoKKyAgICAgLy8gLSB3ZW5uIGVzIG5vY2ggS2Vrc2UgaGF0LCBob2VyZW4gYWxsZToKKyAgICAgLy8gICAiRGFzIE1vbnN0ZXIgc2FndDogSWNoIGhhYiBub2NoIHdlbGNoZS4gQWV0c2NoIQorICAgICAvLyAtIHNvbnN0OgorICAgICAvLyAgICJEYXMgTW9uc3RlciBzYWd0OiAiTWVubm8uIEtlaW5lIG1laHIgZGEhCisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZEluZm8oTCksIFJlbW92ZUluZm8oTCkKKworNy5BcHIgMjAwNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkU3BlbGwgYi9kb2MvbGZ1bi9BZGRTcGVsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmM2ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkU3BlbGwKQEAgLTAsMCArMSwxNDkgQEAKK0FkZFNwZWxsKCkKKworRlVOS1RJT046CisgICAgdmFyYXJncyBpbnQgQWRkU3BlbGwoaW50IHJhdGUsIGludCBkYW1hZ2UsIHN0cmluZyBUZXh0Rm9yRW5lbXksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIFRleHRGb3JPdGhlcnMsIHN0cmluZ3xzdHJpbmcqIGRhbV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBmdW5jLCBpbnR8bWFwcGluZyBzcGVsbGFyZykKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbnBjL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICByYXRlICAgICAgICAgIC0gUmVsYXRpdmUgSGFldWZpZ2tlaXQgZGVyIEFud2VuZHVuZyAoKiksCisgICAgICAgICAgICAgICAgICAgIG11c3MgPj0gMCBzZWluCisgICAgZGFtYWdlICAgICAgICAtIERlciBTY2hhZGVuc3dlcnQgZnVlciBEZWZlbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgbXVzcyA+IDAgc2VpbgorICAgIFRleHRGb3JFbmVteSAgLSBUZXh0LCBkZW4gZGVyIEZlaW5kIGVyaGFsdGVuIHNvbGwKKyAgICBUZXh0Rm9yT3RoZXJzIC0gVGV4dCwgZGVuIGFuZGVyZSBpbSBSYXVtIGVyaGFsdGVuIHNvbGxlbgorICAgIGRhbV90eXBlICAgICAgLSBTY2hhZGVuc3R5cChlbikgZnVlciBEZWZlbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6ICh7RFRfTUFHSUN9KSApCisgICAgZnVuYyAgICAgICAgICAtIEZ1bmt0aW9uc25hbWUsIGRpZSBuYWNoIEFud2VuZHVuZyBhdWZnZXJ1ZmVuIHdlcmRlbiBzb2xsCisgICAgICAgICAgICAgICAgICAgIChPcHRpb25hbCwgZ2VydWZlbiBhbiB0aGlzX29iamVjdCgpLCBiZWtvbW10IGFscyBBcmd1bWVudGUKKyAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBlbmVteSwgaW50IHJlYWxfZGFtYWdlLCBzdHJpbmcqIGRhbV90eXBlKQorICAgIHNwZWxsYXJnICAgICAgLSBTcGVsbC1Bcmd1bWVudCBmdWVyIERlZmVuZCgpLCBEZWZhdWx0IGlzdCAiMSIKKworQkVTQ0hSRUlCVU5HOgorICAgIEVybW9lZ2xpY2h0IGVpbmZhY2hlIEFuZ3JpZmZzLVphdWJlcnNwcnVlY2hlIGZ1ZXIgTlBDcy4gRGFzIEF1c2Z1ZWhyZW4gdm9uCisgICAgU3BlbGxzIHZlcnVyc2FjaHQgYmVpIGRlbSBOUEMga2VpbmUgS1AtS29zdGVuLgorCisgICAgTWl0IFBfU1BFTExSQVRFIHdpcmQgZGllIGdlbmVyZWxsZSBXYWhyc2NoZWlubGljaGtlaXQgZGVyIEF1c2Z1ZWhydW5nCisgICAgc29sY2hlciBTcGVsbHMgaW0gSGVhcnRiZWF0IGFuZ2VnZWJlbiwgbWl0ICdyYXRlJyBrYW5uIG1hbiBkaWUgcmVsYXRpdmUKKyAgICBXYWhyc2NoZWlubGljaGtlaXQgZGVyIFNwZWxscyB1bnRlcmVpbmFuZGVyIHN0ZXVlcm4uCisKKyAgICAoKikgUmVsYXRpdmUgSGFldWZpZ2tlaXQgaGVpc3N0LCBkYXNzIHNpY2ggYWxsZSAncmF0ZScgZGVyIFNwZWxscworICAgIGF1ZmFkZGllcmVuIHVuZCBlaW4gZWluemVsbmVzICdyYXRlJyBkYW5uIGluIFJlbGF0aW9uIHp1ciBHZXNhbXRzdW1tZQorICAgIHN0ZWh0LiBELmguIGRyZWkgU3BlbGxzIG1pdCA4MCwgMTAsIDEwIChTdW1tZSAxMDApIGhhYmVuIGRpZSBzZWxiZW4KKyAgICBBdWZydWYtV2FocnNjaGVpbmxpY2hrZWl0ZW4gd2llIGRyZWkgU3BlbGxzIG1pdCAxMjAsIDE1LCAxNSBvZGVyIGRyZWkKKyAgICBTcGVsbHMgbWl0IDE2MCwgMjAsIDIwLgorCisgICAgRWluIFNwZWxsIHdpcmQgaW1tZXIgaW4gZm9sZ2VuZGVyIFJlaWhlbmZvbGdlIGFiZ2VhcmJlaXRldDoKKyAgICAgMS4gRGllIFRleHRlIHdlcmRlbiBhbiBkaWUgQmV0ZWlsaWd0ZW4gYXVzZ2VnZWJlbi4KKyAgICAgMi4gRXMgd2lyZCBnZ2YuIFNwZWxsRGVmZW5kIGdlcnVmZW4gKHdlbm4ga2VpbiBTUF9QSFlTSUNBTF9BVFRBQ0spLgorICAgICAgICBBYmJydWNoIGJlaSBTY2h1dHouCisgICAgIDMuIEltIE9wZmVyIHdpcmQgRGVmZW5kKCkgbWl0IGRlbiBhbmdlZ2ViZW5lbiBXZXJ0ZW4gYXVmZ2VydWZlbi4KKyAgICAgICAgQWJicnVjaCBiZWkgVG9kL1plcnN0b2VydW5nIGRlcyBPcGZlcnMuCisgICAgIDQuIEVpbmUgRnVua3Rpb24sIHNvIGRlZmluaWVydCwgd2lyZCBhdXNnZWZ1ZWhydC4KKworQkVNRVJLVU5HRU46CisgICAgVGV4dEZvck90aGVycyB3aXJkIHZvciBkZXIgQXVzZ2FiZSBkZXIgTWVsZHVuZyBkdXJjaCByZXBsYWNlX3BlcnNvbmFsKCkKKyAgICBnZXNjaGlja3QsIGQuaC4gZXMga29lbm5lbiBQbGF0emhhbHRlciB3aWUgQFdFUjEsIEBXRU1RUDEgdW5kIGFlaG5saWNoZQorICAgIHZlcndlbmRldCB3ZXJkZW4gKHNpZWhlIGF1Y2ggZGllIE1hbnBhZ2Ugdm9uIHJlcGxhY2VfcGVyc29uYWwoKSkuCisgICAgRGEgRXJzZXR6dW5nZW4gbnVyIGZ1ZXIgZGFzIEdlZ25lcm9iamVrdCBiZXJ1ZWNrc2ljaHRpZ3Qgd2VyZGVuLCBrb2VubmVuCisgICAgbnVyIFBsYXR6aGFsdGVyIG1pdCBFbmR6aWZmZXIgMSB2ZXJ3ZW5kZXQgd2VyZGVuLiBEaWUgRXJzZXR6dW5nZW4gd2VyZGVuCisgICAgc28gZ2VzdGV1ZXJ0LCBkYXNzIGRpZSBlaW5nZWZ1ZWd0ZW4gTmFtZW4gbmFjaCBTYXR6YW5mYWVuZ2VuIGF1dG9tYXRpc2NoCisgICAgZ3Jvc3MgZ2VzY2hyaWViZW4gd2VyZGVuLgorICAgIEZydWVoZXIgd3VyZGVuIHN0YXR0IHJlcGxhY2VfcGVyc29uYWwoKSBkaWUgUGxhdHpoYWx0ZXIgQFdFUiwgQFdFU1NFTiwgCisgICAgQFdFTSwgQFdFTiB2ZXJ3ZW5kZXQuIERpZXNlIGZ1bmt0aW9uaWVyZW4gd2VpdGVyaGluLCBzb2xsdGVuIGFiZXIgbmljaHQgCisgICAgbWVociBpbiBuZXVlbSBDb2RlIGJlbnV0enQgd2VyZGVuLgorCisgICAgSW4gZGVyIHZvbiBBZGRTcGVsbCBnZXJ1ZmVuZW4gTWV0aG9kZSAiZnVuYyIga29lbm5lbiBzcGV6aWVsbGVyZQorICAgIFNhY2hlbiBtaXQgZGVtIGFrdHVlbGxlbiBGZWluZCBhbmdlc3RlbGx0IHdlcmRlbiBrb2VubmVuLiBEaWUgTWV0aG9kZQorICAgIGRhcmYgYWxzIFNpY2h0YmFya2VpdHNtb2RpZmlrYXRvciBtYXhpbWFsICIiLCAicHVibGljIiBvZGVyICJzdGF0aWMiCisgICAgKG9ic29sZXQpIGhhYmVuIHVuZCBtdXNzIGltIHNlbGJlbiBPYmpla3QgZGVmaW5pZXJ0IHNlaW4uCisKKyAgICBXaWxsIG1hbiBlaW5lbiBwaHlzaXNjaGVuIEFuZ3JpZmYgYXVzbG9lc2VuLCBNVVNTIDxzcGVsbGFyZz4gZWluIE1hcHBpbmcKKyAgICBtaXQgKFtTUF9QSFlTSUNBTF9BVFRBQ0s6IDFdKSBzZWluLiBCZWkgVWViZXJnZWJlbiBlaW5lciAwIG9kZXIgV2VnbGFzc2VuCisgICAgZGVzIFdlcnRzIHdpcmQgYW4gRGVmZW5kIGRhcyBEZWZhdWx0ICcxJyAoZGEgZXMgU3BlbGxzIHNpbmQpIHVlYmVyZ2ViZW4uCisKKyAgICBXZW5uIGRhbWFnZTw9MCBvZGVyIHJhdGU8MCBvZGVyIGtlaW5lIE1lbGR1bmdlbiB1ZWJlcmdlYmVuIHdlcmRlbiwgd2lyZAorICAgIGRlciBTcGVsbCBOSUNIVCBlaW5nZXRyYWdlbiwgc29uZGVybiBkaWUgRnVua3Rpb24gYnJpY2h0IG1pdCBSdWVja2dhYmUKKyAgICB2b24gMCBhYi4KKworQkVJU1BJRUxFOgorICAgIC8vICMxIEVpbmZhY2hlciBOUEMgbWl0IGRyZWkgU3BlbGxzLCBHZXNhbXRyYXRlID0gMTAwLCBhbHNvIHNpbmQgZGllCisgICAgLy8gICAgUmF0ZW4gZGlyZWt0IGFscyBQcm96ZW50IEF1ZnJ1ZndhaHJzY2hlaW5saWNoa2VpdCBsZXNiYXIuCisgICAgQWRkU3BlbGwoODAsIDQwMCwKKyAgICAgICAgICAgICAiRGVyIEhleGVyIGdyZWlmdCBEaWNoIG1pdCBlaW5lbSBrbGVpbmVuIEZldWVyYmFsbCBhbi5cbiIsCisgICAgICAgICAgICAgIkRlciBIZXhlciBncmVpZnQgQFdFTiBtaXQgZWluZW0ga2xlaW5lbiBGZXVlcmJhbGwgYW4uXG4iLAorICAgICAgICAgICAgICh7RFRfRklSRSwgRFRfTUFHSUN9KSk7CisgICAgQWRkU3BlbGwoMTAsIDgwMCwKKyAgICAgICAgICAgICAiRGVyIEhleGVyIGdyZWlmdCBEaWNoIG1pdCBlaW5lbSByaWVzaWdlbiBGZXVlcmJhbGwgYW4uXG4iLAorICAgICAgICAgICAgICJEZXIgSGV4ZXIgZ3JlaWZ0IEBXRU4gbWl0IGVpbmVtIHJpZXNpZ2VuIEZldWVyYmFsbCBhbi5cbiIsCisgICAgICAgICAgICAgKHtEVF9GSVJFLCBEVF9NQUdJQ30pKTsKKyAgICBBZGRTcGVsbCg4LCAxMDAsCisgICAgICAgICAgICAgIkRlciBIZXhlciBwaWVrc3QgRGlyIGluIGRpZSBBdWdlbiEiLAorICAgICAgICAgICAgICJEZXIgSGV4ZXIgcGlla3N0IEBXRU0gaW4gZGllIEF1Z2VuISIsICh7RFRfUElFUkNFfSksCisgICAgICAgICAgICAgImF1Z2VuX3N0ZWNoZW4iKTsKKyAgICBBZGRTcGVsbCgyLCA1LCAoc3RyaW5nKTAsIChzdHJpbmcpMCwgKHN0cmluZyopMCwgInNhbHRvX21vcnRhbGlzIik7CisKKyAgICAoS2xlaW5lciBGZXVlcmJhbGwgbWl0IDgwJSBXYWhyc2NoZWlubGljaGtlaXQsIHJpZXNpZ2VyIG1pdCAxMCUsCisgICAgICJhdWdlbl9zdGVjaGVuIiBtaXQgOCUsICJzYWx0b19tb3J0YWxpcyIgbWl0IDIlKQorCisgICAgLy8gRGllIEZ1bmt0aW9uICJhdWdlbl9zdGVjaGVuIiBrYW5uIGRhbm4gc28gYXVzc2VoZW46CisgICAgdm9pZCBhdWdlbl9zdGVjaGVuKG9iamVjdCBlbmVteSwgaW50IGRhbWFnZSwgbWl4ZWQgZGFtX3R5cGVzICkgeworICAgICAgaWYgKGRhbWFnZT4xMCAmJiAhZW5lbXktPlF1ZXJ5UHJvcChQX0JMSU5EKSkgeworICAgICAgICBlbmVteS0+U2V0UHJvcChQX0JMSU5ELCAxKTsKKyAgICAgICAgaWYoZW5lbXktPlF1ZXJ5UHJvcChQX0JMSU5EKSkKKyAgICAgICAgICB0ZWxsX29iamVjdChlbmVteSwgIkR1IGJpc3QgbnVuIGJsaW5kIVxuIik7CisgICAgICB9CisgICAgfQorCisgICAgLy8gWnVyIEZ1bmt0aW9uICJzYWx0b19tb3J0YWxpcyIgZ2lidCBlcyBrZWluZSBNZWxkdW5nZW4sIGRlbm5vY2gKKyAgICAvLyB3aXJkIERlZmVuZCBtaXQ6IGVuZW15LT5EZWZlbmQoNSwgKHtEVF9NQUdJQ30pLCAxLCB0aGlzX29iamVjdCgpKQorICAgIC8vIGdlcnVmZW4hCisgICAgdm9pZCBzYWx0b19tb3J0YWxpcyhvYmplY3QgZW5lbXksIGludCBkYW1hZ2UsIG1peGVkIGRhbV90eXBlcyApIHsKKyAgICAgIC8vIGRlbSBnZW5laWd0ZW4gTGVzZXIgdWViZXJsYXNzZW4sIGRlbiBHZWduZXIgenUgdG9ldGVuCisgICAgfQorCisgICAgLy8gIzIgUGh5c2lzY2hlIEFuZ3JpZmZlOiBkaWUgUnVlc3R1bmdlbiBzb2xsZW4gYmVydWVja3NpY2h0aWd0IHdlcmRlbiEKKyAgICAvLyAgICBTUF9QSFlTSUNBTF9BVFRBQ0sgbXVzcyBpbiBlaW5lbSBNYXBwaW5nIGF1ZiAxIGdlc2V0enQgd2VyZGVuLAorICAgIC8vICAgIGRhbWl0IFJ1ZXN0dW5nZW4gcGh5c2lzY2ggd2lya2VuIChhbnNvbnN0ZW4gd2VyZGVuIG51ciBpaHJlCisgICAgLy8gICAgRGVmZW5kRnVuY3MoKSBhdXNnZXdlcnRldCkuIEVzIG11c3MgYXVjaCBlaW5lIHBoeXNpc2NoZSBTY2hhZGVuc2FydAorICAgIC8vICAgIGVudGhhbHRlbiBzZWluIQorICAgIC8vICAgIFNwZWxsRGVmZW5kKCkgd2lyZCBiZWkgZGllc2VtIEZsYWcgbmljaHQgbWVociBhbSBHZWduZXIgZ2VydWZlbi4KKyAgICBBZGRTcGVsbCgxMDAsIDIwMCtyYW5kb20oMjAwKSwKKyAgICAgICJEaWUga2xlaW5lIFJhdHRlIGJlaXNzdCBEaWNoIVxuIiwKKyAgICAgICJAV0VSIHdpcmQgdm9uIGVpbmVyIGtsZWluZW4gUmF0dGUgZ2ViaXNzZW4hXG4iLAorICAgICAgKHtEVF9QSUVSQ0UsIERUX1BPSVNPTn0pLCAoc3RyaW5nKTAsCisgICAgICAoW1NQX1BIWVNJQ0FMX0FUVEFDSzoxXSkpOworCisgICAgLy8gIzMgU2VsZWt0aXZlIHBoeXNpc2NoZSBBbmdyaWZmZSAoc2llaGUgYXVjaCBtYW4gRGVmZW5kX2JzcCk6CisgICAgLy8gICAgV2lsbCBtYW4gZXJyZWljaGVuLCBkYXNzIGVpbmlnZSBSdWVzdHVuZ2VuIHdpcmtlbiwgYW5kZXJlIGFiZXIKKyAgICAvLyAgICBuaWNodCBvZGVyIG51ciB0ZWlsd2Vpc2UsIGthbm4gbWFuIGRhcyB1ZWJlciBkaWUgU3BlbGxwYXJhbWV0ZXIKKyAgICAvLyAgICBhdXNmdWVocmxpY2ggc3RldWVybjoKKworICAgIC8vIGVyc3RtYWwgZnVlciBhbGxlIFJ1ZXN0dW5nc2FydGVuIGVpbmVuIFNjaHV0eiB2b24gMCUgZWluc3RlbGxlbjoKKyAgICBtYXBwaW5nIGFybW91cnMgPSBtYXBfaW5kaWNlcyhWQUxJRF9BUk1PVVJfQ0xBU1MsICMnISk7CisgICAgYXJtb3Vyc1tBVF9UUk9VU0VSU10gPSAxMjA7ICAvLyAxMjAlIFNjaHV0eiBkdXJjaCBIb3NlbgorICAgIGFybW91cnNbQVRfQk9PVF0gPSAzMDsgICAgICAgLy8gIDMwJSBTY2h1dHogZHVyY2ggU3RpZWZlbAorCisgICAgQWRkU3BlbGwoMjAsMjAwK3JhbmRvbSgyMDApLAorICAgICAgIkRpZSBrbGVpbmUgUmF0dGUgYmVpc3N0IERpciBibGl0enNjaG5lbGwgaW4gZGllIFdhZGUhXG4iLAorICAgICAgIkBXRVIgd2lyZCB2b24gZWluZXIga2xlaW5lbiBSYXR0ZSBpbiBkaWUgV2FkZSBnZWJpc3NlbiFcbiIsCisgICAgICAoe0RUX1BJRVJDRSwgRFRfUE9JU09OfSksIChzdHJpbmcpMCwKKyAgICAgIChbU1BfUEhZU0lDQUxfQVRUQUNLOjEsIFNQX05PX0FDVElWRV9ERUZFTlNFOjEsCisgICAgICAgIFNQX1JFRFVDRV9BUk1PVVI6IGFybW91cnNdKSk7CisKKyAgICAvLyBTUF9OT19BQ1RJVkVfREVGRU5TRSA9IDEgc2NoYWx0ZXQgYWt0aXZlIEFid2VociAoS2FyYXRlL0tsZXJ1cykgYWIKKyAgICAvLyBTUF9SRURVQ0VfQVJNT1VSIGVudGhhZWx0IGVpbmUgTGlzdGUgdm9uIFJ1ZXN0dW5nc3R5cGVuIG1pdCBpaHJlbgorICAgIC8vIG5ldWVuIFdpcmt1bmdzZ3JhZGVuIGluIFByb3plbnQuIE5pY2h0IGVudGhhbHRlbmUgUnVlc3R1bmdlbiBoYWJlbgorICAgIC8vIHdlaXRlcmhpbiAxMDAlIFNjaHV0endpcmt1bmcuCisKK1NJRUhFIEFVQ0g6CisgICAgIFNvbnN0aWdlczogIFNwZWxsQXR0YWNrLCBTcGVsbERlZmVuZCwgRGVmZW5kLCBRdWVyeURlZmVuZCwgU2VsZWN0RW5lbXkKKyAgICAgICAgICAgICAgICAgcmVwbGFjZV9wZXJzb25hbAorICAgICBQcm9wZXJ0aWVzOiBQX0RJU0FCTEVfQVRUQUNLLCBQX1NQRUxMUkFURSwgUF9BR0dSRVNTSVZFCisgICAgIEFid2VocjogICAgIERlZmVuZCwgRGVmZW5kX2JzcCwgU3BlbGxEZWZlbmQKKyAgICAgTWV0aG9kZW46ICAgbW9kaWZpZXJzCisKKzExLjEyLjIwMTUgQXJhdGhvcm4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FkZFRvTWVudSBiL2RvYy9sZnVuL0FkZFRvTWVudQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQwN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkVG9NZW51CkBAIC0wLDAgKzEsMjMzIEBACitBZGRUb01lbnUoKQorCitGVU5LVElPTjoKKyAgICAgICAgdmFyYXJncyBzdHJpbmcgQWRkVG9NZW51KHN0cmluZyAgbWVudWV0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4ZWQgICBpZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nIG1pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4ZWQgICByYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4ZWQgICBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhlZCAgIHJlZnJlc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhlZCAgIGRlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4ZWQgICBkX21zZyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3N0ZC9wdWIuYworCitBUkdVTUVOVEU6CisgICAgICAgIERpZSBFcmxhZXV0ZXJ1bmcgZGVyIFBhcmFtZXRlciBiZXNjaHJhZW5rdCBzaWNoIGltIEZvbGdlbmRlbgorICAgICAgICB6dW5hZWNoc3QgYXVmIGRpZSBHcnVuZGZ1bmt0aW9uYWxpdGFldCBiZWkgVmVyd2VuZHVuZyBmZXN0ZXIKKyAgICAgICAgV2VydGUuIERpZSBNb2VnbGljaGtlaXRlbiB6dXIgUmVhbGlzaWVydW5nIGR5bmFtaXNjaGVuIFZlcmhhbHRlbnMKKyAgICAgICAgc2luZCBpbiBkZW4gRnVzc25vdGVuIHp1IGRlbiBlaW56ZWxuZW4gUGFyYW1ldGVybiBiZXNjaHJpZWJlbi4KKworICAgICAgICBtZW51ZXRleHQKKyAgICAgICAgICBEZXIgVGV4dCBzdGVodCBhbHMga3VyemUgQmVzY2hyZWlidW5nIGltIE1lbnVlLgorICAgICAgICBpZHMKKyAgICAgICAgICBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncywgbWl0IGRlbmVuIHNpY2ggZGllIFNwZWlzZSBiencuIGRhcworICAgICAgICAgIEdldHJhZW5rIGJlaW0gQmVzdGVsbGVuIGFuc3ByZWNoZW4gbGFlc3N0LgorICAgICAgICBtaW5mbworICAgICAgICAgIE1hcHBpbmcgbWl0IEVpbnRyYWVnZW4gZnVlcjoKKyAgICAgICAgICBQX0hQICAgICAgTFAtSGVpbHVuZyBpbiBQdW5rdGVuIFsqXQorICAgICAgICAgIFBfU1AgICAgICBLUC1IZWlsdW5nIGluIFB1bmt0ZW4gWypdCisgICAgICAgICAgUF9GT09EICAgIFNhZXR0aWd1bmdzd2lya3VuZyBkZXIgU3BlaXNlIFsqXQorICAgICAgICAgIFBfRFJJTksgICBTYWV0dGlndW5nc3dpcmt1bmcgZGVzIEdldHJhZW5rcyBbKl0KKyAgICAgICAgICBQX0FMQ09IT0wgQWxrb2hvbGdlaGFsdCBkZXMgR2V0cmFlbmtzIFsqXQorICAgICAgICAgIFBfVkFMVUUgICBQcmVpcyBkZXIgU3BlaXNlIGJ6dy4gZGVzIEdldHJhZW5rcyBbKl0KKyAgICAgICAgcmF0ZSBbKl0KKyAgICAgICAgICBIZWlscmF0ZSBpbiBQdW5rdGVuIHBybyBIZWFydEJlYXQuCisgICAgICAgIG1zZyBbKipdCisgICAgICAgICAgTWVsZHVuZyBiZWltIEVzc2VuOgorICAgICAgICAgIEFycmF5IG1pdCAyIFN0cmluZ3M6ICgxKSBmdWVyIEVtcGZhZW5nZXIsICgyKSBmdWVyIEFuZGVyZS4KKyAgICAgICAgICBWZXJmdWVnYmFyZSBQbGF0emhhbHRlciBzaW5kIHdlaXRlciB1bnRlbiBpbSBBYnNjaG5pdHQgIkJlaXNwaWVsIgorICAgICAgICAgIGRva3VtZW50aWVydC4KKyAgICAgICAgcmVmcmVzaAorICAgICAgICAgIE1hcHBpbmcgbWl0IEVpbnRyYWVnZW4gZnVlcjoKKyAgICAgICAgICAgIFBSX1VTRVIgKEtvbnRpbmdlbnQgZnVlciBlaW56ZWxuZW4gU3BpZWxlcikgWypdCisgICAgICAgICAgICBQUl9BTEwgIChadXNhdHprb250aW5nZW50IGZ1ZXIgYWxsZSkgWypdCisgICAgICAgICAgQWx0ZXJuYXRpdjogMCBmdWVyIHVuYmVncmVuenRlIFZlcmZ1ZWdiYXJrZWl0CisgICAgICAgICAgRWluZW0gS2V5IG11ZXNzZW4gZGFiZWkgendlaSBXZXJ0ZSB6dWdlb3JkbmV0IHdlcmRlbjoKKyAgICAgICAgICBEZXIgRXJzdGUgZ2lidCBkaWUgSG9laGUgZGVzIEtvbnRpbmdlbnRzIGFuLCBkZXIgWndlaXRlIGxlZ3QKKyAgICAgICAgICBmZXN0LCBhbGxlIHdpZXZpZWwgcmVzZXQoKXMgZGFzIEtvbnRpbmdlbnQgd2llZGVyIGF1ZmdlZnVlbGx0CisgICAgICAgICAgd2lyZC4KKyAgICAgICAgICBWZXJ3ZW5kdW5nIGRlcyBNYXBwaW5ncyBlcmZvcmRlcnQgSW5rbHVkaWVyZW4gdm9uIHB1Yi5oLgorICAgICAgICBkZWxheSBbKl0KKyAgICAgICAgICBaYWhsIGRlciBTZWt1bmRlbiwgdW0gZGllIHZlcnpvZWdlcnQgZGllIEhlaWx1bmcgZWludHJpdHQsCisgICAgICAgICAgei5CLiB3ZWlsIGRhcyBFc3NlbiBlcnN0IHp1YmVyZWl0ZXQgd2VyZGVuIG11c3MuCisgICAgICAgIGRfbXNnIFsqKl0KKyAgICAgICAgICBNZWxkdW5nIGJlaW0gQmVzdGVsbGVuLCBmYWxscyBkaWUgSGVpbHVuZyB2ZXJ6b2VnZXJ0IHdpcmQKKyAgICAgICAgICBBcnJheSBtaXQgMiBTdHJpbmdzOiAoMSkgZnVlciBFbXBmYWVuZ2VyLCAoMikgZnVlciBBbmRlcmUuCisKKyAgICAgICAgICAKKyAgICAgICAgWypdIERpZXNlciBQYXJhbWV0ZXIga2FubiBzdGF0dCBlaW5lcyBmZXN0ZW4gWmFobGVud2VydHMgbWl0IAorICAgICAgICAgICAgZm9sZ2VuZGVuIFdlcnRlbiBnZWZ1ZWxsdCB3ZXJkZW46CisKKyAgICAgICAgICAgIDEpIE1hcHBpbmcgPHJhY2Vtb2RpZmllcj4gZGVyIEZvcm06CisgICAgICAgICAgICAgICAgICAgKFsgMCA6IDxzdGFuZGFyZHdlcnQ+ICwKKyAgICAgICAgICAgICAgICAgICAgPHJhc3NlXzE+IDogPHdlcnRfMT4sIAorICAgICAgICAgICAgICAgICAgICAuLi4gLCAKKyAgICAgICAgICAgICAgICAgICAgPHJhc3NlX24+IDogPHdlcnRfbj4gXSkuCisgICAgICAgICAgICAgICBEaWUgRWludHJhZWdlIGluIGRpZXNlbSBNYXBwaW5nIHdlcmRlbiBnZWdlbiBkaWUgUmFzc2UgZGVzCisgICAgICAgICAgICAgICBiZXN0ZWxsZW5kZW4gU3BpZWxlcnMgZ2VwcnVlZnQgdW5kIGVudHNwcmVjaGVuZCBkaWUgCisgICAgICAgICAgICAgICB6dWdlaG9lcmlnZW4gV2VydGUgdmVyd2VuZGV0LgorICAgICAgICAgICAgMikgc3RyaW5nIDxmdW5jPjogQXVmcnVmIGVyZm9sZ3QgbWl0dGVscyAKKyAgICAgICAgICAgICAgICAgY2FsbF9vdGhlcih0aGlzX29iamVjdCgpLCBmdW5jLCBlbXBmYWVuZ2VyKTsKKyAgICAgICAgICAgICAgIGdlcnVmZW4gKGFiZXI6IHNpZWhlIEhpbndlaXNlKS4KKyAgICAgICAgICAgIDMpIGNsb3N1cmUgPGZ1bmM+OiBBdWZydWYgZXJmb2xndCBtaXR0ZWxzCisgICAgICAgICAgICAgICAgIGZ1bmNhbGwoZnVuYywgZW1wZmFlbmdlcik7CisgICAgICAgICAgICA0KSBBcnJheSBkZXIgRm9ybSAgKHtzdHJpbmcgPG9iaj4sIHN0cmluZyA8ZnVuYz59KSBvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHtvYmplY3QgPG9iaj4sIHN0cmluZyA8ZnVuYz59KQorICAgICAgICAgICAgICAgQXVmcnVmIGVyZm9sZ3QgbWl0dGVscworICAgICAgICAgICAgICAgICBjYWxsX290aGVyKG9iaiwgZnVuYywgZW1wZmFlbmdlcik7CisgICAgICAgICAgICAgICAoYWJlcjogc2llaGUgSGlud2Vpc2UpLiA8b2JqPiBpc3QgZm9sZ2xpY2ggYWxzIE9iamVrdHBvaW50ZXIgCisgICAgICAgICAgICAgICBvZGVyIGRlc3NlbiBvYmplY3RfbmFtZSgpIGFuenVnZWJlbi4gPGZ1bmM+IHdpcmQgbWl0dGVscyAKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uX2V4aXN0cygpIGF1ZiBFeGlzdGVueiB1ZWJlcnBydWVmdC4KKworICAgICAgICAgICAgICAgSElOV0VJU0U6IGltIEZhbGxlIHZvbiBMaWVmZXJ2ZXJ6b2VnZXJ1bmcgKCJkZWxheSIpIHVuZAorICAgICAgICAgICAgICAgUHJlaXMgKFBfVkFMVUUpIHdpcmQgYmVpIGFsbGVuIEZ1bmt0aW9uc2F1ZnJ1ZmVuIE5JQ0hUIGRlciAKKyAgICAgICAgICAgICAgIEVtcGZhZW5nZXIsIHNvbmRlcm4gZGVyIFphaGxlciB1ZWJlcmdlYmVuLgorICAgICAgICAgICAgICAgSW0gRmFsbGUgZGVyIEtvbnRpbmdlbnQtTGlzdGUgKCJyZWZyZXNoIikga2FubiBudXIgZGllCisgICAgICAgICAgICAgICB2ZXJmdWVnYmFyZSBNZW5nZSBtb2RpZml6aWVydCB3ZXJkZW4sIG5pY2h0IGRpZSBaZWl0CisgICAgICAgICAgICAgICBiaXMgenVtIFdpZWRlci1BdWZmdWVsbGVuLgorCisgICAgICAgIFsqKl0gWnVyIEVyemV1Z3VuZyB2YXJpYWJsZXIgTWVsZHVuZ2VuIGtvZW5uZW4gZm9sZ2VuZGUgV2VydGUKKyAgICAgICAgICAgICBlaW5nZXRyYWdlbiB3ZXJkZW46CisKKyAgICAgICAgICAgICAxKSBjbG9zdXJlIDxmdW5jPjogQXVmcnVmIGVyZm9sZ3QgbWl0dGVscyAKKyAgICAgICAgICAgICAgICAgIGZ1bmNhbGwoZnVuYywgemFobGVyLCBlbXBmYWVuZ2VyLCBpZGVudCwgbWluZm8pOworICAgICAgICAgICAgIDIpIHN0cmluZyA8ZnVuYz46IEF1ZnJ1ZiBlcmZvbGd0IG1pdHRlbHMKKyAgICAgICAgICAgICAgICAgIGNhbGxfb3RoZXIodGhpc19vYmplY3QoKSwgZnVuYywgemFobGVyLCBlbXBmYWVuZ2VyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQsIG1pbmZvKTsKKyAgICAgICAgICAgICA8ZnVuYz4gYmVrb21tdCBaYWhsZXIgdW5kIEVtcGZhZW5nZXIgYWxzIE9iamVrdHBvaW50ZXIsCisgICAgICAgICAgICAgaWRlbnQgYWxzIFN0cmluZyB1bmQgbWluZm8gYWxzIE1hcHBpbmcgbWl0IGRlbiAKKyAgICAgICAgICAgICBqZXdlaWxpZ2VuIEhlaWx3ZXJ0ZW4gdWViZXJnZWJlbi4gbWluZm8gZW50c3ByaWNodCBoaWVyYmVpCisgICAgICAgICAgICAgZGVuIERhdGVuLCBkaWUgYWxzIGRyaXR0ZXIgUGFyYW1ldGVyIGFuIEFkZFRvTWVudSgpCisgICAgICAgICAgICAgdWViZXJnZWJlbiB3dXJkZW4uCisgICAgICAgICAgICAgSElOV0VJUzogd2VubiBpbiBkYXMgbWluZm8tTWFwcGluZyBrZWluZSBpbnQtRmVzdHdlcnRlIAorICAgICAgICAgICAgIGVpbmdldHJhZ2VuIHd1cmRlbiwgd2VyZGVuIGRpZXNlIGdlbWFlc3MgZGVuIFJlZ2VsbiB1bnRlciBbKl0KKyAgICAgICAgICAgICBnZXBydWVmdDsgRnVua3Rpb25lbi9DbG9zdXJlcyB3ZXJkZW4gZ2dmLiBhdXNnZXdlcnRldCB1bmQgCisgICAgICAgICAgICAgZGVyZW4gUnVlY2tnYWJld2VydGUgYW4gZGllIEZ1bmt0aW9uIDxmdW5jPiB1ZWJlcmdlYmVuLgorICAgICAgICAgICAgIFdJQ0hUSUc6IERpZSBSdWVja2dhYmV3ZXJ0ZSBkZXIgRnVua3Rpb24gd2VyZGVuIG5pY2h0IAorICAgICAgICAgICAgIGF1c2dld2VydGV0LiBKZWRlciwgZGVyIGFuc3RhdHQgZWluZXIgTWVsZHVuZyBlaW5lbiAKKyAgICAgICAgICAgICBGdW5rdGlvbnNhdWZydWYgcHJvZ3JhbW1pZXJ0LCBtdXNzIGZ1ZXIgZGllIEF1c2dhYmUgZGVyCisgICAgICAgICAgICAgTWVsZHVuZ2VuIHNlbGJzdCBzb3JnZW4uCisgICAgICAgICAgICAgICAgICAgCitCRVNDSFJFSUJVTkc6CisgICAgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24gd2VyZGVuIFNwZWlzZW4gb2RlciBHZXRyYWVua2UgaW4gZGllIEthcnRlCisgICAgICAgIHZvbiBLbmVpcGVuIHVuZCBSZXN0YXVyYW50cyBlaW5nZWZ1ZWd0LgorCitSVUVDS0dBQkVXRVJUOgorICAgICAgICBSdWVja2dhYmV3ZXJ0IGlzdCBlaW4gU3RyaW5nICJtZW51ZW50cnklZCIsIHdvYmVpICVkIGVpbmUgTnVtbWVyCisgICAgICAgIGlzdCwgZGllIGRhcnVlYmVyIEF1c2t1bmZ0IGdpYnQsIGRlbiB3aWV2aWVsdGVuIEVpbnRyYWcgaW4gZGllCisgICAgICAgIGludGVybmUgS2FydGUgZGVyIEtuZWlwZSBkaWVzZSBTcGVpc2UgYnp3LiBkaWVzZXMgR2V0cmFlbmsKKyAgICAgICAgZGFyc3RlbGx0LiBJbSBQcmluemlwIGhhbmRlbHQgZXMgc2ljaCBiZWkgZGVtIFN0cmluZyB1bSBlaW5lbiBLZXkKKyAgICAgICAgZnVlciBlaW4gTWFwcGluZywgaW4gZGVtIGRpZSBTcGVpc2VuIGJ6dy4gR2V0cmFlbmtlIGdlc3BlaWNoZXJ0CisgICAgICAgIHNpbmQuCisKK0JFTUVSS1VOR0VOOgorICAgICAgICBEaWUgYWVsdGVyZW4gRnVua3Rpb25lbiAnQWRkRHJpbmsnIGJ6dy4gJ0FkZEZvb2QnIHdlcmRlbiB6d2FyIG1pdGhpbGZlCisgICAgICAgIGRpZXNlciBtYWVjaHRpZ2VyZW4gRnVua3Rpb24gYXVzIEdydWVuZGVuIGRlciBBYndhZXJ0c2tvbXBhdGliaWxpdGFldAorICAgICAgICBzaW11bGllcnQsIHNvbGxlbiBhYmVyIG5pY2h0IG1laHIgZWluZ2VzZXR6dCB3ZXJkZW4uCisgICAgICAgIAorICAgICAgICBGdWVyIGRhcyBUZXN0ZW4gZGVyIEtuZWlwZSBnaWJ0IGVzIGluIGplZGVyIEtuZWlwZSBkZW4gQmVmZWhsCisgICAgICAgICdwdWJpbml0Jy4gSGllcm1pdCBsYXNzZW4gc2ljaCBkaWUgU3BlaXNlbiB1bmQgR2V0cmFlbmtlIGR1cmNoLQorICAgICAgICBjaGVja2VuLiBTdGVodCBpbiBkZXIgQXVzZ2FiZSBiZWkgZWluZW0gR2V0cmFlbmsvRXNzZW4gZWluIEZBSUwsCisgICAgICAgIHNvIHdpcmQgZGllIGVudHNwcmVjaGVuZGUgU3BlaXNlIChvZGVyIEdldHJhZW5rKSBOSUNIVCBhbiBTcGllbGVyCisgICAgICAgIHZlcmthdWZ0LiBBdXNuYWhtZW4gZnVlciBTcGVpc2VuL0dldHJhZW5rZSBtaXQgaG9laGVyZW4gbWF4aW1hbGVuCisgICAgICAgIFdlcnRlbiBzaW5kIGR1cmNoIEJhbGFuY2UtRU0genUgZ2VuZWhtaWdlbi4KKworQkVJU1BJRUw6CisKKyAgICAgICAgaW5jbHVkZSA8cHViLmg+CisKKyAgICAgICAgY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICBBZGRUb01lbnUoIidPcGEncyBEcmFjaGVua2V1bGUnIiwoeyJkcmFjaGVua2V1bGUiLCJrZXVsZSJ9KSwKKyAgICAgICAgKFtQX0hQOjYzLFBfU1A6NjMsUF9GT09EOjksUF9WQUxVRTo1MjhdKSwgNSwKKyAgICAgICAgKHsiRHUgaXNzdCBkaWUgS2V1bGUgbWl0IGVpbmVtIHNjaGxlY2h0ZW4gR2V3aXNzZW4uIiwKKyAgICAgICAgICAiJiYgaXNzdCBkaWUgS2V1bGUgbWl0IGVpbmVtIHNjaGxlY2h0ZW4gR2V3aXNzZW4uIn0pLAorICAgICAgICAoWyBQUl9VU0VSIDogNDsgMSAsIFBSX0FMTCA6IDIwOyAzIF0pLCA5LAorICAgICAgICAoeyJEZXIgdW5zaWNodGJhcmUgS25laXBpZXIgc2NobmVpZGV0IGVpbmVtIFJlbnRuZXIgZWluIGdyb3NzZXMgIgorICAgICAgICAgICJTdHVlY2sgYXVzIGRlc3NlbiBLZXVsZSB1bmQgYmVyZWl0ZXQgc2llIERpciB6dS4gS29taXNjaCwgbXVzcyAiCisgICAgICAgICAgIndvaGwgZWluIFRpcHBmZWhsZXIgYXVmIGRlciBLYXJ0ZSBnZXdlc2VuIHNlaW4uIiwKKyAgICAgICAgICAiRGVyIHVuc2ljaHRiYXJlIEtuZWlwaWVyIHNjaG5laWRldCBlaW5lbSBoaWxmbG9zZW4gT3BhIGVpbiAiCisgICAgICAgICAgIlN0dWVjayBhdXMgZGVzc2VuIEtldWxlIHVuZCBicmFldCBkaWVzZSBmdWVyICYmLiJ9KSApOworICAgICAgICB9CisKKyAgICAgICAgMSkgTmFtZSBkZXIgU3BlaXNlIChkZXMgR2V0cmFlbmtzKSBhdWYgZGVyIEthcnRlIChiZWkgbWVudWUpLgorCisgICAgICAgICAgIEFkZFRvTWVudSgiJ09wYSdzIERyYWNoZW5rZXVsZSciLCAgICAgCisKKyAgICAgICAgMikgaWRzIG1pdCBkZW5lbiBzaWNoIGJlc3RlbGxlbiBsYWVzc3QgKHouQi4gImthdWZlIGtldWxlIikuCisKKyAgICAgICAgICAgKHsiZHJhY2hlbiIsImRyYWNoZW5rZXVsZSIsImtldWxlIn0pLAorCisgICAgICAgIDMpIEhlaWx1bmcgZnVlciBMUCB1bmQgS1AsIFNhZXR0aWd1bmcgKFBfRk9PRCBvZGVyIFBfRFJJTkssCisgICAgICAgICAgIFBfQUxDT0hPTCBuYWNoIEJlbGllYmVuIHNldHplbiksIFByZWlzIChQX1ZBTFVFKS4gCisgICAgICAgICAgIEhQIHVuZCBTUCBtdWVzc2VuIG5pY2h0IGdsZWljaCBzZWluLiBTcGVpc2VuIHVuZCBHZXRyYWVua2UsCisgICAgICAgICAgIGRpZSBudXIgZWluZXMgdm9uIGJlaWRlbiBoZWlsZW4sIHNpbmQgYXVjaCBtb2VnbGljaC4KKworICAgICAgICAgICAoW1BfSFA6NjMsUF9TUDo2MyxQX0ZPT0Q6OSxQX1ZBTFVFOjUyOF0pLAorCisgICAgICAgIDQpIEhlaWx1bmcgcHJvIEhlYXJ0YmVhdCAoaW4gZGllc2VtIEJlaXNwaWVsIGplIDUgS1AvTFApLgorICAgIAorICAgICAgICAgICA1LAorCisgICAgICAgIDUpIE1lbGR1bmdlbiBmdWVyIFNwaWVsZXIgdW5kIFVtc3RlaGVuZGUgZGllIGJlaSBHZW51c3MgYXVzZ2VnZS0KKyAgICAgICAgICAgYmVuIHdlcmRlbiAoYWxzbyBOSUNIVCBkZXIgQmVzdGVsbC1UZXh0KS4KKworICAgICAgICAgICAoeyJEdSBpc3N0IGRpZSBLZXVsZSBtaXQgZWluZW0gc2NobGVjaHRlbiBHZXdpc3Nlbi4iLAorICAgICAgICAgICAgICImJiBpc3N0IGRpZSBLZXVsZSBtaXQgZWluZW0gc2NobGVjaHRlbiBHZXdpc3Nlbi4ifSksCisKKyAgICAgICAgICAgVmVyZnVlZ2JhcmUgUGxhdHpoYWx0ZXIgc2luZCAocGwgPSB0aGlzX3BsYXllcigpKToKKworICAgICAgICAgICAmJiAgLSBwbC0+bmFtZShXRVIsMikKKyAgICAgICAgICAgJjEmIC0gcGwtPm5hbWUoV0VSLDIpCisgICAgICAgICAgICYyJiAtIHBsLT5uYW1lKFdFU1NFTiwyKQorICAgICAgICAgICAmMyYgLSBwbC0+bmFtZShXRU0sMikKKyAgICAgICAgICAgJjQmIC0gcGwtPm5hbWUoV0VOLDIpCisgICAgICAgICAgICYxIyAtIGNhcGl0YWxpemUocGwtPm5hbWUoV0VSLDIpKQorICAgICAgICAgICAmMiMgLSBjYXBpdGFsaXplKHBsLT5uYW1lKFdFU1NFTiwyKSkKKyAgICAgICAgICAgJjMjIC0gY2FwaXRhbGl6ZShwbC0+bmFtZShXRU0sMikpCisgICAgICAgICAgICY0IyAtIGNhcGl0YWxpemUocGwtPm5hbWUoV0VOLDIpKQorICAgICAgICAgICAmISAgLSBwbC0+UXVlcnlQcm9ub3VuKFdFUikKKyAgICAgICAgICAgJjUmIC0gcGwtPlF1ZXJ5UHJvbm91bihXRSk7CisgICAgICAgICAgICY2JiAtIHBsLT5RdWVyeVByb25vdW4oV0VTU0VOKQorICAgICAgICAgICAmNyYgLSBwbC0+UXVlcnlQcm9ub3VuKFdFTSkKKyAgICAgICAgICAgJjgmIC0gcGwtPlF1ZXJ5UHJvbm91bihXRU4pCisgICAgICAgICAgICY1IyAtIGNhcGl0YWxpemUocGwtPlF1ZXJ5UHJvbm91bihXRVIpKQorICAgICAgICAgICAmNiMgLSBjYXBpdGFsaXplKHBsLT5RdWVyeVByb25vdW4oV0VTU0VOKSkKKyAgICAgICAgICAgJjcjIC0gY2FwaXRhbGl6ZShwbC0+UXVlcnlQcm9ub3VuKFdFTSkpCisgICAgICAgICAgICY4IyAtIGNhcGl0YWxpemUocGwtPlF1ZXJ5UHJvbm91bihXRU4pKQorICAgICAgICAgIAorICAgICAgICA2KSBEaWUgU3BlaXNlIGlzdCBpbiBpaHJlciBBbnphaGwgYmVncmVuenQuIEZ1ZXIgamVkZW4gU3BpZWxlcgorICAgICAgICAgICBzaW5kIDQgS2V1bGVuIHBybyByZXNldCgpIGRhLiBBdXNzZXJkZW0gZ2lidCBlcyBub2NoIGVpbmVuCisgICAgICAgICAgICJOb3R2b3JyYXQiIHZvbiAyMCBLZXVsZW4sIGRlciBhbGxlIDMgcmVzZXQoKXMgYXVmZ2VmdWVsbHQKKyAgICAgICAgICAgd2lyZC4gQXVzIGRpZXNlbSAoc28gbm9jaCB2b3JoYW5kZW4pIHdlcmRlbiBkaWUgU3BpZWxlcgorICAgICAgICAgICB2ZXJzb3JndCwgd2VubiBpaHIgInBlcnNvZW5saWNoZXIgVm9ycmF0IiBhdWZnZWJyYXVjaHQgaXN0LgorCisgICAgICAgICAgIChbIFBSX1VTRVIgOiA0OyAxICwgUFJfQUxMIDogMjA7IDMgXSksCisgICAgICAgICAgIAorICAgICAgICAgICBISU5XRUlTOiBiZWkgQmVudXR6dW5nIGRlcyBNYXBwaW5ncyBtdXNzIDxwdWIuaD4gaW5rbHVkaWVydCAKKyAgICAgICAgICAgd2VyZGVuIQorICAgICAgICAgICAKKyAgICAgICAgICAgV2VubiBtYW4ga2VpbmUgcmVzZXQtYWJoYWVuZ2lnZW4gU3BlaXNlbiBoYWJlbiBtb2VjaHRlLCB0cmFlZ3QKKyAgICAgICAgICAgbWFuIGhpZXIgZWluZSAwIGVpbi4KKworICAgICAgICA3KSBEaWUgWmFobCBpc3QgZGllIFdhcnRlemVpdCBpbiBTZWt1bmRlbiwgZGllIGRlciBXaXJ0IHouQi4gZnVlcgorICAgICAgICAgICBkaWUgWnViZXJlaXR1bmcgdW5kIEF1c2xpZWZlcnVuZyBhbiBkZW4gU3BpZWxlciBicmF1Y2h0LgorCisgICAgICAgICAgIDksCisgICAgICAgICAKKyAgICAgICAgOCkgTGV0enRlbmRsaWNoIGRpZSBNZWxkdW5nZW4gYW4gU3BpZWxlciB1bmQgVW1zdGVoZW5kZSwgZGllIGJlaSBCZS0KKyAgICAgICAgICAgc3RlbGx1bmcgKGhpZXIgJ2thdWZlIGtldWxlJykgYXVzZ2VnZWJlbiB3ZXJkZW4uCisKKyAgICAgICAgICAgKHsiRGVyIHVuc2ljaHRiYXJlIEtuZWlwaWVyIHNjaG5laWRldCBlaW5lbSBSZW50bmVyIGVpbiBncm9zc2VzICIKKyAgICAgICAgICAgIlN0dWVjayBhdXMgZGVzc2VuIEtldWxlIHVuZCBiZXJlaXRldCBzaWUgRGlyIHp1LiBLb21pc2NoLCBtdXNzICIKKyAgICAgICAgICAgIndvaGwgZWluIFRpcHBmZWhsZXIgYXVmIGRlciBLYXJ0ZSBnZXdlc2VuIHNlaW4uIiwKKyAgICAgICAgICAgIkRlciB1bnNpY2h0YmFyZSBLbmVpcGllciBzY2huZWlkZXQgZWluZW0gaGlsZmxvc2VuIE9wYSBlaW4gIgorICAgICAgICAgICAiU3R1ZWNrIGF1cyBkZXNzZW4gS2V1bGUgdW5kIGJyYWV0IGRpZXNlIGZ1ZXIgJiYuIn0pKTsKKworU0lFSEUgQVVDSDoKKyAgICAgICAgQWRkRm9vZCgpLCBBZGREcmluaygpLCAvc3lzL3B1Yi5oCisgICAgICAgIFJlbW92ZUZyb21NZW51KCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFNhbSwgMDEuIE9rdCAyMDExLCAyMzo0MCBieSBBcmF0aG9ybgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQWRkVG91Y2hEZXRhaWwgYi9kb2MvbGZ1bi9BZGRUb3VjaERldGFpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTNlM2NhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWRkVG91Y2hEZXRhaWwKQEAgLTAsMCArMSw3MSBAQAorQWRkVG91Y2hEZXRhaWwoKQorCitGVU5LVElPTjoKKyAgICB2b2lkIEFkZFRvdWNoRGV0YWlsKHN0cmluZ3xzdHJpbmcqIGtleXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmd8c3RyaW5nKnxtYXBwaW5nfGNsb3N1cmUgZGVzYyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorICAgIGtleXMKKyAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiBOYW1lbiBkZXIgRGV0YWlscy4KKyAgICBkZXNjCisgICAgIFN0cmluZywgTWFwcGluZywgU3RyaW5nLUFycmF5IG9kZXIgQ2xvc3VyZSBtaXQvenVyIEJlc2NocmVpYnVuZy4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGVudHNwcmljaHQgZGVtIEFkZERldGFpbCgpIGZ1ZXIgU3RhbmRhcmRkZXRhaWxzLCBudXIKKyAgICBrb2VubmVuIGhpZXJtaXQgKGFiKXRhc3RiYXJlIGJ6dy4gZnVlaGxiYXJlIERldGFpbHMgcmVhbGlzaWVydCB3ZXJkZW46CisgICAgRGllIEJlc2NocmVpYnVuZyBkZXIgRGV0YWlscyA8a2V5cz4gd2lyZCBnZXNldHp0LiBXaWUgZGllIERldGFpbHMKKyAgICBiZWltIChBYilUYXN0ZW4gYXVzc2VoZW4sIGhhZW5ndCBpbSB3ZXNlbnRsaWNoZW4gdm9tIFR5cCBkZXIKKyAgICBCZXNjaHJlaWJ1bmcgPGRlc2M+IGFiOgorICAgICA8ZGVzYz4gaXN0IGVpbiBTdHJpbmcuCisgICAgICAgQmVpbSBVbnRlcnN1Y2hlbiB3aXJkIGRpZXNlciBTdHJpbmcgenVydWVja2dlZ2ViZW4uCisgICAgICA8ZGVzYz4gaXN0IGVpbiBTdHJpbmctQXJyYXkuCisgICAgICAgIEJlaW0gVW50ZXJzdWNoZW4gd2lyZCB6dWZhZWxsaWcgZWluZXIgZGVyIFN0cmluZ3MgenVydWVja2dlZ2ViZW4uCisgICAgIDxkZXNjPiBpc3QgZWluIE1hcHBpbmcuCisgICAgICAgRGFzIE1hcHBpbmcgbXVzcyBmb2xnZW5kZW4gQXVmYmF1IGhhYmVuOgorICAgICAgICAgKFswOiAgICAgICAgIkRlZmF1bHR0ZXh0IiwKKyAgICAgICAgICAgInJhc3NlMSI6ICJyMXRleHQiLCAuLi5dKS4KKworICAgICAgIEZhbGxzIGZ1ZXIgZGllIFJhc3NlIGRlcyBkYXMgRGV0YWlsIHVudGVyc3VjaGVuZGVuIFNwaWVsZXJzIGVpbgorICAgICAgIEVpbnRyYWcgaW0gTWFwcGluZyBleGlzdGllcnQsIHdpcmQgZGVyIGVudHNwcmVjaGVuZGUgVGV4dAorICAgICAgIHp1cnVlY2tnZWdlYmVuLCBhbnNvbnN0ZW4gZGVyIERlZmF1bHR0ZXh0LiBBdWYgZGllc2UgV2Vpc2Ugc2luZAorICAgICAgIHJhc3NlbmFiaGFlbmdpZ2UgRGV0YWlscyBtb2VnbGljaC4gU2llaGUgYXVjaCBkaWUgQmVpc3BpZWxlLgorICAgICA8ZGVzYz4gaXN0IGVpbmUgQ2xvc3VyZS4KKyAgICAgICBJbiBkaWVzZW0gRmFsbCB3aXJkIGRpZSBDbG9zdXJlIGF1c2dlZnVlaHJ0IHVuZCBkYXMgRXJnZWJuaXMKKyAgICAgICB6dXJ1ZWNrZ2VnZWJlbi4gRGllIENsb3N1cmUgYmVrb21tdCBkYWJlaSBkZW4gTmFtZW4gZGVzIERldGFpbHMKKyAgICAgICBhbHMgUGFyYW1ldGVyIHVlYmVyZ2ViZW4uCisKKyAgICBGdWVyIGZ1ZWhsYmFyZSBEZXRhaWxzIGtvZW5uZW4gRm9yc2NoZXJwdW5rdGUgZWluZ2V0cmFnZW4gd2VyZGVuLgorCisgICAgRnVlaGxiYXJlIERldGFpbHMga29lbm5lbiBhbGxnZW1laW4gZWluZW4gUmF1bSBvZGVyIE9iamVrdCB6dWdlb3JkbmV0CisgICAgd2VyZGVuOiBkYWZ1ZXIgbXVzcyBtYW4gYWxzIDxrZXk+IFNFTlNFX0RFRkFVTFQgdWViZXJnZWJlbi4KKworICAgIFNwaWVsZXJrb21tYW5kb3M6ICJ0YXN0ZSIKKworQkVJU1BJRUxFOgorICAgIEVpbiBrbGVpbmVzIEJlaXNwaWVsIGZ1ZXIgcmFzc2VuYWJoYWVuZ2lnZSwgZnVlaGxiYXJlIERldGFpbHMgbWl0IENsb3N1cmVzOgorICAgICAgc3RyaW5nIHN0cmFmZShzdHJpbmcga2V5KTsKKyAgICAgIC4uLgorICAgICAgQWRkVG91Y2hEZXRhaWwoU0VOU0VfREVGQVVMVCwgIkR1IGZ1ZWhsc3QgZWluaWdlIEtub2xsZW5cbiIpOworICAgICAgQWRkVG91Y2hEZXRhaWwoKHsia25vbGxlbiJ9KSwKKyAgICAgICAgICAgICAgICAgICAgIChbMDogICAgICAgIlNpZSBmdWVobGVuIHNpY2ggYW4gd2llIEtub2JsYXVjaGtub2xsZW4uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJpZWNoIGRvY2ggbWFsIGRhcmFuLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgInZhbXBpciI6ICMnc3RyYWZlXSkpOworCisgICAgICBzdHJpbmcgc3RyYWZlKHN0cmluZyBrZXkpIHsKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+cmVkdWNlX2hpdF9wb2ludHMoMTAwKTsKKyAgICAgICAgcmV0dXJuICJBdSEgRGFzIHdhcmVuIGphIEtub2JsYXVjaGtub2xsZW4hXG4iOworICAgICAgfQorCitTSUVIRSBBVUNIOgorICAgIFNldHplbjogICAgQWRkRGV0YWlsKCksIEFkZFJlYWREZXRhaWwoKSwgQWRkU21lbGxzKCksIEFkZFNvdW5kcygpCisgICAgTG9lc2NoZW46ICBSZW1vdmVEZXRhaWwoKSwgUmVtb3ZlUmVhZERldGFpbCgpLCBSZW1vdmVTbWVsbHMoKSwKKyAgICAgICAgICAgICAgIFJlbW92ZVNvdW5kcygpLCBSZW1vdmVUb3VjaERldGFpbCgpCisgICAgRGF0ZW46ICAgICBQX0RFVEFJTFMsIFBfUkVBRF9ERVRBSUxTLCBQX1NNRUxMUywgUF9TT1VORFMsIFBfVE9VQ0hfREVUQUlMUworICAgIFZlcmFsdGV0OiAgQWRkU3BlY2lhbERldGFpbCgpLCBSZW1vdmVTcGVjaWFsRGV0YWlsKCksIFBfUkVBRF9NU0cKKyAgICBTb25zdGlnZXM6IEdldERldGFpbCgpLCBicmVha19zdHJpbmcoKQorCisyMC4wMS4yMDE1LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FsbEdyb3VwcyBiL2RvYy9sZnVuL0FsbEdyb3VwcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZiYmNhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWxsR3JvdXBzCkBAIC0wLDAgKzEsMjEgQEAKK0FsbEdyb3VwcygpCitGVU5LVElPTjoKKyAgICAgc3RyaW5nICpBbGxHcm91cHMoKQorCitERUZJTklFUlQgSU46CisgICAgIC9wL2RhZW1vbi9tYXRlcmlhbGRiLmMgKE1BVEVSSUFMREIpCisKK0JFU0NIUkVJQlVORzoKKyAgICAgR2lidCBlaW4gQXJyYXkgYWxsZXIgZXhpc3RlbnRlbiBNYXRlcmlhbGdydXBwZW4genVydWVjayAoaWhyZQorICAgICBEZWZpbml0aW9uc2Zvcm0gd2llIGluIDx0aGluZy9tYXRlcmlhbC5oPiBhdWZnZWxpc3RldCkuCisKK1NJRUhFIEFVQ0g6CisgICAgIEtvbnplcHRlOgkgIG1hdGVyaWFsLCBtYXRlcmlhbGVya2VubnVuZworICAgICBHcnVuZGxlZ2VuZDogUF9NQVRFUklBTCwgL3N5cy90aGluZy9tYXRlcmlhbC5oCisgICAgIExpc3RlbjoJICBBbGxNYXRlcmlhbHMoKSwgRHVtcCgpCisJCSAgbWF0ZXJpYWxsaXN0ZSwgbWF0ZXJpYWxncnVwcGVuCisgICAgIE1hc3RlcjoJICBBZGRNYXRlcmlhbCgpLCBDb252TWF0ZXJpYWxMaXN0KCksIE1hdGVyaWFsR3JvdXAoKSwKKwkJICBHcm91cE5hbWUoKSwgTWF0ZXJpYWxOYW1lKCksCisJCSAgR2V0R3JvdXBNZW1iZXJzKCksIEdldE1hdE1lbWJlcnNoaXAoKQorCis3LiBNYWkgMjAwNCBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0FsbE1hdGVyaWFscyBiL2RvYy9sZnVuL0FsbE1hdGVyaWFscwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjMwZTliCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQWxsTWF0ZXJpYWxzCkBAIC0wLDAgKzEsMjEgQEAKK0FsbE1hdGVyaWFscygpCitGVU5LVElPTjoKKyAgICAgc3RyaW5nICpBbGxNYXRlcmlhbHMoKQorCitERUZJTklFUlQgSU46CisgICAgIC9wL2RhZW1vbi9tYXRlcmlhbGRiLmMgKE1BVEVSSUFMREIpCisKK0JFU0NIUkVJQlVORzoKKyAgICAgR2lidCBlaW4gQXJyYXkgYWxsZXIgZXhpc3RlbnRlbiBNYXRlcmlhbGllbiB6dXJ1ZWNrIChpaHJlIERlZmluaXRpb25zLQorICAgICBmb3JtIHdpZSBpbiA8dGhpbmcvbWF0ZXJpYWwuaD4gYXVmZ2VsaXN0ZXQpLgorCitTSUVIRSBBVUNIOgorICAgICBLb256ZXB0ZToJICBtYXRlcmlhbCwgbWF0ZXJpYWxlcmtlbm51bmcKKyAgICAgR3J1bmRsZWdlbmQ6IFBfTUFURVJJQUwsIC9zeXMvdGhpbmcvbWF0ZXJpYWwuaAorICAgICBMaXN0ZW46CSAgQWxsR3JvdXBzKCksIER1bXAoKQorCQkgIG1hdGVyaWFsbGlzdGUsIG1hdGVyaWFsZ3J1cHBlbgorICAgICBNYXN0ZXI6CSAgQWRkTWF0ZXJpYWwoKSwgQ29udk1hdGVyaWFsTGlzdCgpLCBNYXRlcmlhbEdyb3VwKCksCisJCSAgR3JvdXBOYW1lKCksIE1hdGVyaWFsTmFtZSgpLAorCQkgIEdldEdyb3VwTWVtYmVycygpLCBHZXRNYXRNZW1iZXJzaGlwKCkKKworNy4gTWFpIDIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Bc3NvY01lbWJlciBiL2RvYy9sZnVuL0Fzc29jTWVtYmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OTE1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Bc3NvY01lbWJlcgpAQCAtMCwwICsxLDUyIEBACisKK0Fzc29jTWVtYmVyKCkKKworCitGVU5LVElPTjoKKyAgICAgICAgaW50IEFzc29jTWVtYmVyKG9iamVjdCBucGMpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3N0ZC9saXZpbmcvdGVhbS5jCisKK0FSR1VNRU5URToKKyAgICAgICAgRGVyIHp1enVvcmRuZW5kZSBOUEMuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgT3JkbmV0IGVpbmVuIE5QQyBlaW5lbSBTcGllbGVyIHp1LiBEaWVzZXIgaXN0IGRhbm4KKyAgICAgICAgaW1tZXIgaW0gVGVhbSBkZXMgU3BpZWxlcnMsIG1vZWdsaWNoc3QgaW4gZGVyIGdsZWljaGVuIFJlaWhlLgorCitSVUVDS0dBQkVXRVJUOgorICAgICAgICAxLCBmYWxscyBadW9yZG51bmcgZXJmb2xncmVpY2gsIHNvbnN0IDAuCisKK0JFSVNQSUVMOgorICAgICAgICB2b2lkIGZ1bihvYmplY3QgcGwpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHBsICYmIHBsLT5Bc3NvY01lbWJlcih0aGlzX29iamVjdCgpKSApCisgICAgICAgICAgICB0ZWxsX29iamVjdChwbCxicmVha19zdHJpbmcoCisgICAgICAgICAgICAgICJJY2gga2FlbXBmZSBudW4gYXVmIERlaW5lciBTZWl0ZSFcbiIsNzgsIkVpbiBGZXVlcnRldWZlbCAiCisgICAgICAgICAgICAgICJ0ZWlsdCBEaXIgbWl0OiIpOworICAgICAgICAgLi4uCisgICAgICAgIH0KKworQkVNRVJLVU5HRU46CisgICAgICAgIDEuIEthbm4gbnVyIHZvbiBHaWxkZW4sIFNwZWxsYm9va3MsIHZvbSBPYmpla3Qgc2VsYmVyIHVuZCB2b20KKyAgICAgICAgICAgenV6dW9yZG5lbmRlbiBOUEMgYXVmZ2VydWZlbiB3ZXJkZW4uCisgICAgICAgIDIuIEVpbmVtIE5QQywgZGVyIHNlbGJlciBlaW5lbSBTcGllbGVyIHp1Z2VvcmRuZXQgaXN0LCBrYW5uIGtlaW4KKyAgICAgICAgICAgTlBDIHp1Z2VvcmRuZXQgd2VyZGVuLgorCitTSUVIRSBBVUNIOgorICAgICAgICBVZWJlcnNpY2h0OiB0ZWFta2FtcGYKKyAgICAgICAgUHJvcGVydGllczogUF9URUFNLCBQX1RFQU1fQVNTT0NfTUVNQkVSUywgUF9URUFNX0FUVEFDS19DTUQsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9BVVRPRk9MTE9XLCBQX1RFQU1fQ09MT1JTLCBQX1RFQU1fTEVBREVSLAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fTkVXTUVNQkVSLCBQX1RFQU1fV0FOVEVEX1JPVywgUF9URUFNX1dJTVBZX1JPVworICAgICAgICBCZXdlZ3VuZzogICBJc1RlYW1Nb3ZlLCBUZWFtRmxlZQorICAgICAgICBNaXRnbGllZGVyOiBJc1RlYW1MZWFkZXIsIFRlYW1NZW1iZXJzCisgICAgICAgIEthbXBmOiAgICAgIERlQXNzb2NNZW1iZXIsIEluc2VydEVuZW15VGVhbSwgU2VsZWN0TmVhckVuZW15LAorICAgICAgICAgICAgICAgICAgICBTZWxlY3RGYXJFbmVteQorICAgICAgICBQb3NpdGlvbmVuOiBQcmVzZW50UG9zaXRpb24sIFByZXNlbnRSb3dzLCBQcmVzZW50RW5lbXlSb3dzLAorICAgICAgICAgICAgICAgICAgICBQcmVzZW50VGVhbVBvc2l0aW9uLCBTd2FwUm93cworICAgICAgICBTb25zdGlnZXM6ICBUZWFtUHJlZml4LCB0ZWFta2FtcGZfaW50ZXJuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDA0LjEwLjIwMTEsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQXR0YWNrIGIvZG9jL2xmdW4vQXR0YWNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NTZhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9BdHRhY2sKQEAgLTAsMCArMSwyMiBAQAorQXR0YWNrKCkKKworRlVOS1RJT046CisJdm9pZCBBdHRhY2sob2JqZWN0IGVuZW15KQorCitBUkdVTUVOVEU6CisJZW5lbXk6IERlciBGZWluZC4KKworQkVTQ0hSRUlCVU5HOgorCURlciBGZWluZCB3aXJkIGRlciBTdGFlcmtlIGRlciBXYWZmZSAoYnp3LiBkZXIgSGFlbmRlKSBlbnRzcHJlY2hlbmQKKwlzdGFyayBhbmdlZ3JpZmZlbi4KKworUlVFQ0tHQUJFV0VSVDoKKwlLZWluZXIuCisKK0JFTUVSS1VORzoKKwlEaWVzZSBGdW5rdGlvbiBnaWJ0IGRpZSBBbmdyaWZmc21lbGR1bmcgYXVzLgorCUZhbGxzIG1pdCBibG9zc2VuIEhhZW5kZW4gYW5nZWdyaWZmZW4gd2lyZCwgaXN0IGRpZSBTdGFlcmtlCisJKDIqU3RhZXJrZV9kZXJfSGFlbmRlICsgMTAqQV9TVFIpLzMKKworU0lFSEUgQVVDSDoKKwkiRGVmZW5kIiwgIlF1ZXJ5RGFtYWdlIgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQmVjb21lc05ldEFsaXZlIGIvZG9jL2xmdW4vQmVjb21lc05ldEFsaXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYTZjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9CZWNvbWVzTmV0QWxpdmUKQEAgLTAsMCArMSw0NiBAQAorQmVjb21lc05ldEFsaXZlKCkKKworRlVOS1RJT046CisgICAgdm9pZCBCZWNvbWVzTmV0QWxpdmUob2JqZWN0IHBsKTsKKworR0VSVUZFTiBWT046CisgICAgL3N0ZC9wbGF5ZXIvYmFzZS5jCisKK0FSR1VNRU5URToKKyAgICBwbAorICAgICAgU3BpZWxlciwgZGVyIFZlcmJpbmR1bmcgenVtIE1VRCB3aWVkZXJlcmxhbmd0LgorCitCRVNDSFJFSUJVTkc6CisgICAgU3BpZWxlciwgd2VsY2hlIGRpZSBWZXJiaW5kdW5nIHp1bSBNVUQgZnJlaXdpbGxpZworICAgICh6LkIuIHBlciAnc2NobGFmZSBlaW4nKSBvZGVyIHVuZnJlaXdpbGxpZyB2ZXJsaWVyZW4sIGdlaGVuIGluIGRlbgorICAgIE5ldHp0b3RlbnN0YXR1cyB1ZWJlci4gU2llIHZlcmJsZWliZW4gbm9jaCBlaW5lIGRlZmluaWVydGUgWmVpdCBpbgorICAgIGRlciB6dWxldHp0IGJldHJldGVuZW4gVW1nZWJ1bmcgdW5kIHdlcmRlbiBzY2hsaWVzc2xpY2ggYXV0b21hdGlzY2gKKyAgICBpbiBkZW4gTmV0enRvdGVucmF1bSB1ZWJlcmZ1ZWhydC4KKyAgICBXaXJkIGRpZSBWZXJiaW5kdW5nIHdpZWRlciBhdWZnZWJhdXQsIHNvIHdpcmQgZGVyIFNwaWVsZXJjaGFyYWt0ZXIKKyAgICB3aWVkZXIgenVtIExlYmVuIGVyd2Vja3QgdW5kIGdlZ2ViZW5lbmZhbGxzIHp1dm9yIGF1cyBkZW0KKyAgICBOZXR6dG90ZW5yYXVtIHp1cnVlY2sgenUgc2VpbmVyIGxldHp0ZW4gVW1nZWJ1bmcgdGVsZXBvcnRpZXJ0LgorICAgIFVtIG51biBlaW5lbiBVZWJlcmJsaWNrIGRhcnVlYmVyIHp1IGVyaGFsdGVuLCB3YW5uIGVpbiBTcGllbGVyIGRpZQorICAgIFZlcmJpbmR1bmcgenVtIE1VRCB3aWVkZXJoZXJzdGVsbHQsIGdpYnQgZXMgZGllIEZ1bmt0aW9uCisgICAgQmVjb21lc05ldEFsaXZlKCkuIFNpZSB3aXJkIGF1dG9tYXRpc2NoIGluIGRlciBVbWdlYnVuZyBkZXMKKyAgICBTcGllbGVycywgaW4gYWxsZW4gT2JqZWt0ZW4gaW4gZGVyIFVtZ2VidW5nIGRlcyBTcGllbGVycworICAgIChuaWNodCByZWt1cnNpdikgdW5kIGluIGFsbGVuIE9iamVrdGVuIGltIFNwaWVsZXIgKHJla3Vyc2l2KQorICAgIGF1ZmdlcnVmZW4uIFVlYmVyZ2ViZW4gd2lyZCBoaWVyYmVpIGRhcyBTcGllbGVyb2JqZWt0LgorCisgICAgRXMgZ2lidCBhdWNoIG5vY2ggZGllIEZ1bmt0aW9uIEJlY29tZXNOZXREZWFkKCksIG1pdCBkZXIgbWFuCisgICAgYXVmIGFlaG5saWNoZSBXZWlzZSBlaW5zY2hsYWZlbmRlIFNwaWVsZXIgcmVnaXN0cmllcmVuIGthbm4uCisKK0JFSVNQSUVMRToKKyAgICBJbiBlaW5lbSBOUEMgd2FlcmUgZm9sZ2VuZGVzIGRlbmtiYXI6CisgICAgCisgICAgdm9pZCBCZWNvbWVzTmV0QWxpdmUob2JqZWN0IHBsKSB7CisgICAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSxicmVha19zdHJpbmcoCisgICAgICAgICJHdXRlbiBNb3JnZW4gIitwbC0+bmFtZShXRVIpKyIsIGF1Y2ggc2Nob24gYXVzZ2VzY2hsYWZlbj8hIiwgNzcsCisgICAgICAgIE5hbWUoV0VSKSsiIHNhZ3QgZ3JpbnNlbmQ6ICIpKTsKKyAgICB9CisgICAgU3RlaHQgZGVyIE5QQyBpbiBlaW5lbSBSYXVtLCB3byBlaW4gU3BpZWxlciBhdWZ3YWNodCwgc28gd2lyZCBkZXIKKyAgICBTcGllbGVyIGdlYnVlaHJlbmQgYmVncnVlc3N0LgorCitTSUVIRSBBVUNIOgorICAgIEJlY29tZXNOZXREZWFkKCksIFBsYXllclF1aXQoKSwgL3N0ZC9wbGF5ZXIvYmFzZS5jLCAvcm9vbS9uZXR6dG90LmMKKworMjQuIEF1ZyAyMDExIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQmVjb21lc05ldERlYWQgYi9kb2MvbGZ1bi9CZWNvbWVzTmV0RGVhZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ZlZDdjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQmVjb21lc05ldERlYWQKQEAgLTAsMCArMSw0NSBAQAorQmVjb21lc05ldERlYWQoKQorCitGVU5LVElPTjoKKyAgICB2b2lkIEJlY29tZXNOZXREZWFkKG9iamVjdCBwbCk7CisKK0dFUlVGRU4gVk9OOgorICAgIC9zdGQvcGxheWVyL2Jhc2UuYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IHBsCisgICAgICBTcGllbGVyLCBkZXIgVmVyYmluZHVuZyB6dW0gTVVEIHZlcmxpZXJ0LgorCitCRVNDSFJFSUJVTkc6CisgICAgU3BpZWxlciwgd2VsY2hlIGRpZSBWZXJiaW5kdW5nIHp1bSBNVUQgZnJlaXdpbGxpZworICAgICh6LkIuIHBlciAnc2NobGFmZSBlaW4nKSBvZGVyIHVuZnJlaXdpbGxpZyB2ZXJsaWVyZW4sIGdlaGVuIGluIGRlbgorICAgIE5ldHp0b3RlbnN0YXR1cyB1ZWJlci4gU2llIHZlcmJsZWliZW4gbm9jaCBlaW5lIGRlZmluaWVydGUgWmVpdCBpbgorICAgIGRlciB6dWxldHp0IGJldHJldGVuZW4gVW1nZWJ1bmcgdW5kIHdlcmRlbiBzY2hsaWVzc2xpY2ggYXV0b21hdGlzY2gKKyAgICBpbiBkZW4gTmV0enRvdGVucmF1bSB1ZWJlcmZ1ZWhydC4KKyAgICBVbSBudW4gZWluZW4gVWViZXJibGljayBkYXJ1ZWJlciB6dSBlcmhhbHRlbiwgd2FubiBlaW4gU3BpZWxlciBkaWUKKyAgICBWZXJiaW5kdW5nIHp1bSBNVUQgdmVybGllcnQsIGdpYnQgZXMgZGllIEZ1bmt0aW9uIEJlY29tZXNOZXREZWFkKCkuCisgICAgU2llIHdpcmQgYXV0b21hdGlzY2ggaW4gZGVyIFVtZ2VidW5nIGRlcyBTcGllbGVycywgaW4gYWxsZW4gT2JqZWt0ZW4KKyAgICBpbiBkZXIgVW1nZWJ1bmcgZGVzIFNwaWVsZXJzIChuaWNodCByZWt1cnNpdikgdW5kIGluIGFsbGVuIE9iamVrdGVuCisgICAgaW0gU3BpZWxlciAocmVrdXJzaXYpIGF1ZmdlcnVmZW4uIFVlYmVyZ2ViZW4gd2lyZCBoaWVyYmVpIGRhcworICAgIFNwaWVsZXJvYmpla3QuCisKKyAgICBFcyBnaWJ0IGF1Y2ggbm9jaCBkaWUgRnVua3Rpb24gQmVjb21lc05ldEFsaXZlKCksIG1pdCBkZXIgbWFuCisgICAgYXVmIGFlaG5saWNoZSBXZWlzZSBlcndhY2hlbmRlIFNwaWVsZXIgcmVnaXN0cmllcmVuIGthbm4uCisKK0JFSVNQSUVMRToKKyAgICBFcyBnaWJ0IEdlYmlldGUsIGluIGRlbmVuIG5ldHp0b3RlIFNwaWVsZXIgdW5lcnd1ZW5zY2h0IHNpbmQuCisgICAgRm9sZ2VuZGVybWFzc2VuIGthbm4gbWFuIHNpY2ggaWhyZXIgd2lya3VuZ3N2b2xsIGVudGxlZGlnZW46CisgICAgCisgICAgdm9pZCBCZWNvbWVzTmV0RGVhZChvYmplY3QgcGwpIHsKKyAgICAgIHBsLT5tb3ZlKCJlaW5nYW5nc3JhdW0genUgZ2ViaWV0IiwgTV9UUE9SVHxNX05PQ0hFQ0spOworICAgIH0KKyAgICBNYW4gc2NoaWNrdCBkaWVzZSBTcGllbGVyIHdpZWRlciB6dW0gRWluZ2FuZyBkZXMgR2ViaWV0ZXMuCisgICAgRGEgZGVyIGxldHp0ZSBBdWZlbnRoYWx0c29ydCBlaW5lcyBTcGllbGVycywgZGVyIGluIGRlbgorICAgIE5ldHp0b3RlbnN0YXR1cyB1ZWJlcmdlaHQsIGVyc3QgbmFjaCBBdWZydWYgZGVyIEZ1bmt0aW9uCisgICAgQmVjb21lc05ldERlYWQoKSBhYmdlc3BlaWNoZXJ0IHdpcmQsIHdhY2h0IGRlciBTcGllbGVyIGRhbm4gYW4gZGVtCisgICAgT3J0IGF1Ziwgd28gbWFuIElobiBpbm5lcmhhbGIgZGllc2VyIEZ1bmt0aW9uIGhpbnRlbGVwb3J0aWVydCBoYXQuCisKK1NJRUhFIEFVQ0g6CisgICAgQmVjb21lc05ldEFsaXZlKCksIFBsYXllclF1aXQoKSwgL3N0ZC9wbGF5ZXIvYmFzZS5jLCAvcm9vbS9uZXR6dG90LmMKKworMjQuIEF1ZyAyMDExLCBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0Nhbm5vdFNlZSBiL2RvYy9sZnVuL0Nhbm5vdFNlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODY5NTQxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQ2Fubm90U2VlCkBAIC0wLDAgKzEsMzAgQEAKK0Nhbm5vdFNlZSgpCisKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIGludCBDYW5ub3RTZWUoaW50IHNpbGVudCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvbGlnaHQuYworCitBUkdVTUVOVEU6CisgICAgIHNpbGVudCAtIFNvbGwgYW4gZGFzIExlYmV3ZXNlbiBkaXJla3QgYXV0b21hdGlzY2ggZWluZSBNZWxkdW5nCisgICAgICAgICAgICAgIGF1c2dlZ2ViZW4gd2VyZGVuIHdlbm4gZXMgbmljaHRzIHNlaGVuIGthbm4/CisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gcHJ1ZWZ0IG9iIGRhcyBMZWJld2VzZW4gZXR3YXMgc2VoZW4ga2Fubiwgb2RlciBuaWNodC4KKyAgICAgSGllcmJlaSB3aXJkIHNvd29obCBkYXMgTGljaHRsZXZlbCBtaXQgc2FlbXRsaWNoZW4gTW9kaWZpa2F0b3JlbiwKKyAgICAgYWxzIGF1Y2ggTmFjaHRzaWNodCB1bmQgZGllIFByb3BlcnR5IFBfQkxJTkQgYmVydWVja3NpY2h0aWd0LiBEYQorICAgICBkaWVzZSBGdW5rdGlvbiBiZWkgenVrdWVuZnRpZ2VuIE11ZGxpYmFlbmRlcnVuZ2VuIGltbWVyIGFrdHVhbGlzaWVydAorICAgICB3ZXJkZW4gZHVlcmZ0ZSwgc29sbHRlIG1hbiBzaWUgbmFjaCBNb2VnbGljaGtlaXQgYmVudXR6ZW4gdW5kIGRpZQorICAgICBBYmZyYWdlbiBuaWNodCBzZWxic3QgaW1wbGVtZW50aWVyZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDAsIHdlbm4gZGVyIFNwaWVsZXIgZXR3YXMgc2VoZW4ga2FubgorICAgICAxLCB3ZW5uIGRlciBTcGllbGVyIG5pY2h0cyBzZWhlbiBrYW5uOiBCbGluZGhlaXQKKyAgICAgMiwgd2VubiBkZXIgU3BpZWxlciBuaWNodHMgc2VoZW4ga2FubjogenUgd2VuaWcgTGljaHQva2VpbmUgTmFjaHRzaWNodAorCitTSUVIRSBBVUNIOgorICAgICBQX0JMSU5ELCBQX0xJR0hUX01PRElGSUVSLCBQX1BMQVlFUl9MSUdIVAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBNb24gSmFuIDE3IDE4OjIyOjI3IDIwMDAgYnkgUGFkcmVpYwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQ2hhbmdlTWluaVF1ZXN0IGIvZG9jL2xmdW4vQ2hhbmdlTWluaVF1ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YmZiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9DaGFuZ2VNaW5pUXVlc3QKQEAgLTAsMCArMSw0OCBAQAorRlVOS1RJT046CisgICAgaW50IENoYW5nZU1pbmlRdWVzdChtaXhlZCBxdWVzdGdlYmVyLCBpbnQgcGFyYW1ldGVyLCBtaXhlZCBuZXd2YWx1ZSkKKworREVGSU5JRVJUIElOOgorICAgIC9zZWN1cmUvcXVlc3RtYXN0ZXIKKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGFlbmRlcnQgZWluZW4gUGFyYW1ldGVyIGVpbmVyIE1pbmlxdWVzdCBpbSBRdWVzdG1hc3RlciwKKyAgICBzY2hyZWlidCBmdWVyIGRpZXNlIEFrdGlvbiBlaW5lbiBMb2ctRWludHJhZyB1bmQgZXJzdGVsbHQgZGFzIE1pbmlxdWVzdC0KKyAgICBEdW1wZmlsZSBuZXUuCisKK0FSR1VNRU5URToKKyAgICBxdWVzdGdlYmVyIC0gTGFkZW5hbWUgZGVzIE9iamVrdHMgKHN0cmluZyksIGRhcyBkaWUgTWluaXF1ZXN0IHZlcmdpYnQsIAorICAgICAgICAgICAgICAgICBvZGVyZGllIEluZGV4bnVtbWVyIChpbnQpIGRlciBNaW5pcXVlc3QgaW4gZGVyIE1RLUxpc3RlCisgICAgcGFyYW1ldGVyICAtIEFuZ2FiZSBkZXMgenUgYWVuZGVybmVuIFBhcmFtZXRlcnMgKFBvc2l0aW9uIGRlcyBWYWx1ZXMKKyAgICAgICAgICAgICAgICAgaW0gTWluaXF1ZXN0cy1NYXBwaW5nKToKKyAgICAgICAgICAgICAgICAgMCA6IE1pbmlxdWVzdC1TdHVmZW5wdW5rdGUsIG1pbmQuIDEKKyAgICAgICAgICAgICAgICAgMiA6IEF1ZmdhYmVuYmVzY2hyZWlidW5nIGRlciBNaW5pcXVlc3QgKHN0cmluZykKKyAgICAgICAgICAgICAgICAgMyA6IFNpY2h0YmFya2VpdCBkZXIgTWluaXF1ZXN0ICgwLzEpLCBkZWZhdWx0IGlzdCAxCisgICAgICAgICAgICAgICAgIDQgOiBha3Rpdi9pbmFrdGl2ICgxLzApCisgICAgICAgICAgICAgICAgIDUgOiBUaXRlbCBkZXIgTWluaXF1ZXN0CisgICAgICAgICAgICAgICAgIDYgOiAiZ2VzY2hhZmZ0Ii1CZXNjaHJlaWJ1bmcgbmFjaCBBYnNjaGx1c3MgZGVyIE1RCisgICAgICAgICAgICAgICAgIDcgOiBWb3JhdXNzZXR6dW5nZW4sIE1hcHBpbmcgaW0gRm9ybWF0IHZvbiBQX1JFU1RSSUNUSU9OUworICAgICAgICAgICAgICAgICA4IDogenVnZW9yZG5ldGUgUmVnaW9uLCBTdHJpbmcgd2llIHouQi4icG9sYXIiLCAiZ2ViaXJnZSIKKyAgICAgICAgICAgICAgICAgOSA6IGVybGF1YnRlIEFiZnJhZ2VvYmpla3RlLCBBcnJheSB2b24gTGFkZW5hbWVuLCB6LkIuCisgICAgICAgICAgICAgICAgICAgICAoeyIvZC9yZWdpb24vbWFnaWVyL25wYy9pbmZvbnBjIn0pLCBlcyBrb2VubmVuIG1laHJlcmUgCisgICAgICAgICAgICAgICAgICAgICBPYmpla3RlIGVpbmdldHJhZ2VuIHNlaW4KKyAgICBuZXd2YWx1ZSAgIC0gbmV1ZXIgV2VydCBmdWVyIGRlbiBhbmdlZ2ViZW5lbiBQYXJhbWV0ZXIKKworUlVFQ0tHQUJFV0VSVEU6CisgICAgIDE6IGhhdCBnZWtsYXBwdAorICAgICAwOiBadWdyaWZmIHZlcndlaWdlcnQKKyAgICAtMjogdW5ndWVsdGlnZXIgRGF0ZW50eXAgZWluZXMgZGVyIEFyZ3VtZW50ZSwgYmVpIFBhcmFtZXRlciA5IHdpcmQKKyAgICAgICAgZWluIHVlYmVyZ2ViZW5lcyBBcnJheSB6dXNhZXR6bGljaCBhdWYgTGVlcnN0cmluZ3MgdW5kIEVsZW1lbnRlCisgICAgICAgIGdlcHJ1ZWZ0LCBkaWUga2VpbmUgU3RyaW5ncyBzaW5kLiBXZW5uIGRhcyBBcnJheSBhdXNzY2hsaWVzc2xpY2gKKyAgICAgICAgYXVzIHNvbGNoZW4gRWxlbWVudGVuIGJlc3RlaHQsIHdpcmQgZWJlbmZhbGxzIC0yIHp1cnVlY2tnZWdlYmVuLgorCitCRU1FUktVTkdFTjoKKyAgICBEYXMgRmxhZyAiYWN0aXZlIiBsYWVzc3Qgc2ljaCBiZXF1ZW1lciB1ZWJlciBkaWUgUXVlc3RtYXN0ZXItRnVua3Rpb24KKyAgICBTd2l0Y2hNaW5pUXVlc3RBY3RpdmUoKSB1bXNjaGFsdGVuLgorICAgIERlciBNaW5pcXVlc3QtVGl0ZWwgZGFyZiBrZWluICJpbiIgb2RlciAiaW0iIGVudGhhbHRlbiwgd2VpbCBkYW5uIGRpZQorICAgIEVpbnRyYWVnZSBpbiBkZXIgRnJhdGVybml0YXMtQmlibGlvdGhlayBuaWNodCBnZWxlc2VuIHdlcmRlbgorICAgIGtvZW5uZW4uCisKK1NJRUhFIEFVQ0g6CisgICBBZGRNaW5pUXVlc3QoTCkKKyAgIFBfUkVTVFJJQ1RJT05TCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0NoYW5nZVJlcHV0YXRpb24gYi9kb2MvbGZ1bi9DaGFuZ2VSZXB1dGF0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YzNhZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9DaGFuZ2VSZXB1dGF0aW9uCkBAIC0wLDAgKzEsNDUgQEAKK0NoYW5nZVJlcHV0YXRpb24KK0ZVTktUSU9OOgorICAgICBwdWJsaWMgdmFyYXJncyBpbnQgQ2hhbmdlUmVwdXRhdGlvbihzdHJpbmcgcmVwaWQsIGludCB2YWx1ZSwgaW50IHNpbGVudCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9yZXB1dGF0aW9uLmMKKworQVJHVU1FTlRFOgorICAgICByZXBpZAorICAgICAgIEplZGUgbmV1ZSBSZXB1dGF0aW9uc2dydXBwZSBtdXNzIGFuZmFuZ3MgbWl0IGVpbmVyIGVpbmRldXRpZ2VuIElEIHZvbiAKKyAgICAgICBlaW5lbSBFTSBpbiBkZW4gUmVwdXRhdGlvbnNtYXN0ZXIgZWluZ2V0cmFnZW4gd2VyZGVuLiBEYW5hY2gga2FubiBtYW4gCisgICAgICAgdWViZXIgZGllIGVpbmRldXRpZ2UgSUQgPHJlcGlkPiBhdWYgc2llIHp1Z3JlaWZlbi4KKyAgICAgdmFsdWUKKyAgICAgICBEZXIgV2VydCwgdW0gZGVuIGRpZSBSZXB1dGF0aW9uIGdlYWVuZGVydCB3ZXJkZW4gc29sbC4gUG9zaXRpdmUgV2VydGUgCisgICAgICAgZXJob2VoZW4gZGllIFJlcHV0YXRpb24sIG5lZ2F0aXZlIHZlcnNjaGxlY2h0ZXJuIHNpZS4KKyAgICAgc2lsZW50CisgICAgICAgRWluIG9wdGlvbmFsZXMgRmxhZy4gRmFsbHMgZ2VzZXR6dCwgd2lyZCBrZWluZSBTdGFuZGFyZG1lbGR1bmcgdWViZXIgCisgICAgICAgZGllIFJlcHV0YXRpb25zYWVuZGVydW5nIGFuIGRlbiBTcGllbGVyIGF1c2dlZ2ViZW4uIE1hbiBrb2VubnRlIGRhbm4gCisgICAgICAgZWlnZW5lIE1lbGR1bmdlbiBhdXNnZWJlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgICBWb3IgZGVyIEFlbmRlcnVuZyB3aXJkIGVpbiBDaGVjayBhdWYgZGllIFVJRCBkZXMgYXVzZnVlaHJlbmRlbiBPYmpla3RlcworICAgICBhdXNnZWZ1ZWhydCwgImZyZW1kZSIgUmVwdXRhdGlvbmVuIGRhcmYgbWFuIHNvbWl0IG5pY2h0IHZlcmFlbmRlcm4uCisgICAgIE1hbiBrYW5uIGFiZXIgc2VsYnN0dmVyc3RhZW5kbGljaCBpbiBiZWdydWVuZGV0ZW4gRmFlbGxlbiBtaXQgZGVtCisgICAgIHp1c3RhZW5kaWdlbiBNYWdpZXIvUmVnaW9uc21hZ2llciBzcHJlY2hlbiwgb2IgbWFuIGViZW5mYWxscyBadWdyaWZmCisgICAgIGVyaGFlbHQuIEVpbmdldHJhZ2VuIHdpcmQgZGllcyBzY2hsdXNzZW5kbGljaCBkdXJjaCBlaW5lbiBFTS4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgUkVQX1JFVF9TVUNDRVNTICAgIFJlcHV0YXRpb24gd3VyZGUgdmVyYWVuZGVyLgorICAgICBSRVBfUkVUX1NVQ0NFU1NDVVQgUmVwdXRhdGlvbiB3dXJkZSBhdWYgTWluIC8gTWF4IHZlcmFlbmRlcnQKKyAgICAgUkVQX1JFVF9XUk9OR0FSR1MgIEZhbHNjaGUgQXJndW1lbnRlIGZ1ZXIgQ2hhbmdlUmVwKCkKKyAgICAgUkVQX1JFVF9JTlZBTElEVUlEIFVuenVsYWVzc2lnZSBVSUQgLyBrZWluZSBadWdyaWZmc3JlY2h0ZQorICAgICBSRVBfUkVUX0FMUkVBRFlNQVggUmVwdXRhdGlvbiBiZXJlaXRzIE1heCAvIE1pbgorICAgICBSRVBfUkVUX0lOQUNUSVZFICAgUmVwdXRhdGlvbiBtb21lbnRhbiBpbmFrdGl2CisgICAgIFJFUF9SRVRfSU5WQUxJRFJFUCBSZXB1dGF0aW9uIG5pY2h0IHZvcmhhbmRlbgorCitCRUlTUElFTEU6CisgICAgIHMuIHJlcHV0YXRpb24KKworU0lFSEUgQVVDSDoKKyAgICAgcmVwdXRhdGlvbgorICAgICBHZXRSZXB1dGF0aW9uKCksIEdldFJlcHV0YXRpb25zKCkKKworWlVMRVRaVCBHRUFlTkRFUlQ6CiswNi4wNC4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9DaGVja0ZpbmRSZXN0cmljdGlvbnMgYi9kb2MvbGZ1bi9DaGVja0ZpbmRSZXN0cmljdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljOTZlNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0NoZWNrRmluZFJlc3RyaWN0aW9ucwpAQCAtMCwwICsxLDIzIEBACitDaGVja0ZpbmRSZXN0cmljdGlvbnMKKworRlVOS1RJT046CisgICAgdmFyYXJncyBpbnQgQ2hlY2tGaW5kUmVzdHJpY3Rpb25zKG9iamVjdCBvYiwgbWl4ZWQgcmVzdHIsIGNsb3N1cmUgcXApCisgCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9yb29tL3Nob3AuYworIAorQVJHVU1FTlRFOgorICAgIG9iICAgICAtIE9iamVrdAorICAgIHJlc3RyICAtIHp1c2FldHpsaWNoZXMgQXJndW1lbnQKKyAgICBxcCAgICAgLSBzeW1ib2xfZnVuY3Rpb24oIlF1ZXJ5UHJvcCIsb2IpCisKK0JFU0NIUkVJQlVORzoKKyAgICBGdW5rdGlvbiwgZGllIEZpbmRCZXN0V2VhcG9uIC8gRmluZEJlc3RBcm1vdXJzIGVpbnNjaHJhZW5rdC4KKyAgICBXaXJkIGluIFdlcnQgdW5nbGVpY2ggMCB6dXJ1ZWNrZ2VsaWVmZXJ0LCBzbyB3aXJkIGRhcyBPYmpla3QKKyAgICBuaWNodCBnZW5vbW1lbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICBOb3JtYWxlcndlaXNlIDAKKworU0lFSEUgQVVDSDoKKyAgICBGaW5kQmVzdFdlYXBvbigpLCBGaW5kQmVzdEFybW91cnMoKQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQ2hlY2tMaWdodFR5cGUgYi9kb2MvbGZ1bi9DaGVja0xpZ2h0VHlwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA0OTBhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQ2hlY2tMaWdodFR5cGUKQEAgLTAsMCArMSw4NCBAQAorQ2hlY2tMaWdodFR5cGUoKQorCitGVU5LVElPTjoKKwl2YXJhcmdzIGludCBDaGVja0xpZ2h0VHlwZShpbnQgbGlnaHR0eXBlLCBpbnQgbW9kZSk7CisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorCWxpZ2h0dHlwZQorCSAgQXVmIGRpZXNlbiBMaWNodHR5cCB3aXJkIGdldGVzdGV0LgorCW1vZGUKKwkgIERpZSBNZXRob2RlLCBuYWNoIGRlciBkZXIgTGljaHR0eXAgdWViZXJwcnVlZnQgd2lyZC4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBEaWUgRnVua3Rpb24gcHJ1ZWZ0LCBvYiBkZXIgdWViZXJnZWJlbmUgbGlnaHR0eXBlIG1pdCBkZW0gaW4KKyAgICAgICAgUF9MSUdIVF9UWVBFIGRlZmluaWVydGVuIExpY2h0dHlwIHVlYmVyZWluc3RpbW10LiAKKworICAgICAgICBEYWJlaSBrYW5uIGluIHZlcnNjaGllZGVuZW4gTW9kaSBnZXRlc3RldCB3ZXJkZW46CisKKyAgICAgICAgTFRfQ0hFQ0tfQU5ZCisgICAgICAgICAgRXMgd2lyZCBnZXBydWVmdCwgb2IgbWluZGVzdGVucyBlaW5lciBkZXIgaW4gbGlnaHR0eXBlIHVlYmVyCisgICAgICAgICAgZ2ViZW5lbiBMaWNodHR5cGVuIGltIE9iamVrdCB2b3JoYW5kZW4gaXN0LiBEaWVzIGlzdCBkYXMKKyAgICAgICAgICBTdGFuZGFyZHZlcmhhbHRlbiAoZGVmYXVsdCkgZGVyIEZ1bmt0aW9uLgorCisgICAgICAgIExUX0NIRUNLX0FMTCAgICAgCisgICAgICAgICAgRXMgd2lyZCBnZXBydWVmdCwgb2IgYWxsZSBpbiBsaWdodHR5cGUgZGVmaW5pZXJ0ZW4gTGljaHR0eXBlbgorICAgICAgICAgIHZvcmhhbmRlbiBzaW5kLiBFcyBrb2VubmVuIGFiZXIgYXVjaCBtZWhyIExpY2h0dHlwZW4gZGVmaW5pZXJ0CisgICAgICAgICAgc2Vpbi4KKworICAgICAgICBMVF9DSEVDS19NQVRDSCAgIAorICAgICAgICAgIEVzIHdpcmQgZ2VwcnVlZnQsIG9iIGdlbmF1IGRpZSBpbiBsaWdodHR5cGUgZGVmaW5pZXJ0ZW4gTGljaHQtCisgICAgICAgICAgdHllbiBkZWZpbmllcnQgc2luZCwgc2luZCBtZWhyIG9kZXIgd2VuaWdlciB2b3JoYW5kZW4sIGdpYnQgZGllCisgICAgICAgICAgRnVua3Rpb24gMCB6dXJ1ZWNrLgorCisgICAgICAgIExUX0NIRUNLX05PTkUgICAgCisgICAgICAgICAgRXMgd2lyZCBnZXBydWVmdCwgb2Iga2VpbmVyIGRlciB1ZWJlcmdlYmVuZW4gTGljaHR0eXBlbiB2b3JoYW5kZW4KKyAgICAgICAgICBzaW5kLiBPYiBzb25zdCBub2NoIGFuZGVyZSBMaWNodHR5cGVuIHZvcmhhbmRlbiBzaW5kLCBpc3QgZGFiZWkgCisgICAgICAgICAgZWdhbC4KKworUlVlQ0tHQUJFV0VSVDoKKwkwIHdlbm4gZGllIGdlcHJ1ZWZ0ZW4gQmVkaW5ndW5nZW4gbmljaHQga29ycmVrdCBzaW5kLCBzb25zdCAKKyAgICAgICAgZWluIFdlcnQgdW5nbGVpY2ggMC4KKworQkVJU1BJRUxFOgorICAgICAgICBJbiBlaW5lbSBSYXVtIHNjaGVpbnQgZGllIFNvbm5lLCBhdXNzZXJkZW0gZ2lidCBlcyBkb3J0IGVpbiBMYWdlci0KKyAgICAgICAgZmV1ZXIgdW5kIGVpbiBPYmpla3QgbWl0IG1hZ2lzY2hlbSBHbHVlaGVuIChtZWluZSBQaGFudGFzaWUgc3RyZWlrdAorICAgICAgICBncmFkKToKKworICAgICAgICByYXVtLT5TZXRQcm9wKCBQX0xJR0hUX1RZUEUsIExUX1NVTnxMVF9PUEVOX0ZJUkV8TFRfR0xPV0lORyApOworCisgICAgICAgIEVzIHNvbGwgZ2V0ZXN0ZXQgd2VyZGVuLCBvYiBhbiBpbiBkZW0gUmF1bSBUYWdlc2xpY2h0IGhlcnJzY2h0OgorCisgICAgICAgIHJhdW0tPkNoZWNrTGlnaHRUeXBlKExUX0RBWUxJR0hULCBMVF9DSEVDS19BTlkpOworICAgICAgICByYXVtLT5DaGVja0xpZ2h0VHlwZShMVF9EQVlMSUdIVCk7IC8vIGdsZWljaHdlcnRpZworCisgICAgICAgIERpZSBGdW5rdGlvbiBlcmdpYnQgd2FociwgZGEgTFRfREFZTElHSFQgdW50ZXIgYW5kZXJlbSBMVF9TVU4gZW50LQorICAgICAgICBoYWVsdCAodmdsIG1hbiBQX0xJR0hUX1RZUEVTKS4KKworICAgICAgICBFcyBzb2xsIGdldGVzdGV0IHdlcmRlbiwgZGFzcyB3ZWRlciBNb25kIG5vY2ggU3Rlcm5lIGltIFJhdW0gc2luZDoKKworICAgICAgICByYXVtLT5DaGVja0xpZ2h0VHlwZShMVF9NT09OfExUX1NUQVJTLCBMVF9DSEVDS19OT05FKTsKKworICAgICAgICBEaWUgRnVua3Rpb24gZXJnaWJ0IHdhaHIsIGRhIGRpZSBiZWlkZW4gbmljaHQgZ2VzZXR6dCBzaW5kLgorCisgICAgICAgIEVzIHNvbGwgZ2VwcnVlZnQgd2VyZGVuLCBvYiBNb25kIHVuZCBTdGVybmUgaW0gUmF1bSBsZXVjaHRlbjoKKworICAgICAgICByYXVtLT5DaGVja0xpZ2h0VHlwZShMVF9NT09OfExUX1NUQVJTLCBMVF9DSEVDS19BTEwpOworCisgICAgICAgIERpZSBGdW5rdGlvbiBlcmdpYnQgZmFsc2NoLCBkYSBrZWlucyBkZXIgYmVpZGVuIExpY2h0ZXIgdm9yaGFuZGVuCisgICAgICAgIGlzdC4gU2llIGVyZ2FlYmUgYWJlciBhdWNoIGZhbHNjaCwgd2VubiBlaW5lciBkZXIgYmVpZGVuIFR5cGVuCisgICAgICAgIHZvcmhhbmRlbiB3YWVyLiBOdXIgd2VubiBiZWlkZSB2b3JoYW5kZW4gc2luZCwgZ2lidCBMVF9DSEVDS19BTEwKKyAgICAgICAgd2Foci4KKworQkVNRVJLVU5HOgorICAgICAgICBMaWdodHR5cGVzIGhhYmVuIG5pY2h0cyBtaXQgZGVtIExpY2h0c3lzdGVtIHp1IHR1bi4gU2llIGRpZW5lbiAKKyAgICAgICAgbnVyIGRlciBCZXNjaHJlaWJ1bmcgZGVyIExpY2h0dmVyaGFlbHRuaXNzZSBhbi9pbiBlaW5lbSBPYmpla3QuCisgICAgICAgIE9iamVrdGUgbWl0IHZlcnNjaGllZGVuZW4gTGljaHR2ZXJoYWVsdG5pc3NlbiBiZWVpbmZsdXNzZW4gc2ljaAorICAgICAgICBnZWdlbnNlaXRpZyBuaWNodC4KKworU0lFSEUgQVVDSDoKKyAgICAgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jLCAvc3RkL3RoaW5nL2xpZ2h0dHlwZXMuaCwgUF9MSUdIVF9UWVBFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBGcmkgSnVuIDExIDIwOjQ3OjMzIDIwMDQgYnkgVmFuaW9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9DaGVja1Jlc2lzdGFuY2UgYi9kb2MvbGZ1bi9DaGVja1Jlc2lzdGFuY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0ODZhNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0NoZWNrUmVzaXN0YW5jZQpAQCAtMCwwICsxLDIwIEBACitDaGVja1Jlc2lzdGFuY2UoKQorCitGVU5LVElPTjoKKwlDaGVja1Jlc3Npc3RhbmNlKHN0cmluZyogZGFtX3R5cGVfbGlzdCkKKworQVJHVU1FTlRFOgorCWRhbV90eXBlX2xpc3Q6IExpc3RlIGRlciBTY2hhZGVuc2FydGVuLCBkaWUgZ2VwcnVlZnQgd2VyZGVuCisKK0JFU0NIUkVJQlVORzoKKwlEaWVzZSBGdW5rdGlvbiB1ZWJlcnBydWVmdCwgZ2VnZW4gd2VsY2hlIGRlciBhbmdlZ2ViZW5lbgorCVNjaGFkZW5zYXJ0ZW4gZGFzIExlYmV3ZXNlbiByZXNpc3RlbnQgb2RlciB2ZXJsZXR6bGljaCBpc3QgdW5kCisJZ2lidCBlaW5lbiBGYWt0b3IgenVydWVjaywgZGVyIG1pdCBkZW0gU2NoYWRlbiBtdWx0aXBsaXppZXJ0IHdpcmQuCisJRGllc2VyIEZha3RvciBiZXRyYWVndCBub3JtYWxlcndlaXNlIDEsIGJlaSBiZWkgamVkZXIgUmVzaXN0ZW56CisJd2lyZCBlciBoYWxiaWVydCB1bmQgYmVpIGplZGVyIFZlcmxldHpsaWNoa2VpdCB2ZXJkb3BwZWx0LgorCitSVUVDS0dBQkVXRVJUOgorCUVpbiBGYWt0b3IsIGRlciBtaXQgZGVtIFNjaGFkZW4gbXVsdGlwbGl6aWVydCB3aXJkLCB2b20gVHlwICJmbG9hdCIuCisKK1NJRUhFIEFVQ0g6CisJIkRlZmVuZCIKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0NoZWNrU2Vuc2l0aXZlQXR0YWNrIGIvZG9jL2xmdW4vQ2hlY2tTZW5zaXRpdmVBdHRhY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhZWMyZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0NoZWNrU2Vuc2l0aXZlQXR0YWNrCkBAIC0wLDAgKzEsMzMgQEAKK0NoZWNrU2Vuc2l0aXZlQXR0YWNrKCkKK0ZVTktUSU9OOgorICAgICB2b2lkIENoZWNrU2Vuc2l0aXZlQXR0YWNrKGludCBkYW0sIHN0cmluZyAqZGFtX3R5cGUsIG1peGVkIHNwZWxsLAorCQkJICAgICAgIG9iamVjdCBlbmVteSkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9pbnZlbnRvcnkuYworCitBUkdVTUVOVEU6CisgICAgIGRhbQktIGFuIERlZmVuZCB1ZWJlcmdlYmVuZXIgU2NoYWRlbgorICAgICBkYW1fdHlwZQktIFNjaGFkZW5zdHlwKGVuKQorICAgICBzcGVsbAktIHNwZWxsLCBpbnQgb2RlciBtYXBwaW5nCisgICAgIGVuZW15CS0gRmVpbmRlc29iamVrdAorCitCRVNDSFJFSUJVTkc6CisgICAgIFdpcmQgdm9uIERlZmVuZCgpIGF1ZmdlcnVmZW4gdW5kIHBydWVmdCBkaWUgTGlzdGVuIGluCisgICAgIFBfU0VOU0lUSVZFX0FUVEFDSyBkdXJjaC4KKyAgICAgV2VubiBkaWUgU2NobHVlc3NlbCB1bmQgVGhyZXNob2xkLVdlcnRlIHN0aW1tZW4sIHdpcmQKKyAgICAgdHJpZ2dlcl9zZW5zaXRpdmVfYXR0YWNrKGVuZW15LGtleSxkYW0sc3BlbGwsb3B0aW9ucykKKyAgICAgaW0gT2JqZWt0IGdlcnVmZW4uCisKK0JFTUVSS1VOR0VOOgorICAgICBPYmpla3RlIG1pdCBQX1NFTlNJVElWRSBtaXQgU2NobHVlc3NlbCBTRU5TSVRJVkVfQVRUQUNLIGJpdHRlIHZvcnNpY2h0aWcKKyAgICAgdmVyd2VuZGVuLCBkYSByZWNoZW5pbnRlbnNpdi4KKworU0lFSEUgQVVDSDoKKyAgICAgUF9TRU5TSVRJVkUKKyAgICAgSW5zZXJ0U2Vuc2l0aXZlT2JqZWN0LCBSZW1vdmVTZW5zaXRpdmVPYmplY3QKKyAgICAgaW5zZXJ0X3NlbnNpdGl2ZV9pbnZfdHJpZ2dlciwgaW5zZXJ0X3NlbnNpdGl2ZV9pbnYKKyAgICAgUF9TRU5TSVRJVkVfQVRUQUNLLCBQX1NFTlNJVElWRV9JTlZFTlRPUlksCisgICAgIFBfU0VOU0lUSVZFX0lOVkVOVE9SWV9UUklHR0VSCisKKzI4Lkphbi4yMDAxLCBHbG9pbnNvbkBNRwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQ2hlY2tTcGVsbEZhdGlndWUgYi9kb2MvbGZ1bi9DaGVja1NwZWxsRmF0aWd1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDdjYzJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQ2hlY2tTcGVsbEZhdGlndWUKQEAgLTAsMCArMSw2MSBAQAorQ2hlY2tTcGVsbEZhdGlndWUKKworRlVOS1RJT046CisgICAgcHVibGljIHZhcmFyZ3MgaW50IENoZWNrU3BlbGxGYXRpZ3VlKHN0cmluZyBrZXkpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9za2lsbHMuYworICAgIC9zdGQvcGxheWVyL3NraWxscy5jCisgICAgL3N5cy9saXZpbmcvc2tpbGxzLmgKKworQVJHVU1FTlRFOgorICAgIHN0cmluZyBrZXkgIDogRWluZGV1dGlnZXIgTmFtZSBkZXMgU3BydWNoZXMsIGVpbmVyIEdydXBwZSB2b24gU3BydWVjaGVuCisgICAgICAgICAgICAgICAgICBvZGVyIDAgZnVlciBkaWUgZ2xvYmFsZSBTcHJ1Y2hlcm11ZWR1bmcuCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiBkaWVudCB6dW0gUHJ1ZWZlbiB2b24gaW5kaXZpZHVlbGxlbiBTcHJ1Y2hlcm11ZWR1bmdlbgorICAgIChTcGVsbGZhdGlndWUsIFNwcnVjaHNwZXJyZW4pLgorICAgIEhpZXJtaXQgbGFzc2VuIHNpY2ggdW5hYmhhZW5naWdlIEVybXVlZHVuZ2VuL1NwZXJyZW4gZnVlciBlaW56ZWxuZQorICAgIFNwcnVlY2hlIG9kZXIgR3J1cHBlbiB2b24gU3BydWVjaGVuIGdlc3RhbHRlbi4KKworICAgIFdpcmQgPGtleT4gbmljaHQgYW5nZWdlYmVuIG9kZXIgaXN0IDAsIHdpcmQgZGllIGdsb2JhbGUgU3BydWNoc3BlcnJlCisgICAgZ2VwcnVlZnQgKGlkZW50aXNjaCB6dSBkZXIgUHJvcGVydHkgUF9ORVhUX1NQRUxMX1RJTUUpLCBhbmRlcmVuZmFsbHMgCisgICAgZGllIHVudGVyIDxrZXk+IGdlc3BlaWNoZXJ0ZSBTcHJ1Y2hlcm11ZWR1bmcuCisgICAgUHJ1ZWZ0IG1hbiBlaW5lbiBFaW50cmFnIG9obmUgQW5nYWJlIHZvbiA8a2V5PiBpc3QgZGFzIEVyZ2VibmlzIGRpZXNlcgorICAgIEZ1bmt0aW9uIGlkZW50aXNjaCB6dXIgQWJmcmFnZSB2b24gUF9ORVhUX1NQRUxMX1RJTUUuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgMCAgICBTcHJ1Y2hlcm11ZWR1bmcgZXhpc3RpZXJ0IG5pY2h0IG9kZXIgaXN0IGFiZ2VsYXVmZW4uCisKKyAgICA+MCAgIFNwcnVjaGVybXVlZHVuZyBpc3Qgbm9jaCBuaWNodCBhYmdlbGF1ZmVuLCBSdWVja2dhYmV3ZXJ0IGlzdCBkaWUKKyAgICAgICAgIFplaXQsIGJlaSBkZXIgZGllc2VyIEVpbnRyYWcgYWJsYWV1ZnQuIERlciBTcHJ1Y2ggZGFyZiBfbmljaHRfCisgICAgICAgICBhdXNnZWZ1ZWhydCB3ZXJkZW4uCisKK0JFSVNQSUVMRToKKyAgICBFaW4gU3BlbGwgZ2Vob2VydCB6dSBlaW5lciBHcnVwcGUgdm9uIFNwZWxscyBtaXQgZGVtIE5hbWVuICdleHRyYXN1ZXNzJy4KKyAgICBFciBkYXJmIG51ciBhdXNnZWZ1ZWhydCB3ZXJkZW4sIHdlbm4gc2VpdCA1cyBrZWluIGFuZGVyZXIgU3BydWNoIGF1cyBkZXIKKyAgICBHcnVwcGUgYXVzZ2VmdWVocnQgd3VyZGUuCisgICAgaWYgKG9iLT5DaGVja1NwZWxsRmF0aWd1ZSgiZXh0cmFzdWVzcyIpIHsKKyAgICAgIC8vIGFsdGUgU3BlcnJlIG5vY2ggbmljaHQgYWJnZWxhdWZlbi4KKyAgICAgIHRlbGxfb2JqZWN0KG9iLCAiRGVpbmUgdW5lbmRsaWNoZSBTY2hva290b3J0ZSBpc3Qgbm9jaCBuaWNodCB3aWVkZXIgIgorICAgICAgICAibmFjaGdld2FjaHNlbi5cbiIpOworICAgICAgcmV0dXJuIC4uLiA7CisgICAgfQorCitCRU1FUktVTkdFTjoKKyAgICBEaWUgZ2VuYXVlbiBaZWl0ZGF1ZXJuIGtvZW5uZW4gdm9uIFNwaWVsZXJuIGJlZWluZmx1c3N0IHdlcmRlbiwgc2llCisgICAgdW50ZXJsaWVnZW4gZGVyIGpld2VpbGlnZW4gRWluc3RlbGx1bmcgdm9uICdzcHJ1Y2hlcm11ZWR1bmcnLCBkLmguIGtvZW5uZW4KKyAgICBhdWYgdm9sbGUgMnMgYXVmZ2VydW5kZXQgd2VyZGVuLgorICAgIEF1Y2ggd2VubiBkaWVzZSBGdW5rdGlvbiB6dW0gVmVyd2FsdGVuIHZvbiBiZWxpZWJpZ2VuIFplaXRzcGVycmVuIGdlbnV0enQKKyAgICB3ZXJkZW4ga29lbm5lbiwgYmVzY2hyYWVua3QgZXVjaCBiaXR0ZSBhdWYgU3BydWNoZXJtdWVkdW5nZW4gdW5kIGJlbnV0enQKKyAgICBhbnNvbnN0ZW4gY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkoKS4gRmFsbHMgaWhyIGRpZXNiemdsLiB3ZWl0ZXJlL2FuZGVyZQorICAgIFd1ZW5zY2hlIGhhYnQsIHNwcmVjaHQgZGVuL2RpZSBNdWRsaWItRU0gYW4uCisKK1NJRUhFIEFVQ0g6CisgICAgU2V0U3BlbGxGYXRpZ3VlKEwpLCBEZWxldGVTcGVsbEZhdGlndWUoTCkKKyAgICBQX05FWFRfU1BFTExfVElNRQorICAgIHNwcnVjaGVybXVlZHVuZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyNy4wMy4yMDEwLCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0NsZWFyUmluZ0J1ZmZlciBiL2RvYy9sZnVuL0NsZWFyUmluZ0J1ZmZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDk1ZGVjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQ2xlYXJSaW5nQnVmZmVyCkBAIC0wLDAgKzEsMzQgQEAKK0NsZWFyUmluZ0J1ZmZlcigpCisKK0ZVTktUSU9OOgorICAgIHByb3RlY3RlZCBzdHJ1Y3Qgc3RkX3JpbmdidWZmZXIgQ2xlYXJSaW5nQnVmZmVyKHN0cnVjdCBzdGRfcmluZ2J1ZmZlciBiKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvdXRpbC9yaW5nYnVmZmVyLmMKKyAgICAvc3lzL3V0aWwvcmluZ2J1ZmZlci5oCisKK0FSR1VNRU5URToKKyAgICBiIC0gZGVyIHp1IGxvZXNjaGVuZGUgUmluZ3B1ZmZlcgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllc2UgRnVua3Rpb24gbG9lc2NodCBhbGxlIERhdGVuIGF1cyBkZW0gUHVmZmVyIDxiPiB1bmQgcmUtaW5pdGlhbGlzaWVydAorICAgIGlobi4KKyAgICAKK1JVZUNLR0FCRVdFUlQ6CisgICAgRGVyIGdlbG9lc2NodGUgUHVmZmVyIDxiPiB3aXJkIHdpZWRlciB6dXJ1ZWNrZ2VnZWJlbi4KKworQkVJU1BJRUxFOgorICAgIC8vIFJpbmdwdWZmZXIgYW5sZWdlbjoKKyAgICBzdHJ1Y3Qgc3RkX3JpbmdidWZmZXIgYnVmZmVyPUNyZWF0ZVJpbmdCdWZmZXIoMTAsIE1PREVfRklGTyk7CisgICAgLy8gbWl0IGlyZ2VuZHdlbGNoZW4gRGF0ZW4gZnVlbGxlbi4uLgorICAgIC8vIC4uLgorICAgIC8vIFB1ZmZlciBsb2VzY2hlbgorICAgIGJ1ZmZlciA9IENsZWFyUmluZ0J1ZmZlcihidWZmZXIpOworICAgIC8vIG9kZXI6CisgICAgQ2xlYXJSaW5nQnVmZmVyKGJ1ZmZlcik7CisKK1NJRUhFIEFVQ0g6CisgICAgQ3JlYXRlUmluZ0J1ZmZlcigpLCBSaW5nQnVmZmVyR2V0KCksIFJlc2l6ZVJpbmdCdWZmZXIoKQorCisyMy4wNS4yMDA4LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0NvbmZpZ3VyZSBiL2RvYy9sZnVuL0NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzYzOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vQ29uZmlndXJlCkBAIC0wLDAgKzEsNzYgQEAKK0NvbmZpZ3VyZSgpCisKKyAgcHVibGljIG1peGVkIENvbmZpZ3VyZShtaXhlZCBkYXRhKQorCitERUZJTklFUlQgSU46CisgICBCZWxpZWJpZ2VuIE9iamVrdGVuCisKK0FSR1VNRU5URToKKyAgIDxkYXRhPgorICAgICAwIGZ1ZXIgRGF0ZW5hYmZyYWdlCisgICAgIGJlbGllYmlnZSBEYXRlbiwgZGllIGVpbiBDb25maWd1cmUoMCkgdm9yaGVyIGxpZWZlcnRlCisKK0JFU0NIUkVJQlVORzoKKyAgIFZpZWxlIE9iamVrdGUgd2VyZGVuIGZ1ZXIgYmVzdGltbXRlIFNwaWVsZXIga29uZmlndXJpZXJ0IHVuZCBzbworICAgcGVyc29uYWxpc2llcnQuIFNpZSBlbnRoYWx0ZW4genVzYWV0emxpY2ggenUgZGVuIERhdGVuLCB3ZWxjaGUgd2FlaHJlbmQgZGVzCisgICBjcmVhdGUoKSBnZXNldHp0IHd1cmRlbiwgbm9jaCB3ZWl0ZXJlIHNwaWVsZXItaW5kaXZpZHVlbGxlIERhdGVuLgorICAgRGFtaXQgZGllc2UgT2JqZWt0ZSBpbSBCZWRhcmZzZmFsbCBuZXUgZXJzdGVsbHQgd2VyZGVuIGtvZW5uZW4sIHNvbGx0ZSBlaW4KKyAgIGdlZWlnbmV0ZXMgQ29uZmlndXJlKCkgZGVmaW5maWVydCB3ZXJkZW4sIHVtIGRpZXNlIERhdGVuIGFienVydWZlbiB1bmQgaW4KKyAgIGVpbmVtIG5ldWVuIENsb25lIChvZGVyIG5ldWdlbGFkZW5lciBCbHVlcHJpbnQpIHdpZWRlciB6dSBzZXR6ZW4uCisgICAKKyAgIEV4aXN0aWVydCBDb25maWd1cmUoKSBpbSBPYmpla3QsIE1VU1MgZGllc2VzIGJlaSBlaW5lbSBBdWZydWYgbWl0CisgICA8ZGF0YT49PTAgKGQuaC4gQ29uZmlndXJlKDApKSBhbGxlIGluZGl2aWR1ZWxsZW4gRGF0ZW4genVydWVja2xpZWZlcm4sCisgICBkaWUgbm9ldGlnIHNpbmQsIHVtIGRlbiBha3R1ZWxsZW4gWnVzdGFuZCBkZXMgT2JqZWt0ZXMgc3BhZXRlcgorICAgd2llZGVyaGVyenVzdGVsbGVuLgorICAgRGFzIE9iamVrdCBkYXJmIG5hY2ggZGVtIFp1cnVlY2tnZWJlbiBkaWVzZXIgRGF0ZW4gZGllc2UgTklDSFQgbWVocgorICAgdmVyYWVuZGVybiwgZC5oLiBlcyBtdXNzIGdnZi4gZWluZSBLb3BpZSBlcnN0ZWxsdCB3ZXJkZW4gKGNvcHksIGRlZXBfY29weSkKKworICAgR2VuYXUgZGllc2UgRGF0ZW4gd2VyZGVuIGluIGVpbmVtIG5ldSBnZWNsb250ZW4gT2JqZWt0IGR1cmNoIGRlbiBBdWZydWYKKyAgIHZvbiBDb25maWd1cmUoZGF0YSkgd2llZGVyIGdlc2V0enQuIERhcyBDb25maWd1cmUgTVVTUyBnZW5hdSBkaWUgRGF0ZW4sIGRpZQorICAgZXMgaW0gYWx0ZW4gT2JqZWt0IHp1cnVlY2tsaWVmZXJ0LCB3aWVkZXIgYWt6ZXB0aWVyZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICBXZW5uIDxkYXRhPj09MDoKKyAgICAgQWxsZSBpbmRpdmlkdWVsbGVuIERhdGVuIGluIGVpbmVyIGJlbGllYmlnZW4gRm9ybS4gRWluIE1hcHBpbmcgYmlldGV0CisgICAgIHNpY2ggamVkb2NoIGFuLgorICAgICBOaWNodCBlcmxhdWJ0IHNpbmQ6IE9iamVrdGUgdW5kIENsb3N1cmVzLgorCisgICBXZW5uIDxkYXRhPiE9MDoKKyAgICAgMSwgd2VubiBkaWUgRGF0ZW4genVyIEtvbmZpZ3VyYXRpb24gYWt6ZXB0aWVydCB3dXJkZW4uCisgICAgIDAsIHNvbnN0LgorCitCRU1FUktVTkdFTjoKKyAgIENvbmZpZ3VyZSgpIGlzdCBuaWNodCB2ZXJwZmxpY2h0ZXQsIGVybmV1dCBEYXRlbiB6dSBha3plcHRpZXJlbiwgd2VubiBlcworICAgYmVyZWl0cyBlaW5tYWwgbWl0IGd1ZWx0aWdlbiBEYXRlbiBhdWZnZXJ1ZmVuIHd1cmRlLgorICAgRGFzIFp1cnVlY2tzY2hyZWliZW4gZGVyIERhdGVuIGthbm4gYXVjaCBuYWNoIEFibGF1ZiBsYWVuZ2VyZXIgWmVpdAorICAgdW5kL29kZXIgaW4gZWluZXIgYW5kZXJlbiBVcHRpbWUgZXJmb2xnZW4uCisKK0JFSVNQSUVMRToKKyAgIEVpbiBPYmpla3QsIHdlbGNoZXMgZWluIGFuZGVyZXMgT2JqZWt0IHNpY2hlciBlcnNldHp0LCBkLmguIGRpZQorICAgaW5kaXZpZHVlbGxlIEtvbmZpZ3VyYXRpb24gYmxlaWJ0IGVyaGFsdGVuOgorICAgbWl4ZWQgZGF0YTsKKyAgIGlmIChjYWxsX3Jlc29sdmVkKGRhdGEsb2IsIkNvbmZpZ3VyZSIsMCkgPT0gMSkgeworICAgICBzdHJpbmcgb2JuYW1lID0gbG9hZF9uYW1lKG9iKTsKKyAgICAgb2ItPnJlbW92ZSgpOworICAgICBvYiA9IGNsb25lX29iamVjdChvYm5hbWUpOworICAgICBpZiAoZGF0YSkgeworICAgICAgIGlmIChvYi0+Q29uZmlndXJlKGRhdGEpID09IDEpIHsKKyAgICAgICAgIHByaW50ZigiSW5zdGFueiB2b24gJXMgZXJmb2xncmVpY2ggZXJzZXR6dCwgbmV1ZXMgT2JqZWt0OiAlT1xuIiwKKyAgICAgICAgICAgICBvYm5hbWUsb2IpOworICAgICAgIH0KKyAgICAgICBlbHNlIHsKKyAgICAgICAgIHJhaXNlX2Vycm9yKHNwcmludGYoIkNvbmZpZ3VyZSgpIGluICVPIGFremVwdGllcnRlIERhdGVuIG5pY2h0IVxuIiwKKyAgICAgICAgICAgICBvYikpOworICAgICAgIH0KKyAgICAgfQorICAgfQorICAgZWxzZSB7CisgICAgIHByaW50ZihicmVha19zdHJpbmcoCisgICAgICAgICAiRGFzIE9iamVrdCAlTyBkZWZpbmllcnQga2VpbmUgRnVua3Rpb24gQ29uZmlndXJlKCkuIEVzIGthbm4gIgorICAgICAgICAgIm5pY2h0IHNpY2hlciBlcnNldHp0IHdlcmRlbiwgZGEgdW5iZWthbm50IGlzdCwgb2IgZXMgaW5kaXZpZHVlbGxlICIKKyAgICAgICAgICJEYXRlbiBlbnRoYWVsdC4iLDc4KSk7CisgICB9CisKK0xFVFpURSBBZU5ERVJVTkc6CisyNi4wOS4yMDExLCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0NvbnZNYXRlcmlhbExpc3QgYi9kb2MvbGZ1bi9Db252TWF0ZXJpYWxMaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDYxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Db252TWF0ZXJpYWxMaXN0CkBAIC0wLDAgKzEsNDEgQEAKK0NvbnZNYXRlcmlhbExpc3QoKQorRlVOS1RJT046CisgICAgIHZhcmFyZ3Mgc3RyaW5nIENvbnZNYXRlcmlhbExpc3QobWl4ZWQgbWF0cywgaW50IGNhc3VzLCBtaXhlZCBpZGluZikKKworREVGSU5JRVJUIElOOgorICAgICAvcC9kYWVtb24vbWF0ZXJpYWxkYi5jIChNQVRFUklBTERCKQorCitBUkdVTUVOVEU6CisgICAgIG1peGVkIG1hdHM6ICAtIGRhcyB6dSBlcmtlbm5lbmRlIE1hdGVyaWFsOgorICAgICAgICAgICAgICAgICAgICAtIGVpbiBNYXBwaW5nLCBlaW4gU3RyaW5nIG9kZXIgZWluIFN0cmluZ2FycmF5CisgICAgICAgICAgICAgICAgICAgICAgKFtNQVRfQTp5LE1BVF9COngsLi5dKSBvZGVyIE1BVF9BIG9kZXIgKHtNQVRfQSxNQVRfQiwuLn0pCisgICAgIGludCBjYXN1czogICAtIGRlciBGYWxsOiAwLi4zIC0+IDxsYW5ndWFnZS5oPjogV0FTLCBXRVNTRU4sIFdFTSwgV0VOCisgICAgIG1peGVkIGlkaW5mICAtIERpbmdlLCB3ZWxjaGUgZGllIEZhZWhpZ2tlaXRlbiBkZXMgRXJrZW5uZW5zIGJlZWluZmx1c3NlbgorCQkgICAgKHNpZWhlICJtYW4gTWF0ZXJpYWxMaXN0IikKKworQkVTQ0hSRUlCVU5HOgorICAgICBNYW4gdWViZXJnaWJ0IENvbnZNYXRlcmlhbExpc3QoKSBlaW5lIExpc3RlIHZvbiBNYXRlcmlhbGllbiwgZGllIGRpZQorICAgICBGdW5rdGlvbiB1bnRlciBWZXJ3ZW5kdW5nIHZvbiBNYXRlcmlhbE5hbWUoKSBpbiBpaHJlIEJlc3RhbmR0ZWlsZQorICAgICBhdWZzcGxpdHRldCB1bmQgbWl0ICJ1bmQiIHVuZCAiLCIgdmVya251ZXBmdCB6dXJ1ZWNrZ2lidC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgc3RyaW5nIC0gTWF0ZXJpYWxpZW4sIGR1cmNoIEtvbW1hIHVuZCAidW5kIiBnZXRyZW5udCBvZGVyCisgICAgICAgICAgICAgICJ1bmJla2FubnRlcyBNYXRlcmlhbCIKKworQkVNRVJLVU5HRU46CisgICAgIFdpcmQgdm9uIC9zdGQvdGhpbmcvZGVzY3JpcHRpb246Ok1hdGVyaWFsTGlzdCgpIGdlcnVmZW4uCisgICAgIEJpdHRlIGFuIE9iamVrdGVuIGF1Y2ggTWF0ZXJpYWxMaXN0KCkgdmVyd2VuZGVuLgorICAgICBSdWZ0IGRpcmVrdCBNYXRlcmlhbE5hbWUoKSBhdWYuCisKK1NJRUhFIEFVQ0g6CisgICAgIEtvbnplcHRlOgkgIG1hdGVyaWFsLCBtYXRlcmlhbGVya2VubnVuZworICAgICBHcnVuZGxlZ2VuZDogUF9NQVRFUklBTCwgL3N5cy90aGluZy9tYXRlcmlhbC5oCisgICAgIE1ldGhvZGVuOiAgICBRdWVyeU1hdGVyaWFsKCksIFF1ZXJ5TWF0ZXJpYWxHcm91cCgpLCBNYXRlcmlhbExpc3QoKSwKKyAgICAgTGlzdGVuOgkgIEFsbE1hdGVyaWFscygpLCBBbGxHcm91cHMoKSwgRHVtcCgpCisJCSAgbWF0ZXJpYWxsaXN0ZSwgbWF0ZXJpYWxncnVwcGVuCisgICAgIE1hc3RlcjoJICBBZGRNYXRlcmlhbCgpLCBNYXRlcmlhbEdyb3VwKCksCisJCSAgR3JvdXBOYW1lKCksIE1hdGVyaWFsTmFtZSgpLAorCQkgIEdldEdyb3VwTWVtYmVycygpLCBHZXRNYXRNZW1iZXJzaGlwKCkKKyAgICAgU29uc3RpZ2VzOgkgIFBfTUFURVJJQUxfS05PV0xFREdFCisKKzcuIE1haSAyMDA0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vQ3JlYXRlUmluZ0J1ZmZlciBiL2RvYy9sZnVuL0NyZWF0ZVJpbmdCdWZmZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3MWFmNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0NyZWF0ZVJpbmdCdWZmZXIKQEAgLTAsMCArMSw0NSBAQAorQ3JlYXRlUmluZ0J1ZmZlcigpCisKK0ZVTktUSU9OOgorICAgIHByb3RlY3RlZCBzdHJ1Y3Qgc3RkX3JpbmdidWZmZXIgQ3JlYXRlUmluZ0J1ZmZlcihpbnQgc2l6ZSwgaW50IG5ld21vZGUpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC91dGlsL3JpbmdidWZmZXIuYworICAgIC9zeXMvdXRpbC9yaW5nYnVmZmVyLmgKKworQVJHVU1FTlRFOgorICAgIHNpemUgICAgLSBHcm9lc3NlIGRlcyBuZXVlbiBSaW5ncHVmZmVycyAoaW50KQorICAgIG5ld21vZGUgLSBBdXNnYWJlbW9kdXMgYmVpbSBBYnJ1ZmVuIGRlcyBQdWZmZXJzIChpbnQpOgorICAgICAgICAgICAgICBNT0RFX0ZJRk86IEZpcnN0LWluLUZpcnN0LU91dAorICAgICAgICAgICAgICBNT0RFX0xJRk86IExhc3QtaW4tRmlyc3QtT3V0CisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiBlcnN0ZWxsdCBlaW5lbiBuZXVlbiwgbGVlcmVuIFJpbmdwdWZmZXIgZGVyIEdyb2Vzc2UgPHNpemU+CisgICAgdW5kIGxpZWZlcnQgaWhuIHp1cnVlY2suIERpZSBEYXRlbiBkZXMgUHVmZmVycyB3ZXJkZW4gc3BhZXRlciBnZW1hZXNzCisgICAgPG5ld21vZGU+IHNvIGdlc3BlaWNoZXJ0LCBkYXNzIGJlaSBkZXIgQXVzZ2FiZSBkZXMgUHVmZmVycyBtaXR0ZWxzCisgICAgUmluZ0J1ZmZlckdldCgpIGRpZSBlbnR3ZWRlciBkaWUgbmV1ZXN0ZW4gRGF0ZW4genVlcnN0IChNT0RFX0xJRk8pIG9kZXIKKyAgICBkaWUgYWVsdGVzdGVuIERhdGVuIHp1ZXJzdCAoTU9ERV9GSUZPKSBnZWxpZWZlcnQgd2VyZGVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgIERlciBuZXVlIFJpbmdwdWZmZXIuIERpZXNlciB3aXJkIGluIGVpbmVyIFN0cnVjdCBzdGRfcmluZ2J1ZmZlcgorICAgIGdlc3BlaWNoZXJ0LiBFciBpc3QgaW4gZWluZXIgVmFyaWFibGUgJ21peGVkJyBvZGVyIGluIGVpbmVyIG1pdHRlbHMKKyAgICAnc3RydWN0IHN0ZF9yaW5nYnVmZmVyJyBhbmdlbGVndGVuIFZhcmlhYmxlIHNwZWljaGVyYmFyLgorCitCRU1FUktVTkdFTjoKKyAgICBEZXIgZ2VsaWVmZXJ0ZSBSaW5ncHVmZmVyIHNvbGx0ZSBuaWNodCBwZXIgSGFuZCB2ZXJhcmJlaXRldCBvZGVyCisgICAgZ2VuYWVuZGVydCB3ZXJkZW4sIHNvbmRlcm4gbnVyIHVlYmVyIGRpZSBWZXJ3YWx0dW5nc2Z1bmt0aW9uZW4gYXVzCisgICAgL3N0ZC91dGlsL3JpbmdidWZmZXIuYy4KKworQkVJU1BJRUxFOgorICAgIC8vIFZhcmlhYmxlIGFubGVnZW46CisgICAgc3RydWN0IHN0ZF9yaW5nYnVmZmVyIGJ1ZmZlcjsKKyAgICAvLyBfb2Rlcl86IG1peGVkIGJ1ZmZlcjsKKyAgICAvLyBuZXVlbiBQdWZmZXIgbWl0IG1heC4gNTAgRWxlbWVudGVuIGFubGVnZW4sIGRlciBiZWkgZGVyIEFiZnJhZ2UgZGllCisgICAgLy8gYWVsdGVzdGVuIERhdGVuIHp1ZXJzdCB6dXJ1ZWNrbGllZmVydDoKKyAgICBidWZmZXIgPSBDcmVhdGVSaW5nQnVmZmVyKDUwLCBNT0RFX0ZJRk8pOworCitTSUVIRSBBVUNIOgorICAgIFJpbmdCdWZmZXJQdXQoKSwgUmluZ0J1ZmZlckdldCgpLCBSZXNpemVSaW5nQnVmZmVyKCkKKworMjMuMDUuMjAwOCwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9DdXN0b21pemVPYmplY3QgYi9kb2MvbGZ1bi9DdXN0b21pemVPYmplY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzNTA5MgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0N1c3RvbWl6ZU9iamVjdApAQCAtMCwwICsxLDUyIEBACitDdXN0b21pemVPYmplY3QoKQorCitGVU5LVElPTjoKKyAgIHN0cmluZyBDdXN0b21pemVPYmplY3QoKTsKKworREVGSU5JRVJUIElOOgorICAgL3N0ZC92aXJ0dWFsL3ZfY29tcGlsZXIuYworCitBUkdVTUVOVEU6CisgICBrZWluZQorCitSVWVDS0dBQkVXRVJUOgorICAgRGVuIE9iamVrdG5hbWVuLCBkZW4gZGFzIHp1bGV0enQgZXJ6ZXVndGUgT2JqZWt0ICh3ZWxjaGVzIGdlcmFkZSBkaWUKKyAgIEZ1bmt0aW9uIGF1ZnJ1ZnQpIHNwYWV0ZXIgdm9tIERyaXZlciBiZWtvbW1lbiB3aXJkLgorCitCRVNDSFJFSUJVTkc6CisgICBEaWVzZSBGdW5rdGlvbiBpc3QgYXVzIGRlbSBHcnVuZGUgZGEsIGRhIHp1bSBaZWl0cHVua3QgZGVzIENsb25lbnMgZGVzCisgICBWQy1PYmpla3RlcyAoUF9TVERfT0JKRUNUKSBkaWVzZXMgT2JqZWt0IGphIG5vY2ggbmljaHQgd2Vpc3MgV2VyCisgICBvZGVyIFdhcyBlcyBzcGFldGVyIG1hbCBzZWluIHdpcmQuCisgICBEZXNoYWxiIGthbm4gZGllc2VzIFZDLU9iamVrdCBpbSBjcmVhdGUoKSAodW5kIG51ciBkYSEpIGRpZSBGdW5rdGlvbgorICAgQ3VzdG9taXplT2JqZWN0KCkgaW4gZGVtIHZpcnR1YWxfY29tcGlsZXIgYXVmcnVmZW4sIHdlbGNoZXMgZGFzIE9iamVrdAorICAgZ2VjbG9udCBoYXQgdW5kIGJla29tbXQgdm9uIGRpZXNlbSBkZW4gT2JqZWt0bmFtZW4genVyZWNrLCB3ZWxjaGVzIGVzCisgICBzcGFldGVyIG1hbCBiZWtvbW1lbiB3aXJkLgorICAgRGEgZGFzIFZDLU9iamVrdCB2b20gVkMgZ2VjbG9udCB3dXJkZSwgaXN0IHByZXZpb3VzX29iamVjdCgpIGltIGNyZWF0ZSgpCisgICBkZXMgVkMtT2JqZWt0ZXMgZGVyIFZDLCBpbiBkZW0gbWFuIEN1c3RvbWl6ZU9iamVjdCgpIHJ1ZnQuCisKK0JFTUVSS1VOR0VOOgorICAgRGFzIEN1c3RvbWl6ZU9iamVjdCgpIGltIFN0YW5kYXJkLVZDIGdpYnQgbnVyIGRlbiB6dWt1ZW5mdGlnZW4gT2JqZWt0bmFtZW4KKyAgIHp1cnVlY2sgdW5kIG1hY2h0IHNvbnN0IG5peC4KKworQkVJU1BJRUxFOgorICAgY3JlYXRlKCkgZWluZXMgVkMtT2JqZWt0ZXM6CisgICAKKyAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZSgpIHsKKyAgICAgLi4uCisgICAgIAorICAgICAvLyB3ZXIgYmluIGljaCBkZW5uIGVpZ2VudGxpY2g/CisgICAgIHN0cmluZyBteW5hbWUgPSBwcmV2aW91c19vYmplY3QoKS0+Q3VzdG9taXplT2JqZWN0KCk7CisgICAgIHN3aXRjaChteW5hbWUpIHsKKyAgICAgICAvLyBLcmFtIGtvbmZpZ3VyaWVyLCBqYSBuYWNoIG15bmFtZS4uLiAKKyAgICAgfQorICAgICAKKyAgICAgLi4uCisgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIHZpcnR1YWxfY29tcGlsZXIKKyAgICAgQ3VzdG9taXplT2JqZWN0KCksIFZhbGlkYXRlKCksIE5vUGFyYU9iamVjdHMoKSwgCisgICAgIFBfQ09NUElMRVJfUEFUSCwgUF9QQVJBCisgICAgIC9zdGQvdmlydHVhbC92X2NvbXBpbGVyLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIxLjEwLjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0RhbWFnZSBiL2RvYy9sZnVuL0RhbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU4NTMxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRGFtYWdlCkBAIC0wLDAgKzEsMzQgQEAKK0RhbWFnZSgpCisKK0ZVTktUSU9OOgorICAgICBpbnQgRGFtYWdlKGludCBkYW0pOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvYXJtb3VyL2NvbWJhdC5jIHVuZAorICAgICAvc3RkL3dlYXBvbi9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIGRhbSAgRGVyIFdlcnQsIG1pdCBkZW0gZGllIFdhZmZlL1J1ZXN0dW5nIGJlc2NoYWVkaWcgd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgUF9XQyBiencuIFBfQUMgd2lyZCB1bSBkYW0gcmVkdXppZXJ0IHVuZCBQX0RBTUFHRUQgd2lyZCB1bQorICAgICBkYW0gZXJob2VodC4KKyAgICAgQmVpIGRhbT4wIHdpcmQgZGFzIE9iamVrdCBiZXNjaGFlZGlndCwgYmVpIGRhbTwwIHJlcGFyaWVydC4KKyAgICAgRGFiZWkgd2VyZGVuIHNvd29obCBkaWUgT2JlcmdyZW56ZW4gKHMuIC9zeXMvY29tYmF0LmgpIHdpZSBhdWNoCisgICAgIGRpZSBVbnRlcmdyZW56ZW4gKFdhZmZlbjozMCwgUnVlc3R1bmdlbjogMCkgZnVlciBQX1dDIHVuZCBQX0FDCisgICAgIGJlYWNodGV0LiBFcyBrYW5uIGF1Y2ggbmljaHQgbWVociByZXBhcmllcnQgd2VyZGVuLCBhbHMgdm9yaGVyCisgICAgIGJlc2NoYWVkaWd0IHd1cmRlLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEZXIgV2VydCBkZXIgQmVzY2hhZWRpZ3VuZywgZGllIHRhdHNhZWNobGljaCB2b3JnZW5vbW1lbiB3dXJkZS4KKworQkVNRVJLVU5HRU46CisgICAgIElzdCBkYXMgT2JqZWt0IGluIEJlbnV0enVuZywgc2V0enQgZGllIEZ1bmt0aW9uIERhbWFnZSBhdXRvbWF0aXNjaAorICAgICBkaWUgUHJvcGVydGllcyBQX1RPVEFMX1dDIGJ6dy4gUF9UT1RBTF9BQyBpbiBkZW0gYmVudXR6ZW5kZW4gU3BpZWxlcgorICAgICBhdWYgZGllIHJpY2h0aWdlbiBXZXJ0ZS4KKworU0lFSEUgQVVDSDoKKyAgICAgL3N0ZC9hcm1vdXIvY29tYmF0LmMsIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFRodSBNYXkgMjIgMTA6MTM6MjMgMTk5NyBieSBQYXJhY2Vsc3VzCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9EZUFzc29jTWVtYmVyIGIvZG9jL2xmdW4vRGVBc3NvY01lbWJlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjM1MzI2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRGVBc3NvY01lbWJlcgpAQCAtMCwwICsxLDQ4IEBACisKK0RlQXNzb2NNZW1iZXIoKQorCisKK0ZVTktUSU9OOgorICAgICAgICBpbnQgRGVBc3NvY01lbWJlcihvYmplY3QgbnBjKQorCitERUZJTklFUlQgSU46CisgICAgICAgIC9zdGQvbGl2aW5nL3RlYW0uYworCitBUkdVTUVOVEU6CisgICAgICAgIERlciBOUEMsIGRlciBuaWNodCBtZWhyIHp1Z2VvcmRuZXQgc2VpbiBzb2xsLgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIEhlYnQgZGllIFp1b3JkbnVuZyBlaW5lcyBOUENzIHp1IGVpbmVtIFNwaWVsZXIgYXVmLgorCitSVUVDS0dBQkVXRVJUOgorICAgICAgICAxLCBmYWxscyBBdWZoZWJ1bmcgZXJmb2xncmVpY2gsIHNvbnN0IDAuCisKK0JFSVNQSUVMOgorICAgICAgICB2b2lkIGZ1bihvYmplY3QgcGwpCisgICAgICAgIHsKKyAgICAgICAgIGlmICggcGwgJiYgcGwtPkRlQXNzb2NNZW1iZXIodGhpc19vYmplY3QoKSkgKQorICAgICAgICAgIHRlbGxfb2JqZWN0KHBsLGJyZWFrX3N0cmluZygKKyAgICAgICAgICAgICAgIkljaCBrYWVtcGZlIG51biBuaWNodCBtZWhyIGF1ZiBEZWluZXIgU2VpdGUhXG4iLDc4LAorICAgICAgICAgICAgICAiRWluIEZldWVydGV1ZmVsIHRlaWx0IERpciBtaXQ6Iik7CisgICAgICAgICAuLi4KKyAgICAgICAgfQorCitCRU1FUktVTkdFTjoKKyAgICAgICAgS2FubiBudXIgdm9uIEdpbGRlbiwgU3BlbGxib29rcywgdm9tIE9iamVrdCBzZWxiZXIgdW5kIHZvbQorICAgICAgICB6dWdlb3JkbmV0ZW4gTlBDIGF1ZmdlcnVmZW4gd2VyZGVuLgorCitTSUVIRSBBVUNIOgorICAgICAgICBVZWJlcnNpY2h0OiB0ZWFta2FtcGYKKyAgICAgICAgUHJvcGVydGllczogUF9URUFNLCBQX0FTU09DX01FTUJFUlMsIFBfVEVBTV9BVFRBQ0tfQ01ELAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fQVVUT0ZPTExPVywgUF9URUFNX0NPTE9SUywgUF9URUFNX0xFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX05FV01FTUJFUiwgUF9URUFNX1dBTlRFRF9ST1csIFBfVEVBTV9XSU1QWV9ST1cKKyAgICAgICAgQmV3ZWd1bmc6ICAgSXNUZWFtTW92ZSwgVGVhbUZsZWUKKyAgICAgICAgTWl0Z2xpZWRlcjogSXNUZWFtTGVhZGVyLCBUZWFtTWVtYmVycworICAgICAgICBLYW1wZjogICAgICBBc3NvY01lbWJlciwgSW5zZXJ0RW5lbXlUZWFtLCBTZWxlY3ROZWFyRW5lbXksCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdEZhckVuZW15CisgICAgICAgIFBvc2l0aW9uZW46IFByZXNlbnRQb3NpdGlvbiwgUHJlc2VudFJvd3MsIFByZXNlbnRFbmVteVJvd3MsCisgICAgICAgICAgICAgICAgICAgIFByZXNlbnRUZWFtUG9zaXRpb24sIFN3YXBSb3dzCisgICAgICAgIFNvbnN0aWdlczogIFRlYW1QcmVmaXgsIHRlYW1rYW1wZl9pbnRlcm4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMTYtMDgtMjAxMCwgR2FieWxvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRGVjbEFkaiBiL2RvYy9sZnVuL0RlY2xBZGoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlNDI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0RlY2xBZGoKQEAgLTAsMCArMSw0NiBAQAorRGVjbEFkaigpCisKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIHN0cmluZyBEZWNsQWRqKCBzdHJpbmcgYWRqLCBpbnQgY2FzdXMsIGludCBkZW1vbik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9sYW5ndWFnZS5jCisKK0FSR1VNRU5URToKKyAgICAgYWRqCisgICAgICAgICAgRGFzIHp1IGRla2xpbmllcmVuZGUgQWRqZWt0aXYuCisKKyAgICAgY2FzdXMKKyAgICAgICAgICBEZXIgRmFsbCwgaW4gZGVuIGVzIGRla2xpbmllcnQgd2VyZGVuIHNvbGwuCisKKyAgICAgZGVtb24KKyAgICAgICAgICBCZXppZWh0IHNpY2ggZGFzIEFkamVrdGl2IGF1ZiBlaW5lbiBiZXN0aW1tdGVuIG9kZXIgZWluZW4KKyAgICAgICAgICB1bmJlc3RpbW10ZW4gR2VnZW5zdGFuZD8KKworQkVTQ0hSRUlCVU5HOgorICAgICBEZWtsaW5pZXJ0IGRhcyB1ZWJlcmdlYmVuZSBBZGpla3RpdiBpbiBkZW4gYW5nZWdlYmVuZW4gRmFsbC4gSXN0IGRlbW9uCisgICAgIHVuZ2xlaWNoIE51bGwsIHNvIHdpcmQgZGFzIEFkamVrdGl2IHNvIGJlaGFuZGVsdCwgYWxzIHd1ZXJkZSBlcyBzaWNoCisgICAgIGF1ZiBlaW5lbiBiZXN0aW1tdGVuIEdlZ2Vuc3RhbmQgYmV6aWVoZW4sIGFuc29uc3RlbiBiZXppZWh0IGVzIHNpY2ggYXVmCisgICAgIGVpbmVuIHVuYmVzdGltbXRlbiBHZWdlbnN0YW5kLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEYXMgZGVrbGluaWVydGUgQWRqZWt0aXYuIEVzIHdpcmQgenVzYWV0emxpY2ggbm9jaCBlaW4gTGVlcnplaWNoZW4KKyAgICAgaGludGVuIGFuZ2VmdWVndCEKKworQkVJU1BJRUxFOgorICAgICBadW5hZWNoc3QgZWluIGJlc3RpbW10ZXMgQWRqZWt0aXY6CisKKyAgICAgcHJpbnRmKCJEZXIgJXNCYWxsLlxuIiwgYmFsbC0+RGVjbEFkaigiZ3J1ZW4iLCBXRVIsIDEpOworCisgICAgIE51biBlaW4gdW5iZXN0aW1tdGVzIEFkamVrdGl2OgorCisgICAgIHByaW50ZigiRWluICVzQmFsbC5cbiIsIGJhbGwtPkRlY2xBZGooImdydWVuIiwgV0VSLCAwKTsKKworICAgICBEYSBEZWNsQWRqKCkgImdydWVuZSAiIGJ6dy4gImdydWVuZXIgIiB6dXJ1ZWNrZ2lidCwgZGFyZiB6d2lzY2hlbiBkZW0KKyAgICAgIiVzIiB1bmQgZGVtICJCYWxsIiBrZWluIExlZXJ6ZWljaGVuIHN0ZWhlbiEKKworU0lFSEUgQVVDSDoKKyAgICAgL3N0ZC90aGluZy9sYW5ndWFnZS5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoxODowNSAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRGVmZW5kIGIvZG9jL2xmdW4vRGVmZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjI2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9EZWZlbmQKQEAgLTAsMCArMSwxNTAgQEAKK0RlZmVuZCgpCitGVU5LVElPTjoKKyAgICAgcHVibGljIGludCBEZWZlbmQoaW50IGRhbSwgc3RyaW5nfHN0cmluZyogZGFtX3R5cGUsIGludHxtYXBwaW5nIHNwZWxsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBlbmVteSkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9jb21iYXQKKworQVJHVU1FTlRFOgorICAgICBpbnQgZGFtICAgICAgICAgICAgICAgICAgaW5pdGlhbGUgU3RhZXJrZSBkZXMgQW5ncmlmZnMgKDEwIGRhbSB+IDEgSFApCisgICAgIHN0cmluZyogZGFtX3R5cGUgICAgICAgICBBcnQoZW4pIGRlcyBTY2hhZGVucywgZGVyIGFuZ2VyaWNodGV0IHdlcmRlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzcyBlaW4gQXJyYXkgdm9uIFNjaGFkZW5zdHlwZW4gc2VpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGUgT2JqZWt0ZSB1ZWJlcmdlYmVuIGhpZXIgbWFuY2htYWwgc3RyaW5ncy4KKyAgICAgaW50L21hcHBpbmcgc3BlbGwgICAgICAgIC0gMCBmdWVyIG5vcm1hbGUgQW5ncmlmZmUgKGtlaW5lIFphdWJlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSBmdWVyIFphdWJlciAoU3RhbmRhcmRydWVzdHVuZ2VuIGlnbm9yaWVyZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIG1hcHBpbmcgZnVlciBtZWhyIEluZm9ybWF0aW9uZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhldXRlIGJpdHRlIG5hY2ggTW9lZ2xpY2hrZWl0IGVpbiBNYXBwaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZWJlcmdlYmVuLgorICAgICBvYmplY3QgZW5lbXkgICAgICAgICAgICAgZGVyIEZlaW5kL1NjaGFkZW52ZXJ1cnNhY2hlcgorCitCRVNDSFJFSUJVTkc6CisgICAgIDEuIEdlbmVyZWxsCisgICAgIFdlbm4gZGFzIExlYmV3ZXNlbiBhbmdlZ3JpZmZlbiB3aXJkLCB3aXJkIGdlcHJ1ZWZ0LCB3aWUgc3RhcmsgZGllCisgICAgIFJ1ZXN0dW5nZW4gdW5kIGtvZXJwZXJlaWdlbmVuIEFid2VocmtyYWVmdGUgc2luZCB1bmQgZGllIFN0YWVya2UgZGVzCisgICAgIFNjaGFkZW5zIGRlbWVudHNwcmVjaGVuZCB2ZXJtaW5kZXJ0LgorICAgICBHZ2YuIHdpcmQgZGVyIFNjaGFkZW4genVnZWZ1ZWd0IHVuZCBkZXIgRmVpbmQgaW4gIGRpZSBMaXN0ZSBkZXIgRmVpbmRlCisgICAgIGF1Zmdlbm9tbWVuLiBEZXIgU2NoYWRlbiBiZXRyYWVndDoKKyAgICAgIChkYW0tU3VtbWUoUnVlc3R1bmdzc3RhZXJrZW4pLXJhbmRvbShQX0JPRFkrQV9ERVgpKSpDaGVja1Jlc2lzdGFuY2UvMTAKKyAgICAgYWJlciBuaWNodCB1bnRlciAwLgorCisgICAgIDIuIERlciBQYXJhbWV0ZXIgJ3NwZWxsJworICAgICBJc3QgJ3NwZWxsJyAwLCBkYW5uIGdpbHQgZGVyIEFuZ3JpZmYgYWxzIG5vcm1hbGUgcGh5c2lzY2hlIEF0dGFja2UKKyAgICAgVWViZXJnaWJ0IG1hbiBhbHMgJ3NwZWxsJy1QYXJhbWV0ZXIgZWluIE1hcHBpbmcsIHNvIGdpYnQgZXMgZGFmdWVyCisgICAgIGRpdmVyc2UgRmxhZ3MsIGRpZSBkYXMgRXJnZWJuaXMgbWFuaXB1bGllcmVuIChpbiBuZXdfc2tpbGxzLmgKKyAgICAgZW50aGFsdGVuKS4gTmljaHRhbmdhYmUgZWluZXMgRmxhZ3MgZ2lsdCBhbHMgMC4KKworICAgICAtIFNQX1BIWVNJQ0FMX0FUVEFDSyAtLS0tLS0tLS0tIDAvMQorICAgICAgICAgICAgICAgIDEsIHdlbm4gUnVlc3R1bmdlbiB3aXJrZW4gc29sbGVuLCAwIHNvbnN0CisgICAgICAgICAgICAgICAgLT4gZW50c3ByaWNodCAhc3BlbGwsIHdlbm4gZGllc2VzIEludCBpc3QKKyAgICAgLSBTUF9OT19FTkVNWSAtLS0tLS0tLS0tLS0tLS0tLSAwLzEKKyAgICAgICAgICAgICAgICAxLCBmYWxscyBkZXIgQW5ncmlmZiBuaWNodCB0b2VkbGljaCBpc3QsIGVzIGFsc28ga2VpbmVuIGVjaHRlbgorICAgICAgICAgICAgICAgIEdlZ25lciBnaWJ0CisgICAgICAgICAgICAgICAgLT4gZXMgd2lyZCBkYW5uIHJlZHVjZV9oaXRfcG9pbnRzKCkgZ2VydWZlbiBzdGF0dCBkb19kYW1hZ2UoKQorICAgICAtIFNQX05PX0FDVElWRV9ERUZFTlNFIC0tLS0tLS0tIDAvMQorICAgICAgICAgICAgICAgIDEsIGZhbGxzIGFrdGl2ZSBBYndlaHJlbiAod2llIHp1cnVlY2tzY2hsYWdlbmRlIEFtdWxldHRlLAorICAgICAgICAgICAgICAgIEthcmF0ZWFid2VocmVuIG9kZXIgQXVzd2VpY2htYW5vZXZlcikgdW50ZXJibGVpYmVuIHNvbGxlbgorICAgICAgICAgICAgICAgIC0+IHpCIGJlaSBLcmF0emVuIGR1cmNoIERvcm5lbiBvZGVyIEZhbGwgYXVzIGdyb3NzZXIgSG9laGUKKyAgICAgICAgICAgICAgICAgICBpc3QgYWt0aXZlIEFid2VociBvZGVyIEF1c3dlaWNoZW4gdW5sb2dpc2NoCisgICAgIC0gU1BfUkVDVVJTSVZFIC0tLS0tLS0tLS0tLS0tLS0gMC8xCisgICAgICAgICAgICAgICAgMSwgZmFsbHMgZGVyIFNwZWxsIGF1cyBlaW5lbSBEZWZlbmQgZ2VydWZlbiB3dXJkZSAob2RlciBlaW5lcgorICAgICAgICAgICAgICAgIERlZmVuZEZ1bmMpCisgICAgICAgICAgICAgICAgLT4gdmVyaGluZGVydCBSZWt1cnNpb25zcHJvYmxlbWUKKyAgICAgLSBTUF9OQU1FIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdHJpbmcKKyAgICAgICAgICAgICAgICBOYW1lIGRlcyBTcGVsbHMKKyAgICAgLSBTUF9SRURVQ0VfQVJNT1VSIC0tLS0tLS0tLS0tLSBNYXBwaW5nOiBrZXlzIEFUX1gvUF9CT0RZLCB2YWx1ZXMgaW50Pj0wCisgICAgICAgICAgICAgICAgRGllIFNjaHV0endpcmt1bmcgZHVyY2ggUF9BQy9NYWdpZSBlaW5lciBSdWVzdHVuZyB3aXJkCisgICAgICAgICAgICAgICAgdHlwYWJoYWVuZ2lnIHJlZHV6aWVydC4gQXVmYmF1IGVpbmVzIE1hcHBpbmdzIGltIEJlaXNwaWVsOgorICAgICAgICAgICAgICAgIChbQVRfQk9PVFM6IDAsICAvLyBTdGllZmVsIHNjaHVldHplbiBnYXIgbmljaHQKKyAgICAgICAgICAgICAgICAgIFBfQk9EWTogIDUwLCAgLy8gS29lcnBlciB6dSA1MCUKKyAgICAgICAgICAgICAgICAgIEFUX0JFTFQ6IDYwMCAgLy8gR3VlcnRlbCB6dSA2MDAlCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgICAtPiBhbGxlICdmZWhsZW5kZW4nIEVpbnRyYWVnZSB3aXJrZW4gbm9ybWFsCisgICAgIC0gU1BfU0hPV19EQU1BR0UgLS0tLS0tLS0tLS0tLS0gMC8xIG9kZXIgQXJyYXkgdm9uIEFycmF5cworICAgICAgICAgICAgICAgIDAsIGZ1ZXIga2VpbmUgVHJlZmZlcm1lbGR1bmcsIDEgc29uc3QKKyAgICAgICAgICAgICAgICBJbiBlaW5lbSBBcnJheSBrb2VubmVuIEVyc2F0ei1UcmVmZmVybWVsZHVuZ2VuIGRlZmluaWVydAorICAgICAgICAgICAgICAgIHdlcmRlbi4gRm9ybWF0IGlzdDoKKyAgICAgICAgICAgICAgICAoeworICAgICAgICAgICAgICAgICAoeyBpbnQgbHBoaXQxLCBzdHJpbmcgbWVzc19tZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIG1lc3NfZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBtZXNzX3Jvb20gfSksCisgICAgICAgICAgICAgICAgICh7IGxwaGl0MiwgbWVzc19tZSwgbWVzc19lbiwgbWVzc19yb29tIH0pLAorICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgKHsgbHBoaXRuLCBtZXNzX21lLCBtZXNzX2VuLCBtZXNzX3Jvb20gfSksCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICB3b2JlaSBscGhpdDE8bHBoaXQyPC4uLjxscGhpdG4gc2VpbiBtdXNzLCBkLmguIGRhcyBBcnJheS0KKyAgICAgICAgICAgICAgICBBcnJheSBhdWZzdGVpZ2VuZCBzb3J0aWVydC4KKworICAgICAgICAgICAgICAgIElzdCBlaW4gVHJlZmZlciB4IExQIGhhcnQsIHdlcmRlbiBkaWUgTWVsZHVuZ2VuIGRlcyBscGhpdC0KKyAgICAgICAgICAgICAgICBBcnJheXMgYXVzZ2VnZWJlbiwgZGVzc2VuIFdlcnQgYW0gbmFlaGVzdGVuIHVudGVyIGRlbSBTY2hhZGVuCisgICAgICAgICAgICAgICAgbGllZ3QuCisKKyAgICAgICAgICAgICAgICBJbiBkZW4gTWVsZHVuZ2VuIG1lc3NfbWUgKGFuIGRlbiBHZXRyb2ZmZW5lbiksIG1lc3NfZW4gKGFuCisgICAgICAgICAgICAgICAgZGVuIEZlaW5kKSwgbWVzc19yb29tIChhbiBkaWUgcmVzdGxpY2hlbiBVbXN0ZWhlbmRlbikga29lbm5lbgorICAgICAgICAgICAgICAgIEVyc2F0enN0cmluZ3Mgd2llIGZvbGd0IHZlcndlbmRldCB3ZXJkZW46CisgICAgICAgICAgICAgICAgQFdFUjEvQFdFU1NFTjEvQFdFTTEvQFdFTjEgLSBuYW1lKGNhc3VzKSBkZXMgR2V0cm9mZmVuZW4gKFRPKQorICAgICAgICAgICAgICAgIEBXRVIyL0BXRVNTRU4yL0BXRU0yL0BXRU4yIC0gbmFtZShjYXN1cykgZGVzIEZlaW5kZXMgKGVuZW15KQorICAgICAtIEVJTkZPX0RFRkVORCAtLS0tLS0tLS0tLS0gTWFwcGluZworICAgICAgICAgICAgICAgIERpZXNlcyBNYXBwaW5nIGxpZWZlcnQgZXJ3ZWl0ZXJ0ZSBJbmZvcm1hdGlvbmVuIHp1IGRlbQorICAgICAgICAgICAgICAgIGJpc2hlcmlnZW4gQWJsYXVmIGRlcyBha3RpdmVuIEF0dGFja3MuCisgICAgICAgICAgICAgICAgRGllIHZlcmZ1ZWdiYXJlbiBJbmZvcm1hdGlvbmVuIHNpbmQgaW4gZGVyIE1hbnBhZ2UgenUKKyAgICAgICAgICAgICAgICBEZWZlbmRJbmZvIGZlc3RnZWhhbHRlbi4KKworICAgICAzLiBSZWloZW5mb2xnZW4gaW4gRGVmZW5kCisgICAgIC0gZGFzIExpdmluZyB3aXJkIGFuZ2VncmlmZmVuLCB3ZW5uCisgICAgICAgLSBQX05PX0FUVEFDSyAhPSAwCisgICAgICAgLSAnZW5lbXknIGV4aXN0aWVydCB1bmQga2VpbiBuZXR6dG90ZXIgU3BpZWxlciBpc3QKKyAgICAgLSBQX0RFRkVOREVSUyB3ZXJkZW4gZHVyY2hnZWdhbmdlbiAodW5kIGV2ZW50dWVsbCBiZW5hY2hyaWNodGlndCkKKyAgICAgLSBQX1RNUF9BVFRBQ0tfSE9PSyB3aXJkIGFiZ2VmcmFndAorICAgICAtIGRpZSBSdWVzdHVuZ2VuIHdlcmRlbiB2b20gU2NoYWRlbiBnZWdlYmVuZW5mYWxscyBhYmdlem9nZW4KKyAgICAgLSBtYWdpc2NoZXIgQXVzd2VpY2hza2lsbCBiZXJ1ZWNrc2ljaHRpZ3QKKyAgICAgLSBzZW5zaXRpdmUgT2JqZWt0ZSB3ZXJkZW4gZ2dmLiBiZW5hY2hyaWNodGlndAorICAgICAtIEludGVybmFsTW9kaWZ5RGVmZW5kIHdpcmQgZ2VydWZlbgorICAgICAtIEtvZXJwZXJhYndlaHIgYWJnZXpvZ2VuCisgICAgIC0gZGVyIFNjaGFkZW4gYW4gZG9fZGFtYWdlKCkvcmVkdWNlX2hpdF9wb2ludHMoKSB1ZWJlcmdlYmVuCisgICAgIC0gRmx1Y2h0IHVlYmVycHJ1ZWZlbiBtaXQgQ2hlY2tXaW1weUFuZEZsZWUoKQorCitCRU1FUktVTkdFTjoKKyAgICAgUnVlc3R1bmdlbiB3aXJrZW4ga29udmVudGlvbmVsbCBudXIsIHdlbm4gbWluZGVzdGVucyBlaW4gU2NoYWRlbnNhbnRlaWwKKyAgICAgbWVjaGFuaXNjaCBpc3QgdW5kIGVzIGtlaW4gU3BlbGwgb2RlciBlaW4gU3BlbGwgbWl0IFNQX1BIWVNJQ0FMX0FUVEFDSworICAgICBhdWYgMSBpc3QuCisKKyAgICAgRGVmZW5kKCkgYmVydWVja3NpY2h0aWd0IG1hZ2lzY2hlIFZlcnRlaWRpZ3VuZ2VuLCBkaWUgZGVyIFNwaWVsZXIgYmVpCisgICAgIHNpY2ggaGF0LCBzb2xsdGUgYWxzbyBhdXMgRmFpcm5lc3MgZ2VnZW51ZWJlciBkZW4gT2JqZWt0ZW4gYW5kZXJlcgorICAgICBNYWdpZXIgaW1tZXIgZGVtIGRpcmVrdGVuIHJlZHVjZV9oaXRfcG9pbnRzKCkgb2RlciBkb19kYW1hZ2UoKQorICAgICB2b3JnZXpvZ2VuIHdlcmRlbi4gTWl0dGVscyBkZXIgRmxhZ3MgaW4gJ3NwZWxsJyBrYW5uIG1hbiBzZWhyIHZpZWwKKyAgICAgYWVuZGVybi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgSG9laGUgZGVzIHRhdHNhZWNobGljaGVuIFNjaGFkZW5zLiBEaWVzIGthbm4gbWVociBzZWluIGFscyBkaWUKKyAgICAgTGViZW5zcHVua3RlIGRlcyBMZWJld2VzZW5zLgorCitCRUlTUElFTEUgKFNJRUhFIEFVQ0ggRGVmZW5kX2JzcCk6CisgICAgIC8vIGVpbiBzaW1wbGVyIEFuZ3JpZmY6CisgICAgIGVuZW0tPkRlZmVuZCgxMDAsICh7RFRfQkxVREdFT059KSwgMCwgdGhpc19vYmplY3QoKSk7CisKKyAgICAgLy8gZWluIG1hZ2lzY2hlciBBbmdyaWZmIChvaG5lIFRyZWZmZXJtZWxkdW5nKToKKyAgICAgZW5lbS0+RGVmZW5kKDEwMCwgKHtEVF9CTFVER0VPTiwgRFRfRklSRX0pLCAxLCB0aGlzX29iamVjdCgpKTsKKworICAgICAvLyBlaW4gbWFnaXNjaGVyIEFuZ3JpZmYgbWl0IFRyZWZmZXJtZWxkdW5nOgorICAgICBlbmVtLT5EZWZlbmQoMTAwLCAoe0RUX0JMVURHRU9OLCBEVF9GSVJFfSksIChbU1BfU0hPV19EQU1BR0U6MV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqZWN0KCkpOworCitTSUVIRSBBVUNIOgorICAgICBBbmdyaWZmOiAgIEF0dGFjayhMKSwgUF9OT19BVFRBQ0ssIEluc2VydEVuZW15KEwpCisgICAgIFNjaGFkZW46ICAgUF9FTkFCTEVfSU5fQVRUQUNLX09VVCwgUF9MQVNUX01PVkUsCisgICAgICAgICAgICAgICAgZG9fZGFtYWdlKEwpLCByZWR1Y2VfaGl0X3BvaW50cyhMKQorICAgICBTY2h1dHo6ICAgIFBfREVGRU5ERVJTLCBJbmZvcm1EZWZlbmQoTCksIERlZmVuZE90aGVyKEwpCisgICAgICAgICAgICAgICAgUF9BUk1PVVJTLCBQX0FDLCBQX0RFRkVORF9GVU5DLCBRdWVyeURlZmVuZChMKQorICAgICAgICAgICAgICAgIFBfQk9EWSwgQV9ERVgKKyAgICAgRGF0ZW46ICAgICBQX0xBU1RfQ09NQkFUX1RJTUUKKyAgICAgICAgICAgICAgICBQX0xBU1RfREFNVFlQRVMsIFBfTEFTVF9EQU1USU1FLCBQX0xBU1RfREFNQUdFCisgICAgICAgICAgICAgICAgUF9EQU1BR0VfTVNHCisgICAgIFJlc2lzdGVuejogUF9SRVNJU1RBTkNFX1NUUkVOR1RIUywgQ2hlY2tSZXNpc3RhbmNlKEwpCisgICAgIFNvbnN0aWdlczogQ2hlY2tTZW5zaXRpdmVBdHRhY2soTCkKKyAgICAgICAgICAgICAgICBJbnRlcm5hbE1vZGlmeURlZmVuZChMKQorICAgICAgICAgICAgICAgIFVzZVNraWxsKEwpLAorICAgICAgICAgICAgICAgIERlZmVuZEluZm8KKworMTUuMDkuMjAxMCwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRGVmZW5kRnVuYyBiL2RvYy9sZnVuL0RlZmVuZEZ1bmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0M2UwNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0RlZmVuZEZ1bmMKQEAgLTAsMCArMSw3OCBAQAorRGVmZW5kRnVuYyhMKQorCitGVU5LVElPTjoKKyAgICAgaW50IERlZmVuZEZ1bmMoc3RyaW5nfHN0cmluZyAqZHR5cCwgaW50fG1hcHBpbmdzcGVsbCwgb2JqZWN0IGVuZW15KTsKKworREVGSU5JRVJUIElOOgorICAgICBlaWdlbmVuIE9iamVrdGVuOyBmdWVyIC9zdGQvYXJtb3VyL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgZHR5cAorICAgICAgICAgIFNjaGFkZW5zdHlwZW4gZGVyIEFuZ3JpZmZzYXJ0LgorICAgICAgICAgIFNvbGx0ZSBoZXV0ZSBlaW4gc3RyaW5nKiBzZWluLgorICAgICBzcGVsbAorICAgICAgICAgIDAgYmVpIHZlcmFsdGV0ZW4ga29udmVudGlvbmVsbGVuIEFuZ3JpZmZlbiBpbSBSZWdlbGZhbGwgamVkb2NoCisgICAgICAgICAgZWluIE1hcHBpbmcgbWl0IHdlaXRlcmVuIEluZm9zLgorICAgICAgICAgIEJlaSBlaW5lbSBrb252ZW50aW9uZWxsZW4gQW5ncmlmZiBpc3Qgc3BlbGxbU1BfUEhZU0lDQUxfQVRUQUNLXSBnbGVpY2gKKyAgICAgICAgICAxLgorICAgICBlbmVteQorICAgICAgICAgIERlciBhbmdyZWlmZW5kZSBHZWduZXIKKworQkVTQ0hSRUlCVU5HOgorICAgICBBbmhhbmQgZGVyIHVlYmVyZ2ViZW5lbiBQYXJhbWV0ZXIga2FubiBoaWVyIGVpbiBSdWVzdHVuZ3Nib251cyAob2RlcgorICAgICBhdWNoIGVpbiBSdWVzdHVuZ3NtYWx1cykgZXJyZWNobmV0IHdlcmRlbiwgZGVyIHp1IGRlbSBub3JtYWxlbgorICAgICBSdWVzdHVuZ3N3ZXJ0IChhYmhhZW5naWcgdm9uIGRlciBBbmdyaWZmc2FydCkgaGluenVhZGRpZXJ0IHdpcmQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERlciBSdWVzdHVuZ3Nib251cywgZGVyIHp1ciBSdWVzdHVuZ3NrbGFzc2UgYWRkaWVydCB3ZXJkZW4gc29sbC4KKworQkVNRVJLVU5HRU46CisgICAgIEF1Y2ggd2VubiBtYW4gZWluZSBEZWZlbmRGdW5jKCkgYmVudXR6dCwgZGFyZiBkZXIgUnVlY2tnYWJld2VydAorICAgICB6dXNhbW1lbiBtaXQgZGVyIFBfQUMgaW5zZ2VzYW10IG51ciBpbiBzZWhyIHNlbHRlbmVuLCB3b2hsZHVyY2gtCisgICAgIGRhY2h0ZW4gQXVzbmFobWVmYWVsbGVuIGRpZSBtYXhpbWFsIHp1bGFlc3NpZ2UgUF9BQyBmdWVyIGRpZXNlbgorICAgICBSdWVzdHVuZ3N0eXAgdWViZXJzY2hyZWl0ZW4uIEluIHNvbGNoZW4gQXVzbmFobWVmYWVsbGVuIGR1ZXJmZW4KKyAgICAgZGllIERlZmVuZEZ1bmNzIG5pY2h0IGtvbnN0YW50IHdpcmtlbi4KKworICAgICBCZWkgYWt0aXZlbSBadXJ1ZWNrc2NobGFnZW4gSU1NRVIgYXVmIEZsYWdzIHdpZSBTUF9SRUNVUlNJVkUgdW5kCisgICAgIFNQX05PX0FDVElWRV9ERUZFTlNFIHBydWVmZW4gdW5kIGdnZi4gYWJicmVjaGVuLgorCitCRUlTUElFTEU6CisgICAgIEVpbmUgUnVlc3R1bmcsIGRpZSBiZWkgQW5ncmlmZmVuIG1pdCBGZXVlciBpaHJlIHZvbGxlIFN0YWVya2UgZW50ZmFsdGV0CisgICAgIHVuZCBiZWkgQW5ncmlmZmVuIGR1cmNoIEdlaXN0ZXIgZ2VzY2h3YWVjaHQgd2lyZDoKKworICAgICB2b2lkIGNyZWF0ZSgpCisgICAgIHsKKyAgICAgICA6OmNyZWF0ZSgpOworCisgICAgICAgU2V0UHJvcChQX0FSTU9VUl9UWVBFLCBBVF9BUk1PVVIpOworICAgICAgIFNldFByb3AoUF9BQywgMjApOworICAgICAgIC4uLgorICAgICAgIC8vIERpZSBEZWZlbmRGdW5jKCkgaXN0IGluIGRlciBSdWVzdHVuZyBzZWxic3QgZGVmaW5pZXJ0CisgICAgICAgU2V0UHJvcChQX0RFRkVORF9GVU5DLCB0aGlzX29iamVjdCgpKTsKKyAgICAgfQorCisgICAgIGludCBEZWZlbmRGdW5jKHN0cmluZyAqZHR5cCwgbWl4ZWQgc3BlbGwsIG9iamVjdCBlbmVteSkKKyAgICAgeworICAgICAgIGludCBwcm90OworCisgICAgICAgLy8gWnVlcnN0IGZyYWdlbiB3aXIgZGVuIEFuZ3JpZmYgZHVyY2ggRmV1ZXIgYWI6CisgICAgICAgaWYgKG1lbWJlcihkdHlwLCBEVF9GSVJFKSA+PSAwKSAgLy8gRmV1ZXIgZ2Vob2VydCB6dSBkZW4gU2NoYWRlbnN0eXBlbgorICAgICAgICAgcHJvdCA9IDUgKyByYW5kb20oMTApOyAvLyBEYXMgZXJnaWJ0IG1heGltYWwgMTQuIFp1c2FtbWVuIG1pdCBQX0FDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtvbW10IG1hbiBhbHNvIG1heGltYWwgYXVmIDE0KzIwID0gMzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpZWd0IGFsc28gdW50ZXIgZGVyIGZ1ZXIgQVRfQVJNT1VSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdlbHRlbmRlbiBPYmVyZ3JlbnplCisKKyAgICAgICAvLyBVbmQgamV0enQgZGVyIEdlaXN0ZXJ0ZXN0CisgICAgICAgaWYgKGVuZW15LT5RdWVyeVByb3AoUF9SQUNFKSA9PSAiR2Vpc3QiIHx8CisgICAgICAgICAgIGVuZW15LT5pc19jbGFzc19tZW1iZXIoQ0xfR0hPU1QpKQorICAgICAgICAgcHJvdCAtPSByYW5kb20oMTApOworCisgICAgICAgLy8gRGVyIFJ1ZWNrZ2FiZXdlcnQgd2lyZCBhdWYgZGVuIGF1cyBQX0FDIGVycmVjaG5ldGVuIFdlcnQgZHJhdWZnZXNjaGxhZ2VuCisgICAgICAgcmV0dXJuIHByb3Q7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgUF9ERUZFTkRfRlVOQywgUXVlcnlEZWZlbmQoKSwgL3N0ZC9hcm1vdXIvY29tYmF0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMTguSnVsIDIwMDYgTXVhZGliCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9EZWZlbmRJbmZvIGIvZG9jL2xmdW4vRGVmZW5kSW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjAzNTJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRGVmZW5kSW5mbwpAQCAtMCwwICsxLDE2OCBAQAorRGVmZW5kSW5mbworRlVOS1RJT046CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N5cy9jb21iYXQuaAorCitBUkdVTUVOVEU6CisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllIERlZmVuZEluZm9ybWF0aW9uZW4gd2VyZGVuIGltIFJ1bmRlIGVpbmVzIEF0dGFjay9EZWZlbmQgVm9yZ2FuZ3MgCisgICAgIGluIEF0dGFjayBpbml0aWFsIGFuZ2VsZWd0IHVuZCBkZW0gRGVmZW5kIHVlYmVyIGRlbiBQYXJhbWV0ZXIgc3BlbGwKKyAgICAgdWViZXJnZWJlbi4gSXN0IGRpZXNlciBQYXJhbWV0ZXIgZWluIE1hcHBpbmcsIHNvIHNpbmQgZGllIAorICAgICBEZWZlbmRJbmZvcm1hdGlvbmVuIHVlYmVyIGRlbiBLZXkgRUlORk9fREVGRU5EIHp1IGVyaGFsdGVuLgorICAgICBEaWUgSW5mb3JtYXRpb25lbiBsaWVnZW4gaW4gRm9ybSBlaW5lcyBNYXBwaW5ncyB2b3IuCisgICAgIFZvciBadWdyaWZmIHNvbGx0ZSBpbW1lciBhdWYgZGllIEV4aXN0ZW56IGRpZXNlcyBLZXlzIGluIGRlbSBNYXBwaW5nCisgICAgIGdlcHJ1ZWZ0IHdlcmRlbiwgZGEgbmljaHQgYWxsZSBJbmZvcm1hdGlvbmVuIGltbWVyIGV4aXN0aWVyZW4uCisgICAgIERpZSBLZXlzIHNpbmQgaW4gY29tYmF0LmggZGVmaW5pZXJ0IHVuZCBzaW5kIGZvbGdlbmRlOgorICAgICAKKyAgICBPUklHSU5BTF9BSU5GTyAtIE1hcHBpbmcgCisgICAgICAgIEhpZXIgaXN0IGVpbmUgS29waWUgZGVzIG9yaWdpbmFsZW4gYWluZm8tbWFwcGluZ3MgZGVzIEF0dGFja3MgCisgICAgICAgIHZvcmhhbmRlbiBtaXQgZm9sZ2VuZGVuIEVpbnRyYWVnZW46CisgICAgICAgIEltbWVyIHZvcmhhbmRlbmUgRWludHJhZWdlOgorICAgICAgICAgIFNJX0VORU1ZICAgICAgICAgICAgICBkZXIgYW5nZWdyaWZmZW5lIEdlZ25lcgorICAgICAgICAKKyAgICAgICAgQW5ncmlmZiBtaXQgZ2V6dWVja3RlciBXYWZmZToKKyAgICAgICAgICBQX1dFQVBPTiAgICAgICAgICAgICAgZGFzIFdhZmZlbm9iamVrdCBzZWxic3QKKyAgICAgICAgICBQX1dFQVBPTl9UWVBFICAgICAgICAgUF9XRUFQT05fVFlQRSBkZXIgV2FmZmUKKyAgICAgICAgICBQX1dDICAgICAgICAgICAgICAgICAgUF9XQyBkZXIgV2FmZmUKKyAgICAgICAgICBQX05SX0hBTkRTICAgICAgICAgICAgUF9OUl9IQU5EUyBkZXIgV2FmZmUKKyAgICAgICAgICBTSV9TS0lMTERBTUFHRV9UWVBFICAgUF9EQU1fVFlQRSBkZXIgV2FmZmUKKyAgICAgICAgICBTSV9TS0lMTERBTUFHRSAgICAgICAgd2FmZmUtPlF1ZXJ5RGFtYWdlKGVuZW15KQorICAgICAgICAgICAgIGJlaSB2b3JoYW5kZW5lbSBad2VpaGFuZHNraWxsIFNLX1RXT0hBTkRFRCB3aXJkIG51ciBkZXIgZHVyY2ggCisgICAgICAgICAgICAgZGVuIFNraWxsIG1vZGlmaXppZXJ0ZSBTY2hhZGVuc3dlcnQgdWViZXJub21tZW4KKyAgICAgICAgICBTSV9TS0lMTERBTUFHRV9NU0cgICAgIm1pdCAiK3dhZmZlLT5uYW1lKFdFTSwwKQorICAgICAgICAgIFNJX1NLSUxMREFNQUdFX01TRzIgICAibWl0ICIrd2FmZmUtPm5hbWUoV0VNLDEpCisgICAgICAgICAgU0lfU1BFTEwgICAgICAgICAgICAgIDAKKworICAgICAgICBBbmdyaWZmIG1pdCBibG9zc2VuIEhhZW5kZW46CisgICAgICAgICAgUF9XRUFQT05fVFlQRSAgICAgICAgIFdUX0hBTkRTCisgICAgICAgICAgUF9XQyAgICAgICAgICAgICAgICAgIFBfSEFORFNbMV0KKyAgICAgICAgICBTSV9TS0lMTERBTUFHRSAgICAgICAgU2NoYWRlbnN3ZXJ0LCBhdXMgUF9IQU5EU1sxXSB1bmQgQV9TVFIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlcmVjaG5ldAorICAgICAgICAgIFNJX1NLSUxMREFNQUdFX1RZUEUgICBQX0hBTkRTWzJdCisgICAgICAgICAgU0lfU0tJTExEQU1BR0VfTVNHCisgICAgICAgICAgU0lfU0tJTExEQU1BR0VfTVNHMiAgIGJlaWRlcyBQX0hBTkRTWzBdCisgICAgICAgICAgU0lfU1BFTEwgICAgICAgICAgICAgIDAKKyAgICAgICAgICAKKyAgICAgICAgQW5ncmlmZiBtaXQgZWluZW0gU3BlbGwgKFNLX01BR0lDX0FUVEFDSyk6CisgICAgICAgICAgU0lfU0tJTExEQU1BR0UgICAgICAgIFNjaGFkZW5zd2VydCBkZXMgU3BlbGxzCisgICAgICAgICAgU0lfU0tJTExEQU1BR0VfVFlQRSAgIFNjaGFkZW5zdHlwZW4gZGVzIFNwZWxscworICAgICAgICAgIFNJX1NLSUxMREFNQUdFX01TRyAgICBTY2hhZGVuc21lbGR1bmcgZGVzIFNwZWxscywgd2VubiB2b3JoYW5kZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnN0ICJtaXQgbWFnaXNjaGVuIEZhZWhpZ2tlaXRlbiIKKyAgICAgICAgICBTSV9TS0lMTERBTUFHRV9NU0cyICAgZW50c3ByZWNoZW5kZSBNZWxkdW5nIGRlcyBTcGVsbHMsIHdlbm4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlc2V0enQsIGFuc29uc3RlbiBpZGVudGlzY2ggbWl0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSV9TS0lMTERBTUFHRV9NU0cKKyAgICAgICAgICBQX1dFQVBPTl9UWVBFICAgICAgICAgUF9XRUFQT05fVFlQRSBkZXMgU3BlbGxzLCB3ZW5uIHZvcmhhbmRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29uc3QgV1RfTUFHSUMKKyAgICAgICAgICBTSV9TUEVMTCAgICAgICAgICAgICAgU0lfU1BFTEwgZGVzIFNwZWxscworICAgICAgICAgIAorICAgICAgICBIaW53ZWlzZToKKyAgICAgICAgLSBBbGxlIEVpbnRyYWVnZSBpbiBkaWVzZW0gTWFwcGluZyBrb2VubmVuIGJlcmVpdHMgZHVyY2gKKyAgICAgICAgICBJbnRlcm5hbE1vZGlmeUF0dGFjaygpIHZlcmFlbmRlcnQgd29yZGVuIHNlaW4uCisgICAgICAgIC0gRGllIERhdGVuIHdlcmRlbiBtaXR0ZWxzIGRlZXBfY29weShhaW5mbykgZWluZ2V0cmFnZW4uCisgICAgICAgIC0gRGF0ZW4gaW4gZGVuIEVpbnRyYWVnZW4gU0lfU0tJTExEQU1BR0UqIHVuZCBTSV9TUEVMTCBrb2VubmVuIGJlaQorICAgICAgICAgIHBoeXNpa2FsaXNjaGVuIEFuZ3JpZmZlbiBkdXJjaCBkaWUgU2tpbGxzIEZJR0hUKFBfV0VBUE9OX1RZUEUpIG9kZXIKKyAgICAgICAgICBTS19GSUdIVCBvZGVyIGR1cmNoIGVpbmVuIFBfVE1QX0FUVEFDS19NT0QgYnp3LiBIb29rIHZvbSBUeXAgCisgICAgICAgICAgSF9IT09LX0FUVEFDS19NT0QgbW9kaWZpemllcnQgd29yZGVuIHNlaW4uCisgICAgICAgIAorICAgIE9SSUdJTkFMX0RBTSAtIGludAorICAgICAgICBEZXIgT3JpZ2luYWxzY2hhZGVuIGF1cyBkZW0gQXR0YWNrCisKKyAgICBPUklHSU5BTF9EQU1fVFlQRSAtIHN0cmluZy9zdHJpbmcqIAorICAgICAgICBEZXIgT3JpZ2luYWxkYW1hZ2V0eXAgYXVzIGRlbSBBdHRhY2sKKworICAgIENVUlJFTlRfREFNIC0gaW50CisgICAgICAgIERlciBtb21lbnRhbmUgU2NoYWRlbiwgbmFjaCBzY2hvbiBlcmZvbGd0ZW4gTW9kaWZpa2F0aW9uZW4KKyAgCisgICAgQ1VSUkVOVF9EQU1fVFlQRSAtIHN0cmluZy9zdHJpbmcqCisgICAgICAgIERlciBtb21lbnRhbmUgRGFtYWdldHlwLCBuYWNoIHNjaG9uIGVyZm9sZ3RlbiBNb2RpZmlrYXRpb25lbgorICAKKyAgICBFTkVNWV9JTlNFUlRFRCAtIGludAorICAgICAgICAwIG9kZXIgMSBqZSBuYWNoZGVtIG9iIGRlciBBbmdyZWlmZXIgc2Nob24gaW4gZGVyIGVuZW15LWxpc3QKKyAgICAgICAgdm9yaGFuZGVuIHdhciBvZGVyIG5pY2h0CisgIAorICAgIFJGUl9SRURVQ0UgLSBpbnQgCisgICAgICAgIDAgb2RlciByZWR1emllcnRlciBTY2hhZGVuIGR1cmNoIFJGUiBNb2RpZmlrYXRpb24KKyAgCisgICAgUFJFU0VOVF9ERUZFTkRFUlMgLSBBcnJheSAKKyAgICAgICAgTGlzdGUgZGVyIGR1cmNoIEluZm9ybURlZmVuZCBpbmZvcm1pZXJ0ZW4gRGVmZW5kZXIgYWxzIE9iamVrdC4KKyAgICAgICAgRWluIERlZmVuZGVyIHdpcmQgaW1tZXIgTkFDSCBJbmZvcm1EZWZlbmQKKyAgICAgICAgZGF6dWdlZnVlZ3QKKyAgCisgICAgREVGRU5ESU5HX0RFRkVOREVSIC0gQXJyYXkgKHt9KQorICAgICAgICBIYXQgZWluIGR1cmNoIEluZm9ybURlZmVuZCBlaW4gRGVmZW5kZXIgdmVydGVpZGlndCwgc28gd2lyZAorICAgICAgICBmdWVyIGRpZXNlbiBEZWZlbmRlciBlaW4gRWludHJhZyBpbiBkaWVzZW0gQXJyYXkgdm9yZ2Vub21tZW4sCisgICAgICAgIHdlbGNoZXIgZm9sZ2VuZGUgU3RydWt0dXIgYmVzaXR6dC4KKyAgICAgICAgICAgICAgICAoeworICAgICAgICAgICAgICAgICAgICAgICAgREVGX0RFRkVOREVSIC0gT2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgIERlciBWZXJ0ZWlkaWdlciwgd2VsY2hlciBWT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmZW5kT3RoZXIgZWluZ2VmdWVndCB3aXJkCisgICAgICAgICAgICAgICAgICAgICAgICBERUZfREFNIC0gaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIERlciB2ZXJhZW5kZXJ0ZSBTY2hhZGVuLCB3ZWxjaGVyIE5BQ0ggCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmVuZE90aGVyIGVpbmdlZnVlZ3Qgd2lyZAorICAgICAgICAgICAgICAgICAgICAgICAgREVGX0RBTVRZUEUgc3RyaW5nL3N0cmluZyogIAorICAgICAgICAgICAgICAgICAgICAgICAgICBEaWUgdmVyYWVuZGVydGUgU2NoYWRlbnNhcnQsIHdlbGNoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkFDSCBEZWZlbmRPdGhlciBlaW5nZWZ1ZWd0IHdpcmQKKyAgICAgICAgICAgICAgICAgICAgICAgIERFRl9TUEVMTCAtIE1hcHBpbmcgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGFzIE1hcHBpbmcgZGVzIHZlcmFlbmRlcnRlbiBTcGVsbHMsIHdlbGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzIEtvcGllIE5BQ0ggRGVmZW5kT3RoZXIgZWluZ2VmdWVndCB3aXJkCisgICAgICAgICAgICAgICAgfSkKKyAgCisgICAgREVGRU5EX0hPT0sgLSBJbnQvQXJyYXkgCisgICAgICAgIERJX05PSE9PSywgd2VubiBrZWluIEhvb2sgZGEgd2FyLCBESV9IT09LSU5URVJSVVBULCB3ZW5uIGRlcgorICAgICAgICBIb29rIGRhcyBEZWZlbmQgdW50ZXJicmljaHQsIERJX0hPT0ssIHdlbm4gZWluIEhvb2sgdm9yaGFuZGVuIAorICAgICAgICBpc3QsIGRpZXNlciBkYXMgRGVmZW5kIGFiZXIgdW52ZXJhZW5kZXJ0IGxhZXNzdC4KKyAgICAgICAgVmVyYWVuZGVydCBlaW4gSG9vayBkYXMgRGVmZW5kLCBzbyBpc3QgaGllciBlaW4gQXJyYXkgenUgZmluZGVuCisgICAgICAgIG1pdCBkZW4gdmVyYWVuZGVydGVuIFBhcmFtZXRlcm4gaW4gZGVyIFN0cnVrdHVyOgorICAgICAgICAgICAgICAgICh7CisgICAgICAgICAgICAgICAgICAgICAgICBIT09LX0RBTSAtIGludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVyIHZlcmFlbmRlcnRlIFNjaGFkZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhPT0tfREFNVFlQRSAtIHN0cmluZy9zdHJpbmcqICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWUgdmVyYWVuZGVydGUgU2NoYWRlbnNhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIEhPT0tfU1BFTEwgLSBNYXBwaW5nIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGFzIE1hcHBpbmcgZGVzIHZlcmFlbmRlcnRlbiBTcGVsbHMgYWxzIEtvcGllCisgICAgICAgICAgICAgICAgfSkKKyAgCisgICAgREVGRU5EX0FSTU9VUlMgLSBNYXBwaW5nICgyIFdlcnRlIHBybyBLZXkpCisgICAgICAgIExpc3RlIGRlciBiZXJ1ZWNrc2ljaHRpZ3RlbiBSdWVzdHVuZ2VuLiBGdWVyIGplZGUgUnVlc3R1bmcKKyAgICAgICAgd2lyZCBlaW4gRWludHJhZyB2b3JnZW5vbW1lbiwgbWl0IGRlbSBPYmpla3QgZGVyIGpld2VpbGlnZW4KKyAgICAgICAgUnVlc3R1bmcgYWxzIEtleS4gSGllcmJlaSB3ZXJkZW4gZGllIFJ1ZXN0dW5nZW4gZXJzdCBlaW5nZXRyYWdlbiwKKyAgICAgICAgd2VubiBpaHIgamV3ZWlsaWdlcyBRdWVyeURlZmVuZCgpIGF1ZmdlcnVmZW4gd2lyZCwgZC5oLiBlcyBzaW5kIG5pY2h0CisgICAgICAgIHZvbiBBbmZhbmcgYW4gYWxsZSBnZXRyYWdlbmVuIFJ1ZXN0dW5nIGRyaW4uIEplZGVyIEVpbnRyYWcgaW0gTWFwcGluZworICAgICAgICBiZXNpdHp0IGRpZSBmb2xnZW5kZW4gMiBXZXJ0ZToKKyAgICAgICAgICAgICAgICBERUZfQVJNT1VSX0RBTSAtIGludCAKKyAgICAgICAgICAgICAgICAgICAgRGVyIFNjaGFkZW4gTkFDSCBRdWVyeURlZmVuZCAodm9yaGVyIDApCisgICAgICAgICAgICAgICAgREVGX0FSTU9VUl9QUk9UIC0gaW50CisgICAgICAgICAgICAgICAgICAgIFZlcnRlaWRpZ3VuZ3N3ZXJ0IGRlciBSdWVzdHVuZyBWT1IgRGVmZW5kRnVuYworICAgICAgICBCc3A6IEljaCB3aWxsIHdpc3Nlbiwgd2llIGd1dCAncnVlc3R1bmcnIHNjaHVldHp0ZToKKyAgICAgICAgICAgICBzcGVsbFtFSU5GT19ERUZFTkRdW0RFRkVORF9BUk1PVVJTXVtydWVzdHVuZyxERUZfQVJNT1VSX1BST1RdCisKKyAgICBERUZFTkRfR1VJTEQgLSBBcnJheSAKKyAgICAgICAgRWluZSBMaXN0ZSBtaXQgZGVyIE1vZGlmaWthdGlvbiBkZXIgR2lsZGUgbWl0IGRlciBTdHJ1a3R1cgorICAgICAgICAgICAgICAgICh7CisgICAgICAgICAgICAgICAgICAgICAgICBHVUlMRF9EQU0gLSBpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVyIHZlcmFlbmRlcnRlIFNjaGFkZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdVSUxEX0RBTVRZUEUgLSBzdHJpbmcvc3RyaW5nKgorICAgICAgICAgICAgICAgICAgICAgICAgICBEaWUgdmVyYWVuZGVydGUgU2NoYWRlbnNhcnQKKyAgICAgICAgICAgICAgICB9KQorICAKKyAgICBERUZFTkRfUkVTSSAtIGludAorICAgICAgICBTY2hhZGVuIG5hY2ggQ2hlY2tSZXNpc3RhbmNlCisgIAorICAgIERFRkVORF9CT0RZIC0gaW50CisgICAgICAgIFNjaGFkZW4gbmFjaCBCZXJ1ZWNrc2ljaHRpZ3VuZyBkZXMgQm9kaWVzIChudXIKKyAgICAgICAgcGh5c2lrYWxpc2NoKQorICAKKyAgICBERUZFTkRfTE9TVExQIC0gaW50CisgICAgICAgIFRhdHNhZWNobGljaCBhYmdlem9nZW5lIExQCisgIAorICAgIERFRkVORF9DVVJfQVJNT1VSX1BST1QgLSBpbnQKKyAgICAgICAgU2NodXR6IGRlciBSdWVzdHVuZyB2b3IgQ2FsbCBkZXIKKyAgICAgICAgRGVmZW5kRnVuYy4gSXN0IG51ciBpbiBkZXIgRGVmZW5kRnVuYyBkZWZpbmllcnQuIEthbm4gYXVjaCBhdXMKKyAgICAgICAgREVGRU5EX0FSTU9VUlMgZW50bm9tbWVuIHdlcmRlbgorICAgICAKK1NJRUhFIEFVQ0g6CisgICAgIEF0dGFjaywgRGVmZW5kCisKKzE4Lkp1bCAyMDA2IE11YWRpYgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRGVmZW5kT3RoZXIgYi9kb2MvbGZ1bi9EZWZlbmRPdGhlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGIyMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRGVmZW5kT3RoZXIKQEAgLTAsMCArMSw4NSBAQAorRGVmZW5kT3RoZXIoKQorCitGVU5LVElPTjoKKwltaXhlZCBEZWZlbmRPdGhlcihpbnQgZGFtLG1peGVkIGRhbV90eXBlLG1peGVkIHNwZWxsLG9iamVjdCBlbmVteSk7CisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL2xpdmluZy9jb21iYXQuYworCitBUkdVTUVOVEU6CisJZGFtCisJICBEZXIgU2NoYWRlbiwgZGVyIHZvcmF1c3NpY2h0bGljaCBiZWltIHp1IHZlcnRlaWRpZ2VuZGVuIExlYmV3ZXNlbgorCSAgdmVydXJzYWNodCB3ZXJkZW4gc29sbC4KKwlkYW1fdHlwZQorCSAgRGVyIFNjaGFkZW5zdHlwIChvZGVyIGRpZSBTY2hhZGVuc3R5cGVuKSwgZGVyIGJlaW0genUKKwkgIHZlcnRlaWRpZ2VuZGVuIExlYmV3ZXNlbiB2ZXJ1cnNhY2h0IHdlcmRlbiBzb2xsZW4uCisJc3BlbGwKKwkgIFdlbm4gZGFzIHp1IHZlcnRlaWRpZ2VuZGUgTGViZXdlc2VuIG1pdCBTcGVsbHMgYW5nZWdyaWZmZW4gd3VyZGUsCisJICBzbyBrb2VubnRlIG1hbiBoaWVyIG1laHIgSW5mb3MgZW50bmVobWVuLgorCWVuZW15CisJICBEZXIgRmVpbmQsIGRlciBlaW4genUgdmVydGVpZGlnZW5kZXMgTGViZXdlc2VuIGFuZ2VncmlmZmVuIGhhdC4KKworUlVlQ0tHQUJFV0VSVDoKKwlBcnJheSBtaXQgZGVuIEVpbnRyYWVnZW4gZGVyIGdlZ2ViZW5lbmZhbGxzIHZlcmFlbmRlcnRlbgorCXVlYmVyZ2ViZW5lbiBQYXJhbWV0ZXI6IAorICAgICAgICAgICAgKDEpIGRhbSAgICAgIFtUeXAgaW50XSwgCisgICAgICAgICAgICAoMikgZGFtX3R5cGUgW1R5cCBzdHJpbmcqXSwgCisgICAgICAgICAgICAoMykgc3BlbGwgICAgW1R5cCBtYXBwaW5nXS4KKworQkVTQ0hSRUlCVU5HOgorCUVzIGlzdCBtb2VnbGljaCwgZGFzcyBPYmpla3RlIEFuZ3JpZmZlIGF1ZiBMZWJld2VzZW4gYWJ3ZWhyZW4gb2RlcgorCXVtd2FuZGVsbiwgc29mZXJuIGRpZXNlIE9iamVrdGUgYmVpIGRlbSBhbmdlZ3JpZmZlbmVuIExlYmV3ZXNlbgorCW1pdHRlbHMgQWRkRGVmZW5kZXIoKSBhbmdlbWVsZGV0IHd1cmRlbiB1bmQgc2ljaCBkZXIgc2VsYmVuIFVtZ2VidW5nCisJYmVmaW5kZW4uCisJWnVtZWlzdCB3aXJkIGVzIHNpY2ggYmVpIGRlbiBPYmpla3RlbiBuYXR1ZXJsaWNoIGViZW5mYWxscyB1bQorCWFuZGVyZSBMZWJld2VzZW4gaGFuZGVsbiwgZGllIGRhcyBMZWJld2VzZW4sIGJlaSBkZW0gc2llIGFuZ2VtZWxkZXQKKwlzaW5kLCB2ZXJ0ZWlkaWdlbiBzb2xsZW4uCisJQmVpIGVpbmVtIEFuZ3JpZmYgYXVmIGRhcyBMZWJld2VzZW4ga29lbm5lbiBhbGxlIE9iamVrdGUgcGVyIEF1ZnJ1ZgorCXZvbiBEZWZlbmRPdGhlcigpIGluIGVpbmVuIEFuZ3JpZmYgZWluZ3JlaWZlbiwgd29iZWkgZGllCisJU2NoYWRlbnNzdGFlcmtlLCBkZXIgU2NoYWRlbnN0eXAgKGRpZSBTY2hhZGVuc3R5cGVuKSwKKwladXNhdHppbmZvcm1hdGlvbmVuIGZ1ZXIgQW5ncmlmZnNzcGVsbHMgdW5kIGRlciBBbmdyZWlmZXIgYWxzCisJUGFyYW1ldGVyIHVlYmVyZ2ViZW4gd2VyZGVuLgorCURlc3dlaXRlcmVuIGlzdCB6dSBiZWFjaHRlbiwgZGFzcyBiZWkgYWxzIHBoeXNpa2FsaXNjaCBtYXJraWVydGVuCisJQW5ncmlmZmVuIGluIGVpbmVtIFRlYW0gbnVyIFZlcnRlaWRpZ2VyIGF1cyBkZXIgZXJzdGVuIFJlaWhlCisJYmVydWVja3NpY2h0aWd0IHdlcmRlbiB1bmQgZGFzcyBiZWkgZWluZW0gQW5ncmlmZiB6dWZhZWxsaWcgYXVzCisJYWxsZW4gbW9lZ2xpY2hlbiBWZXJ0ZWlkaWdlcm4gYXVzZ2V3YWVobHQgd2lyZC4KKwlTdGFuZGFyZG1hZXNzaWcgaXN0IGRpZXNlIEZ1bmt0aW9uIGluIExlYmV3ZXNlbiBiZXJlaXRzIGRlZmluaWVydCwKKwl3b2JlaSBkZXIgU2tpbGwgU0tfREVGRU5EX09USEVSLCBzb2Zlcm4gdm9yaGFuZGVuLCBhdWZnZXJ1ZmVuIHdpcmQuCisKK0JFSVNQSUVMOgorCVNlaHIgYmVsaWVidCBzaW5kIGluIEdpbGRlbiBOUENzLCBkaWUgZGVuIEJlc2Nod29lcmVyIGJlZ2xlaXRlbiB1bmQKKwl2ZXJ0ZWlkaWdlbiwgei5CLiBiZXNjaHdvcmVuZSBEYWVtb25lbjoKKwkgIGluaGVyaXQgInN0ZC9ucGMiOworCSAgaW5jbHVkZSA8cHJvcGVydGllcy5oPgorCSAgb2JqZWN0IG93bmVyOworCSAgdm9pZCBjcmVhdGUoKQorCSAgeyA6OmNyZWF0ZSgpOworCSAgICBTZXRQcm9wKFBfTkFNRSwiRGFlbW9uIik7CisJICAgIC4uLgorCSAgfQorCS8vIG5hY2ggQ2xvbmVuIGRlcyBEYWVtb25zIGZvbGdlbmRlIEZ1bmt0aW9uIG1pdCBCZXNjaHdvZXJlciBhbHMKKwkvLyBQYXJhbWV0ZXIgYXVmcnVmZW4KKwkgIElkZW50aWZ5KG9iamVjdCBjYXN0ZXIpCisJICB7IGlmKCFvYmplY3RwKGNhc3RlcikpCisJICAgICAgY2FsbF9vdXQoIydyZW1vdmUsMCk7CisJICAgIG93bmVyPWNhc3RlcjsKKwkgICAgb3duZXItPkFkZERlZmVuZGVyKHRoaXNfb2JqZWN0KCkpOworCSAgfQorCS8vIGRlciBEYWVtb24gd2VocnQgamVkZW4gQW5ncmlmZiBtaXQgRmV1ZXIgdm9sbCBhYiwgbWFuIG11c3MgenVlcnN0CisJLy8gZGVuIFZlcnRlaWRpZ2VyIHVtYnJpbmdlbiwgdW0gZGVuIEJlc2Nod29lcmVyIHRvZXRlbiB6dSBrb2VubmVuCisJICBtaXhlZCBEZWZlbmRPdGhlcihpbnQgZGFtLG1peGVkIGRhbV90eXBlLG1peGVkIHNwZWxsLG9iamVjdCBlbmVteSkKKwkgIHsgaWYoc2l6ZW9mKGRhbV90eXBlKSYmbWVtYmVyX2FycmF5KERUX0ZJUkUsZGFtX3R5cGUpIT0tMSkKKwkgICAgICBkYW09MDsKKwkgICAgcmV0dXJuKHtkYW0sZGFtX3R5cGUsc3BlbGx9KTsKKwkgIH0KKwlTb2xsIGRlciBEYWVtb24gc2ljaCBhdWNoIGluIGVpbiBUZWFtIGVpbm9yZG5lbiwgaW4gd2VsY2hlbSBzaWNoIGRlcgorCUJlc2Nod29lcmVyIGV2ZW50dWVsbCBiZWZpbmRldCwgc28gaXN0IHp1c2FldHpsaWNoIEFzc29jTWVtYmVyKCkgaW4KKwlkaWVzZW0gQmVzY2h3b2VyZXIgYXVmenVydWZlbiwgd29iZWkgZGVyIERhZW1vbiBhbHMgUGFyYW1ldGVyCisJdWViZXJnZWJlbiB3aXJkLgorCitTSUVIRSBBVUNIOgorCUFkZERlZmVuZGVyKCksIFJlbW92ZURlZmVuZGVyKCksIEluZm9ybURlZmVuZCgpLCBLaWxsKCksIElzRW5lbXkoKSwKKwlQX0RFRkVOREVSUywgL3N0ZC9saXZpbmcvY29tYmF0LmMsIC9zeXMvbmV3X3NraWxscy5oCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IEZyaSBGZWIgMjUgMTQ6NDU6MDAgMjAwMCBieSBQYXJhY2Vsc3VzCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9EZWZlbmRfYnNwIGIvZG9jL2xmdW4vRGVmZW5kX2JzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ1OGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRGVmZW5kX2JzcApAQCAtMCwwICsxLDEzNyBAQAorRGVmZW5kKCkgLSBCRUlTUElFTEUKKworRlVOS1RJT046CisgICAgIHZhcmFyZ3MgaW50IERlZmVuZChpbnQgZGFtLCBtaXhlZCBkYW1fdHlwZSwgbWl4ZWQgc3BlbGwsIG9iamVjdCBlbmVteSkKKworQkVNRVJLVU5HRU46CisgICAgIERpZSBoaWVyIGF1ZmdlZnVlaHJ0ZW4gS29tcGxleGJlaXNwaWVsZSBzaW5kIHp1bSBWZXJzdGFlbmRuaXMgZ2VkYWNodC4KKworQkVJU1BJRUxFOgorICAxKSBFaW4gb3JkaW5hZXJlciBCaXNzIGlucyBCZWluLgorICAgICB0aGlzX3BsYXllcigpLT5EZWZlbmQocmFuZG9tKDUwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoe0RUX1BJRVJDRSwgRFRfUklQfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmplY3QoKSk7CisKKyAgMikgRWluIEJpc3MgaW5zIEJlaW4sIG1pdCBkZXIgSG9zZSBhbHMgMjAwJWlnZSBSdWVzdHVuZyB1bmQgUmVzdCBtaXQgMTAwJS4KKyAgICAgdGhpc19wbGF5ZXIoKS0+RGVmZW5kKHJhbmRvbSg1MDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHtEVF9QSUVSQ0UsIERUX1JJUH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtTUF9QSFlTSUNBTF9BVFRBQ0s6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQX1JFRFVDRV9BUk1PVVI6ICAgKFtBVF9UUk9VU0VSUzogMjAwXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmplY3QoKSk7CisKKyAgMykgRGVyIEJpc3MsIHdlbm4gZWluIFRpZXIgaW4gZGllIEhvc2UgZ2Vrcm9jaGVuIGlzdCB1bmQgZGllc2VyIG9obmUKKyAgICAgVHJlZmZlcm1lbGR1bmcgdW5kIHBoeXNpc2NoZW4gUnVlc3R1bmdzc2NodXR6IGR1cmNoZ2VodC4KKyAgICAgdGhpc19wbGF5ZXIoKS0+RGVmZW5kKHJhbmRvbSg1MDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHtEVF9QSUVSQ0UsIERUX1JJUH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtTUF9QSFlTSUNBTF9BVFRBQ0s6IDBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqZWN0KCkpOworCisgIDQpIFNwZWxsLVBhcmFtZXRlcgorICAgICAvLyBCZWlzcGllbCBmdWVyIGVpbmVuIFNwZWxsLCBkZXIgbnVyIHZvbSBIZWxtIG5vcm1hbCB1bmQgdm9uIGVpbmVtCisgICAgIC8vIEFtdWxldHQgbWl0IDExNSUgYXVmZ2VoYWx0ZW4gd2lyZCwgYWxsZSBhbmRlcmVuIChhbmdlYmVuZW5lbikKKyAgICAgLy8gUnVlc3R1bmdlbiBoYWJlbiAwJSBTY2h1dHp3aXJrdW5nLgorICAgICAvLyBNaXQgQXVzZ2FiZSBlaWdlbmVyIE1lbGR1bmdlbjogYmVnaW5uZW5kIG1pdCAtMSwgZGEgZGVyIHZlcnVyc2FjaHRlCisgICAgIC8vIFNjaGFkZW5zd2VydCBtaW5pbWFsIDAgd2lyZCAoZnVlcnMgRXJzZXR6ZW46IEZlaW5kOiBAV0V4MiwKKyAgICAgLy8gU3BpZWxlcjogV0V4MSk7IG1heGltYWwgd2lyZCBlciAoRW1wZmluZGxpY2hrZWl0ZW4gamV0enQgbWFsIGF1c3NlbgorICAgICAvLyB2b3IpIDQ5ICg0OTkvMTAgPSA0OSksIG5pY2h0IDQ5OSEhIQorICAgICB0aGlzX3BsYXllcigpLT5EZWZlbmQoCisgICAgICAgcmFuZG9tKDUwMCksCisgICAgICAgKHtEVF9QSUVSQ0UsIERUX0FJUn0pLAorICAgICAgIChbU1BfUEhZU0lDQUxfQVRUQUNLOiAxLCAvLyB3ZWdlbiBEVF9QSUVSQ0UKKyAgICAgICAgIFNQX1JFRFVDRV9BUk1PVVI6ICAgKFtBVF9BUk1PVVI6ICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9IRUxNRVQ6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9SSU5HOiAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9HTE9WRTogICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9DTE9BSzogICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9CT09UOiAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9UUk9VU0VSUzogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9TSElFTEQ6ICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9BTVVMRVQ6IDExNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9NSVNDOiAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9CRUxUOiAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9RVUlWRVI6ICAgMF0pCisgICAgICAgICBTUF9TSE9XX0RBTUFHRToKKyAgICAgICAgICAgICAgICh7KHstMSwiQFdFUjIgc2NocmFtbXQgRGljaCBtaXQgZWluZW0gZHVyY2hib2hyZW5kZW4gQmxpY2suIiwKKyAgICAgICAgICAgICAgICAgICAgICAiRHUgc2NocmFtbXN0IEBXRU4xIG1pdCBlaW5lbSBkdXJjaGJvaHJlbmRlbiBCbGljay4iLAorICAgICAgICAgICAgICAgICAgICAgICJAV0VSMiBzY2hyYW1tdCBAV0VOMSBtaXQgZWluZW0gZHVyY2hib2hyZW5kZW4gQmxpY2suIgorICAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAgICAgKHs1LCJEZXIgZHVyY2hib2hyZW5kZSBCbGljayB2b24gQFdFTTIgdHJpZmZ0IERpY2guIiwKKyAgICAgICAgICAgICAgICAgICAgICJEZWluIGR1cmNoYm9ocmVuZGVyIEJsaWNrIHRyaWZmdCBAV0VOMS4iLAorICAgICAgICAgICAgICAgICAgICAgIkRlciBkdXJjaGJvaHJlbmRlIEJsaWNrIHZvbiBAV0VNMiB0cmlmZnQgQFdFTjEuIgorICAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAgICAgKHsyMCwiQFdFU1NFTjIgc3RlY2hlbmRlciBCbGljayBkdXJjaGJvaHJ0IERpY2guIiwKKyAgICAgICAgICAgICAgICAgICAgICAiRGVpbiBzdGVjaGVuZGVyIEJsaWNrIGR1cmNoYm9ocnQgQFdFTjEuIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQFdFU1NFTjIgc3RlY2hlbmRlciBCbGljayBkdXJjaGJvaHJ0IEBXRU4xLiIKKyAgICAgICAgICAgICAgIH0pfSkKKyAgICAgICBdKSwKKyAgICAgICB0aGlzX29iamVjdCgpKTsKKworICAgICAvLyBFdHdhcyBnZXNjaGlja3RlciBnZWh0IGRhcyBHYW56ZSwgd2VubiB3aXIgZWluZmFjaCBhdXMgZGVyIE11ZGxpYgorICAgICAvLyBhbGxlIGV4aXN0aWVyZW5kZW4gUnVlc3R1bmdlbiBpbiBlaW4gTWFwcGluZyBwYWNrZW4gdW5kIGRpZXNlCisgICAgIC8vIG51bGxlbiAoZGFtaXQgc2luZCB3aXIgYXVjaCBnZWdlbiBuZXVlIFJ1ZXN0dW5nc3R5cGVuIHNpY2hlcik6CisgICAgIG1hcHBpbmcgYW1hcCA9IG1hcF9pbmRpY2VzKFZBTElEX0FSTU9VUl9DTEFTUywjJyEpOworICAgICBhbWFwW0FUX0hFTE1FVF09MTAwOworICAgICBhbWFwW0FUX0FNVUxFVF09MTE1OworCisgICAgIHRoaXNfcGxheWVyKCktPkRlZmVuZChyYW5kb20oNTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh7RFRfUElFUkNFLCBEVF9BSVJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChbU1BfUEhZU0lDQUxfQVRUQUNLOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUF9SRURVQ0VfQVJNT1VSOiBhbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUF9TSE9XX0RBTUFHRTogKHsgLi4uIChzaWVoZSBvYmVuKQorCisgIDUpIERlciBCaXNzIHZvbiB3ZWl0ZXIgb2JlbiBtaXQgTWVsZHVuZy4KKyAgICAgLy8gRWluZSBNZWxkdW5nLCBkaWUgbnVyIGF1c2dlZ2ViZW4gd2lyZCwgd2VubiBkZXIgQmlzcyBhdWNoIG1pbmRlc3RlbnMKKyAgICAgLy8gZWluZW4gTFAgYWJ6aWVodC4KKyAgICAgdGhpc19wbGF5ZXIoKS0+RGVmZW5kKHJhbmRvbSg1MDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHtEVF9QSUVSQ0UsIERUX1JJUH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtTUF9QSFlTSUNBTF9BVFRBQ0s6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQX1JFRFVDRV9BUk1PVVI6ICAgKFtBVF9UUk9VU0VSUzogMjAwXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQX1NIT1dfREFNQUdFOiAoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7MSwiQFdFUjIgYmVpc3N0IERpY2ggaW5zIEJlaW4hIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR1IGJlaXNzdCBAV0VOMSBpbnMgQmVpbiEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQFdFUjIgYmVpc3N0IEBXRU4xIGlucyBCZWluISIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqZWN0KCkpOworCisgIDYpIERlZmVuZEZ1bmMoKSB1bmQgRGVmZW5kKCkgaW4gZWluZW0gT2JqZWt0CisgICAgIDZhKQorICAgICAvLyBlaW5lIEx1ZnRhbmdyaWZmZSByZWZsZWt0aWVyZW5kZSBSdWVzdHVuZzoKKyAgICAgaW50IERlZmVuZEZ1bmMoc3RyaW5nICpkdHlwLCBtaXhlZCBzcGVsbCwgb2JqZWN0IGVuZW15KSB7CisgICAgICAgaWYobWVtYmVyKGR0eXAsIERUX0FJUik+PTAgJiYgIXNwZWxsW1NQX1JFQ1VSU0lWRV0pCisgICAgICAgICBlbmVteS0+RGVmZW5kKHJhbmRvbSgyMDApLAorICAgICAgICAgICAgICAgICAgICAgICAoe0RUX0FJUn0pLAorICAgICAgICAgICAgICAgICAgICAgICAoW1NQX1JFQ1VSU0lWRTogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTUF9TSE9XX0RBTUFHRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAoeyJFaW4gTHVmdHdpcmJlbCBlcmZhc3N0IGF1Y2ggRGljaC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlaW5lIFJ1ZXN0dW5nIHdpcmJlbHQgQFdFTjEgaGVydW0uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJAV0VTU0VOMiBSdWVzdHVuZyB3aXJiZWx0IEBXRU4xIGhlcnVtLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5UHJvcChQX1dPUk4pKTsKKworICAgICAgIHJldHVybiAwOyAvLyAtPiBJbiBkaWVzZW0gRmFsbCBnaWJ0cyBrZWluZW4gUnVlc3R1bmdzYm9udXMhCisgICAgIH0KKworICAgICA2YikKKyAgICAgLy8gRWluZSBOVVIgUkVJTkUgTHVmdGFuZ3JpZmZlIHJlZmxla3RpZXJlbmRlIFJ1ZXN0dW5nOgorICAgICBpbnQgRGVmZW5kRnVuYyhzdHJpbmcgKmR0eXAsIG1peGVkIHNwZWxsLCBvYmplY3QgZW5lbXkpIHsKKyAgICAgICBpZighc2l6ZW9mKGR0eXAtKHtEVF9BSVJ9KSkgJiYgIXNwZWxsW1NQX1JFQ1VSU0lWRV0pCisgICAgICAgICAuLi4KKworU0lFSEUgQVVDSDoKKyAgICAgQW5ncmlmZjogICBBdHRhY2soTCksIFBfTk9fQVRUQUNLLCBJbnNlcnRFbmVteShMKQorICAgICBTY2hhZGVuOiAgIFBfRU5BQkxFX0lOX0FUVEFDS19PVVQsIFBfTEFTVF9NT1ZFLCBkb19kYW1hZ2UoTCksCisgICAgICAgICAgICAgICAgcmVkdWNlX2hpdF9wb2ludHMoTCksIHJlZHVjZV9zcGVsbF9wb2ludHMoTCkKKyAgICAgU2NodXR6OiAgICBQX0RFRkVOREVSUywgSW5mb3JtRGVmZW5kKEwpLCBEZWZlbmRPdGhlcihMKSwKKyAgICAgICAgICAgICAgICBQX0FSTU9VUlMsIFBfQUMsIFBfREVGRU5EX0ZVTkMsIFF1ZXJ5RGVmZW5kKEwpLAorICAgICAgICAgICAgICAgIFBfQk9EWSwgQV9ERVgsIERlZmVuZChMKQorICAgICBEYXRlbjogICAgIFBfTEFTVF9DT01CQVRfVElNRSwgUF9MQVNUX1hQLCBQX0xBU1RfREFNQUdFLAorICAgICAgICAgICAgICAgIFBfTEFTVF9EQU1UWVBFUywgUF9MQVNUX0RBTVRJTUUKKyAgICAgUmVzaXN0ZW56OiBQX1JFU0lTVEFOQ0VfU1RSRU5HVEhTLCBDaGVja1Jlc2lzdGFuY2UoTCkKKyAgICAgU29uc3RpZ2VzOiBDaGVja1NlbnNpdGl2ZUF0dGFjayhMKSwgVXNlU2tpbGwoTCksCisgICAgICAgICAgICAgICAgSW50ZXJuYWxNb2RpZnlEZWZlbmQoTCkKKworMjUuIE1haSAyMDExIEdhYnlsb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0RlbGV0ZVNwZWxsRmF0aWd1ZSBiL2RvYy9sZnVuL0RlbGV0ZVNwZWxsRmF0aWd1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDA0OWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRGVsZXRlU3BlbGxGYXRpZ3VlCkBAIC0wLDAgKzEsMzcgQEAKK0RlbGV0ZVNwZWxsRmF0aWd1ZQorCitGVU5LVElPTjoKKyAgICBwdWJsaWMgdm9pZCBEZWxldGVTcGVsbEZhdGlndWUoc3RyaW5nIGtleSkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL3NraWxscy5jCisgICAgL3N0ZC9wbGF5ZXIvc2tpbGxzLmMKKyAgICAvc3lzL2xpdmluZy9za2lsbHMuaAorCitBUkdVTUVOVEU6CisgICAgc3RyaW5nIGtleSAgOiBFaW5kZXV0aWdlciBOYW1lIGRlcyBTcHJ1Y2hlcywgZWluZXIgR3J1cHBlIHZvbiBTcHJ1ZWNoZW4KKyAgICAgICAgICAgICAgICAgIG9kZXIgMCBmdWVyIGRpZSBnbG9iYWxlIFNwcnVjaGVybXVlZHVuZy4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGRpZW50IHp1bSBMb2VzY2hlbiB2b24gaW5kaXZpZHVlbGxlbiBTcHJ1Y2hlcm11ZWR1bmdlbgorICAgIChTcGVsbGZhdGlndWUsIFNwcnVjaHNwZXJyZW4pLgorCisgICAgSXN0IDxrZXk+IDAsIHdpcmQgZGllIGdsb2JhbGUgU3BydWNoc3BlcnJlIGdlbG9lc2NodCAoaWRlbnRpc2NoIHp1IGRlcgorICAgIFByb3BlcnR5IFBfTkVYVF9TUEVMTF9USU1FKSwgYW5kZXJlbmZhbGxzIGRpZSB1bnRlciA8a2V5PiBnZXNwZWljaGVydGUKKyAgICBTcHJ1Y2hlcm11ZWR1bmcuCisgICAgTG9lc2NodCBtYW4gZWluZW4gRWludHJhZyAwIGlzdCBkYXMgRXJnZWJuaXMgZGllc2VyIEZ1bmt0aW9uIGlkZW50aXNjaCB6dW0KKyAgICBMb2VzY2hlbi9OdWxsZW4gdm9uIFBfTkVYVF9TUEVMTF9USU1FLgorCitCRU1FUktVTkdFTjoKKyAgICBTcHJ1Y2hzcGVycmVuIChpbnNiLiBmcmVtZGUpIGR1ZXJmZW4gbmljaHQgb2huZSB3ZWl0ZXJlcyBnZWxvZXNjaHQgb2RlcgorICAgIGdlYWVuZGVydCB3ZXJkZW4uIERpZXNlcyBiZWRhcmYgZ3J1bmRzYWV0emxpY2ggZGVyIEdlbmVobWlndW5nIGR1cmNoIGRpZQorICAgIEdpbGRlbmJhbGFuY2UhCisKK1NJRUhFIEFVQ0g6CisgICAgU2V0U3BlbGxGYXRpZ3VlKEwpLCBDaGVja1NwZWxsRmF0aWd1ZShMKQorICAgIFBfTkVYVF9TUEVMTF9USU1FCisgICAgc3BydWNoZXJtdWVkdW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI3LjAzLjIwMTAsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRGVsZXRlVGltZWRBdHRyTW9kaWZpZXIgYi9kb2MvbGZ1bi9EZWxldGVUaW1lZEF0dHJNb2RpZmllcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTFiNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRGVsZXRlVGltZWRBdHRyTW9kaWZpZXIKQEAgLTAsMCArMSwzMCBAQAorRGVsZXRlVGltZWRBdHRyTW9kaWZpZXIoKQorRlVOS1RJT046CisgICAgIGludCBEZWxldGVUaW1lZEF0dHJNb2RpZmllcihzdHJpbmcga2V5KQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYworCitBUkdVTUVOVEU6CisgICAgIGtleQktCWF1cyBQX1RJTUVEX0FUVFJfTU9EIHp1IGxvZXNjaGVuZGVyIEVpbnRyYWcKKworQkVTQ0hSRUlCVU5HOgorICAgICBEZXIgenUga2V5IGdlaG9lcmVuZGUgRWludHJhZyBpbiBQX1RJTUVEX0FUVFJfTU9EIHdpcmQgZ2Vsb2VzY2h0IHVuZAorICAgICB1cGRhdGVfbWF4X3NwX2FuZF9ocCBhdXNnZWb8aHJ0Lg0KKw0KK1JVZUNLR0FCRVdFUlQ6DQorICAgICBUQVRUUl9JTlZBTElEX0FSR1MgICAgICAtICAgICBJbSBGYWxsZSBlaW5lcyBmZWhsZW5kZW4ga2V5LUFyZ3VtZW50cyAKKyAgICAgVEFUVFJfTk9fU1VDSF9NT0RJRklFUiAgLSAgICAgRmFsbHMgZGVyIE1vZGlmaWVyIG1pdCBkaWVzZW0gS2V5IG5pY2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aWVydA0KKyAgICAgVEFUVFJfT0sgICAgICAgICAgICAgICAgLSAgICAgSW0gRXJmb2xnc2ZhbGwNCisgICAgIA0KKyAgICAgRGllIFJ1ZWNrZ2FiZXdlcnRlIHNpbmQgaW4gL3N5cy9saXZpbmcvYXR0cmlidXRlcy5oIGRlZmluaWVydC4NCisgICAgCitTSUVIRSBBVUNIOg0KKwlRdWVyeUF0dHJpYnV0ZSgpLCBRdWVyeVJlYWxBdHRyaWJ1dGUoKSwgUXVlcnlBdHRyaWJ1dGVPZmZzZXQoKSwNCisJU2V0QXR0cmlidXRlKCksIFNldFJlYWxBdHRyaWJ1dGUoKSwgVXBkYXRlQXR0cmlidXRlcygpLA0KKwlTZXRUaW1lZEF0dHJNb2RpZmllcigpLCBRdWVyeVRpbWVkQXR0ck1vZGlmaWVyKCksIA0KKwlQX0FUVFJJQlVURVMsIFBfQVRUUklCVVRFU19PRkZTRVRTLCBQX1RJTUVEX0FUVFJfTU9ELA0KKwlQX1hfQVRUUl9NT0QsIFBfTV9BVFRSX01PRCwgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0xhc3QgbW9kaWZpZWQ6IFR1ZSBKdWwgMjcgMjA6MDA6MjAgMjAwNCBieSBNdWFkaWINCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9EaXNjb3ZlckRvb3IgYi9kb2MvbGZ1bi9EaXNjb3ZlckRvb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzMTBkNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0Rpc2NvdmVyRG9vcgpAQCAtMCwwICsxLDMxIEBACitEaXNjb3ZlckRvb3IoKQorCitGVU5LVElPTjoKKyAgICB2YXJhcmdzIGludCBEaXNjb3ZlckRvb3Ioc3RyaW5nIGRuYW1lKQorCitBUkdVTUVOVEU6CisgICAgZG5hbWU6IE5hbWUgZGVzIFJhdW1lcywgaW4gZGVtIGRlciBTZWhlciBkYXMgU2VoZXJ0b3Iga2VubmVubGVybmVuIHNvbGwuCisgICAgICAgICAgIERlZmF1bHQ6IERpZSBVbWdlYnVuZyBkZXMgU2VoZXJzLgorCitCRVNDSFJFSUJVTkc6CisgICAgTmFjaGRlbSBkaWVzZSBGdW5rdGlvbiBhdWZnZXJ1ZmVuIHd1cmRlLCBrYW5uIGRlciBTZWhlciAodGhpc19wbGF5ZXIoKSkKKyAgICBkYXMgVG9yIGluIGRlbSBhbmdlZ2ViZW5lbiBSYXVtIGltbWVyIHZlcndlbmRlbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAxLCBmYWxscyBkZXIgU2VoZXIgZWluIE5FVUVTIFRvciBrZW5uZW5nZWxlcm50IGhhdAorICAgIDAsIGZhbGxzIGVyIGRhcyBUb3Igc2Nob24ga2FubnRlIG9kZXIga2VpbiBTZWhlciB3YXIKKworQkVNRVJLVU5HRU46CisgICAgVm9uIGVpbmVtIFNlaGVydG9yIHdpcmQgZGllc2UgRnVua3Rpb24gYXV0b21hdGlzY2ggYmVpbSBCZXRyZXRlbiBkZXMKKyAgICB1bWdlYmVuZGVuIFJhdW1lcyBhdWZnZXJ1ZmVuLCBmYWxscyBQX1NFRVJET09SX0RJU0NPVkVSIGdlc2V0enQgaXN0LiBXZW5uCisgICAgZWluIFRvciBhdWYgZGllc2UgQXJ0IG5pY2h0IGVudGRlY2t0IHdlcmRlbiBzb2xsLCBzbyBkYXJmCisgICAgUF9TRUVSRE9PUl9ESVNDT1ZFUiBuaWNodCBnZXNldHp0IHNlaW4gdW5kIG11c3MgRGlzY292ZXJEb29yKCkgc2VwYXJhdCwKKyAgICB6LkIuIHZvbiBlaW5lbSBRdWVzdG9iamVrdCwgYXVmZ2VydWZlbiB3ZXJkZW4uCisgICAgRGllc2UgRnVua3Rpb24gd2lyZCB2b24gL2Qvc2VoZXIvcG9ydGFsZS9zZWhlcnRvcm1hc3RlciBkZWZpbmllcnQuCisKK0JFSVNQSUVMRToKKyAgICB3cml0ZSgiRGVyIFphdWJlcmVyIHNhZ3Q6IEltIE5pY2h0cyB3aXJzdCBEdSBlaW4gd2VpdGVyZXMgVG9yIGZpbmRlbiFcbiIpOworICAgICIvZC9zZWhlci9wb3J0YWxlL3NlaGVydG9ybWFzdGVyIi0+RGlzY292ZXJEb29yKCIvcm9vbS92b2lkIik7CisKK1NJRUhFIEFVQ0g6CisgICAgRG9vcklzS25vd24sIFNob3dEb29ycywgVGVsZXBvcnQsIEdldERvb3JzTWFwcGluZwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRGlzdHJpYnV0ZUV4cCBiL2RvYy9sZnVuL0Rpc3RyaWJ1dGVFeHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyZjY5YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0Rpc3RyaWJ1dGVFeHAKQEAgLTAsMCArMSwyNCBAQAorRGlzdHJpYnV0ZUV4cCgpDQorRlVOS1RJT046DQorICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIERpc3RyaWJ1dGVFeHAob2JqZWN0IGVuZW15LCBpbnQgZXhwX3RvX2dpdmUpDQorDQorREVGSU5JRVJUIElOOg0KKyAgICAgL3N0ZC9saXZpbmcvbGlmZS5jDQorDQorQVJHVU1FTlRFOg0KKyAgICAgb2JqZWN0IGVuZW15ICAgICAtIHRvZXRlbmRlciBGZWluZA0KKyAgICAgaW50IGV4cF90b19naXZlICAtIHp1IHZlcnRlaWxlbmRlIFhQICg9PSBQX1hQLzEwMCkNCisNCitCRVNDSFJFSUJVTkc6DQorICAgICBEYXMgc3RlcmJlbmRlIFdlc2VuIHZlcnRlaWx0IHNlaW5lIFhQIGFuIHNlaW5lIEZlaW5kZS4NCisNCisgICAgIERhYmVpIGJla29tbXQgamVkZXIgR2VnbmVyIHNlaW5lbiBBbnRlaWwgKGFiaORuZ2lnIHZvbiA1MCUgdm9uIHNlaW5lbQ0KKyAgICAgZ2VtYWNodGVuIFNjaGFkZW4pIHVuZCBlaW5lbiBUZWFtYW50ZWlsIChkaWUgYW5kZXJlbiA1MCUg/GJlciBkYXMNCisgICAgIGdlc2FtdGUgVGVhbSBhZGRpZXJ0IHVuZCBkdXJjaCBkaWUgVGVhbWFuemFobCBnZXRlaWx0KS4NCisNCitTSUVIRSBBVUNIOg0KKyAgICAgRnVua3Rpb25lbjogIEFkZEV4cCgpDQorICAgICBQcm9wZXJ0aWVzOiAgUF9YUA0KKyAgICAgU29uc3RpZ2VzOiAgIHRlYW1rYW1wZg0KKw0KKzE0LkZlYiAyMDA3IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRG9EZWNheSBiL2RvYy9sZnVuL0RvRGVjYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjZjU0MQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0RvRGVjYXkKQEAgLTAsMCArMSw0NCBAQAorRG9EZWNheSgpCisKK0ZVTktUSU9OOgorICAgICAgcHVibGljICBpbnQgICAgRG9EZWNheShpbnQgc2lsZW50KSAKKworREVGSU5JRVJUIElOOgorICAgICAgL3N0ZC91bml0LmMKKworQVJHVU1FTlRFOgorICAgICBzaWxlbnQgKGludCkKKyAgICAgICBGYWxscyAhPSAwLCBlcmZvbGd0IGJlaW0gWmVyZmFsbCBrZWluZSBNZWxkdW5nLCBkLmguIGRvRGVjYXlNZXNzYWFnZSgpCisgICAgICAgd2lyZCBuaWNodCBnZXJ1ZmVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEaWUgRnVua3Rpb24gZ2lidCBkaWUgbmFjaCBkZW0gWmVyZmFsbCBub2NoIHVlYnJpZyBnZWJsaWViZW5lIE1lbmdlCisgICAgIHp1cnVlY2sgKGludCkuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gd2lyZCBpbiBDbG9uZXMgdm9uIFVuaXRvYmpla3RlbiBhdXMgZGVyIEJsdWVwcmludCBnZXJ1ZmVuLAorICAgICB3ZW5uIGVpbiBaZXJmYWxsc2ludGVydmFsbCBhYmdlbGF1ZmVuIGlzdCAobmF0dWVybGljaCBudXIsIHdlbm4gaW4gZGVyIEJQCisgICAgIGRlciBaZXJmYWxsIGtvbmZpZ3VyaWVydCBpc3QpLgorICAgICBEaWUgRnVua3Rpb24gcHJ1ZWZ0IG5vcm1hbGVyd2Vpc2UgdmlhIFBfVU5JVF9ERUNBWV9GTEFHUywgb2IgZGVyIFplcmZhbGwKKyAgICAgc3RhdHRmaW5kZW4gc29sbCwgYmVzdGltbXQgYXVzIFBfVU5JVF9ERUNBWV9RVU9UQSBkaWUgenUgemVyZmFsbGVuZGUKKyAgICAgTWVuZ2UsIHJ1ZnQgRG9EZWNheU1lc3NhZ2UoKSB1bmQgcmVkdXppZXJ0IFBfQU1PVU5ULgorICAgICAKKyAgICAgU2llIGthbm4gYXVjaCB2b24gSGFuZCBnZXJ1ZmVuIHdlcmRlbiwgdW0gZWluZW4gWmVyZmFsbCBhdXN6dWxvZXNlbiwgYXVjaAorICAgICB3ZW5uIG1pciBnZXJhZGUgbmljaHQgZWluZmFlbGx0LCBpbiB3ZWxjaGVuIFNpdHVhdGlvbmVuIGRhcyBzaW5udm9sbAorICAgICB3YWVyZSAodmllbGxlaWNodCBhbHMgU3BydWNobWlzc2VyZm9sZy4gKmcqKQorCitCRU1FUktVTkdFTjoKKyAgICAgV2VubiBtYW4gZWluZW4gYW5kZXJlbiBaZXJmYWxsc21lY2hhbmlzbXVzIGhhYmVuLCB3aWxsIG11c3MgbWFuIGRpZXNlCisgICAgIEZ1bmt0aW9uIHdvaGwgdWViZXJzY2hyZWliZW4uIEluIGZhc3QgYWxsZW4gRmFlbGxlbiBzb2xsdGUgZGllcyBqZWRvY2gKKyAgICAgdW5ub2V0aWcgc2Vpbi4gSGF0IGplbWFuZCBkYXMgVmVybGFuZ2VuLCBkaWVzZSBGdW5rdGlvbiB6dQorICAgICB1ZWJlcnNjaHJlaWJlbiwgaXN0IHZpZWxsZWljaHQgdm9yaGVyIGVpbmUgRGlza3Vzc2lvbiBtaXQgZGVtIE11ZGxpYi1FTQorICAgICBhbmdlYnJhY2h0LgorCitTSUVIRSBBVUNIOgorICAgICB1bml0CisgICAgIFBfVU5JVF9ERUNBWV9JTlRFUlZBTCwgUF9VTklUX0RFQ0FZX0ZMQUdTLCBQX1VOSVRfREVDQVlfUVVPVEEsCisgICAgIFBfVU5JVF9ERUNBWV9NSU4KKyAgICAgRG9EZWNheU1lc3NhZ2UoKQorICAgICAvc3RkL3VuaXQuYworCisxNC4xMC4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Eb0RlY2F5TWVzc2FnZSBiL2RvYy9sZnVuL0RvRGVjYXlNZXNzYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzkzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Eb0RlY2F5TWVzc2FnZQpAQCAtMCwwICsxLDM0IEBACitEb0RlY2F5TWVzc2FnZSgpCisKK0ZVTktUSU9OOgorICAgICAgcHJvdGVjdGVkIHZvaWQgRG9EZWNheU1lc3NhZ2UoaW50IG9sZGFtb3VudCwgaW50IHplcmZhbGwpOworICAgICAgCitERUZJTklFUlQgSU46CisgICAgICAvc3RkL3VuaXQuYworCitBUkdVTUVOVEU6CisgICAgIG9sZGFtb3VudCAoaW50KQorICAgICAgICBNZW5nZSB2b3IgZGVtIFplcmZhbGwKKyAgICAgemVyZmFsbCAoaW50KQorICAgICAgICBqZXR6dCB6ZXJmYWxsZW5kZSBNZW5nZQorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgdm9uIERvRGVjYXkoKSBnZXJ1ZmVuIHVuZCBnaWJ0IGRpZSBTdGFuZGFyZG1lbGR1bmdlbgorICAgICBiZWltIFplcmZhbGwgdm9uIFVuaXRvYmpla3RlbiBhdXMuCisgICAgIEhpZXJiZWkgaXN0IGFuIGRlciBVbml0IG5vY2ggYWxsZXMgdW52ZXJhZW5kZXJ0LCB3ZW5uIGRpZXNlIEZ1bmt0aW9uCisgICAgIGdlcnVmZW4gd2lyZCwgZGllIFJlZHVrdGlvbiB2b24gUF9BTU9VTlQgZXJmb2xndCBkaXJla3QgaW0gQW5zY2hsdXNzLgorICAgICBEaWUgRnVua3Rpb24gd2lyZCBuaWNodCBnZXJ1ZmVuLCB3ZW5uIERvRGVjYXkoKSBtaXQgc2lsZW50IT0wIGdlcnVmZW4KKyAgICAgd2lyZC4KKworQkVNRVJLVU5HRU46CisgICAgIFdpbGwgbWFuIG5pY2h0IGRpZSBTdGFuZGFyZHplcmZhbGxzbWVsZHVuZ2VuICh3b3ZvbiBpY2ggbWVpc3QgYXVzZ2VoZSksCisgICAgIGthbm4gbWFuIGRpZXNlIEZ1bmt0aW9uIHVlYmVyc2NocmVpYmVuIHVuZCBlaWdlbmUgTWVsZHVuZ2VuIGVyemV1Z2VuLgorCitTSUVIRSBBVUNIOgorICAgICB1bml0CisgICAgIFBfVU5JVF9ERUNBWV9JTlRFUlZBTCwgUF9VTklUX0RFQ0FZX0ZMQUdTLCBQX1VOSVRfREVDQVlfUVVPVEEsCisgICAgIFBfVU5JVF9ERUNBWV9NSU4KKyAgICAgRG9EZWNheSgpCisgICAgIC9zdGQvdW5pdC5jCisKKzE0LjEwLjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0RvVW53ZWFyIGIvZG9jL2xmdW4vRG9VbndlYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4ZWRhNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0RvVW53ZWFyCkBAIC0wLDAgKzEsMzMgQEAKK0RvVW53ZWFyKCkKKworRlVOS1RJT046CisgICAgIHZhcmFyZ3MgaW50IERvVW53ZWFyKGludCBzaWxlbnQsIGludCBhbGwpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvY2xvdGhpbmcvd2Vhci5jCisKK0FSR1VNRU5URToKKyAgICAgc2lsZW50CisgICAgICAgICAgRmFsbHMgdW5nbGVpY2ggMCwgc28gd2VyZGVuIGtlaW5lIE1lbGR1bmdlbiBhdXNnZWdlYmVuLgorICAgICAgICAgIEZhbGxzIChzaWxlbnQmTV9OT0NIRUNLKSB3ZXJkZW4gYXVjaCB2ZXJmbHVjaHRlIFJ1ZXN0dW5nZW4KKyAgICAgICAgICBhdXNnZXpvZ2VuCisgICAgIGFsbAorICAgICAgICAgIFVuZ2xlaWNoIDAsIHdlbm4gRG9VbndlYXIoKSBhdXMgZWluZW0gInppZWhlIGFsbGVzIGF1cyIgaGVyYXVzCisgICAgICAgICAgYXVmZ2VydWZlbiB3dXJkZS4KKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3aXJkIHZlcnN1Y2h0LCBkaWUgUnVlc3R1bmcgYXVzenV6aWVoZW4uIERhYmVpIHdlcmRlbiBlaW5lIGV2ZW50dWVsbAorICAgICB2b3JoYW5kZW5lIFJlbW92ZUZ1bmMoKSB1bmQgRmx1ZWNoZSBtaXQgYmVydWVja3NpY2h0aWd0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIGRpZSBSdWVzdHVuZyBnYXIgbmljaHQgZ2V0cmFnZW4gd2FyLCBhbnNvbnN0ZW4gMS4KKworQkVNRVJLVU5HRU46CisgICAgIEF1Y2ggd2VubiBlaW5lIDEgenVydWVja2dlZ2ViZW4gd2lyZCwgbXVzcyBkYXMgbmljaHQgaGVpc3NlbiwgZGFzcyBkaWUKKyAgICAgUnVlc3R1bmcgZXJmb2xncmVpY2ggYXVzZ2V6b2dlbiB3dXJkZSEKKworU0lFSEUgQVVDSDoKKyAgICAgRG9XZWFyKCksIFJlbW92ZUZ1bmMoKSwgSW5mb3JtVW53ZWFyKCksIC9zdGQvYXJtb3VyL2NvbWJhdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFN1biBKdW4gMjcgMjI6MjI6MDAgMTk5OSBieSBQYXJhY2Vsc3VzCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Eb1Vud2llbGQgYi9kb2MvbGZ1bi9Eb1Vud2llbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyN2IyYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0RvVW53aWVsZApAQCAtMCwwICsxLDMwIEBACitEb1Vud2llbGQoKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBpbnQgRG9VbndpZWxkKGludCBzaWxlbnQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgc2lsZW50CisgICAgICAgICAgVW5nbGVpY2ggMCwgd2VubiBkaWUgV2FmZmUgb2huZSBNZWxkdW5nZW4gd2VnZ2VzdGVja3Qgd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCB2ZXJzdWNodCwgZGllIFdhZmZlIHdlZ3p1c3RlY2tlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMCwgd2VubiBkaWUgV2FmZmUgZ2FyIG5pY2h0IGdlenVlY2t0IHdhciwgYW5zb25zdGVuIDEuCisKK0JFTUVSS1VOR0VOOgorICAgICBBbmhhbmQgZGVzIFJ1ZWNrZ2FiZXdlcnRlcyBsYWVzc3Qgc2ljaCBuaWNodCBlcnNlaGVuLCBvYiBkaWUgV2FmZmUgc2ljaAorICAgICB3ZWdzdGVja2VuIGxpZXNzIG9kZXIgbmljaHQhCisKKyAgICAgV2VubiBkaWUgV2FmZmUgdmVyZmx1Y2h0IGlzdCBvZGVyIChmYWxscyBkZWZpbmllcnQpIFVud2llbGRGdW5jKCkgMAorICAgICB6dXJ1ZWNrZ2lidCwgbGFlc3N0IHNpZSBzaWNoIG5pY2h0IHdlZ3N0ZWNrZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIFVud2llbGRGdW5jKCksIEluZm9ybVVud2llbGQoKSwgL3N0ZC93ZWFwb24uYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBTdW4gSnVuIDI3IDIyOjI0OjAwIDE5OTkgYnkgUGFyYWNlbHN1cwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRG9XZWFyIGIvZG9jL2xmdW4vRG9XZWFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNjRlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Eb1dlYXIKQEAgLTAsMCArMSw0MiBAQAorRG9XZWFyKCkKKworRlVOS1RJT046CisgICAgIHZhcmFyZ3MgaW50IERvV2VhcihpbnQgc2lsZW50LCBpbnQgYWxsKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2FybW91ci9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIHNpbGVudAorICAgICAgICAgIEZhbGxzIHVuZ2xlaWNoIDAsIHNvIHdlcmRlbiBrZWluZSBNZWxkdW5nZW4gYXVzZ2VnZWJlbi4KKyAgICAgYWxsCisgICAgICAgICAgVW5nbGVpY2ggMCwgd2VubiBEb1dlYXIoKSBhdXMgZWluZW0gInppZWhlIGFsbGVzIGFuIiBoZXJhdXMKKyAgICAgICAgICBhdWZnZXJ1ZmVuIHd1cmRlLgorCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdpcmQgdmVyc3VjaHQsIGRpZSBSdWVzdHVuZyBhbnp1emllaGVuLiBEYWJlaSB3aXJkIGVpbmUgZXZlbnR1ZWxsCisgICAgIHZvcmhhbmRlbmUgV2VhckZ1bmMoKSBtaXQgYmVydWVja3NpY2h0aWd0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIG1hbiBkaWUgUnVlc3R1bmcgZ2FyIG5pY2h0IGJlaSBzaWNoIGhhdCBvZGVyIHNpZSBzY2hvbiBhbiBoYXQsCisgICAgIGFuc29uc3RlbiAxLgorCitCRU1FUktVTkdFTjoKKyAgICAgQXVjaCB3ZW5uIGVpbmUgMSB6dXJ1ZWNrZ2VnZWJlbiB3aXJkLCBtdXNzIGRhcyBuaWNodCBoZWlzc2VuLCBkYXNzIGRpZQorICAgICBSdWVzdHVuZyBlcmZvbGdyZWljaCBhbmdlem9nZW4gd3VyZGUhCisKKyAgICAgR3J1ZW5kZSBmdWVyIGVpbiBGZWhsc2NobGFnZW4gZGVzIEFuemllaGVucyBrb2VubmVuIHNlaW46CisgICAgICAgIG8gTWFuIGhhdCBkaWUgUnVlc3R1bmcgbmljaHQgYmVpIHNpY2guCisgICAgICAgIG8gTWFuIGhhdCBkaWUgUnVlc3R1bmcgc2Nob24gYW4uCisgICAgICAgIG8gTWFuIGhhdCBzY2hvbiBlaW5lIFJ1ZXN0dW5nIGRlcyBnbGVpY2hlbiBUeXBzIGFuLgorICAgICAgICBvIERlciBUeXAgZGVyIFJ1ZXN0dW5nIG9kZXIgZGllIFJ1ZXN0dW5nc2tsYXNzZSBpc3QgaWxsZWdhbC4KKyAgICAgICAgbyBGYWxscyBkZWZpbmllcnQ6IFdlYXJGdW5jKCkgZ2FiIDAgenVydWVjay4KKyAgICAgICAgbyBGYWxscyBlcyBzaWNoIHVtIGVpbmVuIFNjaGlsZCBoYW5kZWx0OiBNYW4gaGF0IGtlaW5lIEhhbmQgbWVocgorICAgICAgICAgIGZyZWkuCisKK1NJRUhFIEFVQ0g6CisgICAgIERvVW53ZWFyKCksIFdlYXJGdW5jKCksIEluZm9ybVdlYXIoKSwgUF9FUVVJUF9USU1FLCAKKyAgICAgL3N0ZC9hcm1vdXIvY29tYmF0LmMsIFBfVU5XRUFSX01TRywgUF9XRUFSX01TRworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBTdW4gSnVuIDI3IDIyOjIyOjAwIDE5OTkgYnkgUGFyYWNlbHN1cwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRG9XaWVsZCBiL2RvYy9sZnVuL0RvV2llbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjNDM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0RvV2llbGQKQEAgLTAsMCArMSw0MSBAQAorRG9XaWVsZCgpCisKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIGludCBEb1dpZWxkKGludCBzaWxlbnQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgc2lsZW50CisgICAgICAgICAgVW5nbGVpY2ggMCwgd2VubiBkaWUgV2FmZmUgb2huZSBNZWxkdW5nZW4gZ2V6dWVja3Qgd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCB2ZXJzdWNodCwgZGllIFdhZmZlIHp1IHp1ZWNrZW4uIEhhdCBtYW4gc2Nob24gZWluZSBXYWZmZQorICAgICBnZXp1ZWNrdCwgc28gd2lyZCB2ZXJzdWNodCwgZGllc2Ugd2VnenVzdGVja2VuLiBLbGFwcHQgZGFzIG5pY2h0LCBrYW5uCisgICAgIGRpZSBXYWZmZSBuaWNodCBnZXp1ZWNrdCB3ZXJkZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDAsIHdlbm4gbWFuIGRpZSBXYWZmZSBnYXIgbmljaHQgYmVpIHNpY2ggdHJhZWd0LCBhbnNvbnN0ZW4gMS4KKworQkVNRVJLVU5HRU46CisgICAgIEFuaGFuZCBkZXMgUnVlY2tnYWJld2VydGVzIGxhZXNzdCBzaWNoIG5pY2h0IGVudHNjaGVpZGVuLCBvYiBkaWUgV2FmZmUKKyAgICAgc2ljaCBlcmZvbGdyZWljaCB6dWVja2VuIGxpZXNzIQorCisgICAgIEdydWVuZGUsIHdhcnVtIHNpY2ggZWluZSBXYWZmZSBuaWNodCB6dWVja2VuIGxhc3NlbiBrYW5uLCBzaW5kCisgICAgIGZvbGdlbmRlOgorICAgICAgICBvIE1hbiB0cmFlZ3Qgc2llIG5pY2h0IGJlaSBzaWNoIChvZGVyIHNpZSBzdGVja3QgaW4gZWluZW0gQmV1dGVsCisgICAgICAgICAgby5hZS4pLgorICAgICAgICBvIE1hbiBoYXQgc2llIHNjaG9uIGdlenVlY2t0LgorICAgICAgICBvIEZhbGxzIGRlZmluaWVydDogV2llbGRGdW5jKCkgZ2lidCAwIHp1cnVlY2suCisgICAgICAgIG8gTWFuIGlzdCBuaWNodCBnZXNjaGlja3QgZ2VudWcgKGRhcyBoYWVuZ3Qgdm9uIGRlciBXYWZmZW5rbGFzc2UKKyAgICAgICAgICBhYikuCisgICAgICAgIG8gRWluZSBzY2hvbiBnZXp1ZWNrdGUgV2FmZmUgbGFlc3N0IHNpY2ggbmljaHQgd2Vnc3RlY2tlbi4KKyAgICAgICAgbyBEaWUgV2FmZmVua2xhc3NlIGlzdCBob2VoZXIgYWxzIGVybGF1YnQuCisgICAgICAgIG8gTWFuIGhhdCBuaWNodCBnZW51ZyBIYWVuZGUgZnJlaS4KKworU0lFSEUgQVVDSDoKKyAgICAgV2llbGRGdW5jKCksIEluZm9ybVdpZWxkKCksIFBfRVFVSVBfVElNRSwgL3N0ZC93ZWFwb24uYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgQXByIDA4IDEwOjI1OjAwIDIwMDQgYnkgTXVhZGliCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Eb29ySXNLbm93biBiL2RvYy9sZnVuL0Rvb3JJc0tub3duCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDllMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Eb29ySXNLbm93bgpAQCAtMCwwICsxLDI0IEBACitEb29ySXNLbm93bigpCisKK0ZVTktUSU9OOgorCWludCBEb29ySXNLbm93bigpCisKK0FSR1VNRU5URToKKwlLZWluZS4KKworQkVTQ0hSRUlCVU5HOgorCVRlc3RldCwgb2IgZGVyIFNlaGVyICh0aGlzX3BsYXllcigpKSBkYXMgVG9yIGluIHNlaW5lciBtb21lbnRhbmVuCisJVW1nZWJ1bmcgc2Nob24ga2VubnQuCisKK1JVRUNLR0FCRVdFUlQ6CisJRGllIE51bW1lciBkZXMgVG9yZXMuCisKK0JFTUVSS1VOR0VOOgorICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgdm9uIC9kL3NlaGVyL3BvcnRhbGUvc2VoZXJ0b3JtYXN0ZXIgZGVmaW5pZXJ0LgorCitCRUlTUElFTEU6CisgICAgL2Qvc2VoZXIvcG9ydGFsZS9zZWhlcnRvcm1hc3Rlci0+RG9vcklzS25vd24oKQorCitTSUVIRSBBVUNIOgorICAgIERpc2NvdmVyRG9vciwgU2hvd0Rvb3JzLCBUZWxlcG9ydCwgR2V0RG9vcnNNYXBwaW5nCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0R1bXAgYi9kb2MvbGZ1bi9EdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGZiYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9EdW1wCkBAIC0wLDAgKzEsMjMgQEAKK0R1bXAoKQorRlVOS1RJT046CisgICAgIHZvaWQgRHVtcCgpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3AvZGFlbW9uL21hdGVyaWFsZGIuYyAoTUFURVJJQUxEQikKKworQkVTQ0hSRUlCVU5HOgorICAgICBTY2hyZWlidCBhbGxlIE1hdGVyaWFsaWVuIHNhbXQgaWhyZW4gR3J1cHBlbiB1bmQgYWxsZSBHcnVwcGVuIG1pdAorICAgICBkYXp1Z2Vob2VyZW5kZW4gTWF0ZXJpYWxpZW4gaW4gRFVNUEZJTEUgKC9wL2RhZW1vbi9zYXZlL01BVEVSSUFMUykKKyAgICAgV2lyZCBpbiBjcmVhdGUoKSBkZXIgTWF0ZXJpYWxpZW5kYXRlbmJhbmsgYXV0b21hdGlzY2ggYXVmZ2VydWZlbi4KKyAgICAgRGFzIER1bXBmaWxlIGlzdCB6dW0gUmVjaGVyY2hpZXJlbiBkZXIgTWF0ZXJpYWxpZW4gZ2VkYWNodC4KKworU0lFSEUgQVVDSDoKKyAgICAgS29uemVwdGU6CSAgbWF0ZXJpYWwsIG1hdGVyaWFsZXJrZW5udW5nCisgICAgIEdydW5kbGVnZW5kOiBQX01BVEVSSUFMLCAvc3lzL3RoaW5nL21hdGVyaWFsLmgKKyAgICAgTGlzdGVuOgkgIEFsbE1hdGVyaWFscygpLCBBbGxHcm91cHMoKQorCQkgIG1hdGVyaWFsbGlzdGUsIG1hdGVyaWFsZ3J1cHBlbgorICAgICBNYXN0ZXI6CSAgQWRkTWF0ZXJpYWwoKSwgQ29udk1hdGVyaWFsTGlzdCgpLCBNYXRlcmlhbEdyb3VwKCksCisJCSAgR3JvdXBOYW1lKCksIE1hdGVyaWFsTmFtZSgpLAorCQkgIEdldEdyb3VwTWVtYmVycygpLCBHZXRNYXRNZW1iZXJzaGlwKCkKKworNy4gTWFpIDIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9FbmVteVByZXNlbnQgYi9kb2MvbGZ1bi9FbmVteVByZXNlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY1YWUzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0VuZW15UHJlc2VudApAQCAtMCwwICsxLDE5IEBACitFbmVteVByZXNlbnQKK0ZVTktUSU9OOgorICAgICBwdWJsaWMgbWl4ZWQgRW5lbXlQcmVzZW50KCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9jb21iYXQuYworCitCRVNDSFJFSUJVTkc6CisgICAgIEdpYnQgYXVzIGRlciBGZWluZGVzbGlzdGUgZGVuIGVyc3RlbiBhbndlc2VuZGVuLCBsZWJlbmRlbiB1bmQgCisgICAgIGFuZ3JlaWZiYXJlbiBha3R1ZWxsZW4gR2VnbmVyIGltIFJhdW0genVydWVjay4KKyAgICAgRGFtaXQgaXN0IGRpZSBGdW5rdGlvbiBpZGVudGlzY2ggenUgSW5GaWdodCgpLgorCisgICAgIFdpbGwgbWFuIGFsbGUgR2VnbmVyLCBhdWYgZGllIGRpZXNlIEtyaXRlcmllbiB6dXRyZWZmZW4sIHNvbGx0ZSBtYW4KKyAgICAgUHJlc2VudEVuZW1pZXMoKSB2ZXJ3ZW5kZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIFByZXNlbnRFbmVtaWVzKCksIEluZmlnaHQoKQorCisyMi4wMy4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9FbnRlciBiL2RvYy9sZnVuL0VudGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ODdlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9FbnRlcgpAQCAtMCwwICsxLDQwIEBACitFbnRlcigpCisKK0ZVTktUSU9OOgorICAgICBpbnQgRW50ZXIoKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RyYW5zcG9ydC5jCisKK0FSR1VNRU5URToKKyAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICBXZW5uIHNpY2ggZGVyIFNwaWVsZXIgbm9jaCBuaWNodCBhdWYgZGVtIFRyYW5zcG9ydGVyIGJlZmluZGV0LCB1bmQgZGVyCisgICAgIFRyYW5zcG9ydGVyIG1vbWVudGFuIGFuIGVpbmVyIEhhbHRlc3RlbGxlIGxpZWd0LCBiZXRyaXR0IGRlciBTcGllbGVyCisgICAgIGRlbiBUcmFuc3BvcnRlci4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgTnVsbCwgd2VubiBkZXIgU3BpZWxlciBkZW4gVHJhbnNwb3J0ZXIgbmljaHQgYmV0cmV0ZW4ga29ubnRlLCBzb25zdAorICAgICB1bmdsZWljaCBOdWxsLgorCitCRU1FUktVTkdFTjoKKyAgICAgRXMgd2VyZGVuIGtlaW5lIFRlc3RzIGR1cmNoZ2VmdWVocnQsIG9iIGRlciBUcmFuc3BvcnRlciB1ZWJlcmhhdXB0CisgICAgIGFuZ2VzcHJvY2hlbiB3dXJkZSEgRGFzIG11c3MgbWFuIHNlbGJlciBtYWNoZW4uCisKK0JFSVNQSUVMRToKKworICAgICBpbnQgbXlFbnRlcihzdHJpbmcgc3RyKQorICAgICB7CisgICAgICAgaWYgKHN0ciAmJiBpZChzdHIpKQorICAgICAgICAgcmV0dXJuIEVudGVyKCk7CisKKyAgICAgICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSBiZXRyZXRlbj9cbiIpOworICAgICAgIHJldHVybiAwOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIExlYXZlKCksIC9zdGQvdHJhbnNwb3J0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjE4OjQyIDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9FdmFsQXJtb3VyIGIvZG9jL2xmdW4vRXZhbEFybW91cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQzNTZhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRXZhbEFybW91cgpAQCAtMCwwICsxLDIxIEBACitFdmFsQXJtb3VyKCkKKworRlVOS1RJT046CisgICAgaW50IEV2YWxBcm1vdXIob2JqZWN0IG9iLCBjbG9zdXJlIHFwKQorIAorREVGSU5JRVJUIElOOgorICAgIC9zdGQvcm9vbS9zaG9wLmMKKyAKK0FSR1VNRU5URToKKyAgICBvYiAtIEVpbmUgUnVlc3R1bmcuCisgICAgcXAgLSBzeW1ib2xfZnVuY3Rpb24oIlF1ZXJ5UHJvcCIsb2IpCisKK0JFU0NIUkVJQlVORzoKKyAgICBCZXdlcnRldCBkaWUgUnVlc3R1bmcuCisgCitSVUVDS0dBQkVXRVJUOgorICAgIE1heChQX0FDLFBfRUZGRUNUSVZFX0FDKTsKKyAKK1NJRUhFIEFVQ0g6CisgICAgRmluZEJlc3RBcm1vdXIoKQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9FdmFsV2VhcG9uIGIvZG9jL2xmdW4vRXZhbFdlYXBvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTY3MWEzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRXZhbFdlYXBvbgpAQCAtMCwwICsxLDIxIEBACitFdmFsV2VhcG9uKCkKKworRlVOS1RJT046CisgICAgaW50IEV2YWxXZWFwb24ob2JqZWN0IG9iLCBjbG9zdXJlIHFwKQorIAorREVGSU5JRVJUIElOOgorICAgIC9zdGQvcm9vbS9zaG9wLmMKKyAKK0FSR1VNRU5URToKKyAgICBvYiAtIEVpbmUgV2FmZmUuCisgICAgcXAgLSBzeW1ib2xfZnVuY3Rpb24oIlF1ZXJ5UHJvcCIsb2IpCisKK0JFU0NIUkVJQlVORzoKKyAgICBCZXdlcnRldCBkaWUgV2FmZmUuCisgCitSVUVDS0dBQkVXRVJUOgorICAgIE1heChQX1dDLFBfRUZGRUNUSVZFX1dDKTsKKyAKK1NJRUhFIEFVQ0g6CisgICAgRmluZEJlc3RXZWFwb24oKQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9FeHRyYUF0dGFjayBiL2RvYy9sZnVuL0V4dHJhQXR0YWNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNmI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9FeHRyYUF0dGFjawpAQCAtMCwwICsxLDMwIEBACitFeHRyYUF0dGFjaygpCisKK0ZVTktUSU9OOgorCXZhcmFyZ3MgcHVibGljIHZvaWQgRXh0cmFBdHRhY2sob2JqZWN0IGVuZW15LCBpbnQgaWdub3JlX3ByZXZpb3VzKTsKKworQVJHVU1FTlRFOgorCWVuZW15OiBEZXIgRmVpbmQuCisJaWdub3JlX3ByZXZpb3VzOiBFaW4gRmxhZworCitCRVNDSFJFSUJVTkc6CisJRGVyIEZlaW5kIHdpcmQgZGVyIFN0YWVya2UgZGVyIFdhZmZlIChiencuIGRlciBIYWVuZGUpIGVudHNwcmVjaGVuZAorCXN0YXJrIGFuZ2VncmlmZmVuLiBIaWVyYmVpIHdpcmQgQXR0YWNrKCkgYXVmZ2VydWZlbi4KKwlJc3QgaWdub3JlX3ByZXZpb3VzIHVuZ2xlaWNoIDAsIGRhbm4gd2lyZCBkaWUgRXJzdHNjaGxhZ3NwZXJyZSB2b24KKwlBdHRhY2sgaWdub3JpZXJ0LiBEaWVzZXIgQW5ncmlmZiBpc3QgYWxzbyBhdWNoIGRhbm4gbW9lZ2xpY2gsIHdlbm4KKwlkYXMgTGViZXdlc2VuIGVpZ2VudGxpY2gga2VpbmVuIFNjaGxhZyBtZWhyIGluIGRpZXNlciBSdW5kZSBhdXNmdWVocmVuCisJZHVlcmZ0ZS4KKworUlVFQ0tHQUJFV0VSVDoKKwlLZWluZXIuCisKK0JFTUVSS1VORzoKKwlEZXIgRWluc2F0eiBkaWVzZXIgRnVua3Rpb24gaXN0IGdlbmVobWlndW5nc3BmbGljaHRpZy4KKwlXZWl0ZXJlIEhpbndlaXNlIHNpZWhlICJtYW4gQXR0YWNrIi4KKworU0lFSEUgQVVDSDoKKwkiQXR0YWNrIgorCS9zdGQvbGl2aW5nL2NvbWJhdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFN1biBOb3YgMjEgMTI6MzI6MjAgMjAwNCBieSBCYW1iaQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRmlsdGVyQXJtb3VycyBiL2RvYy9sZnVuL0ZpbHRlckFybW91cnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzNDkzMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0ZpbHRlckFybW91cnMKQEAgLTAsMCArMSw2OSBAQAorRmlsdGVyQXJtb3VycworRlVOS1RJT046CisgICAgIHB1YmxpYyBvYmplY3QgKkZpbHRlckFybW91cnMoY2xvc3VyZSBmaWx0ZXJmdW4sIHZhcmFyZ3MgbWl4ZWQqIGV4dHJhKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2Nsb3RoaW5nLmMKKworQVJHVU1FTlRFOgorICAgICBjbG9zdXJlIGZpbHRlcmZ1bgorICAgICAgIERpZSBDbG9zdXJlLCBkaWUgZW50c2NoZWlkZW4gc29sbCwgb2IgZWluZSBSdWVzdHVuZyBpbSBFcmdlYm5pc2FycmF5CisgICAgICAgZW50aGFsdGVuIHNlaW4gc29sbC4KKyAgICAgCisgICAgIG1peGVkIGV4dHJhCisgICAgICAgQmVsaWViaWcgdmllbGUgRXh0cmEtQXJndW1lbnRlLCBkaWUgPGZpbHRlcmZ1bj4gdWViZXJnZWJlbiB3ZXJkZW4uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gcnVmdCA8ZmlsdGVyZnVuYz4gZnVlciBqZWRlIGdldHJhZ2VuZSBSdWVzdHVuZyBkZXMKKyAgICAgTGViZXdlc2VuIG1pdCBkZXIgamV3ZWlsaWdlbiBSdWVzdHVuZyBhbHMgQXJndW1lbnQgYXVmIHVuZCBsaWVmZXJ0IGVpbgorICAgICBBcnJheSBtaXQgYWxsZW4gUnVlc3R1bmdlbiB6dXJ1ZWNrLCBmdWVyIGRpZSA8ZmlsdGVyZnVuPiBlaW5lbiBXZXJ0ICE9IDAKKyAgICAgenVydWVja2xpZWZlcnQuCisgICAgIERpZSA8ZXh0cmE+IEFyZ3VtZW50ZSB3ZXJkZW4gYWxzIHp1c2FldHpsaWNoZSBQYXJhbWV0ZXIgYW4gPGZpbHRlcmZ1bj4KKyAgICAgdWViZXJnZWJlbiB1bmQgZHVlcmZlbiBrZWluZSBSZWZlcmVuemVuIHNlaW4uCisgICAgIAorICAgICBEaWVzZSBWYXJpYW50ZSBpc3QgenUgYmV2b3J6dWdlbiwgd2VubiBtYW4gUnVlc3R1bmdlbiBuYWNoIGJlc3RpbW10ZW4KKyAgICAgS3JpdGVyaWVuIGR1cmNoc3VjaGVuIHdpbGwgdW5kIFF1ZXJ5QXJtb3VyQnlUeXBlKCkgbmljaHQgYXVzcmVpY2hlbmQgc2VpbgorICAgICBzb2xsdGUuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEVpbiBBcnJheSB2b24gT2JqZWt0ZW4gbWl0IGFsbGVuIHBhc3NlbmRlbiBSdWVzdHVuZ2VuLgorCitCRUlTUElFTEU6CisgICAgIDEpIEljaCBtb2VjaHRlIGdlcm5lIGFsbGUgUnVlc3R1bmdlbiBoYWJlbiwgZGllIGJlc2NoYWVkaWd0IHNpbmQ6CisgICAgIHByaXZhdGUgaW50IF9pc19kYW1hZ2VkKG9iamVjdCBydWVzdHVuZykgeworICAgICAgICAgcmV0dXJuIHJ1ZXN0dW5nLT5RdWVyeVByb3AoUF9EQU1BR0UpOworICAgICB9CisgICAgIC4uLgorICAgICBvYmplY3QgKmRhbWFnZWRfYXJtb3VycyA9IFBMLT5GaWx0ZXJBcm1vdXJzKCMnX2lzX2RhbWFnZWQpOworCisgICAgIDIpIEljaCBtb2VjaHRlIGFsbGUgUnVlc3R1bmdlbiwgZGllIGdyb2Vzc2VyIGFscyA1MGNtIHNpbmQuCisgICAgIHByaXZhdGUgaW50IF9hcm1vdXJfaXNfYmlnZ2VyKG9iamVjdCBydWVzdHVuZywgaW50IHNpemUpIHsKKyAgICAgICByZXR1cm4gcnVlc3R1bmctPlF1ZXJ5UHJvcChQX1NJWkUpID4gc2l6ZTsKKyAgICAgfQorICAgICAuLi4KKyAgICAgb2JqZWN0ICpiaWdfYXJtb3VycyA9IFBMLT5GaWx0ZXJBcm1vdXJzKCMnX2Ftb3VyX2lzX2JpZ2dlciwgNTApOyAKKworICAgICAzKSBhbGxlIFJ1ZXN0dW5nZW4gbWl0IGVpbmVyIHNwZXppZWxsZW4gSUQuCisgICAgIHByaXZhdGUgaW50IF9oYXNfaWQob2JqZWN0IHJ1ZXN0dW5nLCBzdHJpbmcgaWRzdHIpIHsKKyAgICAgICByZXR1cm4gcnVlc3R1bmctPmlkKGlkc3RyKTsKKyAgICAgfQorICAgICBvYmplY3QgKmhhc19pZCA9IFBMLT5GaWx0ZXJBcm1vdXJzKCMnX2hhc19pZCwgIlxudG9sbGVydWVzdHVuZyIpOworCisgICAgIDQpIGFsbGUgUnVlc3R1bmdlbiBtaXQgZWluZXIgc3BlemllbGxlbiBJRCwgZGllIGdyb2Vzc2VyIGFscyA1MGNtIHNpbmQuCisgICAgIHByaXZhdGUgaW50IF9oYXNfaWQob2JqZWN0IHJ1ZXN0dW5nLCBzdHJpbmcgaWRzdHIsIGludCBzaXplKSB7CisgICAgICAgcmV0dXJuIHJ1ZXN0dW5nLT5pZChpZHN0cikgJiYgcnVlc3R1bmctPlF1ZXJ5UHJvcChQX1NJWkUpID4gc2l6ZTsKKyAgICAgfQorICAgICBvYmplY3QgKmhhc19pZCA9IFBMLT5GaWx0ZXJBcm1vdXJzKCMnX2hhc19pZCwgIlxudG9sbGVydWVzdHVuZyIsIDUwKTsKKworICAgICA1KSB1ZWJlcmhhdXB0IGFsbGUgZ2V0cmFnZW5lIFJ1ZXN0dW5nCisgICAgIG9iamVjdCAqcnVlID0gUEwtPkZpbHRlckFybW91cnMoIydvYmplY3RwKQorCisKK1NJRUhFIEFVQ0g6CisgICAgIFdlYXIoKSwgV2VhckFybW91cigpLCBXZWFyQ2xvdGhpbmcoKSwgVW53ZWFyKCksIFVud2VhckFybW91cigpLCAKKyAgICAgVW53ZWFyQ2xvdGhpbmcoKQorICAgICBQX0NMT1RISU5HLCBQX0FSTU9VUlMKKyAgICAgRmlsdGVyQ2xvdGhpbmcoKSwgUXVlcnlBcm1vdXJCeVR5cGUoKQorCitaVUxFVFpUIEdFQWVOREVSVDoKKzE0LjAzLjIwMDksIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZpbHRlckNsb3RoaW5nIGIvZG9jL2xmdW4vRmlsdGVyQ2xvdGhpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViMDBlMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0ZpbHRlckNsb3RoaW5nCkBAIC0wLDAgKzEsNTEgQEAKK0ZpbHRlckNsb3RoaW5nCitGVU5LVElPTjoKKyAgICAgcHVibGljIG9iamVjdCAqRmlsdGVyQ2xvdGhpbmcoY2xvc3VyZSBmaWx0ZXJmdW4sIHZhcmFyZ3MgbWl4ZWQqIGV4dHJhKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2Nsb3RoaW5nLmMKKworQVJHVU1FTlRFOgorICAgICBjbG9zdXJlIGZpbHRlcmZ1bgorICAgICAgIERpZSBDbG9zdXJlLCBkaWUgZW50c2NoZWlkZW4gc29sbCwgb2IgZWluZSBLbGVpZHVuZyBpbSBFcmdlYm5pc2FycmF5CisgICAgICAgZW50aGFsdGVuIHNlaW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVzZSBGdW5rdGlvbiBydWZ0IDxmaWx0ZXJmdW5jPiBmdWVyIGplZGUgZ2V0cmFnZW5lIEtsZWlkdW5nIGRlcworICAgICBMZWJld2VzZW4gbWl0IGRlciBqZXdlaWxpZ2VuIEtsZWlkdW5nIGFscyBBcmd1bWVudCBhdWYgdW5kIGxpZWZlcnQgZWluCisgICAgIEFycmF5IG1pdCBhbGxlciBLbGVpZHVuZyB6dXJ1ZWNrLCBmdWVyIGRpZSA8ZmlsdGVyZnVuPiBlaW5lbiBXZXJ0ICE9IDAKKyAgICAgenVydWVja2xpZWZlcnQuCisgICAgIERpZSA8ZXh0cmE+IEFyZ3VtZW50ZSB3ZXJkZW4gYWxzIHp1c2FldHpsaWNoZSBQYXJhbWV0ZXIgYW4gPGZpbHRlcmZ1bj4KKyAgICAgdWViZXJnZWJlbiB1bmQgZHVlcmZlbiBrZWluZSBSZWZlcmVuemVuIHNlaW4uCisgICAgIAorICAgICBEaWVzZSBWYXJpYW50ZSBpc3QgenUgYmV2b3J6dWdlbiwgd2VubiBtYW4gZGllIGdldHJhZ2UgS2xlaWR1bmcgbmFjaAorICAgICBiZXN0aW1tdGVuIEtyaXRlcmllbiBkdXJjaHN1Y2hlbiB3aWxsLiAKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRWluIEFycmF5IHZvbiBPYmpla3RlbiBtaXQgYWxsZW4gcGFzc2VuZGVuIEtsZWlkdW5nLgorCitCRUlTUElFTEU6CisgICAgIDEpIEljaCBtb2VjaHRlIGFsbGUgS2xlaWR1bmcsIGRpZSBncm9lc3NlciBhbHMgNTBjbSBpc3QuCisgICAgIHByaXZhdGUgaW50IF9hcm1vdXJfaXNfYmlnZ2VyKG9iamVjdCBjbG90aGluZywgaW50IHNpemUpIHsKKyAgICAgICByZXR1cm4gY2xvdGhpbmctPlF1ZXJ5UHJvcChQX1NJWkUpID4gc2l6ZTsKKyAgICAgfQorICAgICAuLi4KKyAgICAgb2JqZWN0ICpiaWdfYXJtb3VycyA9IFBMLT5GaWx0ZXJDbG90aGluZygjJ19hbW91cl9pc19iaWdnZXIsIDUwKTsgCisKKyAgICAgMikgYWxsZSBLbGVpZHVuZyBtaXQgZWluZXIgc3BlemllbGxlbiBJRC4KKyAgICAgcHJpdmF0ZSBpbnQgX2hhc19pZChvYmplY3QgY2xvdGhpbmcsIHN0cmluZyBpZHN0cikgeworICAgICAgIHJldHVybiBjbG90aGluZy0+aWQoaWRzdHIpOworICAgICB9CisgICAgIG9iamVjdCAqaGFzX2lkID0gUEwtPkZpbHRlckNsb3RoaW5nKCMnX2hhc19pZCwgIlxudG9sbGVrbGVpZHVuZyIpOworCisgICAgIDMpIHVlYmVyaGF1cHQgYWxsZSBnZXRyYWdlbmUgS2xlaWR1bmcKKyAgICAgb2JqZWN0ICpjbG90aGluZyA9IFBMLT5GaWx0ZXJDbG90aGluZygjJ29iamVjdHApCisKK1NJRUhFIEFVQ0g6CisgICAgIFdlYXIoKSwgV2VhckFybW91cigpLCBXZWFyQ2xvdGhpbmcoKSwgVW53ZWFyKCksIFVud2VhckFybW91cigpLCAKKyAgICAgVW53ZWFyQ2xvdGhpbmcoKQorICAgICBQX0NMT1RISU5HLCBQX0FSTU9VUlMKKyAgICAgRmlsdGVyQXJtb3VycygpLCBRdWVyeUFybW91ckJ5VHlwZSgpCisKK1pVTEVUWlQgR0VBZU5ERVJUOgorMTQuMDMuMjAwOSwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRmluZEJlc3RBcm1vdXJzIGIvZG9jL2xmdW4vRmluZEJlc3RBcm1vdXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTczNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9GaW5kQmVzdEFybW91cnMKQEAgLTAsMCArMSwzOCBAQAorRmluZEJlc3RBcm1vdXJzKCkKKworRlVOS1RJT046CisgICAgdmFyYXJncyBvYmplY3QgKkZpbmRCZXN0QXJtb3VycyhtaXhlZCB0eXBlLCBpbnQgbWF4bW9uLCBpbnQgbWF4dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgbWluYWMsIG1peGVkIHJlc3RyKQorIAorREVGSU5JRVJUIElOOgorICAgIC9zdGQvcm9vbS9zaG9wLmMKKyAKK0FSR1VNRU5URToKKyAgICB0eXBlICAgLSBnZXd1ZW5zY2h0ZXIgUnVlc3R1bmdzdHlwIC8gUnVlc3R1bmdzdHlwZW4KKyAgICBtYXhtb24gLSBHZWxkIGRhcyBhdXNnZWdlYmVuIHdlcmRlbiBkYXJmCisgICAgbWF4dyAgIC0gTWF4aW1hbGVzIEdld2ljaHQKKyAgICBtaW5hYyAgLSBtaW5pbWFsZSBnZXd1ZW5zY2h0ZSBSdWVzdHVuZ3NrbGFzc2UgcHJvIFR5cAorICAgIHJlc3RyICAtIHp1c2FldHpsaWNoZXMgQXJndW1lbnQgZnVlciBDaGVja0ZpbmRSZXN0cmljdGlvbnMoKQorCitCRVNDSFJFSUJVTkc6CisgICAgU3VjaHQgZGllIGJlc3RlbiBSdWVzdHVuZ2VuLCBkaWUgZGVyIExhZGVuIHZlcmthdWZlbiBrYW5uLgorIAorUlVFQ0tHQUJFV0VSVDoKKyAgICBEaWUgYmVzdGVuIFJ1ZXN0dW5nZW4KKyAKK0JFTUVSS1VORzoKKyAgICBEaWUgUXVhbGl0YWV0IGRlciBSdWVzdHVuZyB3aXJkIG1pdCBFdmFsQXJtb3VyKCkgYmVzdGltbXQuCisgICAgSGFiZW4gendlaSBSdWVzdHVuZ2VuIGRpZSBnbGVpY2hlIFF1YWxpdGFldCwKKyAgICB3aXJkIGRpZSBwcmVpc3dlcnRlcmUgZ2Vub21tZW4uCisgCitCRUlTUElFTDoKKyAgICBGaW5kQmVzdEFybW91cnMoQVRfQVJNT1VSLDUwMDApCisgICAgQmVzdGVzIFJ1ZXN0dW5nIHVudGVyIDUwMDAgTXVlbnplbi4KKworICAgIEZpbmRCZXN0QXJtb3Vycygoe0FUX0FSTU9VUixBVF9DTE9BSyxBVF9CT09UfSksMTAwMDAsKFtBVF9BUk1PVVI6MjBdKSkKKyAgICBGaW5kZWQgYmVzdGUgUnVlc3R1bmcsIFVtaGFuZyB1bmQgU2NodWhlLCBkaWUgZGVyIExhZGVuIGZ1ZXIKKyAgICBpbnNnZXNhbXQgMTAwMDAgTXVlbnplbiB2ZXJrYXVmZW4ga2Fubiwgd29iZWkgZGllIFJ1ZXN0dW5nIG1pbmRlc3RlbnMKKyAgICBBQyAyMCBoYWJlbiBtdXNzLgorCitTSUVIRSBBVUNIOgorICAgIEZpbmRCZXN0V2VhcG9uKCksIENoZWNrRmluZFJlc3RyaWN0aW9ucygpLCBFdmFsQXJtb3VyKCkKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZpbmRCZXN0V2VhcG9uIGIvZG9jL2xmdW4vRmluZEJlc3RXZWFwb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiYThmMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0ZpbmRCZXN0V2VhcG9uCkBAIC0wLDAgKzEsMzMgQEAKK0ZpbmRCZXN0V2VhcG9uKCkKKworRlVOS1RJT046CisgICAgdmFyYXJncyBvYmplY3QgRmluZEJlc3RXZWFwb24obWl4ZWQgdHlwZSwgaW50IG1heG1vbiwgaW50IG1heHcsIGludCBoYW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWlud2MsIG1peGVkIHJlc3RyKQorIAorREVGSU5JRVJUIElOOgorICAgIC9zdGQvcm9vbS9zaG9wLmMKKyAKK0FSR1VNRU5URToKKyAgICB0eXBlICAgLSBnZXd1ZW5zY2h0ZXIgV2FmZmVudHlwIC8gV2FmZmVudHlwZW4KKyAgICBtYXhtb24gLSBHZWxkIGRhcyBhdXNnZWdlYmVuIHdlcmRlbiBkYXJmCisgICAgbWF4dyAgIC0gTWF4aW1hbGVzIEdld2ljaHQKKyAgICBoYW5kcyAgLSBBbnphaGwgSGFlbmRlLCBkaWUgZGllIFdhZmZlIGJlbGVnZW4gZGFyZgorICAgIG1pbndjICAtIG1pbmltYWxlIGdld3VlbnNjaHRlIFdhZmZlbmtsYXNzZQorICAgIHJlc3RyICAtIHp1c2FldHpsaWNoZXMgQXJndW1lbnQgZnVlciBDaGVja0ZpbmRSZXN0cmljdGlvbnMoKQorCitCRVNDSFJFSUJVTkc6CisgICAgU3VjaHQgZGllIGJlc3RlIFdhZmZlLCBkaWUgZGVyIExhZGVuIHZlcmthdWZlbiBrYW5uLgorIAorUlVFQ0tHQUJFV0VSVDoKKyAgICBEaWUgYmVzdGUgV2FmZmUgOi0pCisgCitCRU1FUktVTkc6CisgICAgRGllIFF1YWxpdGFldCBkZXIgV2FmZmUgd2lyZCBtaXQgRXZhbFdlYXBvbigpIGJlc3RpbW10LgorICAgIEhhYmVuIHp3ZWkgV2FmZmVuIGRpZSBnbGVpY2hlIFF1YWxpdGFldCwgd2lyZCBkaWUgcHJlaXN3ZXJ0ZXJlIGdlbm9tbWVuLgorIAorQkVJU1BJRUw6CisgICAgRmluZEJlc3RXZWFwb24oV1RfU1dPUkQsNTAwMCwxKQorICAgIEJlc3RlcyBlaW5oYWVuZGlnZXMgU2Nod2VydCB1bnRlciA1MDAwIE11ZW56ZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgRmluZEJlc3RBcm1vdXJzKCksIENoZWNrRmluZFJlc3RyaWN0aW9ucygpLCBFdmFsV2VhcG9uKCkKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZpbmREaXN0YW50RW5lbXlWaWN0aW0gYi9kb2MvbGZ1bi9GaW5kRGlzdGFudEVuZW15VmljdGltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MWMyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9GaW5kRGlzdGFudEVuZW15VmljdGltCkBAIC0wLDAgKzEsMzIgQEAKK0ZpbmREaXN0YW50RW5lbXlWaWN0aW0oKQorCitGVU5LVElPTjoKKwlvYmplY3QgRmluZERpc3RhbnRFbmVteVZpY3RpbShzdHJpbmcgd2VuLCBvYmplY3QgcGwsIHN0cmluZyBtc2csCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpc3QsIGludCBkeSkKKworREVGSU5JRVJUIElOOgorCS9zdGQvc3BlbGxib29rLmMKKworQVJHVU1FTlRFOgorCXdlbiAgLSBpZCBkZXMgZ2V3dWVuc2NodGVuIEdlZ25lcnMsIGZhbGxzIG5pY2h0IGFuZ2VnZWJlbjoKKyAgICAgICAgICAgICAgIFNlbGVjdEVuZW15KEZpbmREaXN0YW50R3JvdXAocGwsLTEsZGlzdCxkeSwxMDAwMCkKKwlwbCAgIC0gQ2FzdGVyLgorCW1zZyAgLSBOYWNocmljaHQgZmFsbHMgR2VnbmVyIG5pY2h0IGFud2VzZW5kIGlzdC4KKwlkaXN0IC0gRW50ZmVybnVuZworCWR5ICAgLSAyKmVybGF1YnRlIEFid2VpY2h1bmcgdm9uIGRlciBFbnRmZXJudW5nLCBkZWZhdWx0IDEwMAorCitCRVNDSFJFSUJVTkc6CisJRmluZGV0IGVpbmVuIEdlZ25lciBpbiBFbnRmZXJudW5nIGRpc3QtZHkvMiBiaXMgZGlzdCtkeS8yCisJei5CLiBmdWVyIGVpbmVuIEFuZ3JpZmZzc3BydWNoLgorCQorUlVFQ0tHQUJFV0VSVDoKKwlEZXIgQXVzZXJ3YWVobHRlIDotKQorCitCRU1FUktVTkdFTjoKKwkxLiBEZXIgR2VnbmVyIHdpcmQgYXVmIGplZGVuIEZhbGwgYW5nZWdyaWZmZW4uCisJMi4gZGlzdCB3aXJkIG1pdCBTQV9SQU5HRSBtb2RpZml6aWVydCwKKwkgICBkeSB3aXJkIG1pdCBTQV9FWFRFTlNJT04gbW9kaWZpemllcnQuCisJMy4gRGllIEVudGZlcm51bmcgaXN0IHJlbGF0aXYgenVtIFNwaWVsZXIuCisKK1NJRUhFIEFVQ0g6CisJdGVhbXMsIEZpbmRFbmVteVZpY3RpbSwgRmluZE5lYXJFbmVteVZpY3RpbSwgRmluZEZhckVuZW15VmljdGltCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9GaW5kRGlzdGFudEdyb3VwIGIvZG9jL2xmdW4vRmluZERpc3RhbnRHcm91cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGVkYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRmluZERpc3RhbnRHcm91cApAQCAtMCwwICsxLDMxIEBACitGaW5kRGlzdGFudEdyb3VwKCkKKworRlVOS1RJT046CisJdmFyYXJncyBvYmplY3QgKkZpbmREaXN0YW50R3JvdXAob2JqZWN0IHBsLCBpbnQgd2hvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlzdCwgaW50IGR5LCBpbnQgZHgpCisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL3NwZWxsYm9vay5jCisKK0FSR1VNRU5URToKKwlwbCAgIC0gQ2FzdGVyCisJd2hvICAtIDE9RnJldW5kZSwgLTE9R2VnbmVyLCAwPWJlaWRlCisJZGlzdCAtIEVudGZlcm51bmcKKwlkeSAgIC0gVGllZmUgICAgICAoZGVmYXVsdCAxMDApCisJZHggICAtIEJyZWl0ZSAgICAgKGRlZmF1bHQgMTAwKk1BWF9URUFNX1JPV0xFTikKKworQkVTQ0hSRUlCVU5HOgorCUVybWl0dGVsdCBMZWJld2VzZW4sIGRpZSBzaWNoIGluIEVudGZlcm51bmcgPGRpc3Q+IGluIGVpbmVtIEJlcmVpY2gKKwlkZXIgQnJlaXRlIDxkeD4gdW5kIFRpZWZlIDxkeT4gYmVmaW5kZW4uCisKK1JVRUNLR0FCRVdFUlQ6CisJQXJyYXkgbWl0IGRlbiBnZWZ1bmRlbmVuIExlYmV3ZXNlbi4KKworQkVNRVJLVU5HRU46CisJR2VuYXVlcmUgSGlud2Vpc2UgdW50ZXIgIkZpbmREaXN0YW50R3JvdXBzIi4KKwlXZXIgc293b2hsIEZyZXVuZGUgd2llIGF1Y2ggRmVpbmRlIGluIGdldHJlbm50ZW4gQXJyYXlzIGJyYXVjaHQsCisJc29sbHRlIEZpbmREaXN0YW50R3JvdXBzIHN0YXR0IEZpbmREaXN0YW50R3JvdXAgdmVyd2VuZGVuLgorCitTSUVIRSBBVUNIOgorCXRlYW1zLCBGaW5kRGlzdGFudEdyb3VwcworCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9GaW5kRGlzdGFudEdyb3VwcyBiL2RvYy9sZnVuL0ZpbmREaXN0YW50R3JvdXBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwN2I3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9GaW5kRGlzdGFudEdyb3VwcwpAQCAtMCwwICsxLDU5IEBACitGaW5kRGlzdGFudEdyb3VwcygpCisKK0ZVTktUSU9OOgorCXZhcmFyZ3MgbWl4ZWQgRmluZERpc3RhbnRHcm91cHMob2JqZWN0IHBsLCBpbnQgZGlzdCwgaW50IGR5LCBpbnQgZHgpCisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL3NwZWxsYm9vay5jCisKK0FSR1VNRU5URToKKwlwbCAgIC0gQ2FzdGVyCisJZGlzdCAtIEVudGZlcm51bmcKKwlkeSAgIC0gVGllZmUgICAgICAoZGVmYXVsdCAxMDApCisJZHggICAtIEJyZWl0ZSAgICAgKGRlZmF1bHQgMTAwKk1BWF9URUFNX1JPV0xFTikKKworQkVTQ0hSRUlCVU5HOgorCUVybWl0dGVsZCBmZWluZGxpY2hlIChiZWkgU3BpZWxlcm4gTlBDcywgYmVpIE5QQ3MgU3BpZWxlcikgdW5kCisJZnJldW5kbGljaGUgKGJlaSBTcGllbGVybiBTcGllbGVyLCBiZWkgTlBDcyBOUENzKSBMZWJld2VzZW4sCisJZGllIHNpY2ggaW4gRW50ZmVybnVuZyA8ZGlzdD4gaW4gZWluZW0gQmVyZWljaCBkZXIgQnJlaXRlIDxkeD4KKwl1bmQgVGllZmUgPGR5PiBiZWZpbmRlbi4KKworUlVFQ0tHQUJFV0VSVDoKKwlBcnJheSBtaXQgendlaSBBcnJheXMgYWxzIEluaGFsdDoKKwkoeyBmZWluZGxpY2hlIExlYmV3ZXNlbiwgZnJldW5kbGljaGUgTGViZXdlc2VuIH0pCisKK0JFTUVSS1VOR0VOOgorCURpZSBFbnRmZXJudW5nc2FuZ2FiZW4gc2luZCBhbHMgY20uIHp1IHZlcnN0ZWhlbi4KKwlKZWRlcyBMZWJld2VzZW4gYmVsZWd0IDUwY20geCA1MGNtIG1pdCBBYnN0YW5kIDUwY20KKwl6dW0gbmFlY2hzdGVuIExlYmV3ZXNlbiBpbiBqZWRlciBSaWNodHVuZy4KKwlEaWUgQnJlaXRlbmFuZ2FiZSB3aXJrdCBzaWNoIG51ciBpbiBkZXIgQW56YWhsIGRlcgorCUxlYmV3ZXNlbiBhdXMsIGRpZSB6dWZhZWxsaWcgcHJvIFJlaWhlIGF1c2dld2FlaGx0IHdlcmRlbi4KKwlEaWUgU2tpbGxhdHRyaWJ1dGUgU0FfUkFOR0UgdW5kIFNBX0VYVEVOU0lPTiB3ZXJkZW4gYmVydWVja3NpY2h0aWd0LgorCitCRUlTUElFTDoKKwlkaXN0PTIwMCwgZHk9MjAwLCBkeD0yMDAsIGVpbiBQdW5rdCA9IDUwY20geCA1MGNtCisJICAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLgorCTMuIC4gLiAuIC4gLiAuIEcgLiAuIC4gLiAuIC4KKwkgICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuCisJMi4gLiAuIC4gLiAuIEcgLiBHIC4gLiAuIC4gLmRpc3QrZHkvMi0rCisJICAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICB8ICAKKwkxLiAuIC4gLiAuIEcgLiBHIC4gRyAuIC4gLiAuICAgICBkaXN0ICstKyAoR2VnbmVyIEcpCisJLS0tLi0uLS4tLi0uLS4tLi0uLS4tLi0uLS4tLiAgICAgICAgICB8IHwKKwkxLiAuIC4gLiAuIEYgLiBGIC4gRiAuIC4gLiAuZGlzdC1keS8yLSsgfCAoRnJldW5kZSBGKQorCSAgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICB8CisJMi4gLiAuIC4gLiAuIEYgLiBTIC4gLiAuIC4gLi0tLS0tLS0tLS0tLSsgKFJlaWhlIGRlcyBTcGllbGVycyBTKQorCSAgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4KKwkzLiAuIC4gLiAuIC4gLiBGIC4gLiAuIC4gLiAuCisJICAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLgorCUFiZ2VkZWNrdGVyIEJlcmVpY2g6ICAgICAgICAgICAxMDBjbSAgYmlzICAzMDBjbQorICAgICAgICAgICAgICAgIFJlaWhlIDM6ICAzNzVjbS4uNDI1Y20gICAgICAgICAzNzU+MzAwIC0+IG5pY2h0IGVyd2lzY2h0CisgICAgICAgICAgICAgICAgUmVpaGUgMjogIDI3NWNtLi4zMjVjbSAgICAgICAgIDI3NTwzMDAgLT4gZXJ3aXNjaHQKKwlHZWduZXIgIFJlaWhlIDE6ICAxNzVjbS4uMjI1Y20gMTAwPDE3NSwyMjU8MzAwIC0+IGVyd2lzY2h0CisJRnJldW5kZSBSZWloZSAxOiAgIDc1Y20uLjEyNWNtIDEwMDwxMjUgICAgICAgICAtPiBlcndpc2NodAorCSAgICAgICAgUmVpaGUgMjogIC0yNWNtLi4uMjVjbSAxMDA+IDI1ICAgICAgICAgLT4gbmljaHQgZXJ3aXNjaHQKKyAgICAgICAgICAgICAgICBSZWloZSAzOiAtMTI1Y20uLi03NWNtIDEwMD4tNzUgICAgICAgICAtPiBuaWNodCBlcndpc2NodAorCUVyZ2VibmlzOiAoeyh7RyxHLEcsR30pLCh7RixGfSl9KQorCShNYXhpbWFsIDIgTGViZXdlc2VuIHBybyBSZWloZSBiZWkgQnJlaXRlIDIwMCkuCisKK1NJRUhFIEFVQ0g6CisJdGVhbXMsIEZpbmREaXN0YW50R3JvdXAKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZpbmRFbmVteVZpY3RpbSBiL2RvYy9sZnVuL0ZpbmRFbmVteVZpY3RpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWI3MmZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRmluZEVuZW15VmljdGltCkBAIC0wLDAgKzEsMjQgQEAKK0ZpbmRFbmVteVZpY3RpbSgpCisKK0ZVTktUSU9OOgorCW9iamVjdCBGaW5kRW5lbXlWaWN0aW0oc3RyaW5nIHdlbiwgb2JqZWN0IHBsLCBzdHJpbmcgbXNnKQorCitERUZJTklFUlQgSU46CisJL3N0ZC9zcGVsbGJvb2suYworCitBUkdVTUVOVEU6CisJd2VuIC0gaWQgZGVzIGdld3VlbnNjaHRlbiBHZWduZXJzLCBmYWxscyBuaWNodCBhbmdlZ2ViZW4gU2VsZWN0RW5lbXkuCisJcGwgIC0gQ2FzdGVyLgorCW1zZyAtIE5hY2hyaWNodCBmYWxscyBHZWduZXIgbmljaHQgYW53ZXNlbmQgaXN0LgorCitCRVNDSFJFSUJVTkc6CisJRmluZGV0IGVpbmVuIEdlZ25lciwgei5CLiBmdWVyIGVpbmVuIEFuZ3JpZmZzc3BydWNoLgorCQorUlVFQ0tHQUJFV0VSVDoKKwlEZXIgQXVzZXJ3YWVobHRlIDotKQorCitCRU1FUktVTkdFTjoKKwlEZXIgR2VnbmVyIHdpcmQgYXVmIGplZGVuIEZhbGwgYW5nZWdyaWZmZW4uCisKK1NJRUhFIEFVQ0g6CisJRmluZExpdmluZ1ZpY3RpbQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRmluZEZhckVuZW15VmljdGltIGIvZG9jL2xmdW4vRmluZEZhckVuZW15VmljdGltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0M2RkYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9GaW5kRmFyRW5lbXlWaWN0aW0KQEAgLTAsMCArMSwzMCBAQAorRmluZEZhckVuZW15VmljdGltKCkKKworRlVOS1RJT046CisJb2JqZWN0IEZpbmRGYXJFbmVteVZpY3RpbShzdHJpbmcgd2VuLCBvYmplY3QgcGwsIHN0cmluZyBtc2csCisJICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWluLCBpbnQgbWF4KQorCitERUZJTklFUlQgSU46CisJL3N0ZC9zcGVsbGJvb2suYworCitBUkdVTUVOVEU6CisJd2VuIC0gaWQgZGVzIGdld3VlbnNjaHRlbiBHZWduZXJzLCBTZWxlY3RGYXJFbmVteSBmYWxscyBuL2EuCisJcGwgIC0gQ2FzdGVyLgorCW1zZyAtIE5hY2hyaWNodCBmYWxscyBHZWduZXIgbmljaHQgYW53ZXNlbmQgaXN0LgorCW1pbiAtIG1pbmltYWxlIEthbXBmcmVpaGUKKwltYXggLSBtYXhpbWFsZSBLYW1wZnJlaWhlCisKK0JFU0NIUkVJQlVORzoKKwlGaW5kZXQgZWluZW4gR2VnbmVyIGF1cyBLYW1wZnJlaWhlIDxtaW4+IGJpcyA8bWF4PgorCXouQi4gZnVlciBlaW5lbiBBbmdyaWZmc3NwcnVjaC4KKwkKK1JVRUNLR0FCRVdFUlQ6CisJRGVyIEF1c2Vyd2FlaGx0ZSA6LSkKKworQkVNRVJLVU5HRU46CisJMS4gRGVyIEdlZ25lciB3aXJkIGF1ZiBqZWRlbiBGYWxsIGFuZ2VncmlmZmVuLgorCTIuIERpZSBSZWloZW5hbmdhYmVuIHdlcmRlbiBOSUNIVCBtaXQgU2tpbGxhdHRyaWJ1dGVuIG1vZGlmaXppZXJ0LgorCTMuIERpZSBBbmdhYmUgZGVyIFJlaWhlIGlzdCBhYnNvbHV0LgorCitTSUVIRSBBVUNIOgorCXRlYW1zLCBGaW5kRW5lbXlWaWN0aW0sIEZpbmROZWFyRW5lbXlWaWN0aW0sIEZpbmREaXN0YW50RW5lbXlWaWN0aW0KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZpbmRHcm91cCBiL2RvYy9sZnVuL0ZpbmRHcm91cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzFjNjkzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRmluZEdyb3VwCkBAIC0wLDAgKzEsNzYgQEAKK0ZpbmRHcm91cCgpCisKK0ZVTktUSU9OOgorICAgIG9iamVjdCpGaW5kR3JvdXAob2JqZWN0IHBsLGludCB3aG8pOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9zcGVsbGJvb2suYworCitBUkdVTUVOVEU6CisgICAgcGwKKyAgICAgIExlYmV3ZXNlbiwgdm9uIHdlbGNoZW0gZGllIEZyZXVuZGUgb2RlciBGZWluZGUgaW4gZGVyIFVtZ2VidW5nCisgICAgICBnZWZ1bmRlbiB3ZXJkZW4gc29sbGVuLgorICAgIHdobworICAgICAgRmxhZywgd2VsY2hlcyBhbnplaWd0LCBvYiBGcmV1bmRlIG9kZXIgRmVpbmRlIGdlZnVuZGVuIHdlcmRlbgorICAgICAgc29sbGVuIChLb25zdGFudGVuIGRlZmluaWVydCBpbiAnL3N5cy9uZXdfc2tpbGxzLmgnKToKKyAgICAgICAgRkdfRU5FTUlFUyAtIChXZXJ0IC0xKSBGZWluZGUgc29sbGVuIGdlZnVuZGVuIHdlcmRlbgorICAgICAgICBGR19GUklFTkRTIC0gKFdlcnQgIDEpIEZyZXVuZGUgc29sbGVuIGdlZnVuZGVuIHdlcmRlbgorICAgICAgICBGR19BTEwgICAgIC0gKFdlcnQgIDApIGFsbGUgTGViZXdlc2VuIHNvbGxlbiBnZWZ1bmRlbiB3ZXJkZW4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICBBcnJheSBtaXQgZ2VmdW5kZW5lbiBMZWJld2VzZW4KKworQkVTQ0hSRUlCVU5HOgorICAgIEJlaSBTcGVsbHMsIGRpZSBzaWNoIGF1ZiBtZWhyZXJlIEdlZ25lciBhdXN3aXJrZW4gb2RlciBiZWkgZGVuZW4gbWFuCisgICAgcGVyIEhhbmQgZWluIE9wZmVyIGF1c3dhZWhsZW4gbW9lY2h0ZSwgbGFlc3N0IHNpY2ggbWl0dGVscyBkZXIKKyAgICBGdW5rdGlvbiBGaW5kR3JvdXAoKSBlaW5lIExpc3RlIHZvbiBMZWJld2VzZW4gZXJtaXR0ZWxuLCB3ZWxjaGUgaW4KKyAgICBkZXIgVW1nZWJ1bmcgdm9uIDxwbD4genUgZmluZGVuIHNpbmQuCisgICAgSmUgbmFjaGRlbSwgd2FzIG1hbiBkZW5uIGdlbmF1IHZvcmhhdCwga2FubiBtYW4gc2ljaCB2b24gZGVyCisgICAgRnVua3Rpb24gZnJldW5kbGljaCBvZGVyIGZlaW5kbGljaCBnZXNpbm50ZSBMZWJld2VzZW4gaGVyYXVzc3VjaGVuCisgICAgbGFzc2VuLgorICAgIFdpbGwgbWFuIGRpZSBmcmV1bmRsaWNoIGdlc2lubnRlbiBMZWJld2VzZW4gZXJtaXR0ZWxuLCBzbyB1ZWJlcmdpYnQKKyAgICBtYW4gaW4gPHdobz4gZGllIEtvbnN0YW50ZSBGR19GUklFTkRTLCBiZWkgZmVpbmRsaWNoIGdlc2lubnRlbiBkaWUKKyAgICBLb25zdGFudGUgRkdfRU5FTUlFUywgdW5kIHdlbm4gbWFuIGFsbGUgTGViZXdlc2VuIGJla29tbWVuIG1vZWNodGUKKyAgICBzY2hsaWVzc2xpY2ggRkdfQUxMLgorICAgIEJlaSBkZXIgQXVzd2FobCBnZWx0ZW4gZm9sZ2VuZGUgUmVnZWxuOgorICAgICAgKDEpIExlYmV3ZXNlbiwgbWl0IGRlbmVuIDxwbD4gaW0gS2FtcGYgaXN0LCBzaW5kIGdydW5kc2FldHpsaWNoCisgICAgICAgICAgZmVpbmRsaWNoIGdlc2lubnQuCisgICAgICAoMikgVGVhbW1pdGdsaWVkZXIgdm9uIDxwbD4gc2luZCBncnVuZHNhZXR6bGljaCBmcmV1bmRsaWNoCisgICAgICAgICAgZ2VzaW5udC4KKyAgICAgICgzKSBTcGllbGVyIHNpbmQgZ2VnZW51ZWJlciBTcGllbGVybiBmcmV1bmRsaWNoIGdlc2lubnQsIE5QQ3MKKyAgICAgICAgICBnZWdlbnVlYmVyIE5QQ3MuIE5QQ3Mga2FubiBtYW4gaGllcmJlaSBtaXQgSGlsZmUgZGVyIFByb3BlcnR5CisgICAgICAgICAgUF9GUklFTkQgZGVuIFNwaWVsZXJuIHp1b3JkbmVuLgorICAgICAgKDQpIERhcmF1cyBmb2xndCBuYXR1ZXJsaWNoLCBkYXNzIFNwaWVsZXIgdW5kIE5QQ3MgZ3J1bmRzYWV0emxpY2gKKyAgICAgICAgICBlaW5lIGZlaW5kbGljaGUgRWluc3RlbGx1bmcgZ2VnZW51ZWJlciBoYWJlbiwgc29mZXJuIGRpZSBOUENzCisgICAgICAgICAgbmljaHQgZGllIFByb3BlcnR5IFBfRlJJRU5EIGdlc2V0enQgaGFiZW4KKyAgICAgICAgICAgKHdhcyBzdGFuZGFyZG1hZXNzaWcgbmF0dWVybGljaCBuaWNodCBkZXIgRmFsbCBpc3QpLgorICAgICAgKDUpIE5ldHp0b3RlIHdlcmRlbiBuaWNodCBlcmthbm50LgorICAgICAgKDYpIE1hZ2llciB3ZXJkZW4gbmljaHQgZXJrYW5udCwgd2VubiBzaWUgdW5zaWNodGJhciBzaW5kLgorICAgICAgKDcpIEVpbiBNYWdpZXIgd2lyZCBhbHMgZmVpbmRsaWNoIGdlc2lubnQgbnVyIGRhbm4gZXJrYW5udCwgd2VubgorICAgICAgICAgIDxwbD4gbWl0IGlobSBpbSBLYW1wZiBpc3QuCisgICAgICAoNikgU3VjaHQgbWFuIGZlaW5kbGljaCBnZXNpbm50ZSBMZWJld2VzZW4sIHNvIHdlcmRlbiBkaWUsIHdlbGNoZQorICAgICAgICAgIGVpbmUgdm9uIGRlbiBQcm9wZXJ0aWVzIFBfTk9fQVRUQUNLIG9kZXIgUF9OT19HTE9CQUxfQVRUQUNLCisgICAgICAgICAgZ2VzZXR6dCBoYWJlbiwgbmljaHQgZXJrYW5udC4KKyAgICBEaWUgUHJvcGVydHkgUF9GUklFTkQgc29sbHRlIG1hbiBpbiBOUENzIHNldHplbiwgZGllIGRlbSBTcGllbGVyCisgICAgaGlsZnJlaWNoIGJlaXNlaXRlIHN0ZWhlbiwgei5CLiB2b20gU3BpZWxlciBiZXNjaHdvcmVuZSBIaWxmc05QQ3MuCisKK0JFSVNQSUVMRToKKyAgICBXZW5uIG1hbiBlaW5lbiBGZXVlcmJhbGwgbmFjaCBqZW1hbmRlbSB3aXJmdCwgc28gdHJpZmZ0IGRpZXNlciB1bnRlcgorICAgIFVtc3RhZW5kZW4gYXVjaCBhbmRlcmUsIHdlbm4gZXIgZ3Jvc3MgZ2VudWcgaXN0LiBNYW4gbmltbXQgaGllcmJlaQorICAgIGFuLCBkYXNzIHNpY2ggZGllIGZyZXVuZGxpY2ggZ2VzaW5udGVuIExlYmV3ZXNlbiBkZXMgR2VnbmVycyBhdWNoCisgICAgbmFlaGVyIGJlaSBpaG0gYmVmaW5kZW4gYWxzIGRpZSBmZWluZGxpY2ggZ2VzaW5udGVuOgorICAgICAgdmljdGltLT5EZWZlbmQoNTAwLERUX0ZJUkUsKFtTUF9TSE9XX0RBTUFHRToxXSksY2FzdGVyKTsKKyAgICAgIHZpY3RpbUxpc3Q9RmluZEdyb3VwKHZpY3RpbSxGR19GUklFTkRTKTsKKyAgICAgIG1hcF9vYmplY3RzKHZpY3RpbUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgIkRlZmVuZCIsCisgICAgICAgICAgICAgICAgICAgICAgMTAwLAorICAgICAgICAgICAgICAgICAgICAgIERUX0ZJUkUsCisgICAgICAgICAgICAgICAgICAgICAgKFtTUF9TSE9XX0RBTUFHRToxXSksCisgICAgICAgICAgICAgICAgICAgICAgY2FzdGVyKTsKKyAgICBIaWVybWl0IHRyaWZmdCBtYW4gYWxzbyBhdWNoIGRpZSBGcmV1bmRlIHZvbiA8dmljdGltPi4KKworU0lFSEUgQVVDSDoKKyAgICBGaW5kR3JvdXBOKCksIEZpbmRHcm91cFAoKSwgUF9GUklFTkQsIFBfTk9fR0xPQkFMX0FUVEFDSworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBNb24gSmFuIDI4IDIxOjQ1OjAwIDIwMDIgYnkgVGlhbWFrCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9GaW5kR3JvdXBOIGIvZG9jL2xmdW4vRmluZEdyb3VwTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzY0Zjc3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRmluZEdyb3VwTgpAQCAtMCwwICsxLDQ1IEBACitGaW5kR3JvdXBOKCkKKworRlVOS1RJT046CisJb2JqZWN0KkZpbmRHcm91cE4ob2JqZWN0IHBsLGludCB3aG8saW50IG4pOworCitERUZJTklFUlQgSU46CisJL3N0ZC9zcGVsbGJvb2suYworCitBUkdVTUVOVEU6CisJcGwKKwkgIExlYmV3ZXNlbiwgdm9uIHdlbGNoZW0gZGllIEZyZXVuZGUgb2RlciBGZWluZGUgaW4gZGVyIFVtZ2VidW5nCisJICBnZWZ1bmRlbiB3ZXJkZW4gc29sbGVuLgorCXdobworCSAgRmxhZywgd2VsY2hlcyBhbnplaWd0LCBvYiBGcmV1bmRlIG9kZXIgRmVpbmRlIGdlZnVuZGVuIHdlcmRlbgorCSAgc29sbGVuIChLb25zdGFudGVuIGRlZmluaWVydCBpbiAnL3N5cy9uZXdfc2tpbGxzLmgnKToKKwkgICAgRkdfRU5FTUlFUyAtIChXZXJ0IC0xKSBGZWluZGUgc29sbGVuIGdlZnVuZGVuIHdlcmRlbgorCSAgICBGR19GUklFTkRTIC0gKFdlcnQgIDEpIEZyZXVuZGUgc29sbGVuIGdlZnVuZGVuIHdlcmRlbgorCSAgICBGR19BTEwgICAgIC0gKFdlcnQgIDApIGFsbGUgTGViZXdlc2VuIHNvbGxlbiBnZWZ1bmRlbiB3ZXJkZW4KKwluCisJICBBbnphaGwgZGVyIExlYmV3ZXNlbiwgZGllIHp1cnVlY2tnZWdlYmVuIHdlcmRlbiBzb2xsZW4uCisJICBIaWVyYmVpIGdlaHQgdm9yaGVyIG5vY2ggZGFzIFNraWxsYXR0cmlidXRlIFNBX0VYVEVOU0lPTiBlaW4hCisJICBFcyB3aXJkIG1pbmRlc3RlbnMgMSBMZWJld2VzZW4genVydWVja2dlbGllZmVydCAoc29mZXJuIGdlZnVuZGVuKS4KKworUlVlQ0tHQUJFV0VSVDoKKwlBcnJheSBtaXQgZ2VmdW5kZW5lbiBMZWJld2VzZW4KKworQkVTQ0hSRUlCVU5HOgorCUF1c2dlc3VjaHQgd2VyZGVuIGRpZSBMZWJld2VzZW4gZ2VuYXVzbyB3aWUgYmVpIEZpbmRHcm91cCgpLCBudXIKKwlkYXNzIHp1bSBTY2hsdXNzIGRpZSBBbnphaGwgbm9jaCBiZWdyZW56dCB3aXJkLgorCitCRUlTUElFTEU6CisJTWFuIG1vZWNodGUgbWF4aW1hbCA1IEZlaW5kZSBmaW5kZW4sIGRpZSBtYW4gZ2xlaWNoemVpdGlnIG1pdCBlaW5lbQorCVNwZWxsIGJlbGVnZW4ga2FubjoKKwkgIGVuZW15TGlzdD1GaW5kR3JvdXBOKGNhc3RlcixGR19FTkVNSUVTLDUpOworCURpZXMgZ2lsdCBqZWRvY2ggbnVyIGJlaSBTQV9FWFRFTlNJT049PTEwMCwgc29uc3Qgd2lyZAorCWRlbWVudHNwcmVjaGVuZCBtZWhyIG9kZXIgd2VuaWdlciB6dXJ1ZWNrZ2VnZWJlbi4KKwkgKGFsc28gYmVpIFNBX0VYVEVOU0lPTj09MjAwIGRvcHBlbHQgc28gdmllbGUgLT4gMTAgTGViZXdlc2VuKQorCURhcyBTa2lsbGF0dHJpYnV0ZSBTQV9FWFRFTlNJT04ga2FubiBhdWNoIGR1cmNoIFNBX1FVQUxJVFkKKwl2ZXJhZW5kZXJ0IHdvcmRlbiBzZWluOyBkYXMgc29sbHRlIGJlYWNodGV0IHdlcmRlbi4KKworU0lFSEUgQVVDSDoKKwlGaW5kR3JvdXAoKSwgRmluZEdyb3VwUCgpLCBQX0ZSSUVORCwgUF9OT19HTE9CQUxfQVRUQUNLCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IE1vbiBKYW4gMjUgMTU6MDQ6MzEgMTk5OSBieSBQYXRyeW4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZpbmRHcm91cFAgYi9kb2MvbGZ1bi9GaW5kR3JvdXBQCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZWY1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9GaW5kR3JvdXBQCkBAIC0wLDAgKzEsNDYgQEAKK0ZpbmRHcm91cFAoKQorCitGVU5LVElPTjoKKwlvYmplY3QqRmluZEdyb3VwUChvYmplY3QgcGwsaW50IHdobyxpbnQgcHIpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9zcGVsbGJvb2suYworCitBUkdVTUVOVEU6CisJcGwKKwkgIExlYmV3ZXNlbiwgdm9uIHdlbGNoZW0gZGllIEZyZXVuZGUgb2RlciBGZWluZGUgaW4gZGVyIFVtZ2VidW5nCisJICBnZWZ1bmRlbiB3ZXJkZW4gc29sbGVuLgorCXdobworCSAgRmxhZywgd2VsY2hlcyBhbnplaWd0LCBvYiBGcmV1bmRlIG9kZXIgRmVpbmRlIGdlZnVuZGVuIHdlcmRlbgorCSAgc29sbGVuIChLb25zdGFudGVuIGRlZmluaWVydCBpbiAnL3N5cy9uZXdfc2tpbGxzLmgnKToKKwkgICAgRkdfRU5FTUlFUyAtIChXZXJ0IC0xKSBGZWluZGUgc29sbGVuIGdlZnVuZGVuIHdlcmRlbgorCSAgICBGR19GUklFTkRTIC0gKFdlcnQgIDEpIEZyZXVuZGUgc29sbGVuIGdlZnVuZGVuIHdlcmRlbgorCSAgICBGR19BTEwgICAgIC0gKFdlcnQgIDApIGFsbGUgTGViZXdlc2VuIHNvbGxlbiBnZWZ1bmRlbiB3ZXJkZW4KKwlwcgorCSAgV2FocnNjaGVpbmxpY2hrZWl0LCBtaXQgZGVyIGVpbiBMZWJld2VzZW4gYXVzZ2VzdWNodCB3ZXJkZW4gc29sbC4KKwkgIEhpZXJiZWkgZ2VodCB2b3JoZXIgbm9jaCBkYXMgU2tpbGxhdHRyaWJ1dGUgU0FfRVhURU5TSU9OIGVpbiEKKworUlVlQ0tHQUJFV0VSVDoKKwlBcnJheSBtaXQgZ2VmdW5kZW5lbiBMZWJld2VzZW4KKworQkVTQ0hSRUlCVU5HOgorCUF1c2dlc3VjaHQgd2VyZGVuIGRpZSBMZWJld2VzZW4gZ2VuYXVzbyB3aWUgYmVpIEZpbmRHcm91cCgpLCBudXIKKwlkYXNzIHp1bSBTY2hsdXNzIGRpZSBlaW56ZWxuZW4gTGViZXdlc2VuIHBlciBadWZhbGwgYXVzZ2V3YWVobHQKKwl3ZXJkZW4uIEVzIGlzdCBhbHNvIG5pY2h0IGdlc2ljaGVydCwgZGFzcyB1ZWJlcmhhdXB0IGVpbiBMZWJld2VzZW4KKwl6dXJ1ZWNrZ2VsaWVmZXJ0IHdpcmQsIHRyb3R6ZGVtIHdlbGNoZSBnZWZ1bmRlbiB3dXJkZW4uCisKK0JFSVNQSUVMRToKKwlNYW4gbW9lY2h0ZSBpbSBTY2huaXR0IDUwJSBkZXIgRmVpbmRlIGZpbmRlbiwgZGllIG1hbiBnbGVpY2h6ZWl0aWcKKwltaXQgZWluZW0gU3BlbGwgYmVsZWd0OgorCSAgZW5lbXlMaXN0PUZpbmRHcm91cFAoY2FzdGVyLEZHX0VORU1JRVMsNTApOworCURpZXMgZ2lsdCBqZWRvY2ggbnVyIGJlaSBTQV9FWFRFTlNJT049PTEwMCwgc29uc3Qgd2lyZCBtaXQKKwlkZW1lbnRzcHJlY2hlbmQgbWVociBvZGVyIHdlbmlnZXIgV2FocnNjaGVpbmxpY2hrZWl0IHp1cnVlY2tnZWdlYmVuLgorCSAoYWxzbyBiZWkgU0FfRVhURU5TSU9OPT0yMDAgZG9wcGVsdCBzbyB2aWVsZSAtPiAxMDAlLCBhbHNvIGFsbGUpCisJRGFzIFNraWxsYXR0cmlidXRlIFNBX0VYVEVOU0lPTiBrYW5uIGF1Y2ggZHVyY2ggU0FfUVVBTElUWQorCXZlcmFlbmRlcnQgd29yZGVuIHNlaW47IGRhcyBzb2xsdGUgYmVhY2h0ZXQgd2VyZGVuLgorCitTSUVIRSBBVUNIOgorCUZpbmRHcm91cCgpLCBGaW5kR3JvdXBQKCksIFBfRlJJRU5ELCBQX05PX0dMT0JBTF9BVFRBQ0sKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogTW9uIEphbiAyNSAxNTowNDozMSAxOTk5IGJ5IFBhdHJ5bgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vRmluZE5lYXJFbmVteVZpY3RpbSBiL2RvYy9sZnVuL0ZpbmROZWFyRW5lbXlWaWN0aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkNzdjZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0ZpbmROZWFyRW5lbXlWaWN0aW0KQEAgLTAsMCArMSwyNSBAQAorRmluZE5lYXJFbmVteVZpY3RpbSgpCisKK0ZVTktUSU9OOgorCW9iamVjdCBGaW5kTmVhckVuZW15VmljdGltKHN0cmluZyB3ZW4sIG9iamVjdCBwbCwgc3RyaW5nIG1zZykKKworREVGSU5JRVJUIElOOgorCS9zdGQvc3BlbGxib29rLmMKKworQVJHVU1FTlRFOgorCXdlbiAtIGlkIGRlcyBnZXd1ZW5zY2h0ZW4gR2VnbmVycywgU2VsZWN0TmVhckVuZW15IGZhbGxzIG4vYS4KKwlwbCAgLSBDYXN0ZXIuCisJbXNnIC0gTmFjaHJpY2h0IGZhbGxzIEdlZ25lciBuaWNodCBhbndlc2VuZCBpc3QuCisKK0JFU0NIUkVJQlVORzoKKwlGaW5kZXQgZWluZW4gaW0gTmFoa2FtcGYgZXJyZWljaGJhcmVuIEdlZ25lciwKKwl6LkIuIGZ1ZXIgZWluZW4gQW5ncmlmZnNzcHJ1Y2guCisJCitSVUVDS0dBQkVXRVJUOgorCURlciBBdXNlcndhZWhsdGUgOi0pCisKK0JFTUVSS1VOR0VOOgorCURlciBHZWduZXIgd2lyZCBhdWYgamVkZW4gRmFsbCBhbmdlZ3JpZmZlbi4KKworU0lFSEUgQVVDSDoKKwl0ZWFtcywgRmluZEVuZW15VmljdGltLCBGaW5kRmFyRW5lbXlWaWN0aW0sIEZpbmREaXN0YW50RW5lbXlWaWN0aW0KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZpbmRQb3Rpb24gYi9kb2MvbGZ1bi9GaW5kUG90aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxN2M4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9GaW5kUG90aW9uCkBAIC0wLDAgKzEsNDkgQEAKK0ZpbmRQb3Rpb24oKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBpbnQgRmluZFBvdGlvbihzdHJpbmcgcyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9wbGF5ZXIvcG90aW9uLmMKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcgcworICAgICAgIEF1c2dhYmV0ZXh0LiBXZW5uIDAvTGVlcnN0cmluZywgd2lyZCBEZWZhdWx0IHZlcndlbmRldC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVzZSBGdW5rdGlvbiBnaWJ0IGVpbmVtIGF1ZnJ1ZmVuZGVuIFNwaWVsZXIgZXZlbnR1ZWxsIGRpZXNlbiBaVC4KKyAgICAgCisgICAgIERhcyBhdWZydWZlbmRlIFNwaWVsZXJvYmpla3QgbXVzcyBkYWZ1ZXI6CisgICAgICogZGllc2VuIFpUIGltIFBvdGlvbm1hc3RlciBpbiBzZWluZXIgTGlzdGUgZWluZ2V0cmFnZW4gaGFiZW4KKyAgICAgKiBkaWVzZW4gWlQgaW4gZGVyIExpc3RlIGRlciBiZWthbm50ZW4gVHJhZW5rZSBoYWJlbiAoZHVyY2gKKyAgICAgICBPcmFrZWwgYWxzbyBmdWVyIGlobiBhdWNoIGZyZWlnZXNjaGFsdGV0KQorICAgICAqIGRhcmYga2VpbmUgUGxheWVya2lsbHMgaGFiZW4gKFBfS0lMTFMpCisgICAgICogZGFyZiBuaWNodCBpbSBFZGl0aWVybW9kdXMgc2VpbgorICAgICAqIGRhcmYga2VpbiBHZWlzdCBzZWluIChBdXNuYWhtZTogR2Vpc3RlcnNjaGxvc3MpCisKKyAgICAgV2VubiBhbGxlIEtyaXRlcmllbiBlcmZvbGdyZWljaCBlcmZ1ZWxsdCBzaW5kLCB3aXJkICdzJyBvZGVyIAorICAgICAiRHUgZmluZGVzdCBlaW5lbiBaYXViZXJ0cmFuaywgZGVuIER1IHNvZm9ydCB0cmlua3N0LiIgYXVzZ2VnZWJlbgorICAgICB1bmQgZGVtIFNwaWVsZXIgZ2dmIGRpZSBXYWhsIGRlciBBdHRyaWJ1dGUgZ2VnZWJlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMCBiZWkgTmljaHR2ZXJnYWJlLCAxIGJlaSBlcmZvbGdyZWljaGVyIFZlcmdhYmUuCisKK0JFSVNQSUVMRToKKyAgICAgc3RyaW5nIGRldGFpbF9wYXBpZXJlKCkgeworICAgICAgIGlmICh0aGlzX3BsYXllcigpLT5GaW5kUG90aW9uKAorICAgICAgICAgYnJlYWtfc3RyaW5nKCJCZWltIFJ1bXd1ZWhsZW4gaW4gZGVuIFBhcGllcmVuIGVudGRlY2tzdCBEdSBlaW5lbiAiCisgICAgICAgICAgICAgICAgICAgICAgImtsZWluZW4gWmF1YmVydHJhbmssIGRlbiBEdSBzb2ZvcnQgdHJpbmtzdC4iLCA3OCkpKQorICAgICAgICAgcmV0dXJuICIiOyAgCisgICAgICAgICAvLyBFcyBtdXNzIGVpbiBTdHJpbmcgenVydWVja2dlZ2ViZW4gd2VyZGVuLCBkYSBtYW4gc29uc3QKKyAgICAgICAgIC8vIGRpZSBGZWhsZXJtZWxkdW5nICJTb3dhcyBzaWVoc3QgZHUgaGllciBuaWNodC4iIGJla29tbXQKKyAgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gIkRpZSBQYXBpZXJlIHNpbmQgYWxsZSB1bmJlc2NocmlmdGV0LlxuIjsKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBTb25zdGlnZXM6IHphdWJlcnRyYWVua2UsIC9zZWN1cmUvcG90aW9ubWFzdGVyLmMsIC9yb29tL29yYWtlbC5jCisgICAgIFZlcndhbmR0OiAgQWRkS25vd25Qb3Rpb24oKSwgUmVtb3ZlS25vd25Qb3Rpb24oKSwgSW5MaXN0KCkKKyAgICAgUHJvcHM6ICAgICBQX1BPVElPTlJPT01TLCBQX0tOT1dOX1BPVElPTlJPT01TCisgICAgIEJlZmVobDogICAgdHJhZW5rZSAoZnVlciBNYWdpZXIgenVtIEVpbnNjaGFsdGVuIGRlcyBGaW5kZW5zIHZvbiBaVHMpCisKKzYuRmViIDIwMTYgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZpbmRSYW5nZWRUYXJnZXQgYi9kb2MvbGZ1bi9GaW5kUmFuZ2VkVGFyZ2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTcwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9GaW5kUmFuZ2VkVGFyZ2V0CkBAIC0wLDAgKzEsNDAgQEAKK0ZpbmRSYW5nZWRUYXJnZXQoKQorCitGVU5LVElPTjoKKyAgICBzdGF0aWMgc3RyaW5nIEZpbmRSYW5nZWRUYXJnZXQoc3RyaW5nIHN0ciwgbWFwcGluZyBzaG9vdCkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvcmFuZ2VkX3dlYXBvbi5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgc3RyICAgIC0gU2NodXNzc3ludGF4CisgICAgbWFwcGluZyBzaG9vdCAtIFNjaHVzc2RhdGVuCisKK0JFU0NIUkVJQlVORzoKKyAgICBFcmhhZWx0IHZvbiAvc3RkL3JhbmdlZF93ZWFwb246OmNtZF9zaG9vdCgpIGRpZSBTY2h1c3NkYXRlbiB1bmQgZWluZQorICAgIGV2ZW50dWVsbCBiZXJlaXRzIG1vZGlmaXppZXJ0ZSBTeW50YXggdW5kIHZlcnN1Y2h0IGVpbmVuIHBhc3NlbmRlbiBHZWduZXIKKyAgICBpbSBSYXVtIG9kZXIgaW0gR2ViaWV0IChQX1NIT09USU5HX0FSRUEpIHp1IGZpbmRlbi4KKyAgICBEaWVzZXIgd2lyZCBpbiBTSV9FTkVNWSBpbSBNYXBwaW5nICdzaG9vdCcgZWluZ2V0cmFnZW4gdW5kIGVpbiBXZXJ0ICE9IDAKKyAgICB6dXJ1ZWNrZ2VnZWJlbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAwICAgICBiZWkgRmVobHNjaGxhZworICAgICE9IDAgIGJlaSBndWVsdGlnZW0gU0lfRU5FTVkgaW4gJ3Nob290JworCitCRU1FUktVTkdFTjoKKyAgICAnc2hvb3QnIGVudGhhZWx0IG5vcm1hbGVyd2Vpc2UgZm9sZ2VuZGUgRWludHJhZWdlOgorICAgICogS2V5IFBfV0VBUE9OOiAgICAgICBkaWUgU2NodXNzd2FmZmUKKyAgICAqIEtleSBQX1dFQVBPTl9UWVBFOiAgUF9BTU1VTklUSU9OLCBhbHNvIGRpZSBNdW5pdGlvbnMtSUQKKyAgICAqIEtleSBQX1NUUkVUQ0hfVElNRTogUF9TVFJFVENIX1RJTUUgZGVyIFdhZmZlCisgICAgKiBLZXkgUF9XQzogICAgICAgICAgIFBfU0hPT1RJTkdfV0MgZGVyIFdhZmZlCisKK1NJRUhFIEFVQ0g6CisgICAgR2VuZXJlbGw6ICBQX0FNTVVOSVRJT04sIFBfU0hPT1RJTkdfV0MsIFBfU1RSRVRDSF9USU1FCisgICAgTWV0aG9kZW46ICBzaG9vdF9kYW0oTCksIGNtZF9zaG9vdChMKQorICAgIEdlYmlldDogICAgUF9SQU5HRSwgUF9TSE9PVElOR19BUkVBLCBQX1RBUkdFVF9BUkVBCisgICAgVGVhbTogICAgICBQcmVzZW50UG9zaXRpb24oTCkKKyAgICBTdWNoZTogICAgIHByZXNlbnQsIFNlbGVjdEZhckVuZW15KEwpCisgICAgU3ludGF4OiAgICBfdW5wYXJzZWRfYXJncyhMKQorICAgIFNvbnN0aWdlczogZmVybndhZmZlbgorCisyOC5KdWwgMjAxNCBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZsZWUgYi9kb2MvbGZ1bi9GbGVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNjNkODkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9GbGVlCkBAIC0wLDAgKzEsNTcgQEAKK0ZsZWUoKQorCitGVU5LVElPTjoKKyAgICAgICAgcHVibGljIHZhcmFyZ3Mgdm9pZCBGbGVlKCBvYmplY3Qgb2xkZW52LCBpbnQgZm9yY2UgKQorCitERUZJTklFUlQgSU46CisgICAgICAgIC9zeXMvbGl2aW5nL2NvbWJhdC5oCisgICAgICAgIC9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgICAgb2xkZW52CisgICAgICAgICAgRWluIFJhdW0gb2RlciAwLgorICAgICAgICAgIFdpcmQgZWluIFJhdW0gYW5nZWdlYmVuLCBkYW5uIG11c3Mgc2ljaCBkZXIgRmx1ZWNodGVuZGUgaW4gZGllc2VtCisgICAgICAgICAgUmF1bSBiZWZpbmRlbiwgZGFtaXQgZXIgdmVyc3VjaHQsIHp1IGZsdWVjaHRlbiwgZXMgc2VpIGRlbm4sIGRhcworICAgICAgICAgIG9wdGlvbmFsZSBGbGFnICJmb3JjZSIgaXN0IGdlc2V0enQuCisgICAgICAgIGZvcmNlCisgICAgICAgICAgMSwgd2VubiBkZXIgc3BpZWxlciB1bmFiaGFlbmdpZyB2b24gc2VpbmVyIFZvcnNpY2h0IGZsdWVjaHRlbiBzb2xsLgorICAgICAgICAgIDAgc29uc3QuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgRmxlZSgpIHdpcmQgaW0gaGVhcnRfYmVhdCgpIG9kZXIgdm9uIENoZWNrV2ltcHlBbmRGbGVlKCkgYXVmZ2VydWZlbiwKKyAgICAgICAgdW0gZGVuIFNwaWVsZXIgZmx1ZWNodGVuIHp1IGxhc3Nlbi4gTWFuIGthbm4gZGllIEZ1bmt0aW9uIGltIFNwaWVsZXIKKyAgICAgICAgYXVjaCAidm9uIEhhbmQiIGF1ZnJ1ZmVuLCBiZWlzcGllbHN3ZWlzZSBpbiBlaW5lbSBTcGVsbC4gTWFuIHNvbGx0ZQorICAgICAgICBkYW5uIGZvcmNlIGF1ZiAxIHNldHplbiwgZGFtaXQgZGVyIFNwaWVsZXIgdW5hYmhhZW5naWcgdm9uIHNlaW5lcgorICAgICAgICBWb3JzaWNodCBmbHVlY2h0ZXQuCisgICAgICAgIEhpZXJiZWkga2FubiBkaWUgRmx1Y2h0IGRhenUgZnVlaHJlbiwgZGFzcyBtYW4gZGllIFRlYW1yZWloZSB3ZWNoc2VsdCwKKyAgICAgICAgYWJlciBhdWNoLCBkYXNzIG1hbiBkZW4gUmF1bSB2ZXJsYWVzc3QuCisgICAgICAgIAorUlVlQ0tHQUJFV0VSVDoKKyAgICAgICAga2VpbmVyCisKK0JFTUVSS1VOR0VOOgorCitCRUlTUElFTEU6CisgICAgICAgIHRoaXNfcGxheWVyKCktPkZsZWUoMCwgMSk7CisgICAgICAgIC8vIERlciBTcGllbGVyIHNvbGwgZmx1ZWNodGVuLCBlZ2FsLCBvYiBzZWluZSBMZWJlbnNwdW5rdGUgZ2VyaW5nZXIKKyAgICAgICAgLy8gYWxzIHNlaW5lIFZvcnNpY2h0IHNpbmQgdW5kIHVuYWJoYWVuZ2lnIHZvbiBzZWluZXIgUG9zaXRpb24uCisgICAgICAgIAorICAgICAgICB0aGlzX3BsYXllcigpLT5GbGVlKCBmaW5kX29iamVjdCgiL2dpbGRlbi9hYmVudGV1cmVyIikgKTsKKyAgICAgICAgLy8gRGVyIFNwaWVsZXIgc29sbCBmbHVlY2h0ZW4sIHdlbm4gZXIgc2ljaCBpbiBkZXIgQWJlbnRldXJlcmdpbGRlCisgICAgICAgIC8vIGJlZmluZGV0IChvZGVyIHdlbm4gZGllc2UgbmljaHQgZXhpc3RpZXJ0KQorICAgICAgICAKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+RmxlZSggIi9naWxkZW4vYWJlbnRldXJlciIgKTsKKyAgICAgICAgLy8gRGVyIFNwaWVsZXIgd2lyZCBuaWNodCBmbHVlY2h0ZW4sIGRhIGRlciBWZXJnbGVpY2ggdm9uIERhdGVpbmFtZQorICAgICAgICAvLyB1bmQgZGVtIFJhdW0gMCBlcmdpYnQuCisKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+RmxlZSggZmluZF9vYmplY3QoIi9naWxkZW4vYWJlbnRldXJlciIpLCAxKTsKKyAgICAgICAgLy8gRGVyIFNwaWVsZXIgc29sbCBhdWYgamVkZW4gRmFsbCBmbHVlY2h0ZW4sIGVnYWwgb2IgZXIgc2ljaCBpbiBkZXIKKyAgICAgICAgLy8gQWJlbnRldXJlcmdpbGRlIGJlZmluZGV0IG9kZXIgbmljaHQuIEdydW5kOiBHZXNldHp0ZXMgZm9yY2UtRmxhZy4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAKK1NJRUhFIEFVQ0g6CisgICAgICAgIENoZWNrV2ltcHlBbmRGbGVlKCksIERlZmVuZCgpLCBoZWFydF9iZWF0KCksIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTm92IDEyIDE0OjQ0OjQyIDIwMDMgYnkgQmFtYmkKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0ZyZWVIYW5kcyBiL2RvYy9sZnVuL0ZyZWVIYW5kcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmVkOWIwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vRnJlZUhhbmRzCkBAIC0wLDAgKzEsMzYgQEAKK0ZyZWVIYW5kcworRlVOS1RJT046CisgICAgIHB1YmxpYyB2YXJhcmdzIGludCBGcmVlSGFuZHMob2JqZWN0IG9iKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgb2IgLSBkYXMgT2JqZWt0LCBkZXNzZW4gSGFuZG51dHp1bmcgdm9yYmVpIGlzdAorICAgICAgICAtIGthbm4gMCBzZWluLCBkYW5uIHdpcmQgUE8gYmVudXR6dAorCitSVUVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIGtlaW4gT2JqZWt0IHVlYmVyZ2ViZW4gd3VyZGUgb2RlciBrZWluIFBPIGV4aXN0aWVydAorICAgICAxLCBzb25zdAorCitCRVNDSFJFSUJVTkc6CisgICAgIEJlZnJlaXQgZGllIEhhZW5kZSBlaW5lcyBMaXZpbmdzIHZvbiBlaW4gYmVzdGltbXRlbiBPYmpla3QuCisgICAgIEVzIHdlcmRlbiBfYWxsZV8gSGFlbmRlIHdpZWRlciBmcmVpZ2VnZWJlbi4KKworQkVJU1BJRUxFOgorICAgICA+IGhhbHRlIHNlaWwgZmVzdAorICAgICAuLi4KKyAgICAgdGhpc19wbGF5ZXIoKS0+VXNlSGFuZHModGhpc19vYmplY3QoKSwyKTsKKyAgICAgLi4uCisKKyAgICAgPiBsYXNzZSBzZWlsIGxvcworICAgICAuLi4KKyAgICAgdGhpc19wbGF5ZXIoKS0+RnJlZUhhbmRzKHRoaXNfb2JqZWN0KCkpOworICAgICAuLi4KKworU0lFSEUgQVVDSDoKKyAgICAgUF9IQU5EUywgUF9IQU5EU19VU0VEX0JZCisgICAgIFBfTUFYX0hBTkRTLCBQX1VTRURfSEFORFMsIFBfRlJFRV9IQU5EUworICAgICBVc2VIYW5kcworCisxLkZlYi4yMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXRBcXVhcml1bSBiL2RvYy9sZnVuL0dldEFxdWFyaXVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYThkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9HZXRBcXVhcml1bQpAQCAtMCwwICsxLDM3IEBACitHZXRBcXVhcml1bSgpCisKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIHB1YmxpYyBzdHJpbmcqIEdldEFxdWFyaXVtKG9iamVjdCBhbmdlbCkKKworQVJHVU1FTlRFOgorICAgICBEYXMgb3B0aW9uYWxlIEFyZ3VtZW50IDxhbmdlbD4gaXN0IGRpZSBBbmdlbCBzZWxic3QuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllIEZ1bmt0aW9uIHdpcmQgYmVpbSBBbmdlbG4gaW4gUmFldW1lbiBnZXJ1ZmVuLCB3ZW5uIGRpZXNlIGFscyAKKyAgICAgR2V3YWVzc2VydHlwIFdfVVNFUiBnZXNldHp0IGhhYmVuIChzaWVoZSBNYW5wYWdlIHp1IFBfV0FURVIpLgorICAgICBBdXMgZGVyIHp1cnVlY2tnZWdlYmVuZW4gTGlzdGUgZGVyIFBmYWRlIHdpcmQgZWluZXIgenVmYWVsbGlnIGF1cy0KKyAgICAgZ2V3YWVobHQgdW5kIGRhcyBPYmpla3QgZ2VjbG9udC4gCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgIFN0cmluZy1BcnJheSBtaXQgUGZhZG5hbWVuIHp1IGRlbiBpbiBkaWVzZW0gUmF1bSBmYW5nYmFyZW4gRmlzY2hlbi4KKworQkVNRVJLVU5HOgorICAgICBNYW4ga2FubiBkaWUgRmFuZ2NoYW5jZW4gZHVyY2ggTWVocmZhY2huZW5udW5nIGVpbnplbG5lciBFaW50cmFlZ2UgCisgICAgIG1vZGlmaXppZXJlbi4gRXMgbXVzcyBzaWNoIGJlaSBkZW4gRWludHJhZWdlbiB1bSBsYWQtIHVuZCBjbG9uZWJhcmUKKyAgICAgT2JqZWt0ZSBoYW5kZWxuLgorICAgICBGdWVyIHNlbGJzdHByb2dyYW1taWVydGUgRmlzY2hlIGlzdCBkYXMgQmFzaXNvYmpla3QgCisgICAgIC9zdGQvaXRlbXMvZmlzaGluZy9maXNoIHp1IHZlcndlbmRlbi4gRWluaWdlIHZvcmdlZmVydGlndGUgRmlzY2hlIAorICAgICBmaW5kZW4gc2ljaCBkYXJ1ZWJlciBoaW5hdXMgaW4gL2l0ZW1zL2Zpc2hpbmcvYXF1YXJpdW0vCisKK0JFSVNQSUVMOgorICAgICB2YXJhcmdzIHN0cmluZyogR2V0QXF1YXJpdW0ob2JqZWN0IGFuZ2VsKSB7CisgICAgICAgcmV0dXJuICh7Ii9kL2RzY2h1bmdlbC9yaWt1cy9xNGUvb2JqL3N0aWNobGluZyIsCisgICAgICAgICAgICAgICAgIi9kL2RzY2h1bmdlbC9yaWt1cy9xNGUvb2JqL2thcnBmZW4iLAorICAgICAgICAgICAgICAgICIvcC9zZWhlci9wYXJ0eW1vbnN0ZXIvb2JqL2Zpc2NoIn0pOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgUHJvcGVydGllczogUF9XQVRFUiwgUF9GSVNICisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit6dWxldHp0IGdlYWVuZGVydDogMjAxNC1TZXAtMDIsIEFyYXRob3JuCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXREZXRhaWwgYi9kb2MvbGZ1bi9HZXREZXRhaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkNzMwMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dldERldGFpbApAQCAtMCwwICsxLDY3IEBACitHZXREZXRhaWwoKQorCitGVU5LVElPTjoKKyAgICB2YXJhcmdzIHN0cmluZyBHZXREZXRhaWwoc3RyaW5nIGtleSwgc3RyaW5nIHJhY2UsIGludCBzZW5zZSkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAga2V5CisgICAgICBEYXMgenUgZXJtaXR0ZWxuZGUgRGV0YWlsLgorICAgIHJhY2UKKyAgICAgIFJhc3NlIGRlcyBlcm1pdHRlbG5kZW4gT2JqZWt0ZXMgKGZhbGxzIGVzIGVpbiBMZWJld2VzZW4gaXN0KS4KKyAgICBzZW5zZQorICAgICAgRGllIEFydCBkZXMgenUgdW50ZXJzdWNoZW5kZW4gRGV0YWlsczoKKyAgICAgICAgVW50ZXJzdWNoZW4sIFJpZWNoZW4sIEhvZXJlbiwgVGFzdGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllIEJlc2NocmVpYnVuZyBkZXMgZ2V3dWVuc2NodGVuIERldGFpbHMgd2lyZCBlcm1pdHRlbHQuIERhYmVpCisgICAgd2VyZGVuIHJhc3NlbnNwZXppZmlzY2hlIERldGFpbHMgYmVydWVja3NpY2h0aWd0LiBFcyBnaWJ0IGhpZXJiZWkKKyAgICB2ZXJzY2hpZWRlbmUgRGV0YWlsYXJ0ZW4sIGRlcmVuIFR5cCBtYW4gaW4gPHNlbnNlPiBhbmdpYnQ6CisgICAgICBTRU5TRV9WSUVXICAgIC0gRnVlciBEZWZhdWx0ZGV0YWlscyB6dW0gVW50ZXJzdWNoZW4uCisgICAgICBTRU5TRV9TTUVMTCAgIC0gRnVlciBEZXRhaWxzLCBkaWUgbWFuIHJpZWNoZW4ga2Fubi4KKyAgICAgIFNFTlNFX1NPVU5EICAgLSBGdWVyIERldGFpbHMsIGRpZSBtYW4gaG9lcmVuIGthbm4uCisgICAgICBTRU5TRV9UT1VDSCAgIC0gRnVlciBEZXRhaWxzLCBkaWUgbWFuIGFidGFzdGVuIGthbm4uCisgICAgICBTRU5TRV9SRUFEICAgIC0gRnVlciBEZXRhaWxzLCBkaWUgbWFuIGxlc2VuIGthbm4uCisKKyAgICBEYWJlaSBpc3QgMCA9PSBTRU5TRV9WSUVXLgorCitSVWVDS0dBQkVXRVJUOgorICAgIERpZSBCZXNjaHJlaWJ1bmcgZGVzIERldGFpbHMgb2RlciAwLCB3ZW5uIGVzIGRpZXNlcyBEZXRhaWwgbmljaHQKKyAgICBnaWJ0LgorCitCRUlTUElFTDoKKyAgICBJbSBmb2xnZW5kZW4gd2lyZCBlaW4ga2xlaW5lcyBUZXN0ZGV0YWlsIGdlbmVyaWVydDoKKyAgICAgIEFkZERldGFpbCgidGVzdCIsIkRhcyBpc3QgZWluIFRlc3QhXG4iKTsKKyAgICBJbSBmb2xnZW5kZW4gd2lyZCBkYXMgRGV0YWlsIGVudGZlcm50LCB3ZW5uIGVzIGV4aXN0aWVydC4gRGllcyBpc3QKKyAgICBlaWdlbnRsaWNoIG5pY2h0IG5vZXRpZywgZGEgUmVtb3ZlRGV0YWlsKCkgZGFtaXQgenVyZWNodGtvbW10LCBhYmVyCisgICAgZXZlbnR1ZWxsIHNpbmQgamEgbm9jaCB3ZWl0ZXJlIEFrdGlvbmVuIG5vZXRpZy4KKyAgICAgIGlmKEdldERldGFpbCgidGVzdCIpKQorICAgICAgeyBSZW1vdmVEZXRhaWwoInRlc3QiKTsKKyAgICAgICAgLi4uCisgICAgICB9CisgICAgRWluIEdlcnVjaCBrYW5uIG1hbiBmb2xnZW5kZXJtYXNzZW4gZXJ6ZXVnZW46CisgICAgICBBZGRTbWVsbHMoImdvbGQiLAorICAgICAgICAoWzAgICAgICA6IkdvbGQga2FubiBtYW4gbmljaHQgcmllY2hlbiFcbiIsCisgICAgICAgICAgInp3ZXJnIjoiRGVpbmUgdHJhaW5pZXJ0ZSBOYXNlIHJpZWNodCBlcyBtdWVoZWxvcyFcbiJdKSk7CisgICAgRGllIEFiZnJhZ2UgZGVzIERldGFpbHMgZ2VzdGFsdGV0IHNpY2ggcmVjaHQgZWluZmFjaDoKKyAgICAgIEdldERldGFpbCgiZ29sZCIsInp3ZXJnIixTRU5TRV9TTUVMTCk7CisgICAgRGllIEZ1bmt0aW9uIGxpZWZlcnQgZGFzIERldGFpbCBmdWVyIGRlbiBad2VyZy4KKyAgICAgIEdldERldGFpbCgiZ29sZCIsMCxTRU5TRV9TTUVMTCk7CisgICAgRGllIEZ1bmt0aW9uIGxpZWZlcnQgZGFzIERldGFpbCBmdWVyIGRpZSByZXN0bGljaGVuIFJhc3Nlbi4KKyAgICAgIEdldERldGFpbCgiZ29sZCIsMCxTRU5TRV9TT1VORCk7CisgICAgRWluIFNvdW5kZGV0YWlsIG1pdCBkZW0gTmFtZW4gImdvbGQiIGV4aXN0aWVydCBuaWNodCwgZGllIEZ1bmt0aW9uCisgICAgbGllZmVydCAwIHp1cnVlY2suCisKK1NJRUhFIEFVQ0g6CisgICAgU2V0emVuOiAgICBBZGREZXRhaWwoKSwgQWRkUmVhZERldGFpbCgpLCBBZGRTbWVsbHMoKSwgQWRkU291bmRzKCksCisgICAgICAgICAgICAgICBBZGRUb3VjaERldGFpbCgpCisgICAgTG9lc2NoZW46ICBSZW1vdmVSZWFkRGV0YWlsKCksIFJlbW92ZVNtZWxscygpLCBSZW1vdmVEZXRhaWwoKSwKKyAgICAgICAgICAgICAgIFJlbW92ZVNvdW5kcygpLCBSZW1vdmVUb3VjaERldGFpbCgpCisgICAgRGF0ZW46ICAgICBQX0RFVEFJTFMsIFBfUkVBRF9ERVRBSUxTLCBQX1NNRUxMUywgUF9TT1VORFMsCisgICAgICAgICAgICAgICBQX1RPVUNIX0RFVEFJTFMsIFBfU1BFQ0lBTF9ERVRBSUxTCisgICAgVmVyYWx0ZXQ6ICBBZGRTcGVjaWFsRGV0YWlsKCksIFJlbW92ZVNwZWNpYWxEZXRhaWwoKSwgUF9SRUFEX01TRworICAgIFNvbnN0aWdlczogYnJlYWtfc3RyaW5nKCkKKworMjcuIEphbiAyMDEzIEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXREb29yc01hcHBpbmcgYi9kb2MvbGZ1bi9HZXREb29yc01hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM2OGE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dldERvb3JzTWFwcGluZwpAQCAtMCwwICsxLDI0IEBACitHZXREb29yc01hcHBpbmcoKQorCitGVU5LVElPTjoKKyAgICBtYXBwaW5nIEdldERvb3JzTWFwcGluZygpCisKK0JFU0NIUkVJQlVORzoKKyAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIGVyaGFlbHQgbWFuIGRhcyBNYXBwaW5nIGRlciB2b3JoYW5kZW5lbgorICAgIFNlaGVycG9ydGFsZS4KKyAgICAKKyAgICBEaWUgU3RydWt0dXIgaXN0IHZvbiBkZXIgRm9ybTogCisJKFsgUGZhZDogUG9ydGFsbnVtbWVyOyBQb3J0YWxiZXNjaHJlaWJ1bmcsIF0pCisgICAgRXMgd2lyZCBlaW5lIEtvcGllIGRpZXNlcyBNYXBwaW5ncyBnZWxpZWZlcnQuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgRGFzIFNlaGVydG9ybWFwcGluZworCitCRU1FUktVTkdFTjoKKyAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIHZvbiAvZC9zZWhlci9wb3J0YWxlL3NlaGVydG9ybWFzdGVyIGRlZmluaWVydC4KKworQkVJU1BJRUxFOgorICAgICIvZC9zZWhlci9wb3J0YWxlL3NlaGVydG9ybWFzdGVyIi0+R2V0RG9vcnNNYXBwaW5nKCk7CisKK1NJRUhFIEFVQ0g6CisgICAgRG9vcklzS25vd24sIFNob3dEb29ycywgVGVsZXBvcnQsIERpc2NvdmVyRG9vcgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vR2V0RW5lbWllcyBiL2RvYy9sZnVuL0dldEVuZW1pZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0ZDBiZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dldEVuZW1pZXMKQEAgLTAsMCArMSwzNCBAQAorR2V0RW5lbWllcygpCisKK0ZVTktUSU9OOgorCW1hcHBpbmcgR2V0RW5lbWllcygpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9saXZpbmcvY29tYmF0LmMKKworQVJHVU1FTlRFOgorCWtlaW5lCisKK1JVZUNLR0FCRVdFUlQ6CisJTWFwcGluZyBtaXQgYmVrYW5udGVuIEdlZ25lcm4gYWxzIFNjaGx1ZXNzZWwgdW5kIFplaXRlbiBhbHMKKwlFaW50cmFlZ2VuLgorCitCRVNDSFJFSUJVTkc6CisJRGllc2UgRnVua3Rpb24gbGllZmVydCBkYXMgaW50ZXJuZSBNYXBwaW5nIHp1cnVlY2ssIGluIGRlbSBhbGxlCisJR2VnbmVyIGFiZ2VzcGVpY2hlcnQgc2luZC4gRGllc2UgR2VnbmVyIHN0ZWxsZW4gZGllIFNjaGx1ZXNzZWwgaW4KKwlkZW0gTWFwcGluZyBkYXIuIEFscyBFaW50cmFlZ2Ugc2luZCBkaWUgWmVpdGVuIHZlcm1lcmt0LCBuYWNoCisJd2VsY2hlciBaZWl0IGVpbiBHZWduZXIgYXV0b21hdGlzY2ggd2llZGVyIHZlcmdlc3NlbiB3ZXJkZW4gc29sbC4KKwlNZWhyIEluZm9ybWF0aW9uZW4gZGF6dSBzaW5kIGluIGRlciBEb2t1bWVudGF0aW9uIHp1ciBhZWhubGljaAorCWdlYXJ0ZXRlbiBGdW5rdGlvbiBRdWVyeUVuZW1pZXMoKSB6dSBmaW5kZW4sIGRpZSBqZWRvY2ggendlaSBBcnJheXMKKwlnZXRyZW5udGUgenVydWVja2xpZWZlcnQuCisJQWNodHVuZzogRXMgd2lyZCBrZWluZSBLb3BpZSBkZXMgTWFwcGluZ3MgZXJzdGVsbHQuIFNhZW10bGljaGUKKwlWZXJhZW5kZXJ1bmdlbiBpbiBkZW0gTWFwcGluZyB3aXJrZW4gc2ljaCB1bm1pdHRlbGJhciBhdWYgZGllCisJaW50ZXJuZSBHZWduZXJsaXN0ZSBhdXMuIERpZSBGdW5rdGlvbiBzb2xsdGUgZGVzaGFsYiBuaWNodCBnZW51dHp0CisJd2VyZGVuLiBHZWduZXIgZWluLSB1bmQgYXVzdHJhZ2VuIHNvbGx0ZSBtYW4gbnVyIG1pdHRlbHMKKwlJbnNlcnRFbmVteSgpIHVuZCBTdG9wSHVudEZvcigpLgorCitTSUVIRSBBVUNIOgorCVF1ZXJ5RW5lbWllcygpLCBTZXRFbmVtaWVzKCksIEluc2VydEVuZW15KCksIFN0b3BIdW50Rm9yKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSAyNiAxNjo0Nzo1MSAxOTk5IGJ5IFBhdHJ5bgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vR2V0RXhpdHMgYi9kb2MvbGZ1bi9HZXRFeGl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmYwMDRlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vR2V0RXhpdHMKQEAgLTAsMCArMSwyMyBAQAorR2V0RXhpdHMoKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBzdHJpbmcgR2V0RXhpdHMob2JqZWN0IHZpZXdlcik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9yb29tL2V4aXRzCisKK0FSR1VNRU5URToKKyAgICAgdmlld2VyCisgICAgICAgICAgRGVyamVuaWdlLCBkZXIgc2ljaCBkaWUgQXVzZ2FlbmdlIGFuc2NoYXV0LgorCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdpcmQgZWluZSBMaXN0ZSBkZXIgZnVlciB2aWV3ZXIgc2ljaHRiYXJlbiBBdXNnYWVuZ2UgZXJzdGVsbHQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIFN0cmluZyBtaXQgZGVyIExpc3RlIGRlciBzaWNodGJhcmVuIEF1c2dhZW5nZS4KKworU0lFSEUgQVVDSDoKKyAgICAgQWRkRXhpdCgpLCBBZGRTcGVjaWFsRXhpdCgpLCAvc3RkL3Jvb20vZXhpdHMuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDggMTA6MTg6NDcgMTk5NiBieSBXYXJnb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0dldEZWYWx1ZSBiL2RvYy9sZnVuL0dldEZWYWx1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzE3MjI0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vR2V0RlZhbHVlCkBAIC0wLDAgKzEsMzcgQEAKK0ZVTktUSU9OOgorCisJdmFyYXJncyBpbnQgR2V0RlZhbHVlKHN0cmluZyB2bmFtZSwgbWFwcGluZyBtYXAsIG9iamVjdCBwbCkgCisKKworQVJHVU1FTlRFOgorCisJdm5hbWUJOiBuYW1lIGRlcyBwYXJhbWV0ZXJzIGF1cyBkZW0gc3BlbGxtYXBwaW5nCisJbWFwICAgCTogc3BlbGxtYXBwaW5nCisJcGwgCTogY2FzdGVyCisKKworQkVTQ0hSRUlCVU5HOgorCisJQmVyZWNobmV0IGRlbiBXZXJ0IHVuZCBkZW4gRmFjdG9yIGRlcyBQYXJhbWV0ZXJzIGluIHNwZWxsbWFwcGluZy4KKworCitSVUVDS0dBQkVXRVJUOgorCisJQmVyZWNobmV0ZXIgV2VydCpGYWN0b3IgYXVzIGRlbSBTcGVsbG1hcHBpbmcuCisKKworQkVNRVJLVU5HRU46CisKKwlSdWZ0IEdldFZhbHVlKHZuYW1lLG1hcCxwbCkqR2V0RmFjdG9yKHZuYW1lLG1hcCxwbCkvMTAwIGF1Zi4KKworCitCRUlTUElFTDoKKworCXh4eD1HZXRGVmFsdWUoU0lfU0tJTExEQU1BR0Usc2luZm8sY2FzdGVyKTsKKworU2llaGUgYXVjaDoKKworCSJHZXRWYWx1ZSIsICJHZXRGYWN0b3IiLCAiR2V0T2Zmc2V0IiwgIkdldFZhbHVlTyIsICJHZXRGVmFsdWVPIgorCisJQXVzZnVlaHJsaWNoZXMgQmVpc3BpZWwgc2llaGUgIkdldEZWYWx1ZU8iLgorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXRGVmFsdWVPIGIvZG9jL2xmdW4vR2V0RlZhbHVlTwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTU0ZTRiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vR2V0RlZhbHVlTwpAQCAtMCwwICsxLDc0IEBACitGVU5LVElPTjoKKworCXZhcmFyZ3MgaW50IEdldEZWYWx1ZU8oc3RyaW5nIHZuYW1lLCBtYXBwaW5nIG1hcCwgb2JqZWN0IHBsKSAKKworCitBUkdVTUVOVEU6CisKKwl2bmFtZQk6IG5hbWUgZGVzIHBhcmFtZXRlcnMgYXVzIGRlbSBzcGVsbG1hcHBpbmcKKwltYXAgICAJOiBzcGVsbG1hcHBpbmcKKwlwbCAJOiBjYXN0ZXIKKworCitCRVNDSFJFSUJVTkc6CisKKwknQmVyZWNobmV0JyBkZW4gV2VydCwgZGVuIEZhY3RvciB1bmQgZGVuIE9mZnNldCBkZXMgUGFyYW1ldGVycyAKKwlpbiBzcGVsbG1hcHBpbmcuCisKKworUlVFQ0tHQUJFV0VSVDoKKworCUJlcmVjaG5ldGVyIChXZXJ0KkZhY3RvcikvMTAwK09mZnNldCBhdXMgZGVtIFNwZWxsbWFwcGluZy4KKworCitCRU1FUktVTkdFTjoKKworCVJ1ZnQgKEdldFZhbHVlKHZuYW1lLG1hcCxwbCkqR2V0RmFjdG9yKHZuYW1lLG1hcCxwbCkpLzEwMCsKKwlHZXRPZmZzZXQodm5hbWUsbWFwLHBsKSBhdWYuCisKKworQkVJU1BJRUw6CisKKwlBZGRTcGVsbCgiZWdhbCIsMTAsCisJKFsKKwlPRkZTRVQoU0lfQ09TVCk6KFtTTV9SQUNFOihbIlp3ZXJnIjo0XSkgXSksCisJRkFDVE9SKFNJX0NPU1QpOihbU01fUkFDRTooWyJNZW5zY2giOjkwXSkgXSksCisJU0lfU0tJTExEQU1BR0U6MTAwLAorCU9GRlNFVChTSV9TS0lMTERBTUFHRSk6MjUsCisJU0lfU0tJTExEQU1BR0VfVFlQRTpEVF9FWEFNUExFLAorCUZBQ1RPUihTSV9TS0lMTERBTUFHRSk6KFtTTV9SQUNFOihbIlp3ZXJnIjo4MCwiRWxmIjoxMjBdKSBdKSAKKwldKSk7CisKKwlTbywgd2FzIHNvbGxlbiB1bnMgZGllc2UgWmVpbGVuIHNhZ2VuPworCisJRXMgd2lyZCBlaW4gU3BydWNoIE5hbWVzICdlZ2FsJyBpbnMgU3BlbGxib29rIGVpbmdldHJhZ2VuLiBFciBrb3N0ZXQKKwlyZWd1bGFlciAxMCBNUC4gRnVlciBad2VyZ2UgYWxsZXJkaW5ncyB3aXJkIGVpbiBPZmZzZXQgdm9uIDQgTVAgCisJYXVmZ2VzY2hsYWdlbi4gQXVzc2VyZGVtIG1hY2hlbiBad2VyZ2UgbnVyIDgwJSBTY2hhZGVuLCBFbGZlbiAKKwloaW5nZWdlbiAxMjAlLiBEZXIgR3J1bmRzY2hhZGVuIGJldHJhZWd0IDEwMCBTY2hhZGVuc3B1bmt0ZSwgZGVyIAorCU9mZnNldCBkZXMgU2NoYWRlbnMgbm9jaG1hbCAyNS4gTWVuc2NoZW4gYmV6YWhsZW4gZnVlciBkaWVzZW4gCisJU3BydWNoIG51ciA5MCUgZGVyIEtvc3Rlbi4KKworCU51biBkaWUgUmVjaGVuYmVpc3BpZWxlOgorCisJRnVlciBkaWUgS29zdGVuOgorCQlWYWx1ZQlWYWx1ZU8JRlZhbHVlCUZWYWx1ZU8KKwlNZW5zY2gJICAgMTAJICAgIDEwCSAgICAgOQkgICAgICA5CisJRWxmICAgCSAgIDEwCSAgICAxMAkgICAgMTAgICAgICAgMTAKKwlIb2JiaXQJICAgMTAJICAgIDEwCSAgICAxMAkgICAgIDEwCisJWndlcmcJICAgMTAJICAgIDE0CSAgICAxMAkgICAgIDE0CisKKwlGdWVyIGRlbiBTY2hhZGVuOgorCQkJVmFsdWUJVmFsdWVPCUZWYWx1ZQlGVmFsdWVPCisJTWVuc2NoCQkxMDAJMTI1CTEwMAkxMjUKKwlFbGYgIAkJMTAwCTEyNQkxMjAJMTUwCisJSG9iYml0CQkxMDAJMTI1CTEwMAkxMjUKKwlad2VyZwkJMTAwCTEyNQkgODAJMTAwCisKKwlBbiBkaWVzZW0gQmVpc3BpZWwgc2llaHQgbWFuIGRldXRsaWNoLCB3aWUgbWFuIG1pdCBlaW4gcGFhciAKKwlPZmZzZXRzIHVuZCBGYWt0b3JlbiBkaWUgV2lya3VuZyBlaW5lcyBTcHJ1Y2hlcyBkZXV0bGljaCAKKwl2ZXJhZW5kZXJuIGthbm4uIEVzIHNvbGx0ZSBiZWkgZWlnZW5lbiBCZXJlY2hudW5nZW4gaW1tZXIgCisJR2V0RlZhbHVlTyBiZW51dHp0IHdlcmRlbi4KKworU2llaGUgYXVjaDoKKworCSJHZXRWYWx1ZSIsICJHZXRGYWN0b3IiLCAiR2V0T2Zmc2V0IiwgIkdldEZWYWx1ZSIsICJHZXRWYWx1ZU8iCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXRGYWN0b3IgYi9kb2MvbGZ1bi9HZXRGYWN0b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4MTJkZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dldEZhY3RvcgpAQCAtMCwwICsxLDM3IEBACitGVU5LVElPTjoKKworCXZhcmFyZ3MgaW50IEdldEZhY3RvcihzdHJpbmcgdm5hbWUsIG1hcHBpbmcgbWFwLCBvYmplY3QgcGwpIAorCisKK0FSR1VNRU5URToKKworCXZuYW1lCTogbmFtZSBkZXMgcGFyYW1ldGVycyBhdXMgZGVtIHNwZWxsbWFwcGluZworCW1hcCAgIAk6IHNwZWxsbWFwcGluZworCXBsIAk6IGNhc3RlcgorCisKK0JFU0NIUkVJQlVORzoKKworCSdCZXJlY2huZXQnIGRlbiBGYWN0b3IgZGVzIFBhcmFtZXRlcnMgaW4gc3BlbGxtYXBwaW5nLgorCisKK1JVRUNLR0FCRVdFUlQ6CisKKwlCZXJlY2huZXRlciBGYWN0b3IgYXVzIGRlbSBTcGVsbG1hcHBpbmcuCisKKworQkVNRVJLVU5HRU46CisKKwlCZXNjaHJhZWt1bmcgYXVmIDEwLTEwMDAuIFdlcnRlIGdyb2Vzc2VyIG9kZXIga2xlaW5lciBhbHMgZGllc2UKKwl3ZXJkZW4gJ2FiZ2VzY2huaXR0ZW4nLgorCisKK0JFSVNQSUVMOgorCisJeHh4PUdldEZhY3RvcihTSV9TS0lMTERBTUFHRSxzaW5mbyxjYXN0ZXIpOworCitTaWVoZSBhdWNoOgorCisJIkdldFZhbHVlIiwgIkdldE9mZnNldCIsICJHZXRGVmFsdWUiLCAiR2V0VmFsdWVPIiwgIkdldEZWYWx1ZU8iCisKKwlBdXNmdWVocmxpY2hlcyBCZWlzcGllbCBzaWVoZSAiR2V0RlZhbHVlTyIuCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXRHcm91cE1lbWJlcnMgYi9kb2MvbGZ1bi9HZXRHcm91cE1lbWJlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3MGFhMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dldEdyb3VwTWVtYmVycwpAQCAtMCwwICsxLDM2IEBACitHZXRHcm91cE1lbWJlcnMoKQorRlVOS1RJT046CisgICAgIHN0cmluZyAqR2V0R3JvdXBNZW1iZXJzKHN0cmluZyBncnApCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3AvZGFlbW9uL21hdGVyaWFsZGIuYyAoTUFURVJJQUxEQikKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcgZ3JwIC0gR3J1cHBlbm5hbWUKKworQkVTQ0hSRUlCVU5HOgorICAgICBHaWJ0IGFsbGUgZGllc2VyIEdydXBwZSB6dWdlaG9lcmlnZW4gTWF0ZXJpYWxpZW4genVydWVjay4gRGF6dSBndXQsIHNpY2gKKyAgICAgZWluZW4gVWViZXJibGljayB1ZWJlciBkaWUgYWt0dWVsbGUgTGlzdGUgenUgdmVyc2NoYWZmZW4uCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgIEFycmF5IHZvbiBTdHJpbmdzIG1pdCBNYXRlcmlhbGllbiBvZGVyICh7fSkKKworQkVJU1BJRUxFOgorICAgICAvLyB3aXIgd29sbGVuIGlyZ2VuZCBlaW4gTWV0YWxsIGhhYmVuLCBuZW5uZW4gZGllcyBhYmVyIGJlaW0gTmFtZW4KKyAgICAgaW50IGluZDsKKyAgICAgc3RyaW5nKiBsaWtlaXQ7CisgICAgIGxpa2VpdD1NQVRFUklBTERCLT5HZXRHcm91cE1lbWJlcnMoTUFUR1JPVVBfTUVUQUwpOworICAgICBpbmQ9cmFuZG9tKHNpemVvZihsaWtlaXQpKTsKKyAgICAgLi4uCisgICAgIHdyaXRlKCJEZXIgU2NobWllZCBzYWd0OiBNaXIgZmVobHQgbm9jaCAiKworCSAgIE1BVEVSSUFMREItPk1hdGVyaWFsTmFtZShsaWtlaXRbaW5kXSwgV0VSLCAxMDApKyIuXG4iKTsKKyAgICAgLi4uCisKK1NJRUhFIEFVQ0g6CisgICAgIEtvbnplcHRlOgkgIG1hdGVyaWFsLCBtYXRlcmlhbGVya2VubnVuZworICAgICBHcnVuZGxlZ2VuZDogUF9NQVRFUklBTCwgL3N5cy90aGluZy9tYXRlcmlhbC5oCisgICAgIE1hc3RlcjoJICBBZGRNYXRlcmlhbCgpLCBDb252TWF0ZXJpYWxMaXN0KCksIE1hdGVyaWFsR3JvdXAoKSwKKwkJICBHcm91cE5hbWUoKSwgTWF0ZXJpYWxOYW1lKCksCisJCSAgR2V0TWF0TWVtYmVyc2hpcCgpCisKKzcuIE1haSAyMDA0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vR2V0SW5mb0FyciBiL2RvYy9sZnVuL0dldEluZm9BcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlMjUxYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dldEluZm9BcnIKQEAgLTAsMCArMSwzMSBAQAorR2V0SW5mb0FycigpCitGVU5LVElPTjoKKyAgICAgc3RhdGljIG1peGVkICpHZXRJbmZvQXJyKHN0cmluZyBzdHIpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9ucGMvaW5mby5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nIHN0cgkgLSBTY2hsdWVzc2Vsd29ydCBkZXIgRnJhZ2UKKworQkVTQ0hSRUlCVU5HOgorICAgICBTdWNodCBuYWNoIGVpbmVtIFNjaGx1ZXNzZWx3b3J0IGluIGRlbiBhYmdlbGVndGVuIEFudHdvcnRlbgorICAgICB1bmQgZ2lidCBkaWUgSW5mb3JtYXRpb25lbiBvZGVyIGVpbmVuIDBlci1BcnJheSB6dXL8Y2suCisKK0JFTUVSS1VOR0VOOgorICAgICBVZWJlcnNjaHJlaWJiYXIgOikKKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgU2llaGUgUGFyYW1ldGVyIHZvbiBBZGRJbmZvOgorCisgICAgIEFycmF5IG1pdDoKKyAgICAgKHsgPEluZm9zdHJpbmc+ICgwIGZ1ZXIga2VpbmUgQW50d29ydCksCisgICAgICAgIDxJbmRlbnQtU3RyaW5nPiAoRGVmYXVsdDogMCksCisgICAgICAgIDxTaWxlbnQ+IChEZWZhdWx0OiAwKSwKKyAgICAgICAgPENhc2ViYXNlZD4gKERlZmF1bHQ6IDApCisgICAgIH0pCisKK1NJRUhFIEFVQ0g6CisgICAgIFZlcndhbmR0OiBBZGRJbmZvLCBkb19mcmFnZQorCiszMS5NYXIgMjAwNyBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0dldE1hdE1lbWJlcnNoaXAgYi9kb2MvbGZ1bi9HZXRNYXRNZW1iZXJzaGlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NTlhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9HZXRNYXRNZW1iZXJzaGlwCkBAIC0wLDAgKzEsNTUgQEAKK0dldE1hdE1lbWJlcnNoaXAoKQorRlVOS1RJT046CisgICAgIHN0cmluZyAqR2V0TWF0TWVtYmVyc2hpcChzdHJpbmcgbWF0KQorCitERUZJTklFUlQgSU46CisgICAgIC9wL2RhZW1vbi9tYXRlcmlhbGRiLmMgKE1BVEVSSUFMREIpCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nIG1hdCAtIGVpbiBNYXRlcmlhbAorCitCRVNDSFJFSUJVTkc6CisgICAgIEdpYnQgYWxsZSBHcnVwcGVuLCBkZW5lbiBkYXMgTWF0ZXJpYWwgYW5nZWhvZXJ0IHp1cnVlY2suIEdlZWlnbmV0LCB1bQorICAgICBkaWUgRWlnZW5zY2hhZnRlbiBlaW5lcyBNYXRlcmlhbHMgenUgdWViZXJwcnVlZmVuLgorCitSVUVDS0dBQkVXRVJUOgorICAgICBBcnJheSB2b24gU3RyaW5ncyBtaXQgTWF0ZXJpYWxpZW5ncnVwcGVuIG9kZXIgKHt9KQorCitCRUlTUElFTEU6CisgICAgIC8vIGVpbiB3ZWlzZXIgU2NobWllZDoKKyAgICAgaW50IGk7CisgICAgIHN0cmluZyAqbWF0LCBtbmFtZSwgbWdyb3VwOworICAgICBtYXQ9bV9pbmRpY2VzKG9iLT5RdWVyeVByb3AoUF9NQVRFUklBTCkpOworICAgICBpPXNpemVvZihtYXQpOworCisgICAgIHdyaXRlKCJEZXIgU2NobWllZCBzYWd0OiAiK29iLT5OYW1lKFdFUikrIiBiZXN0ZWh0IGF1cyAuLi5cbiIpOworICAgICB3aGlsZShpLS0pIHsKKyAgICAgIC8vIGRlbiBOYW1lbiBlcmtlbm5lbi9hdXNzcHJlY2hlbjoKKyAgICAgIC8vIE1hdGVyaWFsaWVuIHdlcmRlbiBhbGxnZW1laW4gZXR3YXMgYmVzc2VyIGVya2FubnQgKHp1IDUlKSwgYWJlcgorICAgICAgLy8gYWxsZXMgYXVzIE1ldGFsbCB3aXJkIHp1ICsxMDAlIGJlc3NlciBlcmthbm50IC4uLgorICAgICAgbW5hbWU9TUFURVJJQUxEQi0+TWF0ZXJpYWxOYW1lKG1hdFtpXSwgV0VSLAorCSAgICAgKHs1LCAoW01BVFJHUk9VUF9NRVRBTCwgMTAwXSl9KSk7CisKKyAgICAgIC8vIHVuZCBudXIgTWV0YWxsZSBhbmFseXNpZXJlbiAuLi4KKyAgICAgIGlmKE1BVEVSSUFMREItPk1hdGVyaWFsR3JvdXAoKFttYXRbaV06MTAwXSksTUFUR1JPVVBfTUVUQUwpPj0xMDApIHsKKyAgICAgICBpbnQgajsKKyAgICAgICBzdHJpbmcgKm1ncjsKKyAgICAgICBtZ3I9TUFURVJJQUxEQi0+R2V0TWF0TWVtYmVyc2hpcChtYXRbaV0pOworICAgICAgIGo9c2l6ZW9mKG1ncik7CisgICAgICAgbWdyb3VwPSIgZ2Vob2VydCB6dSAiOworICAgICAgIHdoaWxlKGotLSkgeworICAgICAgICBtZ3JvdXArPU1BVEVSSUFMREItPkdyb3VwTmFtZShtZ3Jbal0pOworICAgICAgICBpZihqPjApIG1ncm91cCs9IiwgIjsKKyAgICAgICB9CisgICAgICB9IGVsc2UgbWdyb3VwPSIga2VubmUgaWNoIG5pY2h0IjsKKyAgICAgIHByaW50ZigiJS0xMi4xMnM6ICVzXG4iLG1uYW1lLCBtZ3JvdXApOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIEtvbnplcHRlOgkgIG1hdGVyaWFsLCBtYXRlcmlhbGVya2VubnVuZworICAgICBHcnVuZGxlZ2VuZDogUF9NQVRFUklBTCwgL3N5cy90aGluZy9tYXRlcmlhbC5oCisgICAgIE1hc3RlcjoJICBBZGRNYXRlcmlhbCgpLCBDb252TWF0ZXJpYWxMaXN0KCksIE1hdGVyaWFsR3JvdXAoKSwKKwkJICBHcm91cE5hbWUoKSwgTWF0ZXJpYWxOYW1lKCksCisJCSAgR2V0R3JvdXBNZW1iZXJzKCkKKworNy4gTWFpIDIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXRPZmZzZXQgYi9kb2MvbGZ1bi9HZXRPZmZzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlYmE1NAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dldE9mZnNldApAQCAtMCwwICsxLDM4IEBACitGVU5LVElPTjoKKworCXZhcmFyZ3MgaW50IEdldE9mZnNldChzdHJpbmcgdm5hbWUsIG1hcHBpbmcgbWFwLCBvYmplY3QgcGwpIAorCisKK0FSR1VNRU5URToKKworCXZuYW1lCTogbmFtZSBkZXMgcGFyYW1ldGVycyBhdXMgZGVtIHNwZWxsbWFwcGluZworCW1hcCAgIAk6IHNwZWxsbWFwcGluZworCXBsIAk6IGNhc3RlcgorCisKK0JFU0NIUkVJQlVORzoKKworCSdCZXJlY2huZXQnIGRlbiBPZmZzZXQgZGVzIFBhcmFtZXRlcnMgaW4gc3BlbGxtYXBwaW5nLgorCisKK1JVRUNLR0FCRVdFUlQ6CisKKwlCZXJlY2huZXRlciBPZmZzZXQgYXVzIGRlbSBTcGVsbG1hcHBpbmcuCisKKworQkVNRVJLVU5HRU46CisKKwlCZXNjaHJhZWt1bmcgYXVmIC0xMDAwMCBiaXMgKzEwMDAwLiBXZXJ0ZSBncm9lc3NlciBvZGVyIGtsZWluZXIgCisJYWxzIGRpZXNlIHdlcmRlbiAnYWJnZXNjaG5pdHRlbicuIE1laHIgYWxzIDEwMCUgQm9udXMgb2RlciBNYWx1cworCWdpYnRzIG5pY2h0IDstKS4KKworCitCRUlTUElFTDoKKworCXh4eD1HZXRPZmZzZXQoU0lfU0tJTExEQU1BR0Usc2luZm8sY2FzdGVyKTsKKworU2llaGUgYXVjaDoKKworCSJHZXRWYWx1ZSIsICJHZXRGYWN0b3IiLCAiR2V0RlZhbHVlIiwgIkdldFZhbHVlTyIsICJHZXRGVmFsdWVPIgorCisJQXVzZnVlaHJsaWNoZXMgQmVpc3BpZWwgc2llaGUgIkdldEZWYWx1ZU8iLgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vR2V0T3duZXIgYi9kb2MvbGZ1bi9HZXRPd25lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmIwZjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vR2V0T3duZXIKQEAgLTAsMCArMSwxOSBAQAorR2V0T3duZXIoTCkKK0ZVTktUSU9OOgorICAgICBzdHJpbmcgR2V0T3duZXIoKTsKKworQkVTQ0hSRUlCVU5HOgorICAgICBXaXJkIHZvbSBIb2Vycm9ociBnZXJ1ZmVuOgorICAgICAgL2QvaW5zZWxuL3NoYWtlZGJlZXIvc2hha3lpc2xhbmQvb2JqL2hvZXJyb2hyLmMKKyAgICAgdW5kIGthbm4gZWluZW4gQmVzaXR6ZXIgZGVyIERhdGVpZW4genVydWVja2dlYmVuLCBkZXIgdm9tIEJlc2l0emVyCisgICAgIGRlciBQZmFkZSBpbiBkZW5lbiBkaWUgRGF0ZWkgbGllZ3QgYWJ3ZWljaHQuCisKK0JFSVNQSUVMRToKKyAgICAgc3RyaW5nIEdldE93bmVyKCkgeworICAgICAgcmV0dXJuICJUaWFtYWsiOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIFBfSU5GTworCisxMS4gTWFpIDIwMDQgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0dldFBoaW9sZW5JbmZvcyBiL2RvYy9sZnVuL0dldFBoaW9sZW5JbmZvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDRkNjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vR2V0UGhpb2xlbkluZm9zCkBAIC0wLDAgKzEsOTcgQEAKK0dldFBoaW9sZW5JbmZvcyhMKQorCitGVU5LVElPTjoKKyAgICAgbWl4ZWQgKkdldFBoaW9sZW5JbmZvcygpOworCitCRVNDSFJFSUJVTkc6CisKKyAgICAgV2lyZCB2b24gZGVyIFBoaW9sZSBhdWZnZXJ1ZmVuOgorICAgICAvZC9pbnNlbG4vbWlyaWwvc3Rlcm5xdWVzdC9vYmovcGhpb2xlLmMKKyAgICAgRGVyIFJhdW0gbXVzcyAvcC9zZXJ2aWNlL21pcmlsL3BoaW9sZS5oIGluY2x1ZGVuLiAgICAgCisgICAgIE1pdCBkZXIgUGhpb2xlIGthbm4gZWluIFNwaWVsZXIgZHVyY2ggVHVlcmVuIHNjaGF1ZW4uIEJlaSBUdWVyZW4sIGRpZQorICAgICB2b20gRG9vcm1hc3RlciAoL29iai9kb29ybWFzdGVyLmMpIHZlcndhbHRldCB3ZXJkZW4sIGtsYXBwdCBkaWVzIGF1dG8tCisgICAgIG1hdGlzY2guIE1vZWNodGUgbWFuIGRhcyB2ZXJiaWV0ZW4sIHNvIG11c3MgZGllIEZ1bmt0aW9uIAorICAgICBHZXRQaGlvbGVuSW5mb3MoKSBpbSBlbnRzcHJlY2hlbmRlbiBSYXVtIGRlZmluaWVydCBzZWluLgorICAgICBCZWZpbmRlbiBzaWNoIFR1ZXJlbiBpbSBSYXVtLCBkaWUgbmljaHQgdm9tIERvb3JtYXN0ZXIgdmVyd2FsdGV0IHdlcmRlbiwKKyAgICAgYWJlciBiZWkgZGVuZW4gZGllIFBoaW9sZSBmdW5rdGlvbmllcmVuIHNvbGwsIHNvIGthbm4gZGllcyBlYmVuZmFsbHMKKyAgICAgbWl0dGVscyBHZXRQaGlvbGVuSW5mb3MoKSBnZXNjaGVoZW4uCisgICAgIAorICAgICBGdW5rdGlvbiBkZXIgUGhpb2xlOgorICAgICBTaWUgcHJvaml6aWVydCBlaW4gQmlsZCBkZXNzZW4sIHdhcyBoaW50ZXIgZGVyIFR1ZXIgbGllZ3QgYXVmIGRpZSBUdWVyLgorICAgICBTdGVodCBkaWUgVHVlciBvZmZlbiwgc28gc2llaHQgZGVyIFNwaWVsZXIgbnVyIGVpbmUgV2FuZCwgZGVubiBlcyB3aXJkCisgICAgIGdlemVpZ3QsIHdhcyBoaW50ZXIgZGllc2VyIFR1ZXIgaXN0LgorICAgICAKKyAgICAgSXN0IGRpZSBUdWVyIGplZG9jaCBnZS0gb2RlciB2ZXJzY2hsb3NzZW4sIHNvIHNpZWh0IGVyIGF1ZiBkZXIgVHVlcgorICAgICBkaWUgTGFuZ2Jlc2NocmVpYnVuZyBkZXMgUmF1bWVzLCBkZXIgaGludGVyIGRlciBUdWVyIGxpZWd0LCBzb3dpZSBkYXMKKyAgICAgSW52ZW50YXIgZGllc2VzIFJhdW1lcy4gCisKKyAgICAgQXVmYmF1IGRlciBGdW5rdGlvbjoKKyAgICAgbWl4ZWQgKkdldFBoaW9sZW5JbmZvcygpIHsKKyAgICAgICByZXR1cm4gKHsKKyAgICAgICAgICAgICAgICAoWworICAgICAgICAgICAgICAgICAgUEhJT0xFX0RFU1Q6ICAgICBzdHJpbmcsICAgICAgIAorICAgICAgICAgICAgICAgICAgUEhJT0xFX0lEUzogICAgICAqc3RyaW5nLCAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIFBISU9MRV9HRU5ERVI6ICAgaW50LCAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICBQSElPTEVfU1RBVFVTOiAgIGludCwgICAgIChvcHRpb25hbCkKKyAgICAgICAgICAgICAgICAgIFBISU9MRV9MT05HOiAgICAgc3RyaW5nLCAgKG9wdGlvbmFsKQorICAgICAgICAgICAgICAgICAgUEhJT0xFX1ZFUkJPVEVOOiBpbnQgICAgICAob3B0aW9uYWwpCisgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgKFsKKyAgICAgICAgICAgICAgICAgIC4uLiBOYWVjaHN0ZSBUdWVyCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgfSk7CisgICAgIH0KKyAgICAgCisgICAgIFBISU9MRV9ERVNUICAgICAgRGF0ZWluYW1lIGRlcyBaaWVscmF1bXMKKyAgICAgUEhJT0xFX0lEUwkgICAgICBBcnJheSBkZXIgU3RyaW5ncywgbWl0IGRlbmVuIHNpY2ggZGllIFR1ZXIgCisgICAgICAgICAgICAgICAgICAgICAgYW5zcHJlY2hlbiBsYWVzc3QKKyAgICAgUEhJT0xFX0dFTkRFUiAgICBHZXNjaGxlY2h0IGRlciBUdWVyCisgICAgIFBISU9MRV9TVEFUVVMgICAgYWt0dWVsbGVyIFN0YXR1cyBkZXIgVHVlcjoKKyAgICAgICAgICAgICAgICAgICAgICAwIGdlc2NobG9zc2VuL3ZlcnNjaGxvc3NlbiwgMSBvZmZlbgorICAgICAgICAgICAgICAgICAgICAgIEJlaSBUdWVyZW4sIGRpZSBtaXQgTmV3RG9vciBlcnpldWd0IHd1cmRlbgorICAgICAgICAgICAgICAgICAgICAgIG5pY2h0IHNldHplbgorICAgICBQSElPTEVfTE9ORyAgICAgIEJlc2NocmVpYnVuZyBkZXMgWmllbHJhdW1zICh6LkIuIGJlaSBlaW5lciAKKyAgICAgICAgICAgICAgICAgICAgICBGYWtldHVlcikKKyAgICAgUEhJT0xFX1ZFUkJPVEVOICAwIGVybGF1YnQsIDEgdmVyYm90ZW4KKworQkVJU1BJRUw6CisgICAgIEVpbiBSYXVtIGVudGhhZWx0IGVpbmUgSG9senR1ZXIgdW5kIGVpbiBQb3J0YWwuIEVyc3RlcmUgaXN0IG1pdHRlbHMgCisgICAgIE5ld0Rvb3IoLi4uKSBnZWJhdXQsIHNvbGwgYWJlciBuaWNodCB6dSBkdXJjaHNjaGF1ZW4gc2VpbiwgbGV0enRlcmUgaXN0IAorICAgICBzZWxic3RnZXN0cmlja3QuIERpZSBlcnN0ZSBmdWVocnQgaW4gZGVuIFdvcmtyb29tIHZvbiBKb2YsIGRpZSB6d2VpdGUKKyAgICAgaXN0IG51ciBlaW4gRmFrZSB1bmQgaW1tZXIgZ2VzY2hsb3NzZW4uIEJlaSB2b20gRG9vcm1hc3RlciBlcnpldWd0ZW4gCisgICAgIFR1ZXJlbiBzb2xsdGUgUEhJT0xFX1NUQVRVUyBuaWNodCBnZXNldHp0IHdlcmRlbiwgZGEgZGllcyBhdXRvbWF0aXNjaAorICAgICBhYmdlZnJhZ3Qgd2lyZC4KKyAgICAgCisgICAgICNpbmNsdWRlICIvcC9zZXJ2aWNlL21pcmlsL3BoaW9sZS5oIgorICAgICAuLi4KKyAgICAgbWl4ZWQgKkdldFBoaW9sZW5JbmZvcygpeworICAgICAgIHJldHVybiAoeworICAgICAgICAgICAgICAgIChbCisgICAgICAgICAgICAgICAgICBQSElPTEVfREVTVDoiL3BsYXllcnMvam9mL3dvcmtyb29tIiwKKyAgICAgICAgICAgICAgICAgIFBISU9MRV9JRFM6KHsiaG9senR1ZXIifSksICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIFBISU9MRV9HRU5ERVI6RkVNQUxFLCAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICBQSElPTEVfVkVSQk9URU46MSAgICAgICAgICAKKyAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAoWworICAgICAgICAgICAgICAgICAgUEhJT0xFX0RFU1Q6MCwKKyAgICAgICAgICAgICAgICAgIFBISU9MRV9JRFM6KHsicG9ydGFsIn0pLCAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICBQSElPTEVfR0VOREVSOk5FVVRFUiwgCisgICAgICAgICAgICAgICAgICBQSElPTEVfU1RBVFVTOjAsCisgICAgICAgICAgICAgICAgICBQSElPTEVfTE9ORzoiRHUgc3RlaHN0IGluIGVpbmVyIHJpZXNpZ2VuIFNjaGF0emthbW1lciB1bmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImthbm5zdCBEZWluIEdsdWVjayBrYXVtIGZhc3Nlbi4gTnVuIGJyYXVjaHN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEdSBudXIgbm9jaCB6dXp1Z3JlaWZlbiB1bmQgYmlzdCBkZXIgcmVpY2hzdGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJld29obmVyIGRlcyBNb3JnZW5HcmF1ZW4uIiwKKyAgICAgICAgICAgICAgICAgIFBISU9MRV9WRVJCT1RFTjowCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgfSk7CisgICAgICB9CisgICAgICBNaXR0ZWxzIFBISU9MRV9MT05HIGxhZXNzdCBzaWNoIGF1Y2ggYmVpIGVybGF1YnRlbiB1bmQgdmVyYm90ZW5lbiBUdWVyZW4gCisgICAgICBlaW5zdGVsbGVuLCB3YXMgZGVyIFNwaWVsZXIgc3RhdHQgZGVyIG5vcm1hbGVuIFJhdW1iZXNjaHJlaWJ1bmcgdW5kIGRlbiAKKyAgICAgIGltIFJhdW0gYmVmaW5kbGljaGVuIE9iamVrdGVuIHNlaGVuIHNvbGwuIERhcyBrb2VubnRlIHouQi4gc2lubnZvbGwgCisgICAgICBzZWluLCBmYWxscyBkZXIgU3BpZWxlciB6d2FyIGRpZSBSYXVtYmVzY2hyZWlidW5nLCBhYmVyIG5pY2h0IGRlbiBmaWVzZW4gCisgICAgICBEcmFjaGVuIHNlaGVuIHNvbGwsIGRlciBzaWNoIGViZW5mYWxscyBpbSBSYXVtIGJlZmluZGV0LgorICAgICAgCitTSUVIRSBBVUNIOgorICAgICAgTmV3RG9vcigpLCBRdWVyeURvb3JTdGF0dXMoKSwgU2V0RG9vclN0YXR1cygpLCBRdWVyeUFsbERvb3JzKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMZXR6dGUgQWVuZGVydW5nOiBTYW0sIDE0LiBKYW4gMjAwNiwgMTI6MjEsIE1pcmlsCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXRSZXB1dGF0aW9uIGIvZG9jL2xmdW4vR2V0UmVwdXRhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjBjZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vR2V0UmVwdXRhdGlvbgpAQCAtMCwwICsxLDI2IEBACitHZXRSZXB1dGF0aW9uCitGVU5LVElPTjoKKyAgICAgcHVibGljIGludCBHZXRSZXB1dGF0aW9uKHN0cmluZyByZXBpZCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9yZXB1dGF0aW9uLmMKKworQVJHVU1FTlRFOgorICAgICByZXBpZAorICAgICAgIEVpbmRldXRpZ2UgSUQgZGVyIGFuZ2VmcmFndGVuIFJlcHV0YXRpb24uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgTGllZmVydCBkZW4gYWt0dWVsbGVuIFdlcnQgZGVyIGFuZ2VnZWJlbmVuIFJlcHV0YXRpb24gPHJlcGlkPiB6dXJ1ZWNrLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBaYWhsZW53ZXJ0LCBJbnRlZ2VyLgorCitCRUlTUElFTEU6CisgICAgIHMuIHJlcHV0YXRpb24KKworU0lFSEUgQVVDSDoKKyAgICAgcmVwdXRhdGlvbgorICAgICBDaGFuZ2VSZXB1dGF0aW9uKCksIEdldFJlcHV0YXRpb25zKCkKKworWlVMRVRaVCBHRUFlTkRFUlQ6CiswNi4wNC4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HZXRSZXB1dGF0aW9ucyBiL2RvYy9sZnVuL0dldFJlcHV0YXRpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDU3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9HZXRSZXB1dGF0aW9ucwpAQCAtMCwwICsxLDIzIEBACitHZXRSZXB1dGF0aW9ucworRlVOS1RJT046CisgICAgIHB1YmxpYyBtYXBwaW5nIEdldFJlcHV0YXRpb25zKCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9yZXB1dGF0aW9uLmMKKworQkVTQ0hSRUlCVU5HOgorICAgICBMaWVmZXJ0IGVpbiBNYXBwaW5nIGFsbGVyIGltIFNwaWVsZXIgZ2VzcGVpY2hlcnRlbiBSZXB1dGF0aW9uZW4gdW5kIGlocmVyCisgICAgIFdlcnRlIHp1cnVlY2suCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIE1hcHBpbmcgKFsoc3RyaW5nKXJlcGlkOiAoaW50KXdlcnRdKQorCitCRUlTUElFTEU6CisgICAgIHMuIHJlcHVhdGlvbgorCitTSUVIRSBBVUNIOgorICAgICByZXB1dGF0aW9uCisgICAgIEdldFJlcHV0YXRpb24oKSwgR2V0UmVwdXRhdGlvbnMoKQorCitaVUxFVFpUIEdFQWVOREVSVDoKKzA2LjA0LjIwMDksIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0dldFZhbHVlIGIvZG9jL2xmdW4vR2V0VmFsdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5NTExOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dldFZhbHVlCkBAIC0wLDAgKzEsMzcgQEAKK0ZVTktUSU9OOgorCisJdmFyYXJncyBpbnQgR2V0VmFsdWUoc3RyaW5nIHZuYW1lLCBtYXBwaW5nIG1hcCwgb2JqZWN0IHBsKSAKKworCitBUkdVTUVOVEU6CisKKwl2bmFtZQk6IG5hbWUgZGVzIHBhcmFtZXRlcnMgYXVzIGRlbSBzcGVsbG1hcHBpbmcKKwltYXAgICAJOiBzcGVsbG1hcHBpbmcKKwlwbCAJOiBjYXN0ZXIKKworCitCRVNDSFJFSUJVTkc6CisKKwknQmVyZWNobmV0JyBkZW4gV2VydCBkZXMgdWViZXJnZWJlbmVuIFBhcmFtZXRlcnMgYXVzIGRlbSAKKwlTcGVsbG1hcHBpbmcuCisKKworUlVFQ0tHQUJFV0VSVDoKKworCUJlcmVjaG5ldGVyIFdlcnQgYXVzIGRlbSBTcGVsbG1hcHBpbmcuCisKKworQkVNRVJLVU5HRU46CisKKwkKKworCitCRUlTUElFTDoKKworCXh4eD1HZXRWYWx1ZShTSV9TS0lMTERBTUFHRSxzaW5mbyxjYXN0ZXIpOworCitTaWVoZSBhdWNoOgorCisJIkdldEZhY3RvciIsICJHZXRPZmZzZXQiLCAiR2V0RlZhbHVlIiwgIkdldFZhbHVlTyIsICJHZXRGVmFsdWVPIgorCisJQXVzZnVlaHJsaWNoZXMgQmVpc3BpZWwgc2llaGUgIkdldEZWYWx1ZU8iLgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vR2V0VmFsdWVPIGIvZG9jL2xmdW4vR2V0VmFsdWVPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NWI4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9HZXRWYWx1ZU8KQEAgLTAsMCArMSwzNiBAQAorRlVOS1RJT046CisKKwl2YXJhcmdzIGludCBHZXRWYWx1ZU8oc3RyaW5nIHZuYW1lLCBtYXBwaW5nIG1hcCwgb2JqZWN0IHBsKSAKKworCitBUkdVTUVOVEU6CisKKwl2bmFtZQk6IG5hbWUgZGVzIHBhcmFtZXRlcnMgYXVzIGRlbSBzcGVsbG1hcHBpbmcKKwltYXAgICAJOiBzcGVsbG1hcHBpbmcKKwlwbCAJOiBjYXN0ZXIKKworCitCRVNDSFJFSUJVTkc6CisKKwlCZXJlY2huZXQgZGVuIFdlcnQgdW5kIGRlbiBPZmZzZXQgZGVzIFBhcmFtZXRlcnMgaW4gc3BlbGxtYXBwaW5nLgorCisKK1JVRUNLR0FCRVdFUlQ6CisKKwlCZXJlY2huZXRlciBXZXJ0K09mZnNldCBhdXMgZGVtIFNwZWxsbWFwcGluZy4KKworCitCRU1FUktVTkdFTjoKKworCVJ1ZnQgR2V0VmFsdWUodm5hbWUsbWFwLHBsKStHZXRPZmZzZXQodm5hbWUsbWFwLHBsKSBhdWYuCisKKworQkVJU1BJRUw6CisKKwl4eHg9R2V0VmFsdWVPKFNJX1NLSUxMREFNQUdFLHNpbmZvLGNhc3Rlcik7CisKK1NpZWhlIGF1Y2g6CisKKwkiR2V0VmFsdWUiLCAiR2V0RmFjdG9yIiwgIkdldE9mZnNldCIsICJHZXRGVmFsdWUiLCAiR2V0RlZhbHVlTyIKKworCUF1c2Z1ZWhybGljaGVzIEJlaXNwaWVsIHNpZWhlICJHZXRGVmFsdWVPIi4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0dpbGRlbnByb3BlcnRpZXMgYi9kb2MvbGZ1bi9HaWxkZW5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTE2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9HaWxkZW5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTMxIEBACitOYW1lCQkJQmVzY2hyZWlidW5nCisKK1BfR1VJTERfU0tJTExTCQlQcm9wZXJ0eSBmdWVyIFNraWxscyBpbiBkZXIgR2lsZGUKK1BfR1VJTERfUkVTVFJJQ1RJT05TIAlSZXN0cmlrdGlvbmVuIGZ1ZXIgZGVuIEVpbnRyaXR0IGluIGRpZSBHaWxkZQorUF9HVUlMRF9ERUZBVUxUX1NQRUxMQk9PSyAgCitQX0dVSUxEX01BTEVfVElUTEVTIAlNYWVubmxpY2hlIEdpbGRlbnRpdGVsCitQX0dVSUxEX0ZFTUFMRV9USVRMRVMJV2VpYmxpY2hlIEdpbGRlbnRpdGVsCitQX0dVSUxEX0xFVkVMUwkJR2lsZGVuc3R1ZmVuCitQX1NCX1NQRUxMUyAJCVByb3BlcnR5IGZ1ZXIgU3BlbGxzIGluIFNwZWxsYm9vaworUF9HTE9CQUxfU0tJTExQUk9QUwlQcm9wZXJ0aWVzIGRlciBHaWxkZSBVTkQgZGVzIFNwZWxsYm9va3MKKworUHJvcGVydGllcyBkZXMgU3BpZWxlcnM6CitQX0dVSUxECQkJU3RyaW5nIG1pdCBkZW0gTmFtZW4gZGVyIEdpbGRlCitQX0dVSUxEX0xFVkVMCQlHaWxkZW5zdHVmZQorUF9HVUlMRF9USVRMRQkJR2lsZGVudGl0ZWwKK1BfR1VJTERfUkFUSU5HCQlSYXRpbmcgaW4gZGVyIEdpbGRlCitQX05FV1NLSUxMUwkJbWFwcGluZyBtaXQgU2tpbGxzIHVuZCBTcGVsbHMKK1BfTkVYVF9TUEVMTF9USU1FCVplaXQgYmlzIGRlciBuYWVjaHN0ZSBTcGVsbCBnZXNwcm9jaGVuIHdlcmRlbiBrYW5uCitQX1RNUF9BVFRBQ0tfSE9PSwlBbmdyaWZmcy1FcnNhdHpmdW5rdGlvbgorUF9UTVBfQVRUQUNLX01PRAlBbmdyaWZmcy1Nb2RpZml6aWVydW5nCitQX1RNUF9ERUZFTkRfSE9PSwlBYndlaHItRXJzYXR6ZnVua3Rpb24KK1BfVE1QX0RJRV9IT09LCQkiRGllIi1FcnNhdHpmdW5rdGlvbgorUF9UTVBfTU9WRV9IT09LCQlCZXdlZ3VuZ3MtRXJzYXR6ZnVua3Rpb24KK1BfREVGRU5ERVJTCQlWZXJ0ZWlkaWdlcgorUF9QUkVQQVJFRF9TUEVMTAlWb3JiZXJlaXRldGVyIFNwZWxsCitQX0RFRkFVTFRfR1VJTEQJCVN0YW5kYXJkZ2lsZGUKK1BfTUFHSUNfUkVTSVNUQU5DRV9PRkZTRVQgT2Zmc2V0IGZ1ZXIgTWFnaWUtUmVzaXN0ZW56ZW4KKworU3RhbmRhcmQtU2tpbGxzOgorU0tfRklHSFQJCUthbXBmc2tpbGwoZ2xvYmFsKQorU0tfU1dPUkRGSUdIVElORwlTY2h3ZXJ0a2FtcGYKK1NLX1dFQVBPTkxFU1MJCVdhZmZlbmxvc2VyIEthbXBmCitTS19UV09IQU5ERUQgICAgICAgCVp3ZWloYW5ka2FtcGYKK1NLX0NBU1RJTkcgICAgICAgICAJWmF1YmVyLVNraWxsCitTS19NQUdJQ19BVFRBQ0sgICAgCU1hZ2lzY2hlciBBbmdyaWZmCitTS19NQUdJQ19ERUZFTlNFICAgCU1hZ2lzY2hlIEFid2VocgorU0tfTklHSFRWSVNJT04gICAgIAlOYWNodHNpY2h0CitTS19CT09aRSAgICAgICAgICAgCVNhdWYtU2tpbGwKK1NLX0lORk9STV9ERUZFTkQgICAJCitTS19ERUZFTkRfT1RIRVIJCQorU0tfQ0FSUlkJCVRyYWdlLVNraWxsCitTS19TUEVMTF9ERUZFTkQJCVNwcnVjaC1BYndlaHIKKworU2tpbGwtQXR0cmlidXRlOgorUF9TS0lMTF9BVFRSSUJVVEVTCVByb3BlcnR5IGZ1ZXIgU2tpbGwtQXR0cmlidXRlCitQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTICAgUHJvcGVydHkgZnVlciBPZmZzZXRzIGRlciBTa2lsbC1BdHRyaWJ1dGUKK1NBX1FVQUxJVFkJCUFsbGdlbWVpbmUgUXVhbGl0YWV0CitTQV9EQU1BR0UJCVNjaGFkZW4KK1NBX1NQRUVECQlHZXNjaHdpbmRpZ2tlaXQKK1NBX0RVUkFUSU9OCQlEYXVlcgorU0FfRVhURU5TSU9OCQlBdXNkZWhudW5nCitTQV9SQU5HRQkJUmVpY2h3ZWl0CitTQV9FTkVNWV9TQVZFOiBpZGVudGlzY2ggenUgU0FfU1BFTExfUEVORVRSQVRJT04gKE9CU09MRVQhKQorU0FfU1BFTExfUEVORVRSQVRJT046IENoYW5jZSBkZXMgX0Nhc3RlcnNfLCBlaW5lbiBTcGVsbCBkdXJjaCBlaW4KKyAgICAgICAgICAgICAgICAgICAgICBQX05PTUFHSUMgZHVyY2h6dWtyaWVnZW4uCisKK1NraWxsLUluZm86CitGQUNUT1IoeCkJCUZha3RvcgorT0ZGU0VUKHgpCQlPZmZzZXQKK1NJX1NLSUxMRlVOQwkJRnVua3Rpb24sIGRpZSBhdWZnZXJ1ZmVuIHdpcmQKK1NJX0NMT1NVUkUJCUludGVybiAoR2VzY2h3aW5kaWdrZWl0c29wdGltaWVydW5nKQorU0lfU1BFTExCT09LCQlTcGVsbGJvb2ssIGluIGRlbSBkZXIgU3BlbGwgc3RlaHQKK1NJX1NQRUxMQ09TVAkJS29zdGVuIGRlcyBTcGVsbHMKK1NJX1RJTUVfTVNHCQlEaWUgTWVsZHVuZyB3aXJkIGFuc3RlbGxlIHZvbiAiRHUgYmlzdCBub2NoIHp1IAorCQkJZXJzY2hvZXBmdCB2b24gRGVpbmVtIGxldHp0ZW4gU3BydWNoLiIgYXVzZ2VnZWJlbi4KK1NJX1NQX0xPV19NU0cJCURpZSBNZWxkdW5nIHdpcmQgYW5zdGVsbGUgdm9uICJEdSBoYXN0IHp1IHdlbmlnIAorCQkJWmF1YmVycHVua3RlIGZ1ZXIgZGllc2VuIFNwcnVjaC4iIGF1c2dlZ2ViZW4uCitTSV9OT01BR0lDCQlQcm96ZW50d2VydCwgbWl0IGRlbSBQX05PTUFHSUMgbWdhbmdlbiB3ZXJkZW4ga2FubgorU0lfU1BFTExGQVRJR1VFCQlFcnNjaG9lcGZ1bmcgLSBaZWl0LCBpbiBkZXIga2VpbmUgd2VpdGVyZW4gU3BlbGxzCisJCQlhdWZnZXJ1ZmVuIHdlcmRlbiBrb2VubmVuCitTSV9TS0lMTExFQVJOCQlMZXJuZ2VzY2h3aW5kaWdrZWl0IGluIDAuMDElIHBybyBBX0lOVC8yCitTSV9TS0lMTEFCSUxJVFkJCUZhZWhpZ2tlaXQsIGRpZXNlbiBTcHJ1Y2ggenUgYmVudXR6ZW4KK1NJX1NLSUxMQVJHCQlBcmd1bWVudGUsIGRpZSB1ZWJlcmdlYmVuIHd1cmRlbgorU0lfU0tJTExSRVNUUl9VU0UJQmVzY2hyYWVua3VuZ2VuIGJlaW0gR2VicmF1Y2gKK1NJX1NLSUxMUkVTVFJfTEVBUk4JQmVzY2hyYWVua3VuZ2VuIGJlaW0gTGVybmVuCitTSV9TS0lMTElORk8JCUt1cnplciBJbmZvcm1hdGlvbnN0ZXh0CitTSV9TS0lMTElORk9fTE9ORwlMYW5nZXIgSW5mb3JtYXRpb25zdGV4dAorU0lfU0tJTExEQU1BR0UJCVNjaGFkZW4KK1NJX1NLSUxMREFNQUdFX1RZUEUJQXJ0IGRlcyBTY2hhZGVucworU0lfU0tJTExEQU1BR0VfTVNHCU1lbGR1bmcgZGllIGFuc3RlbGxlIGVpbmVyIFdhZmZlIGtvbW1lbiBzb2xsCitTSV9TS0lMTERBTUFHRV9NU0cyCWRpdG8gZnVlciBkZW4gVGV4dCBmdWVyIGFuZGVyZSBpbSBSYXVtCitTSV9TUEVMTAkJU3BlbGwsIG1pdCBkZW0gYW5nZWdyaWZmZW4gd3VyZGUKK1NJX0lOSEVSSVQJCVNraWxsLCB2b24gZGVtIGV0d2FzIHVlYmVybm9tbWVuIHdlcmRlbiBzb2xsCitTSV9ESUZGSUNVTFRZCQlXZXJ0LCBkZXIgZGllIE9iZXJncmVuemUgZGVyIEZhZWhpZ2tlaXQgYWJncmVuenQKK1NJX0xBU1RMSUdIVAkJRnVlciBOYWNodHNpY2h0OiBXYW5uIGhhdCBkZXIgU3BpZWxlciB6dW0gbGV0enRlbiAKKwkJCW1hbCBMaWNodCBnZXNlaGVuLgorU0lfU0tJTExIRUFMCQlIZWlsdW5nCitTSV9VU1IJCQlzZWxic3QgZGVmaW5pZXJ0ZSBJbmZvcworU0lfR1VJTEQJCUdpbGRlLCBmYWxscyBBdXN3YWhsIGF1cyBtZWhyZXJlbiBtb2VnbGljaAorU0lfRU5FTVkJCUZlaW5kIGJlaSBLYW1wZnNwcnVlY2hlbgorU0lfRlJJRU5ECQlEZXIgenUgdmVydGVpZGlnZW5kZSBGcmV1bmQgYmVpIERlZmVuZE90aGVyIAorCQkJdW5kIEluZm9ybURlZmVuZAorU0lfTUFHSUNfVFlQRQkJVm9uIHdhcyBmdWVyIGVpbmVyIEFydCBpc3QgZGllIE1hZ2llIChzLnUuKQorU0lfUFJFUEFSRV9USU1FCQlaZWl0IGRpZSB6dXIgVm9yYmVyZWl0dW5nIGJlbm9ldGlndCB3aXJkLgorU0lfQVRUQUNLX0JVU1lfTVNHCU1lbGR1bmcsIHdlbm4gZGVyIFNwaWVsZXIgenUgYmVzY2hhZWZ0aWd0IGlzdAorU0lfTk9fQVRUQUNLX0JVU1kJV2VubiBkZXIgU3BlbGwgbmljaHQgYWxzIFRhZXRpZ2tlaXQgemFlaGxlbi9nZXphZWhsdCAKKwkJCXdlcmRlbiBzb2xsLCBrYW5uIG1hbiBoaWVyIAorCQkJTk9fQVRUQUNLX0JVU1lbX1NFVHxfUVVFUlldIHNldHplbgorU1BfTkFNRQkJCU5hbWUgZGVzIFNwZWxscywgZmFsbHMgTWFwcGluZworU1BfU0hPV19EQU1BR0UJCVRyZWZmZXJtZWxkdW5nIHNvbGwgZ2V6ZWlndCB3ZXJkZW4uCitTUF9SRURVQ0VfQVJNT1VSCUFDIHNvbGwgVHlwYWJoYWVuZ2lnIHJlZHV6aWVydCB3ZXJkZW4uCitTUF9QSFlTSUNBTF9BVFRBQ0sJS29lcnBlcmxpY2hlciBBbmdyaWZmCitTUF9SRUNVUlNJVkUJCVJla3Vyc2lvbmVuCisKK1NraWxsLVJlc3RyaWN0aW9uczoKK1NSX0ZVTgkJCUZ1bmt0aW9uLCBkaWUgd2VpdGVyZSBFaW5zY2hyYWVua3VuZ2VuIHBydWVmdAorU1JfRVhDTFVERV9SQUNFCQlBdXNnZXNjaGxvc3NlbmUgUmFzc2VuCitTUl9JTkNMVURFX1JBQ0UJCUVpbmdlc2NobG9zc2VuZSBSYXNzZW4KK1NSX0dPT0QJCQlBbGlnbiA8IAorU1JfQkFECQkJQWxpZ24gPgorU1JfRlJFRV9IQU5EUwkJQmVub2V0aWd0ZSBmcmVpZSBIYWVuZGUKK1NSX1NFRVIJCQlNdXNzIFNlaGVyIHNlaW4KK1NSX01JTl9TSVpFCQlNaW5kZXN0Z3JvZXNzZQorU1JfTUFYX1NJWkUJCU1heGltYWxncm9lc3NlCitTTV9SQUNFCQkJUmFzc2Vuc3BlemlmaXNjaGUgQmVzb25kZXJoZWl0ZW4KKworTWFnaWUtQXJ0ZW46CitNVF9BTkdSSUZGICAgICAgCUFuZ3JpZmYKK01UX1NDSFVUWiAgICAgICAJU2NodXR6CitNVF9JTExVU0lPTiAgICAgCUlsbHVzaW9uCitNVF9CRUhFUlJTQ0hVTkcgCUJlaGVycnNjaHVuZworTVRfSEVMTFNJQ0hUICAgIAlIZWxsc2ljaHQKK01UX1ZFUldBTkRMVU5HICAJVmVyd2FuZGx1bmcKK01UX0JFU0NIV09FUlVORyAJQmVzY2h3b2VydW5nCitNVF9CRVdFR1VORyAgICAgCUJld2VndW5nCitNVF9TQUtSQUwgICAgICAgCSdHb2V0dGxpY2hlcycKK01UX0hFSUxVTkcgICAgICAJSGVpbHVuZworTVRfQ1JFQVRJT04gICAgIAlFcnNjaGFmZnVuZworTVRfUFNZQ0hPICAgICAgIAlQc3ljaG8tS3JhbQorTVRfTUlTQyAgICAgICAgIAlTb25zdGlnZXMKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vR2l2ZU1pbmlRdWVzdCBiL2RvYy9sZnVuL0dpdmVNaW5pUXVlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4NDE4YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0dpdmVNaW5pUXVlc3QKQEAgLTAsMCArMSw0MyBAQAorR2l2ZU1pbmlRdWVzdCgpCisKK0ZVTktUSU9OOgorICAgICAgICBpbnQgR2l2ZU1pbmlRdWVzdChvYmplY3Qgd2lubmVyKQorCitERUZJTklFUlQgSU46CisgICAgICAgIC9zZWN1cmUvcXVlc3RtYXN0ZXIKKworQVJHVU1FTlRFOgorCXdpbm5lcgorCSAgU3BpZWxlcm9iamVrdCwgZGFzIGRpZSBRdWVzdCBiZXN0YW5kZW4gaGF0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAgICAoRGllIERlZmluZXMgZnVlciBkZW4gUnVlY2tnYWJld2VydCBmaW5kZW4gc2ljaCBpbiAKKyAgICAgICAgIC9zZWN1cmUvcXVlc3RtYXN0ZXIuaCkKKyAgICAgICAgIDEgOiBIYXQgZ2VrbGFwcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAoT0spCisgICAgICAgIC0xIDogU3BpZWxlciBoYXQgZGllIFF1ZXN0IGJlcmVpdHMgZ2Vsb2VzdCAgKE1RX0FMUkVBRFlfU0VUKQorICAgICAgICAtMiA6IFVuZ3VlbHRpZ2VyIFF1ZXN0bmFtZSAgICAgICAgICAgICAgICAgIChNUV9LRVlfSU5WQUxJRCkKKyAgICAgICAgLTMgOiBVbmJlZnVndGVyIFp1Z3JpZmYgICAgICAgICAgICAgICAgICAgICAoTVFfSUxMRUdBTF9PQkopCisgICAgICAgIC00IDogUXVlc3QgenVyIFplaXQgaW5ha3RpdiAgICAgICAgICAgICAgICAgKE1RX0lTX0lOQUNUSVZFKQorICAgICAgICAtNSA6IEdhZXN0ZSBsb2VzZW4ga2VpbmUgUXVlc3RzICAgICAgICAgICAgIChNUV9HVUVTVCkKKworQkVTQ0hSRUlCVU5HOgorCU1pdCBkaWVzZXIgRnVua3Rpb24gd2lyZCBuYWNoIGRlbSBlcmZvbGdyZWljaGVuIExvZXNlbiBlaW5lciAKKyAgICAgICAgTWluaVF1ZXN0IGRpZSBRdWVzdCBpbSBTcGllbGVyIGVpbmdldHJhZ2VuLiBEYWJlaSBtdXNzIGRlcgorICAgICAgICBBdWZydWYgaW4gZGVtIE9iamVrdCBlcmZvbGdlbiwgd2VsY2hlcyBpbSBRdWVzdG1hc3RlciAKKyAgICAgICAgZWluZ2V0cmFnZW4gaXN0LiBBbHMgQXJndW1lbnQgbXVzcyBkYXMgU3BpZWxlcm9iamVrdCAKKwlhbmdlZ2ViZW4gd2VyZGVuLCB3ZWxjaGVzIGRpZSBRdWVzdCBiZXN0YW5kZW4gaGF0LgorICAgICAgICAKK0JFSVNQSUVMOgorCVFNLT5HaXZlTWluaVF1ZXN0KHRoaXNfcGxheWVyKCkpOworCitTSUVIRSBBVUNIOgorICAgICAgICBIYXNNaW5pUXVlc3QKKyAgICAgICAgL3NlY3VyZS9xdWVzdG1hc3Rlci5oLCAvc2VjdXJlL3F1ZXN0bWFzdGVyLmMKKworSElOV0VJUzoKKyAgICAgICAgRGllIEluZm9ybWF0aW9uZW4gZnVlciBkZW4gRU0gZnVlciBRdWVzdHMgc29sbHRlbiBkaWVzZW0KKyAgICAgICAgYmVpbSBFaW50cmFnZW4gZGVyIE1pbmlxdWVzdCBpbiBkZW4gUXVlc3RtYXN0ZXIgcGVyIE1haWwKKyAgICAgICAgenVnZXNjaGlja3Qgd2VyZGVuLiBTaWVoZSBkYXp1IGRpZSBIaWxmZSB6dSBBZGRNaW5pUXVlc3QuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1p1bGV0enQgZ2VhZW5kZXJ0OiBEb24sIDMwLiBKYW4gMjAxNCwgMjI6MTQ6MTIgdm9uIEFyay4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0dpdmVRdWVzdCBiL2RvYy9sZnVuL0dpdmVRdWVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNhNTAxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vR2l2ZVF1ZXN0CkBAIC0wLDAgKzEsNjMgQEAKK0dpdmVRdWVzdCgpCisKK0ZVTktUSU9OOgorICAgICAgICB2YXJhcmdzIGludCBHaXZlUXVlc3Qoc3RyaW5nIHF1ZXN0bmFtZSwgc3RyaW5nIG1lc3NhZ2UpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3N0ZC9wbGF5ZXIvcXVlc3RzLmMKKworQVJHVU1FTlRFOgorICAgICAgICBxdWVzdG5hbWUKKyAgICAgICAgICBRdWVzdG5hbWUsIHdpZSBlciBpbSBRdWVzdG1hc3RlciBlaW5nZXRyYWdlbiB3dXJkZS4KKyAgICAgICAgbWVzc2FnZSAKKyAgICAgICAgICBPcHRpb25hbGUgTWVsZHVuZywgZGllIGF1ZiBkZW0gQWJlbnRldWVyLUthbmFsIHN0YXR0IGRlciAKKyAgICAgICAgICBTdGFuZGFyZG1lbGR1bmcgZ2VzZW5kZXQgd2lyZC4KKyAgICAgICAgICBEYWJlaSB3aXJkIEBAbmFtZUBAIGR1cmNoIGRlbiBTcGllbGVybmFtZW4gZXJzZXR6dC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgICAgKERpZSBEZWZpbmVzIGZ1ZXIgZGVuIFJ1ZWNrZ2FiZXdlcnQgZmluZGVuIHNpY2ggaW4gCisgICAgICAgICAvc2VjdXJlL3F1ZXN0bWFzdGVyLmgpCisgICAgICAgICAxIDogSGF0IGdla2xhcHB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9LKQorICAgICAgICAtMSA6IFNwaWVsZXIgaGF0IGRpZSBRdWVzdCBiZXJlaXRzIGdlbG9lc3QgIChHUV9BTFJFQURZX1NFVCkKKyAgICAgICAgLTIgOiBVbmd1ZWx0aWdlciBRdWVzdG5hbWUgICAgICAgICAgICAgICAgICAoR1FfS0VZX0lOVkFMSUQpCisgICAgICAgIC0zIDogVW5iZWZ1Z3RlciBadWdyaWZmICAgICAgICAgICAgICAgICAgICAgKEdRX0lMTEVHQUxfT0JKKQorICAgICAgICAtNCA6IFF1ZXN0IHp1ciBaZWl0IGluYWt0aXYgICAgICAgICAgICAgICAgIChHUV9JU19JTkFDVElWRSkKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIHdpcmQgbmFjaCBkZW0gZXJmb2xncmVpY2hlbiBMb2VzZW4gZWluZXIgCisgICAgICAgIFF1ZXN0IGRpZSBRdWVzdCBpbSBTcGllbGVyIGVpbmdldHJhZ2VuLiBEYWJlaSBtdXNzIGRlciBBdWZydWYgCisgICAgICAgIGluIGRlbSBPYmpla3QgZXJmb2xnZW4sIHdlbGNoZXMgaW0gUXVlc3RtYXN0ZXIgZWluZ2V0cmFnZW4gaXN0LgorICAgICAgICBadXNhZXR6bGljaCB3aXJkIGRlciBaZWl0cHVua3QgZWluZ2V0cmFnZW4sIGFuIGRlbSBkaWUgUXVlc3QKKyAgICAgICAgYmVzdGFuZGVuIHd1cmRlLgorICAgICAgICAKKyAgICAgICAgV2VyIHNpY2ggZGEgbmljaHQgc2ljaGVyIGlzdCwga2FubiBtaXQgZGVtIFF1ZXN0dG9vbCAKKyAgICAgICAgKC9vYmovdG9vbHMvcXVlc3R0b29sKSBuYWNoc2VoZW4uIAorCisgICAgICAgIE5hY2hkZW0gZWluZSBRdWVzdCBhbHMgZ2Vsb2VzdCBtYXJraWVydCB3dXJkZSwgaXN0IGRpZXMgaW4gZWluZW0gCisgICAgICAgIExvZ2ZpbGUgZnVlciBkaWUgUXVlc3QgaW0gVmVyemVpY2huaXMgL2xvZy9xdWVzdCBlaW56dXRyYWdlbi4gRGF6dQorICAgICAgICB3aXJkIHdyaXRlX2ZpbGUgdmVyd2VuZGV0LgorCitCRUlTUElFTDoKKworICAgICAgICBpbnQgcXVlc3Q7CisKKyAgICAgICAgcXVlc3QgPSB0aGlzX3BsYXllcigpLT5HaXZlUXVlc3QoIlphY2hhcmlhcyBFaXNwYWxhc3QiKTsKKworICAgICAgICBpZiAocXVlc3QgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgIHdyaXRlKCJEdSBmdWVobHN0LCB3aWUgRGVpbmUgRXJmYWhydW5nIGFuc3RlaWd0LlxuIik7CisgICAgICAgICAgd3JpdGVfZmlsZSgiL2xvZy9xdWVzdC9laXNwYWxhc3QiLCAKKyAgICAgICAgICAgICAgICAgICAgIGR0aW1lKHRpbWUoKSkrIiAgIEF1ZmdhYmUgZ2Vsb2VzdCB2b24gIgorICAgICAgICAgICAgICAgICAgICAgK3RoaXNfcGxheWVyKCktPm5hbWUoKSsiXG4iKTsKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSBpZiAocXVlc3QgIT0gLTEpCisgICAgICAgICAgd3JpdGUoICJEaWUgV2VsdGVubWFzY2hpbmUgd2lsbCBEaXIgRGVpbmUgQXJiZWl0ICIKKyAgICAgICAgICAgICAgICAgKyJuaWNodCBhbmVya2VubmVuLlxuIgorICAgICAgICAgICAgICAgICArIkZyYWdlIGVpbmVuIEVyem1hZ2llciB1bSBIaWxmZS5cbiIgKTsKKworU0lFSEUgQVVDSDoKKyAgICAgICAgL3NlY3VyZS9xdWVzdG1hc3Rlci5oLCAvb2JqL3Rvb2xzL3F1ZXN0dG9vbAorICAgICAgICBRdWVyeVF1ZXN0KCksIHdyaXRlX2ZpbGUoKSwgTW9kaWZ5UXVlc3RUaW1lKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWnVsZXR6dCBnZWFlbmRlcnQ6IFNvbiwgMjcuIEFwciAyMDE0LCBBcmF0aG9ybgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vR3JvdXBOYW1lIGIvZG9jL2xmdW4vR3JvdXBOYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODFjNDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Hcm91cE5hbWUKQEAgLTAsMCArMSw2MyBAQAorR3JvdXBOYW1lKCkKK0ZVTktUSU9OOgorICAgICBzdHJpbmcgR3JvdXBOYW1lKHN0cmluZyBncnApCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3AvZGFlbW9uL21hdGVyaWFsZGIuYyAoTUFURVJJQUxEQikKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcgZ3JwIC0gZWluIEdydXBwZW5uYW1lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgR2lidCBkaWUgTGFuZ2Jlc2NocmVpYnVuZyBkZXMgR3J1cHBlbm5hbWVucyB6dXJ1ZWNrLgorCitSVUVDS0dBQkVXRVJUOgorICAgICBEaWUgR3J1cHBlbmJlc2NocmVpYnVuZyBvZGVyICJVbmJla2FubnRlcyIKKworQkVJU1BJRUxFOgorICAgICAvLyBzaW1wZWwKKyAgICAgdG1wPW1faW5kaWNlcyhvYi0+UXVlcnlQcm9wKFBfTUFURVJJQUwpKTsKKyAgICAgd3JpdGUoIkRpZXNlcyBPYmpla3QgZ2Vob2VydCB1LmEuIHp1ciBHcnVwcGUgIisKKyAgICAgICAgICAgTUFURVJJQUxEQi0+R3JvdXBOYW1lKE1BVEVSSUFMREItPkdldE1hdE1lbWJlcnNoaXAodG1wWzBdKVswXSkrCisgICAgICAgICAgICIuXG4iKTsKKyAgICAgLy8gZ2lidCBkaWUgZXJzdGUgR3J1cHBlbnp1Z2Vob2VyaWdrZWl0IGRlcyBlcnN0ZSBNYXRlcmlhbHMgaW4KKyAgICAgLy8gUF9NQVRFUklBTCB6dXJ1ZWNrIChiZWkgTUFUR1JPVVBfTUVUQUwgei5CLiAiLi4uIHp1ciBHcnVwcGUgTWV0YWxsZS4iKQorCisgICAgIC8vIGVpbiB3ZWlzZXIgU2NobWllZDoKKyAgICAgaW50IGk7CisgICAgIHN0cmluZyAqbWF0LCBtbmFtZSwgbWdyb3VwOworICAgICBtYXQ9bV9pbmRpY2VzKG9iLT5RdWVyeVByb3AoUF9NQVRFUklBTCkpOworICAgICBpPXNpemVvZihtYXQpOworCisgICAgIHdyaXRlKCJEZXIgU2NobWllZCBzYWd0OiAiK29iLT5OYW1lKFdFUikrIiBiZXN0ZWh0IGF1cyAuLi5cbiIpOworICAgICB3aGlsZShpLS0pIHsKKyAgICAgIC8vIGRlbiBOYW1lbiBlcmtlbm5lbi9hdXNzcHJlY2hlbjoKKyAgICAgIC8vIE1hdGVyaWFsaWVuIHdlcmRlbiBhbGxnZW1laW4gZ2FueiBzY2hsZWNodCBlcmthbm50ICh6dSA1JSksIGFiZXIKKyAgICAgIC8vIGFsbGVzIGF1cyBNZXRhbGwgd2lyZCB6dSArMTAwJSBndXQgZXJrYW5udCAuLi4KKyAgICAgIG1uYW1lPU1BVEVSSUFMREItPk1hdGVyaWFsTmFtZShtYXRbaV0sIFdFUiwKKwkgICAgICh7NSwgKFtNQVRFUklBTF9TWU1NRVRSSUNfUkVDT0dOSVpBQklMSVRZOgorCQkJKHtNQVRHUk9VUF9NRVRBTCwgMTAwfSldKX0pKTsKKworICAgICAgLy8gdW5kIG51ciBNZXRhbGxlIGFuYWx5c2llcmVuIC4uLgorICAgICAgaWYoTUFURVJJQUxEQi0+TWF0ZXJpYWxHcm91cCgoW21hdFtpXToxMDBdKSxNQVRHUk9VUF9NRVRBTCk+PTEwMCkgeworICAgICAgIGludCBqOworICAgICAgIHN0cmluZyAqbWdyOworICAgICAgIG1ncj1NQVRFUklBTERCLT5HZXRNYXRNZW1iZXJzaGlwKG1hdFtpXSk7CisgICAgICAgaj1zaXplb2YobWdyKTsKKyAgICAgICBtZ3JvdXA9IiBnZWhvZXJ0IHp1ICI7CisgICAgICAgd2hpbGUoai0tKSB7CisgICAgICAgIG1ncm91cCs9TUFURVJJQUxEQi0+R3JvdXBOYW1lKG1ncltqXSk7CisgICAgICAgIGlmKGo+MCkgbWdyb3VwKz0iLCAiOworICAgICAgIH0KKyAgICAgIH0gZWxzZSBtZ3JvdXA9IiBrZW5uZSBpY2ggbmljaHQiOworICAgICAgcHJpbnRmKCIlLTEyLjEyczogJXNcbiIsbW5hbWUsIG1ncm91cCk7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgS29uemVwdGU6CSAgbWF0ZXJpYWwsIG1hdGVyaWFsZXJrZW5udW5nCisgICAgIEdydW5kbGVnZW5kOiBQX01BVEVSSUFMLCAvc3lzL3RoaW5nL21hdGVyaWFsLmgKKyAgICAgTWFzdGVyOgkgIEFkZE1hdGVyaWFsKCksIENvbnZNYXRlcmlhbExpc3QoKSwgTWF0ZXJpYWxHcm91cCgpLAorCQkgIE1hdGVyaWFsTmFtZSgpLAorCQkgIEdldEdyb3VwTWVtYmVycygpLCBHZXRNYXRNZW1iZXJzaGlwKCkKKworNy4gTWFpIDIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9HdWFyZEV4aXQgYi9kb2MvbGZ1bi9HdWFyZEV4aXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhNTNjNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0d1YXJkRXhpdApAQCAtMCwwICsxLDg1IEBACitGVU5LVElPTjoKKyAgICAgcHJvdGVjdGVkIDxpbnR8PHN0cmluZ3xjbG9zdXJlPiogPiogR3VhcmRFeGl0KG9iamVjdCByb29tLCBpbnQgaG9va2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZ3xjbG9zdXJlPiogaGRhdGEpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbnBjL21vdmluZy5jCisKK0FSR1VNRU5URToKKyAgICAgcm9vbQorICAgICAgICAgIERlciBkZW4gSG9vayBhdXNsb2VzZW5kZSBSYXVtIChlbnZpcm9ubWVudCgpKQorICAgICBob29raWQKKyAgICAgICAgICBEaWUgSUQgZGVzIEhvb2tzIChIX0hPT0tfRVhJVF9VU0UpCisgICAgIGhkYXRhCisgICAgICAgICAgRWluIEFycmF5IG1pdCAzIEVsZW1lbnRlbjoKKyAgICAgICAgICAoeworICAgICAgICAgICAgICB2ZXJiIC0gRGFzIEtvbW1hbmRvdmVyYi9BdXNnYW5nc25hbWUgKHN0cmluZykKKyAgICAgICAgICAgICAgZGVzdCAtIFppZWxyYXVtIChzdHJpbmcpIG9kZXIgY2xvc3VyZSAoc3BlY2lhbCBleGl0cykKKyAgICAgICAgICAgICAgbXNnICAtIEJld2VndW5nc3JpY2h0dW5nIChzdHJpbmcpIG9kZXIgMAorICAgICAgICAgIH0pCisKK0JFU0NIUkVJQlVORzoKKyAgICAgSXN0IGRpZXNlIEZ1bmt0aW9uIGluIGVpbmVtIE5QQyBkZWZpbmllcnQsIHRyYWVndCBzaWNoIGRlciBOUEMgYmVpIGplZGVyCisgICAgIEJld2VndW5nIGF1dG9tYXRpc2NoIGFscyBLb25zdW1lbnQgdm9uIEhfSE9PS19FWElUX1VTRSBlaW4gdW5kIGRpZXNlCisgICAgIEZ1bmt0aW9uIHdpcmQgaW1tZXIgZ2VydWZlbiwgd2VubiBlaW4gTGViZXdlc2VuIGltIGdsZWljaGVuIEVudmlyb25tZW50CisgICAgIHdpZSBkZXIgTlBDIHZlcnN1Y2h0LCBlaW5lbiBBdXNnYW5nIHp1IGJlbnV0emVuLgorICAgICBEZXIgTlBDIGthbm4gZGFubiBkaWUgQmV3ZWd1bmcgYWJicmVjaGVuICh1bmQgc28gZGVuIEF1c2dhbmcKKyAgICAgYmxvY2tpZXJlbiksIFppZWwgb2RlciBCZXdlZ3VuZ3NtZWxkdW5nIGFlbmRlcm4gb2RlciBrZWluZSBWZXJhZW5kZXJ1bmcKKyAgICAgdm9ybmVobWVuLgorICAgICBEaWUgS29uc3RhbnRlbiBmdWVyIEhvb2tpZCB1bmQgSG9va3N0YXR1cyAocy4gUnVlY2tnYWJld2VydCkgc2luZCBpbgorICAgICA8aG9vay5oPiBkZWZpbmllcnQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEFycmF5IG1pdCB6d2VpIEVsZW1lbnRlbjoKKyAgICAgKHsKKyAgICAgICAgIEhfTk9fTU9EIC8gSF9BTFRFUkVEIC8gSF9DQU5DRUxMRUQsCisgICAgICAgICBoZGF0YQorICAgICB9KQorICAgICBoZGF0YSBpc3QgZ2dmLiBkYXMgZ2VhZW5kZXJ0ZSBBcnJheSwgd2VsY2hlcyBkaWUgRnVua3Rpb24gdWViZXJnZWJlbgorICAgICB3aXJkLiBXZWl0ZXJlIERldGFpbHMgcy4gYXVjaCAvZG9jL3N0ZC9ob29rcworCitCRU1FUktVTkdFTjoKKyAgICAgRGllIEFuemFobCBhbiBLb25zdW1lbnRlbiBlaW5lcyBIb29rcyBpc3QgYmVncmVuenQuIEVzIGlzdCBkYWhlcgorICAgICBtb2VnbGljaCwgZGFzcyBkaWUgUmVnaXN0cmllcnVuZyBuaWNodCBrbGFwcHQsIHdlbm4genV2aWVsZSAoPjUpIFdhZWNodGVyCisgICAgIGltIFJhdW0gc2luZC4gV2lsbCBtYW4gZGFyYXVmIHJlYWdpZXJlbiwgbXVlc3N0ZSBtYW4gZGllIFJlZ2lzdHJpZXJ1bmcKKyAgICAgcHJ1ZWZlbi4KKyAgICAgRWluIE5QQywgd2VsY2hlciBHdWFyZEV4aXQoKSBkZWZpbmllcnQsIGFiZXIgaW0gYWt0dWVsbGVuIEVudmlyb25tZW50CisgICAgIGtlaW5lIFdhY2hlIGhhbHRlbiB3aWxsLCBr9m5udGUgc2ljaCBzZWxiZXIgZGUtcmVnaXN0cmllcmVuLgorCitCRUlTUElFTEU6CisgICAgIDxpbnR8PHN0cmluZ3xjbG9zdXJlPiogPiogR3VhcmRFeGl0KG9iamVjdCByb29tLCBpbnQgaG9va2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nfGNsb3N1cmU+KiBoZGF0YSkKKyAgICAgeworICAgICAgIC8vIE51ciBpbiBHZWZhZW5nbmlzcmFldW1lbiBXYWNoZSBoYWx0ZW4KKyAgICAgICBpZiAoc3Ryc3RyKG9iamVjdF9uYW1lKGVudmlyb25tZW50KCkpLCAiL3Jvb20vamFpbCIpPT0wKQorICAgICAgIHsKKyAgICAgICAgIC8vIEhpZXIgZ2VodHMgbmljaHQgcmF1cy4gOy0pCisgICAgICAgICBpZiAoaGRhdGFbMF0gPT0gInJhdXMiKSB7CisgICAgICAgICAgICAgdGVsbF9vYmplY3QodGhpc19wbGF5ZXIoKSwgLi4uKTsKKyAgICAgICAgICAgICByZXR1cm4gKHtIX0NBTkNFTExFRCwgaGRhdGF9KTsKKyAgICAgICAgIH0KKyAgICAgICAgIC8vIFNwZWNpYWwgZXhpdHMgZXJzZXR6ZW4gd2lyIGR1cmNoIGVpbmVuIGVpZ2VuZW4KKyAgICAgICAgIGVsc2UgaWYgKGNsb3N1cmVwKGhkYXRhWzFdKSkgeworICAgICAgICAgICBoZGF0YVsxXSA9ICMnbXlfc3BlY2lhbF9leGl0OworICAgICAgICAgICByZXR1cm4gKHtIX0FMVEVSRUQsIGhkYXRhfSk7CisgICAgICAgICB9CisgICAgICAgICAvLyBhbGxlIGFuZGVyZW4gQXVzZ2FlbmdlIGluIGRpZSBwZXJzb2VubGljaGUgWmVsbGUKKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLCAuLi4pOworICAgICAgICAgICBoZGF0YVsxXSA9ICIvcm9vbS9qYWlsXyIrZ2V0dWlkKHRoaXNfcGxheWVyKCkpOworICAgICAgICAgICBoZGF0YVsyXSA9ICJTdWVkZW4iOworICAgICAgICAgICByZXR1cm4gKHtIX0FMVEVSRUQsIGhkYXRhfSk7CisgICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBpbiBhbGxlbiBhbmRlcmVuIFJhZXVtZW4gbmljaHQgZWluZ3JlaWZlbgorICAgICAgcmV0dXJuICh7SF9OT19NT0QsIGhkYXRhfSk7CisgICAgfQorCisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZEV4aXQsIEFkZFNwZWNpYWxFeGl0LCBSZW1vdmVFeGl0CisgICAgIEhSZWdpc3RlclRvSG9vaywgSFJlZ2lzdGVyTW9kaWZpZXIsIEhVbnJlZ2lzdGVyRnJvbUhvb2sKKyAgICAgL2RvYy9zdGQvaG9va3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIwLjAyLjIwMTYsIFplc3N0cmEKKzIyLjA1LjIwMTYsIE11cGZlbCAoQmVpc3BpZWwga29ycmlnaWVydCkKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0hhbHQgYi9kb2MvbGZ1bi9IYWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YmZkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9IYWx0CkBAIC0wLDAgKzEsMzAgQEAKK0hhbHQoKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBIYWx0KCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90cmFuc3BvcnQuYworCitBUkdVTUVOVEU6CisgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllIEZhaHJ0IGRlcyBUcmFuc3BvcnRlcnMgd2lyZCBhYmdlYnJvY2hlbi4gU2llIG11c3MgZXhwbGl6aXQgbWl0CisgICAgIFN0YXJ0KCkgd2llZGVyIGF1Zmdlbm9tbWVuIHdlcmRlbiEKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFTUVSS1VOR0VOOgorICAgICBFcyBnaWJ0IGtlaW5lIGVpbmZhY2hlIE1vZWdsaWNoa2VpdCwgZGllIEZhaHJ0IGVpbmVzIFRyYW5zcG9ydGVycyBhbgorICAgICBkZXIgU3RlbGxlIHdpZWRlciBhdWZ6dW5laG1lbiwgYW4gZGVyIHNpZSB1bnRlcmJyb2NoZW4gd3VyZGUuIE1hbgorICAgICBtdWVzc3RlIGRpZSBha3R1ZWxsZSBQb3NpdGlvbiBtaXQgUXVlcnlQb3NpdGlvbigpIGVybWl0dGVsbiwgbWl0IEhpbGZlCisgICAgIGRlciBBZGRYWFgoKS1BdWZydWZlIGluIGVpbmUgUG9zaXRpb25zbnVtbWVyIHVtd2FuZGxlbiB1bmQgZGllc2UgYW4KKyAgICAgU3RhcnQoKSB1ZWJlcmdlYmVuLgorCitTSUVIRSBBVUNIOgorICAgICBTdGFydCgpLCAvc3RkL3RyYW5zcG9ydC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoxOToyMyAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSGFzTWluaVF1ZXN0IGIvZG9jL2xmdW4vSGFzTWluaVF1ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZmMzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9IYXNNaW5pUXVlc3QKQEAgLTAsMCArMSwzNyBAQAorSGFzTWluaVF1ZXN0KCkKKworRlVOS1RJT046CisgICAgICAgIGludCBIYXNNaW5pUXVlc3QobWl4ZWQgcGwsIG1peGVkIG5hbWUpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3NlY3VyZS9xdWVzdG1hc3RlcgorCitBUkdVTUVOVEU6CisgICAgICAgIHBsCisgICAgICAgICAgTmFtZSBkZXMgU3BpZWxlcnMgb2RlciBkYXMgU3BpZWxlcm9iamVrdAorICAgICAgICBuYW1lCisgICAgICAgICAgRmlsZW5hbWUgZGVzIE9iamVrdHMgb2RlciBkYXMgT2JqZWt0IHNlbGJzdCwgd2VsY2hlcyBkaWUgTWluaXF1ZXN0CisgICAgICAgICAgaW0gU3BpZWxlciBlaW50cmFnZW4gZGFyZiwgb2RlciBkaWUgTnVtbWVyIChpbnQpIGRlciBNaW5pcXVlc3QKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgICAgIDEgOiBEZXIgU3BpZWxlciBoYXQgZGllIE1pbmlRdWVzdAorICAgICAgICAgMCA6IERlciBTcGllbGVyIGhhdCBkaWUgTWluaVF1ZXN0IG5vY2ggbmljaHQKKyAgICAgICAgLTIgOiBhbmdlZ2ViZW5lIE1pbmlxdWVzdCBleGlzdGllcnQgbmljaHQKKyAgICAgICAgLTMgOiBmYWxzY2hlIERhdGVudHlwZW4gZnVlciBwbCBvZGVyIG5hbWUgdWViZXJnZWJlbgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24ga2FubiBnZXRlc3RldCB3ZXJkZW4sIG9iIGVpbiBTcGllbGVyIGVpbmUgCisgICAgICAgIE1pbmlRdWVzdCBiZXJlaXRzIGdlbG9lc3QgaGF0LiBEYWJlaSBpc3QgZW50d2VkZXIgZGVyIEZpbGVuYW1lIGRlcyAKKyAgICAgICAgT2JqZWt0ZXMgYW56dWdlYmVuLCBkYXMgZGllIFF1ZXN0IGltIFNwaWVsZXIgZWludHJhZ2VuIGRhcmYgb2RlcgorICAgICAgICBkYXMgT2JqZWt0IHNlbGJzdC4KKyAgICAgICAgCitCRUlTUElFTDoKKyAgICAgICAgaWYoIFFNLT5IYXNNaW5pUXVlc3QoZ2V0dWlkKHRoaXNfcGxheWVyKCkpLCB0aGlzX29iamVjdCgpKSE9MSApCisgICAgICAgICAgd3JpdGUoIkR1IGJpc3Qgbm9jaCBuaWNodCByZWlmIGdlbnVnLlxuIik7CisKK1NJRUhFIEFVQ0g6CisgICAgICAgIEdpdmVNaW5pUXVlc3QoTCkKKyAgICAgICAgL3NlY3VyZS9xdWVzdG1hc3Rlci5oLCAvc2VjdXJlL3F1ZXN0bWFzdGVyLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWnVsZXR6dCBnZWFlbmRlcnQ6IDIwMTQtRmViLTAzLCBBcmF0aG9ybi4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0hpdEZ1bmMgYi9kb2MvbGZ1bi9IaXRGdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMjIwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9IaXRGdW5jCkBAIC0wLDAgKzEsNjggQEAKK0hpdEZ1bmMoKQorCitGVU5LVElPTjoKKyAgICAgaW50IEhpdEZ1bmMob2JqZWN0IGVuZW15KTsKKworREVGSU5JRVJUIElOOgorICAgICBlaWdlbmVuIE9iamVrdGVuLCBmdWVyIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgZW5lbXkKKyAgICAgICAgICBEZXIgR2VnbmVyLCBnZWdlbiBkZW4gZGllIFdhZmZlIGVpbmdlc2V0enQgd2lyZC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWUgV2FmZmUga2FubiBhbmhhbmQgZGVzIEdlZ25lcnMgZW5lbXkgZW50c2NoZWlkZW4sIG9iIGVpbgorICAgICBTY2hhZGVuc2JvbnVzIG9kZXIgYXVjaCBlaW4gU2NoYWRlbnNtYWx1cyB3aXJrc2FtIHdpcmQuIERpZXNlciBCb251cworICAgICB3aXJkIHp1IGRlbSBub3JtYWxlbiBTY2hhZGVuIGRlciBXYWZmZSBoaW56dWFkZGllcnQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERlciBTY2hhZGVuc2JvbnVzIGJ6dy4gZGVyIEFic2NobGFnLgorCitCRU1FUktVTkdFTjoKKyAgICAgV2VubiBkdXJjaCBkZW4gQm9udXMgZGllIEdlbmVobWlndW5nc2dyZW56ZW4gZGVyIEJhbGFuY2UKKyAgICAgdWViZXJzY2hyaXR0ZW4gd2VyZGVuIGtvZW5uZW4sIG11c3MgbWFuIHNlaW5lbiBSZWdpb25zbWFnaWVyIHVuZAorICAgICBkaWUgT2JqZWt0LUJhbGFuY2Uga29uc3VsdGllcmVuIQorCisgICAgIFdlcnRlIGRlciBIaXRGdW5jIHNvbGx0ZW4gaW1tZXIgdWViZXIgZWluIHJhbmRvbSgpIHp1cnVlY2tnZWdlYmVuIAorICAgICB3ZXJkZW4hCisKKyAgICAgRGllc2UgRnVua3Rpb24gc29sbHRlIGRpZSBXYWZmZSBuaWNodCB6ZXJzdG9lcmVuISBGYWxscyBpaHIgaW0gS2FtcGYgZWluZQorICAgICBXYWZmZSAoZ2dmLiBpbiBBYmhhZW5naWdrZWl0IHZvbSBHZWduZXIpIHplcnN0b2VyZW4gd29sbHQsIG51dHp0IGRhenUKKyAgICAgYml0dGUgVGFrZUZsYXcoKS4gCisKK0JFSVNQSUVMRToKKyAgICAgRWluZSBXYWZmZSwgZGllIGdlZ2VuIE9ya3MgYmVzb25kZXJzIGd1dCB3aXJrdDoKKworICAgICBpbmhlcml0ICJzdGQvd2VhcG9uIjsKKworICAgICAjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorICAgICAjaW5jbHVkZSA8Y29tYmF0Lmg+CisgICAgICNpbmNsdWRlIDxjbGFzcy5oPgorCisgICAgIGNyZWF0ZSgpeworICAgICAgIGlmKCFjbG9uZXAodGhpc19vYmplY3QoKSkpIHsKKyAgICAgICAgICAgc2V0X25leHRfcmVzZXQoLTEpOworICAgICAgICAgICByZXR1cm47CisgICAgICAgfQorICAgICAgIDo6Y3JlYXRlKCk7CisgICAgICAgLyogCisgICAgICAgemlnIFNldFByb3AncywgdW0gZGllIFdhZmZlIHp1IGtvbmZpZ3VyaWVyZW4KKyAgICAgICBIaXRGdW5jKCkgaXN0IGluIGRlciBXYWZmZSBzZWxic3QgZGVmaW5pZXJ0IAorICAgICAgICovCisgICAgICAgU2V0UHJvcChQX0hJVF9GVU5DLCB0aGlzX29iamVjdCgpKTsKKyAgICAgfQorCisgICAgIGludCBIaXRGdW5jKG9iamVjdCBlbmVteSkKKyAgICAgeworICAgICAgIC8qIGxhZXNzdCBzaWNoIGRlciBHZWduZXIgYWxzIE9yayBhbnNwcmVjaGVuPyAqLworICAgICAgIGlmIChlbmVteS0+aXNfY2xhc3NfbWVtYmVyKENMX09SQykpCisgICAgICAgICByZXR1cm4gcmFuZG9tKDEwK3JhbmRvbSg1MCkpOyAvKiBKYSA9PiBTY2hhZGVuIGVyaG9laGVuICovCisKKyAgICAgICByZXR1cm4gMDsgICAvKiBhbnNvbnN0ZW4ga2VpbmVuIHp1c2FldHpsaWNoZW4gU2NoYWRlbiBhbnJpY2h0ZW4gKi8KKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBRdWVyeURlZmVuZCgpLCAvc3RkL3dlYXBvbi5jCisgICAgIFRha2VGbGF3KCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzExLjA4LjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0lkZW50aWZ5IGIvZG9jL2xmdW4vSWRlbnRpZnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2ZTU4YgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0lkZW50aWZ5CkBAIC0wLDAgKzEsMjQgQEAKK0lkZW50aWZ5KCkKKworRlVOS1RJT046CisgICAgIHZvaWQgSWRlbnRpZnkob2JqZWN0IG9iKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2NvcnBzZS5jCisKK0FSR1VNRU5URToKKyAgICAgb2IKKyAgICAgICAgICBEYXMga3VlcnpsaWNoIG5hY2ggbGFuZ2VtLCBoYXJ0ZW0gS2FtcGYgdmVyc3RvcmJlbmUgT2JqZWt0LgorCitCRVNDSFJFSUJVTkc6CisgICAgIEluIGRpZXNlciBGdW5rdGlvbiB3ZXJkZW4gTGFuZy0gdW5kIEt1cnpiZXNjaHJlaWJ1bmcgZGVyIExlaWNoZSBnZXNldHp0CisgICAgIHNvd2llIGRpZSBWZXJ3ZXN1bmcgaW4gR2FuZyBnZXNldHp0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworU0lFSEUgQVVDSDoKKyAgICAgL3N0ZC9jb3Jwc2UuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDggMTA6MTk6NTcgMTk5NiBieSBXYXJnb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0luRmlnaHQgYi9kb2MvbGZ1bi9JbkZpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NmM1YmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9JbkZpZ2h0CkBAIC0wLDAgKzEsMzIgQEAKK0luRmlnaHQoKQorCitGVU5LVElPTjoKKyAgICAgICAgbWl4ZWQgSW5GaWdodCgpCisKK0FSR1VNRU5URToKKyAgICAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBEaWVzZSBGdW5rdGlvbiB3dXJkZSBkYXp1IGdlc2NocmllYmVuLCB1bSBoZXJhdXN6dWZpbmRlbiwKKyAgICAgICAgb2Igc2ljaCBlaW4gUEMvTlBDIGRpcmVrdCBpbSBLYW1wZiBiZWZpbmRldC4gRGF6dSB3aXJkCisgICAgICAgIGRhcyBBcnJheSBtaXQgZGVuIE5hbWVuIGRlciBGZWluZGVuIGRlcyBQQy9OUENzIGR1cmNoIGRpZQorICAgICAgICBGdW5rdGlvbiBlbnZpcm9ubWVudCBnZWZpbHRlcnQgdW5kIHNvIGZlc3RnZXN0ZWxsdCwgb2IKKyAgICAgICAgZGllIFVtZ2VidW5nIGRlciBiZWlkZW4gRmVpbmRlIGdsZWljaCBpc3QuCisKK1JVRUNLR0FCRVdFUlQ6IAorICAgICAgICBBbHMgUnVlY2tnYWJld2VydCBlbnRoYWVsdCBtYW4gZW50d2VkZXIgMCwgd2VubiBkYXMgT2JqZWt0CisgICAgICAgIGltIE1vbWVudCBrZWluZSBGZWluZGUgaGF0IGJ6dy4gZGllIG5pY2h0IGltIHNlbGJlbiBSYXVtCisgICAgICAgIHNpbmQsIG9kZXIgYWJlciBkYXMgRmVpbmRvYmpla3QsIGRhcyBhbHMgZXJzdGVzIGltIEFycmF5CisgICAgICAgIHN0ZWh0IHVuZCBhbndlc2VuZCBpc3QuCisKK0JFSVNQSUVMOgorICAgICAgICBTZWxic3RlcmtsYWVyZW5kIDspCisKK0JFTUVSS1VORzoKKyAgICAgICAgSW5GaWdodCgpIGdpYnQgbGVkaWdsaWNoIGRhcyBFcmdlYm5pcyB2b24gRW5lbXlQcmVzZW50KCkgenVydWVjay4KKworU0lFSEUgQVVDSDoKKyAgICAgICAgRW5lbXlQcmVzZW50KCksIFByZXNlbnRFbmVtaWVzKCkKKyAgICAgICAgL3N0ZC9saXZpbmcvY29tYmF0LmMKKworMjIuMDMuMjAwOSwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSW5MaXN0IGIvZG9jL2xmdW4vSW5MaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2Q0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Jbkxpc3QKQEAgLTAsMCArMSwyOCBAQAorSW5MaXN0KCkKKworRlVOS1RJT046CisgICAgIGludCBJbkxpc3Qob2JqZWN0IHJvb20sIGludCAqcG90aW9ubGlzdCwgaW50ICprbm93bmxpc3QpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3NlY3VyZS9wb3Rpb25tYXN0ZXIuYworCitBUkdVTUVOVEU6CisgICAgIEltcGxpeml0OiBwcmV2aW91c19vYmplY3QoKSAtIFNwaWVsZXJvYmpla3QsIGRhcyBaVCBiZWtvbW1lbiBzb2xsCisgICAgIG9iamVjdCByb29tICAgICAgICAgICAgICAgICAtIE9iamVrdCwgd2VsY2hlcyBaVCB2ZXJnZWJlbiB3aWxsCisgICAgIGludCogcG90aW9ubGlzdCAgICAgICAgICAgICAtIExpc3RlIGRlciBaVHMgZGVzIFNwaWVsZXJzCisgICAgIGludCoga25vd25saXN0ICAgICAgICAgICAgICAtIExpc3RlIGRlciBiZWthbm50ZW4gWlRzIGRlcyBTcGllbGVycworCitCRVNDSFJFSUJVTkc6CisgICAgIFBydWVmdCwgb2IgJ3Jvb20nIGVpbmVuIFpUIHZlcmdlYmVuIGRhcmYgdW5kIGdpYnQgenVydWVjaywgb2IgZGllCisgICAgIE51bW1lciBkaWVzZXMgWlRzIGluIGRlciAna25vd25saXN0JyBlbnRoYWx0ZW4gaXN0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAwICBLZWluIGFrdGl2ZXIgWlQgb2RlciBuaWNodCBpbiBMaXN0ZSBlbnRoYWx0ZW4uCisgICAgIDEgIEFrdGl2ZXIgWlQgdW5kIGluIExpc3RlLgorCitTSUVIRSBBVUNIOgorICAgICBTb25zdGlnZXM6IHphdWJlcnRyYWVua2UsIC9yb29tL29yYWtlbC5jCisgICAgIFZlcndhbmR0OiAgRmluZFBvdGlvbigpLCBSZW1vdmVLbm93blBvdGlvbigpLCBBZGRLbm93blBvdGlvbigpCisgICAgIFByb3BzOiAgICAgUF9QT1RJT05ST09NUywgUF9LTk9XTl9QT1RJT05ST09NUworCis2LkZlYiAyMDE2IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9JbmZvcm1BbGNvaG9sRWZmZWN0IGIvZG9jL2xmdW4vSW5mb3JtQWxjb2hvbEVmZmVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE1Mjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSW5mb3JtQWxjb2hvbEVmZmVjdApAQCAtMCwwICsxLDQzIEBACitJbmZvcm1BbGNvaG9sRWZmZWN0CisKK0ZVTktUSU9OOgorCXZvaWQgSW5mb3JtQWxjb2hvbEVmZmVjdChvYmplY3QgcGwsIGludCBtc2dpZCwgaW50IGFyZWEpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgZWlnZW5lbiBPYmpla3RlbjsgZnVlciAvc3RkL2xpdmluZy9saWZlLmMKKyAKK0FSR1VNRU5URToKKwlwbAorICAgICAgICAgIERhcyBMZWJld2VzZW4sIGRhcyBhbGtvaG9saXNpZXJ0IGlzdC4KKyAgICAgICAgbXNnaWQKKyAgICAgICAgICBGbGFnIGZ1ZXIgZGllIE1lbGR1bmcsIGRpZSBhdXNnZWdlYmVuIHdpcmQuCisgICAgICAgIGFyZWEKKyAgICAgICAgICBBdWZydWYgZXJmb2xndCBpbiBHaWxkZSAoMCkgb2RlciBpbSBFbnZpcm9ubWVudCAoMSkuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgV2VubiBlaW4gTGViZXdlc2VuIGFsa29ob2xpc2llcnQgaXN0LCB3ZXJkZW4gaW4gdW5yZWdlbG1hZXNzaWdlbgorICAgICAgICBBYnN0YWVuZGVuIE1lbGR1bmdlbiBhbiBkaWUgVW1nZWJ1bmcgdW5kIGFucyBMZWJld2VzZW4gYXVzZ2VnZWJlbi4KKyAgICAgICAgR2xlaWNoemVpdGlnIHdpcmQgZGllIEZ1bmt0aW9uIEluZm9ybUFsY29ob2xFZmZlY3QgaW4gZGVyIEdpbGRlCisgICAgICAgIHVuZCBpbSBFbnZpcm9ubWVudCBkZXMgTGViZXdlc2VucyBhdWZnZXJ1ZmVuLgorICAgICAgICAKKyAgICAgICAgRXMgZ2lidCB2aWVyIHZlcnNjaGllZGVuZSBNZWxkdW5nZW4gKGRlZmluaWVydCBpbiAvc3lzL2hlYWx0aC5oKToKKyAgICAgICAgQUxDX0VGRkVDVF9ISUNLICAgICAgKDApIDogIjxIaWNrPiEgT2gsIFRzY2h1bGRpZ3VuZy5cbiIKKyAgICAgICAgQUxDX0VGRkVDVF9SVUVMUFMgICAgKDEpIDogIkR1IHJ1ZWxwc3QuXG4iCisgICAgICAgIEFMQ19FRkZFQ1RfTE9PS0RSVU5LICgyKSA6ICJEdSBmdWVobHN0IERpY2ggYmVub21tZW4uXG4iCisgICAgICAgIEFMQ19FRkZFQ1RfU1RVTUJMRSAgICgzKSA6ICJEdSBzdG9scGVyc3QuXG4iCisgICAgICAgIAorICAgICAgICBXaXJkIGRpZSBGdW5rdGlvbiBpbiBlaW5lbSBHaWxkZW5yYXVtIGltcGxlbWVudGllcnQsIHNvIGthbm4gbWFuCisgICAgICAgIGFuaGFuZCBkZXMgMy4gUGFyYW1ldGVycyB1bnRlcnNjaGVpZGVuLCBvYiBkaWUgR2lsZGUgYWxzIEdpbGRlCisgICAgICAgIG9kZXIgYWxzIFJhdW0gZ2VtZWludCBpc3QgKGRpZSBGdW5rdGlvbiB3aXJkIGplIGVpbm1hbCBhdWZnZXJ1ZmVuKToKKyAgICAgICAgQUxDX0VGRkVDVF9BUkVBX0dVSUxEICgwKSA6IGRlciBBdWZydWYgYmV0cmlmZnQgZGllIEdpbGRlLAorICAgICAgICBBTENfRUZGRUNUX0FSRUFfRU5WICAgKDEpIDogZGVyIEF1ZnJ1ZiBiZXRyaWZmdCBkaWUgVW1nZWJ1bmcuCisKK1JVZUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIFBfQUxDT0hPTCwgL3N5cy9oZWFsdGguaAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBUaHUgTWF5IDIzIDIzOjA4OjAwIDIwMDIgYnkgTXVwZmVsCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0luZm9ybURlZmVuZCBiL2RvYy9sZnVuL0luZm9ybURlZmVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjM2OTIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSW5mb3JtRGVmZW5kCkBAIC0wLDAgKzEsNjIgQEAKK0luZm9ybURlZmVuZCgpCisKK0ZVTktUSU9OOgorCXZvaWQgSW5mb3JtRGVmZW5kKG9iamVjdCBlbmVteSk7CisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL2xpdmluZy9jb21iYXQuYworCitBUkdVTUVOVEU6CisJZW5lbXkKKwkgIERlciBGZWluZCwgZGVyIGVpbiB6dSB2ZXJ0ZWlkaWdlbmRlcyBMZWJld2VzZW4gYW5nZWdyaWZmZW4gaGF0LgorCitCRVNDSFJFSUJVTkc6CisJRXMgaXN0IG1vZWdsaWNoLCBkYXNzIE9iamVrdGUgdWViZXIgQW5ncmlmZmUgYXVmIExlYmV3ZXNlbgorCWluZm9ybWllcnQgd2VyZGVuLCBzb2Zlcm4gZGllc2UgT2JqZWt0ZSBiZWkgZGVtIGFuZ2VncmlmZmVuZW4KKwlMZWJld2VzZW4gbWl0dGVscyBBZGREZWZlbmRlcigpIGFuZ2VtZWxkZXQgd3VyZGVuIHVuZCBzaWNoIGRlcgorCXNlbGJlbiBVbWdlYnVuZyBiZWZpbmRlbi4KKwladW1laXN0IHdpcmQgZXMgc2ljaCBiZWkgZGVuIE9iamVrdGVuIG5hdHVlcmxpY2ggZWJlbmZhbGxzIHVtCisJYW5kZXJlIExlYmV3ZXNlbiBoYW5kZWxuLCBkaWUgZGFzIExlYmV3ZXNlbiwgYmVpIGRlbSBzaWUgYW5nZW1lbGRldAorCXNpbmQsIHZlcnRlaWRpZ2VuIHNvbGxlbi4KKwlCZWkgZWluZW0gQW5ncmlmZiBhdWYgZGFzIExlYmV3ZXNlbiB3ZXJkZW4gYWxsZSBPYmpla3RlIHBlciBBdWZydWYKKwl2b24gSW5mb3JtRGVmZW5kKCkgZGFydWViZXIgaW5mb3JtaWVydCwgd29iZWkgZGVyIEFuZ3JlaWZlciBhbHMKKwlQYXJhbWV0ZXIgdWViZXJnZWJlbiB3aXJkLgorCVN0YW5kYXJkbWFlc3NpZyBpc3QgZGllc2UgRnVua3Rpb24gaW4gTGViZXdlc2VuIGJlcmVpdHMgZGVmaW5pZXJ0LAorCXdvYmVpIGRlciBTa2lsbCBTS19JTkZPUk1fREVGRU5ELCBzb2Zlcm4gdm9yaGFuZGVuLCBhdWZnZXJ1ZmVuIHdpcmQuCisKK0JFSVNQSUVMOgorCVNlaHIgYmVsaWVidCBzaW5kIGluIEdpbGRlbiBOUENzLCBkaWUgZGVuIEJlc2Nod29lcmVyIGJlZ2xlaXRlbiB1bmQKKwl2ZXJ0ZWlkaWdlbiwgei5CLiBiZXNjaHdvcmVuZSBEYWVtb25lbjoKKwkgIGluaGVyaXQgInN0ZC9ucGMiOworCSAgaW5jbHVkZSA8cHJvcGVydGllcy5oPgorCSAgb2JqZWN0IG93bmVyOworCSAgdm9pZCBjcmVhdGUoKQorCSAgeyA6OmNyZWF0ZSgpOworCSAgICBTZXRQcm9wKFBfTkFNRSwiRGFlbW9uIik7CisJICAgIC4uLgorCSAgfQorCS8vIG5hY2ggQ2xvbmVuIGRlcyBEYWVtb25zIGZvbGdlbmRlIEZ1bmt0aW9uIG1pdCBCZXNjaHdvZXJlciBhbHMKKwkvLyBQYXJhbWV0ZXIgYXVmcnVmZW4KKwkgIElkZW50aWZ5KG9iamVjdCBjYXN0ZXIpCisJICB7IGlmKCFvYmplY3RwKGNhc3RlcikpCisJICAgICAgY2FsbF9vdXQoIydyZW1vdmUsMCk7CisJICAgIG93bmVyPWNhc3RlcjsKKwkgICAgb3duZXItPkFkZERlZmVuZGVyKHRoaXNfb2JqZWN0KCkpOworCSAgfQorCS8vIGZvbGdlbmRlIEZ1bmt0aW9uIHdpcmQgYXV0b21hdGlzY2ggYXVmZ2VydWZlbiwgd2VubiBkZXIKKwkvLyBCZXNjaHdvZXJlciBhbmdlZ3JpZmZlbiB3aXJkCisJICB2b2lkIEluZm9ybURlZmVuZChvYmplY3QgZW5lbXkpCisJICB7IGlmKCFJc0VuZW15KGVuZW15KSYmZW5lbXkhPW93bmVyKQorCSAgICAgIEtpbGwoZW5lbXkpOworCSAgfQorCVNvbGwgZGVyIERhZW1vbiBzaWNoIGF1Y2ggaW4gZWluIFRlYW0gZWlub3JkbmVuLCBpbiB3ZWxjaGVtIHNpY2ggZGVyCisJQmVzY2h3b2VyZXIgZXZlbnR1ZWxsIGJlZmluZGV0LCBzbyBpc3QgenVzYWV0emxpY2ggQXNzb2NNZW1iZXIoKSBpbgorCWRpZXNlbSBCZXNjaHdvZXJlciBhdWZ6dXJ1ZmVuLCB3b2JlaSBkZXIgRGFlbW9uIGFscyBQYXJhbWV0ZXIKKwl1ZWJlcmdlYmVuIHdpcmQuCisKK1NJRUhFIEFVQ0g6CisJQWRkRGVmZW5kZXIoKSwgUmVtb3ZlRGVmZW5kZXIoKSwgRGVmZW5kT3RoZXIoKSwgS2lsbCgpLCBJc0VuZW15KCksCisJUF9ERUZFTkRFUlMsIC9zdGQvbGl2aW5nL2NvbWJhdC5jLCAvc3lzL25ld19za2lsbHMuaAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBUaHUgSnVsIDI5IDE4OjQ4OjQ1IDE5OTkgYnkgUGF0cnluCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9JbmZvcm1Sb3dDaGFuZ2UgYi9kb2MvbGZ1bi9JbmZvcm1Sb3dDaGFuZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhYThmYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0luZm9ybVJvd0NoYW5nZQpAQCAtMCwwICsxLDIzIEBACitJbmZvcm1Sb3dDaGFuZ2UoKQorCitGVU5LVElPTjoKKwl2YXJhcmdzIHZvaWQgSW5mb3JtUm93Q2hhbmdlKGludCBmcm9tLCBpbnQgdG8sIG9iamVjdCBjYXN0ZXIpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9saXZpbmcvdGVhbS5jCisKK0FSR1VNRU5URToKKwlmcm9tICAgLSBSZWloZSwgaW4gZGllIGRlciBTcGllbGVyIHZvcmhlciB3YXIuCisJdG8gICAgIC0gUmVpaGUgaW4gZGVyIGRlciBTcGllbGVyIGpldHp0IGlzdC4KKwljYXN0ZXIgLSBEZXIgU3BpZWxlciwgZmFsbHMgZGllIEZ1bmt0aW9uIGluIGRlciBHaWxkZSBhdWZnZXJ1ZmVuIHdpcmQuCisgICAgICAgIAorQkVTQ0hSRUlCVU5HOgorCURpZXNlIEZ1bmt0aW9uIHdpcmQgaW0gU3BpZWxlciB1bmQgaW4gc2VpbmVyIEdpbGRlIGF1ZmdlcnVmZW4sCisJZmFsbHMgc2ljaCBkaWUgYWt0dWVsbGUgS2FtcGZyZWloZSBpbiBkZXIgVGVhbWF1ZnN0ZWxsdW5nCisJYWVuZGVydC4KKworUlVFQ0tHQUJFV0VSVDoKKwlLZWluZXIuCisKK1NJRUhFIEFVQ0g6CisJdGVhbXMKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0luZm9ybVVud2VhciBiL2RvYy9sZnVuL0luZm9ybVVud2VhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcxMDI4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSW5mb3JtVW53ZWFyCkBAIC0wLDAgKzEsMjkgQEAKK0luZm9ybVVud2VhcgorCitGVU5LVElPTjoKKwlwcm90ZWN0ZWQgdm9pZCBJbmZvcm1VbndlYXIob2JqZWN0IHBsLCBpbnQgc2lsZW50LCBpbnQgYWxsKQorCitERUZJTklFUlQgSU46CisgICAgICAgIC9zdGQvY2xvdGhpbmcvd2Vhci5jCisKK0FSR1VNRU5URToKKwlwbAorICAgICAgICAgIERhcyBMZWJld2VzZW4sIGRhcyBkaWUgUnVlc3R1bmcgYXVzZ2V6b2dlbiBoYXQuCisgICAgICAgIHNpbGVudAorICAgICAgICAgIEZsYWcsIG9iIE1lbGR1bmdlbiB1bnRlcmRydWNrdCB3ZXJkZW4gc29sbGVuLgorICAgICAgICBhbGwKKyAgICAgICAgICBGbGFnLCBvYiBkaWUgUnVlc3R1bmcgbWl0ICJ6aWVoZSBhbGxlcyBhdXMiLworICAgICAgICAgICJ6aWVoZSBhbGxlIHJ1ZXN0dW5nZW4gYXVzIiBhdXNnZXpvZ2VuIHd1cmRlLgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBkaWUgUnVlc3R1bmcgZXJmb2xncmVpY2gKKyAgICAgICAgYXVzZ2V6b2dlbiB3dXJkZS4KKworUlVlQ0tHQUJFV0VSVDoKKwlrZWluZXIKKworU0lFSEUgQVVDSDoKKyAgICAgICAgSW5mb3JtVW53aWVsZCgpLCBJbmZvcm1XaWVsZCgpLCBJbmZvcm1XZWFyKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDYuMTAuMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSW5mb3JtVW53aWVsZCBiL2RvYy9sZnVuL0luZm9ybVVud2llbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyZDliYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0luZm9ybVVud2llbGQKQEAgLTAsMCArMSwyNiBAQAorSW5mb3JtVW53aWVsZAorCitGVU5LVElPTjoKKwlwcm90ZWN0ZWQgdm9pZCBJbmZvcm1VbndpZWxkKG9iamVjdCBwbCwgaW50IHNpbGVudCkKKworREVGSU5JRVJUIElOOgorCS9zdGQvd2VhcG9uL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKwlwbAorICAgICAgICAgIERhcyBMZWJld2VzZW4sIGRhcyBkaWUgV2FmZmUgZ2V6dWVja3QgaGF0dGUuCisgICAgICAgIHNpbGVudAorICAgICAgICAgIEZsYWcsIG9iIE1lbGR1bmdlbiB1bnRlcmRydWNrdCB3ZXJkZW4gc29sbGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBkaWUgV2FmZmUgZXJmb2xncmVpY2gKKyAgICAgICAgd2VnZ2VzdGVja3Qgd3VyZGUuCisKK1JVZUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIEluZm9ybVdpZWxkKCksIEluZm9ybVdlYXIoKSwgSW5mb3JtVW53ZWFyKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDYuMTAuMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSW5mb3JtV2VhciBiL2RvYy9sZnVuL0luZm9ybVdlYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3YzliNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0luZm9ybVdlYXIKQEAgLTAsMCArMSwyOSBAQAorSW5mb3JtV2VhcgorCitGVU5LVElPTjoKKwlwcm90ZWN0ZWQgdm9pZCBJbmZvcm1XZWFyKG9iamVjdCBwbCwgaW50IHNpbGVudCwgaW50IGFsbCkKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL2Nsb3RoaW5nL3dlYXIuYworCitBUkdVTUVOVEU6CisJcGwKKyAgICAgICAgICBEYXMgTGViZXdlc2VuLCBkYXMgZGllIFJ1ZXN0dW5nIGFuZ2V6b2dlbiBoYXQuCisgICAgICAgIHNpbGVudAorICAgICAgICAgIEZsYWcsIG9iIE1lbGR1bmdlbiB1bnRlcmRydWNrdCB3ZXJkZW4gc29sbGVuLgorICAgICAgICBhbGwKKyAgICAgICAgICBGbGFnLCBvYiBkaWUgUnVlc3R1bmcgbWl0ICJ0cmFnZSBhbGxlcyIvInRyYWdlIGFsbGUgcnVlc3R1bmdlbiIKKyAgICAgICAgICBhbmdlem9nZW4gd3VyZGUuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgRGllc2UgRnVua3Rpb24gd2lyZCBhdWZnZXJ1ZmVuLCB3ZW5uIGRpZSBSdWVzdHVuZyBlcmZvbGdyZWljaAorICAgICAgICBhbmdlem9nZW4gd3VyZGUuCisKK1JVZUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIEluZm9ybVVud2llbGQoKSwgSW5mb3JtV2llbGQoKSwgSW5mb3JtVW53ZWFyKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDYuMTAuMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSW5mb3JtV2llbGQgYi9kb2MvbGZ1bi9JbmZvcm1XaWVsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2M2Yjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSW5mb3JtV2llbGQKQEAgLTAsMCArMSwyNiBAQAorSW5mb3JtV2llbGQKKworRlVOS1RJT046CisJcHJvdGVjdGVkIHZvaWQgSW5mb3JtV2llbGQob2JqZWN0IHBsLCBpbnQgc2lsZW50KQorCitERUZJTklFUlQgSU46CisJL3N0ZC93ZWFwb24vY29tYmF0LmMKKworQVJHVU1FTlRFOgorCXBsCisgICAgICAgICAgRGFzIExlYmV3ZXNlbiwgZGFzIGRpZSBXYWZmZSBnZXp1ZWNrdCBoYXQuCisgICAgICAgIHNpbGVudAorICAgICAgICAgIEZsYWcsIG9iIE1lbGR1bmdlbiB1bnRlcmRydWNrdCB3ZXJkZW4gc29sbGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBkaWUgV2FmZmUgZXJmb2xncmVpY2gKKyAgICAgICAgZ2V6dWVja3Qgd3VyZGUuCisKK1JVZUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIEluZm9ybVVud2llbGQoKSwgSW5mb3JtV2VhcigpLCBJbmZvcm1VbndlYXIoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNi4xMC4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9JbnNlcnRFbmVteSBiL2RvYy9sZnVuL0luc2VydEVuZW15Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDFkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9JbnNlcnRFbmVteQpAQCAtMCwwICsxLDI4IEBACitnZWZ1bmRlbiA6IGxmdW4vSW5zZXJ0RW5lbXkKKworRlVOS1RJT046CisgICAgICAgIGludCBJbnNlcnRFbmVteShvYmplY3QgZW5lbXkpCisgICAgICAgIAorREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL2xpdmluZy9jb21iYXQuYworICAgICAgICAKK0FSR1VNRU5URToKKyAgICAgICAgZW5lbXk6IERhcyBMZWJld2VzZW4sIGRhcyBhbmdlZ3JpZmZlbiB3ZXJkZW4gc29sbC4KKyAgICAgICAgCitCRVNDSFJFSUJVTkc6CisgICAgICAgIE5hY2ggQXVmcnVmIGRlciBGdW5rdGlvbiB3aXJkIGRhcyBXZXNlbiBpbiBkaWUgTGlzdGUgZGVyIEZlaW5kZQorICAgICAgICBhdWZnZW5vbW1lbi4KKyAgICAgICAgSW4gamVkZW0gaGVhcnRfYmVhdCgpIHdpcmQgZGFubiBlaW4gYW53ZXNlbmRlciBGZWluZAorICAgICAgICBhbmdlZ3JpZmZlbi4KKyAgICAgICAgCitSVUVDS0dBQkVXRVJUOgorICAgICAgICAwLCBmYWxscyBkZXIgRmVpbmQgbmljaHQgZXhpc3RpZXJ0LCBrZWluIExlYmV3ZXNlbiBpc3QsIGVpbiBHZWlzdCBpc3QsIAorICAgICAgICAgICBvZGVyIGltIEdlZ25lciBQX05PX0FUVEFDSyBnZXNldHp0IGlzdCwgb2RlciBzY2hvbiBhbmdlZ2VncmlmZmVuIAorICAgICAgICAgICB3dXJkZQorICAgICAgICAxICBzb25zdAorICAgICAgICAKK1NJRUhFIEFVQ0g6CisgICAgICAgIEtpbGwsIElzRW5lbXksIFN0b3BIdW50Rm9yLCBQX05PX0FUVEFDSworCitMRVRaVEUgQUVOREVSVU5HOgorMjYuMDguMjAxMCwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSW5zZXJ0RW5lbXlUZWFtIGIvZG9jL2xmdW4vSW5zZXJ0RW5lbXlUZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YWRlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9JbnNlcnRFbmVteVRlYW0KQEAgLTAsMCArMSw0NiBAQAorCitJbnNlcnRFbmVteVRlYW0oKQorCisKK0ZVTktUSU9OOgorICAgICAgICB2YXJhcmdzIHZvaWQgSW5zZXJ0RW5lbXlUZWFtKG1peGVkIGVucywgaW50IHJlaykKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL2xpdmluZy90ZWFtLmMKKworQVJHVU1FTlRFOgorICAgICAgICBlbnMgICAgIG9iamVjdCBGZWluZCBvZGVyIG9iamVjdCAqRmVpbmRlCisgICAgICAgIHJlayAgICAgV3VyZGUgdm9uIEluc2VydEVuZW15VGVhbSBhdWZnZXJ1ZmVuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgQWxsZSBUZWFtbWl0Z2xpZWRlciBkZXMgRmVpbmRlcyBiencuIGRpZSBhbmdlZ2ViZW5lbiBGZWluZGUgKGFiZXIKKyAgICAgICAgbmljaHQgZGVyZW4gVGVhbW1pdGdsaWVkZXIpIHdlcmRlbiB6dSBGZWluZGVuCisgICAgICAgICBhKSBkZXMgU3BpZWxlcnMgdW5kIGFsbGVyIFRlYW1taXRnbGllZGVyLCBmYWxscyByZWs9PTAKKyAgICAgICAgIGIpIGRlcyBTcGllbGVycywgZmFsbHMgcmVrIT0wCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgICAgIGtlaW5lcgorCitCRU1FUktVTkdFTjoKKyAgICAgICAgMS4gTnVyIHdlbm4gR2VnbmVyIHVuZCBUZWFtbWl0Z2xpZWQgaW0gZ2xlaWNoZW4gUmF1bSBzdGVoZW4gKGFiZXIKKyAgICAgICAgICAgbmljaHQgbm90d2VuZGlnZXJ3ZWlzZSBpbSBnbGVpY2hlbiBSYXVtIHdpZSBkZXIgU3BpZWxlcikgd2VyZGVuCisgICAgICAgICAgIHNpZSB6dSBGZWluZGVuLgorICAgICAgICAyLiBGYWxscyBUZWFtbWl0Z2xpZWQgdW5kIEdlZ25lciBiZWlkZXMgU3BpZWxlciBzaW5kLCB3ZXJkZW4gc2llCisgICAgICAgICAgIG5pY2h0IHp1IEZlaW5kZW4gZ2VtYWNodC4KKyAgICAgICAgMy4gSXN0IGRlciBHZWduZXIgaW0gZWlnZW5lbiBUZWFtLCBzbyB3aXJkIG5pY2h0cyBnZW1hY2h0LgorCitTSUVIRSBBVUNIOgorICAgICAgICBVZWJlcnNpY2h0OiB0ZWFta2FtcGYKKyAgICAgICAgUHJvcGVydGllczogUF9URUFNLCBQX0FTU09DX01FTUJFUlMsIFBfVEVBTV9BVFRBQ0tfQ01ELAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fQVVUT0ZPTExPVywgUF9URUFNX0NPTE9SUywgUF9URUFNX0xFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX05FV01FTUJFUiwgUF9URUFNX1dBTlRFRF9ST1csIFBfVEVBTV9XSU1QWV9ST1cKKyAgICAgICAgQmV3ZWd1bmc6ICAgSXNUZWFtTW92ZSwgVGVhbUZsZWUKKyAgICAgICAgTWl0Z2xpZWRlcjogSXNUZWFtTGVhZGVyLCBUZWFtTWVtYmVycworICAgICAgICBLYW1wZjogICAgICBBc3NvY01lbWJlciwgRGVBc3NvY01lbWJlciwgU2VsZWN0TmVhckVuZW15LAorICAgICAgICAgICAgICAgICAgICBTZWxlY3RGYXJFbmVteQorICAgICAgICBQb3NpdGlvbmVuOiBQcmVzZW50UG9zaXRpb24sIFByZXNlbnRSb3dzLCBQcmVzZW50RW5lbXlSb3dzLAorICAgICAgICAgICAgICAgICAgICBQcmVzZW50VGVhbVBvc2l0aW9uLCBTd2FwUm93cworICAgICAgICBTb25zdGlnZXM6ICBUZWFtUHJlZml4LCB0ZWFta2FtcGZfaW50ZXJuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE2LTA4LTIwMTAsIEdhYnlsb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0luc2VydFNlbnNpdGl2ZU9iamVjdCBiL2RvYy9sZnVuL0luc2VydFNlbnNpdGl2ZU9iamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODljZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSW5zZXJ0U2Vuc2l0aXZlT2JqZWN0CkBAIC0wLDAgKzEsNDggQEAKK0luc2VydFNlbnNpdGl2ZU9iamVjdCgpCitGVU5LVElPTjoKKyAgICAgdm9pZCBJbnNlcnRTZW5zaXRpdmVPYmplY3Qob2JqZWN0IG9iLCBtaXhlZCAqYXJnKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvY29udGFpbmVyL2ludmVudG9yeS5jCisgICAgIGdlbmVyYWxpemVzIC9zdGQvbGl2aW5nL2ludmVudG9yeS5jCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRnVlZ3QgIm9iIiBpbiBkaWUgQmVuYWNocmljaHRpZ3VuZ3NsaXN0ZW4gZGVzIENvbnRhaW5lcnMgZWluLgorICAgICBXaXJkIHZvbiB0aGluZy9tb3ZpbmcuYyBpbSBaaWVsLUVudmlyb25tZW50IGdlcnVmZW4sIHdlbm4KKyAgICAgUF9TRU5TSVRJVkUgZ2VzZXR6dCBpc3QuCisKK0JFTUVSS1VOR0VOOgorICAgICBTZXR6dCBtYW4gUF9TRU5TSVRJVkUgbmljaHQgYWxzIERlZmF1bHQgc29uZGVybiBzaXR1YXRpb25zYWJoYWVuZ2lnLAorICAgICBkYW5uIG11c3MgbWFuIGF1Y2ggSW5zZXJ0U2Vuc2l0aXZlT2JqZWN0KCkgaW0gRW52aXJvbm1lbnQKKyAgICAgYXVjaCBzZWxic3QgcnVmZW4hCisKK0JFSVNQSUVMOgorICAgICAvLyBGYWNrZWwgKGluaGVyaXRpbmcgbGlnaHRzb3VyY2UpCisgICAgIC8vIHdlbm4gYW5nZXp1ZW5kZXQsIGFlbmRlcnQgZXMgZGllIEVpZ2Vuc2NoYWZ0ZW4gdW5kIHdpcmQgenVtCisgICAgIC8vIGFrdGl2ZW4gT2JqZWt0IC0gZGFzIG11c3MgbWFuIGRlbSBlbnZpcm9ubWVudCgpIG1pdHRlaWxlbgorICAgICBzdGF0aWMgaW50IGxpZ2h0KHN0cmluZyBzdHIpIHsKKyAgICAgIGludCBpOworICAgICAgaT06OmxpZ2h0KHN0cik7CisgICAgICBpZihpICYmIFF1ZXJ5UHJvcChQX0xJR0hUKT4wKSB7CisgICAgICAgU2V0UHJvcChQX1NFTlNJVElWRSwKKyAgICAgICAgKHsoe1NFTlNJVElWRV9JTlZFTlRPUllfVFJJR0dFUixEVF9GSVJFLDEyMH0pfSkpOworICAgICAgIGlmKGVudmlyb25tZW50KCkpCisgICAgICAgIGVudmlyb25tZW50KCktPkluc2VydFNlbnNpdGl2ZU9iamVjdCh0aGlzX29iamVjdCgpLAorCQkJCQkgICAgIFF1ZXJ5UHJvcChQX1NFTlNJVElWRSkpOworICAgICAgfQorICAgICAgcmV0dXJuIGk7CisgICAgIH0KKworICAgICAtIGZhbGxzIGVpbiBlbXBmaW5kbGljaGVzIE9iamVrdCBpbSBlbnZpcm9ubWVudCgpIGlzdCwgZGFubiB3aXJkCisgICAgICAgaW4gZGllc2VtIG51biBldmVudHVlbGwgKFRyZXNob2xkKSB0cmlnZ2VyX3NlbnNpdGl2ZV9pbnYoKQorICAgICAgIGdlcnVmZW4KKworU0lFSEUgQVVDSDoKKyAgICAgUF9TRU5TSVRJVkUKKyAgICAgUmVtb3ZlU2Vuc2l0aXZlT2JqZWN0CisgICAgIGluc2VydF9zZW5zaXRpdmVfaW52X3RyaWdnZXIsIGluc2VydF9zZW5zaXRpdmVfaW52CisgICAgIFBfU0VOU0lUSVZFX0FUVEFDSywgUF9TRU5TSVRJVkVfSU5WRU5UT1JZLCBQX1NFTlNJVElWRV9JTlZFTlRPUllfVFJJR0dFUgorICAgICBDaGVja1NlbnNpdGl2ZUF0dGFjaworCisyNS5BcHIuMjAwMSwgR2xvaW5zb25ATUcKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSW50ZXJuYWxNb2RpZnlBdHRhY2sgYi9kb2MvbGZ1bi9JbnRlcm5hbE1vZGlmeUF0dGFjawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWMyZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSW50ZXJuYWxNb2RpZnlBdHRhY2sKQEAgLTAsMCArMSwzNyBAQAorSW50ZXJuYWxNb2RpZnlBdHRhY2soTCkKKworRlVOS1RJT046CisgICAgIHByb3RlY3RlZCB2b2lkIEludGVybmFsTW9kaWZ5QXR0YWNrKG1hcHBpbmcgYWluZm8pCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvY29tYmF0CisKK0FSR1VNRU5URToKKyAgICAgbWFwcGluZyBhaW5mbwkJV2VydGUgYXVzIGRlciBBdHRhY2sKKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVudCBkYXp1IG5vY2ggQWVuZGVydW5nZW4gYW0gVmVyaGFsdGVuIGRlciBBdHRhY2soKSB2b3JuZWhtZW4genUKKyAgICAga29lbm5lbi4gRGllIFBhcmFtZXRlciB3ZXJkZW4gYWxsZSBwZXIgUmVmZXJlbnogdWViZXJnZWJlbiwgQWVuZGVydW5nZW4KKyAgICAgd2lya2VuIGFsc28gZGlyZWt0IGluIGRlciBBdHRhY2soKSEKKyAgICAgRWluZmFjaCB1ZWJlcnNjaHJlaWJlbiAoYWJlciA6OkludGVybmFsTW9kaWZ5QXR0YWNrKCZhaW5mbykgbmljaHQKKyAgICAgdmVyZ2Vzc2VuIQorCisgICAgIEF1ZmJhdSB2b24gJ2FpbmZvJzoKKyAgICAgKFsgU0lfRU5FTVkgOiAgICAgICAgICAgIG9iamVjdCBBbmdyZWlmZXIsCQkJKC0+IERlZmVuZCkKKyAgICAgICAgU0lfU1BFTEwgOiAgICAgICAgICAgMC8xL2FycmF5IFNwZWxscGFyYW1ldGVyLAkJKC0+IERlZmVuZCkKKyAgICAgICAgUF9XRUFQT04gOiAgICAgICAgICAgLSBvZGVyIFdhZmZlLAorICAgICAgICBTSV9TS0lMTERBTUFHRV9NU0c6ICBzdHJpbmcgQW5ncmlmZnNtZWxkdW5nc2VuZGUgYW4gUmF1bSwKKyAgICAgICAgU0lfU0tJTExEQU1BR0VfTVNHMjogc3RyaW5nIEFuZ3JpZmZzbWVsZHVuZ3NlbmRlIGFuIEthZW1wZmVuZGUsCisgICAgICAgIFNJX1NLSUxMREFNQUdFOiAgICAgIGludCBTY2hhZGVuIGluIFplaG50ZWwgSFAgKFNraWxscyBzY2hvbiBkcmluKQorCQkJCQkJCQkoLT4gRGVmZW5kKSwKKyAgICAgICAgU0lfU0tJTExEQU1BR0VfVFlQRTogc3RyaW5nL3N0cmluZyogU2NoYWRlbnN0eXBlbiwJKC0+IERlZmVuZCkKKyAgICAgICAgUF9XRUFQT05fVFlQRTogICAgICAgc3RyaW5nIFdhZmZlbnR5cCAoY29tYmF0LmgpLAorICAgICAgICBQX1dDOgkJICAgICAtIG9kZXIgaW50IFdDIGRlciBXYWZmZS9IYW5kLAorICAgICAgICBQX05SX0hBTkRTOgkgICAgIC0gb2RlciBpbnQgSGFuZHMgZGVyIFdhZmZlL0hhbmQsCisgICAgIF0pOworCitTSUVIRSBBVUNIOgorICAgICBJbnRlcm5hbE1vZGlmeURlZmVuZChMKQorICAgICBBdHRhY2soTCkKKworMjguMDMuMjAwOCwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSW50ZXJuYWxNb2RpZnlEZWZlbmQgYi9kb2MvbGZ1bi9JbnRlcm5hbE1vZGlmeURlZmVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2YwZDM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSW50ZXJuYWxNb2RpZnlEZWZlbmQKQEAgLTAsMCArMSwyOSBAQAorSW50ZXJuYWxNb2RpZnlEZWZlbmQoTCkKKworRlVOS1RJT046CisgICAgIHByb3RlY3RlZCB2b2lkIEludGVybmFsTW9kaWZ5RGVmZW5kKGludCBkYW0sIG1peGVkIGR0LCBtaXhlZCBzcGVsbCwKKwkJCQkgICAgICBvYmplY3QgZW5lbXkpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvY29tYmF0CisKK0FSR1VNRU5URToKKyAgICAgaW50IGRhbSAgICAgICAgICAgICBTdGFlcmtlIGRlcyBhYnp1d2VocmVuZGVuIEFuZ3JpZmZzIChpbiBIUC8xMCkKKyAgICAgc3RyaW5nL3N0cmluZyogZHQgICBBcnQoZW4pIGRlcyBTY2hhZGVucywgZGVyIGFuZ2VyaWNodGV0IHdlcmRlbiBzb2xsCisgICAgIGludC9tYXBwaW5nIHNwZWxsICAgMCBmdWVyIG5vcm1hbGUgQW5ncmlmZmUgKGtlaW5lIFphdWJlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAxIGZ1ZXIgWmF1YmVyIChTdGFuZGFyZHJ1ZXN0dW5nZW4gaWdub3JpZXJlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nIGZ1ZXIgbWVociBJbmZvcm1hdGlvbmVuCisgICAgIG9iamVjdCBlbmVteSAgICAgICAgZGVyIEZlaW5kL1NjaGFkZW52ZXJ1cnNhY2hlcgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZW50IGRhenUgbm9jaCBBZW5kZXJ1bmdlbiBhbSBWZXJoYWx0ZW4gZGVyIERlZmVuZCgpIHZvcm5laG1lbiB6dQorICAgICBrb2VubmVuLiBEaWUgUGFyYW1ldGVyIHdlcmRlbiBhbGxlIHBlciBSZWZlcmVueiB1ZWJlcmdlYmVuLCBBZW5kZXJ1bmdlbgorICAgICB3aXJrZW4gYWxzbyBkaXJla3QgaW4gZGVyIERlZmVuZCgpIQorICAgICBFaW5mYWNoIHVlYmVyc2NocmVpYmVuLCBhYmVyIDo6SW50ZXJuYWxNb2RpZnlEZWZlbmQoJi4uLiwgJi4uLi4pIG5pY2h0CisgICAgIHZlcmdlc3NlbiEKKworU0lFSEUgQVVDSDoKKyAgICAgSW50ZXJuYWxNb2RpZnlBdHRhY2soTCkKKyAgICAgRGVmZW5kKEwpCisKKzI4LjAzLjIwMDgsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0lzRW5lbXkgYi9kb2MvbGZ1bi9Jc0VuZW15Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDZjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Jc0VuZW15CkBAIC0wLDAgKzEsMzEgQEAKK0lzRW5lbXkoKQorCitGVU5LVElPTjoKKwlpbnQgSXNFbmVteShvYmplY3Qgd2VyKTsKKworREVGSU5JRVJUIElOOgorCS9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKwl3ZXIKKwkgIERhcyBPYmpla3QsIHdlbGNoZXMgZGFyYXVmIHVlYmVycHJ1ZWZ0IHdlcmRlbiBzb2xsLCBvYiBlcworCSAgZGVyemVpdCBhbHMgR2VnbmVyIGJla2FubnQgaXN0LgorCitSVWVDS0dBQkVXRVJUOgorCUZsYWc6IDEgYmVpIEZlaW5kc2NoYWZ0LCAwIHNvbnN0CisKK0JFU0NIUkVJQlVORzoKKwlNaXQgZGllc2VyIEZ1bmt0aW9uIGthbm4gbWFuIHVlYmVycHJ1ZWZlbiwgb2IgZGFzIE9iamVrdCA8d2VyPiwgYWxzbworCWltIE5vcm1hbGZhbGwgZWluIExlYmV3ZXNlbiwgZGVyemVpdCBhbHMgR2VnbmVyIGVya2FubnQgd2lyZC4gTmFjaAorCWVpbmVyIGdld2lzc2VuIFplaXQgbGFldWZ0IGRpZSBGZWluZHNjaGFmdCBhdXRvbWF0aXNjaCBhdXMsIHNvZGFzcworCW1hbiBzaWNoIG5pY2h0IGRhcmF1ZiB2ZXJsYXNzZW4sIGRhc3MgZWluIEdlZ25lciBhdWNoIHp1a3VlbmZ0aWcgYWxzCisJc29sY2hpZ2VyIGVya2FubnQgd2lyZC4gKERpZXNlIFplaXQgYmV0cmFlZ3Qgbm9ybWFsIDMwMCBTZWt1bmRlbi4pCisJU29sY2ggZWluZSBGZWluZHNjaGFmdCBrYW5uIGltIHVlYnJpZ2VuIGF1Y2ggZWluc2VpdGlnIHNlaW4hIE1laHIKKwlkYXp1IGZpbmRldCBtYW4gaW4gZGVyIERva3VtZW50YXRpb24genUgU3RvcEh1bnRGb3IoKSwgZWluZXIKKwlGdW5rdGlvbiwgZGllIEZyaWVkZW4gendpc2NoZW4gR2VnbmVybiBzdGlmdGVuIHNvbGwuCisKK1NJRUhFIEFVQ0g6CisJU2VsZWN0RW5lbXkoKSwgUXVlcnlFbmVtaWVzKCksIFN0b3BIdW50Rm9yKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSAyNiAxNjo0Nzo1MSAxOTk5IGJ5IFBhdHJ5bgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSXNFcXVhbCBiL2RvYy9sZnVuL0lzRXF1YWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA2NjYxZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0lzRXF1YWwKQEAgLTAsMCArMSwzOSBAQAorSXNFcXVhbCgpCisKK0ZVTktUSU9OCisgICAgaW50IElzRXF1YWwob2JqZWN0IG9iKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC91bml0LmMKKworQVJHVU1FTlRFOgorICAgIG9iICAgICAgRGFzIE9iamVrdCBkYXMgZ2VwcnVlZnQgd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBEaWVzZSBGdW5rdGlvbiBwcnVlZnQgb2IgendlaSBPYmpla3RlIHZvbSBnbGVpY2hlbiBUeXAgc2luZCwgYWxzbyBvYgorICAgIHouQi4gb2IgdW5kIHRoaXNfb2JqZWN0KCkgYmVpZGVzIE11ZW56ZW4gc2luZCBvZGVyIGJlaWRlcyBFZGVsc3RlaW5lLgorICAgIEJlaSBlaW5lbSBFcmdlYm5pcyAhPSAwIGZhc3N0IHVuaXQuYyBkaWVzZSB6d2VpIE9iamVrdGUgYXV0b21hdGlzY2gKKyAgICB6dXNhbW1lbiwgd2VubiBvYi0+SXNFcXVhbCh0aGlzX29iamVjdCgpKSBhdWNoIGVpbmVuIFdlcnQgIT0gMCBlcmdpYnQuCisgICAgSGllcmJlaSB3aXJkIGRhcyBJc0VxdWFsKCkgdm9uIGJlaWRlbiBiZXRlaWxpZ3RlbiBPYmpla3RlbiBnZXJ1ZmVuIHVuZCBzaWUKKyAgICBtdWVzc2VuIHVlYmVyZWluc3RpbW1lbiwgZGFzcyBzaWUgZWlnZW50bGljaCBkYXMgZ2xlaWNoZSBPYmpla3Qgc2luZC4KKyAgICBTZWxic3R2ZXJzdGFlbmRsaWNoIGlzdCBkaWVzZSBGdW5rdGlvbiBudXIgaW0gRmFsbGUgdm9uIFVuaXRvYmpla3RlbgorICAgIHNpbm52b2xsLgorCitSVWVDS0dBQkVXRVJUOgorICAgIDAgLSB0aGlzX29iamVjdCgpIGlzdCBuaWNodCB2b20gc2VsYmVuIFR5cCB3aWUgb2IKKyAgICAxIC0gdGhpc19vYmplY3QoKSBpc3Qgdm9tIGdsZWljaGVuIFR5cCB3aWUgb2IKKworQkVJU1BJRUxFOgorICAgIG8gRWluIFVuaXRvYmpla3QgZGFzIHZlcnNjaGllZGVuZSBCZXNjaHJlaWJ1bmdlbiBoYWJlbiBrYW5uLi4uCisKKyAgICAgICBpbnQgSXNFcXVhbChvYmplY3Qgb2IpCisgICAgICAgeworICAgICAgICAgIGlmICghKGludCk6OklzRXF1YWwob2IpKSByZXR1cm4gMDsKKyAgICAgICAgICByZXR1cm4gKFF1ZXJ5UHJvcChQX1NIT1JUKT09b2ItPlF1ZXJ5UHJvcChQX1NIT1JUKSk7CisgICAgICAgfQorCitTSUVIRSBBVUNIOgorICAgIC9zdGQvdW5pdC5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI1LjAxLjIwMTUsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vSXNUZWFtTGVhZGVyIGIvZG9jL2xmdW4vSXNUZWFtTGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTAwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Jc1RlYW1MZWFkZXIKQEAgLTAsMCArMSw0OCBAQAorCitJc1RlYW1MZWFkZXIoKQorCisKK0ZVTktUSU9OOgorICAgICAgICBvYmplY3QgSXNUZWFtTGVhZGVyKCkKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL2xpdmluZy90ZWFtLmMKKworQVJHVU1FTlRFOgorICAgICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIFRlc3RldCwgb2IgZGVyIFNwaWVsZXIgZWluIFRlYW1sZWl0ZXIgaXN0LgorCitSVUVDS0dBQkVXRVJUOgorICAgICAgICBGYWxscyBkZXIgU3BpZWxlciBUZWFtbGVpdGVyIGlzdCwgd2lyZCBkYXMgVGVhbW9iamVrdCB6dXJ1ZWNrZ2VnZWJlbiwKKyAgICAgICAgc29uc3QgMC4KKworQkVJU1BJRUw6CisgICAgICAgIHN0cmluZyBsZWFkZXJfdGVzdChvYmplY3QgcGwpCisgICAgICAgIHsKKyAgICAgICAgIC4uLgorCisgICAgICAgICBpZiAoIG9iamVjdHAocGwtPklzVGVhbUxlYWRlcigpKSApCisgICAgICAgICAgcmV0dXJuICJBbHMgTGVpdGVyIGVpbmVzIFRlYW1zIGhhc3QgRHUgZ3Jvc3NlIFZlcmFudHdvcnR1bmcgenUgIgorICAgICAgICAgICAgInRyYWdlbiEiOworICAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiAiV2VubiBEdSBtYWwgTGVpdGVyIGVpbmVzIFRlYW1zIHNlaW4gbW9lY2h0ZXMsIHNvbGx0ZXN0ICIKKyAgICAgICAgICAgICJEdSBEaXIgdm9yaGVyIGRlciBWZXJhbnR3b3J0dW5nIGJld3Vzc3Qgd2VyZGVuISI7CisgICAgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgICAgVWViZXJzaWNodDogdGVhbWthbXBmCisgICAgICAgIFByb3BlcnRpZXM6IFBfVEVBTSwgUF9BU1NPQ19NRU1CRVJTLCBQX1RFQU1fQVRUQUNLX0NNRCwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX0FVVE9GT0xMT1csIFBfVEVBTV9DT0xPUlMsIFBfVEVBTV9MRUFERVIsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9ORVdNRU1CRVIsIFBfVEVBTV9XQU5URURfUk9XLCBQX1RFQU1fV0lNUFlfUk9XCisgICAgICAgIEJld2VndW5nOiAgIElzVGVhbU1vdmUsIFRlYW1GbGVlCisgICAgICAgIE1pdGdsaWVkZXI6IFRlYW1NZW1iZXJzCisgICAgICAgIEthbXBmOiAgICAgIEFzc29jTWVtYmVyLCBEZUFzc29jTWVtYmVyLCBJbnNlcnRFbmVteVRlYW0sCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdE5lYXJFbmVteSwgU2VsZWN0RmFyRW5lbXkKKyAgICAgICAgUG9zaXRpb25lbjogUHJlc2VudFBvc2l0aW9uLCBQcmVzZW50Um93cywgUHJlc2VudEVuZW15Um93cywKKyAgICAgICAgICAgICAgICAgICAgUHJlc2VudFRlYW1Qb3NpdGlvbiwgU3dhcFJvd3MKKyAgICAgICAgU29uc3RpZ2VzOiAgVGVhbVByZWZpeCwgdGVhbWthbXBmX2ludGVybgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAxNi0wOC0yMDEwLCBHYWJ5bG9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Jc1RlYW1Nb3ZlIGIvZG9jL2xmdW4vSXNUZWFtTW92ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRiMDQxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSXNUZWFtTW92ZQpAQCAtMCwwICsxLDQwIEBACisKK0lzVGVhbU1vdmUoKQorCisKK0ZVTktUSU9OOgorICAgICAgICBvYmplY3QgSXNUZWFtTW92ZSgpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3N0ZC9saXZpbmcvdGVhbS5jCisKK0FSR1VNRU5URToKKyAgICAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBUZXN0ZXQsIG9iIG1vbWVudGFuIGRpZSBBbmdyaWZmc2Jld2VndW5nIGF1c2dlZnVlaHJ0IHdpcmQuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgICAgIEZhbGxzIGRpZSBBbmdyaWZmc2Jld2VndW5nIGdlcmFkZSBhdXNnZWZ1ZWhydCB3aXJkLCB3aXJkIGRhcworICAgICAgICBUZWFtb2JqZWt0IHp1cnVlY2tnZWdlYmVuLCBzb25zdCAwLgorCitCRU1FUktVTkdFTjoKKyAgICAgICAgV2lyZCBpbnRlcm4gYmVub2V0aWd0LCBkYW1pdCBkZXIgQmVncnVlc3N1bmdzc2NobGFnIHZlcnpvZWdlcnQKKyAgICAgICAgd2VyZGVuIGthbm4sIGJpcyBhbGxlIFRlYW1taXRnbGllZGVyIGlocmUgQW5ncmlmZnNiZXdlZ3VuZworICAgICAgICBhdXNnZWZ1ZWhydCBoYWJlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgICAgVWViZXJzaWNodDogdGVhbWthbXBmCisgICAgICAgIFByb3BlcnRpZXM6IFBfVEVBTSwgUF9BU1NPQ19NRU1CRVJTLCBQX1RFQU1fQVRUQUNLX0NNRCwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX0FVVE9GT0xMT1csIFBfVEVBTV9DT0xPUlMsIFBfVEVBTV9MRUFERVIsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9ORVdNRU1CRVIsIFBfVEVBTV9XQU5URURfUk9XLCBQX1RFQU1fV0lNUFlfUk9XCisgICAgICAgIEJld2VndW5nOiAgIFRlYW1GbGVlCisgICAgICAgIE1pdGdsaWVkZXI6IElzVGVhbUxlYWRlciwgVGVhbU1lbWJlcnMKKyAgICAgICAgS2FtcGY6ICAgICAgQXNzb2NNZW1iZXIsIERlQXNzb2NNZW1iZXIsIEluc2VydEVuZW15VGVhbSwKKyAgICAgICAgICAgICAgICAgICAgU2VsZWN0TmVhckVuZW15LCBTZWxlY3RGYXJFbmVteQorICAgICAgICBQb3NpdGlvbmVuOiBQcmVzZW50UG9zaXRpb24sIFByZXNlbnRSb3dzLCBQcmVzZW50RW5lbXlSb3dzLAorICAgICAgICAgICAgICAgICAgICBQcmVzZW50VGVhbVBvc2l0aW9uLCBTd2FwUm93cworICAgICAgICBTb25zdGlnZXM6ICBUZWFtUHJlZml4LCB0ZWFta2FtcGZfaW50ZXJuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE2LTA4LTIwMTAsIEdhYnlsb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0lzVW5pdCBiL2RvYy9sZnVuL0lzVW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2U4YWIwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vSXNVbml0CkBAIC0wLDAgKzEsMjMgQEAKK0lzVW5pdCgpCisKK0ZVTktUSU9OOgorICAgICBpbnQgSXNVbml0KCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC91bml0LmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgaW1tZXIgMSB6dXJ1ZWNrIHVuZCB6ZWlndCBkYW1pdCBhbiwgZGFzcyBlcyBzaWNoCisgICAgIGJlaSBkaWVzZW0gT2JqZWt0IHVtIGVpbiBNZW5nZW5vYmpla3QgaGFuZGVsdC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSBiZWkgYWxsZW4gT2JqZWt0ZW4sIGRpZSAvc3RkL3VuaXQuYyBlcmJlbiwgYW5zb25zdGVuIDAuCisKK1NJRUhFIEFVQ0g6CisgICAgIC9zdGQvdW5pdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoyMDoxOSAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vS2lsbCBiL2RvYy9sZnVuL0tpbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlNDU0MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0tpbGwKQEAgLTAsMCArMSwyNCBAQAorS2lsbCgpCisKK0ZVTktUSU9OOgorCWludCBLaWxsKG9iamVjdCBlbmVteSkKKworQVJHVU1FTlRFOgorCWVuZW15OiBEZXIgYm9lc2UsIGJvZXNlIEZlaW5kLgorCitCRVNDSFJFSUJVTkc6CisJTmFjaCBBdWZydWYgZGVyIEZ1bmt0aW9uIHdpcmQgZGVyIEZlaW5kIGluIGplZGVtCisJaGVhcnRfYmVhdCgpIGF0dGFja2llcnQuCisKK1JVRUNLR0FCRVdFUlQ6CisJMCwgIEZhbGxzIGRlciBGZWluZCBuaWNodCBleGlzdGllcnQKKyAgLTEsIGZhbGxzIGRlciBGZWluZCBlaW4gR2Vpc3QgaXN0CisgIC0yLCBmYWxscyBkZXIgRmVpbmQgUF9OT19BVFRBQ0sgZ2VzZXR6dCBoYXQKKyAgLTMsIGZhbGxzIGRlciBBbmdyZWlmZXIgc2VsYmVyIFBfTk9fQVRUQUNLIGdlc2V0enQgaGF0CisgIC00LCBmYWxscyBkZXIgRmVpbmQgYmVyZWl0cyBhbmdlZ3JpZmZlbiB3dXJkZQorCTEgICBmYWxscyBkZXIgRmVpbmQgZXJmb2xncmVpY2ggYWxzIEZpbmQgcmVnaXN0cmllcnQgd3VyZGUuCisKK0JFTUVSS1VOR0VOOgorCitTSUVIRSBBVUNIOgorCUluc2VydEVuZW15CmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9MZWFyblNraWxsIGIvZG9jL2xmdW4vTGVhcm5Ta2lsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzczZmJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vTGVhcm5Ta2lsbApAQCAtMCwwICsxLDM1IEBACitMZWFyblNraWxsKCkKK0ZVTktUSU9OOgorICAgIHB1YmxpYyB2YXJhcmdzIHZvaWQgTGVhcm5Ta2lsbChzdHJpbmcgc25hbWUsIGludCBhZGQsIGludCBkaWZmKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvc2tpbGxzLmMKKworQVJHVU1FTlRFOgorICAgIHN0cmluZyBzbmFtZSAgICAgZGVyIHp1IGxlcm5lbmRlIFNraWxsCisgICAgc3RyaW5nIGFkZCAgICAgICBBbnphaGwgenUgbGVybmVuZGVyIFNraWxscHVua3RlCisgICAgaW50IGRpZmYgICAgICAgICBTY2h3aWVyaWdrZWl0CisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWUgTWV0aG9kZSBsYWVzc3QgZWluZW4gaW50ZXJha3RpdmVuIChlaW5nZWxvZ2d0ZW4pIFNwaWVsZXIgZGVuCisgICAgU2tpbGwgJ3NuYW1lJyB1bSAnYWRkJyBQdW5rdGUgbGVybmVuLgorCisgICAgRGFiZWkgd2lyZCBzaWNoZXJnZXN0ZWxsdCwgZGFzcyAnYWRkJyBkZW4gV2VydCBNQVhfU0tJTExFQVJOIG5pY2h0CisgICAgdWViZXJzY2hyZWl0ZXQsIGRlciBTa2lsbCBuaWNodCB2ZXJzY2h3aW5kZXQgdW5kIGZ1ZXIgdWViZXJnZW9yZG5ldGUKKyAgICBTa2lsbHMgKFNJX0lOSEVSSVQpIGRpZXNlciB1ZWJlcmdlb3JkbmV0ZSBTa2lsbCBhdWNoIGVpbmVuIExlcm5lZmZla3QKKyAgICBlcmZhZWhydC4KKworICAgIFdpcmQgekIgdm9uIExlYXJuIChzcGVsbGJvb2spIHVuZCBTcGVsbFN1Y2Nlc3MgKHNwZWxsYm9vaykgZ2VydWZlbi4KKworU0lFSEUgQVVDSDoKKyAgICBTa2lsbHMgTGVybmVuOiAgTW9kaWZ5U2tpbGwsIExpbWl0QWJpbGl0eQorICAgICogTnV0enVuZzogICAgICBVc2VTcGVsbCwgVXNlU2tpbGwKKyAgICAqIEFiZnJhZ2VuOiAgICAgUXVlcnlTa2lsbCwgUXVlcnlTa2lsbEFiaWxpdHkKKyAgICAqIE1vZGlmaWthdGlvbjogTW9kaWZ5U2tpbGxBdHRyaWJ1dGUsIFF1ZXJ5U2tpbGxBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgIFF1ZXJ5U2tpbGxBdHRyaWJ1dGVNb2RpZmllciwgUmVtb3ZlU2tpbGxBdHRyaWJ1dGVNb2RpZmllcgorICAgICAgKiBQcm9wZXJ0aWVzOiBQX1NLSUxMX0FUVFJJQlVURVMsIFBfU0tJTExfQVRUUklCVVRFX09GRlNFVFMKKyAgICAqIHNvbnN0aWc6ICAgICAgc3BydWNoZXJtdWVkdW5nCisgICAgKiBQcm9wZXJ0aWVzOiAgIFBfTkVXU0tJTExTCisgICAgU3BlbGxib29rOiAgICAgIExlYXJuLCBTcGVsbFN1Y2Nlc3MKKworMy4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9MZWF2ZSBiL2RvYy9sZnVuL0xlYXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYjUyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9MZWF2ZQpAQCAtMCwwICsxLDQwIEBACitMZWF2ZSgpCisKK0ZVTktUSU9OOgorICAgICBpbnQgTGVhdmUoKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RyYW5zcG9ydC5jCisKK0FSR1VNRU5URToKKyAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICBXZW5uIHNpY2ggZGVyIFNwaWVsZXIgYXVmIGVpbmVtIFRyYW5zcG9ydGVyIGJlZmluZGV0LCB1bmQgZGllc2VyIHNpY2gKKyAgICAgbW9tZW50YW4gYW4gZWluZXIgSGFsdGVzdGVsbGUgbGllZ3QsIHZlcmxhZXNzdCBkZXIgU3BpZWxlciBkZW4KKyAgICAgVHJhbnNwb3J0ZXIuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIE51bGwsIHdlbm4gZGVyIFNwaWVsZXIgZGVuIFRyYW5zcG9ydGVyIG5pY2h0IHZlcmxhc3NlbiBrb25udGUsIHNvbnN0CisgICAgIHVuZ2xlaWNoIE51bGwuCisKK0JFTUVSS1VOR0VOOgorICAgICBFcyB3ZXJkZW4ga2VpbmUgVGVzdHMgZHVyY2hnZWZ1ZWhydCwgb2IgZGVyIFRyYW5zcG9ydGVyIHVlYmVyaGF1cHQKKyAgICAgYW5nZXNwcm9jaGVuIHd1cmRlISBEYXMgbXVzcyBtYW4gc2VsYmVyIG1hY2hlbi4KKworQkVJU1BJRUxFOgorCisgICAgIGludCBteUxlYXZlKHN0cmluZyBzdHIpCisgICAgIHsKKyAgICAgICBpZiAoc3RyICYmIGlkKHN0cikpCisgICAgICAgICByZXR1cm4gTGVhdmUoKTsKKworICAgICAgIG5vdGlmeV9mYWlsKCJXYXMgd2lsbHN0IER1IHZlcmxhc3Nlbj9cbiIpOworICAgICAgIHJldHVybiAwOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIEVudGVyKCksIC9zdGQvdHJhbnNwb3J0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjIwOjMwIDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9MaW1pdEFiaWxpdHkgYi9kb2MvbGZ1bi9MaW1pdEFiaWxpdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhMjgxMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL0xpbWl0QWJpbGl0eQpAQCAtMCwwICsxLDQ3IEBACitMaW1pdEFiaWxpdHkoKQorRlVOS1RJT046CisgICAgcHJvdGVjdGVkIHZhcmFyZ3MgbWl4ZWQgTGltaXRBYmlsaXR5KG1peGVkIHNpbmZvLCBpbnQgZGlmZikKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL3NraWxscy5jCisKK0FSR1VNRU5URToKKyAgICBtaXhlZCBzaW5mbyAgICAgIFNraWxsLUluZm9ybWF0aW9uZW4KKyAgICBpbnQgZGlmZiAgICAgICAgIFNjaHdpZXJpZ2tlaXQKKworQkVTQ0hSRUlCVU5HOgorICAgIFNldHp0IGVpbiBNYXhpbXVtIGFuIFNraWxsZmVydGlna2VpdCBiYXNpZXJlbmQgYXVmIGRlciBTY2h3aWVyaWdrZWl0CisgICAgdW5kIGRlbSBQX0xFVkVMIGRlcyBTcGllbGVycy4KKyAgICAKKyAgICBGb2xnZW5kIGVpbmUgS29waWUgKCEpIGRlciBUYWJlbGxlIGF1cyAvc3RkL2xpdmluZy9za2lsbHM6CisgICAgZGlmZnxsdmwgMTp8ICAgMzp8ICAgNzp8IDEwOnwgMTM6fCAxNjp8IDE5OnwgMjI6fCAyNTp8IDI4OnwgMzE6fCAzNDp8CisgICAgLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICAgIC01MHwgICA4MyV8ICA4NCV8ICA4NiV8IDg3JXwgODklfCA5MCV8IDkyJXwgOTMlfCA5NSV8IDk2JXwgOTglfCA5OSV8CisgICAgIC0xMHwgICA2OSV8ICA3MiV8ICA3NCV8IDc3JXwgODAlfCA4MiV8IDg1JXwgODglfCA5MSV8IDkzJXwgOTYlfCA5OSV8CisgICAgICAgMHwgICA2NiV8ICA2OSV8ICA3MiV8IDc1JXwgNzglfCA4MSV8IDg0JXwgODclfCA5MCV8IDkzJXwgOTYlfCA5OSV8CisgICAgICAxMHwgICA2MiV8ICA2NSV8ICA2OSV8IDcyJXwgNzUlfCA3OSV8IDgyJXwgODUlfCA4OSV8IDkyJXwgOTUlfCA5OCV8CisgICAgICAyMHwgICA1OSV8ICA2MiV8ICA2NiV8IDcwJXwgNzMlfCA3NyV8IDgwJXwgODQlfCA4OCV8IDkxJXwgOTUlfCA5OCV8CisgICAgICAzMHwgICA1NSV8ICA1OSV8ICA2MyV8IDY3JXwgNzElfCA3NSV8IDc5JXwgODMlfCA4NyV8IDkwJXwgOTQlfCA5OCV8CisgICAgICA0MHwgICA1MiV8ICA1NiV8ICA2MCV8IDY1JXwgNjklfCA3MyV8IDc3JXwgODElfCA4NiV8IDkwJXwgOTQlfCA5OCV8CisgICAgICA1MHwgICA0OSV8ICA1MyV8ICA1OCV8IDYyJXwgNjclfCA3MSV8IDc2JXwgODAlfCA4NSV8IDg5JXwgOTQlfCA5OCV8CisgICAgIDEwMHwgICAzMiV8ICAzOCV8ICA0NCV8IDUwJXwgNTYlfCA2MiV8IDY4JXwgNzQlfCA4MCV8IDg2JXwgOTIlfCA5OCV8CisgICAgIDE1MHwgICAxNSV8ICAyMiV8ICAzMCV8IDM3JXwgNDUlfCA1MiV8IDYwJXwgNjclfCA3NSV8IDgyJXwgOTAlfCA5NyV8CisgICAgIDIwMHwgICAtMiV8ICAgNyV8ICAxNiV8IDI1JXwgMzQlfCA0MyV8IDUyJXwgNjElfCA3MCV8IDc5JXwgODglfCA5NyV8CisgICAgIDI1MHwgIC0xOSV8ICAtOCV8ICAgMiV8IDEyJXwgMjMlfCAzMyV8IDQ0JXwgNTQlfCA2NSV8IDc1JXwgODYlfCA5NiV8CisgICAgIDMwMHwgIC0zNiV8IC0yNCV8IC0xMiV8ICAwJXwgMTIlfCAyNCV8IDM2JXwgNDglfCA2MCV8IDcyJXwgODQlfCA5NiV8CisgICAgIDQwMHwgIC03MCV8IC01NSV8IC00MCV8LTI1JXwtMTAlfCAgNSV8IDIwJXwgMzUlfCA1MCV8IDY1JXwgODAlfCA5NSV8CisgICAgIDUwMHwgLTEwNCV8IC04NiV8IC02OCV8LTUwJXwtMzIlfC0xNCV8ICA0JXwgMjIlfCA0MCV8IDU4JXwgNzYlfCA5NCV8CisgICAgIDYwMHwgLTEzOCV8LTExNyV8IC05NiV8LTc1JXwtNTQlfC0zMyV8LTEyJXwgIDklfCAzMCV8IDUxJXwgNzIlfCA5MyV8CisKK1NJRUhFIEFVQ0g6CisgICAgU2tpbGxzIExlcm5lbjogIExlYXJuU2tpbGwsIE1vZGlmeVNraWxsCisgICAgKiBOdXR6dW5nOiAgICAgIFVzZVNwZWxsLCBVc2VTa2lsbAorICAgICogQWJmcmFnZW46ICAgICBRdWVyeVNraWxsLCBRdWVyeVNraWxsQWJpbGl0eQorICAgICogTW9kaWZpa2F0aW9uOiBNb2RpZnlTa2lsbEF0dHJpYnV0ZSwgUXVlcnlTa2lsbEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyLCBSZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyCisgICAgICAqIFByb3BlcnRpZXM6IFBfU0tJTExfQVRUUklCVVRFUywgUF9TS0lMTF9BVFRSSUJVVEVfT0ZGU0VUUworICAgICogc29uc3RpZzogICAgICBzcHJ1Y2hlcm11ZWR1bmcKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9ORVdTS0lMTFMKKyAgICBTcGVsbGJvb2s6ICAgICAgTGVhcm4sIFNwZWxsU3VjY2VzcworCiszLiBPa3QgMjAxMSBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vTWF0ZXJpYWxHcm91cCBiL2RvYy9sZnVuL01hdGVyaWFsR3JvdXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1MWNhZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL01hdGVyaWFsR3JvdXAKQEAgLTAsMCArMSwzNyBAQAorTWF0ZXJpYWxHcm91cCgpCitGVU5LVElPTjoKKyAgICAgaW50IE1hdGVyaWFsR3JvdXAobWFwcGluZyBtYXRzLCBzdHJpbmcgZ3JwKQorCitERUZJTklFUlQgSU46CisgICAgIC9wL2RhZW1vbi9tYXRlcmlhbGRiLmMgKE1BVEVSSUFMREIpCisKK0FSR1VNRU5URToKKyAgICAgbWFwcGluZyBtYXRzIC0gTWF0ZXJpYWxpZW5tYXBwaW5nCisgICAgIHN0cmluZyBncnAgICAtIE1hdGVyaWFsaWVuZ3J1cHBlCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllIE1hdGVyaWFsaWVuIGltIE1hcHBpbmcgd2VyZGVuIGF1ZiBadWdlaG9lcmlna2VpdCB6dSBkZXIgR3J1cHBlCisgICAgIHVudGVyc3VjaHQgdW5kIGRlciBHZXNhbXRhbnRlaWwgZGllc2VyIE1hdGVyaWFsaWVuZ3J1cHBlIGFtIE1hcHBpbmcKKyAgICAgaW4gUHJvemVudCB6dXJ1ZWNrZ2VnZWJlbiAod2VubiBkYXMgTWFwcGluZyBzaWNoIGF1ZiAxMDAlIGF1ZmFkZGllcnQpLgorCitSVUVDS0dBQkVXRVJUOgorICAgICBpbnQgLSBwcm96ZW50dWFsZXIgQW50ZWlsIGRlciBNYXRlcmlhbGllbmdydXBwZSAtMTAwIC4uLiAxMDAgJQorCitCRUlTUElFTEU6CisgICAgIGlmKE1BVEVSSUFMREItPk1hdGVyaWFsR3JvdXAoCisJCShbTUFUX01JU0NfU1RPTkU6NDAsTUFUX0FNRVRIWVNUOjUwLE1BVF9NSVNDX01FVEFMOjEwXSksCisJCU1BVEdST1VQX0pFV0VMKT41MCkKKyAgICAgIHdyaXRlKCJPaCBqYSwgZGFyaW4gc2luZCBzZWhyIHZpZWxlIEVkZWxzdGVpbmUhXG4iKTsKKworQkVNRVJLVU5HRU46CisgICAgIFdpcmQgdm9uIC9zdGQvdGhpbmcvZGVzY3JpcHRpb246OlF1ZXJ5TWF0ZXJpYWxHcm91cCgpIGdlcnVmZW4uCisgICAgIEJpdHRlIGFuIE9iamVrdGVuIGF1Y2ggUXVlcnlNYXRlcmlhbEdyb3VwKCkgdmVyd2VuZGVuLgorCitTSUVIRSBBVUNIOgorICAgICBLb256ZXB0ZToJICBtYXRlcmlhbCwgbWF0ZXJpYWxlcmtlbm51bmcKKyAgICAgR3J1bmRsZWdlbmQ6IFBfTUFURVJJQUwsIC9zeXMvdGhpbmcvbWF0ZXJpYWwuaAorICAgICBNYXN0ZXI6CSAgQWRkTWF0ZXJpYWwoKSwgQ29udk1hdGVyaWFsTGlzdCgpCisJCSAgR3JvdXBOYW1lKCksIE1hdGVyaWFsTmFtZSgpLAorCQkgIEdldEdyb3VwTWVtYmVycygpLCBHZXRNYXRNZW1iZXJzaGlwKCkKKworNy4gTWFpIDIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9NYXRlcmlhbExpc3QgYi9kb2MvbGZ1bi9NYXRlcmlhbExpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjUyNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL01hdGVyaWFsTGlzdApAQCAtMCwwICsxLDY1IEBACitNYXRlcmlhbExpc3QoTCkKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIHN0cmluZyBNYXRlcmlhbExpc3QoaW50IGNhc3VzLCBtaXhlZCBpZGluZikKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorICAgICBpbnQgY2FzdXMJIC0gZGVyIEZhbGwsIGluIGRlbSBkaWUgTWF0ZXJpYWxpZW4gZGVrbGluaWVydCB3ZXJkZW4gc29sbGVuCisgICAgIG1peGVkIGlkaW5mIC0gRGluZ2UsIHdlbGNoZSBkaWUgRmFlaGlna2VpdGVuIGRlcyBFcmtlbm5lbnMgYmVlaW5mbHVzc2VuOgorCQkgICBFaW56ZWxuZSBXZXJ0ZToKKyAgICAgICAgICAgICAgICAgICAqIHg6IGFsbGdlbWVpbmUgRXJrZW5udW5nIC0xMDAgLi4uIDEwMAorICAgICAgICAgICAgICAgICAgICogd2hvOiBkZXIgU3BpZWxlciAtIFBfTUFURVJJQUxfS05PV0xFREdFIHdpcmQgYWJnZWZyYWd0CisgICAgICAgICAgICAgICAgICAgKiBmdW46IHdpcmQgZXZhbHVpZXJ0CisgICAgICAgICAgICAgICAgICAgKiB3aGF0LCBrYW5uIGZvbGdlbmRlcyBlbnRoYWx0ZW46CisgICAgICAgICAgICAgICAgICAgICAtIEVpbnRyYWcgZnVlciBNYXRlcmlhbGllbiAoW01BVF9YWFg6LTEwMC4uLjEwMF0pCisgICAgICAgICAgICAgICAgICAgICAtIEVpbnRyYWcgZnVlciBNYXRlcmlhbGllbmdydXBwZW4gKGRpdG8pCisgICAgICAgICAgICAgICAgICAgICAtIChbTUFURVJJQUxfU1lNTUVUUklDX1JFQ09HTklaQUJJTElUWTogbWl4ZWQgbWddKQorICAgICAgICAgICAgICAgICAgICAgICAqIG1nIGVpbiBBcnJheToKKyAgICAgICAgICAgICAgICAgICAgICAgICAoe01BVEdST1VQX1gxLGludCB6MSwgTUFUR1JPVVBfWDIsIGludCB6MiwgLi4ufSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB3b2JlaSBiZWkgWnVnZWhvZXJpZ2tlaXQgdm9uIHN0cmluZyBtYXQgenUgR3J1cHBlCisgICAgICAgICAgICAgICAgICAgICAgICAgejxuPiBhdWYgZGllIEZhZWhpZ2tlaXQgYWRkaWVydCwgYW5kZXJuZmFsbHMgZGF2b24KKyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0cmFoaWVydCB3aXJkCisJCSAgIEFycmF5IG1pdCBvYmlnZW4gV2VydGVuOgorICAgICAgICAgICAgICAgICAgIC0gYWxsZSBQYXJhbWV0ZXIgZGVzIEFycmF5cyBzaW5kIG9wdGlvbmFsIHVuZCBhZGRpdGl2CisgICAgICAgICAgICAgICAgICAgLSAoe2ludCB4LCBvYmplY3Qgd2hvLCBtYXBwaW5nIHdoYXQsIGNsb3N1cmUgZnVufSkKKworQkVTQ0hSRUlCVU5HOgorICAgICBMaXN0ZXQgZGllIE1hdGVyaWFsaWVuIGF1ZiwgYXVzIGRlbmVuIGVpbiBPYmpla3QgYmVzdGVodC4KKyAgICAgRGFiZWkgaGFlbmd0IGRpZSBHZW5hdWlna2VpdCBkZXIgTWF0ZXJpYWxlcmtlbm51bmcgdm9uIGlkaW5mIGFiLiBELmguCisgICAgIGplIG5hY2ggZGVuIEZhZWhpZ2tlaXRlbi9kZXIgYW5nZWdlYmVuZW4gRmFlaGlna2VpdCB3aXJkIHpCIFdvbGZyYW0KKyAgICAgYWxzICJXb2xmcmFtIiBvZGVyIG51ciBhbHMgIk1ldGFsbCIgZXJrYW5udC4KKworICAgICBXZW5uIGVpbiBTcGllbGVyIGV0d2FzIGlkZW50aWZpemllcnQsIHNvbGx0ZSBhdWNoIFRQIHVlYmVyZ2ViZW4gd2VyZGVuLAorICAgICBiZWkgTlBDcyBrb2VubnRlIGRhcyBhbmRlcnMgYXVzc2VoZW4uCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgIFN0cmluZyBtaXQgTGlzdGUgZGVyIE1hdGVyaWFsaWVuLgorCitCRU1FUktVTkdFTjoKKyAgICAgLSBlcyB3ZXJkZW4gbnVyIGRpZSBNYXRlcmlhbGllbiBhbmdlZ2ViZW4sIG5pY2h0IGRpZSBNZW5nZS4KKyAgICAgLSBydWZ0IENvbnZNYXRlcmlhbExpc3QoKSBhbiBkZXIgTUFURVJJQUxEQgorCitCRUlTUElFTEU6CisgICAgIC8vIHNpbXBlbAorICAgICB3cml0ZSgiRGVyIEdlZ2Vuc3RhbmQgYmVzdGVodCBhdXMiK29iLT5NYXRlcmlhbExpc3QoV0VNLFRQKSsiLlxuIikKKyAgICAgLy8gLT4gIkRlciBHZWdlbnN0YW5kIGJlc3RlaHQgYXVzIEdvbGQsIFNpbGJlciB1bmQgUnViaW4uXG4iCisKKyAgICAgLy8ga29tcGxleGVyCisgICAgIG9iLT5TZXRQcm9wKFBfTUFURVJJQUwsIChbUF9OSVRST0dMWUNFUklORTo5MCxQX0dVTlBPV0RFUjoxMF0pKTsKKyAgICAgd3JpdGUoIkRhcyBlbnRoYWVsdCAiK29iLT5NYXRlcmlhbExpc3QoV0VSLFRQKSsiLlxuIik7CisgICAgIC8vIC0+ICJEYXMgZW50aGFlbHQgU2Nod2FyenB1bHZlciB1bmQgTml0cm9nbHljZXJpbi4iCisKK1NJRUhFIEFVQ0g6CisgICAgIEtvbnplcHRlOgkgIG1hdGVyaWFsLCBtYXRlcmlhbGVya2VubnVuZworICAgICBHcnVuZGxlZ2VuZDogUF9NQVRFUklBTCwgL3N5cy90aGluZy9tYXRlcmlhbC5oCisgICAgIE1ldGhvZGVuOiAgICBRdWVyeU1hdGVyaWFsKCksIFF1ZXJ5TWF0ZXJpYWxHcm91cCgpCisgICAgIExpc3RlbjoJICBBbGxNYXRlcmlhbHMoKSwgQWxsR3JvdXBzKCksIER1bXAoKQorCQkgIG1hdGVyaWFsbGlzdGUsIG1hdGVyaWFsZ3J1cHBlbgorICAgICBNYXN0ZXI6CSAgQWRkTWF0ZXJpYWwoKSwgQ29udk1hdGVyaWFsTGlzdCgpLCBNYXRlcmlhbEdyb3VwKCksCisJCSAgR3JvdXBOYW1lKCksIE1hdGVyaWFsTmFtZSgpLAorCQkgIEdldEdyb3VwTWVtYmVycygpLCBHZXRNYXRNZW1iZXJzaGlwKCkKKyAgICAgU29uc3RpZ2VzOgkgIFBfTUFURVJJQUxfS05PV0xFREdFCisKKzcuIE1haSAyMDA0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vTWF0ZXJpYWxOYW1lIGIvZG9jL2xmdW4vTWF0ZXJpYWxOYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzM4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9NYXRlcmlhbE5hbWUKQEAgLTAsMCArMSw3MiBAQAorTWF0ZXJpYWxOYW1lKCkKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIHN0cmluZyBNYXRlcmlhbE5hbWUoc3RyaW5nIG1hdCwgaW50IGNhc3VzLCBtaXhlZCBpZGluZikKKworREVGSU5JRVJUIElOOgorICAgICAvcC9kYWVtb24vbWF0ZXJpYWxkYi5jIChNQVRFUklBTERCKQorCitBUkdVTUVOVEU6CisgICAgIHN0cmluZyBtYXQJIC0gZGFzIHp1IGVya2VubmVuZGUgTWF0ZXJpYWwKKyAgICAgaW50IGNhc3VzCSAtIGRlciBGYWxsCisgICAgIG1peGVkIGlkaW5mIC0gRGluZ2UsIHdlbGNoZSBkaWUgRmFlaGlna2VpdGVuIGRlcyBFcmtlbm5lbnMgYmVlaW5mbHVzc2VuCisJCSAgIChzaWVoZSAibWFuIE1hdGVyaWFsTGlzdCIpCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gc3VjaHQgdW50ZXIgQmVydWVja3NpY2h0aWd1bmcgZGVyIEVya2VubnVuZ3NiZS0KKyAgICAgc2NocmFlbmt1bmdlbiBkZXMgTWF0ZXJpYWxzIHVuZCBGYWVoaWdrZWl0ZW4gZGVzIFNwaWVsZXJzIGRlbgorICAgICBLbGFybmFtZW4gZGVzIE1hdGVyaWFscyBoZXJhdXMgdW5kIGdpYnQgZGVuIHp1cnVlY2suCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgIHN0cmluZzogTWF0ZXJpYWxuYW1lIG9kZXIgZ2VuZXJlbGxlciBOYW1lLgorCitCRUlTUElFTEU6CisgICAgIC8vIGRlciBoaWVyIG1hZyBhbGxlIGV4aXN0aWVyZW5kZW4gSnV3ZWxlbiwgYXVjaCB3ZW5uIHdlbGNoZSBlcmdhZW56dAorICAgICAvLyB3ZXJkZW4gc29sbHRlbgorICAgICAvLyBQYXJhbWV0ZXI6IDEuIGVpbiBKdXdlbCwgMi4gQ2FzdXMsIDMuIDEwMCUgRXJrZW5udW5nIC0gb2IgZXIgc2llCisgICAgIC8vIGJlaW0gRW1wZmFuZyBkYW5uIGF1Y2ggenUgMTAwJSBlcmtlbm50LCBzdGVodCBoaWVyIG5pY2h0IQorICAgICBzdHJpbmcqIGxpa2VpdDsKKyAgICAgbGlrZWl0PU1BVEVSSUFMREItPkdldEdyb3VwTWVtYmVycyhNQVRHUk9VUF9KRVdFTCk7CisgICAgIC4uLgorICAgICB3cml0ZSgiRGVyIEFsdGUgc2FndDogSWNoIG1hZyAiKworCSAgIE1BVEVSSUFMREItPk1hdGVyaWFsTmFtZShsaWtlaXRbcmFuZG9tKHNpemVvZihsaWtlaXQpKV0sIFdFTiwgMTAwKSsKKwkgICAiLlxuIik7CisgICAgIC4uLgorCisgICAgIC8vIGVpbiB3ZWlzZXIgc2NobWllZDoKKyAgICAgaW50IGk7CisgICAgIHN0cmluZyAqbWF0LCBtbmFtZSwgbWdyb3VwOworICAgICBtYXQ9bV9pbmRpY2VzKG9iLT5xdWVyeXByb3AocF9tYXRlcmlhbCkpOworICAgICBpPXNpemVvZihtYXQpOworCisgICAgIHdyaXRlKCJkZXIgc2NobWllZCBzYWd0OiAiK29iLT5uYW1lKHdlcikrIiBiZXN0ZWh0IGF1cyAuLi5cbiIpOworICAgICB3aGlsZShpLS0pIHsKKyAgICAgIC8vIGRlbiBuYW1lbiBlcmtlbm5lbi9hdXNzcHJlY2hlbjoKKyAgICAgIC8vIG1hdGVyaWFsaWVuIHdlcmRlbiBhbGxnZW1laW4gZ2FueiBzY2hsZWNodCBlcmthbm50ICh6dSA1JSksIGFiZXIKKyAgICAgIC8vIGFsbGVzIGF1cyBtZXRhbGwgd2lyZCB6dSArMTAwJSBndXQgZXJrYW5udCAuLi4KKyAgICAgIG1uYW1lPW1hdGVyaWFsZGItPm1hdGVyaWFsbmFtZShtYXRbaV0sIHdlciwKKwkgICAgICh7NSwgKFttYXRlcmlhbF9zeW1tZXRyaWNfcmVjb2duaXphYmlsaXR5OgorCQkJKHttYXRncm91cF9tZXRhbCwgMTAwfSldKX0pKTsKKworICAgICAgLy8gdW5kIG51ciBtZXRhbGxlIGFuYWx5c2llcmVuIC4uLgorICAgICAgaWYobWF0ZXJpYWxkYi0+bWF0ZXJpYWxncm91cCgoW21hdFtpXToxMDBdKSxtYXRncm91cF9tZXRhbCk+PTEwMCkgeworICAgICAgIGludCBqOworICAgICAgIHN0cmluZyAqbWdyOworICAgICAgIG1ncj1tYXRlcmlhbGRiLT5nZXRtYXRtZW1iZXJzaGlwKG1hdFtpXSk7CisgICAgICAgaj1zaXplb2YobWdyKTsKKyAgICAgICBtZ3JvdXA9IiBnZWhvZXJ0IHp1ICI7CisgICAgICAgd2hpbGUoai0tKSB7CisgICAgICAgIG1ncm91cCs9bWF0ZXJpYWxkYi0+Z3JvdXBuYW1lKG1ncltqXSk7CisgICAgICAgIGlmKGo+MCkgbWdyb3VwKz0iLCAiOworICAgICAgIH0KKyAgICAgIH0gZWxzZSBtZ3JvdXA9IiBrZW5uZSBpY2ggbmljaHQiOworICAgICAgcHJpbnRmKCIlLTEyLjEyczogJXNcbiIsbW5hbWUsIG1ncm91cCk7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgS29uemVwdGU6CSAgbWF0ZXJpYWwsIG1hdGVyaWFsZXJrZW5udW5nCisgICAgIEdydW5kbGVnZW5kOiBQX01BVEVSSUFMLCAvc3lzL3RoaW5nL21hdGVyaWFsLmgKKyAgICAgTWFzdGVyOgkgIEFkZE1hdGVyaWFsKCksIENvbnZNYXRlcmlhbExpc3QoKSwgTWF0ZXJpYWxHcm91cCgpLAorCQkgIEdyb3VwTmFtZSgpCisJCSAgR2V0R3JvdXBNZW1iZXJzKCksIEdldE1hdE1lbWJlcnNoaXAoKQorCis3LiBNYWkgMjAwNCBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL01heUFkZE9iamVjdCBiL2RvYy9sZnVuL01heUFkZE9iamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTAyZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vTWF5QWRkT2JqZWN0CkBAIC0wLDAgKzEsMzMgQEAKK01heUFkZE9iamVjdCgpCisKK0ZVTktUSU9OOgorICAgICBpbnQgTWF5QWRkT2JqZWN0KG9iamVjdCBvYik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9jb250YWluZXIvcmVzdHJpY3Rpb25zLmMKKworQVJHVU1FTlRFOgorICAgICBvYiAtIERhcyBPYmplY3QgYmVpIGRlbSBnZXBydWVmdCB3ZXJkZW4gc29sbCwgb2IgZXMgbm9jaCBpbiBkZW4KKyAgICAgICAgICBDb250YWluZXIgcGFzc3QuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgV2VubiBlaW4gT2JqZWt0IGluIGVpbmVuIENvbnRhaW5lciBiZXdlZ3Qgd2lyZCwgcHJ1ZWZ0IG1vdmUoKSB1ZWJlcgorICAgICBkaWVzZSBGdW5rdGlvbiwgb2IgZGFzIE9iamVrdCB1ZWJlcmhhdXB0IG5vY2ggaW4gZGVuIEJlaGFlbHRlciBoaW5laW4KKyAgICAgcGFzc3QuIERhenUgdWViZXJnaWJ0IG1vdmUoKSBkYXMgT2JqZWt0IGRhcyBpbiBkZW4gQ29udGFpbmVyIGJld2VndAorICAgICB3ZXJkZW4gc29sbC4gKEluIFJhZXVtZW4gaXN0IGRpZXNlIEZ1bmt0aW9uZW4gdWViZXJzY2hyaWViZW4gdW5kCisgICAgIGxpZWZlcnQgaW1tZXIgVHJ1ZSB6dXJ1ZWNrLikKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSAtIHdlbm4gZGFzIE9iamVrdCBub2NoIHZvbSBDb250YWluZXIgYXVmZ2Vub21tZW4gd2VyZGVuIGthbm4uCisgICAgIDAgc29uc3QuCisKK0JFTUVSS1VOR0VOOgorICAgICBpbnZpcy1PYmpla3RlIHBhc3NlbiBpbW1lciBpbiBkZW4gQ29udGFpbmVyIGhpbmVpbiEKKyAgICAgbW92ZSgpIHJ1ZnQgZGllc2UgRnVua3Rpb24gbmljaHQgYXVmLCB3ZW5uIGluIGRlbiBGbGFncyBNX05PQ0hFQ0sKKyAgICAgZ2VzZXR6dCB3YXIhCisKK1NJRUhFIEFVQ0g6CisgICAgIE1heUFkZFdlaWdodCgpLCBQcmV2ZW50SW5zZXJ0KCksIG1vdmUoKSwgL3N0ZC9jb250YWluZXIvcmVzdHJpY3Rpb25zLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMjMuMDkuMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vTWF5QWRkV2VpZ2h0IGIvZG9jL2xmdW4vTWF5QWRkV2VpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYzRlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9NYXlBZGRXZWlnaHQKQEAgLTAsMCArMSw0NyBAQAorTWF5QWRkV2VpZ2h0KCkKKworRlVOS1RJT046CisgICAgIGludCBNYXlBZGRXZWlnaHQoaW50IGdld2ljaHQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvY29udGFpbmVyL3Jlc3RyaWN0aW9ucy5jCisKK0FSR1VNRU5URToKKyAgICAgZ2V3aWNodAorICAgICAgICAgIERhcyB6dSBwcnVlZmVuZGUgR2V3aWNodC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBXZW5uIGVpbiBPYmpla3QgZWluIGVpbmVuIEJlaGFlbHRlciBiZXdlZ3Qgd2lyZCwgcHJ1ZWZ0IG1vdmUoKSB1ZWJlcgorICAgICBkaWVzZSBGdW5rdGlvbiwgb2IgZGFzIE9iamVrdCB1ZWJlcmhhdXB0IG5vY2ggaW4gZGVuIEJlaGFlbHRlciBoaW5laW4KKyAgICAgcGFzc3QuIERhenUgdWViZXJnaWJ0IG1vdmUoKSBkaWVzZXIgRnVua3Rpb24gZGFzIEdld2ljaHQgZGVzIHp1CisgICAgIGJld2VnZW5kZW4gT2JqZWt0ZXMuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDAsIHdlbm4gZGVyIEJlaGFlbHRlciBub2NoIGVpbiBnZXdpY2h0IEdyYW1tIHdpZWdlbmRlcyBPYmpla3QgYXVmbmVobWVuCisgICAgIGthbm4sIC0xIGltIGFuZGVyZW4gRmFsbC4KKworQkVNRVJLVU5HRU46CisgICAgIG1vdmUoKSBydWZ0IGRpZXNlIEZ1bmt0aW9uIG5pY2h0IGF1Ziwgd2VubiBpbiBkZW4gRmxhZ3MgTV9OT0NIRUNLCisgICAgIGdlc2V0enQgd2FyIQorCitCRUlTUElFTEU6CisgICAgIERpZSBlbnRzcHJlY2hlbmRlIEFiZnJhZ2UgaW4gL3N0ZC90aGluZy9tb3ZpbmcuYyBzaWVodCBldHdhCisgICAgIGZvbGdlbmRlcm1hc3NlbiBhdXM6CisKKyAgICAgaW50IHdlaWdodDsKKworICAgICAuLi4KKyAgICAgd2VpZ2h0ID0gUXVlcnlQcm9wKFBfVE9UQUxfV0VJR0hUKTsgICAvLyBCZWhhZWx0ZXI/IEphID0+IEdlc2FtdGdld2ljaHQKKyAgICAgaWYgKCF3ZWlnaHQpCisgICAgICAgd2VpZ2h0ID0gUXVlcnlQcm9wKFBfV0VJR0hUKTsgICAgICAgLy8gTmVpbjogZWluZmFjaGVzIEdld2ljaHQKKworICAgICBpZiAoemllbC0+TWF5QWRkV2VpZ2h0KHdlaWdodCkgPT0gLTEpIC8vIFBhc3N0IGVzIG5vY2ggcmVpbj8KKyAgICAgICByZXR1cm4gTUVfVE9PX0hFQVZZOyAgICAgICAgICAgICAgICAvLyBOZWluLCBlbnRzcHIuIEZlaGxlciB6dXJ1ZWNrZ2ViZW4KKworICAgICAuLi4KKworU0lFSEUgQVVDSDoKKyAgICAgTWF5QWRkT2JqZWN0KCksIFByZXZlbnRJbnNlcnQoKSwgbW92ZSgpLCAvc3RkL2NvbnRhaW5lci9yZXN0cmljdGlvbnMuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAyMy4wOS4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9NZXNzYWdlIGIvZG9jL2xmdW4vTWVzc2FnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjM1ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vTWVzc2FnZQpAQCAtMCwwICsxLDIzIEBACitNZXNzYWdlKCkKKworRlVOS1RJT046CisgICAgICAgIHZhcmFyZ3MgaW50IE1lc3NhZ2Uoc3RyaW5nIHN0ciwgaW50IGZsYWcpCisKK0FSR1VNRU5URToKKyAgICAgICAgc3RyOiBEZW4genUgdWViZXJtaXR0ZWxuZGVuIFRleHQuCisJZmxhZzogQmVzY2hyZWlidCBkaWUgQXJ0IGRlciBNZWxkdW5nIG5hZWhlciwgc2llaGUKKwkgICAgICAvc3lzL3BsYXllci9jb21tLmgKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBFaW5lbSBTcGllbGVyIHdpcmQgZGVyIFRleHQgc3RyIHVlYmVybWl0dGVsdC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgICAgMSBiZWkgZXJmb2xncmVpY2hlciBVZWJlcm1pdHRsdW5nCisgICAgICAgIDAgd2VubiBkZXIgS29ib2xkIGFrdGl2IHdhcgorICAgICAgIDwwIHdlbm4gU3BpZWxlciBvZGVyIHZlcndlbmRldGVzIFZlcmIgaWdub3JpZXJ0CisgICAgICAgICAgd2VyZGVuCisKK1NJRUhFIEFVQ0g6CisgICAgIFBfSUdOT1JFLCBUZXN0SWdub3JlKCkKKworMTIuIE1haSAyMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Nb2RpZnlRdWVzdFRpbWUgYi9kb2MvbGZ1bi9Nb2RpZnlRdWVzdFRpbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyMGJhZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL01vZGlmeVF1ZXN0VGltZQpAQCAtMCwwICsxLDQ0IEBACitNb2RpZnlRdWVzdFRpbWUoKQorCitGVU5LVElPTjoKKyAgICAgICAgaW50IE1vZGlmeVF1ZXN0VGltZShzdHJpbmcgcXVlc3RuYW1lLCBpbnQgemVpdCkKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL3BsYXllci9xdWVzdHMuYworCitBUkdVTUVOVEU6CisgICAgICAgIHF1ZXN0bmFtZQorICAgICAgICAgIFF1ZXN0bmFtZSwgd2llIGVyIGltIFF1ZXN0bWFzdGVyIGVpbmdldHJhZ2VuIHd1cmRlLgorICAgICAgICB6ZWl0CisgICAgICAgICAgWmVpdHB1bmt0LCB6dSBkZW0gZGllIFF1ZXN0IGdlbG9lc3Qgd3VyZGUKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgICAgIDEgOiBRdWVzdHplaXRwdW5rdCBlcmZvbGdyZWljaCBuYWNoZ2V0cmFnZW4KKyAgICAgICAgLTEgOiBrZWluZSBadWdyaWZmc3JlY2h0ZSAobnVyIEVNKyB1bmQgZGVyIFRhZ2VidWNobWFzdGVyIGVybGF1YnQpCisgICAgICAgIC0yIDogUXVlc3RsaXN0ZSBpbSBTcGllbGVyb2JqZWt0IGlzdCB1bmVyd2FydGV0IGtlaW4gTWFwcGluZworICAgICAgICAtMyA6IFNwaWVsZXIgaGF0IGRpZXNlIFF1ZXN0IG5vY2ggbmljaHQgYmVzdGFuZGVuCisgICAgICAgIC00IDoga2VpbiBndWVsdGlnZXIgWmVpdHB1bmt0IHVlYmVyZ2ViZW4gKGtlaW4gSW50ZWdlciwgV2VydCA8IC0xCisgICAgICAgICAgICAgb2RlciBXZXJ0ID4gdGltZSgpKS4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIGthbm4gZGVyIFplaXRwdW5rdCBuYWNoZ2V0cmFnZW4gd2VyZGVuLCB6dQorICAgICAgICBkZW0gZWluIFNwaWVsZXIgZWluZSBiZXN0aW1tdGUgUXVlc3QgYmVyZWl0cyBnZWxvZXN0IGhhdC4gCisgICAgICAgIEFscyBRdWVzdG5hbWUgd2lyZCBkYXp1IGRlciBOYW1lIGFuZ2VnZWJlbiwgZGVyIGltIFF1ZXN0bWFzdGVyIAorICAgICAgICBlaW5nZXRyYWdlbiBpc3QuIERlciBaZWl0cHVua3QgaXN0IGFscyBJbnRlZ2VyLVdlcnQgaW0gdWVibGljaGVuCisgICAgICAgIHRpbWUoKS1Gb3JtYXQgYW56dWdlYmVuLiBVZWJlcmdpYnQgbWFuIC0xIGFscyA8emVpdD4sIGRhbm4gd2lyZAorICAgICAgICBkZXIgVGFnZWJ1Y2htYXN0ZXIgZXJuZXV0IHZlcnN1Y2hlbiwgZGFzIExvZ2ZpbGUgZWluenVsZXNlbiwgCisgICAgICAgIHdlbm4gZGVyIFNwaWVsZXIgZGFzIG5hZWNoc3RlIG1hbCBzZWluIEFiZW50ZXVlcnRhZ2VidWNoIGxpZXN0LgorCitISU5XRUlTOgorICAgICAgICBEaWUgRnVua3Rpb24gbWt0aW1lKCkgaXN0IG51ZXR6bGljaCwgd2VubiBkZXIgWmVpdHB1bmt0IGRlcyAKKyAgICAgICAgQmVzdGVoZW5zIGVpbmVyIFF1ZXN0IG1hbnVlbGwgcmVrb25zdHJ1aWVydCB3ZXJkZW4gbXVzcywgZGVyCisgICAgICAgIFplaXRwdW5rdCBhYmVyIG51ciBhbHMgRGF0dW1zLS9aZWl0YW5nYWJlIGluIFRleHRmb3JtIHZvcmxpZWd0IAorICAgICAgICAoZXR3YSBhdXMgZWluZW0gTG9nZmlsZSBvZGVyIGF1cyBkZXIgUXVlc3QtRmVlZGJhY2ttYWlsKS4KKworU0lFSEUgQVVDSDoKKyAgICAgICAgL3NlY3VyZS9xdWVzdG1hc3Rlci5oLCAvb2JqL3Rvb2xzL3F1ZXN0dG9vbAorICAgICAgICBHaXZlUXVlc3QoTCkKKyAgICAgICAgbWt0aW1lKEUpLCBkdGltZShTRSkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWnVsZXR6dCBnZWFlbmRlcnQ6IE1vbiwgMjcuIEphbi4gMjAxNSwgQXJhdGhvcm4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL01vZGlmeVNraWxsIGIvZG9jL2xmdW4vTW9kaWZ5U2tpbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkNjIyZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL01vZGlmeVNraWxsCkBAIC0wLDAgKzEsNzMgQEAKK01vZGlmeVNraWxsKCkKK0ZVTktUSU9OOgorICAgIHB1YmxpYyB2YXJhcmdzIHZvaWQgTW9kaWZ5U2tpbGwoc3RyaW5nIHNuYW1lLCBtaXhlZCB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlmZiwgc3RyaW5nIGdpbGRlKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvc2tpbGxzLmMKKworQVJHVU1FTlRFOgorICAgIHN0cmluZyBzbmFtZSAgICAgZGVyIHp1IGFlbmRlcm5kZSBTa2lsbAorICAgIG1peGVkIHZhbCAgICAgICAgQWVuZGVydW5nc3dlcnQ6IGludCBmdWVyIFNJX1NLSUxMQUJJTElUWSwgc29uc3QgbWFwcGluZworICAgIGludCBkaWZmICAgICAgICAgU2Nod2llcmlna2VpdCAob3B0aW9uYWw6IGRlZmF1bHQgaXN0IGV4aXN0aWVyZW5kZXMgZGlmZikKKyAgICBzdHJpbmcgZ2lsZGUgICAgIEdpbGRlIChvcHRpb25hbDogZGVmYXVsdCBpc3QgZWlnZW5lIEdpbGRlKQorCitCRVNDSFJFSUJVTkc6CisgICAgTWl0IGRlciBNZXRob2RlIGthbm4gbWFuIGRpZSBXZXJ0ZSBlaW5lcyBTa2lsbHMvU3BlbGxzIHZlcmFlbmRlcm4uIERhYmVpCisgICAgd2lyZCBlaW4gU2tpbGwgaW1tZXIgaW4gZWluIE1hcHBpbmcgdW1nZXdhbmRlbHQgKFNraWxscy9TcGVsbHMga29lbm5lbgorICAgIGF1Y2ggZWluZmFjaCBudXIgaWhyZW4gU2tpbGx3ZXJ0IGVudGhhbHRlbiwgZGllc2UgaXN0IGFlcXVpdmFsZW50IHp1CisgICAgZWluZW0gTWFwcGluZyBtaXQgKFtTSV9TS0lMTEFCSUxJVFk6PFNraWxsd2VydD5dKS4KKworICAgIElzdCAndmFsJyBlaW4gaW50LCB3aXJkIGRpZXNlcyBhbHMgU0lfU0tJTExBQklMSVRZIGdlc2V0enQuIEZhbGxzIGRlcgorICAgIFNraWxsIG51ciBlaW4gaW50IHdhciwgd2lyZCBlaW4gJ2RpZmYnIT0wIGFscyBTSV9ESUZGSUNVTFRZIGdlc2V0enQuCisKKyAgICBJc3QgJ3ZhbCcgZWluIE1hcHBpbmcsIHdpcmQgZGllc2VzIHp1bSBTa2lsbG1hcHBpbmcgYWRkaWVydC4KKyAgICAKKyAgICBFdHdhaWdlIFNJX1NLSUxMQUJJTElUWS1BZW5kZXJ1bmdlbiBsYXVmZW4gZGFuYWNoIG5vY2ggZHVyY2ggTGltaXRBYmlsaXR5LgorCitCRUlTUElFTEU6CisgICAgLy8gIzFhOiBMZXJuZSBlaW5lbiBTcGVsbC9Ta2lsbCAoZWluZXIgR2lsZGUpCisgICAgY2FzdGVyLT5Nb2RpZnlTa2lsbCgiZmV1ZXJiYWxsIiwgTUFYX0FCSUxJVFksIDEwMCwgImFiZW50ZXVyZXIiKQorICAgIC8vICMxYjogLi4uIG9kZXIgLi4uCisgICAgY2FzdGVyLT5Nb2RpZnlTa2lsbCgiZmV1ZXJiYWxsIiwgKFtTSV9TS0lMTEFCSUxJVFk6IE1BWF9BQklMSVRZXSksIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYmVudGV1cmVyIikKKyAgICAvLyAjMWM6IC4uLiBvZGVyIGZ1ZXIgZWluZW4gQWJlbnRldXJlciAuLi4KKyAgICBjYXN0ZXItPk1vZGlmeVNraWxsKCJmZXVlcmJhbGwiLCAoW1NJX1NLSUxMQUJJTElUWTogTUFYX0FCSUxJVFldKSwgMTAwKTsKKyAgICAKKyAgICAvLyAjMjogU2V0emUgZWluZSBTa2lsbC1GdW5rdGlvbiBmdWVyIGVpbmVuIEthbXBmc2tpbGwgZGVzIEtsZXJ1cworICAgIHRoaXNfcGxheWVyKCktPk1vZGlmeVNraWxsKEZJR0hUKFdUX0NMVUIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbU0lfU0tJTExGVU5DOiAiS2V1bGVua2FtcGYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lfRElGRklDVUxUWTogMTAwXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwLCAia2xlcnVzIik7CisKKyAgICAvLyAjMzogU3BlaWNoZXJlIGltIFNraWxsIChhbHNvIFNwaWVsZXIpIGVpbmUgT3B0aW9uIGZ1ZXIgZGllc2VuIFNraWxsCisgICAgLy8gVm9ydGVpbDogZGllc2VyIEVpbnRyYWcgd2lyZCBkZW0gU3BlbGwgaW1tZXIgdWViZXJnZWJlbgorICAgIGNhc3Rlci0+TW9kaWZ5U2tpbGwoImJsaXR6IiwgKFsia2xlcnVzX3NwZWxsX29wdGlvbiI6IDJdKSk7CisKKyAgICAoQ29kZSBpbiAvZG9jL2JlaXNwaWVsZS90ZXN0b2JqZWt0ZS9tb2RpZnlza2lsbHNwZWxsX3Rlc3QpCisgICAgLy8gIzQ6IExlcm5lIGVpbmVuIHVuYWJoYWVuZ2lnZW4gU3BlbGw6IEFDSFRVTkcKKyAgICAvLyBkaWVzZXIgU3BlbGwgZnVua3Rpb25pZXJ0IG51ciBzb2xhbmdlLCB3aWUgZGllIENsb3N1cmUgZXhpc3RpZXJ0LAorICAgIC8vIFNJX1NLSUxMQUJJTElUWSB1bmQgU3BlbGwgYmxlaWJlbiBqZWRvY2ggaW0gU3BpZWxlciBnZXNwZWljaGVydCAoISkKKyAgICB0aGlzX3BsYXllcigpLT5Nb2RpZnlTa2lsbCgiZm5yeCIsCisgICAgICAoW1NJX0NMT1NVUkU6CisgICAgICAgICAgZnVuY3Rpb24gaW50IChvYmplY3QgY2FzdGVyLCBzdHJpbmcgc2tpbGwsIG1hcHBpbmcgc2luZikgeworICAgICAgICAgICAgY2FzdGVyLT5MZWFyblNraWxsKCJmbnJ4IiwgMSk7CisgICAgICAgICAgICB0ZWxsX29iamVjdChjYXN0ZXIsICJQZW5nISBEZWluIFNraWxsd2VydCBzdGVpZ3QgYXVmICIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc3Rlci0+UXVlcnlTa2lsbEFiaWxpdHkoImZucngiKSsiLlxuIik7CisgICAgICAgICAgICByZXR1cm4gRVJGT0xHOworICAgICAgICAgIH0sCisgICAgICAgIFNJX1NLSUxMQUJJTElUWTogODQzMl0pLAorICAgICAgMTAwLAorICAgICAgIkFOWSIpOworCitTSUVIRSBBVUNIOgorICAgIFNraWxscyBMZXJuZW46ICBMZWFyblNraWxsLCBMaW1pdEFiaWxpdHkKKyAgICAqIE51dHp1bmc6ICAgICAgVXNlU3BlbGwsIFVzZVNraWxsCisgICAgKiBBYmZyYWdlbjogICAgIFF1ZXJ5U2tpbGwsIFF1ZXJ5U2tpbGxBYmlsaXR5CisgICAgKiBNb2RpZmlrYXRpb246IE1vZGlmeVNraWxsQXR0cmlidXRlLCBRdWVyeVNraWxsQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICBRdWVyeVNraWxsQXR0cmlidXRlTW9kaWZpZXIsIFJlbW92ZVNraWxsQXR0cmlidXRlTW9kaWZpZXIKKyAgICAgICogUHJvcGVydGllczogUF9TS0lMTF9BVFRSSUJVVEVTLCBQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTCisgICAgKiBzb25zdGlnOiAgICAgIHNwcnVjaGVybXVlZHVuZworICAgICogUHJvcGVydGllczogICBQX05FV1NLSUxMUworCiszLiBPa3QgMjAxMSBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL01vZGlmeVNraWxsQXR0cmlidXRlIGIvZG9jL2xmdW4vTW9kaWZ5U2tpbGxBdHRyaWJ1dGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViMzY2OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL01vZGlmeVNraWxsQXR0cmlidXRlCkBAIC0wLDAgKzEsMTA1IEBACitNb2RpZnlTa2lsbEF0dHJpYnV0ZSgpCitGVU5LVElPTjoKKyAgICBwdWJsaWMgaW50IE1vZGlmeVNraWxsQXR0cmlidXRlKHN0cmluZyBhdHJuYW1lLCBtaXhlZCB2YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVyYXRpb24pCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9za2lsbF9hdHRyaWJ1dGVzLmMKKworQVJHVU1FTlRFOgorICAgIDxhdHJuYW1lPiAgIHN0cmluZworICAgICAgICAgICAgICAgIE5hbWUgZGVzIHp1IHZlcmFlbmRlcm5kZW4gQXR0cmlidXRlcworICAgICAgICAgICAgICAgIChEZWZpbmllcnQgaW4gL3N5cy9saXZpbmcvc2tpbGxfYXR0cmlidXRlcy5oKQorCisgICAgPHZhbHVlPiAgICAgaW50IG9kZXIgY2xvc3VyZQorICAgICAgICAgICAgICAgIFdlcnQgZGVzIE1vZGlmaWthdG9ycworICAgICAgICAgICAgICAgIG9kZXIKKyAgICAgICAgICAgICAgICBlaW5lIENsb3N1cmUsIHdlbGNoZSBiZWkgQWJmcmFnZSBkZXMgYmV0cmVmZmVuZGVuIFNBcworICAgICAgICAgICAgICAgIGFiZ2VmcmFndCB1bSBkZW4gTW9kaWZpa2F0b3IgenUgYmVzdGltbWVuLgorCisgICAgPGR1cmF0aW9uPiAgaW50CisgICAgICAgICAgICAgICAgRGF1ZXIgaW4gU2VrdW5kZW4KKworQkVTQ0hSRUlCVU5HOgorICAgIEFlbmRlcnQgdGVtcG9yYWVyLCBkLmguIGZ1ZXIgZWluZSBiZXN0aW1tdGUgWmVpdCwgZWluIFNraWxsLUF0dHJpYnV0CisgICAgZWluZXMgTGViZXdlc2VuLCBpbmRlbSBlaW4gTW9kaWZpa2F0b3IgaGluenVnZWZ1ZWd0IHdpcmQuCisgICAgCisgICAgRGVyIFN0YW5kYXJkd2VydCBlaW5lcyBTQSB3aXJkIHZvbiBQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTIGZlc3RnZWxlZ3QKKyAgICBvZGVyIGlzdCAxMDAsIHdlbm4gYmVzYWd0ZSBQcm9wZXJ0eSBsZWVyIGlzdC4KKyAgICBBbGxlIE1vZGlmaWthdG9yZW4gKG5lZ2F0aXYgd2llIHBvc2l0aXYpIHdlcmRlbiBhZGRpZXJ0IHVuZCBiaWxkZW4KKyAgICB6dXNhbW1lbiBtaXQgZGVtIFN0YW5kYXJkd2VydCBlaW5lIEdlc2FtdHN1bW1lLgorICAgIEJlaSBhbGxlbiBTQXMgYXVzc2VyIFNBX1FVQUxJVFkgd2lyZCBkaWVzZSBHZXNhbXRzdW1tZSBub2NoIG1pdAorICAgIFNBX1FVQUxJVFkgKHdlbGNoZXMgc2ljaCBkYW1pdCBhdWYgYWxsZSBhbmRlcmVuIFNraWxsLUF0dHJpYnV0ZQorICAgIGF1c3dpcmt0KSBtdWx0aXBsaXppZXJ0IHVuZCBkYXMgRXJnZWJuaXMgc3RlbGx0IGRlbiBFbmR3ZXJ0IGRlcyBTQSBkYXIuCisgICAgKEJlaXNwaWVsIHMudS4pCisKKyAgICBEZXIgV2VydCBlaW5lcyBNb2RpZmlrYXRvcnMgbXVzcyB6d2lzY2hlbiAtMTAwMCB1bmQgMTAwMCBsaWVnZW4uIERlcgorICAgIEdlc2FtdHdlcnQgZWluZXMgU0Ega2FubiAxMCBuaWNodCB1bnRlci0gdW5kIDEwMDAgbmljaHQgdWViZXJzY2hyZWl0ZW4uCisKKyAgICBGYWxsZSA8dmFsdWU+IGVpbmUgQ2xvc3VyZSBpc3QsIHdpcmQgZGllc2UgQ2xvc3VyZSBqZWRlc21hbAorICAgIGF1c2dlZnVlaHJ0LCB3ZW5uIGRhcyBlbnRzcHJlY2hlbmRlIFNBIGFiZ2VmcmFndCB3aXJkLiBEZXIKKyAgICBSdWVja2dhYmV3ZXJ0IGRpZXNlciBDbG9zdXJlIHN0ZWxsdCBkYW5uIGRlbiBXZXJ0IGRlcyBNb2RpZmlrYXRvcnMKKyAgICBkYXIuIEF1Y2ggZGllc2VyIG11c3Mgendpc2NoZW4gLTEwMDAgdW5kIDEwMDAgbGllZ2VuLiBHaWJ0IGRpZQorICAgIENsb3N1cmUga2VpbmVuIGludCB6dXJ1ZWNrLCB3aXJkIGRlciBNb2RpZmlrYXRvciBnZWxvZXNjaHQuCisKKyAgICBHdWVsdGlnZSBTa2lsbC1BdHRyaWJ1dGUgc2luZCBtb21lbnRhbjoKKyAgICAqIFNBX1FVQUxJVFk6ICAgIEFsbGdlbWVpbmUgUXVhbGl0YWV0OiB3aXJrdCBzaWNoIGF1ZiBhbGxlIGFuZGVyZW4KKyAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSBhdWNoIGF1cyAobXVsdHBsaWthdGl2IGF1ZiBCYXNpcyAxMDApCisgICAgKiBTQV9EQU1BR0U6ICAgICBTY2hhZGVuLCBkZW4gZGFzIExlYmV3ZXNlbiBtYWNodAorICAgICogU0FfU1BFRUQ6ICAgICAgR2VzY2h3aW5kaWdrZWl0IGRlcyBMZWJld2VzZW5zICh6QiBBbmdyaWZmZS9SdW5kZSkKKyAgICAqIFNBX0RVUkFUSU9OOiAgIFNwZWxsLS9Ta2lsbGRhdWVyCisgICAgKiBTQV9FTkVNWV9TQVZFOiBpZGVudGlzY2ggenUgU0FfU1BFTExfUEVORVRSQVRJT04gKE9CU09MRVQhKQorICAgICogU0FfU1BFTExfUEVORVRSQVRJT046IENoYW5jZSBkZXMgX0Nhc3RlcnNfLCBlaW5lbiBTcGVsbCBkdXJjaCBlaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQX05PTUFHSUMgZHVyY2h6dWtyaWVnZW4uCisgICAgKiBTQV9SQU5HRTogICAgICBSZWljaHdlaXRlIGRlcyBMZWJld2VzZW5zIChlaGVyIHVuYmVudXR6dCkKKyAgICAqIFNBX0VYVEVOU0lPTjogICJBdXNkZWhudW5nIiBiZWkgR3J1cHBlbi0vRmxhZWNoZW5zcGVsbHM6IEZpbmRHcm91cE4vUAorCitSVUVDS0dBQkVXRVJUOgorICAgIFNBX01PRF9PSyAgICAgICAgICAgICAgd2VubiBkZXIgTW9kaWZpa2F0b3IgZ2VzZXR6dCB3dXJkZQorICAgIFNBX1RPT19NQU5ZX01PRFMgICAgICAgd2VubiBkaWUgbWF4LiBBbnphaGwgYW4gTW9kcyBzY2hvbiBlcnJlaWNodCBpc3QuCisgICAgU0FfTU9EX1RPT19TTUFMTCAgICAgICB3ZW5uIGRlciBNb2RpZmlrYXRvciB6dSBrbGVpbiBpc3QgCisgICAgU0FfTU9EX1RPT19CSUcgICAgICAgICB3ZW5uIGRlciBNb2RpZmlrYXRvciB6dSBncm9zcyBpc3QKKyAgICBTQV9NT0RfSU5WQUxJRF9BVFRSICAgIHdlbm4gZGFzIGdld3VlbnNjaHRlIFNBIGdhciBuaWNodCBleGlzdGllcnQKKyAgICBTQV9NT0RfSU5WQUxJRF9PQkpFQ1QgIHdlbm4gZGFzIHNldHplbmRlIE9iamVrdCB1bmd1ZWx0aWcgaXN0CisgICAgU0FfTU9EX0lOVkFMSURfVkFMVUUgICB3ZW5uIGRlciBNb2RpZmlrYXRvciB1bmd1ZWx0aWcgaXN0CisgICAgV2VubiBtYW4gbnVyIHdpc3NlbiB3aWxsLCBvYiBkaWUgT3BlcmF0aW9uIGVyZm9sZ3JlaWNoIHdhciwgZW1wZmllaGx0CisgICAgZXMgc2ljaCwgYXVmID09IFNBX01PRF9PSyB6dSBwcnVlZmVuLgorCitCRU1FUktVTkdFTjoKKyAgICBOYWNoZGVtIGVpbiBPYmpla3QsIHdlbGNoZXMgTW9kaWZpa2F0b3JlbiBzZXR6dGUsIHplcnN0b2VydCB3dXJkZSwKKyAgICB3ZXJkZW4gZGllIE1vZGlmaWthdG9yZW4gc3BhZXRlc3RlbnMgdW5ndWVsdGlnLCBzb2JhbGQgaW4gZGVtCisgICAgbWFuaXB1bGllcnRlbiBMZWJld2VzZW4gZXJuZXV0IE1vZGlmeVNraWxsQXR0cmlidXRlKCkgZ2VydWZlbiB3aXJkIQorICAgIEJlaSBDbG9zdXJlcyBpc3QgZGVyIE1vZCBzb2ZvcnQgd2VnLgorCitCRUlTUElFTEU6CisgICAgLy8gc2VpIFBMIGVpbiBTcGllbGVyLCBkZW4gbWVpbiBOUEMgc2Nod2FlY2hlbiB3aWxsOgorICAgIFBMLT5Nb2RpZnlTa2lsbEF0dHJpYnV0ZShTQV9RVUFMSVRZLCAtNzUsIDEzKTsKKyAgICAvLyBGdWVyIDEzcyB3aXJkIFNBX1FVQUxJVFkgdW0gNzUgcmVkdXppZXJ0LiBEaWVzIHdpcmt0IHNpY2ggYXVmIGFsbGUKKyAgICAvLyBhbmRlcmVuIFNBcyBhdXMhIChzLiBkcml0dGVzIEJlaXNwaWVsKQorCisgICAgLy8gc2VpIFBMIGVpbiBMZWJld2VzZW4sIHdlbGNoZW0gaWNoIGZ1ZXIgMTFzIDIgU2NobGFlZ2UgcHJvIEthbXBmcnVuZGUKKyAgICAvLyB6dXNhZXR6bGljaCBnZWJlbiBtb2VjaHRlOgorICAgIFBMLT5Nb2RpZnlTa2lsbEF0dHJpYnV0ZShTQV9TUEVFRCwgMjAwLCAxMSk7CisgICAgLy8gd2VubiBrZWluZSB3ZWl0ZXJlcyBNb2RpZmlrYXRvcmVuIHdpcmtlbiwgaGF0IFBMIGpldHp0IDMgU2NobGFlZ2UKKyAgICAvLyBwcm8gS2FtcGZydW5kZSAoQmFzaXN3ZXJ0IDEwMCArIDIwMCA9PSAzMDAgPT4gMykuCisKKyAgICBBbmdlbm9tbWVuLCBlaW4gTGViZXdlc2VuIGhhdCBlaW5lbiBCYXNpc3dlcnQgdm9uIDEzMCBhdWYgU0FfU1BFRUQgdW5kCisgICAgMTAwIGF1ZiBTQV9RVUFMSVRZIChQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTKSB1bmQgbnVuIDMgTW9kaWZpa2F0b3JlbgorICAgIGdlc2V0enQ6IFNBX1NQRUVEICsxMDAsIFNBX1NQRUVEIC0zMCB1bmQgU0FfUVVBTElUWSB2b24gLTEwOgorICAgIFp1bmFlY2hzdCB3aXJkIFNBX1FVQUxJVFkgYmVzdGltbXQ6IDEwMCAtIDEwID0gOTAgID0+IDAuOQorICAgIEFuc2NobGllc3NlbmQgd2lyZCBTQV9TUEVFRCBiZXN0aW1tdDogMTMwICsgMTAwIC0gMzAgPSAyMDAgPT4gMgorICAgIE51biB3aXJkIFNBX1NQRUVEIG5vY2ggbWl0IFNBX1FVQUxJVFkgbXVsdGlwbGl6aWVydDogMiAqIDAuOSA9IDEuOAorICAgIERhcyBMZWJld2VzZW4gaGF0IG51biBhbHNvIGltIEVuZGVmZmVrdCAxLjggU2NobGFlZ2UgcHJvIEthbXBmcnVuZGUuCisKKyAgICAKK1NJRUhFIEFVQ0g6CisgICAgU2tpbGxzIExlcm5lbjogIExlYXJuU2tpbGwsIE1vZGlmeVNraWxsLCBMaW1pdEFiaWxpdHkKKyAgICAqIE51dHp1bmc6ICAgICAgVXNlU3BlbGwsIFVzZVNraWxsCisgICAgKiBBYmZyYWdlbjogICAgIFF1ZXJ5U2tpbGwKKyAgICAqIE1vZGlmaWthdGlvbjogUXVlcnlTa2lsbEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyLCBSZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyCisgICAgICAqIFByb3BlcnRpZXM6IFBfU0tJTExfQVRUUklCVVRFUywgUF9TS0lMTF9BVFRSSUJVVEVfT0ZGU0VUUworICAgICogc29uc3RpZzogICAgICBzcHJ1Y2hlcm11ZWR1bmcsIHNraWxsX2luZm9fbGlzdGUKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9ORVdTS0lMTFMKKworNS4gT2t0IDIwMTEgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL01vcmUgYi9kb2MvbGZ1bi9Nb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzNmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Nb3JlCkBAIC0wLDAgKzEsNTYgQEAKK01vcmUoKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBwdWJsaWMgdm9pZCBNb3JlKHN0cmluZyB0eHQsIGludCBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4ZWQgY3RybCwgbWl4ZWQgKmN0cmxhcmdzLCBpbnQgZmxhZ3MpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdXRpbC9wYWdlci5jCisKK0FSR1VNRU5URToKKyAgICAgdHh0ICAtIGVudHdlZGVyIGVpbiBUZXh0IGRlciBhdXNnZWdlYmVuIHdlcmRlbiBzb2xsLCBvZGVyIGVpbiBmaWxlbmFtZS4KKyAgICAgZmlsZSAtIGRhcyBmbGFnIGZpbGUgZ2lidCBhbiwgb2IgZXMgc2ljaCBiZWkgPHR4dD4gdW0gZWluZW4gdGV4dCBvZGVyCisgICAgICAgICAgICBlaW5lbiBGaWxlbmFtZW4gaGFuZGVsdC4gQmVpIGVpbmVtIEZpbGVuYW1lbiB3aXJkIGRlciBJbmhhbHQKKyAgICAgICAgICAgIGRpZXNlcyBGaWxlcyBlaW5nZWxlc2VuIHVuZCBhdXNnZWdlYmVuLgorICAgICBjdHJsIC0gRWluZSBjbG9zdXJlLCBkaWUgYXVmZ2VydWZlbiB3aXJkLCBmYWxscyBrZWluIDx0eHQ+IGFuZ2VnZWJlbgorICAgICAgICAgICAgd3VyZGUuCisgICAgIGN0cmxhcmdzIC0gY3RybGFyZ3Mgd2lyZCBhbHMgUGFyYW1ldGVyIGFuIGN0cmwgdWViZXJnZWJlbi4KKyAgICAgZmxhZ3MgLSBmbGFncyB3aXJkIG1pdCBkZW4gaW0gU3BpZWxlciBkZWZpbmllcnRlbiBQX01PUkVfRkxBR1MKKyAgICAgICAgICAgICBrb21iaW5pZXJ0LgorCitCRVNDSFJFSUJVTkc6CisKKyAgICAgTW9yZSgpIGRpZW50IGRlciBBdXNnYWJlIHZvbiBUZXh0ZW4gYW4gU3BpZWxlci4gTWl0IEhpbGZlIGVpbmVzCisgICAgIFBMLT5Nb3JlKHR4dCkgb2RlciBQTC0+TW9yZSh0eHQsIDEpIGlzdCBlcyBzZWhyIGVpbmZhY2ggbGFlbmdlcmUgVGV4dGUKKyAgICAgYW4gU3BpZWxlciBhdXN6dWdlYmVuLiBCZWkgZGVyIEF1c2dhYmUgd2VyZGVuIGRpZSBwZXJzb2VubGljaGVuCisgICAgIEVpbnN0ZWxsdW5nZW4gZGVzIFNwaWVsZXJuICh3aWUgei5iLiBaZWlsZW4gcHJvIEJpbGRzY2hpcm1zZWl0ZSkKKyAgICAgYXV0b21hdGlzY2ggYmVydWVja3NpY2h0aWd0IHVuZCBkZXIgVGV4dCBkYWR1cmNoIGdnZi4gemVyc3R1ZWNrZWx0CisgICAgIHVuZCBpbiBtZWhyZXJlbiBTY2hyaXR0ZW4gbmFjaGVpbmFuZGVyIGFuZ2V6ZWlndC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFTUVSS1VOR0VOOgorICAgICBCZWltIGVpbmxlc2VuIGRlcyBGaWxlcyBzaW5kIGRpZSBMZXNlcmVjaHRlIGRlcyBTcGllbGVyIGluIGRlbSBNb3JlKCkKKyAgICAgYXVmZ2VydWZlbiB3aXJkIHZvbiBCZWRldXR1bmcgdW5kIG5pY2h0IGRpZSBSZWNodGUgZGVzIE9iamVrdGVzIGRhcworICAgICBNb3JlKCkgYXVmcnVmdC4gU3BpZWxlcm9iamVrdGUgaGFiZW4gaW0gTW9yZ2VuR3JhdWVuIGplZG9jaCBudXIgc2VocgorICAgICBlaW5nZXNjaHJhZW5rdGUgTGVzZXJlY2h0ZSEgQXVzZ2VnZWJlbiB3ZXJkZW4ga29lbm5lbiBudXIgZmlsZXMKKyAgICAgYXVzIC9wLyosIC9naWxkZW4vKiB1bmQgL2QvKiBkaWUgX2tlaW5lbl8gY29kZSBlbnRoYWx0ZW4uIEFscyBDb2RlCisgICAgIHdpcmQgaGllcmJlaSBqZWRlcyBGaWxlIGJldHJhY2h0ZXQgZGFzIGFscyB2b3JsZXR6dGVzIFplaWNoZW4gZWluZW4gLgorICAgICBoYXQgKGFsc28gLmMsIC5oLCAubyB1c3cuKS4KKyAgICAgV2lsbCBtYW4gYXVzIGlyZ2VuZHdlbGNoZW4gR3J1ZW5kZW4gZWluIEZpbGUgKHouYi4gYXVzIC9wbGF5ZXJzLykKKyAgICAgYXVzZ2ViZW4sIHNvIHNvbGx0ZSBtYW4gc3RhdHRkZXNzZW4gZm9sZ2VuZGVzIHZlcndlbmRlbjoKKyAgICAgdGhpc19wbGF5ZXIoKS0+TW9yZShyZWFkX2ZpbGUoZmlsZW5hbWUpKQorCitCRUlTUElFTEU6CisKKyAgICAgLy8gQXVzZ2FiZSBlaW5lcyBub3JtYWxlbiB0ZXh0ZXMuLi4KKyAgICAgdGhpc19wbGF5ZXIoKS0+TW9yZSgiRWluZmFjaCBudXIgbWFsIHNvIGVpbiBUZXN0Li4uXG4iKTsKKworICAgICAvLyBBdXNnYWJlIGVpbmVzIGtvbXBsZXR0ZW4gZmlsZXMKKyAgICAgdGhpc19wbGF5ZXIoKS0+TW9yZSgiL2V0Yy9XSVpSVUxFUyIsIDEpOworCitTSUVIRSBBVUNIOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBNb24gRmViIDIyIDE1OjA5OjE4IDE5OTkgYnkgUGFkcmVpYwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vTlBDX0tpbGxlZF9ieSBiL2RvYy9sZnVuL05QQ19LaWxsZWRfYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczOTJiYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL05QQ19LaWxsZWRfYnkKQEAgLTAsMCArMSwxMyBAQAorRlVOS1RJT046CisJdm9pZCBOUENfS2lsbGVkX0J5KG9iamVjdCBwbCkKKwkKK0FSR1VNRU5URToKKwlTcGllbGVyLCBkZXIgZWluZW4gTlBDIGdla2lsbHQgaGF0LgorCQorQkVTQ0hSRUlCVU5HOgorCVdpcmQgaW4gZGVyIEdpbGRlIGRlcyBTcGllbGVycyBhdWZnZXJ1ZmVuLAorCXdlbm4gZGllc2VyIGVpbmVuIE5QQyBnZWtpbGx0IGhhdC4KKwkKK1JVRUNLR0FCRVdFUlQ6CisJS2VpbmVyCisJCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9OYW1lIGIvZG9jL2xmdW4vTmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzRhYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vTmFtZQpAQCAtMCwwICsxLDI4IEBACitOYW1lKCkKKworRlVOS1RJT046CisgICAgIHZhcmFyZ3Mgc3RyaW5nIE5hbWUoaW50IGNhc3VzLCBpbnQgZGVtb24pOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgIGNhc3VzCisgICAgICAgICAgRGVyIEZhbGwsIGluIGRlbSBkZXIgTmFtZSBkZWtsaW5pZXJ0IHdlcmRlbiBzb2xsLgorICAgICBkZW1vbgorICAgICAgICAgIEdpYnQgYW4sIG9iIGRlciBOYW1lIG1pdCBiZXN0aW1tdGVtIG9kZXIgdW5iZXN0aW1tdGVtIEFydGlrZWwKKyAgICAgICAgICB2ZXJzZWhlbiB3ZXJkZW4gc29sbDoKKyAgICAgICAgICAgICArIGRlbW9uID0gMDogVW5iZXN0aW1tdGVyIEFydGlrZWwuCisgICAgICAgICAgICAgKyBkZW1vbiA9IDE6IEJlc3RpbW10ZXIgQXJ0aWtlbC4KKyAgICAgICAgICAgICArIGRlbW9uID0gMjogRmluZGUgc2VsYnN0IGhlcmF1cywgb2IgZWluIGJlc3RpbW10ZXIgb2RlciBlaW4KKyAgICAgICAgICAgICAgIHVuYmVzdGltbXRlciBBcnRpa2VsIHZlcndlbmRldCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVzZXIgRnVua3Rpb25zYXVmcnVmIGlzdCBlaW4gQWxpYXMgZnVlciAKKyAgICAgY2FwaXRhbGl6ZSggbmFtZSggY2FzdXMsIGRlbW9uICkgKQorCitTSUVIRSBBVUNIOgorICAgICBuYW1lKCksIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBTYXQgQXVnICAzIDExOjI0OjA2IDIwMDIgYnkgVmFuaW9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9OZXdEb29yIGIvZG9jL2xmdW4vTmV3RG9vcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY1Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vTmV3RG9vcgpAQCAtMCwwICsxLDIyMyBAQAorRlVOS1RJT046CisgICAgIHZhcmFyZ3MgaW50IE5ld0Rvb3Ioc3RyaW5nfHN0cmluZyogY21kcywgc3RyaW5nIGRlc3QsIHN0cmluZ3xzdHJpbmcqIGlkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nfDxpbnR8c3RyaW5nfHN0cmluZyo+KiBwcm9wcyk7CitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcm9vbS9kb29ycy5jCisKK0FSR1VNRU5URToKKyAgICAgY21kcyAoc3RyaW5nfHN0cmluZyopCisgICAgICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiBCZWZlaGxlbiwgbWl0IGRlbmVuIG1hbgorICAgICAgICAgIGR1cmNoIGRpZSBUdWVyIGdlaHQgKGluIGRlciBSZWdlbCBSaWNodHVuZ2VuIHdpZSAibm9yZGVuIikuCisgICAgIGRlc3QgKHN0cmluZykKKyAgICAgICAgICBQZmFkIGRlcyBaaWVscmF1bWVzLCBPSE5FICIuYyIsIHNvbnN0IHdpcmQgZWluZSB6d2Vpc2VpdGlnZSBUdWVyCisgICAgICAgICAgKHdpZSBzaWUgdWVibGljaCBpc3QpIG5pY2h0IGFscyBzb2xjaGUgZXJrYW5udC4KKyAgICAgaWRzIChzdHJpbmd8c3RyaW5nKikKKyAgICAgICAgICBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncyBtaXQgZGVuIEJlemVpY2huZXJuIGRlciBUdWVyLiBLYW5uCisgICAgICAgICAgYXVjaCAwIHNlaW47IGluIGRpZXNlbSBGYWxsIGxhZXNzdCBzaWNoIGRpZSBUdWVyIG51ciBhbHMgInR1ZXIiCisgICAgICAgICAgYW5zcHJlY2hlbi4KKyAgICAgcHJvcHMgKG1hcHBpbmd8PGludHxzdHJpbmd8c3RyaW5nKj4qKQorICAgICAgICAgIERpZSBFaWdlbnNjaGFmdGVuIGRlciBUdWVyIChzLnUuKS4KKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3aXJkIGVpbmUgbmV1ZSBUdWVyIGdlc2NoYWZmZW4uIERpZSBUdWVyIGxhZXNzdCBzaWNoLCB3ZW5uIHNpZQorICAgICBnZW9lZmZuZXQgaXN0LCBtaXQgZGVuIGluIDxjbWRzPiBhbmdlZ2ViZW5lbiBCZWZlaGxlbiBkdXJjaHNjaHJlaXRlbi4KKyAgICAgTWFuIGdlbGFuZ3QgZGFubiBpbiBkZW4gUmF1bSA8ZGVzdD4uCisKKyAgICAgRGllIEtvbW1hbmRvcyB3ZXJkZW4gYmVpIGdlb2VmZm5ldGVyIFR1ZXIgaW4gZGllIExpc3RlIGRlciBzaWNodGJhcmVuCisgICAgIEF1c2dhZW5nZSBlaW5nZWZ1ZWd0LgorCisgICAgIEluIDxwcm9wcz4gbGFzc2VuIHNpY2ggQXVzc2VoZW4gdW5kIEVpZ2Vuc2NoYWZ0ZW4gZGVyIFR1ZXIgZmVzdGxlZ2VuLgorICAgICBIaXN0b3Jpc2NoIGlzdCBlcyBlaW4gQXJyYXkgbWl0IFBhYXJlbiB2b24gU2NobHVlc3NlbG4gdW5kIFdlcnRlbiwgZC5oLgorICAgICBlcyBrb21tdCBpbW1lciBlcnN0IGVpbiBFbGVtZW50LCB3ZWxjaGVzIGRpZSBFaWdlbnNjaGFmdCBiZXplaWNobmV0IHVuZAorICAgICBkYW5uIGVpbiBFbGVtZW50IG1pdCBkZW0gV2VydCBkaWVzZXIgRWlnZW5zY2hhZnQuCisgICAgIE1vZGVybmVyIGlzdCBlcywgZWluIE1hcHBpbmcgbWl0IGRlbiBlbnRzcHJlY2hlbmRlbiBTY2hsdWVzc2VsbiB1bmQKKyAgICAgV2VydGVuIHp1IHVlYmVyZ2ViZW4uIERpZXMgaXN0IGF1Y2ggZHJpbmdlbmQgZW1wZm9obGVuLgorCisgICAgIEluIDxkb29ycm9vbS5oPiBzaW5kIGRhenUgZm9sZ2VuZGUgRWlnZW5zY2hhZnRlbiBkZWZpbmllcnQ6CisgICAgIERfRkxBR1MKKyAgICAgICAgICBET09SX09QRU4KKyAgICAgICAgICAgICAgIERpZSBUdWVyIGlzdCBiZWltIEVyemV1Z2VuIGdlb2VmZm5ldC4KKyAgICAgICAgICBET09SX0NMT1NFRAorICAgICAgICAgICAgICAgRGllIFR1ZXIgaXN0IGJlaW0gRXJ6ZXVnZW4gZ2VzY2hsb3NzZW4uCisgICAgICAgICAgRE9PUl9ORUVES0VZCisgICAgICAgICAgICAgICBNYW4gYmVub2V0aWd0IGVpbmVuIFNjaGx1ZXNzZWwgenVtIE9lZmZuZW4gZGVyIFR1ZXIuCisgICAgICAgICAgRE9PUl9DTE9TRUtFWQorICAgICAgICAgICAgICAgTWFuIGJlbm9ldGlndCBlaW5lbiBTY2hsdWVzc2VsIHp1bSBTY2hsaWVzc2VuIGRlciBUdWVyLgorICAgICAgICAgIERPT1JfUkVTRVRfQ0wKKyAgICAgICAgICAgICAgIERpZSBUdWVyIHNjaGxpZXNzdCBzaWNoIGJlaW0gUmVzZXQuCisgICAgICAgICAgRE9PUl9SRVNFVF9PUAorICAgICAgICAgICAgICAgRGllIFR1ZXIgb2VmZm5ldCBzaWNoIGJlaW0gUmVzZXQuCisKKyAgICAgRF9MT05HCisgICAgICAgICAgRGllIExhbmdiZXNjaHJlaWJ1bmcgZGVyIFR1ZXIuIAorICAgICAgICAgIEhpZXIga2FubiBlaW4gTWFwcGluZyBlaW5nZXRyYWdlbiB3ZXJkZW4sIGRhcyBhbHMgS2V5cyBkZW4gVHVlci0KKyAgICAgICAgICBTdGF0dXMgaGF0IHVuZCBkaWUgenVnZWhvZXJpZ2UgTGFuZ2Jlc2NocmVpYnVuZyBkYXp1LiBCZWlzcGllbDoKKyAgICAgICAgICAoWyBEX1NUQVRVU19DTE9TRUQgOiAiRGllIFR1ZXIgaXN0IGdlc2NobG9zc2VuLlxuIiwKKyAgICAgICAgICAgICBEX1NUQVRVU19PUEVOICAgOiAiRGllIFR1ZXIgaXN0IG9mZmVuLlxuIiBdKQorICAgICAgICAgIAorICAgICAgICAgIERlZmF1bHQ6ICJFaW5lIFR1ZXIuXG4iCisKKyAgICAgRF9TSE9SVAorICAgICAgICAgIERpZSBLdXJ6YmVzY2hyZWlidW5nIGRlciBUdWVyLiBFaW4gIiVzIiB3aXJkIGR1cmNoICJnZW9lZmZuZXQiCisgICAgICAgICAgYnp3LiAiZ2VzY2hsb3NzZW4iIGVyc2V0enQuCisKKyAgICAgICAgICBFcyB3ZXJkZW4gZGllIEt1cnpiZXNjaHJlaWJ1bmdlbiBhbGxlciBpbSBSYXVtIHZvcmhhbmRlbmVuIFR1ZXJlbgorICAgICAgICAgIGFuZWluYW5kZXJnZWhhZW5ndCAoZXMgd2lyZCBqZXdlaWxzIGVpbiBMZWVyemVpY2hlbiBlaW5nZXNjaG9iZW4pLAorICAgICAgICAgIGRhcyBHYW56ZSBtaXQgYnJlYWtfc3RyaW5nKCkgdW1nZWJyb2NoZW4gdW5kIGFuIFBfSU5UX0xPTkcKKyAgICAgICAgICBhbmdlaGFlbmd0LgorCisgICAgICAgICAgRGVmYXVsdDogIkVpbmUgJXNlIFR1ZXIuIgorCisgICAgIERfTkFNRQorICAgICAgICAgIERlciBOYW1lIGRlciBUdWVyLiBEaWVzZXIgTmFtZSB3aXJkIGJlaW0gT2VmZm5lbiB1bmQgU2NobGllc3NlbgorICAgICAgICAgIGRlciBUdWVyIHNvd2llIGJlaSBGZWhsZXJtZWxkdW5nZW4gYXVzZ2VnZWJlbi4gTWFuIGthbm4gd2llIGJlaQorICAgICAgICAgIFBfTkFNRSBlaW5lbiBTdHJpbmcgb2RlciBlaW4gQXJyYXkgdm9uIFN0cmluZ3MgYW5nZWJlbi4KKworICAgICAgICAgIERlZmF1bHQ6ICJUdWVyIgorCisgICAgIERfR0VOREVSCisgICAgICAgICAgRGFzIEdlc2NobGVjaHQgZGVyIFR1ZXIuCisKKyAgICAgICAgICBEZWZhdWx0OiBGRU1BTEUKKworICAgICBEX01TR1MKKyAgICAgICAgICBTdHJpbmcgb2RlciBBcnJheSB2b24gZHJlaSBTdHJpbmdzLiBEaWVzZSBTdHJpbmdzIHdlcmRlbiBiZWltCisgICAgICAgICAgRHVyY2hzY2hyZWl0ZW4gZGVyIFR1ZXIgYW4gbW92ZSgpIGFscyBkaXIgYnp3LiBkaXIsIHRleHRvdXQgdW5kCisgICAgICAgICAgdGV4dGluIHVlYmVyZ2ViZW4uCisKKyAgICAgRF9GVU5DCisgICAgICAgICAgU3RyaW5nIG1pdCBkZW0gTmFtZW4gZWluZXIgRnVua3Rpb24sIGRpZSBpbSBTdGFydHJhdW0gdm9yIGRlbQorICAgICAgICAgIER1cmNoc2NocmVpdGVuIGRlciBUdWVyIGF1ZmdlcnVmZW4gd2VyZGVuIHNvbGwuIERpZXNlIEZ1bmt0aW9uCisgICAgICAgICAga2FubiBkYXMgRHVyY2hzY2hyZWl0ZW4gamVkb2NoIG5pY2h0IHZlcmhpbmRlcm4hCisKKyAgICAgRF9GVU5DMgorICAgICAgICAgIFN0cmluZyBtaXQgZGVtIE5hbWVuIGVpbmVyIEZ1bmt0aW9uLCBkaWUgaW0gWmllbHJhdW0gbmFjaCBkZW0KKyAgICAgICAgICBEdXJjaHNjaHJlaXRlbiBkZXIgVHVlciBhdWZnZXJ1ZmVuIHdlcmRlbiBzb2xsLgorCisgICAgIERfVEVTVEZVTkMKKyAgICAgICAgICBGYWxscyBhdWYgZGVuIE5hbWVuIGVpbmVyIEZ1bmt0aW9uIGdlc2V0enQsIHdpcmQgZGllc2UgRnVua3Rpb24KKyAgICAgICAgICB2b3IgZGVtIER1cmNoc2NocmVpdGVuIGltIFN0YXJ0cmF1bSBhdWZnZXJ1ZmVuLiBXZW5uIHNpZSBlaW5lbgorICAgICAgICAgIFdlcnQgIT0gMCB6dXJ1ZWNrbGllZmVydCwgd2lyZCBkaWUgVHVlciBOSUNIVCBkdXJjaHNjaHJpdHRlbi4gCisKKyAgICAgRF9SRVNFVF9NU0cKKyAgICAgICAgICBNZWxkdW5nLCBkaWUgYmVpbSBSZXNldCBkZXIgVHVlciBhdXNnZWdlYmVuIHdpcmQuCisKKyAgICAgRF9PUEVOX1dJVEhfTU9WRQorICAgICAgICAgIFR1ZXIgb2VmZm5ldCBhdXRvbWF0aXNjaCBiZWkgRWluZ2FiZSBkZXMgQmVmZWhscyB6dW0gCisgICAgICAgICAgSGluZHVyY2hnZWhlbi4KKyAgICAgICAgICAKK1JVRUNLR0FCRVdFUlQ6CisgICAgIDEsIHdlbm4gZGllIFR1ZXIgb3JkdW5nc2dlbWFlc3MgZWluZ2ViYXV0IHdlcmRlbiBrb25udGUsIHNvbnN0IDAuCisKK0JFTUVSS1VOR0VOOgorICAgICBad2VpIFR1ZXJzZWl0ZW4gZ2VsdGVuIGFscyB2ZXJzY2hpZWRlbmUgU2VpdGVuIGVpbmVyIFR1ZXIsIHdlbm4gYWxzCisgICAgIFppZWwgaW4gUmF1bSBBIFJhdW0gQiB1bmQgaW4gUmF1bSBCIFJhdW0gQSBhbmdlZ2ViZW4gaXN0LiBEZXIgWnVzdGFuZAorICAgICB3aXJkIGFiZ2VmcmFndCwgd2VubiBkZXIgUmF1bSBiZXRyZXRlbiB3aXJkIChpbml0KSwgd2VubiBkaWUgVHVlcgorICAgICBnZW9lZmZuZXQvZ2VzY2hsb3NzZW4gd2lyZCwgUF9JTlRfTE9ORyBvZGVyIFBfRVhJVFMgYWJnZWZyYWd0IHdpcmQKKyAgICAgdW5kIGJlaW0gUmVzZXQuCisKKyAgICAgRXMgc2luZCBhdWNoIFR1ZXJlbiBtb2VnbGljaCwgZGllIG51ciBhdWYgZWluZXIgU2VpdGUgZXhpc3RpZXJlbiwgb2RlcgorICAgICBhdWNoIHNvbGNoZSwgZGllIGF1ZiBiZWlkZW4gU2VpdGVuIHZlcnNjaGllZGVuIGF1c3NlaGVuIG9kZXIgZ2FyIGF1ZgorICAgICBlaW5lciBTZWl0ZSBudXIgbWl0IGVpbmVtIFNjaGx1ZXNzZWwgenUgb2VmZm5lbiBzaW5kLCBhdWYgZGVyIGFuZGVyZW4KKyAgICAgamVkb2NoIGtlaW4gU2NobHVlc3NlbCBub2V0aWcgaXN0LgorCisgICAgIFdlciBhdXMgaXJnZW5kZWluZW0gR3J1bmQgZGVuIFp1c3RhbmQgZWluZXIgVHVlciBzZWxiZXIgYWJmcmFnZW4gb2RlcgorICAgICB2ZXJhZW5kZXJuIHdpbGwsIGthbm4gZGFmdWVyIGluIC9vYmovZG9vcm1hc3RlciBkaWUgRnVua3Rpb25lbgorICAgICBRdWVyeURvb3JTdGF0dXMoemllbCkgYnp3LiBTZXREb29yU3RhdHVzKHppZWwsc3RhdHVzKSBhdWZydWZlbi4KKworICAgICAqKiogQUNIVFVORyAqKioKKyAgICAgRXMgZ2lidCBlaW5lIFF1ZXN0YmVsb2hudW5nIChQaGlvbGUgYXVzIGRlciBTdGVybmVubGljaHQtUXVlc3Qgdm9uCisgICAgIE1pcmlsKSwgbWl0IGRlciBtYW4gZHVyY2ggVHVlcmVuIGhpbmR1cmNoc2NoYXVlbiBrYW5uLiBEZXJ6ZWl0IGlzdCBkYXMKKyAgICAgcGVyIGRlZmF1bHQgZnVlciBhbGxlIFR1ZXJlbiBlcmxhdWJ0LiBXZW5uIG1hbiBkYXMgbmljaHQgbW9lY2h0ZSwKKyAgICAgb2RlciBhbmRlcmUgVGV4dGUgYXVzZ2ViZW4sIGFscyBkaWUgUGhpb2xlIG5vcm1hbGVyd2Vpc2UgZXJ6ZXVndCwKKyAgICAgZGFubiBrYW5uIG1hbiBkaWVzIGR1cmNoIE51dHp1bmcgYmVzdGltbXRlciBGdW5rdGlvbmVuIGJ6dy4gRmxhZ3MKKyAgICAgZXJyZWljaGVuLiBadXIgRG9rdW1lbnRhdGlvbiBzaWVoZSBNYW5wYWdlIHp1IEdldFBoaW9sZW5JbmZvcygpLgorCitCRUlTUElFTEU6CisKKyAgKiogRGllcyBpc3QgZWluZSBnZXdvZWhubGljaGUgVHVlciBvaG5lIEJlc29uZGVyaGVpdGVuIHVuZCBvaG5lCisgICAgIEV4dHJhLUJlc2NocmVpYnVuZzoKKworICAgICBOZXdEb29yKCJzdWVkZW4iLCIvcGxheWVycy9yb2NodXMvcm9vbS90ZXN0MSIpOworCisgICoqIEVpbiBQb3J0YWw6CisKKyAgICAgTmV3RG9vcigibm9yZGVuIiwiL3BsYXllcnMvcm9jaHVzL3Jvb20vdGVzdDIiLAorICAgICAgICAgICAgICJwb3J0YWwiLAorICAgICAgICAgICAgIChbIERfTkFNRTogICAiUG9ydGFsIiwKKyAgICAgICAgICAgICAgICBEX0dFTkRFUjogTkVVVEVSLAorICAgICAgICAgICAgICAgIERfU0hPUlQ6ICAiSW0gTm9yZGVuIHNpZWhzdCBEdSBlaW4gJXNlcyBQb3J0YWwuIiwKKyAgICAgICAgICAgICAgICBEX0xPTkc6ICAgIkRhcyBQb3J0YWwgaXN0IGVpbmZhY2ggbnVyIGdpZ2FudGlzY2guXG4iLAorICAgICAgICAgICAgICBdKSApOworCisgICAgIEFsdGVybmF0aXYgbWl0IHByb3BzIGluIGFsdGVyIEFycmF5bm90YXRpb246CisgICAgIE5ld0Rvb3IoIm5vcmRlbiIsIi9wbGF5ZXJzL3JvY2h1cy9yb29tL3Rlc3QyIiwKKyAgICAgICAgICAgICAicG9ydGFsIiwKKyAgICAgICAgICAgICAoeyBEX05BTUUsICAgIlBvcnRhbCIsCisgICAgICAgICAgICAgICAgRF9HRU5ERVIsIE5FVVRFUiwKKyAgICAgICAgICAgICAgICBEX1NIT1JULCAgIkltIE5vcmRlbiBzaWVoc3QgRHUgZWluICVzZXMgUG9ydGFsLiIsCisgICAgICAgICAgICAgICAgRF9MT05HLCAgICJEYXMgUG9ydGFsIGlzdCBlaW5mYWNoIG51ciBnaWdhbnRpc2NoLlxuIgorICAgICAgICAgICAgICB9KSApOworICAgICAKKyAgKiogVHVlcmVuIG1pdCBCZXdlZ3VuZ3NtZWxkdW5nOgorCisgICAgIE5ld0Rvb3IoIm5vcmRlbiIsIi9yb29tL3NlZTIiLAorICAgICAgICAgICAgICh7IERfTVNHUywgICh7Im5hY2ggTm9yZGVuIiwic2Nod2ltbXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImtvbW10IGhlcmVpbmdlc2Nod29tbWVuIn0pIH0pICk7CisKKyAgKiogRWluZSBUdWVyIG1pdCBUZXN0ZnVua3Rpb246CisKKyAgICAgTmV3RG9vcigib3N0ZW4iLCIvbWVpbi96aWVscmF1bSIsCisgICAgICAgICAgICAgKHsgRF9URVNURlVOQywgImJsb2NrZXJfZGEiIH0pICk7CisKKyAgICAgRGllIEZ1bmt0aW9uIGJsb2NrZXJfZGE6CisKKyAgICAgaW50IGJsb2NrZXJfZGEoKSAgICAgIC8vIEtFSU5FIHByb3RlY3RlZC1GdW5rdGlvbiEgU2llIHdpcmQgc29uc3QgTklDSFQKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgIC8vIGF1ZmdlcnVmZW4gdW5kIGF1c2dld2VydGV0IQorICAgICAgIGlmICggcHJlc2VudCgibWVpbl9maWVzZXNfbW9cbnN0ZXIiLHRoaXNfb2JqZWN0KCkpICkKKyAgICAgICAgeworICAgICAgICAgd3JpdGUoIkVpbiBmaWVzZXMgTW9uc3RlciBzdGVsbHQgc2ljaCBEaXIgaW4gZGVuIFdlZy5cbiIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICByZXR1cm4gMDsgICAgICAgICAgIC8vIG9wdGlvbmFsCisgICAgIH0KKworICAqKiBOdW4gbm9jaCBlaW5lIFR1ZXIgbWl0IGVpbmlnZW4gRXh0cmFzOgorCisgICAgIE5ld0Rvb3IoIm5vcmR3ZXN0ZW4iLCIvcm9vbXMva2FtbWVyIiwKKyAgICAgICAgICAgICAoeyJ0dWVyIiwiaG9senR1ZXIifSksCisgICAgICAgICAgICAgKHsKKyAgICAgICAgICAgICAgIERfRkxBR1MsICAoRE9PUl9DTE9TRUR8RE9PUl9SRVNFVF9DTCksCisgICAgICAgICAgICAgICBEX01TR1MsICAgKHsibmFjaCBOb3Jkd2VzdGVuIiwiZ2VodCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImtvbW10IGR1cmNoIGVpbmUgVHVlciBoZXJlaW4ifSksCisgICAgICAgICAgICAgICBEX1NIT1JULCAgIkltIE5vcmR3ZXN0ZW4gc2llaHN0IER1IGVpbmUgJXNlIEhvbHp0dWVyLiIsCisgICAgICAgICAgICAgICBEX0xPTkcsICAgIlNpZSB0cmVubnQgZGVuIExhZGVuIHZvbSBkYWhpbnRlcmxpZWdlbmRlbiBSYXVtLlxuIiwKKyAgICAgICAgICAgICAgIERfTkFNRSwgICAiSG9senR1ZXIiLAorICAgICAgICAgICAgICAgRF9GVU5DLCAgICJ2aWV3IiwKKyAgICAgICAgICAgICAgIERfRlVOQzIsICAibG9va191cCIKKyAgICAgICAgICAgICB9KSApOworCisgICAgIEltIFN0YXJ0cmF1bToKKworICAgICB2b2lkIHZpZXcoKQorICAgICB7CisgICAgICAgd3JpdGUoIkRlciBBbmdlc3RlbGx0ZSB3aXJmdCBEaXIgZWluZW4gbWlzc2JpbGxpZ2VuZGVuIEJsaWNrIHp1LCAiCisgICAgICAgICAgICAgImxhZXNzdCBEaWNoIGFiZXIgcGFzc2llcmVuLlxuIik7CisgICAgIH0KKworICAgICBJbSBaaWVscmF1bToKKworICAgICB2b2lkIGxvb2tfdXAoKQorICAgICB7CisgICAgICAgd3JpdGUoIkVpbiBhbHRlciBNYW5uIHNjaGF1dCBrdXJ6IHp1IERpciBhdWYgdW5kIHZlcnRpZWZ0IHNpY2ggZGFubiAiCisgICAgICAgICAgICAgIndpZWRlciBpbiBzZWluZSBBa3Rlbi5cbiIpOworICAgICB9CisKKworU0lFSEUgQVVDSDoKKyAgICBRdWVyeURvb3JLZXkoKSwgUXVlcnlEb29yU3RhdHVzKCksIFNldERvb3JTdGF0dXMoKSwKKyAgICAvc3RkL3Jvb20vZG9vcnMuYywgL29iai9kb29ybWFzdGVyLmMsIEdldFBoaW9sZW5JbmZvcygpLCBRdWVyeUFsbERvb3JzKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzA4LjAyLjIwMTUsIEFyYXRob3JuCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL05vUGFyYU9iamVjdHMgYi9kb2MvbGZ1bi9Ob1BhcmFPYmplY3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNGU3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Ob1BhcmFPYmplY3RzCkBAIC0wLDAgKzEsMjggQEAKKyoqKioqKioqKioqKioqKioqKioqKiogVkVSQUxURVRFIExGVU4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorTm9QYXJhT2JqZWN0cygpCisKK0ZVTktUSU9OOgorCWludCBOb1BhcmFPYmplY3RzKCkKKworREVGSU5JRVJUIElOOgorCS9zdGQvdmlydHVhbC92X2NvbXBpbGVyLmMKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAxLCB3ZW5uIGRlciBWQyBrZWluZSBQYXJhd2VsdC1PYmpla3RlIGVyemV1Z3QsCisgICAgMCwgd2VubiBlciBlcyBkb2NoIHR1dC4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGlzdCB2ZXJhbHRldC4gUXVlcnlWYWxpZE9iamVjdCgpIGlzdCBnZW5lcmVsbGVyIHVuZAorICAgIGVpbmZhY2hlciB6dSBoYW5kaGFiZW4uIEJpdHRlIGluIFp1a3VuZnQgUF9QQVJBIGltIFZDIHNldHplbiwgc2llaGUgaGllcnp1CisgICAgZGllIE1hbnBhZ2Ugdm9uIFF1ZXJ5VmFsaWRPYmplY3QoKS4KKworICAgIERpZSBGdW5rdGlvbiBnaWJ0IGFuLCBvYiBlaW4gVmlydHVhbCBDb21waWxlciBhdWNoIFBhcmF3ZWx0LU9iamVrdGUKKyAgICBlcnpldWdlbiBrYW5uLgorICAgIFdpY2h0aWc6IEVudHdlZGVyIGRpZXNlciBGdW5rdGlvbiBpbSBWQyBkZWZpbmllcmVuLCB3ZW5uIGRlciBWQyBrZWluZQorICAgIFBhcmEtT2JqZWt0ZSBlcnpldWdlbiB3aXJkIG9kZXIgUF9QQVJBIHBhc3NlbmQgc2V0emVuIQorCitTSUVIRSBBVUNIOgorCXZpcnR1YWxfY29tcGlsZXIsIFBfUEFSQSwgUXVlcnlWYWxpZE9iamVjdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNC4wMy4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Ob3RpZnlEZXN0cnVjdCBiL2RvYy9sZnVuL05vdGlmeURlc3RydWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTcxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Ob3RpZnlEZXN0cnVjdApAQCAtMCwwICsxLDQ3IEBACitOb3RpZnlEZXN0cnVjdCgpCisKK0ZVTktUSU9OOgorICAgICBwdWJsaWMgaW50fHN0cmluZyBOb3RpZnlSZW1vdmUob2JqZWN0IHplcnN0b2VyZXIpOworCitBUkdVTUVOVEU6CisgICAgIHplcnN0b2VyZXIKKyAgICAgICAgICBEYXMgT2JqZWt0LCB3ZWxjaGVzIGRlc3RydWN0KCkgYXVmIGRpZXNlcyBPYmpla3QgYW53ZW5kZXQuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gd2lyZCB2b20gTWFzdGVyIGRlciBNdWRsaWIgaW4gamVkZW0gT2JqZWt0IGdlcnVmZW4sCisgICAgIHdlbGNoZXMgemVyc3RvZXJ0IHdpcmQsIHVtIE9iamVrdGVuIGVpbmUgbGV0enRlIENoYW5jZSB6dSBnZWJlbiwgc2ljaAorICAgICBhdWZ6dXJhZXVtZW4uCisgICAgIFdlbm4gaWhyIGRpZXNlIEZ1bmt0aW9uIHNlbGJlciBkZWZpbmllcnQsIGFjaHRldCBiaXR0ZXQgZGFyYXVmLCBkYXNzIHNpZQorICAgICBpbiBrZWluZW0gRmFsbCBGZWhsZXIgYXVzbG9lc2VuIHNvbGx0ZSwgZC5oLiB0ZXN0ZXQgZW50c3ByZWNoZW5kCisgICAgIGdydWVuZGxpY2guCisgICAgIFdlbm4gaWhyIGF1cyAvc3RkLyBlcmJ0IHVuZCBkaWVzZSBGdW5rdGlvbiB1ZWJlcnNjaHJlaWJ0LCwgX211ZXNzdF8gaWhyCisgICAgIGRpZSBnZWVyYnRlIE5vdGlmeURlc3RydWN0KCkgYXVmcnVmZW4sIGRhIHNvbnN0IGRhcyBMaWNodHN5c3RlbSBuaWNodAorICAgICBha3R1YWxpc2llcnQgd2lyZC4KKworICAgICBQcml2aWxlZ2llcnRlIE9iamVrdGUgKHouQi4gUm9vdC1PYmpla3RlLCBzcGV6aWVsbGUgQXVzbmFobWVuIHdpZSBkZXIKKyAgICAgTmV0enRvdGVucmF1bSwgQXJtYWdlZGRvbikga29lbm5lbiBkaWUgWmVyc3RvZXJ1bmcgaW4gbGV0enRlciBTZWt1bmRlCisgICAgIHZlcmhpbmRlcm4sIGluZGVtIHNpZSBoaWVyIGVpbmVuIFdlcnQgIT0gMCB6dXJ1ZWNrbGllZmVybi4gV2lyZCBlaW4KKyAgICAgc3RyaW5nIHp1cnVlY2tnZWxpZWZlcnQsIHdpcmQgZGllc2VyIGRpZSBGZWhsZXJtZWxkdW5nIGRlcworICAgICBwcmVwYXJlX2Rlc3RydWN0KCkgaW0gTWFzdGVyIHNlaW4uCisgICAgIEJlaSBuaWNodC1wcml2aWxlZ2llcnRlbiBPYmpla3RlbiAoYWxzbyBmYXN0IGFsbGUpIGlzdCBhbiBkaWVzZXIgU3RlbGxlCisgICAgIF9rZWluXyBBYmJydWNoIGRlciBaZXJzdG9lcnVuZyBtb2VnbGljaCEKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRGVyIFJ1ZWNrZ2FiZXdlcnQgbXVzcyBlaW4gc3RyaW5nIG9kZXIgZWluIGludCBzZWluLiBBbGxlcmRpbmdzIHdpcmQgZGVyCisgICAgIE1hc3RlciBkZW4gUnVlY2tnYWJld2VydCBudXIgZnVlciBwcml2aWxlZ2llcnRlIE9iamVrdGUgYXVzd2VydGVuLgorCitCRU1FUktVTkdFTjoKKyAgICAgV2llIGdlc2FndCwgYml0dGUga2VpbmUgRmVobGVyIGF1c2xvZXNlbiAoYXVjaCB3ZW5uIGRlciBNYXN0ZXIKKyAgICAgZ3J1bmRzYWV0emxpY2ggZGFtaXQga2xhciBrb21tdCkuIFNwZXppZWxsIGlzdCBlaW4gcmFpc2VfZXJyb3IoKSB6dXIKKyAgICAgVmVyaGluZGVydW5nIGVpbmVzIGRlc3RydWN0cyBudXR6bG9zLgorICAgICBCaXR0ZSBtYWNodCBpbiBkaWVzZXIgRnVua2lvbiBudXIgZGFzLCB3YXMgX3VuYmVkaW5ndF8gbm90d2VuZGlnIGlzdC4KKyAgICAgV2VubiBqZW1hbmQgZWluIGRlc3RydWN0KCkgYW53ZW5kZXQgc3RhdHQgZWluIHJlbW92ZSgpIHp1IHJ1ZmVuLCBoYXQgZGFzCisgICAgIGluIGRlciBSZWdlbCBlaW5lbiBHcnVuZCAoei5CLiB1bSBidWdnZW5kZSByZW1vdmUoKSB6dSB1bWdlaGVuKS4gSW5zYi4KKyAgICAgaXN0IGVpbiBzYXZlX29iamVjdCgpIGluIHJlbW92ZSgpIHVuZCBOb3RpZnlEZXN0cnVjdCgpIHZvbGxzdGFlbmRpZworICAgICB1ZWJlcmZsdWVzc2lnLgorCitTSUVIRSBBVUNIOgorICAgIE5vdGlmeUxlYXZlKCksIE5vdGlmeUluc2VydCgpLCBOb3RpZnlSZW1vdmUoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAyNS4wMi4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Ob3RpZnlJbnNlcnQgYi9kb2MvbGZ1bi9Ob3RpZnlJbnNlcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyYzZlYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL05vdGlmeUluc2VydApAQCAtMCwwICsxLDI4IEBACitOb3RpZnlJbnNlcnQoKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBOb3RpZnlJbnNlcnQob2JqZWN0IG9iLCBvYmplY3Qgb2xkZW52KTsKKworQVJHVU1FTlRFOgorICAgICBvYgorICAgICAgICAgIERhcyBPYmpla3QsIGRhcyBpbiBkZW4gQmVoYWVsdGVyIGVpbmdlZnVlZ3Qgd3VyZGUuCisgICAgIG9sZGVudgorICAgICAgICAgIERhcyBPYmpla3QsIGF1cyBkZW0gPG9iPiBrYW0uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gd2lyZCBpbSBCZWhhZWx0ZXIgYXVmZ2VydWZlbiwgbmFjaGRlbSBlaW4gT2JqZWt0IGluCisgICAgIGJlc2FndGVuIEJlaGFlbHRlciBoaW5laW4gYmV3ZWd0IHd1cmRlLiAKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFTUVSS1VOR0VOOgorICAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIG51ciBpbSBGYWxsZSB1bmJlbGVidGVyIE9iamVrdGUgZ2VydWZlbi4gRnVlciAKKyAgICAgTGViZXdlc2VuIHMuIGJpdHRlLiBpbml0KCkuCisKK1NJRUhFIEFVQ0g6CisgICAgTm90aWZ5TGVhdmUoKSwgUHJldmVudEluc2VydCgpLCBQcmV2ZW50TGVhdmUoKSwgbW92ZSgpLCBOb3RpZnlSZW1vdmUoKQorICAgIGV4aXQoKSwgaW5pdCgpLCBOb3RpZnlNb3ZlKCksIFByZXZlbnRNb3ZlKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMjEuMDUuMjAxMiwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vTm90aWZ5TGVhdmUgYi9kb2MvbGZ1bi9Ob3RpZnlMZWF2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjFmY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vTm90aWZ5TGVhdmUKQEAgLTAsMCArMSwyOCBAQAorTm90aWZ5TGVhdmUoKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBOb3RpZnlMZWF2ZShvYmplY3Qgb2IsIG9iamVjdCBkZXN0KTsKKworQVJHVU1FTlRFOgorICAgICBvYgorICAgICAgICAgIERhcyBPYmpla3QsIGRhcyBhdXMgZGVtIEJlaGFlbHRlciBlbnRmZXJudCB3dXJkZS4KKyAgICAgZGVzdAorICAgICAgICAgIERhcyBPYmpla3QsIGluIGRhcyA8b2I+IGJld2VndCB3dXJkZS4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIGltIEJlaGFlbHRlciBhdWZnZXJ1ZmVuLCBuYWNoZGVtIGVpbiBPYmpla3QgYXVzCisgICAgIGJlc2FndGVuIEJlaGFlbHRlciBlbnRmZXJudCB3dXJkZS4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFTUVSS1VOR0VOOgorICAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIG51ciBpbSBGYWxsZSB1bmJlbGVidGVyIE9iamVrdGUgZ2VydWZlbi4gRnVlcgorICAgICBMZWJld2VzZW4gcy4gYml0dGUuIGV4aXQoKS4KKworU0lFSEUgQVVDSDoKKyAgICBOb3RpZnlSZW1vdmUoKSwgTm90aWZ5SW5zZXJ0KCksIFByZXZlbnRJbnNlcnQoKSwgUHJldmVudExlYXZlKCksIG1vdmUoKSwKKyAgICBleGl0KCksIGluaXQoKSwgTm90aWZ5TW92ZSgpLCBQcmV2ZW50TW92ZSgpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDIxLjA1LjIwMTIsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL05vdGlmeU1vdmUgYi9kb2MvbGZ1bi9Ob3RpZnlNb3ZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTE4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Ob3RpZnlNb3ZlCkBAIC0wLDAgKzEsNTggQEAKKworRlVOS1RJT046CisgICAgIHByb3RlY3RlZCB2b2lkIE5vdGlmeU1vdmUob2JqZWN0IGRlc3QsIG9iamVjdCBvbGRlbnYsIGludCBtZXRob2QpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvbW92aW5nLmMKKyAgICAgL3N0ZC9saXZpbmcvbW92aW5nLmMKKyAgICAgL3N0ZC9wbGF5ZXIvbW92aW5nLmMKKworQVJHVU1FTlRFOgorICAgICBkZXN0CisgICAgICAgICAgRGFzIFppZWwgZGVzIE1vdmVzIGJ6dy4gZGFzIGpldHp0IGFrdHVlbGxlIEVudmlyb25tZW50CisgICAgIG9sZGVudgorICAgICAgICAgIERhcyBhbHRlIEVudmlyb25tZW50IGRlcyBPYmpla3RzCisgICAgIG1ldGhvZAorICAgICAgICAgIERpZSBNb3ZlLU1ldGhvZGUobiksIG1pdCBkZXIvZGVuZW4gYmV3ZWd0IHd1cmRlLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgdm9tIG1vdmUoKSBpbSBPYmpla3QgZ2VydWZlbiwgc29iYWxkIGRpZSBCZXdlZ3VuZyBpbQorICAgICB3ZXNlbnRsaWNoZW4gYWJnZXNjaGxvc3NlbiBpc3QuIFNpZSBzb2xsIGVpbmVyc2VpdHMgZGFzIE9iamVrdCB1ZWJlciBlaW5lCisgICAgIHN0YXR0Z2VmdW5kZW5lIEJld2VndW5nIGluZm9ybWllcmVuLCBhYmVyIGF1Y2ggZWluaWdlIERpbmdlIGVybGVkaWdlbiwKKyAgICAgZGllIGJlaSBkZXIgQmV3ZWd1bmcgc3RhdHRmaW5kZW4gbXVlc3NlbiAoYmVpIExpdmluZ3Mgei5CLiBkYXMgVGVhbQorICAgICBuYWNoaG9sZW4pLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVNRVJLVU5HRU46CisgICAgIERpZXNlIEZ1bmt0aW9uIGthbm4gdWViZXJzY2hyaWViZW4gd2VyZGVuLCBkYW1pdCBkYXMgT2JqZWt0IEJld2VndW5nZW4KKyAgICAgbWl0Z2Vrb21tdCwgb2huZSBkYXMgbW92ZSgpIHNlbGJlciB6dSB1ZWJlcnNjaHJlaWJlbiBvZGVyIGVpbmVuIE1vdmUtSG9vaworICAgICB6dSBzZXR6ZW4uIERhYmVpIGFiZXIgYml0dGUgdW5iZWRpbmd0IGJlYWNodGVuOgorICAgICBEYXMgZ2VlcmJ0ZSBOb3RpZnlNb3ZlKCkgX01VU1MgSU4gSkVERU0gRkFMTF8gbWl0IGF1ZmdlcnVmZW4gd2VyZGVuIQorICAgICBTb2xsdGV0IGlociBkYXMgdmVyZ2Vzc2VuLCB3ZXJkZW4gZXVyZSBPYmpla3RlIGJ1Z2dlbi4gOy0pCisgICAgIERpZSBGdW5rdGlvbiBkYXJmIG51ciBvYmpla3RpbnRlcm4gdmVyd2VuZGV0IHdlcmRlbi4gQmVpbSBVZWJlcnNjaHJlaWJlbgorICAgICBkYXMgJ3Byb3RlY3RlZCcgbmljaHQgdmVyZ2Vzc2VuIQorCitCRUlTUElFTEU6CisgICAgIEVpbmUgQm9tYmUsIGRpZSBpbiBTZWhlcmhhdXN0cnVoZW4gZXhwbG9kaWVydDoKKworICAgICBwcm90ZWN0ZWQgdm9pZCBOb3RpZnlNb3ZlKG9iamVjdCBkZXN0LCBvYmplY3Qgb2xkZW52LCBpbnQgbWV0aG9kKSB7CisgICAgICAgICA6Ok5vdGlmeU1vdmUoZGVzdCwgb2xkZW52LCBtZXRob2QpOyAvLyBXSUNIVElHIQorICAgICAgICAgaWYgKG9iamVjdHAoZGVzdCkgJiYKKyAgICAgICAgICAgICBsb2FkX25hbWUoZGVzdCkgPT0gIi9kL3NlaGVyL2hhZXVzZXIvdHJ1aGUiKSB7CisgICAgICAgICAgICAgaWYgKGZpbmRfY2FsbF9vdXQoImV4cGxvZGllcmUiKT09LTEpCisgICAgICAgICAgICAgICAgIGNhbGxfb3V0KCJleHBsb2RpZXJlIiw5MDApOworICAgICAgICAgfQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgIHJlbW92ZV9jYWxsX291dCgiZXhwbG9kaWVyZSIpOworICAgICB9CisKKworU0lFSEUgQVVDSDoKKyAgICAgUHJldmVudExlYXZlKCksIE5vdGlmeUluc2VydCgpLCBOb3RpZnlMZWF2ZSgpLCBNYXlBZGRPYmplY3QoKSwKKyAgICAgUHJldmVudEluc2VydExpdmluZygpLCBQcmV2ZW50TGVhdmVMaXZpbmcoKSwgTm90aWZ5TW92ZSgpLAorICAgICBQcmV2ZW50TW92ZSgpLCBNYXlBZGRXZWlnaHQoKSwgbW92ZSgpLCAvc3RkL2NvbnRhaW5lci9yZXN0cmljdGlvbnMuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAwNC4wOC4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Ob3RpZnlQbGF5ZXJEZWF0aCBiL2RvYy9sZnVuL05vdGlmeVBsYXllckRlYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjYxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Ob3RpZnlQbGF5ZXJEZWF0aApAQCAtMCwwICsxLDc0IEBACitOb3RpZnlQbGF5ZXJEZWF0aCgpCisKK0ZVTktUSU9OOgorICB2b2lkIE5vdGlmeVBsYXllckRlYXRoKG9iamVjdCB2aWN0aW0sb2JqZWN0IGtpbGxlcixpbnQgbG9zdF9leHApOworCitERUZJTklFUlQgSU46CisgIC9zdGQvcGxheWVyL2xpZmUuYworCitBUkdVTUVOVEU6CisgIHZpY3RpbQorICAgIEdldG9ldGV0ZXIgU3BpZWxlci4KKyAga2lsbGVyCisgICAgT2JqZWt0LCB3ZWxjaGVzIGRlbiBTcGllbGVyIGdldG9ldGV0IGhhdC4KKyAgbG9zdF9leHAKKyAgICBFcmZhaHJ1bmdzcHVua3RlLCBkaWUgZGVyIFNwaWVsZXIgZHVyY2ggZGVuIFRvZCB2ZXJsb3JlbiBoYXQuCisKK0JFU0NIUkVJQlVORzoKKyAgRGllc2UgRnVua3Rpb24gd2lyZCBhdXMgZGVtIFNwaWVsZXJvYmpla3QgaGVyYXVzIGltbWVyIGRhbm4KKyAgYXVmZ2VydWZlbiwgd2VubiBkZXIgU3BpZWxlciBzdGlyYnQgdW5kIHp3YXI6CisgICAgMSkgaW0gR2VnbmVyLCBkZXIgZGVuIFNwaWVsZXIgZ2V0b2V0ZXQgaGF0LAorICAgIDIpIGltIEVudmlyb25tZW50IGRlcyBnZXRvZXRldGVuIFNwaWVsZXJzLAorICAgIDMpIGluIGRlciBHaWxkZSBkZXMgU3BpZWxlcnMsCisgICAgNCkgaW4gYWxsZW4gT2JqZWt0ZW4gaW4gZGllc2VtIEVudmlyb25tZW50IHVuZAorICAgIDUpIGluIGFsbGVuIE9iamVrdGVuIChhdWNoIGlubmVyaGFsYiBDb250YWluZXJuKSBpbSBTcGllbGVyLgorICBEZXIgR2VnbmVyIHdpcmQgaGllcmJlaSBudXIgZWlubWFsIGluZm9ybWllcnQsIGFsc28gYmVpIGxldHp0ZXJlbgorICBGYWVsbGVuIGhlcmF1c2dlZmlsdGVydCwgZmFsbHMgbm9ldGlnIQorICBIYXVwdGF1ZmdhYmUgZGllc2VyIEZ1bmt0aW9uIGlzdCBlcyBzb21pdCwgYXVmIFRvZGUgdm9uIFNwaWVsZXJuIHp1CisgIHJlYWdpZXJlbiBvZGVyIHNlbGJpZ2UgZWluZmFjaCBudXIgbWl0enVsb2dnZW4uCisKKyAgWnUgZGVtIFplaXRwdW5rdCBkZXMgQXVmcnVmcyBkaWVzZXIgRnVua3Rpb24gaXN0IGRlciBTcGllbGVyIG5vY2ggX25pY2h0XworICBHZWlzdCB1bmQgbm9jaCBfbmljaHRfIGltIFRvZGVzcmF1bSAtIGRpZXMgd2lyZCBpbSBBbnNjaGx1c3MgYW4gZGVuIEF1ZnJ1ZgorICBkZXIgTm90aWZ5UGxheWVyRGVhdGgoKSBkdXJjaGdlZnVlaHJ0LgorICAKKyAgQXVmZ2VydWZlbiB3aXJkIGRpZSBGdW5rdGlvbiBhdXMgJy9zdGQvcGxheWVyL2xpZmUuYycgbWl0dGVscyBjYXRjaCgpIHVuZAorICB3ZXJkZW4gbWl0IGxpbWl0ZWQoKSBhdWYgbWF4LiAxNTBrIChHZWduZXIsIEVudmlyb25tZW50LCBHaWxkZSkgYnp3LiA4MGsgCisgIChhbGxlIGFuZGVyZW4gT2JqZWt0ZSkgVGlja3MgYmVzY2hyYWVua3QuCisgIEZlaGxlciBpbiBkaWVzZXIgRnVua3Rpb24gaGFiZW4gc29taXQga2VpbmUgbmVnYXRpdmVuIEF1c3dpcmt1bmdlbgorICBhdWYgZGFzIFN0ZXJiZW4gZGVzIFNwaWVsZXJzLgorCitSVWVDS0dBQkVXRVJUOgorICBrZWluZXIKKworQkVJU1BJRUxFOgorICBGb2xnZW5kZXMgQmVpc3BpZWwgZGVtb25zdHJpZXJ0IGJlaXNwaWVsc3dlaXNlLCB3aWUgbWFuIFRvZGUgdm9uCisgIFNwaWVsZXJuIG1pdGxvZ2dlbiBrYW5uIChkYXMgQmVpc3BpZWwgaXN0IGhpZXJiZWkgYXVmIGRlbiBhbQorICBoYWV1Zmlnc3RlbiBhdWZ0cmV0ZW5kZW4gRmFsbCBiZXpvZ2VuLCBkYXNzIG51ciBkYXMgdG9ldGVuZGUgT2JqZWt0CisgIGRlbiBUb2QgcHJvdG9rb2xsaWVyZW4gc29sbCk6CisKKyAgICB2b2lkIE5vdGlmeVBsYXllckRlYXRoKG9iamVjdCBkZWFkLCBvYmplY3Qga2lsbGVyLCBpbnQgbG9zdF9leHApIAorICAgIHsgCisgICAgICBpZiAoIGludHAobG9zdF9leHApICYmIG9iamVjdHAoZGVhZCkgJiYgb2JqZWN0cChraWxsZXIpICYmIAorICAgICAgICAgICBraWxsZXI9PXRoaXNfb2JqZWN0KCkgKQorICAgICAgICB3cml0ZV9maWxlKCAiL2xvZy9wYXRyeW4vZGVhZCIsIHNwcmludGYoCisgICAgICAgICAgIiVzIC0gJXMgdm9uICVzIGdldG9ldGV0LiBYUDogLSVkIiwgY3RpbWUoKSwgZ2V0dWlkKGRlYWQpLAorICAgICAgICAgICBraWxsZXItPm5hbWUoV0VNKSwgbG9zdF9leHApICk7CisgICAgfQorCisgIEJpdHRlIGJlYWNodGVuOiB3cml0ZV9maWxlKCkgc2NocmVpYnQgb2huZSBHcm9lc3NlbmJlZ3Jlbnp1bmcgaW4gZGFzCisgIExvZ2ZpbGUuIERhIGRpZXMgYXVmIERhdWVyIGJ6dy4gaW4gR2ViaWV0ZW4gbWl0IGhvaGVyIExvZy1Ba3Rpdml0YWV0CisgIHp1IExvZ2ZpbGVzIHZvbiBlbm9ybWVyIEdyb2Vzc2UgZnVlaHJlbiBrYW5uLCBpc3QgZGllIFZlcndlbmR1bmcKKyAgdm9uIHdyaXRlX2ZpbGUoKSBuaWNodCBlbXBmZWhsZW5zd2VydC4gQXVzbmFobWVuIGtvZW5uZW4gbmF0dWVybGljaAorICBtaXQgZGVtIHp1c3RhZW5kaWdlbiBSZWdpb25zbWFnaWVyIGFiZ2VzcHJvY2hlbiB3ZXJkZW4sIHouQi4gZnVlcgorICBiZWdyZW56dGUgQW53ZW5kdW5nIGV0d2EgYmVpIHNlaHIgc3Rhcmtlbiwgc2VsdGVuIGJlc2llZ3RlbiBHZWduZXJuLgorCisgIFdlaXRlcmhpbiBpc3QgZXMgZW1wZmVobGVuc3dlcnQsIGRhcyB0b2V0ZW5kZSBPYmpla3QgKGtpbGxlcikgbmljaHQKKyAgaW0gTm90aWZ5UGxheWVyRGVhdGgoKSB6dSB6ZXN0b2VyZW4sIHNvbmRlcm4gZXR3YXMgemVpdHZlcnNldHp0LAorICBkYW1pdCBuaWNodCBldHdhIGltIG5hY2hmb2xnZW5kZW4gTm90aWZ5UGxheWVyRGVhdGgoKSBlaW5lcyBhbmRlcmVuCisgIE9iamVrdGVzIChzLm8uIFJlaWhlbmZvbGdlKSBraWxsZXI9PTAgaXN0LgorCitTSUVIRSBBVUNIOgorICBEZWZlbmQoKSwgZG9fZGFtYWdlKCksIE5vdGlmeUhwQ2hhbmdlKCksIGNhdGNoKCksIHdyaXRlX2ZpbGUoKSwgbG9nX2ZpbGUoKQorICBQX0xBU1RfREVBVEhfUFJPUFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI0LjAzLjIwMTIsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL05vdGlmeVJlbW92ZSBiL2RvYy9sZnVuL05vdGlmeVJlbW92ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGIwNGZhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vTm90aWZ5UmVtb3ZlCkBAIC0wLDAgKzEsMjYgQEAKK05vdGlmeVJlbW92ZSgpCisKK0ZVTktUSU9OOgorICAgICB2b2lkIE5vdGlmeVJlbW92ZShvYmplY3Qgb2IpOworCitBUkdVTUVOVEU6CisgICAgIG9iCisgICAgICAgICAgRGFzIE9iamVrdCwgZGFzIGF1cyBkZW0gQmVoYWVsdGVyIGVudGZlcm50IHd1cmRlLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgaW0gQmVoYWVsdGVyIGF1ZmdlcnVmZW4sIHdlbm4gZWluIE9iamVrdCBpbQorICAgICBiZXNhZ3RlbiBCZWhhZWx0ZXIgemVyc3RvZXJ0IHdpcmQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitCRU1FUktVTkdFTjoKKyAgICAgV2lyZCBuaWNodCBnZXJ1ZmVuLCB3ZW5uIGVpbiBTcGllbGVyb2JqZWt0IHplcnN0b2VydCB3aXJkLgorCitTSUVIRSBBVUNIOgorICAgIE5vdGlmeUxlYXZlKCksIE5vdGlmeUluc2VydCgpLCBQcmV2ZW50SW5zZXJ0KCksIFByZXZlbnRMZWF2ZSgpLCBtb3ZlKCksCisgICAgTm90aWZ5TW92ZSgpLCBQcmV2ZW50TW92ZSgpLAorICAgIEJlY29tZXNOZXREZWFkKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMDQuMDguMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vTm90aWZ5VGltZWRBdHRyTW9kRXhwaXJlZCBiL2RvYy9sZnVuL05vdGlmeVRpbWVkQXR0ck1vZEV4cGlyZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5YTc5YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL05vdGlmeVRpbWVkQXR0ck1vZEV4cGlyZWQKQEAgLTAsMCArMSwyMCBAQAorTm90aWZ5VGltZWRBdHRyTW9kRXhwaXJlZAorRlVOS1RJT046CisgICAgIHZvaWQgTm90aWZ5VGltZWRBdHRyTW9kRXhwaXJlZChzdHJpbmcga2V5KQorCitERUZJTklFUlQgSU46CisgICAgIFB1c2gtTWV0aG9kZSBpbiBub3RpZnktT2JqZWt0ZW4uCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nIGtleQkJLSBkZXIgZ2Vsb2VzY2h0ZSBNb2RpZmllcgorCitCRVNDSFJFSUJVTkc6CisgICAgIFdpcmQgYXVzIGRlbSBMZWJld2VzZW4gYXVzIGF1ZmdlcnVmZW4sIGluIGRlbSBkZXIgZW50c3ByZWNoZW5kZW4KKyAgICAgTW9kaWZpZXIgc29lYmVuIHVuZ3VlbHRpZyBnZXdvcmRlbiBpc3QuICAgICAKKworU0lFSEUgQVVDSDoKKyAgICAgUHJvcGVydGllczogUF9BVFRSSUJVVEVTLCBQX1RJTUVEX0FUVFJfTU9ECisgICAgIE1ldGhvZGVuOgkgU2V0VGltZWRBdHRyTW9kaWZpZXIoTCksIERlbGV0ZVRpbWVkQXR0ck1vZGlmaWVyKEwpLAorCQkgUXVlcnlUaW1lZEF0dHJNb2RpZmllcihMKQorCisyNy4gSnVsaSAyMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Ob3RpZnlYTUF0dHJNb2RMaW1pdFZpb2xhdGlvbiBiL2RvYy9sZnVuL05vdGlmeVhNQXR0ck1vZExpbWl0VmlvbGF0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZjM5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Ob3RpZnlYTUF0dHJNb2RMaW1pdFZpb2xhdGlvbgpAQCAtMCwwICsxLDIwIEBACitOb3RpZnlYTUF0dHJNb2RMaW1pdFZpb2xhdGlvbigpCitGVU5LVElPTjoKKyAgICAgIHZvaWQgTm90aWZ5WE1BdHRyTW9kTGltaXRWaW9sYXRpb24oKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvcmVzdHJpY3Rpb25zLmMKKw0KK0JFU0NIUkVJQlVORzoKKyAgICAgV2lyZCBnZXJ1ZmVuIHdlbm4gZGllIFN1bW1lIGRlciBpbiBQX1hfQVRUUl9NT0Qgb2RlciBQX1hfQVRUUl9NT0QKKyAgICAgYW5nZWdlYmVuZW4gTW9kaWZpa2F0b3JlbiBkaWUgU3VtbWUgYWxsZXIgTW9kaWZpa2F0b3JlbiBpbSBTcGllbGVyIAorICAgICB1ZWJlciBkZW4genVnZWxhc3NlbmVuIEdyZW56d2VydCBoZWJ0IHVuZCBzb21pdCBuaWNodCBtZWhyIGluIGRpZQorICAgICBCZXJlY2hudW5nIGVpbmdlaHQuCisgICAgIAorU0lFSEUgQVVDSDoKKyAgICAgUXVlcnlBdHRyaWJ1dGUoKSwgUXVlcnlSZWFsQXR0cmlidXRlKCksIFF1ZXJ5QXR0cmlidXRlT2Zmc2V0KCksDQorICAgICBTZXRBdHRyKCksIFNldEF0dHJpYnV0ZSgpLCBTZXRSZWFsQXR0cmlidXRlKCksIFVwZGF0ZUF0dHJpYnV0ZXMoKSwNCisgICAgIFBfQVRUUklCVVRFUywgUF9BVFRSSUJVVEVTX09GRlNFVFMsIFBfQVRUUklCVVRFU19NT0RJRklFUiwNCisgICAgIFBfWF9BVFRSX01PRCwgUF9NX0FUVFJfTU9ELCAvc3RkL2xpdmluZy9hdHRyaWJ1dGVzLmMNCisKKzEzLkp1bi4yMDA0LCBNdWFkaWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9QYWNpZnkgYi9kb2MvbGZ1bi9QYWNpZnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwZWQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1BhY2lmeQpAQCAtMCwwICsxLDExMyBAQAorRlVOS1RJT04KKwlwdWJsaWMgaW50IFBhY2lmeShvYmplY3QgY2FzdGVyKQorCitERUZJTklFUlQgSU4KKwkvc3RkL2xpdmluZy9jb21iYXQuYworCitCRVNDSFJFSUJVTkcKKwlEaWVzZSBGdW5rdGlvbiB2ZXJzdWNodCwgZWluIExlYmV3ZXNlbiB6dSBiZWZyaWVkZW4uCisgIFdpbGwgZWluZSBHaWxkZSBlaW4gTGViZXdlc2VuIGJlZnJpZWRlbiwgbXVzcyBzaWUgaGllcmZ1ZXIgZGllc2UgRnVua3Rpb24KKyAgaW4gZGVtIExlYmV3ZXNlbiBhdWZydWZlbi4KKworICBFaW4gaW1tZXIgYmVmcmllZGJhcmVyIE5QQyBrYW5uIGR1cmNoIGRhcyBTZXR6ZW4gdm9uIFBfQUNDRVBUX1BFQUNFIGluIGVpbmVtCisgIExlYmV3ZXNlbiByZWFsaXNpZXJ0IHdlcmRlbi4KKworCVN0YW5kYXJkbWFlc3NpZyBmdW5rdGlvbmllcnQgZGllIEZ1bmt0aW9uIHdpZSBmb2xndDoKKyAgKiBLb21tdCBkZXIgVmVyc3VjaCB2b20gU3BlbGxjYXN0ZXIgc2VsYnN0LCBpc3QgZXIgaW1tZXIgZXJmb2xncmVpY2guCisgICogS29tbXQgZGVyIFZlcnN1Y2ggdm9uIGVpbmVtIFRlYW1rb2xsZWdlbiwgaXN0IGVyIGltbWVyIGVyZm9sZ3JlaWNoLgorICAqIEhhdCBkYXMgTGViZXdlc2VuIGtlaW5lIEdlZ25lciwgaXN0IGRlciBWZXJzdWNoIGltbWVyIGVyZm9sZ2xvcy4KKyAgSW4gZGllc2VuIEZhZWxsZW4gZXJmb2xndCBhdWNoIGtlaW5lIEVyaG9laHVuZyBkZXMgQmVmcmllZGV6YWVobGVycy4KKyAgCisgIEluIGFuZGVyZW4gRmFlbGxlbiB3aXJkIGRpZSBpbiBQX1BFQUNFX0hJU1RPUlkgZnVlciBkaWUgR2lsZGUgZGVzIENhc3RlcnMKKyAgYWJnZWxlZ3RlIFphaGwgZXJmb2xncmVpY2hlciBCZWZyaWVkdW5nZW4gKEFOWiksIGRpZSBJbnRlbGxpZ2VueiBkZXMKKyAgQ2FzdGVycyAoSU5UX0NBU1RFUikgdW5kIGRpZSBJbnRlbGxpZ2VueiBkZXMgTGViZW53ZXNlbnMgc2VsYmVyIChJTlRfTUUpCisgIGVybWl0dGVsdC4KKyAgQW5zY2hsaWVzc2VuZCB3aXJkIGVpbmUgV2FocnNjaGVpbmxpY2hrZWl0IHcgYXVzZ2VyZWNobmV0OgorICAKKyAgICB3ID0gKElOVF9DQVNURVIgKyAxMCAtIEFOWio0KSAvIChJTlRfTUUgKyAxMCkKKyAgCisgIEhpZXJiZWkgZ2lidCB3IGRpZSBDaGFuY2UgYXVmIGVpbmUgZXJmb2xncmVpY2hlIEJlZnJpZWR1bmcgYW4uIE1pdHRlbHMgZWluZXIKKyAgWnVmYWxsc3phaGwgd2lyZCBiZXN0aW1tdCwgb2IgZGVyIGFrdHVlbGxlIFZlcnN1Y2ggZXJmb2xncmVpY2ggaXN0LiBGYWxscworICBqYSwgd2lyZCBkZXIgWmFlaGxlciBmdWVyIGRpZSBHaWxkZSBkZXMgQ2FzdGVycyBpbiBQX1BFQUNFX0hJU1RPUlkgZXJob2VodC4KKworICBKZSBvZWZ0ZXIgZWluIExlYmV3ZXNlbiBhbHMgdm9uIGVpbmVyIEdpbGRlIHNjaG9uIGJlZnJpZWRldCB3dXJkZSwgZGVzdG8KKyAgdW53YWhyc2NoZWlubGljaGVyLCBkYXNzIGVzIGVybmV1dCBkYXJhdWYgJ2hlcmVpbmZhZWxsdCcuCisKK0JFTUVSS1VOR0VOOgorICAqCURpZSBGdW5rdGlvbiBrYW5uIGF1Y2ggdWViZXJzY2hyaWViZW4gd2VyZGVuLCB1bSBlaW4gdm9tIE1hZ2llcgorICAgIGdld3VlbnNjaHRlcyBWZXJoYWx0ZW4genUgcmVhbGlzaWVyZW4uIEVpbiBrb21wbGV0dGVzIEFiaGFlbmdlbiB2b24KKyAgICBCZWZyaWVkdW5nZW4gc29sbHRlIGRhYmVpIGFiZXIgZGllIEF1c25haG1lIHNlaW4hCisgICogRGllc2UgRnVua3Rpb24gdmVyd2FsdGV0IGF1Y2ggZGFzIFBfUEVBQ0VfSElTVE9SWSwgc3BlemllbGwgZGllIFJlZHVrdGlvbgorICAgIGRlciBFcmZvbGdzemFlaGxlci4gVWViZXJzY2hyZWlidCBtYW4gc2llIG9obmUgZGFzIGdlZXJidGUgUGFjaWZ5KCkKKyAgICB6dSBudXR6ZW4sIHdpcmQgUF9QRUFDRV9ISVNUT1JZIG5pY2h0IG1laHIgdmVyd2FsdGV0LgorCitSVUVDS0dBQkVXRVJURToKKyAgICAxIC0gZGFzIExlYmV3ZXNlbiB3dXJkZSBlcmZvbGdyZWljaCBiZWZyaWVkZXQuLgorICAgIDAgLSBkZXIgQmVmcmllZGV2ZXJzdWNoIGlzdCBnZXNjaGVpdGVydC4KKyAgICAKK0JFSVNQSUVMRToKKyAgICBBbmdlbm9tbWVuLCBkZXIgQ2FzdGVyIGhhdCBlaW5lIEludGVsbGlnZW56IHZvbiAyMi4gRGllIGZvbGdlbmRlIFRhYmVsbGUKKyAgICBnaWJ0IGRhbm4gZGllIFdhaHJzY2hlaW5saWNoa2VpdGVuIGZ1ZXIgZWluZSBlcmZvbGdyZWljaGUgQmVmcmllZHVuZyBhbjoKKyAgICAoaW4gQWJoYWVuZ2lna2VpdCB2b24gZWlnZW5lciBJbnRlbGxpZ2VueiB1bmQgdmVyZ2FuZ2VuZXIgZXJmb2xncmVpY2hlcgorICAgICBWZXJzdWNoZSkKKyBJTlRfTUUgIEVyZm9sZ3N3YWhyc2NoZWlubGljaGtlaXRlbiBqZSBuYWNoIEFuemFobCBlcmZvbGdyZWljaGVyIFZlcnN1Y2hlCisgICAgICAgICAgICAgIDEgICAgICAgMiAgICAgICAzICAgICAgIDQgICAgICAgNSAgICAgICA2ICAgICAgIDcgICAgICAgOAorICAgICAgMCAgICAgMjgwICAgICAyNDAgICAgIDIwMCAgICAgMTYwICAgICAxMjAgICAgICA4MCAgICAgIDQwICAgICAgIDAKKyAgICAgIDIgIDIzMywzMyAgICAgMjAwICAxNjYsNjcgIDEzMywzMyAgICAgMTAwICAgNjYsNjcgICAzMywzMyAgICAgICAwCisgICAgICA0ICAgICAyMDAgIDE3MSw0MyAgMTQyLDg2ICAxMTQsMjkgICA4NSw3MSAgIDU3LDE0ICAgMjgsNTcgICAgICAgMAorICAgICAgNiAgICAgMTc1ICAgICAxNTAgICAgIDEyNSAgICAgMTAwICAgICAgNzUgICAgICA1MCAgICAgIDI1ICAgICAgIDAKKyAgICAgIDggIDE1NSw1NiAgMTMzLDMzICAxMTEsMTEgICA4OCw4OSAgIDY2LDY3ICAgNDQsNDQgICAyMiwyMiAgICAgICAwCisgICAgIDEwICAgICAxNDAgICAgIDEyMCAgICAgMTAwICAgICAgODAgICAgICA2MCAgICAgIDQwICAgICAgMjAgICAgICAgMAorICAgICAxMiAgMTI3LDI3ICAxMDksMDkgICA5MCw5MSAgIDcyLDczICAgNTQsNTUgICAzNiwzNiAgIDE4LDE4ICAgICAgIDAKKyAgICAgMTQgIDExNiw2NyAgICAgMTAwICAgODMsMzMgICA2Niw2NyAgICAgIDUwICAgMzMsMzMgICAxNiw2NyAgICAgICAwCisgICAgIDE2ICAxMDcsNjkgICA5MiwzMSAgIDc2LDkyICAgNjEsNTQgICA0NiwxNSAgIDMwLDc3ICAgMTUsMzggICAgICAgMAorICAgICAxOCAgICAgMTAwICAgODUsNzEgICA3MSw0MyAgIDU3LDE0ICAgNDIsODYgICAyOCw1NyAgIDE0LDI5ICAgICAgIDAKKyAgICAgMjAgICA5MywzMyAgICAgIDgwICAgNjYsNjcgICA1MywzMyAgICAgIDQwICAgMjYsNjcgICAxMywzMyAgICAgICAwCisgICAgIDIyICAgIDg3LDUgICAgICA3NSAgICA2Miw1ICAgICAgNTAgICAgMzcsNSAgICAgIDI1ICAgIDEyLDUgICAgICAgMAorICAgICAyNCAgIDgyLDM1ICAgNzAsNTkgICA1OCw4MiAgIDQ3LDA2ICAgMzUsMjkgICAyMyw1MyAgIDExLDc2ICAgICAgIDAKKyAgICAgMjYgICA3Nyw3OCAgIDY2LDY3ICAgNTUsNTYgICA0NCw0NCAgIDMzLDMzICAgMjIsMjIgICAxMSwxMSAgICAgICAwCisgICAgIDI4ICAgNzMsNjggICA2MywxNiAgIDUyLDYzICAgNDIsMTEgICAzMSw1OCAgIDIxLDA1ICAgMTAsNTMgICAgICAgMAorICAgICAzMCAgICAgIDcwICAgICAgNjAgICAgICA1MCAgICAgIDQwICAgICAgMzAgICAgICAyMCAgICAgIDEwICAgICAgIDAKKyAgICAgMzIgICA2Niw2NyAgIDU3LDE0ICAgNDcsNjIgICAgMzgsMSAgIDI4LDU3ICAgMTksMDUgICAgOSw1MiAgICAgICAwCisgICAgIDM0ICAgNjMsNjQgICA1NCw1NSAgIDQ1LDQ1ICAgMzYsMzYgICAyNywyNyAgIDE4LDE4ICAgIDksMDkgICAgICAgMAorICAgICAzNSAgIDYyLDIyICAgNTMsMzMgICA0NCw0NCAgIDM1LDU2ICAgMjYsNjcgICAxNyw3OCAgICA4LDg5ICAgICAgIDAKKyAgICAgMzYgICA2MCw4NyAgIDUyLDE3ICAgNDMsNDggICAzNCw3OCAgIDI2LDA5ICAgMTcsMzkgICAgIDgsNyAgICAgICAwCisgICAgIDM4ICAgNTgsMzMgICAgICA1MCAgIDQxLDY3ICAgMzMsMzMgICAgICAyNSAgIDE2LDY3ICAgIDgsMzMgICAgICAgMAorICAgICA0MCAgICAgIDU2ICAgICAgNDggICAgICA0MCAgICAgIDMyICAgICAgMjQgICAgICAxNiAgICAgICA4ICAgICAgIDAKKyAgICAgNDIgICA1Myw4NSAgIDQ2LDE1ICAgMzgsNDYgICAzMCw3NyAgIDIzLDA4ICAgMTUsMzggICAgNyw2OSAgICAgICAwCisgICAgIDQ0ICAgNTEsODUgICA0NCw0NCAgIDM3LDA0ICAgMjksNjMgICAyMiwyMiAgIDE0LDgxICAgIDcsNDEgICAgICAgMAorICAgICA0NiAgICAgIDUwICAgNDIsODYgICAzNSw3MSAgIDI4LDU3ICAgMjEsNDMgICAxNCwyOSAgICA3LDE0ICAgICAgIDAKKyAgICAgNDggICA0OCwyOCAgIDQxLDM4ICAgMzQsNDggICAyNyw1OSAgIDIwLDY5ICAgMTMsNzkgICAgIDYsOSAgICAgICAwCisgICAgIDUwICAgNDYsNjcgICAgICA0MCAgIDMzLDMzICAgMjYsNjcgICAgICAyMCAgIDEzLDMzICAgIDYsNjcgICAgICAgMAorICAgICA1MiAgIDQ1LDE2ICAgMzgsNzEgICAzMiwyNiAgIDI1LDgxICAgMTksMzUgICAgMTIsOSAgICA2LDQ1ICAgICAgIDAKKyAgICAgNTQgICA0Myw3NSAgICAzNyw1ICAgMzEsMjUgICAgICAyNSAgIDE4LDc1ICAgIDEyLDUgICAgNiwyNSAgICAgICAwCisgICAgIDU2ICAgNDIsNDIgICAzNiwzNiAgICAzMCwzICAgMjQsMjQgICAxOCwxOCAgIDEyLDEyICAgIDYsMDYgICAgICAgMAorICAgICA1OCAgIDQxLDE4ICAgMzUsMjkgICAyOSw0MSAgIDIzLDUzICAgMTcsNjUgICAxMSw3NiAgICA1LDg4ICAgICAgIDAKKyAgICAgNjAgICAgICA0MCAgIDM0LDI5ICAgMjgsNTcgICAyMiw4NiAgIDE3LDE0ICAgMTEsNDMgICAgNSw3MSAgICAgICAwCisgICAgIDYyICAgMzgsODkgICAzMywzMyAgIDI3LDc4ICAgMjIsMjIgICAxNiw2NyAgIDExLDExICAgIDUsNTYgICAgICAgMAorICAgICA2NCAgIDM3LDg0ICAgMzIsNDMgICAyNywwMyAgIDIxLDYyICAgMTYsMjIgICAxMCw4MSAgICA1LDQxICAgICAgIDAKKyAgICAgNjYgICAzNiw4NCAgIDMxLDU4ICAgMjYsMzIgICAyMSwwNSAgIDE1LDc5ICAgMTAsNTMgICAgNSwyNiAgICAgICAwCisgICAgIDY4ICAgIDM1LDkgICAzMCw3NyAgIDI1LDY0ICAgMjAsNTEgICAxNSwzOCAgIDEwLDI2ICAgIDUsMTMgICAgICAgMAorICAgICA3MCAgICAgIDM1ICAgICAgMzAgICAgICAyNSAgICAgIDIwICAgICAgMTUgICAgICAxMCAgICAgICA1ICAgICAgIDAKKyAgICAgNzIgICAzNCwxNSAgIDI5LDI3ICAgMjQsMzkgICAxOSw1MSAgIDE0LDYzICAgIDksNzYgICAgNCw4OCAgICAgICAwCisgICAgIDc0ICAgMzMsMzMgICAyOCw1NyAgIDIzLDgxICAgMTksMDUgICAxNCwyOSAgICA5LDUyICAgIDQsNzYgICAgICAgMAorICAgICA3NiAgIDMyLDU2ICAgMjcsOTEgICAyMywyNiAgICAxOCw2ICAgMTMsOTUgICAgIDksMyAgICA0LDY1ICAgICAgIDAKKyAgICAgNzggICAzMSw4MiAgIDI3LDI3ICAgMjIsNzMgICAxOCwxOCAgIDEzLDY0ICAgIDksMDkgICAgNCw1NSAgICAgICAwCisgICAgIDgwICAgMzEsMTEgICAyNiw2NyAgIDIyLDIyICAgMTcsNzggICAxMywzMyAgICA4LDg5ICAgIDQsNDQgICAgICAgMAorICAgICA4MiAgIDMwLDQzICAgMjYsMDkgICAyMSw3NCAgIDE3LDM5ICAgMTMsMDQgICAgIDgsNyAgICA0LDM1ICAgICAgIDAKKyAgICAgODQgICAyOSw3OSAgIDI1LDUzICAgMjEsMjggICAxNywwMiAgIDEyLDc3ICAgIDgsNTEgICAgNCwyNiAgICAgICAwCisgICAgIDg2ICAgMjksMTcgICAgICAyNSAgIDIwLDgzICAgMTYsNjcgICAgMTIsNSAgICA4LDMzICAgIDQsMTcgICAgICAgMAorICAgICA4OCAgIDI4LDU3ICAgMjQsNDkgICAyMCw0MSAgIDE2LDMzICAgMTIsMjQgICAgOCwxNiAgICA0LDA4ICAgICAgIDAKKyAgICAgOTAgICAgICAyOCAgICAgIDI0ICAgICAgMjAgICAgICAxNiAgICAgIDEyICAgICAgIDggICAgICAgNCAgICAgICAwCisgICAgIDkyICAgMjcsNDUgICAyMyw1MyAgIDE5LDYxICAgMTUsNjkgICAxMSw3NiAgICA3LDg0ICAgIDMsOTIgICAgICAgMAorICAgICA5NCAgIDI2LDkyICAgMjMsMDggICAxOSwyMyAgIDE1LDM4ICAgMTEsNTQgICAgNyw2OSAgICAzLDg1ICAgICAgIDAKKyAgICAgOTYgICAyNiw0MiAgIDIyLDY0ICAgMTgsODcgICAxNSwwOSAgIDExLDMyICAgIDcsNTUgICAgMyw3NyAgICAgICAwCisgICAgIDk4ICAgMjUsOTMgICAyMiwyMiAgIDE4LDUyICAgMTQsODEgICAxMSwxMSAgICA3LDQxICAgICAzLDcgICAgICAgMAorICAgIDEwMCAgIDI1LDQ1ICAgMjEsODIgICAxOCwxOCAgIDE0LDU1ICAgMTAsOTEgICAgNywyNyAgICAzLDY0ICAgICAgIDAKKworU0lFSEUgQVVDSAorICAgICAgICBQX0FDQ0VQVF9QRUFDRSwgUF9QRUFDRV9ISVNUT1JZCisKK0xFVFpURSBBRU5ERVJVTkcKKzA3LjA2LjIwMDgsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUGF5SW4gYi9kb2MvbGZ1bi9QYXlJbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzE0YzUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUGF5SW4KQEAgLTAsMCArMSw0NyBAQAorUGF5SW4oKQorRlVOS1RJT046CisgICAgIHZhcmFyZ3Mgdm9pZCBQYXlJbihpbnQgYW1vdW50LCBpbnQgcGVyY2VudCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3AvZGFlbW9uL3plbnRyYWxiYW5rLmMKKworQVJHVU1FTlRFOgorICAgICBpbnQgYW1vdW50CS0JZWluenV6YWhsZW5kZXIgQmV0cmFnCisgICAgIGludCBwZXJjZW50IC0JQmV3ZXJ0dW5nc3Byb3plbnRzYXR6CisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCBCcnV0dG8gYW1vdW50IEdlbGQgaW4gZGllIEJhbmsgZWluZ2V6YWhsdC4gRGVyIFByb3plbnRzYXR6IGxlZ3QKKyAgICAgZmVzdCwgd2lldmllbCB0YXRzYWVjaGxpY2ggZ3V0Z2VzY2hyaWViZW4gd2lyZDoKKyAgICAgR3V0c2NocmlmdCA9IGFtb3VudCpwZXJjZW50LzEwMAorCisgICAgIFdpcmQgcGVyY2VudCBuaWNodCBhbmdlZ2ViZW4sIGRhbm4gd2lyZCBkZXIgZGVyemVpdGlnZSBCYW5rYmV3ZXJ0dW5ncy0KKyAgICAgbWFzc3N0YWIgZnVlciBHZWxkIGFuZ2Vub21tZW4uCisKK0JFSVNQSUVMRToKKyAgICAgI2luY2x1ZGUgPGJhbmsuaD4KKyAgICAgLi4uCisgICAgIEFkZENtZCgic3BlbmRlIiwjJ2FjdGlvbl9zcGVuZGUsCisJICAgICJXYXMgd2lsbHN0IGR1IHNwZW5kZW4/Iik7CisgICAgIC4uLgorICAgICBpbnQgYWN0aW9uX3NwZW5kZShzdHJpbmcgc3RyLCBleHRyYSAqbykgeworICAgICAgaW50IGk7CisgICAgICBpZihzc2NhbmYoIiVkIG11ZW56ZSIsaSk9PTEgJiYgaT4wKQorICAgICAgIGlmKHRoaXNfcGxheWVyKCktPlF1ZXJ5TW9uZXkoaSkgJiYgdGhpc19wbGF5ZXIoKS0+QWRkTW9uZXkoLWkpKSB7CisgICAgICAgIHdyaXRlKCJEdSBzcGVuZGVzdCAiK2krIiBNdWVuemVuLlxuIik7CisJc2F5KHRoaXNfcGxheWVyKCktPk5hbWUoV0VSKSsiIHNwZW5kZXQgIitpKyIgTXVlbnplbi5cbiIpOworCVpFTlRSQUxCQU5LLT5QYXlJbihpKTsKKwkKKyAgICAgICB9IGVsc2UKKyAgICAgICAgd3JpdGUoIlNvdmllbCBoYXN0IGR1IG5pY2h0IGRhYmVpIVxuIik7CisgICAgICAuLi4KKworQkVNRVJLVU5HRU46CisgICAgIFVuc2VyZSBaZW50cmFsYmFuayBpc3Qga29ycnVwdCwgdm9yIGFsbGVtIGRhZHVyY2gsIGRhc3MgaW4gTGFlZGVuIHVuZAorICAgICBhbiBhbmRlcmVuIFN0ZWxsZW4gR2VsZCBlcnpldWd0IHdpcmQuCisKK1NJRUhFIEFVQ0g6CisgICAgIEdlbGRoYW5kbGluZzoJQWRkTW9uZXkoTCksIFF1ZXJ5TW9uZXkoTCkKKyAgICAgWmVudHJhbGJhbms6CVdpdGhEcmF3KEwpLCBfcXVlcnlfY3VycmVudF9tb25leShMKQorICAgICBTb25zdGlnZXM6CQkvaXRlbXMvbW9uZXkuYywgL3N5cy9iYW5rLmgKKworMjcuIEFwciAyMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9QbGF5ZXJRdWl0IGIvZG9jL2xmdW4vUGxheWVyUXVpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmUzZDZlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUGxheWVyUXVpdApAQCAtMCwwICsxLDIwIEBACitQbGF5ZXJRdWl0KCkKKworRlVOS1RJT046CisgICAgdm9pZCBQbGF5ZXJRdWl0KG9iamVjdCBwbCk7CisKK0dFUlVGRU4gVk9OOgorICAgIC9zdGQvcGxheWVyL2Jhc2UuYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IHBsCisgICAgICBTcGllbGVyLCBkZXIgVmVyYmluZHVuZyBiZWVuZGV0CisKK0JFU0NIUkVJQlVORzoKKyAgICBXaXJkIGltIGVudmlyb25tZW50KCkgZ2VydWZlbiwgd2VubiBkZXIgU3BpZWxlciBkYXMgTVVEIG1pdCAiZW5kZSIKKyAgICB2ZXJsYWVzc3QuCisKK1NJRUhFIEFVQ0g6CisgICAgQmVjb21lc05ldEFsaXZlKCksIEJlY29tZXNOZXREZWFkKCkKKyAgICAKKzI0LiBBdWcgMjAxMSBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1ByZXNlbnRFbmVtaWVzIGIvZG9jL2xmdW4vUHJlc2VudEVuZW1pZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzMWVmZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1ByZXNlbnRFbmVtaWVzCkBAIC0wLDAgKzEsNzEgQEAKK0ZVTktUSU9OOgorCW9iamVjdCAqUHJlc2VudEVuZW1pZXMoKTsKKworREVGSU5JRVJUIElOOgorCS9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKwlrZWluZQorCitSVWVDS0dBQkVXRVJUOgorCWFud2VzZW5kZSBGZWluZGUKKworQkVTQ0hSRUlCVU5HOgorCURpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgZ2VuYXUgZGllIEZlaW5kZSB6dXJ1ZWNrLCBkaWUgc2ljaCBkZXJ6ZWl0IGltCisJc2VsYmVuIFJhdW0gYmVmaW5kZW4uIERpZSBGZWluZGUgdW50ZXJsaWVnZW4gaGllcmJlaSBub2NoIGdld2lzc2VuCisJRWluc2NocmFlbmt1bmdlbjoKKwkgICgxKSBTaWUgZHVlcmZlbiBhbHMgTlBDIG5pY2h0IGdlc3RvcmJlbiBzZWluLCBkYXMgaGVpc3N0LCBzaWUKKwkgICAgICBtdWVzc2VuIGFscyBPYmpla3Qgbm9jaCBleGlzdGllcmVuLgorCSAgKDIpIFNpZSBkdWVyZmVuIGFscyBTcGllbGVyIG5pY2h0IGdlc3RvcmJlbiBzZWluLCBkYXMgaGVpc3N0LCBzaWUKKwkgICAgICBkdWVyZmVuIGtlaW5lIEdlaXN0ZXIgc2VpbiAoUHJvcGVydHkgUF9HSE9TVCBuaWNodCBnZXNldHp0KS4KKwkgICgzKSBTaWUgbXVlc3NlbiBhbmdyZWlmYmFyIHNlaW4sIGRhcyBoZWlzc3QsIGRpZSBQcm9wZXJ0eQorCSAgICAgIFBfTk9fQVRUQUNLIGRhcmYgbmljaHQgZ2VzZXR6dCBzZWluLgorCVdpcmQgZWluZSBkaWVzZXIgQmVkaW5ndW5nZW4gdmVybGV0enQsIHNvIHdpcmQgZGVyIEdlZ25lciBhdXMgZGVyCisJaW50ZXJuZW4gR2VnbmVybGlzdGUgZW50ZmVybnQuIFp1c2FldHpsaWNoIGdpbHQ6CisJICBOZXR6dG90ZSB3ZXJkZW4gbnVyIGFscyBHZWduZXIgZXJrYW5udCwgd2VubiBrZWluZSBhbmRlcmVuIEdlZ25lcgorCSAgenVyIFZlcmZ1ZWd1bmcgc3RlaGVuLgorCitCRUlTUElFTDoKKwlJbSBGb2xnZW5kZW4gZXJibGluZGVuIGFsbGUgR2VnbmVyIGltIFJhdW06CisJICBzdHJpbmcgYmxpbmRUaGVtQWxsKCkKKwkgIHsgb2IqbGl2TGlzdDsKKwkgICAgaWYoIWxpdkxpc3Q9UHJlc2VudEVuZW1pZXMoKSkKKwkgICAgICByZXR1cm4gYnJlYWtfc3RyaW5nKAorCSAiTWlzdC4uLmtlaW5lciBkYSwgZGVyIGJsaW5kIHdlcmRlbiBtb2VjaHRlLiIsNzcsCisJIE5hbWUoV0VSKSsiIGdydW1tZWx0OiAiKTsKKwkgICAgZm9yKGk9c2l6ZW9mKGxpdkxpc3QpO2ktLTspCisJICAgIHsgaWYobGl2TGlzdFtpXS0+UXVlcnlQcm9wKFBfQkxJTkQpKQorCSAgICAgIHsgdGVsbF9vYmplY3QodGhpc19vYmplY3QoKSxicmVha19zdHJpbmcoCisJIGxpdkxpc3RbaV0tPk5hbWUoV0VSKSsiIGlzdCBzY2hvbiBibGluZC4iLDc3KSk7CisJICAgICAgICBjb250aW51ZTsKKwkgICAgICB9CisJICAgICAgdGVsbF9vYmplY3QodGhpc19vYmplY3QoKSxicmVha19zdHJpbmcoCisJICJEdSBrcmF0enQgIitsaXZMaXN0W2ldLT5uYW1lKFdFTSkrIiBkaWUgQXVnZW4gYXVzLiIsNzcpKTsKKwkgICAgICB0ZWxsX29iamVjdChsaXZMaXN0W2ldLGJyZWFrX3N0cmluZygKKwkgTmFtZShXRVIpKyIga3JhdHp0IERpciBkaWUgQXVnZW4gYXVzISIsNzcpKTsKKwkgICAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQodGhpc19vYmplY3QoKSksYnJlYWtfc3RyaW5nKAorCSBOYW1lKFdFUikrIiBrcmF0enQgIitsaXZMaXN0W2ldLT5uYW1lKFdFTSkKKwkrIiBkaWUgQXVnZW4gYXVzLiIsNzcpLCh7dGhpc19vYmplY3QoKSxsaXZMaXN0W2ldfSkpOworCSAgICAgIGxpdkxpc3RbaV0tPlNldFByb3AoUF9CTElORCwxKTsKKwkgICAgfQorCSAgICByZXR1cm4iIjsKKwkgIH0KKwlBdWZnZXJ1ZmVuIHdpcmQgZGFzIGdhbnplIGFtIEJlc3RlbiBpbiBlaW5lbSBDaGF0OgorCSAgdm9pZCBjcmVhdGUoKQorCSAgeyA6OmNyZWF0ZSgpOworCSAgICAuLi4KKwkgICAgU2V0UHJvcChQX0NIQVRfQ0hBTkNFLDEwKTsKKwkgICAgU2V0Q2hhdHMoMjAsKHticmVha19zdHJpbmcoCisJICJOaWNodCBhbmdyZWlmZW4sIHNvbnN0IHdpcnN0IER1IG5vY2ggYmxpbmQhIiw3NywKKwkgTmFtZShXRVIpKyIgYnJ1ZWxsdDogIiksCisJICAgICAgICAgICAgICAgICAgIkBAYmxpbmRUaGVtQWxsQEAifSkpOworCSAgfQorCU5hdHVlcmxpY2ggc2luZCBhdWNoIG5vY2ggbWVociBGdW5rdGlvbmVuIHVuZCBNZWxkdW5nZW4gYWxzIENoYXRzCisJbW9lZ2xpY2g6IERpZSB6d2VpIGltIEJlaXNwaWVsIHNpbmQgaW0gTm9ybWFsZmFsbCBldHdhcyB3ZW5pZy4KKworU0lFSEUgQVVDSDoKKwlTZWxlY3RFbmVteSgpLCBRdWVyeUVuZW1pZXMoKSwgSXNFbmVteSgpLCBQX0dIT1NULCBQX05PX0FUVEFDSywKKwlTZXRDaGF0cywgUF9DSEFUX0NIQU5DRQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBUaHUgTWF5IDI3IDE1OjAxOjQ4IDE5OTkgYnkgUGF0cnluCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9QcmVzZW50RW5lbXlSb3dzIGIvZG9jL2xmdW4vUHJlc2VudEVuZW15Um93cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzk2NDJjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUHJlc2VudEVuZW15Um93cwpAQCAtMCwwICsxLDQwIEBACisKK1ByZXNlbnRFbmVteVJvd3MoKQorCisKK0ZVTktUSU9OOgorICAgICAgICB2YXJhcmdzIG1peGVkICpQcmVzZW50RW5lbXlSb3dzKG9iamVjdCAqaGVyZSkKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL2xpdmluZy90ZWFtLmMKKworQVJHVU1FTlRFOgorICAgICAgICBSdWVja2dhYmV3ZXJ0IHZvbiBQcmVzZW50RW5lbWllcyBrYW5uIHVlYmVyZ2ViZW4gd2VyZGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIEVyZ2lidCBkaWUgZmVpbmRsaWNoZW4gUmVpaGVuLgorCitSVUVDS0dBQkVXRVJUOgorICAgICAgICBFaW4gQXJyYXksIGJlc3RlaGVuZCBhdXMgTUFYX1RFQU1ST1dTIEFycmF5cyBtaXQgZGVuIE9iamVrdGVuCisgICAgICAgIGRlciBhbndlc2VuZGVuIEZlaW5kZS4KKworQkVNRVJLVU5HRU46CisgICAgICAgIEplZGUgUmVpaGUgaXN0IFN1bW1lIGRlciBlbnRzcHJlY2hlbmRlbiBSZWloZW4gZGVyCisgICAgICAgIGFud2VzZW5kZW4gVGVhbXMuCisgICAgICAgIEZlaW5kZSwgZGllIGluIGtlaW5lbSBUZWFtIHNpbmQsIHN0ZWhlbiBpbSBlcnN0ZW4gQXJyYXkuCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIFVlYmVyc2ljaHQ6IHRlYW1rYW1wZgorICAgICAgICBQcm9wZXJ0aWVzOiBQX1RFQU0sIFBfQVNTT0NfTUVNQkVSUywgUF9URUFNX0FUVEFDS19DTUQsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9BVVRPRk9MTE9XLCBQX1RFQU1fQ09MT1JTLCBQX1RFQU1fTEVBREVSLAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fTkVXTUVNQkVSLCBQX1RFQU1fV0FOVEVEX1JPVywgUF9URUFNX1dJTVBZX1JPVworICAgICAgICBCZXdlZ3VuZzogICBJc1RlYW1Nb3ZlLCBUZWFtRmxlZQorICAgICAgICBNaXRnbGllZGVyOiBJc1RlYW1MZWFkZXIsIFRlYW1NZW1iZXJzCisgICAgICAgIEthbXBmOiAgICAgIEFzc29jTWVtYmVyLCBEZUFzc29jTWVtYmVyLCBJbnNlcnRFbmVteVRlYW0sCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdE5lYXJFbmVteSwgU2VsZWN0RmFyRW5lbXkKKyAgICAgICAgUG9zaXRpb25lbjogUHJlc2VudFBvc2l0aW9uLCBQcmVzZW50Um93cywgUHJlc2VudFRlYW1Qb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgU3dhcFJvd3MKKyAgICAgICAgU29uc3RpZ2VzOiAgVGVhbVByZWZpeCwgdGVhbWthbXBmX2ludGVybgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAxNi0wOC0yMDEwLCBHYWJ5bG9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9QcmVzZW50UG9zaXRpb24gYi9kb2MvbGZ1bi9QcmVzZW50UG9zaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3NjVjZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1ByZXNlbnRQb3NpdGlvbgpAQCAtMCwwICsxLDM4IEBACisKK1ByZXNlbnRQb3NpdGlvbigpCisKKworRlVOS1RJT046CisgICAgICAgIHZhcmFyZ3MgaW50IFByZXNlbnRQb3NpdGlvbihtaXhlZCBwbWFwKQorCitERUZJTklFUlQgSU46CisgICAgICAgIC9zdGQvbGl2aW5nL3RlYW0uYworCitBUkdVTUVOVEU6CisgICAgICAgIFJ1ZWNrZ2FiZXdlcnQgdm9uIFByZXNlbnRUZWFtUm93cygpIG9kZXIgUHJlc2VudFRlYW1Qb3NpdGlvbnMoKQorICAgICAgICBrYW5uIHVlYmVyZ2ViZW4gd2VyZGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIEVyZ2lidCBkaWUgTnVtbWVyIGRlciBSZWloZSwgaW4gZGVyIGRlciBTcGllbGVyIGdlcmFkZSBzdGVodC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgICAgUmVpaGVubnVtbWVyIGltIEJlcmVpY2ggdm9uIDEgYmlzIFRFQU1fTUFYUk9XUy4KKworQkVNRVJLVU5HRU46CisgICAgICAgIElzdCBlaW4gU3BpZWxlciBpbiBrZWluZW0gVGVhbSwgc28gc3RlaHQgZXIgYXV0b21hdGlzY2ggaW4gUmVpaGUgMS4KKworU0lFSEUgQVVDSDoKKyAgICAgICAgVWViZXJzaWNodDogdGVhbWthbXBmCisgICAgICAgIFByb3BlcnRpZXM6IFBfVEVBTSwgUF9BU1NPQ19NRU1CRVJTLCBQX1RFQU1fQVRUQUNLX0NNRCwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX0FVVE9GT0xMT1csIFBfVEVBTV9DT0xPUlMsIFBfVEVBTV9MRUFERVIsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9ORVdNRU1CRVIsIFBfVEVBTV9XQU5URURfUk9XLCBQX1RFQU1fV0lNUFlfUk9XCisgICAgICAgIEJld2VndW5nOiAgIElzVGVhbU1vdmUsIFRlYW1GbGVlCisgICAgICAgIE1pdGdsaWVkZXI6IElzVGVhbUxlYWRlciwgVGVhbU1lbWJlcnMKKyAgICAgICAgS2FtcGY6ICAgICAgQXNzb2NNZW1iZXIsIERlQXNzb2NNZW1iZXIsIEluc2VydEVuZW15VGVhbSwKKyAgICAgICAgICAgICAgICAgICAgU2VsZWN0TmVhckVuZW15LCBTZWxlY3RGYXJFbmVteQorICAgICAgICBQb3NpdGlvbmVuOiBQcmVzZW50Um93cywgUHJlc2VudEVuZW15Um93cywgUHJlc2VudFRlYW1Qb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgU3dhcFJvd3MKKyAgICAgICAgU29uc3RpZ2VzOiAgVGVhbVByZWZpeCwgdGVhbWthbXBmX2ludGVybgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAxNi0wOC0yMDEwLCBHYWJ5bG9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9QcmVzZW50Um93cyBiL2RvYy9sZnVuL1ByZXNlbnRSb3dzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Yzg1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9QcmVzZW50Um93cwpAQCAtMCwwICsxLDg4IEBACisKK1ByZXNlbnRSb3dzKCkKKworCitGVU5LVElPTjoKKyAgICBtaXhlZCAqUHJlc2VudFJvd3Mob2JqZWN0IGVudik7CisKK0RFRklOSUVSVCBJTjoKKyAgICBURUFNX09CSkVDVCAocy4gPGxpdmluZy90ZWFtLmg+KQorCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IGVudgorICAgICAgICBEYXMgRW52aXJvbm1lbnQgZGVzIGdld3VlbnNjaHRlbiBPYmpla3Rlcy4KKworQkVTQ0hSRUlCVU5HOgorICAgIE1pdCBkaWVzZXIgRnVua3Rpb24gYmVrb21tdCBtYW4gZGllIGFrdHVlbGxlbiBUZWFtcmVpaGVuLCBkaWUgaW0gQXJndW1lbnQKKyAgICBlbnYgYW53ZXNlbmQgc2luZCwgZGVzIFRlYW1zIHp1cnVlY2tnZWdlYmVuLiBJc3QgZW52IGtlaW4gT2JqZWt0LCBzbworICAgIHdpcmQgZW52aXJvbm1lbnQodGhpc19wbGF5ZXIoKSkgYWxzIHNvbGNoZXMgYW5nZW5vbW1lbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICBFcyB3aXJkIGVpbiBtaXhlZC1BcnJheSB6dXJ1ZWNrZ2VnZWJlbiwgZGFiZWkgc2luZCBkaWUgZWluemVsbmVuIFJlaWhlbgorICAgIHNlbGJzdCB3aWVkZXJ1bSBBcnJheXMgbWl0IGRlbiBTcGllbGVyb2JqZWt0ZW4uCisKK0JFSVNQSUVMOgorCisgICAgRWluIE5QQyBpbSBLYW1wZiBsYWVzc3QgZWluZSBGZXVlcndhbHplIGF1ZiBlaW4gVGVhbSBsb3MsIHdlbGNoZSBhYmVyIG51cgorICAgIFNwaWVsZXIgaW4gZGVyIGVyc3RlbiB1bmQgendlaXRlbiBUZWFtcmVpaGUgU2NoYWRlbiB6dWZ1ZWdlbiBzb2xsLgorCisgICAgdm9pZCBBdHRhY2soIG9iamVjdCBlbmVteSApCisgICAgeworICAgICAuLi4KKworICAgICBvYmplY3QgdGVhbSA9IGVuZW15LT5RdWVyeVByb3AoUF9URUFNKTsKKworICAgICBpZiAoIG9iamVjdHAodGVhbSkgKQorICAgICAgeworICAgICAgIG1peGVkIHRlYW1yb3dzID0gdGVhbS0+UHJlc2VudFJvd3MoZW5lbXkpOworCisvLyAgSW5oYWx0IHZvbiAidGVhbXJvd3MiIHp1IGRpZXNlbSBaZWl0cHVua3Q6CisKKy8vICAoeyAoe1svZHdhcmY6aGF1d2VnXX0pLCh7fSksKHtbL2VsZjpzcGl0em9ocl19KSwoe30pLCh7fSksKHt9KSB9KQorCisvLyAgSW4gZGVyIFVtZ2VidW5nIHZvbiBad2VyZyBIYXV3ZWcgc3RlaHQgYWxzbyBub2NoIEVsZiBTcGl0em9ociwgdW5kIHp3YXIKKy8vICBpbiBkZXIgZHJpdHRlbiBUZWFtcmVpaGUgKGRlciBoYXQgR2x1ZWNrIGdlaGFidCkuCisvLyAgV2VubiBkZW0gVGVhbSBub2NoIG1laHIgU3BpZWxlciBhbmdlaG9lcmVuLCBiZWZpbmRlbiBzaWUgc2ljaCBnZXJhZGUKKy8vICBuaWNodCBpbiBkZXIgVW1nZWJ1bmcgKHNwcmljaCBpbSBzZWxiZW4gUmF1bSkgd2llIEhhdXdlZy4KKworICAgICAgIGZvcmVhY2ggKCBpIDogMiApCisgICAgICAgIHsKKyAgICAgICAgIGZvcmVhY2ggKCBvYmplY3QgcGwgOiB0ZWFtcm93c1tpXSApCisgICAgICAgICAgeworICAgICAgICAgICB0ZWxsX29iamVjdChwbCwiRGVyIEZldWVydGV1ZmVsIGxhZXNzdCBlaW5lIEZldWVyd2FsemUgYXVmIERpY2ggIgorICAgICAgICAgICAgICAgInVuZCBEZWluIFRlYW0gbG9zLlxuIik7CisKKyAgICAgICAgICAgcGwtPkRlZmVuZCgyMDArcmFuZG9tKDIwMCksKHtEVF9GSVJFfSksKFtTUF9TSE9XX0RBTUFHRToxXSksVE8pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICBlbHNlCisgICAgICB7CisgICAgICAgdGVsbF9vYmplY3QoZW5lbXksIkRlciBGZXVlcnRldWZlbCBsYWVzc3QgZWluZSBGZXVlcndhbHplIGF1ZiBEaWNoICIKKyAgICAgICAgICAgImxvcy5cbiIpOworCisgICAgICAgZW5lbXktPkRlZmVuZCgyMDArcmFuZG9tKDIwMCksKHtEVF9GSVJFfSksKFtTUF9TSE9XX0RBTUFHRToxXSksVE8pOworICAgICAgfQorCisgICAgIC4uLgorICAgIH0KKworQkVNRVJLVU5HOgorICAgIE1hbiBiZWFjaHRlLCBkYXNzIGRhcyBlcnN0ZSBBcmd1bWVudCAoYWxzbyBBcmd1bWVudCAwKSBkaWUgZXJzdGUKKyAgICBUZWFtcmVpaGUgaXN0LgorCitTSUVIRSBBVUNIOgorICAgICAgICBVZWJlcnNpY2h0OiB0ZWFta2FtcGYKKyAgICAgICAgUHJvcGVydGllczogUF9URUFNLCBQX0FTU09DX01FTUJFUlMsIFBfVEVBTV9BVFRBQ0tfQ01ELAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fQVVUT0ZPTExPVywgUF9URUFNX0NPTE9SUywgUF9URUFNX0xFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX05FV01FTUJFUiwgUF9URUFNX1dBTlRFRF9ST1csIFBfVEVBTV9XSU1QWV9ST1cKKyAgICAgICAgQmV3ZWd1bmc6ICAgSXNUZWFtTW92ZSwgVGVhbUZsZWUKKyAgICAgICAgTWl0Z2xpZWRlcjogSXNUZWFtTGVhZGVyLCBUZWFtTWVtYmVycworICAgICAgICBLYW1wZjogICAgICBBc3NvY01lbWJlciwgRGVBc3NvY01lbWJlciwgSW5zZXJ0RW5lbXlUZWFtLAorICAgICAgICAgICAgICAgICAgICBTZWxlY3ROZWFyRW5lbXksIFNlbGVjdEZhckVuZW15CisgICAgICAgIFBvc2l0aW9uZW46IFByZXNlbnRQb3NpdGlvbiwgUHJlc2VudEVuZW15Um93cywgUHJlc2VudFRlYW1Qb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgU3dhcFJvd3MKKyAgICAgICAgU29uc3RpZ2VzOiAgVGVhbVByZWZpeCwgdGVhbWthbXBmX2ludGVybgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAxNi0wOC0yMDEwLCBHYWJ5bG9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9QcmVzZW50VGVhbVBvc2l0aW9ucyBiL2RvYy9sZnVuL1ByZXNlbnRUZWFtUG9zaXRpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YWRjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9QcmVzZW50VGVhbVBvc2l0aW9ucwpAQCAtMCwwICsxLDQwIEBACisKK1ByZXNlbnRUZWFtUG9zaXRpb25zKCkKKworCitGVU5LVElPTjoKKyAgICAgICAgdmFyYXJncyBtYXBwaW5nIFByZXNlbnRUZWFtUG9zaXRpb25zKG1peGVkIHBtYXApCisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3N0ZC9saXZpbmcvdGVhbS5jCisKK0FSR1VNRU5URToKKyAgICAgICAgUnVlY2tnYWJld2VydCB2b24gUHJlc2VudFRlYW1Sb3dzKCkga2FubiB1ZWJlcmdlYmVuIHdlcmRlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBFcm1pdHRlbHQgZGllIFJlaWhlbm51bW1lcm4gYWxsZXIgYW53ZXNlbmRlciBUZWFtbWl0Z2xpZWRlci4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgICAgRWluIE1hcHBpbmcgbWl0IGRlbiBSZWloZW5udW1tZXJuICh2b24gMSBiaXMgTUFYX1RFQU1ST1dTKQorICAgICAgICBkZXIgYW53ZXNlbmRlbiBUZWFtbWl0Z2xpZWRlci4KKworQkVNRVJLVU5HRU46CisgICAgICAgIEthbm4gYXVjaCB6dXIgS29udmVydGllcnVuZyBhbmRlcmVyIEthbXBmcmVpaGVuLUFycmF5cyBpbgorICAgICAgICBlaW4gUG9zaXRpb25zLU1hcHBpbmcgdmVyd2VuZGV0IHdlcmRlbi4KKyAgICAgICAgSXN0IGRlciBTcGllbGVyIGluIGtlaW5lbSBUZWFtLCBzbyBzdGVodCBlciBpbiBSZWloZSAxLgorCitTSUVIRSBBVUNIOgorICAgICAgICBVZWJlcnNpY2h0OiB0ZWFta2FtcGYKKyAgICAgICAgUHJvcGVydGllczogUF9URUFNLCBQX0FTU09DX01FTUJFUlMsIFBfVEVBTV9BVFRBQ0tfQ01ELAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fQVVUT0ZPTExPVywgUF9URUFNX0NPTE9SUywgUF9URUFNX0xFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX05FV01FTUJFUiwgUF9URUFNX1dBTlRFRF9ST1csIFBfVEVBTV9XSU1QWV9ST1cKKyAgICAgICAgQmV3ZWd1bmc6ICAgSXNUZWFtTW92ZSwgVGVhbUZsZWUKKyAgICAgICAgTWl0Z2xpZWRlcjogSXNUZWFtTGVhZGVyLCBUZWFtTWVtYmVycworICAgICAgICBLYW1wZjogICAgICBBc3NvY01lbWJlciwgRGVBc3NvY01lbWJlciwgSW5zZXJ0RW5lbXlUZWFtLAorICAgICAgICAgICAgICAgICAgICBTZWxlY3ROZWFyRW5lbXksIFNlbGVjdEZhckVuZW15CisgICAgICAgIFBvc2l0aW9uZW46IFByZXNlbnRQb3NpdGlvbiwgUHJlc2VudFJvd3MsIFByZXNlbnRFbmVteVJvd3MsCisgICAgICAgICAgICAgICAgICAgIFN3YXBSb3dzCisgICAgICAgIFNvbnN0aWdlczogIFRlYW1QcmVmaXgsIHRlYW1rYW1wZl9pbnRlcm4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMTYtMDgtMjAxMCwgR2FieWxvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUHJlc2VudFRlYW1Sb3dzIGIvZG9jL2xmdW4vUHJlc2VudFRlYW1Sb3dzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmZhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9QcmVzZW50VGVhbVJvd3MKQEAgLTAsMCArMSwyNCBAQAorUHJlc2VudFRlYW1Sb3dzKCkKKworRlVOS1RJT046CisJbWl4ZWQgKlByZXNlbnRUZWFtUm93cygpCisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL2xpdmluZy90ZWFtLmMKKworQVJHVU1FTlRFOgorCWtlaW5lCisKK0JFU0NIUkVJQlVORzoKKwlFcmdpYnQgZGllIFJlaWhlbiBtaXQgZGVuIGFud2VzZW5kZW4gVGVhbW1pdGdsaWVkZXJuLgorCitSVUVDS0dBQkVXRVJUOgorCUVpbiBBcnJheSBiZXN0ZWhlbmQgYXVzIE1BWF9URUFNUk9XUyBBcnJheXMgbWl0IGRlbiBPYmpla3RlbgorICAgICAgICBkZXIgYW53ZXNlbmRlbiBUZWFtbWl0Z2xpZWRlci4KKworQkVNRVJLVU5HRU46CisJV2VubiBkZXIgU3BpZWxlciBpbiBrZWluZW0gVGVhbSBpc3QsIGVudGhhZWx0IGRhcyBlcnN0ZSBBcnJheQorCW51ciBkZW4gU3BpZWxlciB1bmQgZGllIGFuZGVyZW4gQXJyYXlzIHNpbmQgbGVlci4KKworU0lFSEUgQVVDSDoKKwl0ZWFtcwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUHJldmVudEZvbGxvdyBiL2RvYy9sZnVuL1ByZXZlbnRGb2xsb3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwZjkyZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1ByZXZlbnRGb2xsb3cKQEAgLTAsMCArMSw0OSBAQAorUHJldmVudEZvbGxvdygpCisKK0ZVTktUSU9OOgorICBpbnQgUHJldmVudEZvbGxvdyhvYmplY3QgZGVzdCkKKworQVJHVU1FTlRFOgorICBkZXN0OiBaaWVsb2JqZWt0LCBpbiBkYXMgZGVyIFZlcmZvbGd0ZSBiZXdlZ3Qgd2VyZGVuIHNvbGwuCisKK0ZVTktUSU9OOgorICBJbiBqZWRlbSBWZXJmb2xnZXIsIGRlciBtaXQgQWRkUHVyc3VlciBpbiBkaWUgTGlzdGUgZGVyIFZlcmZvbGdlciAKKyAgZWluZ2V0cmFnZW4gd3VyZGUsIHdpcmQgdm9yIGRlbSBCZXdlZ2VuIGluIGRhcyBaaWVsb2JqZWt0IGRpZSBGdW5rdGlvbgorICBQcmV2ZW50Rm9sbG93IG1pdCBkZW0gWmllbG9iamVrdCBhbHMgQXJndW1lbnQgYXVmZ2VydWZlbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgMDogVmVyZm9sZ2VyIGRhcmYgaW4gZGFzIFppZWxvYmpla3QgZm9sZ2VuCisgIDE6IFZlcmZvbGdlciBkYXJmIGluIGRpZXNlcyBaaWVsb2JqZWt0IG5pY2h0IGZvbGdlbgorICAgICAoVmVyZm9sZ3VuZyBibGVpYnQgd2VpdGVyaGluIGFrdGl2KQorICAyOiBWZXJmb2xnZXIgZGFyZiBpbiBkaWVzZXMgWmllbG9iamVrdCBuaWNodCBmb2xnZW4KKyAgICAgKFZlcmZvbGd1bmcgd2lyZCBhYmdlYnJvY2hlbiB1bmQgVmVyZm9sZ2VyIGF1cyBkZXIgVmVyZm9sZ2VybGlzdGUKKyAgICAgIGF1c2dldHJhZ2VuKQorCitCRU1FUktVTkc6CisgIER1cmNoIFByZXZlbnRGb2xsb3cga2FubiBkZXIgcmFldW1saWNoZSBCZXJlaWNoLCBpbiBkZW0gdmVyZm9sZ3Qgd2VyZGVuCisgIGRhcmYsIGVpbmdlc2NocmFlbmt0IHdlcmRlbi4KKworQkVJU1BJRUxFOgorICBNYW4gbW9lY2h0ZSwgZGFzcyBlaW4gTlBDIGF1ZiBlaW5lciBJbnNlbCBuaWNodCBtaXQgZGVtIFNwaWVsZXIgaW4gZGFzCisgIEJvb3Qgc3RlaWd0LCB1bSBtaXQgZGVtIFNwaWVsZXIgenVzYW1tZW4gdm9uIGRlciBJbnNlbCBoZXJ1bnRlcnp1a29tbWVuLgorCisgICNkZWZpbmUgUEFUSCh4KSAoIi9kLy4uLi8uLi4vbWVpbi9wZmFkLysoeCkiKSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgIGludCBQcmV2ZW50Rm9sbG93KG9iamVjdCBib290KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIHsKKyAgICBpZiAoIG9iamVjdF9uYW1lKGJvb3QpWzAuLnN0cmxlbihQQVRIKCJib290IikpLTFdID09IFBBVEgoImJvb3QiKSApCisgICAgIHJldHVybiAxOworICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICBEaWVzZSBGdW5rdGlvbnMtRGVmaW5pdGlvbiBpc3Qgc2VociBmbGV4aWJlbCwgZGVubiBzaWUgZXJsYXVidCBzb3dvaGwKKyAgc3BhZXRlcmUgUGZhZGFucGFzc3VuZyBhbHMgYXVjaCBtZWhyZXJlIEJvb3RlLgorICBEYSB1ZWJlciBkaWUgRnVua3Rpb24gc3RybGVuKCkgbnVyIGJpcyB6dW0gbGV0enRlbiBCdWNoc3RhYmVuIGRlcyAgICAKKyAgYW5nZWdlYmVuZW4gU3RyaW5ncyBnZXRlc3RldCB3aXJkLCB3aXJkIGFsc28gZ2xlaWNoemVpdGlnIGF1Y2ggYXVmICAgICAgICAgIAorICBib290WzFdLCBib290WzJdIHVzdy4gZ2V0ZXN0ZXQuCisKK1NJRUhFIEFVQ0g6CisgICJBZGRQdXJzdWVyIiwgIlJlbW92ZVB1cnN1ZXIiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBUdWUgSnVuIDEwIDEzOjU5OjMwIDIwMDMgYnkgR2FieWxvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1ByZXZlbnRJbnNlcnQgYi9kb2MvbGZ1bi9QcmV2ZW50SW5zZXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YzE1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9QcmV2ZW50SW5zZXJ0CkBAIC0wLDAgKzEsNDYgQEAKK1ByZXZlbnRJbnNlcnQoKQorCitGVU5LVElPTjoKKyAgICAgaW50IFByZXZlbnRJbnNlcnQob2JqZWN0IG9iKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2NvbnRhaW5lci9yZXN0cmljdGlvbnMuYworCitBUkdVTUVOVEU6CisgICAgIG9iCisgICAgICAgICAgRGFzIE9iamVrdCwgZGFzIGluIGRlbiBCZWhhZWx0ZXIgZWluZ2VmdWVndCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIGthbm4gZWluIEJlaGFlbHRlciBwcnVlZmVuLCBvYiBlciBkYXMgT2JqZWt0IG9iCisgICAgIGF1Zm5laG1lbiBtb2VjaHRlIG9kZXIgbmljaHQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDAsIHdlbm4gZGFzIE9iamVrdCBhdWZnZW5vbW1lbiB3ZXJkZW4ga2FubjsgZWluIFdlcnQgZ3JvZXNzZXIgYWxzIDAKKyAgICAgemVpZ3QgYW4sIGRhc3MgZGFzIE9iamVrdCBuaWNodCBhdWZnZW5vbW1lbiB3ZXJkZW4gc29sbC4KKworQkVNRVJLVU5HRU46CisgICAgIFdlbm4gb2IgbWl0IGRlbSBGbGFnIE1fTk9DSEVDSyBiZXdlZ3Qgd2lyZCwgd2lyZCBQcmV2ZW50SW5zZXJ0KCkgendhcgorICAgICBhdWZnZXJ1ZmVuLCBkYXMgT2JqZWt0IHdpcmQgamVkb2NoIGF1ZiBqZWRlbiBGYWxsIGluIGRlbiBCZWhhZWx0ZXIKKyAgICAgYmV3ZWd0LCB1bmFiaGFlbmdpZyB2b20gUnVlY2tnYWJld2VydCEKKworQkVJU1BJRUxFOgorICAgICBVbSB6dSB2ZXJoaW5kZXJuLCBkYXNzIG1hbiBHZWxkIGluIGVpbmVuIEJlaGFlbHRlciBzdGVja2VuIGthbm4sIHNvbGx0ZQorICAgICBtYW4gd2llIGZvbGd0IHZvcmdlaGVuOgorCisgICAgIHZhcmFyZ3MgaW50IFByZXZlbnRJbnNlcnQob2JqZWN0IG9iKQorICAgICB7CisgICAgICAgLy8gV2VubiBlcyBHZWxkIGlzdCwgZXJoZWJlbiB3aXIgc29mb3J0IEVpbnNwcnVjaAorICAgICAgIGlmIChvYi0+aWQoImdlbGQiKSkKKyAgICAgICAgIHJldHVybiAxOworICAgICAgIC8vIEFuc29uc3RlbiBrb2VubnRlIGVpbiBlcmVyYnRlcyBPYmpla3Qgbm9jaCBFaW5zcHJ1Y2ggZXJoZWJlbiEKKyAgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gOjpQcmV2ZW50SW5zZXJ0KG9iKTsKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBQcmV2ZW50TGVhdmUoKSwgTm90aWZ5SW5zZXJ0KCksIE5vdGlmeUxlYXZlKCksIE1heUFkZE9iamVjdCgpLAorICAgICBQcmV2ZW50SW5zZXJ0TGl2aW5nKCksIFByZXZlbnRMZWF2ZUxpdmluZygpLCBOb3RpZnlNb3ZlKCksCisgICAgIFByZXZlbnRNb3ZlKCksIE1heUFkZFdlaWdodCgpLCBtb3ZlKCksIC9zdGQvY29udGFpbmVyL3Jlc3RyaWN0aW9ucy5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFNhdCBEZWMgMTggMDI6MDA6MDAgMTk5OSBieSBUaWFtYWsKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1ByZXZlbnRJbnNlcnRMaXZpbmcgYi9kb2MvbGZ1bi9QcmV2ZW50SW5zZXJ0TGl2aW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjQzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9QcmV2ZW50SW5zZXJ0TGl2aW5nCkBAIC0wLDAgKzEsMzUgQEAKK1ByZXZlbnRJbnNlcnRMaXZpbmcoKQorCitGVU5LVElPTjoKKyAgICAgaW50IFByZXZlbnRJbnNlcnRMaXZpbmcob2JqZWN0IG9iKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2NvbnRhaW5lci9yZXN0cmljdGlvbnMuYworCitBUkdVTUVOVEU6CisgICAgIG9iCisgICAgICAgICAgRGFzIExpdmluZywgZGFzIGluIGRlbiBCZWhhZWx0ZXIgZWluZ2VmdWVndCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIGthbm4gZWluIEJlaGFlbHRlciBwcnVlZmVuLCBvYiBlciBkYXMgTGl2aW5nIG9iCisgICAgIGF1Zm5laG1lbiBtb2VjaHRlIG9kZXIgbmljaHQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDAsIHdlbm4gZGFzIExpdmluZyBhdWZnZW5vbW1lbiB3ZXJkZW4ga2FubjsgZWluIFdlcnQgZ3JvZXNzZXIgYWxzIDAKKyAgICAgemVpZ3QgYW4sIGRhc3MgZGFzIExpdmluZyBuaWNodCBhdWZnZW5vbW1lbiB3ZXJkZW4gc29sbC4KKworQkVNRVJLVU5HRU46CisgICAgIFdlbm4gb2IgbWl0IGRlbSBGbGFnIE1fTk9DSEVDSyBiZXdlZ3Qgd2lyZCwgd2lyZCBQcmV2ZW50SW5zZXJ0TGl2aW5nKCkgCisgICAgIHp3YXIgYXVmZ2VydWZlbiwgZGFzIExpdmluZyB3aXJkIGplZG9jaCBhdWYgamVkZW4gRmFsbCBpbiBkZW4gQmVoYWVsdGVyCisgICAgIGJld2VndCwgdW5hYmhhZW5naWcgdm9tIFJ1ZWNrZ2FiZXdlcnQhCisKKworU0lFSEUgQVVDSDoKKyAgICAgUHJldmVudExlYXZlTGl2aW5nKCksIC9zdGQvY29udGFpbmVyL3Jlc3RyaWN0aW9ucy5jLAorICAgICBQcmV2ZW50TW92ZSgpLCBQcmV2ZW50SW5zZXJ0KCksIFByZXZlbnRMZWF2ZSgpLAorICAgICBOb3RpZnlNb3ZlKCksIE5vdGlmeUluc2VydCgpLCBOb3RpZnlMZWF2ZSgpLCBOb3RpZnlSZW1vdmUoKSwKKyAgICAgbW92ZSgpLCBpbml0KCksIGV4aXQoKSwKKyAgICAgSW5pdEF0dGFjaygpLCBFeGl0QXR0YWNrKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMDQuMDguMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUHJldmVudExlYXZlIGIvZG9jL2xmdW4vUHJldmVudExlYXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDQ2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9QcmV2ZW50TGVhdmUKQEAgLTAsMCArMSwzNSBAQAorUHJldmVudExlYXZlKCkKKworRlVOS1RJT046CisgICAgIGludCBQcmV2ZW50TGVhdmUob2JqZWN0IG9iLCBtaXhlZCBkZXN0KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2NvbnRhaW5lci9yZXN0cmljdGlvbnMuYworCitBUkdVTUVOVEU6CisgICAgIG9iCisgICAgICAgICAgRGFzIE9iamVrdCwgZGFzIGF1cyBkZW0gQmVoYWVsdGVyIGdlbm9tbWVuIHdlcmRlbiBzb2xsLgorICAgICBkZXN0IAorICAgICAgICAgIERhcyBaaWVsIGluIGRhcyBkYXMgT2JqZWt0IG9iIGJld2VndCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIGthbm4gZWluIEJlaGFlbHRlciBwcnVlZmVuLCBvYiBlciBkYXMgT2JqZWt0IG9iCisgICAgIHNpY2ggYmV3ZWdlbiBsYXNzZW4gbW9lY2h0ZSBvZGVyIG5pY2h0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIGRhcyBPYmpla3QgYmV3ZWd0IHdlcmRlbiBrYW5uOyBlaW4gV2VydCBncm9lc3NlciBhbHMgMAorICAgICB6ZWlndCBhbiwgZGFzcyBkYXMgT2JqZWt0IG5pY2h0IGJld2VndCB3ZXJkZW4gc29sbC4KKworQkVNRVJLVU5HRU46CisgICAgIFdlbm4gb2IgbWl0IGRlbSBGbGFnIE1fTk9DSEVDSyBiZXdlZ3Qgd2lyZCwgd2lyZCBQcmV2ZW50TGVhdmUoKSB6d2FyCisgICAgIGF1ZmdlcnVmZW4sIGRhcyBPYmpla3Qgd2lyZCBqZWRvY2ggYXVmIGplZGVuIEZhbGwgYXVzIGRlbSBCZWhhZWx0ZXIKKyAgICAgYmV3ZWd0LCB1bmFiaGFlbmdpZyB2b20gUnVlY2tnYWJld2VydCEKKworU0lFSEUgQVVDSDoKKyAgICAgUHJldmVudEluc2VydCgpLCBOb3RpZnlJbnNlcnQoKSwgTm90aWZ5TGVhdmUoKSwKKyAgICAgTWF5QWRkV2VpZ2h0KCksIG1vdmUoKSwgL3N0ZC9jb250YWluZXIvcmVzdHJpY3Rpb25zLmMKKyAgICAgUHJldmVudExlYXZlTGl2aW5nKCksIFByZXZlbnRJbnNlcnRMaXZpbmcoKSwgUHJldmVudE1vdmUoKSwKKyAgICAgTm90aWZ5TW92ZSgpLCBNYXlBZGRPYmplY3QoKSwgTm90aWZ5UmVtb3ZlKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMDQuMDguMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUHJldmVudExlYXZlTGl2aW5nIGIvZG9jL2xmdW4vUHJldmVudExlYXZlTGl2aW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMTNiNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9QcmV2ZW50TGVhdmVMaXZpbmcKQEAgLTAsMCArMSwzNSBAQAorUHJldmVudExlYXZlTGl2aW5nKCkKKworRlVOS1RJT046CisgICAgIGludCBQcmV2ZW50TGVhdmVMaXZpbmcob2JqZWN0IG9iLCBtaXhlZCBkZXN0KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2NvbnRhaW5lci9yZXN0cmljdGlvbnMuYworCitBUkdVTUVOVEU6CisgICAgIG9iCisgICAgICAgICAgRGFzIExpdmluZywgZGFzIGF1cyBkZW0gQmVoYWVsdGVyIGdlbm9tbWVuIHdlcmRlbiBzb2xsLgorICAgICBkZXN0IAorICAgICAgICAgIERhcyBaaWVsIGluIGRhcyBkYXMgTGl2aW5nIG9iIGJld2VndCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIGthbm4gZWluIEJlaGFlbHRlciBwcnVlZmVuLCBvYiBlciBkYXMgTGl2aW5nIG9iCisgICAgIHNpY2ggYmV3ZWdlbiBsYXNzZW4gbW9lY2h0ZSBvZGVyIG5pY2h0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIGRhcyBMaXZpbmcgYmV3ZWd0IHdlcmRlbiBrYW5uOyBlaW4gV2VydCBncm9lc3NlciBhbHMgMAorICAgICB6ZWlndCBhbiwgZGFzcyBkYXMgTGl2aW5nIG5pY2h0IGJld2VndCB3ZXJkZW4gc29sbC4KKworQkVNRVJLVU5HRU46CisgICAgIFdlbm4gb2IgbWl0IGRlbSBGbGFnIE1fTk9DSEVDSyBiZXdlZ3Qgd2lyZCwgd2lyZCBQcmV2ZW50TGVhdmUoKSB6d2FyCisgICAgIGF1ZmdlcnVmZW4sIGRhcyBMaXZpbmcgd2lyZCBqZWRvY2ggYXVmIGplZGVuIEZhbGwgYXVzIGRlbSBCZWhhZWx0ZXIKKyAgICAgYmV3ZWd0LCB1bmFiaGFlbmdpZyB2b20gUnVlY2tnYWJld2VydCEKKworU0lFSEUgQVVDSDoKKyAgICAgUHJldmVudEluc2VydExpdmluZygpLCAvc3RkL2NvbnRhaW5lci9yZXN0cmljdGlvbnMuYworICAgICBQcmV2ZW50TW92ZSgpLCBQcmV2ZW50TGVhdmUoKSwgUHJldmVudEluc2VydCgpLAorICAgICBOb3RpZnlNb3ZlKCksIE5vdGlmeUxlYXZlKCksIE5vdGlmeUluc2VydCgpLCBOb3RpZnlSZW1vdmUoKSwKKyAgICAgbW92ZSgpLCBleGl0KCksIGluaXQoKSwKKyAgICAgSW5pdEF0dGFjaywgRXhpdEF0dGFjaygpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAwNC4wOC4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9QcmV2ZW50TW92ZSBiL2RvYy9sZnVuL1ByZXZlbnRNb3ZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OGVlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9QcmV2ZW50TW92ZQpAQCAtMCwwICsxLDgxIEBACitQcmV2ZW50SW5zZXJ0KCkKKworRlVOS1RJT046CisgICAgIHByb3RlY3RlZCBpbnQgUHJldmVudE1vdmUob2JqZWN0IGRlc3QsIG9iamVjdCBvbGRlbnYsIGludCBtZXRob2QpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvbW92aW5nLmMKKyAgICAgL3N0ZC9saXZpbmcvbW92aW5nLmMKKyAgICAgL3N0ZC9wbGF5ZXIvbW92aW5nLmMKKworQVJHVU1FTlRFOgorICAgICBkZXN0CisgICAgICAgICAgRGFzIFppZWwgZGVzIE1vdmVzCisgICAgIG9sZGVudgorICAgICAgICAgIERhcyAoTm9jaC0pRW52aXJvbm1lbnQgZGVzIE9iamVrdHMKKyAgICAgbWV0aG9kCisgICAgICAgICAgRGllIE1vdmUtTWV0aG9kZShuKSwgbWl0IGRlci9kZW5lbiBiZXdlZ3Qgd2VyZGVuIHNvbGwKKworQkVTQ0hSRUlCVU5HOgorICAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIHBydWVmdCBlaW4gT2JqZWt0LCBvYiBlcyB2b24gJ29sZGVudicgbmFjaCAnZGVzdCcKKyAgICAgYmV3ZWd0IHdlcmRlbiBtYWcuIERhYmVpIHdpcmQgJ21ldGhvZCcgYmVydWVja3NpY2h0aWd0ICh6LkIuIHNjaGFsdGV0CisgICAgIE1fTk9DSEVDSyBkaWUgbWVpc3RlbiBQcnVlZnVuZ2VuIGFiKS4KKyAgICAgQmVpIEdlZ2Vuc3RhZW5kZW4gd2lyZCB6LkIuIFBfTk9EUk9QLCBQX05PR0VULCBkYXMgR2V3aWNodCwgb2IgZGFzIFppZWwKKyAgICAgZGFzIE9iamVrdCBhdWZuZWhtZW4gd2lsbCAoTWF5QWRkV2VpZ2h0KCksIFByZXZlbnRJbnNlcnQpIG9kZXIgYXVjaAorICAgICBQcmV2ZW50TGVhdmUoKSBnZXBydWVmdC4KKyAgICAgQmVpIExlYmV3ZXNlbiB3aXJkIHouQi4gUF9OT19UUE9SVCBpbiAnZGVzdCcgdW5kICdvbGRlbnYnIHVuZAorICAgICBQcmV2ZW50TGVhdmVMaXZpbmcvUHJldmVudEluc2VydExpdmluZygpIGF1c2dld2VydGV0LgorICAgICBCZWkgU3BpZWxlcm4gd2lyZCBhdWNoIG5vY2ggZ2V0ZXN0ZXQsIG9iIG1ldGhvZCBNX0dPIG9kZXIgTV9UUE9SVAorICAgICBlbnRoYWVsdCB1bmQgb2IgZGFzIFppZWwgbnVyIHZvbiBUZXN0c3BpZWxlcm4gYmV0cmV0ZW4gd2VyZGVuIGthbm4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDAsIHdlbm4gZGFzIE9iamVrdCBiZXdlZ3Qgd2VyZGVuIGRhcmYuCisgICAgIFdlbm4gZXMgbmljaHQgYmV3ZWd0IHdlcmRlbiBkYXJmLCBzaW5kIGFscyBSdWVja2dhYmV3ZXJ0ZSBkaWUgaW4KKyAgICAgL3N5cy9tb3ZpbmcuaCBkZWZpbmllcnRlbiBNb3ZlLUZlaGxlcndlcnRlIHp1bGFlc3NpZyAocy4gbW92ZSgpKS4gU29sbHRlCisgICAgIGhpZXIgZWluIHVuZ3VlbHRpZ2VyIEZlaGxlcndlcnQgenVydWVja2dlZ2ViZW4gd2VyZGVuLCB3aXJkIGRhcyBtb3ZlKCkKKyAgICAgZWJlbmZhbGxzIGFiZ2Vicm9jaGVuIHVuZCBNRV9ET05UX1dBTlRfVE9fQkVfTU9WRUQgenVydWVja2dlYmVuLgorCitCRU1FUktVTkdFTjoKKyAgICAgRGllc2UgRnVua3Rpb24ga2FubiB1ZWJlcnNjaHJpZWJlbiwgdW0gZmVpbmVyZSBLb250cm9sbGUgdWViZXIgZGllCisgICAgIEJld2VndW5nZW4gZGVzIE9iamVrdCB6dSBoYWJlbi4gRGFiZWkgYWJlciBiaXR0ZSBlaW5pZ2UgRGluZ2UgYmVhY2h0ZW46CisgICAgIDEuIERlbmt0IGRhcmFuLCBnZ2YuIE1fTk9DSEVDSyB6dSBiZXJ1ZWNrc2ljaHRpZ2VuIHVuZCB1bmQgZXVyZQorICAgICBQcnVlZnVuZ2VuIG51ciB6dSBtYWNoZW4sIHdlbm4gZXMgbmljaHQgaW4gbWV0aG9kIHZvcmtvbW10LgorICAgICAyLiBHQU5aIFdJQ0hUSUc6IFdlbm4gaWhyIG1pdCBldXJlbiBQcnVlZnVuZ2VuIGZlcnRpZyBzZWluIHVuZCBkYXMgT2JqZWt0CisgICAgIGJld2VndCB3ZXJkZW4gZHVlcmZ0ZSwgZGllIGdlZXJidGVuIFBydWVmdW5nZW4gbm9jaCB0ZXN0ZW4sIGFsc28gX0lNTUVSXworICAgICBkYXMgZ2VlcmJ0ZSBQcmV2ZW50TW92ZSgpIG5vY2ggYXVmcnVmZW4gdW5kIGRlc3NlbiBXZXJ0CisgICAgIHp1cnVlY2tnZWJlbi9iZXJ1ZWNrc2ljaHRpZ2VuLCBkYSBzb25zdCBQcnVlZnVuZ2VuIGRlcyBHZXdpY2h0cyBldGMuIAorICAgICBuaWNodCBmdW5rdGlvbmllcmVuIG9kZXIgYmVpIExlYmV3ZXNlbiBkaWUgUHJldmVudCooKSBpbSBFbnZpcm9ubWVudCAKKyAgICAgbmljaHQgZ2VydWZlbiB3ZXJkZW4hCisgICAgIDMuIERpZSBGdW5rdGlvbiBpc3QgbnVyIG9iamVrdGludGVybiB6dSB2ZXJ3ZW5kZW4sIENhbGwtT3RoZXIgdm9uIGF1c3NlbgorICAgICBzaW5kIG5pY2h0IG1vZWdsaWNoLCBiZWltIFVlYmVyc2NocmVpYmVuICdwcm90ZWN0ZWQnIG5pY2h0IHZlcmdlc3Nlbi4KKyAgICAgNC4gTm9jaG1hbDogR2VlcmJ0ZXMgUHJldmVudE1vdmUoKSBfTklDSFQgVkVSR0VTU0VOXyEKKworQkVJU1BJRUxFOgorICAgICBFaW4gT2JqZWt0LCB3YXMgbnVyIGltIFN0ZXJuZW5saWNodCBhdWZnZW5vbW1lbiB3ZXJkZW4ga2FubiAod2FydW0KKyAgICAgYXVjaCBpbW1lcik6CisKKyAgICAgcHJvdGVjdGVkIGludCBQcmV2ZW50TW92ZShvYmplY3QgZGVzdCwgb2JqZWN0IG9sZGVudiwgaW50IG1ldGhvZCkgeworICAgICAgIGlmICggKG1ldGhvZCAmIE1fTk9DSEVDSykgKSB7CisgICAgICAgICAgIC8vIHdlbm4gbWl0IE1fTk9DSEVDSyBiZXdlZ3QsIGlzdCBkYXMgU3Rlcm5lbmxpY2h0IGVnYWwsIG51cgorICAgICAgICAgICAvLyBnZWVyYnRlcyBQcmV2ZW50TW92ZSgpIGJlcnVlY2tzaWNodGVuOgorICAgICAgICAgICByZXR1cm4gOjpQcmV2ZW50TW92ZShkZXN0LCBvbGRlbnYsIG1ldGhvZCk7CisgICAgICAgfQorICAgICAgIGVsc2UgaWYgKCBtZXRob2QgJiBNX0dFVCkgeworICAgICAgICAgICAvLyB3ZW5uIGVzIGF1Zmdlbm9tbWVuIHdlcmRlbiBzb2xsOiBuYWNoIFN0ZXJuZW5saWNodCBpbSBSYXVtCisgICAgICAgICAgIC8vIGd1Y2tlbjoKKyAgICAgICAgICAgaWYgKG9iamVjdHAoZGVzdCkgJiYgCisgICAgICAgICAgICAgICAoZGVzdC0+UXVlcnlQcm9wKFBfTElHSFRfVFlQRSkgIT0gTFRfU1RBUlMpKQorICAgICAgICAgICAgICAgcmV0dXJuIE1FX0NBTlRfQkVfVEFLRU47CisgICAgICAgfQorICAgICAgIC8vIEZhbGwtdGhyb3VnaDoKKyAgICAgICByZXR1cm4gOjpQcmV2ZW50TW92ZShkZXN0LCBvbGRlbnYsIG1ldGhvZCk7CisgICAgIH0KKworCitTSUVIRSBBVUNIOgorICAgICBQcmV2ZW50TGVhdmUoKSwgTm90aWZ5SW5zZXJ0KCksIE5vdGlmeUxlYXZlKCksIE1heUFkZE9iamVjdCgpLAorICAgICBQcmV2ZW50SW5zZXJ0TGl2aW5nKCksIFByZXZlbnRMZWF2ZUxpdmluZygpLCBOb3RpZnlNb3ZlKCksCisgICAgIFByZXZlbnRNb3ZlKCksIE1heUFkZFdlaWdodCgpLCBtb3ZlKCksIC9zdGQvY29udGFpbmVyL3Jlc3RyaWN0aW9ucy5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDA0LjA4LjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5IGIvZG9jL2xmdW4vUXVlcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzOTk5OAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5CkBAIC0wLDAgKzEsODEgQEAKK1F1ZXJ5KCkKK0ZVTktUSU9OOgorICAgICBwdWJsaWMgdmFyYXJncyBtaXhlZCBRdWVyeShzdHJpbmcgbmFtZSwgaW50IFR5cGUpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvcHJvcGVydGllcy5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nIG5hbWUgLSBQcm9wZXJ0eSwgZGVyZW4gV2VydChlKSBhdXNnZWxlc2VuIHdlcmRlbgorICAgICBpbnQgdHlwZSAgLSBBcnQgZGVyIGdld3VlbnNjaHRlbiBJbmZvcm1hdGlvbi4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEZXIgV2VydCBlaW5lciBkZXIgaW5uZXJlbiBFaWdlbnNjaGFmdGVuIGRlciBQcm9wZXJ0eSAnbmFtZScgd2lyZAorICAgICB6dXJ1ZWNrZ2VnZWJlbi4gICdUeXBlJyBpc3QgZGFiZWkgZWluZXIgZGVyIGluIC9zeXMvdGhpbmcvcHJvcGVydGllcy5oCisgICAgIHVuZCBmb2xnZW5kIGF1ZmdlbGlzdGV0ZW4gRl9YWFgtV2VydGU6CisKKyAgICAgRl9WQUxVRSAoPT0wLCBEZWZhdWx0KQorICAgICAgICAgVW50ZXIgVW1nZWh1bmcgZWluZXIgZXZlbnR1ZWxsIHZvcmhhbmRlbmVuIEFiZnJhZ2VtZXRob2RlIG9kZXIKKyAgICAgICAgIF9xdWVyeV8nbmFtZScoKSB3aXJkIGRlciBEYXRlbndlcnQgZGVyIFByb3BlcnR5ICduYW1lJworICAgICAgICAgenVydWVja2dlZ2ViZW4uCisgICAgIEZfTU9ERQorICAgICAgICAgIERpZSBpbnRlcm5lbiBGbGFncyBkZXIgUHJvcGVydHkgd2VyZGVuIHp1cnVlY2tnZWdlYmVuLkRpZXMga29lbm5lbgorICAgICAgICAgIChsb2dpc2NoIG1pdCAmIHZlcmtudWVwZnQpIHNlaW46CisgICAgICAgICAgU0FWRSAgLSBQcm9wZXJ0eSBzb2xsIGJlaSBzYXZlX29iamVjdCgpIGdlc3BlaWNoZXJ0IHdlcmRlbgorICAgICAgICAgIFBST1RFQ1RFRCAtIE9iamVrdCBzZWxic3QvRU0vUm9vdCBrYW5uIFByb3BlcnR5IG1hbmlwdWxpZXJlbgorICAgICAgICAgIFNFQ1VSRUQgIC0gd2llIFBST1RFQ1RFRCwgZGFzIEZsYWcga2FubiBhYmVyIG5pY2h0CisgICAgICAgICAgICAgICAgICAgICB6dXJ1ZWNrZ2VzZXR6dCB3ZXJkZW4gKGltbWVyIFNFQ1VSRUQpCisgICAgICAgICAgTk9TRVRNRVRIT0QgLSBuaWVtYW5kIGthbm4gUHJvcGVydHkgbWFuaXB1bGllcmVuCisgICAgICAgICAgICAgICAgICAgICAgICAoYXVjaCBrZWluIEZfU0VUX01FVEhPRCBvZGVyIF9zZXRfJ25hbWUnKCkpCisgICAgIEZfU0VUX01FVEhPRAorICAgICAgICAgIEVpbiBldmVudHVlbGwgZnVlciBkaWUgUHJvcGVydHkgZWluZ2V0cmFnZW5lIEZfU0VUX01FVEhPRCB3aXJkCisgICAgICAgICAgenVydWVja2dlZ2ViZW4uCisgICAgICAgICAgKF9zZXRfJ25hbWUnKCktTWV0aG9kZW4gd2VyZGVuIHNvIG5pY2h0IGF1ZmdlZnVlaHJ0ISkKKyAgICAgRl9RVUVSWV9NRVRIT0QKKyAgICAgICAgICBFaW4gZXZlbnR1ZWxsIGZ1ZXIgZGllIFByb3BlcnR5IGVpbmdldHJhZ2VuZSBGX1FVRVJZX01FVEhPRCB3aXJkCisgICAgICAgICAgenVydWVja2dlZ2ViZW4uCisgICAgICAgICAgKF9xdWVyeV8nbmFtZScoKS1NZXRob2RlbiB3ZXJkZW4gc28gbmljaHQgYXVmZ2VmdWVocnQhKQorCitSVWVDS0dBQkVXRVJUOgorICAgICBEaWUgZ2V3dWVuc2NodGUgRWlnZW5zY2hhZnQsIGFiaGFlbmdpZyB2b24gJ1R5cGUnLgorCitCRU1FUktVTkdFTjoKKyAgICAgLSBRdWVyeSgpIHNvbGx0ZSBuaWNodCB6dW0gcmVndWxhZXJlbiBBdXNsZXNlbiBkZXMgSW5oYWx0IGVpbmVyCisgICAgICAgUHJvcGVydHkgdmVyd2VuZGV0IHdlcmRlbiwgZGEgc293b2hsIEZfUVVFUllfTUVUSE9EIGFscyBhdWNoCisgICAgICAgbGliaW50ZXJuZSBfcXVlcnlfJ25hbWUnKCktTWV0aG9kZW4gdW1nYW5nZW4gd2VyZGVuIHVuZCBkYXMgRXJnZWJuaXMKKyAgICAgICBmdWVyIHNvIHZlcmFlbmRlcnRlIFByb3BlcnR5cyB1bmRlZmluaWVydCBpc3QKKyAgICAgLSBfc2V0XyduYW1lJygpIHVuZCBfcXVlcnlfJ25hbWUnKCkgc2luZCBhbHRlIFByb3BlcnR5bWV0aG9kZW4gdW5kCisgICAgICAgc29sbHRlbiBuaWNodCBpbiBub3JtYWxlbiBPYmpla3RlbiBiZW51dHp0IHdlcmRlbiAtPgorICAgICAgIEZfU0VUX01FVEhPRC9GX1FVRVJZX01FVEhPRCAoZ2dmLiBtaXQgUFJPVEVDVEVEKSBudXR6ZW4KKyAgICAgLSBGX1NFVC9GX1FVRVJZX01FVEhPRHMga29lbm5lbiAncHJvdGVjdGVkJyAoZW1wZm9obGVuKSBvZGVyICdzdGF0aWMnCisgICAgICAgc2Vpbi4gX3NldF8vX3F1ZXJ5XyBkdWVyZmVuIG1vbWVudGFuIF9uaWNodF8gJ3Byb3RlY3RlZCcgc2VpbiwgZnVlcgorICAgICAgIGRpZXNlIGdlaHQgbnVyICdzdGF0aWMnIChpbiBkaWVzZW0gRmFsbCBlbXBmb2hsZW4pLgorCitCRUlTUElFTEU6CisgICAgIC8vIEF1c2xlc2VuIGRlcyBXZXJ0ZXMgdW50ZXIgVW1nZWh1bmcgZWluZXIgQWJmcmFnZW1ldGhvZGUKKyAgICAgUXVlcnkoUF9YWVosIEZfVkFMVUUpOworCisgICAgIC8vIEF1c2xlc2VuIGRlciBGbGFncyBlcmZhZWhydCBtYW4gbWl0OgorICAgICBRdWVyeShQX1hZWiwgRl9NT0RFKTsKKworICAgICAvLyBzYXViZXJlcyBQcm9ncmFtbWllcmVuLCB3aXIgd29sbGVuIGVpbmUgRl9RVUVSWV9NRVRIT0Qgc2V0emVuLAorICAgICAvLyBwcnVlZmVuIHZvcmhlciBhdWYgRXhpc3Rlbno6CisgICAgIGlmKHRoaXNfcGxheWVyKCktPlF1ZXJ5KFBfRlJPRywgRl9RVUVSWV9NRVRIT0QpIHsKKyAgICAgIHdyaXRlKGJyZWFrX3N0cmluZygKKyAgICAgICAiSWNoIGthbm4gZGljaCBuaWNodCB3ZWl0ZXIgdm9yIEZyb3NjaHNlaW4gc2NodWV0emVuISIsCisgICAgICAgIkRlciBNYWdpZXIgd2lua3QgYWI6ICIsIDc4KSk7CisgICAgICBzYXkoYnJlYWtfc3RyaW5nKAorICAgICAgICJJY2gga2FubiBkaWNoIG5pY2h0IHdlaXRlciB2b3IgRnJvc2Noc2VpbiBzY2h1ZXR6ZW4hIiwKKyAgICAgICAiRGVyIE1hZ2llciBzYWd0IHp1ICIrdGhpc19wbGF5ZXIoKS0+bmFtZShXRU0pKyI6ICIsIDc4KSk7CisgICAgIH0gZWxzZSB7CisgICAgICB0aGlzX3BsYXllcigpLT5TZXQoUF9GUk9HLCAjJ3F1ZXJ5X3Byb3RlY3RfZnJvZywgRl9RVUVSWV9NRVRIT0QpOworICAgICAgLi4uCisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgQWVobmxpY2hlczogU2V0UHJvcChMKSwgUXVlcnlQcm9wKEwpLCBTZXQoTCkKKyAgICAgR2VuZXJlbGw6ICBTZXRQcm9wZXJ0aWVzKEwpLCBRdWVyeVByb3BlcnRpZXMoTCkKKyAgICAgS29uemVwdDogIHByb3BlcnRpZXMsIC9zdGQvdGhpbmcvcHJvcGVydGllcy5jCisgICAgIFNvbnN0aWdlczogIFBfQVVUT0xPQURPQkoKKworMjguMDMuMjAwOCwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlBbGxEb29ycyBiL2RvYy9sZnVuL1F1ZXJ5QWxsRG9vcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiYmZiYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5QWxsRG9vcnMKQEAgLTAsMCArMSwzMiBAQAorRlVOS1RJT046CisgICAgIG1hcHBpbmcgUXVlcnlBbGxEb29ycygpOworCitERUZJTklFUlQgSU46CisgICAgIC9vYmovZG9vcm1hc3Rlci5jCisKK0FSR1VNRU5URToKKyAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3ZXJkZW4gZGllIFp1c3RhZW5kZSBBTExFUiBUdWVyZW4gaW0gTW9yZ2VuR3JhdWVuIGVybWl0dGVsdC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgRWluIE1hcHBpbmcgbWl0IGRlbiBadXN0YWVuZGVuIGFsbGVyIFR1ZXJlbiBpbSBNb3JnZW5HcmF1ZW4uIEFscworICAgICBTY2hsdWVzc2VsIGRpZW5lbiBkaWUgRGF0ZWluYW1lbiBkZXIgU3RhcnQtIHVuZCBaaWVscmFldW1lIGluCisgICAgIGxleGlrb2dyYXBoaXNjaGVyIChhbHBoYWJldGlzY2hlcikgUmVpaGVuZm9sZ2UsIGdldHJlbm50IGR1cmNoICI6IiwKKyAgICAgZGVyIFdlcnQgZGVzIEtleXMgaXN0IGRlciBha3R1ZWxsZSBadXN0YW5kIGRpZXNlciBUdWVyLCB6LkIuOgorCisgICAgKFsgIi9kL2luc2Vsbi9zY2hpZmZlL2pvbGxlOi9kL2luc2Vsbi9zY2hpZmZlL2pvbGxlL21hc2NoIiA6IC0xLAorICAgICAgIC4uLgorICAgICBdKTsKKworICAgICBFcyBnaWJ0IGFsc28gZWluZSBUdWVyIHp3aXNjaGVuIEpvbGxlIHVuZCBNYXNjaGluZW5yYXVtLCBkaWUKKyAgICAgbW9tZW50ZW4gZ2VzY2hsb3NzZW4gaXN0ICgtMSA9IERfU1RBVFVTX0NMT1NFRCkuCisKKworU0lFSEUgQVVDSDoKKyAgICBOZXdEb29yKCksIFF1ZXJ5RG9vcktleSgpLCBRdWVyeURvb3JTdGF0dXMoKSwgU2V0RG9vclN0YXR1cygpLAorICAgIC9zdGQvcm9vbS9kb29ycy5jLCAvb2JqL2Rvb3JtYXN0ZXIuYywgR2V0UGhpb2xlbkluZm9zKCksIFBfRE9PUl9JTkZPUworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGV0enRlIEFlbmRlcnVuZzogRG9uLCAwOC4wNS4yMDE0LCBHYWJ5bG9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeUFybW91ckJ5VHlwZSBiL2RvYy9sZnVuL1F1ZXJ5QXJtb3VyQnlUeXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZDQzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeUFybW91ckJ5VHlwZQpAQCAtMCwwICsxLDY0IEBACitReWVyeUFybW91ckJ5VHlwZSgpCisKK0ZVTktUSU9OOgorICAgICBtaXhlZCBRdWVyeUFybW91ckJ5VHlwZShzdHJpbmcgdHlwZSkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIHN0cmluZyB0eXBlCisgICAgICAgIFR5cCBkZXIgUnVlc3R1bmcgYXVzIC9zeXMvY29tYmF0LmgsIGF1ZiBkaWUgZ2V0ZXN0ZXQgd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgQWJmcmFnZSwgb2IgZGFzIExlYmV3ZXNlbiBlaW5lIFJ1ZXN0dW5nIGRlcyBhbmdlZ2ViZW5lbiBUeXBzIHRyYWVndC4KKworICAgICBadXJ1ZWNrZ2VnZWJlbiB3aXJkIGplIG5hY2ggVHJhZ2VzdGF0dXMgdW5kIDx0eXBlPjoKKyAgICAgKiAwLCBmYWxscyBkYXMgTGViZXdlc2VuIGRpZSBnZXN1Y2h0ZSBSdWVzdHVuZ3NhcnQgbmljaHQgdHJhZWd0CisgICAgICogaW0gRXJmb2xnc2ZhbGwgZGFzIFJ1ZXN0dW5nc29iamVrdAorICAgICAqIGZhbGxzIDx0eXBlPiBBVF9NSVNDIGlzdDoKKyAgICAgICAqICh7fSksIHdlbm4gZXMga2VpbmUgQVRfTUlTQy1SdWVzdHVuZyB0cmFlZ3QKKyAgICAgICAqIGVpbiBBcnJheSB2b24gQVRfTUlTQy1SdWVzdHVuZ2VuCisgICAgICogZmFsbHMgPHR5cGU+IDAgaXN0OiBlaW4gTWFwcGluZywgZGFzIGRpZXNlIEluZm9ybWF0aW9uZW4gbWl0IGRlbQorICAgICAgIFJ1ZXN0dW5nc3R5cGVuIGFscyBTY2hsdWVzc2VsIGVudGhhZWx0OgorICAgICAgIChbQVRfTUlTQzogKHtbb2JqZWN0XSwgLi4ufSksCisgICAgICAgICBBVF8uLi46IDxvYmplY3Q+LAorICAgICAgICAgLi4uIF0pCisKK0JFTUVSS1VORzoKKyAgICAgSXN0IDx0eXBlPiBBVF9NSVNDLCBzbyB3aXJkIGF1ZiBqZWRlbiBGYWxsIGVpbiBBcnJheSB6dXJ1ZWNrZ2VnZWJlbiEKKworQkVJU1BJRUxFOgorICAgICBXaXIgd29sbGVuIHdpc3Nlbiwgb2IgdGhpc19wbGF5ZXIoKSBIYW5kc2NodWhlIHRyYWVndDoKKworICAgICBpZiAob2JqZWN0cCh0aGlzX3BsYXllcigpLT5RdWVyeUFybW91ckJ5VHlwZShBVF9HTE9WRSkpKQorICAgICAgIC4uLgorCisKKyAgICAgV2lyIGJhdWVuIGVpbmVuIFR1ZXJzdGVoZXIsIGRlciBhdWYgQVRfTUlTQy1LbGVpZHVuZyBhY2h0ZXQ6CisKKyAgICAgaWYgKHNpemVvZih0aGlzX3BsYXllcigpLT5RdWVyeUFybW91ckJ5VHlwZShBVF9NSVNDKSkgPiAzKSB7CisgICAgICAgaWYodGhpc19wbGF5ZXIoKS0+UmVjZWl2ZU1zZygKKyAgICAgICAgICAgICJEdSBkYXJmc3QgbmljaHQgcGFzc2llcmVuLCBEdSBoYXN0IHp1dmllbGUgIgorICAgICAgICAgICAgInVucGFzc2VuZGUgRGluZ2UgYW4hIiwKKyAgICAgICAgICAgIE1UX0xJU1RFTnxNU0dfRE9OVF9TVE9SRSwgTUFfVEVMTCwKKyAgICAgICAgICAgICJEZXIgV2FlY2h0ZXIgdGVpbHQgRGlyIG1pdDogIik8TVNHX0RFTElWRVJFRCAmJiAvLyB0YXViPworICAgICAgICAgIHRoaXNfcGxheWVyKCktPlJlY2VpdmVNc2coCisgICAgICAgICAgICAiRGVyIFdhZWNodGVyIGhhZWx0IGRpY2ggYXVmLiIsIE1UX0xPT0spPE1TR19ERUxJVkVSRUQpIC8vIGJsaW5kPworICAgICAgICAgICAgdGhpc19wbGF5ZXIoKS0+UmVjZWl2ZU1zZygKKyAgICAgICAgICAgICAgIkplbWFuZCBoYWVsdCBkaWNoIGF1Zi4iLCBNVF9GRUVMKTsgLy8gbnUgYWJlciEKKyAgICAgICAvLyBBdWZoYWx0ZW4hCisgICAgIH0gZWxzZSB0aGlzX3BsYXllcigpLT5SZWNlaXZlTXNnKAorICAgICAgICAgICAgICAiRHUgZGFyZnN0IHBhc3NpZXJlbiwgdmllbCBTcGFzcyBpbSBDYXNpbm8hIiwKKyAgICAgICAgICAgICAgTVRfTElTVEVOfE1TR19ET05UX1NUT1JFLCBNQV9URUxMLAorICAgICAgICAgICAgICAiRGVyIFdhZWNodGVyIHRlaWx0IERpciBtaXQ6ICIpOworICAgICAgIC8vIGltIEVyZm9sZ3NmYWxsIGlzdCBlcyB1bnMgZWdhbCwgd2VubiBlcyBkZXIgU3BpZWxlciBuaWNodAorICAgICAgIC8vIGxpZXN0OiBlciB3aXJkIGRhbm4gZWJlbiAid29ydGxvcyIgZHVyY2hnZWxhc3NlbgorCitTSUVIRSBBVUNIOgorICAgICBXZWFyKCksIFdlYXJBcm1vdXIoKSwgV2VhckNsb3RoaW5nKCksIFVud2VhcigpLCBVbndlYXJBcm1vdXIoKSwKKyAgICAgVW53ZWFyQ2xvdGhpbmcoKSwgRmlsdGVyQ2xvdGhpbmcoKSwKKyAgICAgUF9BUk1PVVJfVFlQRSwgUF9DTE9USElORywgUF9BUk1PVVJTLAorICAgICAvc3RkL2xpdmluZy9jb21iYXQuYworCiswMi4wMi4yMDE2LCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlBcnJpdmVkIGIvZG9jL2xmdW4vUXVlcnlBcnJpdmVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzY2Y4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeUFycml2ZWQKQEAgLTAsMCArMSwyNiBAQAorUXVlcnlBcnJpdmVkKCkKKworRlVOS1RJT046CisgICAgIG1peGVkIFF1ZXJ5QXJyaXZlZCgpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdHJhbnNwb3J0LmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIGVybWl0dGVsdCwgb2Igc2ljaCBkZXIgVHJhbnNwb3J0ZXIgbW9tZW50YW4gYW4gZWluZXIKKyAgICAgSGFsdGVzdGVsbGUgYmVmaW5kZXQgKHVuZCBiZXN0aWVnZW4gb2RlciB2ZXJsYXNzZW4gd2VyZGVuIGthbm4pIG9kZXIgb2IKKyAgICAgZXIgdW50ZXJ3ZWdzIGlzdC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgTnVsbCwgd2VubiBkZXIgVHJhbnNwb3J0ZXIgdW50ZXJ3ZWdzIGlzdC4gTGllZ3QgZGVyIFRyYW5zcG9ydGVyIGFuCisgICAgIGVpbmVyIEhhbHRlc3RlbGxlLCBzbyB3aXJkIGRlciBtaXQgQWRkUm91dGUgYWxzIG5hbWUgdWViZXJnZWJlbmUgU3RyaW5nCisgICAgIHp1cnVlY2tnZWdlYmVuLgorCitTSUVIRSBBVUNIOgorICAgICBBZGRSb3V0ZSgpLCAvc3RkL3RyYW5zcG9ydC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoyMTo0NyAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlBcnRpY2xlIGIvZG9jL2xmdW4vUXVlcnlBcnRpY2xlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTNiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeUFydGljbGUKQEAgLTAsMCArMSw5MiBAQAorUXVlcnlBcnRpY2xlKCkKKworRlVOS1RJT046CisgICAgIHZhcmFyZ3Mgc3RyaW5nIFF1ZXJ5QXJ0aWNsZShpbnQgY2FzdXMsIGludCBkZW0sIGludCBmb3JjZSk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9sYW5ndWFnZS5jCisKK0FSR1VNRU5URToKKyAgICAgY2FzdXMKKyAgICAgICAgICBEZXIgRmFsbCwgaW4gZGVtIGRlciBBcnRpa2VsIGdld3VlbnNjaHQgd2lyZC4KKyAgICAgICAgICAoS29uc3RhbnRlbiBhdXMgL3N5cy90aGluZy9sYW5ndWFnZS5oOiBXRVIsIFdFTSwgV0VTU0VOLCBXRU4uKQorCisgICAgIGRlbQorICAgICAgICAgIFdpcmQgZWluIGJlc3RpbW10ZXIgb2RlciBlaW4gdW5iZXN0aW1tdGVyIEFydGlrZWwgdmVybGFuZ3Q/CisgICAgICAgICAgICAgKyBkZW0gPSAwOiBVbmJlc3RpbW10ZXIgQXJ0aWtlbCEKKyAgICAgICAgICAgICArIGRlbSA9IDE6IEJlc3RpbW10ZXIgQXJ0aWtlbCEKKyAgICAgICAgICAgICArIGRlbSA9IDI6IEZpbmRlIHNlbGJzdCBoZXJhdXMsIHdlbGNoZXIgQXJ0aWtlbCBwYXNzdCEKKworICAgICBmb3JjZQorICAgICAgICAgIEZhbGxzIHVuZ2xlaWNoIE51bGwsIHNvIHdpcmQgYXVmIGplZGVuIEZhbGwgZWluIEFydGlrZWwKKyAgICAgICAgICB6dXJ1ZWNrZ2VnZWJlbiwgdHJvdHogUF9BUlRJQ0xFID09IDAuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gZ2lidCBlaW5lbiB6dW0gR2VzY2hsZWNodCBkZXMgT2JqZWt0ZXMgcGFzc2VuZGVuIEFydGlrZWwKKyAgICAgenVydWVjaywgZGVyIGluIGRlbiBwYXNzZW5kZW4gRmFsbCBkZWtsaW5pZXJ0IHdpcmQuCisKKyAgICAgRGFzIEhlcmF1c2ZpbmRlbiBkZXMgcGFzc2VuZGVuIEFydGlrZWxzIGJlaSAnZGVtJyA9IDIgYmV6aWVodCBzaWNoIGF1ZgorICAgICBTaXR1YXRpb25lbiwgaW4gZGVuZW4gbWVocmVyZSBnbGVpY2huYW1pZ2UgT2JqZWt0ZSBpbSBzZWxiZW4gRW52aXJvbm1lbnQKKyAgICAgc2luZC4gTWFuICduaW1tdCcgZGFubiB6QiBuaWNodCAiZGVuIFN0YW1tIiBzb25kZXJuICJlaW5lbiBTdGFtbSIuCisKKyAgICAgSXN0IFBfQVJUSUNMRSA9IDAsIHNvIHdpcmQgZWluIExlZXJzdHJpbmcgenVydWVja2dlZ2ViZW4sIGVzIHNlaSBkZW5uLAorICAgICBtYW4gdWViZXJnaWJ0IGluIGRlbSBBcmd1bWVudCAnZm9yY2UnIGVpbmVuIFdlcnQgdW5nbGVpY2ggTnVsbC4KKworQkVNRVJLVU5HRU46CisgICAgIEFjaHR1bmc6IGJlaSBndWVsdGlnZW0gQXJ0aWtlbCB3aXJkIGVpbiBMZWVyemVpY2hlbiBhbmdlaGFlbmd0IQorCisgICAgIE5hbWUoKS9uYW1lKCkgbnV0emVuIGJlcmVpdHMgUXVlcnlBcnRpY2xlKCksIHdlbm4gUF9BUlRJQ0xFIGdlc2V0enQKKyAgICAgaXN0LiBEZXNoYWxiIG11c3MgbWFuIHNpY2ggIkVpbmVzIE9ya3MiIG5pY2h0IHNlbGJzdCBhdXMgZGVtCisgICAgIFF1ZXJ5QXJ0aWNsZSgpIHVuZCBkZW0gTmFtZW4genVzYW1tZW5iYXN0ZWxuLCB3ZW5uIG1laHJlcmUgT3JrcworICAgICBpbSBSYXVtIGhlcnVtc3RlaGVuIHVuZCBtYW4gZWluZSBOYWNocmljaHQgd2llOgorICAgICAgICJEdSBoYXVzdCBkZW4gT3JrLiIgdW5kIGZvbGdlbmQKKyAgICAgICAiW0Rlc3xFaW5lc10gT3JrcyBOYXNlIHNjaHdpbGx0IGFuLiIKKyAgICAgaGFiZW4gbW9lY2h0ZToKKyAgICAgICAiRHUgaGF1c3QgIitvcmstPm5hbWUoV0VOLCAxKSsiLiAiCisgICAgICAgb3JrLT5OYW1lKFdFU1NFTiwgMikrIiBOYXNlIHNjaHdpbGx0IGFuLiIKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgKiBnZXd1ZW5zY2h0ZXIgQXJ0aWtlbCBhbHMgU3RyaW5nIHBsdXMgTGVlcnplaWNoZW4gKCEpIE9ERVIKKyAgICAgKiBMZWVyc3RyaW5nCisKK0JFSVNQSUVMRToKKyAgICAgLy8gIlggaGF1dCBZIGF1ZiBkaWUgTmFzZS4gW0RlcnxEaWV8RGFzXSBpc3QgbmljaHQgYmVlaW5kcnVja3QuIgorICAgICAvLyBNYW4gd2lsbDoKKyAgICAgLy8gKiBhdWYgamVkZW4gRmFsbCBlaW5lbiBBcnRpa2VsLCBhdWNoIHdlbm4ga2VpbiBQX0FSVElDTEUgZ2VzZXR6dCBpc3QKKyAgICAgLy8gKiBudXIgZGVuIGJlc3RpbW10ZW4gQXJ0aWtlbAorICAgICBzZW5kX3Jvb20odGhpc19vYmplY3QoKSwKKyAgICAgICBwbDEtPk5hbWUoV0VSKSsiIGhhdXQgIitwbDItPm5hbWUoV0VNKSsiIGF1ZiBkaWUgTmFzZS4gIisKKyAgICAgICBjYXBpdGFsaXplKHBsMi0+UXVlcnlBcnRpY2xlKFdFUiwgMSwgMSkpKyJpc3QgbmljaHQgYmVlaW5kcnVja3QuIiwKKyAgICAgICBNVF9MT09LfE1UX0xJU1RFTiwgMCwgMCwgKHtwbDEsIHBsMn0pKTsKKworICAgICAvLyAiWCBnaWJ0IGRpciBZLiBbRXJ8U2llfEVzXSBwcnVlZnQgW2RlbnxkaWV8ZGFzXSAuLi4iCisgICAgIC8vIE1hbiB3aWxsOgorICAgICAvLyAqIGF1ZiBqZWRlbiBGYWxsIGVpbmVuIEFydGlrZWwsIGF1Y2ggd2VubiBrZWluIFBfQVJUSUNMRSBnZXNldHp0IGlzdAorICAgICAvLyAqIG51ciBkZW4gYmVzdGltbXRlbiBBcnRpa2VsCisgICAgIHNlbmRfcm9vbSh0aGlzX29iamVjdCgpLAorICAgICAgIHBsMS0+TmFtZShXRVIpKyIgZ2lidCAiK3BsMi0+bmFtZShXRU0pKyIgIitvYmotPm5hbWUoV0VSKSsiLiAiKworICAgICAgIGNhcGl0YWxpemUocGwyLT5RdWVyeVByb25vdW4oV0VSKSkrIiBwcnVlZnQgIisKKyAgICAgICBvYi0+UXVlcnlBcnRpY2xlKFdFTiwgMSwgMSkrIi4uLiIsCisgICAgICAgTVRfTE9PS3xNVF9MSVNURU4sIDAsIDAsICh7cGwxLCBwbDJ9KSk7CisKKyAgICAgLy8gIkRpciBmYWVsbHQgWCBhdWYgZGVuIEtvcGYuIER1IHNpZWhzdCBbZGllfGRlbnxkYXN8ZWluZXxlaW5lbnxlaW5lcyAiCisgICAgIC8vICJhdWYgZGVtIEJvZGVuIGxpZWdlbi4gW1NpZXxFcnxFc10gc2llaHQgYmx1dGlnIGF1cy4gQXVhLiBJc3QgZGFzICIKKyAgICAgLy8gInZvbiBkaXI/IgorICAgICAvLyBNYW4gd2lsbDoKKyAgICAgLy8gKiBhdWYgamVkZW4gRmFsbCBlaW5lbiBBcnRpa2VsLCBhdWNoIHdlbm4ga2VpbiBQX0FSVElDTEUgZ2VzZXR6dCBpc3QKKyAgICAgLy8gKiBiZXN0aW1tdGUvdW5iZXN0aW1tdGUgQXJ0aWtlbCwgd2VubiBiZXJlaXRzIGdsZWljaGUgR2VnZW5zdGFlbmRlCisgICAgIC8vICAgKHpCIEtva29zbnVlc3NlKSBhdWYgZGVtIEJvZGVuIGxpZWdlbiAuLi4KKyAgICAgb2ItPm1vdmUoZW52aXJvbm1lbnQoKSwgTV9OT0NIRUNLKTsgLy8gdm9yaGVyIG1hY2hlbiEKKyAgICAgcGwtPlJlY2VpdmVNc2coCisgICAgICAgIkRpciBmYWVsbHQgIitvYi0+bmFtZShXRVIsIDApKyIgYXVmIGRlbiBLb3BmLiBEdSBzaWVoc3QgIisKKyAgICAgICBvYi0+UXVlcnlBcnRpY2xlKFdFTiwgMiwgMSkrIiBhdWYgZGVtIEJvZGVuIGxpZWdlbi4gIisKKyAgICAgICBjYXBpdGFsaXplKG9iLT5RdWVyeVByb25vdW4oV0VSKSkrIiBzaWVodCBibHV0aWcgLi4uCisKK1NJRUhFIEFVQ0g6CisgICAgIEFlaG5saWNoOiAgU3VnZ2VzdEFydGljbGUoKSwgcXVlcnlfY19hcnRpY2xlKCksIHF1ZXJ5X2dfc3VmZml4KCkKKyAgICAgU29uc3RpZ2VzOiBRdWVyeU93bigpLCBRdWVyeUR1KCksCisgICAgICAgICAgICAgICAgUXVlcnlQcm9ub3VuKCksIFF1ZXJ5UG9zc1Byb25vdW4oKQorICAgICAgICAgICAgICAgIERlY2xBZGooKQorICAgICAgICAgICAgICAgIG5hbWUoKQorCis5LiBKdW4gMjAxNiwgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5QXR0cmlidXRlIGIvZG9jL2xmdW4vUXVlcnlBdHRyaWJ1dGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhNjhjOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5QXR0cmlidXRlCkBAIC0wLDAgKzEsMzIgQEAKK1F1ZXJ5QXR0cmlidXRlKCkKK0ZVTktUSU9OOgorICAgICBpbnQgUXVlcnlBdHRyaWJ1dGUoc3RyaW5nIGF0dHIpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jCisKK0FSR1VNRU5URToKKyAgICAgYXR0ciAgICAgICAtIGludGVyZXNzaWVyZW5kZXMgR2VzYW10YXR0cmlidXQKKworQkVTQ0hSRUlCVU5HOgorICAgICBEYXMgQXR0cmlidXQgc2FtdCBzZWluZXIgT2Zmc2V0cyAoTW9kaWZpZXIpIHdpcmQgenVydWVja2dlZ2ViZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIFdlcnQgZGVzIEF0dHJpYnV0ZXMsIGJlaSBTcGllbGVybiBuaWNodCBncm9lc3NlciBhbHMgMzAuCisKK0JFSVNQSUVMRToKKyAgICAgaWYgKHRoaXNfcGxheWVyKCktPlF1ZXJ5QXR0cmlidXRlKEFfQ09OKSA+IDIwKQorICAgICAgIHdyaXRlKCJEdSBzY2hhZmZzdCBlcyBkZW4gQmVyZyBob2NoLiBBYmVyIG51ciBtdWVoc2FtLlxuIik7CisKK0JFTkVSS1VOR0VOOgorICAgICBXZW5uIGVzIHVtIEF0dHJpYnV0YWJmcmFnZW4gZ2VodCwgYml0dGUgZGllc2UgTWV0aG9kZSB2ZXJ3ZW5kZW4hCisKK1NJRUhFIEFVQ0g6DQorCVF1ZXJ5QXR0cmlidXRlKCksIFF1ZXJ5UmVhbEF0dHJpYnV0ZSgpLCBRdWVyeUF0dHJpYnV0ZU9mZnNldCgpLA0KKwlTZXRBdHRyaWJ1dGUoKSwgU2V0UmVhbEF0dHJpYnV0ZSgpLCBVcGRhdGVBdHRyaWJ1dGVzKCksDQorCVNldFRpbWVkQXR0ck1vZGlmaWVyKCksIFF1ZXJ5VGltZWRBdHRyTW9kaWZpZXIoKSwgDQorCURlbGV0ZVRpbWVkQXR0ck1vZGlmaWVyKCksDQorCVBfQVRUUklCVVRFUywgUF9BVFRSSUJVVEVTX09GRlNFVFMsIFBfVElNRURfQVRUUl9NT0QsDQorCVBfWF9BVFRSX01PRCwgUF9NX0FUVFJfTU9ELCAvc3RkL2xpdmluZy9hdHRyaWJ1dGVzLmMNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorTGFzdCBtb2RpZmllZDogVHVlIEp1bCAyNyAyMDowMDoyMCAyMDA0IGJ5IE11YWRpYg0KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5QXR0cmlidXRlT2Zmc2V0IGIvZG9jL2xmdW4vUXVlcnlBdHRyaWJ1dGVPZmZzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzOGFiOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5QXR0cmlidXRlT2Zmc2V0CkBAIC0wLDAgKzEsMjYgQEAKK1F1ZXJ5QXR0cmlidXRlT2Zmc2V0KCkKK0ZVTktUSU9OOgorICAgICBpbnQgUXVlcnlBdHRyaWJ1dGVPZmZzZXQoc3RyaW5nIGF0dHIpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jCisKK0FSR1VNRU5URToKKyAgICAgYXR0cgktCWdlc3VjaHRlciBBdHRyaWJ1dE9mZnNldAorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZSBPZmZzZXRzIGRlcyBBdHRyaWJ1dHMgKGlua2x1c2l2ZSBNb2RpZmllcikgd2VyZGVuIHp1cnVlY2tnZWdlYmVuLgorCitCRUlTUElFTEU6CisgICAgIGlmKHRoaXNfcGxheWVyKCktPlF1ZXJ5QXR0cmlidXRlT2Zmc2V0KEFfU1RSKTwwKQorICAgICAgd3JpdGUoIkR1IGJpc3QgZ2VzY2h3YWVjaHQuXG4iKTsKKworU0lFSEUgQVVDSDoNCisJUXVlcnlBdHRyaWJ1dGUoKSwgUXVlcnlSZWFsQXR0cmlidXRlKCksIFF1ZXJ5QXR0cmlidXRlT2Zmc2V0KCksDQorCVNldEF0dHJpYnV0ZSgpLCBTZXRSZWFsQXR0cmlidXRlKCksIFVwZGF0ZUF0dHJpYnV0ZXMoKSwNCisJU2V0VGltZWRBdHRyTW9kaWZpZXIoKSwgUXVlcnlUaW1lZEF0dHJNb2RpZmllcigpLCANCisJRGVsZXRlVGltZWRBdHRyTW9kaWZpZXIoKSwNCisJUF9BVFRSSUJVVEVTLCBQX0FUVFJJQlVURVNfT0ZGU0VUUywgUF9USU1FRF9BVFRSX01PRCwNCisJUF9YX0FUVFJfTU9ELCBQX01fQVRUUl9NT0QsIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitMYXN0IG1vZGlmaWVkOiBUdWUgSnVsIDI3IDIwOjAwOjIwIDIwMDQgYnkgTXVhZGliDQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlCdXlGYWN0IGIvZG9jL2xmdW4vUXVlcnlCdXlGYWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNWU4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeUJ1eUZhY3QKQEAgLTAsMCArMSwyMiBAQAorUXVlcnlCdXlGYWN0KCkKKworRlVOS1RJT046CisgICAgIGludCBRdWVyeUJ1eUZhY3QoKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xhZGVuLmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIEdpYnQgZGVuIG1pdCBTZXRCdXlGYWN0KCkgZ2VzZXR6dGVuIEZha3RvciB6dXJ1ZWNrLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEZXIgRWlua2F1ZnNwcmVpc211bHRpcGxpa2F0b3IuCisKK1NJRUhFIEFVQ0g6CisgICAgIFNldEJ1eUZhY3QoKSwgL3N0ZC9sYWRlbi5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoyMTo1NyAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlCdXlWYWx1ZSBiL2RvYy9sZnVuL1F1ZXJ5QnV5VmFsdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxYTQzNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5QnV5VmFsdWUKQEAgLTAsMCArMSw1MiBAQAorUXVlcnlCdXlWYWx1ZSgpDQorDQorRnVua3Rpb246DQorICAgIHN0YXRpYyB2YXJhcmdzIGludCBRdWVyeUJ1eVZhbHVlKG1peGVkIG9iLCBvYmplY3QgY2xpZW50KQ0KKw0KK0RlZmluaWVydCBpbjoNCisgICAgL3N0ZC9yb29tL3Nob3ANCisNCitBcmd1bWVudGU6DQorICAgIG9iOiANCisgICAgICBEYXMgenUga2F1ZmVuZGUgT2JqZWt0IChTdHJpbmcgb2RlciBvYmplY3QpLg0KKyAgICAgIEltIE5vcm1hbGZhbGwgaGFuZGVsdCBlcyBzaWNoIHVtIGVpbiBPYmpla3QuIEF1c25haG1lIHNpbmQgDQorICAgICAgR2VnZW5zdGFlbmRlLCBkaWUgbWl0IEFkZEZpeGVkT2JqZWN0KCkgaGluenVnZWZ1ZWd0IHd1cmRlbi4NCisgICAgY2xpZW50OiANCisgICAgICBEZXIgS2FldWZlci4NCisNCitCZXNjaHJlaWJ1bmc6DQorICAgIEVybWl0dGVsdCBkZW4gUHJlaXMsIGRlbiA8Y2xpZW50PiBmdWVyIDxvYj4genUgYmV6YWhsZW4gaGF0Lg0KKw0KK1J1ZWNrZ2FiZXdlcnQ6DQorICAgIERlciBQcmVpcyBhbHMgSW50ZWdlci4NCisNCitCZWlzcGllbDoNCisgICAgRWluIEhhZW5kbGVyLCBkZXIgU3BpZWxlcm4gZGllIGlobSBnZWhvbGZlbiBoYWJlbiBlaW5lbiBSYWJhdHQgdm9uIDEwJSANCisgICAgZ2V3YWVocnQ6DQorICAgIA0KKyAgICBvYmplY3QgKmhlbHBlcnM7DQorICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZSgpDQorICAgIHsNCisgICAgICA6OmNyZWF0ZSgpOw0KKyAgICAgIGhlbHBlcnM9KHt9KTsNCisgICAgICAuLi4NCisgICAgfQ0KKyAgICANCisgICAgc3RhdGljIHZhcmFyZ3MgaW50IFF1ZXJ5QnV5VmFsdWUobWl4ZWQgb2IsIG9iamVjdCBjbGllbnQpDQorICAgIHsNCisgICAgICBpZihtZW1iZXIoaGVscGVycyxjbGllbnQpIT0tMSkNCisgICAgICB7DQorICAgICAgICByZXR1cm4gOjpRdWVyeUJ1eVZhbHVlKG9iLGNsaWVudCkqOS8xMDsNCisgICAgICB9DQorICAgICAgcmV0dXJuIDo6UXVlcnlCdXlWYWx1ZShvYixjbGllbnQpOw0KKyAgICB9DQorDQorU2llaGUgYXVjaDoNCisgICAgRnVua3Rpb25lbjoNCisgICAgICBBZGRGaXhlZE9iamVjdCgpLCBSZW1vdmVGaXhlZE9iamVjdCgpLCBTZXRTdG9yYWdlUm9vbSgpLCANCisgICAgICBRdWVyeVN0b3JhZ2VSb29tKCksIFF1ZXJ5QnV5RmFjdCgpLCBzZWxsX29iaigpLCBidXlfb2JqKCkNCisgICAgUHJvcGVydGllczoNCisgICAgICBQX0tFRVBFUiwgUF9NSU5fU1RPQ0ssIFBfU1RPUkVfQ09OU1VNRQ0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0xldHp0ZSBBZW5kZXJ1bmc6IDIxLjA1LjIwMTQsIEJ1Z2ZpeApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5Q29pbnNQZXJVbml0cyBiL2RvYy9sZnVuL1F1ZXJ5Q29pbnNQZXJVbml0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhjMWIwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlDb2luc1BlclVuaXRzCkBAIC0wLDAgKzEsMzEgQEAKK1F1ZXJ5Q29pbnNQZXJVbml0KCkKKworRlVOS1RJT046CisgICAgIGludCAqUXVlcnlDb2luc1BlclVuaXRzKCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC91bml0LmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIExpZWZlcnQgZGFzIFdlcnR2ZXJoYWVsdG5pcyBmdWVyIGRpZSBFaW5oZWl0ZW4genVydWVjay4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRWluIEFycmF5IHZvbiB6d2VpIFphaGxlbi4gRGllIGVyc3RlIFphaGwgaXN0IGRlciBXZXJ0IGRlciBpbiBkZXIKKyAgICAgendlaXRlbiBaYWhsIGFuZ2VnZWJlbmVuIEVpbmhlaXRlbi4KKworQkVJU1BJRUxFOgorICAgICBTdGVodCBpbSBVbml0LU9iamVrdCBmb2xnZW5kZSBXZXJ0enV3ZWlzdW5nOgorCisgICAgICAgU2V0Q29pbnNQZXJVbml0cyg3LDIpOworCisgICAgIHNvIGxpZWZlcnQgUXVlcnlDb2luc1BlclVuaXRzKCkgYWxzIEVyZ2VibmlzICh7NywgMn0pLgorCitTSUVIRSBBVUNIOgorICAgICBTZXRDb2luc1BlclVuaXRzKCksIFNldEdyYW1zUGVyVW5pdHMoKSwgUXVlcnlHcmFtc1BlclVuaXQoKSwKKyAgICAgL3N0ZC91bml0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjIyOjAyIDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeURhbWFnZSBiL2RvYy9sZnVuL1F1ZXJ5RGFtYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YzRmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeURhbWFnZQpAQCAtMCwwICsxLDM5IEBACitRdWVyeURhbWFnZSgpCisKK0ZVTktUSU9OOgorICAgICBpbnQgUXVlcnlEYW1hZ2Uob2JqZWN0IGVuZW15KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3dlYXBvbi9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIGVuZW15CisgICAgICAgICAgRGVyIEdlZ25lciwgZ2VnZW4gZGVuIGRpZSBXYWZmZSBlaW5nZXNldHp0IHdpcmQuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllcyBpc3QgZGllIHplbnRyYWxlIEZ1bmt0aW9uIGRlciBXYWZmZS4gU2llIHdpcmQgaW4gamVkZXIgS2FtcGZydW5kZQorICAgICB2b24gQXR0YWNrKCkgYXVzIGF1ZmdlcnVmZW4gdW5kIGdpYnQgZGVuIFNjaGFkZW4genVydWVjaywgZGVuIGRlcgorICAgICBHZWduZXIgYWJ3ZWhyZW4gbXVzcy4KKworICAgICBJbiBkZW4gU2NoYWRlbiBnZWhlbiBzb3dvaGwgZGllIFN0YWVya2UgZGVyIFdhZmZlIGFscyBhdWNoIGRpZSBTdGFlcmtlCisgICAgIGRlcyBUcmFlZ2VycyBkZXIgV2FmZmUgZWluLgorCisgICAgIFd1cmRlIGVpbmUgSGl0RnVuYygpIGFuZ2VnZWJlbiwgc28gd2lyZCBkaWVzZSBtaXQgZGVuIGdsZWljaGVuCisgICAgIFBhcmFtZXRlcm4gd2llIFF1ZXJ5RGFtYWdlKCkgYXVmZ2VydWZlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRGllIFN0YWVya2UgZGVzIFNjaGxhZ2VzIGZ1ZXIgZGllc2UgS2FtcGZydW5kZS4gU2llIGVybWl0dGVsdCBzaWNoIGFscworICAgICBadWZhbGxzemFobCB6d2lzY2hlbiAwIHVuZCBlaW5lbSBXZXJ0LCBkZXIgc2ljaCBhdXMgZGVyIFN0YWVya2UgZGVyCisgICAgIFdhZmZlIHVuZCBkZXIgU3RhZXJrZSBpaHJlcyBUcmFlZ2VycyBlcmdpYnQuIERhcyBFcmdlYm5pcyBkZXMKKyAgICAgSGl0RnVuYygpLUF1ZnJ1ZnMgd2lyZCB6dSBkaWVzZXIgWmFobCBoaW56dWdlemFlaGx0LgorCitCRU1FUktVTkdFTjoKKyAgICAgQXVjaCB3ZW5uIG1hbiBlaW5lIEhpdEZ1bmMoKSB2ZXJ3ZW5kZXQsIGRhcmYgZGVyIFJ1ZWNrZ2FiZXdlcnQKKyAgICAgaW5zZ2VzYW10IG5pY2h0IGdyb2Vzc2VyIGFscyAyMDAgd2VyZGVuLiBJbSBad2VpZmVsc2ZhbGwgc29sbHRlIAorICAgICBtYW4gc2ljaCBtaXQgZGVyIHp1c3RhZW5kaWdlbiBCYWxhbmNlIGJlc3ByZWNoZW4hCisKK1NJRUhFIEFVQ0g6CisgICAgIEhpdEZ1bmMoKSwgQXR0YWNrKCksIC9zdGQvd2VhcG9uLmMsIGdyZW56d2VydGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogRnJlIEZlYiAxNi4wMi4wMSAxMjo1ODowMCB2b24gVGlsbHkKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5RGVmZW5kIGIvZG9jL2xmdW4vUXVlcnlEZWZlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzZDNlMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5RGVmZW5kCkBAIC0wLDAgKzEsNDUgQEAKK1F1ZXJ5RGVmZW5kKCkKKworRlVOS1RJT046CisgICAgIGludCBRdWVyeURlZmVuZChzdHJpbmd8c3RyaW5nKiBkdHlwLCBpbnR8bWFwcGluZyBzcGVsbCwgb2JqZWN0IGVuZW15KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2FybW91ci9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIGR0eXAgIC0gU2NoYWRlbnN0eXBlbiBkZXIgQW5ncmlmZnNhcnQKKyAgICAgc3BlbGwgLSAwICAgICAgIGJlaSBrb252ZW50aW9uZWxsZW0gQW5ncmlmZiwKKyAgICAgICAgICAgICAhPSAwICAgIGJlaSBBbmdyaWZmIG1pdCBlaW5lbSBuaWNodHBoeXNpc2NoZW4gU3BlbGwsCisgICAgICAgICAgICAgbWFwcGluZyBiZWkgZ2VuYXVlcmVuIEFuZ2FiZW4genVyIFdpcmt1bmcKKyAgICAgZW5lbXkgLSBEZXIgYW5ncmVpZmVuZGUgR2VnbmVyCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllcyBpc3QgZGllIHplbnRyYWxlIEZ1bmt0aW9uIGVpbmVyIFJ1ZXN0dW5nLiBTaWUgd2lyZCBpbiBqZWRlcgorICAgICBLYW1wZnJ1bmRlIGF1cyAvc3RkL2xpdmluZy9jb21iYXQ6OkRlZmVuZCgpIGZ1ZXIgamVkZSBSdWVzdHVuZyBhdWZnZXJ1ZmVuLAorICAgICBkaWUgZGVyIFNwaWVsZXIgYW5nZXpvZ2VuIGhhdC4KKworICAgICBEZXIgU2NodXR6d2VydCB2b24gUF9BQyBlbnRmYWx0ZXQgc2VpbmUgV2lya3VuZyBudXIgYmVpIGtvbnZlbnRpb25lbGxlbgorICAgICBBbmdyaWZmZW46CisgICAgICogd2VubiAnc3BlbGwnIDAgaXN0IChiZWkgQXVmcnVmIGF1cyBkZXIgRGVmZW5kIGhlcmF1cyBhdXNnZXNjaGxvc3NlbikKKyAgICAgKiB3ZW5uICdzcGVsbCcgZWluIE1hcHBpbmcgbWl0IGRlbSBGbGFnIFNQX1BIWVNJQ0FMX0FUVEFDSyAhPSAwIFVORAorICAgICAgICAgICAgICAgICAgICBpbiAnZHR5cCcgbWluZGVzdGVucyBlaW4gcGh5c2lzY2hlciBTY2hhZGVuIGVudGhhbHRlbiBpc3QKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRGllIFJ1ZXN0dW5nc3N0YWVya2UgaW4gZGllc2VyIEthbXBmcnVuZGUuIFNpZSBlcm1pdHRlbHQgc2ljaCBhbHMKKyAgICAgWnVmYWxsc3phaGwgendpc2NoZW4gMCB1bmQgUF9BQywgenV6dWVnbGljaCBkZXMgRXJnZWJuaXNzZXMgZGVzCisgICAgIERlZmVuZEZ1bmMoKS1BdWZydWZzLgorCitCRU1FUktVTkdFTjoKKyAgICAgQXVjaCB3ZW5uIG1hbiBlaW5lIERlZmVuZEZ1bmMoKSBiZW51dHp0LCBkYXJmIGRlciBSdWVja2dhYmV3ZXJ0CisgICAgIGluc2dlc2FtdCBuaWNodCBncm9lc3NlciB3ZXJkZW4gYWxzIGRlciBmdWVyIGRlbiBSdWVzdHVuZ3N0eXAKKyAgICAgbWF4aW1hbCB6dWxhZXNzaWdlIQorCitTSUVIRSBBVUNIOgorICAgICBSdWVzdHVuZ2VuOiBQX0FSTU9VUl9UWVBFLCBQX05SX0hBTkRTLCBQX0FSTU9VUlMsIFBfV09STgorICAgICBTY2h1dHo6ICAgICBQX0FDLCBEZWZlbmQoKSwgRGVmZW5kRnVuYworICAgICBTb25zdGlnZXM6ICBQX0VRVUlQX1RJTUUsIFBfTEFTVF9VU0UsIFBfREFNX1RZUEUKKyAgICAgVmVyd2FuZHQ6ICAgUXVlcnlBcm1vdXJCeVR5cGUoTCksIFBfV0VBUE9OLCBGaWx0ZXJDbG90aGluZygpLAorICAgICAgICAgICAgICAgICBGaWx0ZXJBcm1vdXJzKCkKKyAgICAgUmVzaXN0ZW56OiAgUF9SRVNJU1RBTkNFX1NUUkVOR1RIUywgQ2hlY2tSZXNpc3RhbmNlKEwpCisKKzI4Lkp1bCAyMDE0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeURpc2d1aXNlIGIvZG9jL2xmdW4vUXVlcnlEaXNndWlzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBhYTNmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlEaXNndWlzZQpAQCAtMCwwICsxLDI5IEBACitRdWVyeURpc2d1aXNlKCkKKworRlVOS1RJT046CisgICAgIG1peGVkIFF1ZXJ5RGlzZ3Vpc2UoKTsKKworREVGSU5JRVJUIElOOgorICAgICA/Pz8KKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIFBydWVmdCwgb2IgZGVyIFNwaWVsZXIgZHVyY2ggZWluZW4gU2hhZG93IChtZWlzdGVucyBkZXIgVGFybmhlbG0pIAorICAgICAnbWFuaXB1bGllcnQnIGlzdC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMCwgd2VubiBkaWVzIG5pY2h0IGRlciBGYWxsIGlzdCwgYW5zb25zdGVuIGRpZSBCZXNjaHJlaWJ1bmcgZGVzIFNoYWRvdworICAgICB2b20gVHlwIHN0cmluZy4KKworQkVNRVJLVU5HRU46CisgICAgIEluIFdhZmZlbiAvIFJ1ZXN0dW5nZW4gdS5hZS4gZGllIFBfUkVTVFJJQ1RJT05TIGdlc2V0enQgaGFiZW4sCisgICAgIGVydWVicmlndCBzaWNoIGVpbmUgQWJmcmFnZSBhdWYgUXVlcnlEaXNndWlzZSgpLCBkYSBkaWVzIGJlcmVpdHMgaW0KKyAgICAgcmVzdHJpY3Rpb25fY2hlY2tlciBlcmxlZGlndCB3aXJkLgorCitTSUVIRSBBVUNIOgorICAgICBQX1JFU1RSSUNUSU9OUywgL3N0ZC9yZXN0cmljdGlvbl9jaGVja2VyLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogTW9uIE1hciAyNiAxNDo0ODoyMCAyMDAxIHZvbiBUaWxseQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlEb29yS2V5IGIvZG9jL2xmdW4vUXVlcnlEb29yS2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDZhMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeURvb3JLZXkKQEAgLTAsMCArMSw0OCBAQAorRlVOS1RJT046CisgICAgIG1peGVkIFF1ZXJ5RG9vcktleSgpOworCitERUZJTklFUlQgSU46CisgICAgIHZlcnNjaC4gU2NobHVlc3NlbG4KKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgaW4gZWluZW0gU2NobHVlc3NlbCBhdWZnZXJ1ZmVuLCB3ZW5uIG1hbiBtaXQgZGllc2VtCisgICAgIGVpbmUgVHVlciBhdWYtIG9kZXIgYWJzY2hsaWVzc2VuIHdpbGwuIEFuaGFuZCBkZXMgUnVlY2tnYWJld2VydGVzIHdpcmQKKyAgICAgZW50c2NoaWVkZW4sIG9iIGRlciBTY2hsdWVzc2VsIHBhc3N0IG9kZXIgbmljaHQuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzIGRlciBSYXVtcGZhZGUsIGRlcmVuIGdlbWVpbnNhbWUgVHVlcmVuCisgICAgIHNpY2ggbWl0IGRpZXNlbSBTY2hsdWVzc2VsIGF1Zi0gYnp3LiBhYnNjaGxpZXNzZW4gbGFzc2VuLiBEaWUgS2V5cyBzaW5kCisgICAgIGRhYmVpIGRpZSBSYXVtcGZhZGUsIGdldHJlbm50IGR1cmNoIGVpbiAiOiIuIERhYmVpIG11ZXNzZW4gZGllIFBmYWRlCisgICAgIGluIGxleGlrb2dyYXBoaXNjaGVyIChhbHBoYWJldGlzY2hlcikgUmVpaGVuZm9sZ2Ugc29ydGllcnQgc2VpbjoKKworICAgICAiPG5hbWVfcmF1bV8xPjo8bmFtZV9yYXVtXzI+IgorCitCRUlTUElFTEU6CisgICAgIEVpbiBTY2hsdWVzc2VsLCBtaXQgZGVtIHNpY2ggZWluZSBlaW56aWdlIFR1ZXIgb2VmZm5lbiBsYWVzc3QgKGZhbGxzIGVzCisgICAgIGplbWFscyBlaW5lIFR1ZXIgendpc2NoZW4gS2FyYXRlLSB1bmQgQWJlbnRldXJlcmdpbGRlIGdlYmVuIHNvbGx0ZS4uLik6CisKKyAgICAgc3RyaW5nIFF1ZXJ5RG9vcktleSgpCisgICAgIHsKKyAgICAgICByZXR1cm4gIi9naWxkZW4vYWJlbnRldXJlcjovZ2lsZGVuL2thcmF0ZSI7CisgICAgIH0KKworICAgICBFaW4gU2NobHVlc3NlbCwgZGVyIGluIG1laHJlcmVuIFR1ZXJlbiBwYXNzdDoKKworICAgICBzdHJpbmcqIFF1ZXJ5RG9vcktleSgpCisgICAgIHsKKyAgICAgICByZXR1cm4gKHsgIi9naWxkZW4vYWJlbnRldXJlcjovcGxheWVycy93YXJnb24vd29ya3Jvb20iLAorICAgICAgICAgICAgICAgICAiL2dpbGRlbi9hYmVudGV1cmVyOi9naWxkZW4va2FyYXRlIiwKKyAgICAgICAgICAgICAgICAgIi9wbGF5ZXJzL2pvZi93b3Jrcm9vbTovcGxheWVycy93YXJnb24vd29ya3Jvb20iCisgICAgICAgICAgICAgIH0pOworICAgICB9CisKKworU0lFSEUgQVVDSDoKKyAgICBOZXdEb29yKCksIFF1ZXJ5RG9vclN0YXR1cygpLCBTZXREb29yU3RhdHVzKCksIFBfRE9PUl9JTkZPUywKKyAgICAvc3RkL3Jvb20vZG9vcnMuYywgL29iai9kb29ybWFzdGVyLmMsIEdldFBoaW9sZW5JbmZvcygpLCBRdWVyeUFsbERvb3JzKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xldHp0ZSBBZW5kZXJ1bmc6IERvbiwgMDguMDUuMjAxNCwgR2FieWxvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlEb29yU3RhdHVzIGIvZG9jL2xmdW4vUXVlcnlEb29yU3RhdHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWU2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeURvb3JTdGF0dXMKQEAgLTAsMCArMSwyOCBAQAorRlVOS1RJT046CisgICAgIGludCBRdWVyeURvb3JTdGF0dXMoc3RyaW5nIGRlc3QpOworCitERUZJTklFUlQgSU46CisgICAgIC9vYmovZG9vcm1hc3Rlci5jCisKK0FSR1VNRU5URToKKyAgICAgPGRlc3Q+ID0gWmllbHJhdW0gZGVyIFR1ZXIuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCBkZXIgWnVzdGFuZCBkZXIgVHVlciwgZGllIHZvbiBkaWVzZW0gUmF1bSBuYWNoIDxkZXN0PiBmdWVocnQsCisgICAgIGVybWl0dGVsdC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMCBiZWkgbmljaHQgdm9yaGFuZGVuZSBUdWVyLCBhbnNvbnN0ZW4gZWluZXIgZGVyIGZvbGdlbmRlbiBadXN0YWVuZGUgKGF1cworICAgICAgIDxkb29ycm9vbS5oPik6CisKKyAgICAgICBEX1NUQVRVU19MT0NLRUQgLSBUdWVyIGFiZ2VzY2hsb3NzZW4KKyAgICAgICBEX1NUQVRVU19DTE9TRUQgLSBUdWVyIGdlc2NobG9zc2VuCisgICAgICAgRF9TVEFUVVNfT1BFTiAgIC0gVHVlciBnZW9lZmZuZXQKKworCitTSUVIRSBBVUNIOgorICAgIE5ld0Rvb3IoKSwgUXVlcnlEb29yS2V5KCksIFNldERvb3JTdGF0dXMoKSwgUF9ET09SX0lORk9TLAorICAgIC9zdGQvcm9vbS9kb29ycy5jLCAvb2JqL2Rvb3JtYXN0ZXIuYywgR2V0UGhpb2xlbkluZm9zKCksIFF1ZXJ5QWxsRG9vcnMoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGV0enRlIEFlbmRlcnVuZzogRG9uLCAwOC4wNS4yMDE0LCBHYWJ5bG9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeUR1IGIvZG9jL2xmdW4vUXVlcnlEdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU2MmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlEdQpAQCAtMCwwICsxLDM5IEBACitRdWVyeUR1KCkKKworRlVOS1RJT046CisgICAgIHZhcmFyZ3Mgc3RyaW5nIFF1ZXJ5RHUoaW50IGNhc3VzLCBpbnQgZ2VuZGVyLCBpbnQgYW56YWhsKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RoaW5nL2xhbmd1YWdlLmMKKworQVJHVU1FTlRFOgorICAgICBjYXN1cworICAgICAgICAgIERlciBGYWxsIGZ1ZXIgZGllIEFucmVkZS4KKworICAgICBnZW5kZXIKKyAgICAgICAgICBEYXMgR2VzY2hsZWNodCBkZXMgYW56dXJlZGVuZGVuIE9iamVrdGVzLgorCisgICAgIGFuemFobAorICAgICAgICAgIElzdCBudXIgZWluIE9iamVrdCBhbnp1c3ByZWNoZW4gb2RlciBtZWhyZXJlPworCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgZGllIGRlbSBBbmxhc3MgZW50c3ByZWNoZW5kZSBBbnJlZGUgZnVlciBlaW4KKyAgICAgT2JqZWt0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBFaW4gU3RyaW5nIG1pdCBkZXIgQW5yZWRlLgorCitCRUlTUElFTEU6CisKKyAgICAgcHJpbnRmKCIlcyBzZXR6dCAlcyBhdWYgZGVuIEJvZGVuLlxuIiwKKyAgICAgICAgICAgY2FwaXRhbGl6ZShRdWVyeUR1KFdFUiwgVFAtPlF1ZXJ5UHJvcChQX0dFTkRFUiksIFNJTkdVTEFSKSwKKyAgICAgICAgICAgUXVlcnlEdShXRU4sIFRQLT5RdWVyeVByb3AoUF9HRU5ERVIpLCBTSU5HVUxBUikpOworCisgICAgIChJbiBkZW4gbWVpc3RlbiBGYWVsbGVuIGthbm4gbWFuIGhpZXIgYXVjaCBkaXJla3QgIkR1IiB1bmQgImRpY2giCisgICAgIGVpbnNldHplbi4pCisKK1NJRUhFIEFVQ0g6CisgICAgIC9zdGQvdGhpbmcvbGFuZ3VhZ2UuYworICAgICBRdWVyeVBvc3NQcm9ub3VuKCksIFF1ZXJ5T3duKCksIFF1ZXJ5UHJvbm91bigpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDggMTA6MjI6MjcgMTk5NiBieSBXYXJnb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5RW5lbWllcyBiL2RvYy9sZnVuL1F1ZXJ5RW5lbWllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM5M2I0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlFbmVtaWVzCkBAIC0wLDAgKzEsMzMgQEAKK0ZVTktUSU9OOgorCW1peGVkIFF1ZXJ5RW5lbWllcygpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9saXZpbmcvY29tYmF0LmMKKworQVJHVU1FTlRFOgorCWtlaW5lCisKK1JVZUNLR0FCRVdFUlQ6CisJQXJyYXkgbWl0IEFycmF5IGF1cyBiZWthbm50ZW4gR2VnbmVybiB1bmQgQXJyYXkgYXVzIFplaXRlbgorCitCRVNDSFJFSUJVTkc6CisJRGllc2UgRnVua3Rpb24gZW50aGFlbHQgZWluIEFycmF5LCBkYXMgendlaSBFbGVtZW50ZSBlbnRoYWVsdCwgZGllCisJd2llZGVydW0gQXJyYXlzIHNpbmQ6CisJICAxLiBBcnJheTogRGllIGJla2FubnRlbiBHZWduZXIgYWxzIE9iamVrdHBvaW50ZXIuCisJICAyLiBBcnJheTogRGllIHp1Z2VvcmRuZXRlbiBaZWl0ZW4sIHdpZSBsYW5nZSBlaW4gR2VnbmVyIG5vY2ggYWxzCisJICAgICAgICAgICAgc29sY2hlciBiZWthbm50IHNlaW4gc29sbC4KKwlJbSBOb3JtYWxmYWxsIHdpcmQgZWluIEdlZ25lciBkYW5uIGJla2FubnQsIHdlbm4gbWFuIGdlemllbHQKKwlqZW1hbmRlbiBhdGFja2llcnQsIG9kZXIgd2VubiBtYW4gZWluZW4gQW5ncmlmZiBhYndlaHJlbiBtdXNzLgorCURhbm4gd2lyZCBkZXIgR2VnbmVyIGludGVybiBhYmdlc3BlaWNoZXJ0LCB1bmQgZXMgd2lyZCBlaW5lIFplaXQKKwlnZXNldHp0LCBkaWUgZGFubiBydW50ZXJnZXphZWhsdCB3aXJkLiBJc3QgZGllIFplaXQgYXVmIDAsIHNvIHdpcmQKKwlkZXIgR2VnbmVyIHdpZWRlciBhdXRvbWF0aXNjaCBhdXNnZXRyYWdlbi4KKwkoU3RhbmRhcmRtYWVzc2lnIGJldHJhZWd0IGRpZXNlIFplaXQgNjAwIFNla3VuZGVuICgzMDAgSGVhcnRiZWF0cykuKQorCU1hbiBrYW5uIHNpY2ggZGllIEdlZ25lciBhdWNoIGluIEZvcm0gZWluZXMgTWFwcGluZ3MgenVydWVja2dlYmVuCisJbGFzc2VuLiBEaWVzIGVycmVpY2h0IG1hbiBtaXR0ZWxzIGRlciBGdW5rdGlvbiBHZXRFbmVtaWVzKCkuCisKK1NJRUhFIEFVQ0g6CisJS2lsbCgpLCBBdHRhY2soKSwgRGVmZW5kKCksIGRvX215X2hlYXJ0X2JlYXQoKSwgUHJlc2VudEVuZW1pZXMoKSwKKwlHZXRFbmVtaWVzKCksIFNlbGVjdEVuZW15KCksIFF1ZXJ5UHJlZmVyZWRFbmVteSgpLCBQX1BSRUZFUkVEX0VORU1ZCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI5LjEyLjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5RmxhdyBiL2RvYy9sZnVuL1F1ZXJ5RmxhdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTM3ZDgxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlGbGF3CkBAIC0wLDAgKzEsNDEgQEAKK1F1ZXJ5RmxhdygpCisKK0ZVTktUSU9OOgorICAgICBtaXhlZCAqUXVlcnlGbGF3KCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9hcm1vdXIvY29tYmF0LmMsCisgICAgIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICBRdWVyeUZsYXcoKSBsaWVmZXJ0IEluZm9ybWF0aW9uZW4gdWViZXIgZGVuIEdyYWQgZGVyIEFibnV0enVuZyBkZXIKKyAgICAgV2FmZmUgYnp3LiBSdWVzdHVuZy4gRGVyIFp1c3RhbmQgd2lyZCBhbHMgQXJyYXkgbWl0IGRlciBaYWhsIGRlcgorICAgICBUYWtlRmxhdygpLUF1ZnJ1ZmUgdW5kIGRlbSBEYXR1bSBkZXMgZXJzdGVuIFRha2VGbGF3KCktQXVmcnVmcworICAgICB6dXJ1ZWNrZ2VnZWJlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRWluIEFycmF5IG1pdCBkcmVpIEVsZW1lbnRlbjoKKyAgICAgICAxLiBkZXIgYWt0dWVsbGUgWmFlaGxlcnN0YW5kCisgICAgICAgMi4gWmVpdCBkZXIgZXJzdGVuIEJlbnV0enVuZworICAgICAgIDMuIGRpZSBaZWl0IGRlciBlcnN0ZW4gQmVudXR6dW5nIGFscyBTdHJpbmcKKworQkVJU1BJRUxFOgorICAgICBEZW4gYWt0dWVsbGVuIEFibnV0enVuZ3NncmFkIGVpbmVyIFJ1ZXN0dW5nIGthbm4gbWFuIHNpY2ggd2llIGZvbGd0CisgICAgIGFuemVpZ2VuIGxhc3NlbjoKKworICAgICBtaXhlZCAqZmxhdzsKKworICAgICBmbGF3ID0gcnVlc3R1bmctPlF1ZXJ5RmxhdygpOworCisgICAgIHByaW50ZigiWmFlaGxlcnN0YW5kOiAlZCwgZXJzdGVyIFNjaGxhZzogJXNcbiIsIGZsYXdbMF0sIGZsYXdbMl0pOworICAgICAvLyBvZGVyIGFuYWxvZzoKKyAgICAgcHJpbnRmKCJaYWVobGVyc3RhbmQ6ICVkLCBlcnN0ZXIgU2NobGFnOiAlc1xuIiwgZmxhd1swXSwgZHRpbWUoZmxhd1sxXSkpOworCitTSUVIRSBBVUNIOgorICAgICBUYWtlRmxhdygpLCAvc3RkL2FybW91ci9jb21iYXQuYywgL3N0ZC93ZWFwb24vY29tYmF0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjIyOjMyIDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeUdlbmRlclN0cmluZyBiL2RvYy9sZnVuL1F1ZXJ5R2VuZGVyU3RyaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2N2ExNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeUdlbmRlclN0cmluZwpAQCAtMCwwICsxLDIzIEBACitRdWVyeUdlbmRlclN0cmluZygpCisKK0ZVTktUSU9OOgorICAgICBzdHJpbmcgUXVlcnlHZW5kZXJTdHJpbmcoKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RoaW5nL2xhbmd1YWdlLmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdpcmQgZWluIFN0cmluZyBtaXQgZGVtIEdlc2NobGVjaHQgZGVzIE9iamVrdGVzIHp1cnVlY2tnZWdlYmVuCisgICAgICgibWFlbm5saWNoIiwgIndlaWJsaWNoIiwgInNhZWNobGljaCIpLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEZXIgU3RyaW5nIG1pdCBkZW0gR2VzY2hsZWNodC4KKworU0lFSEUgQVVDSDoKKyAgICAgL3N0ZC90aGluZy9sYW5ndWFnZS5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoyMzowMCAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlHcmFtc1BlclVuaXRzIGIvZG9jL2xmdW4vUXVlcnlHcmFtc1BlclVuaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDllNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeUdyYW1zUGVyVW5pdHMKQEAgLTAsMCArMSwzMSBAQAorUXVlcnlHcmFtc1BlclVuaXRzKCkKKworRlVOS1RJT046CisgICAgIGludCAqUXVlcnlHcmFtc1BlclVuaXRzKCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC91bml0LmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIExpZWZlcnQgZGFzIEdld2ljaHRzdmVyaGFlbHRuaXMgZnVlciBkaWUgRWluaGVpdGVuIHp1cnVlY2suCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEVpbiBBcnJheSB2b24gendlaSBaYWhsZW4uIERpZSBlcnN0ZSBaYWhsIGlzdCBkYXMgR2V3aWNodCBkZXIgaW4gZGVyCisgICAgIHp3ZWl0ZW4gWmFobCBhbmdlZ2ViZW5lbiBFaW5oZWl0ZW4uCisKK0JFSVNQSUVMRToKKyAgICAgU3RlaHQgaW0gVW5pdC1PYmpla3QgZm9sZ2VuZGUgR2V3aWNodHN6dXdlaXN1bmc6CisKKyAgICAgICBTZXRHcmFtc1BlclVuaXRzKDQsMSk7CisKKyAgICAgc28gbGllZmVydCBRdWVyeUdyYW1zUGVyVW5pdHMoKSBhbHMgRXJnZWJuaXMgKHs0LCAxfSkuCisKK1NJRUhFIEFVQ0g6CisgICAgIFNldENvaW5zUGVyVW5pdHMoKSwgUXVlcnlDb2luc1BlclVuaXRzKCkgU2V0R3JhbXNQZXJVbml0cygpLAorICAgICAvc3RkL3VuaXQuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDggMTA6MjI6MzkgMTk5NiBieSBXYXJnb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5R3JvdXBlZEtleXMgYi9kb2MvbGZ1bi9RdWVyeUdyb3VwZWRLZXlzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2UzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeUdyb3VwZWRLZXlzCkBAIC0wLDAgKzEsMjYgQEAKK1F1ZXJ5R3JvdXBlZEtleXMoKQorCitGVU5LVElPTjoKKyAgICBtaXhlZCAqUXVlcnlHcm91cGVkS2V5cygpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc2VjdXJlL3F1ZXN0bWFzdGVyLmMKKworQVJHVU1FTlRFOgorICAgIGtlaW5lCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgQXJyYXkgbWl0IEFycmF5cyBtaXQgZGVuIFNjaGx1ZXNzZWx3b2VydGVybiBkZXIgUXVlc3RzCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiBsaWVmZXJ0IGVpbiBBcnJheSBtaXQgbWVocmVyZW4gQXJyYXlzIHp1cnVlY2ssIGRpZQorICAgIGRpZSBTY2hsdWVzc2Vsd29lcnRlciBkZXIgUXVlc3RzIGVudGhhbHRlbi4gRGFiZWkgZW50aGFlbHQgZGFzIAorICAgIGVyc3RlIEFycmF5IGRpZSBTY2hsdWVzc2Vsd29lcnRlciBkZXIgUXVlc3RzIGRlciBlcnN0ZW4gR3J1cHBlIGV0Yy4KKyAgICBEYXMgbGV0enRlIEFycmF5IGVudGhhZWx0IGRpZSBHcnVwcGUgZGVyIG9wdGlvbmFsZW4gUXVlc3RzLgorCitTSUVIRSBBVUNIOgorICAgIEdpdmVRdWVzdCwgUXVlcnlRdWVzdCwgL3NlY3VyZS9xdWVzdG1hc3Rlci5oCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1p1bGV0enQgZ2VhZW5kZXJ0OiBTb24sIDE5LiBOb3YgMjAwMCwgMTM6MjI6MTUgdm9uIFpvb2suCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5R3Vlc3QgYi9kb2MvbGZ1bi9RdWVyeUd1ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTk3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeUd1ZXN0CkBAIC0wLDAgKzEsMzMgQEAKK1F1ZXJ5R3Vlc3QoKQorRlVOS1RJT046CisgICAgIGludCBRdWVyeUd1ZXN0KCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9wbGF5ZXIvYmFzZQorCitCRVNDSFJFSUJVTkc6CisgICAgIEF1ZiBkZXIgdWlkIGJhc2llcmVuZGUgSGlsZnNmdW5rdGlvbiwgdW0gR2Flc3RlIHp1IGlkZW50aWZpemllcmVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICAxLCB3ZW5uIFNwaWVsZXJvYmpla3QgZWluIEdhc3QgaXN0OyAwIHNvbnN0CisKK0JFSVNQSUVMRToKKyAgICAgaWYodGhpc19pbnRlcmFjdGl2ZSgpLT5RdWVyeUd1ZXN0KCkpCisgICAgIHsKKyAgICAgICAodGhpc19pbnRlcmFjdGl2ZSgpLT5SZWNlaXZlTXNnKAorICAgICAgICAgICJXaXIgYmVkaWVuZW4gaGllciBudXIgb3JkZW50bGljaGUgQ2hhcmFrdGVyZS4iLAorICAgICAgICAgIE1UX0xJU1RFTiwgTUFfU0FZLAorICAgICAgICAgICJEZXIgV2lydCBzYWd0OiAiKSAhPSBNU0dfU0VOU0VfQkxPQ0spIHx8CisgICAgICAgKHRoaXNfaW50ZXJhY3RpdmUoKS0+UmVjZWl2ZU1zZygKKyAgICAgICAgICAiRGVyIFdpcnQgZ2VzdGlrdWxpZXJ0IGRpY2ggaGluYXVzLiIsCisgICAgICAgICAgTVRfTE9PSywgTUFfTE9PSykgIT0gTVNHX1NFTlNFX0JMT0NLKSB8fAorICAgICAgICh0aGlzX2ludGVyYWN0aXZlKCktPlJlY2VpdmVNc2coCisgICAgICAgICAgIklyZ2VuZHdlciBzdHVwc3QgZGljaCBhbi4gRHUgc29sbHN0IHdvaGwgZ2VoZW4uIiwKKyAgICAgICAgICBNVF9GRUVMLCBNQV9GRUVMKSk7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgZ2V0dWlkKCkKKworMTQuIE1haSAyMDE1IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeUhlYWxJbmZvIGIvZG9jL2xmdW4vUXVlcnlIZWFsSW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2I3NTQyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlIZWFsSW5mbwpAQCAtMCwwICsxLDI2IEBACitRdWVyeUhlYWxJbmZvKCkKKworRlVOS1RJT046CisgICAgIHN0cmluZyBRdWVyeUhlYWxJbmZvKCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9jb3Jwc2UuYywKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIFF1ZXJ5SGVhbEluZm8oKSBsaWVmZXJ0IGVpbmVuIFN0YW5kYXJkdGV4dCB6dXJ1ZWNrLCBkZXIgZ3JvYiBBdXNrdW5mdCAKKyAgICAgZGFydWViZXIgZ2lidCwgd2VsY2hlIEF1c3dpcmt1bmdlbiBkYXMgRXNzZW4gZWluZXIgTGVpY2hlIGhhZXR0ZS4gCisgICAgIERpZXNlIEluZm8ga2FubiB6LkIuIHZvbiBHaWxkZW4gdmVyd2VuZGV0IHdlcmRlbiwgZGllIFBfSEVBTCAocy5kb3J0KQorICAgICBlaW5lciBMZWljaGUgbmljaHQgc2VsYnN0IGF1c3dlcnRlbiB3b2xsZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEVpbiBuaWNodCB1bWJyb2NoZW5lciBTdHJpbmcuIEZ1ZXIgWmVpbGVudW1icnVlY2hlIGthbm4gZGVyamVuaWdlLAorICAgICBkZXIgZGVuIFRleHQgYXVzbGllc3QsIHNlbGJzdCBzb3JnZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIC9zdGQvY29ycHNlLmMsIFBfSEVBTAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAzMS4wMy4yMDA4LCBBcmF0aG9ybgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlNYXRlcmlhbCBiL2RvYy9sZnVuL1F1ZXJ5TWF0ZXJpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlM2EzMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5TWF0ZXJpYWwKQEAgLTAsMCArMSwzNCBAQAorUXVlcnlNYXRlcmlhbChMKQorRlVOS1RJT046CisgICAgIGludCBRdWVyeU1hdGVyaWFsKHN0cmluZyBtYXQpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nIG1hdCAtCU1hdGVyaWFsLCBhdWYgZGFzIGdldGVzdGV0IHdlcmRlbiBzb2xsCisKK0JFU0NIUkVJQlVORzoKKyAgICAgVGVzdGV0LCBvYiBlaW4gR2VnZW5zdGFuZCBhdXMgZGVtIGFuZ2VnZWJlbmVuIE1hdGVyaWFsIGJlc3RlaHQKKyAgICAgdW5kIGdpYnQgZGVzc2VuIEFudGVpbCB6dXJ1ZWNrLgorICAgICBEaWUgUnVlY2tnYWJlIGlzdCBpbSBXZXJ0ZWJlcmVpY2ggLTEwMCAoQW50aWdydXBwZW4pIGJpcyArMTAwICglKS4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgQW50ZWlsIGluIFByb3plbnQuCisKK0JFSVNQSUVMRToKKyAgICAgaWYob2ItPlF1ZXJ5TWF0ZXJpYWwoTUFUX0lWT1JZKTw9MCkKKyAgICAgICB3cml0ZSgiRGFyYXVzIGthbm5zdCBEdSBrZWluZSBCaWxsaWFyZGt1Z2VsbiBzY2huaXR6ZW4hXG4iKTsKKworU0lFSEUgQVVDSDoKKyAgICAgS29uemVwdGU6CSAgbWF0ZXJpYWwsIG1hdGVyaWFsZXJrZW5udW5nCisgICAgIEdydW5kbGVnZW5kOiBQX01BVEVSSUFMLCAvc3lzL3RoaW5nL21hdGVyaWFsLmgKKyAgICAgTWV0aG9kZW46ICAgIFF1ZXJ5TWF0ZXJpYWxHcm91cCgpLCBNYXRlcmlhbExpc3QoKSwKKyAgICAgTGlzdGVuOgkgIEFsbE1hdGVyaWFscygpLCBBbGxHcm91cHMoKSwgRHVtcCgpCisJCSAgbWF0ZXJpYWxsaXN0ZSwgbWF0ZXJpYWxncnVwcGVuCisgICAgIE1hc3RlcjoJICBBZGRNYXRlcmlhbCgpLCBDb252TWF0ZXJpYWxMaXN0KCksIE1hdGVyaWFsR3JvdXAoKSwKKwkJICBHcm91cE5hbWUoKSwgTWF0ZXJpYWxOYW1lKCksCisJCSAgR2V0R3JvdXBNZW1iZXJzKCksIEdldE1hdE1lbWJlcnNoaXAoKQorICAgICBTb25zdGlnZXM6CSAgUF9NQVRFUklBTF9LTk9XTEVER0UKKworNy4gTWFpIDIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeU1hdGVyaWFsR3JvdXAgYi9kb2MvbGZ1bi9RdWVyeU1hdGVyaWFsR3JvdXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiNjg2MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5TWF0ZXJpYWxHcm91cApAQCAtMCwwICsxLDUwIEBACitRdWVyeU1hdGVyaWFsR3JvdXAoTCkKK0ZVTktUSU9OOgorICAgICBpbnQgUXVlcnlNYXRlcmlhbEdyb3VwKHN0cmluZyBncnApCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nIGdycAkJLSBNYXRlcmlhbGdydXBwZSwgYXVmIGRpZSBnZXRlc3RldCB3ZXJkZW4gc29sbAorCitCRVNDSFJFSUJVTkc6CisgICAgIExpZWZlcnQgZWluZSBBbmdhYmUsIHp1IHdlbGNoZW0gQW50ZWlsIGRhcyBPYmpla3QgYXVzIE1hdGVyaWFsaWVuCisgICAgIGRpZXNlciBHcnVwcGUgYmVzdGVodC4KKyAgICAgRGllIFJ1ZWNrZ2FiZSBpc3QgaW0gV2VydGViZXJlaWNoIC0xMDAgKEFudGlncnVwcGVuKSBiaXMgKzEwMCAoJSkuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgIEFudGVpbCBpbiBQcm96ZW50LgorCitCRU1FUktVTkdFTjoKKyAgICAgUnVmdCBNYXRlcmlhbEdyb3VwKCkgYW4gZGVyIE1BVEVSSUFMREIuCisKK0JFSVNQSUVMRToKKyAgICAgLy8ga2FubiBtYW4gZGFtaXQgd2FzIGFuZmFuZ2VuPworICAgICBpZihvYi0+UXVlcnlNYXRlcmlhbEdyb3VwKE1BVEdST1VQX01FVEFMKTw1MCkKKyAgICAgICB3cml0ZSgiRGVyIFNjaG1pZWQgc2FndDogRGFyYXVzIGthbm4gaWNoIGtlaW4gU2Nod2VydCBmZXJ0aWdlbi5cbiIpOworCisgICAgIC8vIHZlcmJyZW5udCBkYXMgRGluZz8KKyAgICAgaWYob2ItPlF1ZXJ5TWF0ZXJpYWxHcm91cChNQVRHUk9VUF9JTkZMQU1NQUJMRSk+NTApIHsKKyAgICAgICB3cml0ZShvYi0+TmFtZShXRVIpKyIgZ2VodCBpbiBGbGFtbWVuIGF1Zi5cbiIpOworICAgICAgIG9iLT5yZW1vdmUoKTsKKyAgICAgfQorCisgICAgIC8vIHdpZSBtYWduZXRpc2NoIGlzdCBlcyBkZW5uPworICAgICBpZihvYi0+UXVlcnlNYXRlcmlhbEdyb3VwKE1BVEdST1VQX01BR05FVElDKT41MCkKKyAgICAgIHdyaXRlKGJyZWFrX3N0cmluZygKKyAgICAgICBvYi0+TmFtZShXRVIpKyIgZmx1dHNjaHQgRGlyIGF1cyBkZXIgSGFuZCB1bmQgYmxlaWJ0IGFtIE1hZ25ldGVuICIKKwkJICAgICAia2xlYmVuISIsNzgpKTsKKworU0lFSEUgQVVDSDoKKyAgICAgS29uemVwdGU6CSAgbWF0ZXJpYWwsIG1hdGVyaWFsZXJrZW5udW5nCisgICAgIEdydW5kbGVnZW5kOiBQX01BVEVSSUFMLCAvc3lzL3RoaW5nL21hdGVyaWFsLmgKKyAgICAgTWV0aG9kZW46ICAgIFF1ZXJ5TWF0ZXJpYWwoKSwgTWF0ZXJpYWxMaXN0KCksCisgICAgIExpc3RlbjoJICBBbGxNYXRlcmlhbHMoKSwgQWxsR3JvdXBzKCksIER1bXAoKQorCQkgIG1hdGVyaWFsbGlzdGUsIG1hdGVyaWFsZ3J1cHBlbgorICAgICBNYXN0ZXI6CSAgQWRkTWF0ZXJpYWwoKSwgQ29udk1hdGVyaWFsTGlzdCgpLCBNYXRlcmlhbEdyb3VwKCksCisJCSAgR3JvdXBOYW1lKCksIE1hdGVyaWFsTmFtZSgpLAorCQkgIEdldEdyb3VwTWVtYmVycygpLCBHZXRNYXRNZW1iZXJzaGlwKCkKKyAgICAgU29uc3RpZ2VzOgkgIFBfTUFURVJJQUxfS05PV0xFREdFCisKKzcuIE1haSAyMDA0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlNYXhRUCBiL2RvYy9sZnVuL1F1ZXJ5TWF4UVAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhMGY1YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5TWF4UVAKQEAgLTAsMCArMSwyNyBAQAorUXVlcnlNYXhRUCgpCisKK0ZVTktUSU9OOgorICAgIGludCBRdWVyeU1heFFQKCkKKworREVGSU5JRVJUIElOOgorICAgIC9zZWN1cmUvcXVlc3RtYXN0ZXIuYworCitBUkdVTUVOVEU6CisgICAga2VpbmUKKworUlVFQ0tHQUJFV0VSVDoKKyAgICBBYmVudGV1ZXJwdW5rdGUgZGVyIFBmbGljaHRxdWVzdHMKKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgZGllIEFiZW50ZXVlcnB1bmt0ZSBkZXIgYWxzIFBmbGljaHRxdWVzdAorICAgIGVpbmdldHJhZ2VuZW4gQWJlbnRldWVyIHp1cnVlY2suIFBmbGljaHRxdWVzdCBiZWRldXRldCBlbnR3ZWRlciwKKyAgICBkYXNzIGRpZSBRdWVzdCB6d2luZ2VuZCBnZWxvZXN0IHdlcmRlbiBtdXNzIG9kZXIgZGFzcyBzaWUgenUKKyAgICBkZXIgODAlLVJlZ2VsIGdlaG9lcnQuCisKK1NJRUhFIEFVQ0g6CisgICAgR2l2ZVF1ZXN0LCBRdWVyeVF1ZXN0LCAvc2VjdXJlL3F1ZXN0bWFzdGVyLmgsIFF1ZXJ5R3JvdXBlZEtleXMsCisgICAgUXVlcnlPcHRRUCwgUXVlcnlUb3RhbFFQCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1p1bGV0enQgZ2VhZW5kZXJ0OiBTYW0sIDI1LiBOb3YgMjAwMCwgMTQ6MDQ6Mjggdm9uIFpvb2suCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5TW9uZXkgYi9kb2MvbGZ1bi9RdWVyeU1vbmV5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OWI1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeU1vbmV5CkBAIC0wLDAgKzEsMjggQEAKK1F1ZXJ5TW9uZXkoKQorRlVOS1RJT046CisgICAgIGludCBRdWVyeU1vbmV5KCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9tb25leWhhbmRsZXIuYworCitCRVNDSFJFSUJVTkc6CisgICAgIFRlc3RldCwgb2IgZWluIFNwaWVsZXIsIE9iamVrdCwgUmF1bSBvZGVyIE5wYyB1ZWJlciBlaW5lIGRlZmluaWVydGUgCisgICAgIEdlbGRtZW5nZSB2ZXJmdWVndCwgb2RlciBuaWNodC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgR2VsZG1lbmdlIGltIEJlc2l0eiBkZXMgYWJnZWZyYWd0ZW4gU3BpZWxlcnMKKworQkVJU1BJRUxFOgorICAgICBpbnQgaTsKKyAgICAgaT01MCtyYW5kb20oMTApOworICAgICBpZighdGhpc19wbGF5ZXIoKS0+UXVlcnlNb25leSgpKQorICAgICAgIHdyaXRlKCJEdSBiZXNpdHp0IGtlaW5lIE11ZW56ZW4hXG4iKTsKKyAgICAgaWYodGhpc19wbGF5ZXIoKS0+UXVlcnlNb25leSgpIDwgaSkKKyAgICAgICB3cml0ZSgiRHUgYmVzaXR6dCBuaWNodCBkaWUgZXJmb3JkZXJsaWNoZW4gIitpKyIgTXVlbnplbi5cbiIpOworCitTSUVIRSBBVUNIOgorICAgICBHZWxkaGFuZGxpbmc6CUFkZE1vbmV5KEwpCisgICAgIFplbnRyYWxiYW5rOglQYXlJbihMKSwgV2l0aERyYXcoTCksIF9xdWVyeV9jdXJyZW50X21vbmV5KEwpCisgICAgIFNvbnN0aWdlczoJCS9pdGVtcy9tb25leS5jCisKK0xhc3QgbW9kaWZpZWQ6IERpZSwgIDEuIEF1ZyAyMDAwLCAxNjozOTowNiBieSBUaWxseQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlOYW1lIGIvZG9jL2xmdW4vUXVlcnlOYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNmNkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeU5hbWUKQEAgLTAsMCArMSwyNCBAQAorUXVlcnlOYW1lKCkKKworRlVOS1RJT046CisgICAgIG1peGVkIFF1ZXJ5TmFtZSgpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRElFU0UgRlVOS1RJT04gU09MTFRFIE5JQ0hUIE1FSFIgQkVOVVRaVCBXRVJERU4hCisgICAgIEVzIHdpcmQgZGVyIEluaGFsdCBkZXIgUHJvcGVydHkgUF9OQU1FIHp1dWVja2dlZ2ViZW47IGRpZXMgbGFlc3N0IHNpY2gKKyAgICAgamVkb2NoIGdlbmF1IHNvIGd1dCBtaXQgUXVlcnlQcm9wKFBfTkFNRSkgYmV3ZXJrc3RlbGxpZ2VuIQorCitSVWVDS0dBQkVXRVJUOgorICAgICBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncyBtaXQgZGVtIE5hbWVuIGRlcyBPYmpla3Rlcy4KKworU0lFSEUgQVVDSDoKKyAgICAgUXVlcnlQcm9wKCksIE5hbWUoKSwgbmFtZSgpLCAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogU2F0IEF1ZyAgMyAxMToyMTowNSAyMDAyIGJ5IFZhbmlvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlPcGVuTWluaVF1ZXN0c0ZvclBsYXllciBiL2RvYy9sZnVuL1F1ZXJ5T3Blbk1pbmlRdWVzdHNGb3JQbGF5ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyNDZhZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5T3Blbk1pbmlRdWVzdHNGb3JQbGF5ZXIKQEAgLTAsMCArMSw1NCBAQAorRlVOS1RJT046CisgICAgbWFwcGluZyBRdWVyeU9wZW5NaW5pUXVlc3RzRm9yUGxheWVyKG9iamVjdCBwbGF5ZXIpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc2VjdXJlL3F1ZXN0bWFzdGVyCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiBnaWJ0IGRpZSBMaXN0ZSBkZXIgb2ZmZW5lbiBNaW5pcXVlc3RzIGRlcyBTcGllbGVycyBhbHMKKyAgICBNYXBwaW5nIHp1cnVlY2suCisKK0FSR1VNRU5URToKKyAgICBwbGF5ZXIgLSBkYXMgaW50ZXJlc3NpZXJlbmRlIFNwaWVsZXJvYmpla3QKKworUlVFQ0tHQUJFV0VSVEU6CisgICAgTWFwcGluZyBtaXQgZGVyIExpc3RlIGRlciBNaW5pcXVlc3RzLCBmdWVyIGRpZSBkYXMgYWJmcmFnZW5kZSBPYmpla3QKKyAgICB6dXN0YWVuZGlnIGlzdCwgb2RlciBsZWVyZXMgTWFwcGluZywgd2VubiBkZXIgU3BpZWxlciBrZWluZSBNUXMgbWVocgorICAgIG9mZmVuIGhhdC4KKworICAgIERpZSBMaXN0ZSBlbnRoYWVsdCBkaWUgTWluaXF1ZXN0bnVtbWVyIGFscyBLZXkuIERpZXNlbSBzaW5kIHp3ZWkgV2VydGUKKyAgICB6dWdlb3JkbmV0OiB6dW0gZWluZW4gZWluIE1pbmlxdWVzdC1BdWZnYWJlbnRleHQsIHVuZCB6dW0gYW5kZXJlbiAtCisgICAgZmFsbHMgZGVyIFNwaWVsZXIgZWluZSBkZXIgVm9yYmVkaW5ndW5nZW4gZnVlciBkaWUgTWluaXF1ZXN0IG5pY2h0CisgICAgZXJmdWVsbHQgLSBlaW4gSGlud2Vpc3RleHQsIGRlciBBdXNrdW5mdCBnaWJ0LCB3ZWxjaGUgQmVkaW5ndW5nIG5vY2gKKyAgICB6dSBlcmZ1ZWxsZW4gaXN0ICgiU2VoZXJzdGF0dXMgZmVobHQiKS4gRGllc2UgSGlud2Vpc3RleHRlIGVudHNwcmVjaGVuCisgICAgZGVuZW4gYXVzIGNoZWNrX3Jlc3RyaWN0aW9ucygpIGluIC9zdGQvcmVzdHJpY3Rpb25fY2hlY2tlci5jLiBEZXIgCisgICAgamV3ZWlscyBhbmRlcmUgVGV4dCB3aXJkIGF1ZiAwIGdlc2V0enQuCisKKyAgICBEaWUgU3RydWt0dXIgZGVzIE1hcHBpbmdzIGlzdCBkYWhlciBmb2xnZW5kZToKKyAgICAgIChbIE1RLU51bW1lciA6IDxBdWZnYWJlbnN0ZWxsdW5nPiA7IDxIaW5kZXJ1bmdzZ3J1bmQ+IF0pCisgICAgCisgICAgQmVpc3BpZWw6IGVpbiBTcGllbGVyIGhhdCBkaWUgTWluaXF1ZXN0cyAxOCB1bmQgNDkgbm9jaCBuaWNodCBnZWxvZXN0LAorICAgIGVyZnVlbGx0IGFiZXIgbnVyIGZ1ZXIgTWluaXF1ZXN0IDQ5IGRpZSBBbmZvcmRlcnVuZ2VuLiBNaW5pcXVlc3QgMTgKKyAgICBlcmZvcmRlcnQgZGVuIFNlaGVyc3RhdHVzLiBEYW5uIHNhZWhlIGRhcyBNYXBwaW5nIHNvIGF1czoKKyAgICAgIChbIDE4IDogMCAgICAgICAgICAgICAgICAgICAgOyAiRGF6dSBtdXNzdCBEdSBlcnN0IFNlaGVyIHdlcmRlbi5cbiIsCisgICAgICAgICA0OSA6ICJBdWZnYWJlbnRleHRfenVfNDkiIDsgMCBdKQorCisgICAgSmVkZXMgYWJmcmFnZW5kZSBPYmpla3QgbXVzcyBkYWhlciBkaWVzZXMgTWFwcGluZyB6dW5hZWNodCBnZWVpZ25ldAorICAgIGF1ZiBzZWluZW4gSW5oYWx0IHBydWVmZW4sIHVtIHp1IGVybWl0dGVsbiwgd2VsY2hlIE1lbGR1bmcgamV3ZWlscworICAgIGF1c3p1Z2ViZW4gaXN0LgorCitCRU1FUktVTkdFTjoKKyAgICBEYXMgYWJmcmFnZW5kZSBPYmpla3QgbXVzcyB2b24gZWluZW0gRXJ6bWFnaWVyIG9kZXIgR290dCAoei5CLiBkZW0KKyAgICB6dXN0YWVuZGlnZW4gUXVlc3QtRU0pIGltIFF1ZXN0bWFzdGVyIGFscyB6dWdyaWZmc2JlcmVjaHRpZ3QgYmVpIGRlbi0KKyAgICBqZW5pZ2VuIE1pbmlxdWVzdHMgZWluZ2V0cmFnZW4gc2VpbiwgZnVlciBkaWUgZXMgZGllIGVudHNwcmVjaGVuZGVuCisgICAgTWluaXF1ZXN0LUhpbndlaXNlIGF1c2dlYmVuIGRhcmYuIERpZXNlIEJlcmVjaHRpZ3VuZyBpc3QgbWl0IGRlbSAKKyAgICBRdWVzdC1FTSBhYnp1c3RpbW1lbi4gQW5kZXJlbiBPYmpla3RlbiB3aXJkIGVpbiBsZWVyZXMgTWFwcGluZyB6dXJ1ZWNrLQorICAgIGdlZ2ViZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgQWRkTWluaVF1ZXN0KEwpLCBDaGFuZ2VNaW5pUXVlc3QoTCkKKyAgICBQX1JFU1RSSUNUSU9OUworICAgIGVyem1hZ2llcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiA2LiBKdW5pIDIwMTQsIEFyYXRob3JuLgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlPd24gYi9kb2MvbGZ1bi9RdWVyeU93bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE1NWY2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlPd24KQEAgLTAsMCArMSwzMiBAQAorUXVlcnlPd24oKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBzdHJpbmcgUXVlcnlPd24oaW50IGNhc3VzKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvbGFuZ3VhZ2UuYworCitBUkdVTUVOVEU6CisgICAgIGNhc3VzCisgICAgICAgICAgRGVyIEZhbGwgZnVlciBkaWUgQW5yZWRlLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgZGFzIGRlbSBBbmxhc3MgZW50c3ByZWNoZW5kZSBQb3NzZXNzaXYtCisgICAgIHByb25vbWVuIGZ1ZXIgZGVuIFNwaWVsZXIgc2VsYmVyIChEZWluL0RlaW5lKS4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRWluIFN0cmluZyBtaXQgZGVtIFByb25vbWVuLgorCitCRUlTUElFTEU6CisKKyAgICAgcHJpbnRmKCIlcyAlcyBsb2VzdCBzaWNoIGF1Zi5cbiIsCisgICAgICAgICAgIGNhcGl0YWxpemUob2JqLT5RdWVyeU93bihXRVIpKSxvYmotPm5hbWUoV0VSKSk7CisKKyAgICAgKEluIGRlbiBtZWlzdGVuIEZhZWxsZW4ga2FubiBtYW4gaGllciBhdWNoIGRpcmVrdCAiRGVpbiIgb2RlciAiRGVpbmUiCisgICAgICBlaW5zZXR6ZW4uKQorCitTSUVIRSBBVUNIOgorICAgICAvc3RkL3RoaW5nL2xhbmd1YWdlLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogU3VuIEF1ZyAxMCAyMzo1NToyNyAyMDAzIGJ5IE1hbmRyYWdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlQYXNzZW5nZXJzIGIvZG9jL2xmdW4vUXVlcnlQYXNzZW5nZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MWFmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVBhc3NlbmdlcnMKQEAgLTAsMCArMSwyOSBAQAorUXVlcnlQYXNzZW5nZXJzKCkKKworRlVOS1RJT046CisgICAgIG9iamVjdCAqUXVlcnlQYXNzZW5nZXJzKCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90cmFuc3BvcnQuYworCitBUkdVTUVOVEU6CisgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gZXJtaXR0ZWx0IGRpZSBtb21lbnRhbiBhdWYgZGVtIFRyYW5zcG9ydGVyIGJlZmluZGxpY2hlbgorICAgICBQYXNzYWdpZXJlLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBBcnJheSB2b24gT2JqZWt0ZW4gbWl0IGRlbiBQYXNzYWdpZXJlbi4KKworQkVNRVJLVU5HRU46CisgICAgIEVzIHdlcmRlbiBudXIgZGllIFBhc3NhZ2llcmUgenVydWVja2dlZ2ViZW4sIGRpZSBzaWNoIGluIGRlbQorICAgICBlaWdlbnRsaWNoZW4gVHJhbnNwb3J0ZXJvYmpla3QgYmVmaW5kZW4hIFdlbm4gZGVyIFRyYW5zcG9ydGVyIG5vY2ggdW0KKyAgICAgenVzYWV0emxpY2hlIFJhZXVtZSB2ZXJncm9lc3NlcnQgd2lyZCwgd2VyZGVuIHVudGVyIFVtc3RhZW5kZW4gbmljaHQKKyAgICAgYWxsZSBQYXNzYWdpZXJlIGVyZmFzc3QhCisKK1NJRUhFIEFVQ0g6CisgICAgIC9zdGQvdHJhbnNwb3J0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjIyOjQ4IDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVBvc2l0aW9uIGIvZG9jL2xmdW4vUXVlcnlQb3NpdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDUxNzlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlQb3NpdGlvbgpAQCAtMCwwICsxLDI5IEBACitRdWVyeVBvc2l0aW9uKCkKKworRlVOS1RJT046CisgICAgIHN0cmluZyAqUXVlcnlQb3NpdGlvbigpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdHJhbnNwb3J0LmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdpcmQgZWluIEFycmF5IHZvbiB6d2VpIFN0cmluZ3MgbWl0IEtlbm56ZWljaG5lcm4gZGVyIGxldHp0ZW4gKG9kZXIKKyAgICAgYWt0dWVsbGVuKSB1bmQgZGVyIG5hZWNoc3RlbiBTdGF0aW9uIGltIEZhaHJwbGFuIHp1cnVlY2tnZWdlYmVuLgorCisgICAgIERpZSBLZW5uemVpY2huZXIgc2luZCBkYWJlaSBkaWUgZXJzdGVuIEFyZ3VtZW50ZSBkZXIgZW50c3ByZWNoZW5kZW4KKyAgICAgQWRkWFhYKCktQXVmcnVmZW4sIGFsc28gZGVyIE5hbWUgZGVyIEhhbHRlc3RlbGxlIGJlaSBBZGRSb3V0ZSwgZGVyIFRleHQKKyAgICAgZGVyIE1lbGR1bmcgYmVpIEFkZE1zZygpIHVuZCBkZXIgTmFtZSBkZXIgRnVua3Rpb24gYmVpIEFkZEZ1bigpLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBBcnJheSBtaXQgendlaSBTdHJpbmdzLiBEZXIgZXJzdGUgU3RyaW5nIGdpYnQgZGVuIEtlbm56ZWljaG5lciBkZXIKKyAgICAgbW9tZW50YW5lbiBGYWhycGxhbnN0YXRpb24gYW4sIGRlciB6d2VpdGUgU3RyaW5nIGRlbiBLZW5uemVpY2huZXIgZGVyCisgICAgIG5hZWNoc3RlbiBGYWhycGxhbnN0YXRpb24uCisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZFJvdXRlKCksIEFkZE1zZygpLCBBZGRGdW4oKSwgL3N0ZC90cmFuc3BvcnQuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDggMTA6MjI6NTIgMTk5NiBieSBXYXJnb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5UG9zc1Byb25vdW4gYi9kb2MvbGZ1bi9RdWVyeVBvc3NQcm9ub3VuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZjQxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVBvc3NQcm9ub3VuCkBAIC0wLDAgKzEsNDggQEAKK1F1ZXJ5UG9zc1Byb25vdW4oKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBzdHJpbmcgUXVlcnlQb3NzUHJvbm91bihtaXhlZCB3aGF0LCBpbnQgY2FzdXMsIGludCBhbnphaGwpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvbGFuZ3VhZ2UuYworCitBUkdVTUVOVEU6CisgICAgIHdoYXQKKyAgICAgICAgICBHZXNjaGxlY2h0IGRlcyBPYmpla3RlcywgZGFzIGJlc2Vzc2VuIHdpcmQsIG9kZXIgZGFzIE9iamVrdAorICAgICAgICAgIHNlbGJzdC4KKworICAgICBjYXN1cworICAgICAgICAgIERlciBGYWxsLCBpbiBkZW0gZGFzIE9iamVrdCBiZXNlc3NlbiB3aXJkLgorCisgICAgIGFuemFobAorICAgICAgICAgIEhhbmRlbHQgZXMgc2ljaCB1bSBudXIgZWluIE9iamVrdCBvZGVyIHVtIG1laHJlcmU/CisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gZ2lidCBlaW4gUG9zc2Vzc2l2cHJvbm9tZW4genVydWVjaywgZGFzIGRhcworICAgICBCZXNpdHp2ZXJoYWVsdG5pcyBlaW5lcyBPYmpla3RlcyB6dSBkaWVzZW0gT2JqZWt0IGFuemVpZ3QuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERhcyBQb3NzZXNzaXZwcm9ub21lbiBpbSBlbnRzcHJlY2hlbmRlbiBGYWxsLgorCitCRU1FUktVTkdFTjoKKyAgICAgd2hhdCB1bmQgY2FzdXMgYmV6aWVoZW4gc2ljaCBhdWYgZGFzIE9iamVrdCwgd2VsY2hlcyBiZXNlc3NlbiB3aXJkLCB1bmQKKyAgICAgbmljaHQgYXVmIGRlbiBCZXNpdHplciEhIQorCitCRUlTUElFTEU6CisgICAgIFVtIGVpbmUga29ycmVrdGUgQXVzZ2FiZSBiZWltIEhhZW5kZWtsYXRzY2hlbiB6dSBlcnJlaWNoZW4sIGtvZW5udGUgbWFuCisgICAgIHpCLiBmb2xnZW5kZSBaZWlsZSB2ZXJ3ZW5kZW46CisKKyAgICAgIHByaW50ZigiJXMga2xhdHNjaHQgaW4gJXMgSGFlbmRlLlxuIix0aGlzX3BsYXllcigpLT5uYW1lKFdFUiksCisgICAgICAgICAgIHRoaXNfcGxheWVyKCktPlF1ZXJ5UG9zc1Byb25vdW4oRkVNQUxFLCBXRU4sIFBMVVJBTCkpOworCisgICAgIEZFTUFMRSwgZGEgImRpZSBIYW5kIiB3ZWlibGljaCBpc3QsIFdFTiwgZGEgbWFuIGltIEFra3VzYXRpdiBrbGF0c2NodCwKKyAgICAgdW5kIFBMVVJBTCwgZGEgbWFuIGRhenUgYmVpZGUgSGFlbmRlIGJyYXVjaHQuCisKKyAgICAgRWluIGJlbGllYnRlciBGZWhsZXIgaXN0IGVzLCBhbHMgRmFsbCBXRVNTRU4genUgdmVyd2VuZGVuIChpbiBXRVNTRU4KKyAgICAgSGFlbmRlIGtsYXRzY2h0IG1hbj8gPT4gaW4gc2VpbmUpLgorICAgICBEaWUgcmljaHRpZ2UgRnJhZ2Ugd2FlcmUgYWJlcjogV0VOIGtsYXRzY2h0IG1hbj8gKGluIGRpZSBIYWVuZGUpCisKK1NJRUhFIEFVQ0g6CisgICAgIFF1ZXJ5T3duKCksIFF1ZXJ5UHJvbm91bigpLCAvc3RkL3RoaW5nL2xhbmd1YWdlLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBKYW4gMTEgMTM6MTM6MzUgQ0VUIDIwMDYgYnkgUnVtYXRhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVByYXlSb29tIGIvZG9jL2xmdW4vUXVlcnlQcmF5Um9vbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTA5N2QzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlQcmF5Um9vbQpAQCAtMCwwICsxLDMzIEBACitRdWVyeVByYXlSb29tKCkKKworRlVOS1RJT046CisgICAgIHB1YmxpYyBzdHJpbmcgUXVlcnlQcmF5Um9vbSgpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9wbGF5ZXIvYmFzZS5jCisKK0FSR1VNRU5URToKKyAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXMgaXN0IGRlciBSYXVtLCBpbiBkZW4gZGVyIFNwaWVsZXIgbmFjaCBkZW0gRW5kZSBkZXIgVG9kZXNzZXF1ZW56CisgICAgYmV3ZWd0IHdpcmQsIGQuaC4gZWluIFJhdW0sIHdvIGVyIGJldGVuIGthbm4sIHVtIGVpbmVuIG5ldWVuIEtvZXJwZXIgenUKKyAgICBlcmhhbHRlbi4KKyAgICBEZXIgUmF1bSB3aXJkIGFscyBTdHJpbmcgYW5nZWdlYmVuIChrZWluIE9iamVrdCkuCisKKyAgICBKZWRlIFJhc3NlIGhhdCBlaW5lbiBEZWZhdWx0IGZ1ZXIgZGllc2UgRnVua3Rpb24sIHdlbGNoZXIgbWl0CisgICAgU2V0RGVmYXVsdFByYXlSb29tKCkgZ2VzZXR6dCB3aXJkLiBEaWVzZXIgRGVmYXVsdCBrYW5uIG1pdCBkZXIgUHJvcGVydHkKKyAgICBQX1BSQVlfUk9PTSB1ZWJlcmxhZ2VydCB3ZXJkZW4uIFdpcmQgZGllIFByb3BlcnR5IGF1ZiAwIGRnZXNldHp0LCB3aXJkCisgICAgZGllc2VyIERlZmF1bHQgYWt0aXYuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgRGVyIE9iamVrdG5hbWUgZGVzIEJldHJhdW1zIChzdHJpbmcpCisKKworU0lFSEUgQVVDSDoKKyAgICAgUF9QUkFZX1JPT00KKyAgICAgU2V0RGVmYXVsdFByYXlSb29tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIxLjA1LjIwMTMsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlQcmVmZXJlZEVuZW15IGIvZG9jL2xmdW4vUXVlcnlQcmVmZXJlZEVuZW15Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2QyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVByZWZlcmVkRW5lbXkKQEAgLTAsMCArMSwzNSBAQAorRlVOS1RJT046CisJb2JqZWN0IFF1ZXJ5UHJlZmVyZWRFbmVteSgpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9saXZpbmcvY29tYmF0LmMKKworQVJHVU1FTlRFOgorCWtlaW5lCisKK1JVZUNLR0FCRVdFUlQ6CisJYmV2b3J6dWd0ZXIgR2VnbmVyCisKK0JFU0NIUkVJQlVORzoKKwlEaWVzZSBGdW5rdGlvbiBsaWVmZXJ0IHVudGVyIGZvbGdlbmRlbiBCZWRpbmd1bmdlbiB6dWZhZWxsaWcgZWluZXMKKwlkZXIgTGViZXdlc2VuIGFscyBiZXZvcnp1Z3RlbiBHZWduZXIgenVydWVjaywgd2VsY2hlIGluIGRlcgorCVByb3BlcnR5IFBfUFJFRkVSRURfRU5FTVkgaW4gZWluZW0gQXJyYXkgZWluZ2V0cmFnZW4gc2luZDoKKwkgICgxKSBEZXIgZXJzdGUgRWludHJhZyBkZXMgZXJ3YWVobnRlbiBQcm9wZXJ0eWFycmF5cyBlbnRoYWVsdAorCSAgICAgIGVpbmVuIFdlcnQgendpc2NoZW4gMCB1bmQgMTAwLCBkZXIgZGllIFdhaHJzY2hlaW5saWNoa2VpdAorCSAgICAgIGRhZnVlciBhbmdpYnQsIGRhc3MgZWluIExlYmV3ZXNlbiBhbHMgR2VnbmVyIGJldm9yenVndCB3ZXJkZW4KKwkgICAgICBzb2xsLiBFcyB3aXJkIGFsc28gbmljaHQgaW1tZXIgYmV2b3J6dWd0LCB3ZW5uIGRvcnQgZWluIFdlcnQKKwkgICAgICBrbGVpbmVyIDEwMCBzdGVodCEgSW4gZGllc2VtIEZhbGwgd2lyZCBlaW5lIDAgenVydWVja2dlZ2ViZW4uCisJICAoMikgRGFzIHBlciBadWZhbGwgYXVzIGRlbiBBcnJheWVsZW1lbnRlbiBhYiBFbGVtZW50IDIgZ2V3YWVobHRlCisJICAgICAgTGViZXdlc2VuIG11c3MgYXVjaCB3aXJrbGljaCBleGlzdGllcmVuLiBJc3QgZGllcyBuaWNodCBkZXIKKwkgICAgICBGYWxsLCB3aXJkIGRhcyBudW5tZWhyIGxlZXJlIEVsZW1lbnQgYXVzIGRlbSBBcnJheSBlbnRmZXJudAorCSAgICAgIHVuZCBlaW5lIDAgenVydWVja2dlbGllZmVydC4KKwkgICgzKSBEYXMgTGViZXdlc2VuIG11c3MgZGVyemVpdCBhdWNoIHdpcmtsaWNoIEZlaW5kIHNlaW4hIElzdCBkaWVzCisJICAgICAgbmljaHQgZGVyIEZhbGwsIHdpcmQgZWluZSAwIHp1cnVlY2tnZWdlYmVuLgorCVdpbGwgbWFuIGVpbmUgYW5kZXJlIEJldm9yenVndW5nIHZvbiBHZWduZXJuIGVycmVpY2hlbiwKKwl1ZWJlcnNjaHJlaWJ0IG1hbiBhbSBiZXN0ZW4gZGllc2UgRnVua3Rpb24uCisKK1NJRUhFIEFVQ0g6CisJU2VsZWN0RW5lbXkoKSwgSXNFbmVteSgpLCBQX1BSRUZFUkVEX0VORU1ZCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgMjYgMTY6NDc6NTEgMTk5OSBieSBQYXRyeW4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5UHJvbm91biBiL2RvYy9sZnVuL1F1ZXJ5UHJvbm91bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDA0MWNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlQcm9ub3VuCkBAIC0wLDAgKzEsMzIgQEAKK1F1ZXJ5UHJvbm91bigpCisKK0ZVTktUSU9OOgorICAgICBzdHJpbmcgUXVlcnlQcm9ub3VuKGludCBjYXN1cyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9sYW5ndWFnZS5jCisKK0FSR1VNRU5URToKKyAgICAgY2FzdXMKKyAgICAgICAgICBEZXIgRmFsbCwgaW4gZGVtIGRhcyBQZXJzb25hbHByb25vbWVuIHZlcmxhbmd0IHdpcmQuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCBlaW4gUGVyc29uYWxwcm9ub21lbiAoImVyIiwgInNpZSIsICJlcyIpIGltIGVudHNwcmVjaGVuZGVuIEZhbGwKKyAgICAgZnVlciBkaWVzZXMgT2JqZWt0IGJlcmVjaG5ldC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRGFzIFByb25vbWVuIGltIGVudHNwcmVjaGVuZGVuIEZhbGwuCisKK0JFSVNQSUVMRToKKworICAgICBwcmludGYoIkR1IHZlcnN1Y2h0LCAlcyB6dSBuZWhtZW4sIGFiZXIgJXMgaXN0IHp1IHNjaHdlci5cbiIsCisgICAgICAgICAgIG9iLT5uYW1lKFdFTiksIG9iLT5RdWVyeVByb25vdW4oV0VSKSk7CisKKyAgICAgSGllciB3aXJkIGltbWVyIGRhcyByaWNodGlnZSBQcm9ub21lbiB2ZXJ3ZW5kZXQsIGVnYWwsIHdlbGNoZXMKKyAgICAgR2VzY2hsZWNodCBkYXMgT2JqZWt0IG9iIGhhdC4KKworU0lFSEUgQVVDSDoKKyAgICAgU3VnZ2VzdEFydGljbGUoKSwgUXVlcnlQb3NzUHJvbm91bigpLCAvc3RkL3RoaW5nL2xhbmd1YWdlLmMKKyAgICAgUXVlcnlPd24oKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjIzOjE0IDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVByb3AgYi9kb2MvbGZ1bi9RdWVyeVByb3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3NTJlMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5UHJvcApAQCAtMCwwICsxLDM5IEBACitRdWVyeVByb3AoKQorRlVOS1RJT046CisgICAgIG1peGVkIFF1ZXJ5UHJvcChzdHJpbmcgbmFtZSk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9wcm9wZXJ0aWVzLmMKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcgbmFtZQktIGFienVmcmFnZW5kZSBQcm9wZXJ0eQorCitCRVNDSFJFSUJVTkc6CisgICAgIERlciBEYXRlbndlcnQgZGVyIFByb3BlcnR5ICduYW1lJyB3aXJkIHp1cnVlY2tnZWdlYmVuLgorCisgICAgIEV4aXN0aWVydCBlaW5lIEZfUVVFUllfTUVUSE9EIG9kZXIgZWluZSBfcXVlcnlfJ25hbWUnKCktTWV0aG9kZSBmdWVyCisgICAgIGRpZXNlIFByb3BlcnR5LCBzbyB3aXJkIGRpZXNlIGF1ZmdlcnVmZW4gdW5kIGlociAnVmFsdWUnIHVlYmVyZ2ViZW4uCisgICAgIEVpbmUgRl9RVUVSWV9NRVRIT0QgaGF0IGRhYmVpIFZvcnJhbmcgdm9yIF9xdWVyeV8nbmFtZScoKSwgZC5oLgorICAgICBfcXVlcnlfJ25hbWUnKCkgd2lyZCBuYWNoIGVyZm9sZ3JlaWNoZXIgRl9RVUVSWV9NRVRIT0QgbmljaHQgbWVocgorICAgICBnZXJ1ZmVuLgorCisgICAgIChEaWVzZSBNZXRob2RlbiBudXR6ZW4gZGFubiBTZXQoKSwgdW0gYXVmIGRlbiBEYXRlbndlcnQgZGVyIFByb3BlcnR5CisgICAgICAnbmFtZScgenVydWVja3p1Z3JlaWZlbi4gVGVpbHdlaXNlIHdlcmRlbiBhYmVyIGF1Y2ggaW50ZXJuZSBWYXJpYWJsZW4KKyAgICAgIHNvIG9lZmZlbnRsaWNoIGdlbWFjaHQgdW5kIHNpbmQgbmljaHQgaW4gZGVyIHVlYmVyIFNldC9RdWVyeQorICAgICAgdmVyZnVlZ2JhcmVuIFByb3BlcnR5ICduYW1lJyBhYmdlbGVndC4pCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERlciBEYXRlbndlcnQgZGVyIFByb3BlcnR5LgorICAgICAwLCBmYWxscyBkaWVzZSBuaWNodCBleGlzdGllcnQuCisKK0JFSVNQSUVMRToKKyAgICAgLy8gd2llIGhvY2ggc2luZCBkaWUgYWt0dWVsbGUgTFAgZGVzIFNwaWVsZXJzPworICAgICBocCA9IHRoaXNfcGxheWVyKCktPlF1ZXJ5UHJvcChQX0hQKTsKKworU0lFSEUgQVVDSDoKKyAgICAgQWVobmxpY2hlczoJU2V0UHJvcChMKSwgU2V0KEwpLCBRdWVyeShMKQorICAgICBHZW5lcmVsbDoJCVNldFByb3BlcnRpZXMoTCksIFF1ZXJ5UHJvcGVydGllcyhMKQorICAgICBLb256ZXB0OgkJcHJvcGVydGllcywgL3N0ZC90aGluZy9wcm9wZXJ0aWVzLmMKKyAgICAgU29uc3RpZ2VzOgkJUF9BVVRPTE9BRE9CSgorCisxNS5EZXogMjAwNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlQcm9wZXJ0aWVzIGIvZG9jL2xmdW4vUXVlcnlQcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzQwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVByb3BlcnRpZXMKQEAgLTAsMCArMSwzMCBAQAorUXVlcnlQcm9wZXJ0aWVzKCkKK0ZVTktUSU9OOgorICAgICBtYXBwaW5nIFF1ZXJ5UHJvcGVydGllcygpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9wcm9wZXJ0aWVzLmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgZWluIE1hcHBpbmcgbWl0IGFsbGVuIGZ1ZXIgZGFzIE9iamVrdAorICAgICBkZWZpbmllcnRlbiBQcm9wZXJ0aWVzIHp1cnVlY2suCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEVpbiBNYXBwaW5nIG1pdCBkZW4gUHJvcGVydGllcy4gRGFzIE1hcHBpbmcgaGF0IGZvbGdlbmRlbiBBdWZiYXU6CisJKFsgbmFtZTogd2VydDsgZmxhZ3M7IHNldF9tZXRob2Q7IHF1ZXJ5X21ldGhvZCwKKwkgICBuYW1lMjogLi4uIF0pOworCitCRU1FUktVTkdFTjoKKyAgICAgLSBkaWVzZSBGdW5rdGlvbiB3aXJkIHZvbiByZXN0b3JlX29iamVjdCgpIHVuZCBzYXZlX29iamVjdCgpCisgICAgIC0gRl9RVUVSWV9NRVRIT0RzIHVuZCBfcXVlcnlfJ3Byb3AnKCktTWV0aG9kZW4gaGFiZW4ga2VpbmUgQXVzd2lya3VuZworICAgICAgIGF1ZiBkaWUgV2VydGVmZWxkZXIhCisKK1NJRUhFIEFVQ0g6CisgICAgIEFlaG5saWNoZXM6CVNldFByb3AoTCksIFF1ZXJ5UHJvcChMKSwgU2V0KEwpLCBRdWVyeShMKQorICAgICBHZW5lcmVsbDoJCVNldFByb3BlcnRpZXMoTCkgCisgICAgIEtvbnplcHQ6CQlwcm9wZXJ0aWVzLCAvc3RkL3RoaW5nL3Byb3BlcnRpZXMuYworCisxLk1haSAyMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVF1ZXN0IGIvZG9jL2xmdW4vUXVlcnlRdWVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTVhZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlRdWVzdApAQCAtMCwwICsxLDM0IEBACitRdWVyeVF1ZXN0KCkKKworRlVOS1RJT046CisgICAgICAgIGludCBRdWVyeVF1ZXN0KHN0cmluZyBxdWVzdG5hbWUpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3N0ZC9wbGF5ZXIvcXVlc3RzLmMKKworQVJHVU1FTlRFOgorICAgICAgICBxdWVzdG5hbWUKKyAgICAgICAgICBRdWVzdG5hbWUsIHdpZSBlciBpbSBRdWVzdG1hc3RlciBlaW5nZXRyYWdlbiB3dXJkZS4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgICAgKERpZSBEZWZpbmVzIGZ1ZXIgZGVuIFJ1ZWNrZ2FiZXdlcnQgZmluZGVuIHNpY2ggaW4gCisgICAgICAgICAvc2VjdXJlL3F1ZXN0bWFzdGVyLmgpCisgICAgICAgICAxIDogU3BpZWxlciBoYXQgZGllIFF1ZXN0IGJlcmVpdHMgZ2Vsb2VzdCAgKE9LKQorICAgICAgICAgMCA6IFVuZ3VlbHRpZ2VyIFF1ZXN0bmFtZSBvZGVyIGRlciBTcGllbGVyCisgICAgICAgICAgICAgaGF0IGRpZSBRdWVzdCBub2NoIG5pY2h0LiAgICAgICAgICAgICAgKFFRX0tFWV9JTlZBTElEKQorICAgICAgICAgMiA6IEdhZXN0ZSBrb2VubmVuIGtlaW5lIFF1ZXN0IGxvZXNlbiAgICAgIChRUV9RVUVTVCkKKworQkVTQ0hSRUlCVU5HOgorCU1pdCBkaWVzZXIgRnVua3Rpb24ga2FubiBnZXRlc3RldCB3ZXJkZW4sIG9iIGVpbiBTcGllbGVyIGVpbmUgCisgICAgICAgIGJlc3RpbW10ZSBRdWVzdCBiZXJlaXRzIGdlbG9lc3QgaGF0LiBBbHMgUXVlc3RuYW1lIHdpcmQgZGF6dQorICAgICAgICBkZXIgTmFtZSBhbmdlZ2ViZW4sIGRlciBpbSBRdWVzdG1hc3RlciBlaW5nZXRyYWdlbiB3dXJkZS4KKworICAgICAgICBXZXIgc2ljaCBkYSBuaWNodCBzaWNoZXIgaXN0LCBrYW5uIG1pdCBkZW0gUXVlc3R0b29sIAorICAgICAgICAoL29iai90b29scy9xdWVzdHRvb2wpIG5hY2hzZWhlbi4gCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIC9zZWN1cmUvcXVlc3RtYXN0ZXIuaCwgL29iai90b29scy9xdWVzdHRvb2wKKyAgICAgICAgR2l2ZVF1ZXN0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1p1bGV0enQgZ2VhZW5kZXJ0OiBNb24sIDE3LiBKdWwgMjAwMCwgMTI6MTY6NDEgdm9uIFpvb2suCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVF1ZXN0VGltZSBiL2RvYy9sZnVuL1F1ZXJ5UXVlc3RUaW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MTBkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVF1ZXN0VGltZQpAQCAtMCwwICsxLDI5IEBACitRdWVyeVF1ZXN0VGltZSgpCisKK0ZVTktUSU9OOgorICAgICAgICBpbnQgUXVlcnlRdWVzdFRpbWUoc3RyaW5nIHF1ZXN0bmFtZSkKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL3BsYXllci9xdWVzdHMuYworCitBUkdVTUVOVEU6CisgICAgICAgIHF1ZXN0bmFtZQorICAgICAgICAgIFF1ZXN0bmFtZSwgd2llIGVyIGltIFF1ZXN0bWFzdGVyIGVpbmdldHJhZ2VuIHd1cmRlLgorCitSVWVDS0dBQkVXRVJUOgorICAgICAgICBRdWVzdHplaXRwdW5rdCBpbiBTZWt1bmRlbiBzZWl0IEVwb2NoIGFscyBwb3NpdGl2ZXIgSW50ZWdlci1XZXJ0CisgICAgICAgICAwIDogVGFnZWJ1Y2htYXN0ZXIgaGF0IGtlaW5lIERhdGVuIGluIGRlbiBMb2dmaWxlcyBnZWZ1bmRlbiB1bmQKKyAgICAgICAgICAgICBtYWNodCBkYXMgYXVmIGRpZXNlIFdlaXNlIGtlbm50bGljaAorICAgICAgICAtMSA6IFF1ZXN0emVpdHB1bmt0IHVuYmVrYW5udAorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24ga2FubiBkZXIgWmVpdHB1bmt0IGFiZ2VmcmFndCB3ZXJkZW4sIHp1CisgICAgICAgIGRlbSBlaW4gU3BpZWxlciBlaW5lIGJlc3RpbW10ZSBRdWVzdCBnZWxvZXN0IGhhdC4gCisgICAgICAgIEFscyBRdWVzdG5hbWUgd2lyZCBkYXp1IGRlciBOYW1lIGFuZ2VnZWJlbiwgZGVyIGltIFF1ZXN0bWFzdGVyIAorICAgICAgICBlaW5nZXRyYWdlbiBpc3QuCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIEdpdmVRdWVzdChMKSwgUXVlcnlRdWVzdChMKSwgTW9kaWZ5UXVlc3RUaW1lKEwpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1p1bGV0enQgZ2VhZW5kZXJ0OiAxOS4gRGV6LiAyMDE1LCBBcmF0aG9ybgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlSZWFsQXR0cmlidXRlIGIvZG9jL2xmdW4vUXVlcnlSZWFsQXR0cmlidXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZTlmODMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVJlYWxBdHRyaWJ1dGUKQEAgLTAsMCArMSwyNiBAQAorUXVlcnlSZWFsQXR0cmlidXRlKCkKK0ZVTktUSU9OOgorICAgICBpbnQgUXVlcnlSZWFsQXR0cmlidXRlKHN0cmluZyBhdHRyKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYworCitBUkdVTUVOVEU6CisgICAgIGF0dHIgICAgICAgLSAgICAgICBkYXMgaW50ZXJlc3NpZXJlbmRlIEF0dHJpYnV0CisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGFzIHJlYWxlIEF0dHJpYnV0IChvaG5lIE9mZnNldHMpIHdpcmQgenVydWVja2dlZ2ViZW4uCisKK0JFSVNQSUVMRToKKyAgICAgaWYodGhpc19wbGF5ZXIoKS0+UXVlcnlSZWFsQXR0cmlidXRlKEFfSU5UKT4xNSkKKyAgICAgIHdyaXRlKCJEdSBiaXN0IGF1Y2ggc28gZ2FueiBzY2hvZW4gY2xldmVyLlxuIik7CisKK1NJRUhFIEFVQ0g6DQorCVF1ZXJ5QXR0cmlidXRlKCksIFF1ZXJ5UmVhbEF0dHJpYnV0ZSgpLCBRdWVyeUF0dHJpYnV0ZU9mZnNldCgpLA0KKwlTZXRBdHRyaWJ1dGUoKSwgU2V0UmVhbEF0dHJpYnV0ZSgpLCBVcGRhdGVBdHRyaWJ1dGVzKCksDQorCVNldFRpbWVkQXR0ck1vZGlmaWVyKCksIFF1ZXJ5VGltZWRBdHRyTW9kaWZpZXIoKSwgDQorCURlbGV0ZVRpbWVkQXR0ck1vZGlmaWVyKCksDQorCVBfQVRUUklCVVRFUywgUF9BVFRSSUJVVEVTX09GRlNFVFMsIFBfVElNRURfQVRUUl9NT0QsDQorCVBfWF9BVFRSX01PRCwgUF9NX0FUVFJfTU9ELCAvc3RkL2xpdmluZy9hdHRyaWJ1dGVzLmMNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorTGFzdCBtb2RpZmllZDogVHVlIEp1bCAyNyAyMDowMDoyMCAyMDA0IGJ5IE11YWRpYg0KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5U2VsbFZhbHVlIGIvZG9jL2xmdW4vUXVlcnlTZWxsVmFsdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0Y2IyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5U2VsbFZhbHVlCkBAIC0wLDAgKzEsNDMgQEAKK0ZVTktUSU9OOgorCisgICAgICB2YXJhcmdzIGludCBRdWVyeVNlbGxWYWx1ZShvYmplY3Qgb2IsIG9iamVjdCBjbGllbnQpOworCitERUZJTklFUlQgSU46CisKKyAgICAgIC9zdGQvdHJhZGluZ19wcmljZS5jCisKK0JFU0NIUkVJQlVORzoKKworICAgICAgRGllc2UgRnVua3Rpb24ga2FubiBkYXp1IGdlbnV0enQgd2VyZGVuLCBkZW4gVmVya2F1ZnNwcmVpcyBpbiBlaW5lbSAKKyAgICAgIExhZGVuIGdsb2JhbCB6dSB2ZXJhZW5kZXJuLiBTb2Zlcm4gZGllcyB6dWd1bnN0ZW4gZGVyIFNwaWVsZXIgZ2VzY2hpZWh0LAorICAgICAgbXVzcyBkYWZ1ZXIgZGllIFp1c3RpbW11bmcgZGVzIHp1c3RhZW5kaWdlbiBSZWdpb25zbWFnaWVycyB1bmQgZGVyCisgICAgICBCYWxhbmNlIGVpbmdlaG9sdCB3ZXJkZW4uIFp1ZGVtIHNvbGx0ZSBlcyBuaWNodCBpbiBqZWRlbSB4LWJlbGllYmlnZW4gCisgICAgICBMYWRlbiBnZW51dHp0IHdlcmRlbiwgc29uZGVybiBudXIgaW4gcmVjaHQgYWJnZWxlZ2VuZW4gR2ViaWV0ZW4sIGluCisgICAgICBkaWUgbWFuIG5pY2h0IGVpbmZhY2ggc2tyaXB0ZW4ga2Fubi4KKworICAgICAgRWluIEJlaXNwaWVsIGlzdCBkZXIgTGFkZW4gYXVmIGRlbSBLdXR0ZXIgaW4gUG9ydCBWYWluLCBkZXIgbnVyIGluCisgICAgICBsYWVuZ2VyZW4gSW50ZXJ2YWxsZW4gbWFsIHp1Z2FlbmdsaWNoIGlzdC4KKworQkVJU1BJRUw6CisKKyAgICAgIEVpbiBMYWRlbiB6YWhsdCAxMCUgdWViZXIgZGVtIG5vcm1hbGVuIFZlcmthdWZzcHJlaXM6CisKKyAgICAgIHByaXZhdGUgaW50IHNlbGxfZmFjdG9yID0gMTEwOworCisgICAgICB2YXJhcmdzIGludCBRdWVyeVNlbGxWYWx1ZShvYmplY3Qgb2IsIG9iamVjdCBjbGllbnQpIHsKKyAgICAgICAgLy8gRXMgd2lyZCBuaWNodCBuYWVoZXIgZ2VwcnVlZnQsIG9iIDxvYj4gZWluIGd1ZWx0aWdlciBPYmpla3Rwb2ludGVyCisgICAgICAgIC8vIGlzdCwgZGEgZGVyIExhZGVuIHNlbGJzdCBzaWNoZXJzdGVsbHQsIGRhc3MgZGFzIHNvIGlzdC4gV2VubiAKKyAgICAgICAgLy8gZGFzIGRvY2ggZWlubWFsIG5pY2h0IGRlciBGYWxsIHNlaW4gc29sbHRlLCBsaWVndCBkZXIgRmVobGVyCisgICAgICAgIC8vIHdvYW5kZXJzLiBFaW5lbiBCdWcgYXVzenVsb2VzZW4gaXN0IGRhbm4gc2lubnZvbGwuCisKKyAgICAgICAgLy8gQmFzaXNwcmVpcyBlcm1pdHRlbG4gCisgICAgICAgIGludCBwcmVpcyA9IDo6UXVlcnlTZWxsVmFsdWUob2IsIGNsaWVudCk7CisgICAgICAgIC8vIHVuZCBkZW4gQm9udXMgYXVmc2NobGFnZW4uCisgICAgICAgIHByZWlzID0gKHNlbGxfZmFjdG9yICogcHJlaXMpLzEwMDsgCisKKyAgICAgICAgLy8gTmljaHQgbWVociBhdXN6YWhsZW4sIGFscyBkYXMgT2JqZWt0IGFuIHNpY2ggd2VydCBpc3QuCisgICAgICAgIHJldHVybiBtaW4ocHJlaXMsIG9iLT5RdWVyeVByb3AoUF9WQUxVRSkpOworICAgICAgfQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMRVRaVEUgQUVOREVSVU5HOiAxOC1KdW4tMjAxNSwgQXJhdGhvcm4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5U2tpbGwgYi9kb2MvbGZ1bi9RdWVyeVNraWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2I5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVNraWxsCkBAIC0wLDAgKzEsMzUgQEAKK1F1ZXJ5U2tpbGwoKQorRlVOS1RJT046CisgICAgcHVibGljIHZhcmFyZ3MgbWFwcGluZyBRdWVyeVNraWxsKHN0cmluZyBzbmFtZSwgc3RyaW5nIGdpbGRlKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvc2tpbGxzLmMKKyAgICAKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgc25hbWUgICAgTmFtZSBkZXMgYWJ6dWZyYWdlbmRlbiBTa2lsbAorICAgIHN0cmluZyBnaWxkZSAgICBOYW1lIGRlciBHaWxkZSwgdW50ZXIgZGVyIGRlciBTa2lsbCBnZXN1Y2h0IHdlcmRlbiBzb2xsCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiBsaWVmZXJ0IGRhcyBTa2lsbG1hcHBpbmdzIGRlcyBTa2lsbHMgJ3NubWUnIGltIExlYmV3ZXNlbgorICAgIHp1cnVlY2suIERpZXNlIGVudGhhZWx0IEVpbnRyYWVnZSwgZGllIGluIGRlciBNYW4tUGFnZSBza2lsbF9pbmZvX2xpc3RlCisgICAgYmVzY2hyaWViZW4gc2luZC4KKworICAgIEZhbGxzICdnaWxkZScgbmljaHQgYW5nZWdlYmVuIHdpcmQsIHdpcmQgZGVyIFNraWxsIHp1ZXJzdCBmdWVyIGRpZSBHaWxkZQorICAgIFBfR1VJTEQgZGVzIExlYmV3ZXNlbnMgZ2VzdWNodCwgYW5zb25zdGVuIGluIGRlbiBhbGxnZW1laW5lbiBTa2lsbHMKKyAgICAiQU5ZIiAoZXMgd2lyZCBOSUNIVCBpbiBHaWxkZW5vYmpla3Qgb2RlciBTcGVsbGJvb2sgZXR3YXMgYWJnZWZyYWd0KS4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICBFaW4gTWFwcGluZyBtaXQgU2tpbGxpbmZvcyBvZGVyIDAsIGZhbGxzIGRlciBTa2lsbCBuaWNodCB2b3JoYW5kZW4gaXN0LgorICAgIERhcyBNYXBwaW5nIGlzdCBlaW5lIEtvcGllLgorCitTSUVIRSBBVUNIOgorICAgIFNraWxscyBMZXJuZW46ICBMZWFyblNraWxsLCBNb2RpZnlTa2lsbCwgTGltaXRBYmlsaXR5CisgICAgKiBOdXR6dW5nOiAgICAgIFVzZVNwZWxsLCBVc2VTa2lsbAorICAgICogQWJmcmFnZW46ICAgICBRdWVyeVNraWxsQWJpbGl0eQorICAgICogTW9kaWZpa2F0aW9uOiBNb2RpZnlTa2lsbEF0dHJpYnV0ZSwgUXVlcnlTa2lsbEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyLCBSZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyCisgICAgICAqIFByb3BlcnRpZXM6IFBfU0tJTExfQVRUUklCVVRFUywgUF9TS0lMTF9BVFRSSUJVVEVfT0ZGU0VUUworICAgICogc29uc3RpZzogICAgICBzcHJ1Y2hlcm11ZWR1bmcsIHNraWxsX2luZm9fbGlzdGUKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9ORVdTS0lMTFMKKworNS4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVNraWxsQWJpbGl0eSBiL2RvYy9sZnVuL1F1ZXJ5U2tpbGxBYmlsaXR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZmQ4MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVNraWxsQWJpbGl0eQpAQCAtMCwwICsxLDI5IEBACitRdWVyeVNraWxsQWJpbGl0eSgpCitGVU5LVElPTjoKKyAgICBwdWJsaWMgdmFyYXJncyBpbnQgUXVlcnlTa2lsbEFiaWxpdHkoc3RyaW5nIHNuYW1lLCBzdHJpbmcgZ2lsZGUpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9za2lsbHMuYworICAgIAorQVJHVU1FTlRFOgorICAgIHN0cmluZyBzbmFtZSAgICAgICAgTmFtZSBkZXMgYWJ6dWZyYWdlbmRlbiBTa2lsbAorICAgIHN0cmluZyBnaWxkZSAgICAgICAgIEdpbGRlLCB1bnRlciBkZXIgZGVyIFNraWxsIGdlc3VjaHQgd2VyZGVuIHNvbGwKKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgZWluZW4gV2VydCB6dXJ1ZWNrLCBkZXIgYXVzc2FndCwgd2llIGd1dCBkYXMKKyAgICBMZWJld2VzZW4gZGVuIFNraWxsICdzbmFtZScgYmVoZXJyc2NodCAoS2V5IFNJX1NLSUxMQUJJTElUWSBpbQorICAgIFNraWxsbWFwcGluZykuCisgICAgRGllc2VyIFdlcnQga2FubiB6d2lzY2hlbiAtTUFYX0FCSUxJVFkgdW5kIE1BWF9BQklMSVRZIGxpZWdlbiwKKyAgICBub3JtYWwgaXN0IDAgYmlzIE1BWF9BQklMSVRZICgxMDAwMCAtIFNraWxsIHBlcmZla3Rpb25pZXJ0KS4KKworU0lFSEUgQVVDSDoKKyAgICBTa2lsbHMgTGVybmVuOiAgTGVhcm5Ta2lsbCwgTW9kaWZ5U2tpbGwsIExpbWl0QWJpbGl0eQorICAgICogTnV0enVuZzogICAgICBVc2VTcGVsbCwgVXNlU2tpbGwKKyAgICAqIEFiZnJhZ2VuOiAgICAgUXVlcnlTa2lsbAorICAgICogTW9kaWZpa2F0aW9uOiBNb2RpZnlTa2lsbEF0dHJpYnV0ZSwgUXVlcnlTa2lsbEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyLCBSZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyCisgICAgICAqIFByb3BlcnRpZXM6IFBfU0tJTExfQVRUUklCVVRFUywgUF9TS0lMTF9BVFRSSUJVVEVfT0ZGU0VUUworICAgICogc29uc3RpZzogICAgICBzcHJ1Y2hlcm11ZWR1bmcsIHNraWxsX2luZm9fbGlzdGUKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9ORVdTS0lMTFMKKworNS4gT2t0IDIwMTEgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1F1ZXJ5U2tpbGxBdHRyaWJ1dGUgYi9kb2MvbGZ1bi9RdWVyeVNraWxsQXR0cmlidXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjFiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVNraWxsQXR0cmlidXRlCkBAIC0wLDAgKzEsNTggQEAKK1F1ZXJ5U2tpbGxBdHRyaWJ1dGUoKQorRlVOS1RJT046CisgICAgcHVibGljIGludCBRdWVyeVNraWxsQXR0cmlidXRlKHN0cmluZyBhdHJuYW1lKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvc2tpbGxfYXR0cmlidXRlcy5jCisgICAgCitBUkdVTUVOVEU6CisgICAgc3RyaW5nIGF0cm5hbWUgICAgICAgICAgICBOYW1lIGRlcyBhYnp1ZnJhZ2VuZGVuIEF0dHJpYnV0cworICAgIAorQkVTQ0hSRUlCVU5HOgorICAgIE1pdCBkaWVzZXIgRnVua3Rpb24ga2FubiBtYW4gZGVuIFdlcnQgYmVzdGltbXRlciBBdHRyaWJ1dGUKKyAgICBhYmZyYWdlbiwgZGFiZWkgd2VyZGVuIGRhcyBhYmdlZnJhZ3RlIEF0dHJpYnV0LCBUb2Rlc2ZvbGdlbiwKKyAgICBTQV9RVUFMSVRZIHVuZCBXZXJ0ZSBpbiBQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTCisgICAgYmVydWVja3NpY2h0aWd0LgorICAgIAorICAgIE1vbWVudGFuZSBTa2lsbHMgc2llaGUgTW9kaWZ5U2tpbGxBdHRyaWJ1dGUuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgRGVyIFdlcnQgZGVzIEF0dHJpYnV0cy4gSXN0IG5pY2h0cyBiZXN0aW1tdGVzIGdlc2V0enQsIHdpcmQKKyAgICBkZXIgU3RhbmRhcmR3ZXJ0IDEwMCB6dXJ1ZWNrZ2VnZWJlbi4KKyAgICBEZXIgUnVlY2tnYWJld2VydCBsaWVndCB6d2lzY2hlbiAxMCBiaXMgMTAwMCAoUHJvemVudCkuCisgICAgCitCRU1FUktVTkc6CisgICAgRGllIEZ1bmt0aW9uIGlzdCB6d2FyIGFscyAndmFyYXJncycgZGVmaW5pZXJ0LCBnaWJ0IG1hbiBhbGxlcmRpbmdzCisgICAga2VpbmVuIEF0dHJpYnV0bmFtZW4gYW4sIHdpcmQgaW1tZXIgMTAwIHp1cnVlY2tnZWdlYmVuLgorICAgIAorQkVJU1BJRUw6CisgICAgLy8gZWluIFNwaWVsZXIga2FubiBlaW4gU3R1ZWNrIEthZXNlIHN0aWJpdHplbiwgd2VubiBlciBzY2huZWxsCisgICAgLy8gZ2VudWcgaXN0IC4uLiAoMTUlIHVlYmVyIG5vcm1hbCkKKyAgICBpZih0aGlzX3BsYXllcigpLT5RdWVyeVNraWxsQXR0cmlidXRlKFNBX1NQRUVEKT49MTE1KSB7CisgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLAorICAgICAgICAiRHUgc2NobmFwcHN0IGRhcyBTdHVlY2sgS2Flc2UgYXVzIGRlciBGYWxsZS5cbiIpOworICAgICAgb2JqIGthZXNlID0gY2xvbmVfb2JqZWN0KC4uLik7CisgICAgICBbLi4uXQorICAgIH0gZWxzZSB7CisgICAgICBtYXBwaW5nIGFtYXA9bWFwX2luZGljZXMoVkFMSURfQVJNT1VSX0NMQVNTLCMnISk7CisgICAgICBhbWFwW0FUX0dMT1ZFXT0xMDA7CisgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLAorICAgICAgICAiRHUgYmlzdCB6dSBsYW5nc2FtIHVuZCBkaWUgRmFsbGUgc2NobmFwcHQgaHVuZ3JpZyB6dS5cbiIpOworICAgICAgdGhpc19wbGF5ZXIoKS0+RGVmZW5kKHJhbmRvbSgxMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHtEVF9QSUVSQ0UsIERUX1NRVUVFWkV9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChbU1BfUEhZU0lDQUxfQVRUQUNLOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUF9SRURVQ0VfQVJNT1VSOiBhbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUF9TSE9XX0RBTUFHRTogMF0pKTsKKyAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgU2tpbGxzIExlcm5lbjogIExlYXJuU2tpbGwsIE1vZGlmeVNraWxsLCBMaW1pdEFiaWxpdHkKKyAgICAqIE51dHp1bmc6ICAgICAgVXNlU3BlbGwsIFVzZVNraWxsCisgICAgKiBBYmZyYWdlbjogICAgIFF1ZXJ5U2tpbGwsIFF1ZXJ5U2tpbGxBYmlsaXR5CisgICAgKiBNb2RpZmlrYXRpb246IE1vZGlmeVNraWxsQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICBRdWVyeVNraWxsQXR0cmlidXRlTW9kaWZpZXIsIFJlbW92ZVNraWxsQXR0cmlidXRlTW9kaWZpZXIKKyAgICAgICogUHJvcGVydGllczogUF9TS0lMTF9BVFRSSUJVVEVTLCBQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTCisgICAgKiBzb25zdGlnOiAgICAgIHNwcnVjaGVybXVlZHVuZywgc2tpbGxfaW5mb19saXN0ZQorICAgICogUHJvcGVydGllczogICBQX05FV1NLSUxMUworCis1LiBPa3QgMjAxMSBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyIGIvZG9jL2xmdW4vUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwN2M1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9RdWVyeVNraWxsQXR0cmlidXRlTW9kaWZpZXIKQEAgLTAsMCArMSw5MCBAQAorUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyKCkKK0ZVTktUSU9OOgorICAgIHB1YmxpYyB2YXJhcmdzIG1hcHBpbmcgUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyKG9iamVjdCBjYXN0ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAqYXRybmFtZXMpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9za2lsbF9hdHRyaWJ1dGVzLmMKKworQVJHVU1FTlRFOgorICAgIDxjYXN0ZXI+ICAgIG9iamVjdAorICAgICAgICAgICAgICAgIE9iamVrdCwgd2VsY2hlcyBkaWUgZ2VzdWNodGVuIE1vZHMgZ2VzZXR6dCBoYXQKKworICAgIDxhdHJuYW1lcz4gIHN0cmluZyoKKyAgICAgICAgICAgICAgICBBcnJheSB2b24gU2tpbGwtQXR0cmlidXRlbiwgd2VsY2hlIGR1cmNoc3VjaHQgd2VyZGVuIHNvbGxlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgYWxsZSBNb2RzIHZvbiA8Y2FzdGVyPiBhdWYgZGVuIFNraWxsLQorICAgIEF0dHJpYnV0ZW4gPGF0cm5hbWVzPiBpbiBlaW5lbSBNYXBwaW5nIHp1cnVlY2suCisgICAgV2lyZCA8YXRybmFtZXM+IG5pY2h0IGFuZ2VnZWJlbiBvZGVyIGlzdCBlaW4gbGVlcmVzIEFycmF5LCB3ZXJkZW4gYWxsZQorICAgIFNraWxsLUF0dHJpYnV0ZSBuYWNoIE1vZHMgYWJnZXN1Y2h0LgorICAgIFdpcmQgPGNhc3Rlcj4gbmljaHQgYW5nZWJlbiBvZGVyIGlzdCAwLCBzbyB3ZXJkZW4gYWxsZSBNb2RzIGRlciAKKyAgICBnZXd1ZW5zY2h0ZW4gU2tpbGwtQXR0cmlidXRlIGdlbGllZmVydC4KKyAgICBEZW1lbnRzcHJlY2hlbmQgYmVrb21tdCBtYW4gYWxsZSBNb2RzIGFsbGVyIFNraWxsLUF0dHJpYnV0ZSwgd2VubiBrZWlucworICAgIHZvbiBiZWlkZW0gYW5nZWdlYmVuIHdpcmQuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgKFtdKSwgZmFsbHMga2VpbmUgTW9kaWZpa2F0b3JlbiBnZWZ1bmRlbiB3dXJkZW4uCisgICAgSW4gYW5kZXJlbiBGYWVsbGVuIGlzdCBkaWUgRGF0ZW5zdHJ1a3R1ciBkZXMgTWFwcGluZ3Mgd2llIGZvbGd0OgorICAgIChbIGF0cm5hbWUxOiAoWyA8Y2FzdGVyPjogPHZhbHVlPjsgPGR1cmF0aW9uPiBdKSwKKyAgICAgICBhdHJuYW1lMjogKFsgPGNhc3Rlcj46IDx2YWx1ZT47IDxkdXJhdGlvbj4gXSkgXSkKKyAgICBEaWUgU2NobHVlc3NlbCBpbSBNYXBwaW5nIHNpbmQgZGllIGpld2VpbGlnZW4gU2tpbGwtQXR0cmlidXRlLCBkaWUgV2VydGUKKyAgICBkZXMgTWFwcGluZ3Mgc2luZCBlcm5ldXQgTWFwcGluZ3MsIHdlbGNoZSBhbHMgU2NobHVlc3NlbCBkaWUgT2JqZWt0ZQorICAgIGhhYmVuLCB3ZWxjaGUgZGllIE1vZHMgZ2VzZXR6dCBoYWJlbi4gSW4gZGllc2VtIE1hcHBpbmcgZ2Vob2VyZW4genUgamVkZW0KKyAgICBTY2hsdWVzc2VsIHp3ZWkgV2VydGUsIGRlbiBXZXJ0IGRlcyBNb2RpZmlrYXRvcnMgdW5kIGRpZSBBYmxhdWZ6ZWl0LgorICAgIDx2YWx1ZT4ga2FubiBoaWVyYmVpIGVpbiBpbnQgb2RlciBlaW5lIGNsb3N1cmUgc2VpbiwgPGR1cmF0aW9uPiBpc3QgZWluCisgICAgaW50LCA8Y2FzdGVyPiBpc3QgZWluIE9iamVrdC4KKyAgICBHZ2YuIGthbm4gZGFzIGlubmVyZSBNYXBwaW5nIG5hdHVlcmxpY2ggYXVjaCBtZWhyZXJlIE1vZGlmaWthdG9yZW4KKyAgICBlbnRoYWx0ZW4gKGFsc28gY2FzdGVyMSwgY2FzdGVyMiwgdXN3LikuCisKK0JFTUVSS1VOR0VOOgorCitCRUlTUElFTEU6CisgICAgIEVpbiBPYmpla3QgbW9lY2h0ZSBzZWluZW4gYmVzdGVoZW5kZW4gTW9kaWZpa2F0b3IgdW0gMjAgdW5kIGRpZQorICAgICBHdWVsdGlna2VpdCB1bSAxMyBlcmhvZWhlbi4KKyAgICAgbWFwcGluZyByZXMgPSBvYi0+UXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyKHRoaXNfb2JqZWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7U0FfREFNQUdFfSkgKTsKKyAgICAgaWYgKG1lbWJlcihyZXMsIFNBX0RBTUFHRSkgJiYgbWVtYmVyKHJlc1tTQV9EQU1BR0VdLCB0aGlzX29iamVjdCgpKSkgeworICAgICAgICAgIC8vIGFsdGVuIE1vZCB1ZWJlcnNjaHJlaWJlbiB1bmQgV2VydGUgZGFiZWkgYW5oZWJlbi4KKyAgICAgICAgICBvYi0+TW9kaWZ5U2tpbGxBdHRyaWJ1dGVNb2RpZmllcihTQV9EQU1BR0UsCisgICAgICAgICAgICAgIHJlc1tTQV9EQU1BR0VdW3RoaXNfb2JqZWN0KCksMF0gKyAyMCwKKyAgICAgICAgICAgICAgcmVzW1NBX0RBTUFHRV1bdGhpc19vYmplY3QoKSwxXSArIDEzICk7CisgICAgIH0KKyAgICAgZWxzZQorICAgICAgICAgIC8vIG5ldWVuIE1vZCBzZXR6ZW4uCisgICAgICAgICAgb2ItPk1vZGlmeVNraWxBdHRyaWJ1dGVNb2RpZmllcihTQV9EQU1BR0UsIDIwLCAxMyk7CisgICAgICAKKyAgICAgRWluIE9iamVrdCBoYXQgZGVuIEZsdWNoIGRlciB1bnByYWV6aXNlbiBTY2huZWxsaWdrZWl0LCB3ZWxjaGVyIFNBX0RBTUFHRQorICAgICByZWR1emllcnQsIHNvZmVybiBkYXMgTGViZXdlc2VuIGVpbmVuIHBvc2l0aXZlbiBNb2RpZmlrYXRvciBhdWYgU0FfU1BFRUQKKyAgICAgaGF0OgorICAgICBtYXBwaW5nIHJlcyA9IG9iLT5RdWVyeVNraWxsQXR0cmlidXRlTW9kaWZpZXIoMCwgKHtTQV9TUEVFRH0pICk7CisgICAgIGlmIChtZW1iZXIocmVzLCBTQV9TUEVFRCkgeworICAgICAgICAgaW50IHZhbCwgaW50IGR1cjsKKyAgICAgICAgIGZvcmVhY2gob2JqZWN0IGNhc3RlciwgaW50IHYsIGludCBkOiByZXNbU0FfU1BFRURdKSB7CisgICAgICAgICAgICAgLy8gZ3JvZXNzdGVuIE1vZCByYXVzZmluZGVuLCBkYWJlaSBrZWluZSBjbG9zdXJlcworICAgICAgICAgICAgIC8vIGJlcnVlY2tzaWNodGlnZW4uCisgICAgICAgICAgICAgaWYgKGludHAodikgJiYgdj52YWwpIHsKKyAgICAgICAgICAgICAgICAgdmFsPXY7CisgICAgICAgICAgICAgICAgIGR1cj1kOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGlmICh2YWwgPiAwKSB7CisgICAgICAgICAgICAgLy8gcG9zLiBNb2QgYXVmIFNBX1NQRUVEIGdlZnVuZGVuLCBlbnRzcHJlY2hlbmRlbiBuZWcuIE1vZCBhdWYKKyAgICAgICAgICAgICAvLyBTQV9EQU1BR0Ugc2V0emVuLCBkZXIgenVtIGdsZWljaGVuIFplaXRwdW5rdCB1bmd1ZWx0aWcgd2lyZAorICAgICAgICAgICAgIC8vIHdpZSBkZXIgTW9kIGF1ZiBTQV9TUEVFRC4KKyAgICAgICAgICAgICBpZiAob2ItPk1vZGlmeVNraWxsQXR0cmlidXRlKFNBX0RBTUFHRSwgLXZhbCwgZHVyKSA9PSBTQV9NT0RfT0spCisgICAgICAgICAgICAgICAgdGVsbF9vYmplY3Qob2IsICJ0b2xsZSBGbHVjaG1lbGR1bmcuIik7CisgICAgICAgICB9CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICBTa2lsbHMgTGVybmVuOiAgTGVhcm5Ta2lsbCwgTW9kaWZ5U2tpbGwsIExpbWl0QWJpbGl0eQorICAgICogTnV0enVuZzogICAgICBVc2VTcGVsbCwgVXNlU2tpbGwKKyAgICAqIEFiZnJhZ2VuOiAgICAgUXVlcnlTa2lsbCwgUXVlcnlTa2lsbEFiaWxpdHkKKyAgICAqIE1vZGlmaWthdGlvbjogTW9kaWZ5U2tpbGxBdHRyaWJ1dGUsIFF1ZXJ5U2tpbGxBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgIFJlbW92ZVNraWxsQXR0cmlidXRlTW9kaWZpZXIKKyAgICAgICogUHJvcGVydGllczogUF9TS0lMTF9BVFRSSUJVVEVTLCBQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTCisgICAgKiBzb25zdGlnOiAgICAgIHNwcnVjaGVybXVlZHVuZywgc2tpbGxfaW5mb19saXN0ZQorICAgICogUHJvcGVydGllczogICBQX05FV1NLSUxMUworCisxNC4wOC4yMDA4LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVNraWxsQm9udXMgYi9kb2MvbGZ1bi9RdWVyeVNraWxsQm9udXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0ZWY0NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5U2tpbGxCb251cwpAQCAtMCwwICsxLDY1IEBACitRdWVyeVNraWxsQm9udXMoKQorCitGVU5LVElPTjoKKyAgICAgaW50IFF1ZXJ5U2tpbGxCb251cyhvYmplY3QgY2FzdGVyLCBvYmplY3QgdGFyZ2V0LCBtYXBwaW5nIHNpbmZvKQorCitERUZJTklFUlQgSU46CisgICAgIGJlbGllYmlnZW4gT2JqZWt0ZW4KKworQVJHVU1FTlRFOgorICAgICBvYmplY3QgY2FzdGVyCisgICAgICAgICAgZGVyIEJlbnV0emVyIGVpbmVzIFNraWxscy9TcGVsbHMgKExlYmV3ZXNlbikKKyAgICAgb2JqZWN0IHRhcmdldAorICAgICAgICAgIGRhcyBaaWVsIGVpbmVzIFNraWxscy9TcGVsbHMgKGJlbGllYmlnZXMgT2JqZWt0IG9kZXIgMCkKKyAgICAgbWFwcGluZyBzaW5mbworICAgICAgICAgIGRhcyBTa2lsbGluZm9tYXBwaW5nCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gd2lyZCB2b24gZGVyIEdpbGRlIGRlcyBDYXN0ZXJzIGltIEVudmlyb25tZW50IHVuZCBnZ2YuCisgICAgIGF1Y2ggaW0gWmllbCBlaW5lcyBTa2lsbHMvU3BlbGxzIGdlcnVmZW4uCisgICAgIERpZSBHaWxkZSB1ZWJlcmdpYnQgbmViZW4gQ2FzdGVyIHVuZCBaaWVsIGVpbiBNYXBwaW5nIG1pdCBTa2lsbGluZm9zIChzLgorICAgICBTSSBLb25zdGFudGVuIGF1cyBuZXdfc2tpbGxzLmggZnVlciBEZXRhaWxzKSwgd2VsY2hlcyBhbGxlIHdlc2VudGxpY2hlbgorICAgICBJbmZvcm1hdGlvbmVuIHVlYmVyIGRlbiBiZW51dHp0ZW4gU2tpbGwvU3BlbGwgZW50aGFlbHQuCisKKyAgICAgUXVlcnlTa2lsbEJvbnVzKCkgbGllZmVydCBlaW5lbiBCb251cyAob2RlciBNYWx1cykgenVydWVjaywgZGVuIGRlcgorICAgICBBdWZydWZlciBhbHMgRmFrdG9yIGluIGRlciBCZXJlY2hudW5nIGRlcyBFZmZla3RzIGRlcyBTa2lsbHMKKyAgICAgYmVydWVja3NpY2h0aWdlbiBrYW5uIChhYmVyIG5pY2h0IG11c3MpLgorICAgICBEZXIgQm9udXMvTWFsdXMgd2lyZCBoaWVyYmVpIGFscyBnYW56emFobGlnZXIgMC4wMS1Qcm96ZW50d2VydCBhdWZnZWZhc3N0CisgICAgICgxMDAwMCA9PSAxMDAlID09IGtlaW5lIFZlcmFlbmRlcnVuZywgMSA9PSAwLjAxJSkuCisKKyAgICAgRGllc2UgRnVua3Rpb24ga2FubiBpbiBiZWxpZWJpZ2VuIE9iamVrdGVuIChyZS0pZGVmaW5pZXJ0IHdlcmRlbi4gSW0KKyAgICAgRmFsbGUgbW9iaWxlciBPYmpla3RlIG9kZXIgYW5oYWx0ZW5kZXIgRWZmZWt0ZSBpc3QgamVkb2NoIGVpbmUKKyAgICAgQmFsYW5jZWdlbmVobWlndW5nIGVyZm9yZGVybGljaCwgc29mZXJuIGthbXBmcmVsZXZhbnRlIFNraWxscyBiZWVpbmZsdXNzdAorICAgICB3ZXJkZW4uCisgICAgIEVpbmUgZmxhZWNoZW5kZWNrZW5kZSBSZWR1emllcnVuZyB2b24gU2tpbGxzL0dpbGRlbmZhZWhpZ2tlaXRlbiBpc3QKKyAgICAgZXhwbGl6aXQgX25pY2h0XyBlcnd1ZW5zY2h0IHVuZCBzb2xsIGF1ZiBlaW56ZWxuZSBSYWV1bWUgdW5kIE9iamVrdGUKKyAgICAgYmVzY2hyYWVua3Qgc2Vpbi4KKworQkVNRVJLVU5HRU46CisgICAgIERhcyBNYXBwaW5nIDxzaW5mbz4ga2FubiBpbiBkaWVzZXIgRnVua3Rpb24gZ2VhZW5kZXJ0IHdlcmRlbi4gRGllc2VzIGthbm4KKyAgICAgYWxsZXJkaW5ncyBzZWhyIHdlaXRyZWljaGVuZGUgRm9sZ2VuIGhhYmVuLCBzcGV6aWVsbCBiZWkgbWFuZ2VsbmRlbgorICAgICBLZW5udG5pc3NlbiB1ZWJlciBJbnRlcm5hIGRlcyBTa2lsbHN5c3RlbXMuIERhaGVyIGJpdHRlIHZvbiBBZW5kZXJ1bmdlbgorICAgICBhYnNlaGVuIGJ6dy4gdm9yaGVyIG1pdCBkZW0gamV3ZWlsaWdlbiBHaWxkZW5tYWdpZXIgdW5kL29kZXIgZGVyCisgICAgIEdpbGRlbmJhbGFuY2UgYWJrbGFlcmVuLgorICAgICBEaWUgQmVkZXV0dW5nIGRlciBXZXJ0ZSBpbiA8c2luZm8+IGthbm4gamUgbmFjaCBHaWxkZSB2YXJpaWVyZW4uIEltCisgICAgIFp3ZWlmZWxzZmFsbCBiaXR0ZSBiZWkgZGVuIGpld2VpbGlnZW4gR2lsZGVubWFnaWVybiBuYWNoZnJhZ2VuLiAKKyAgICAgRGllIEdpbGRlIGthbm4gZGllc2UgRnVua3Rpb24gcnVmZW4sIG11c3MgYWJlciBuaWNodC4gRWJlbnNvIGthbm4gc2llIGRhcworICAgICBFcmdlYm5pcyBiZXJ1ZWNrc2ljaHRpZ2VuLCBtdXNzIGFiZXIgbmljaHQuCisKK0JFSVNQSUVMRToKKyAgICAgSW4gZWluZW0gUmF1bSBzb2xsZW4gSGVpbHphdWJlciBiZXNvbmRlcnMgZWZmaXppZW50IHNlaW46CisgICAgIGludCBRdWVyeVNraWxsQm9udXMob2JqZWN0IGNhc3Rlciwgb2JqZWN0IHRhcmdldCwgbWFwcGluZyBzaW5mbykgeworICAgICAgICBpZiAocG9pbnRlcnAoc2luZm9bU0lfTUFHSUNfVFlQRV0pCisgICAgICAgICAgICAmJiBtZW1iZXIoc2luZm9bU0lfTUFHSUNfVFlQRV0sIE1UX0hFSUxVTkcpID4gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAxMjAwMCArIHJhbmRvbSgzMDAwKTsgLy8gYm9udXMgdm9uIDEyMC0xNTAlCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDEwMDAwOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIGdpbGRlbi1kb2t1CisgICAgIDxuZXdfc2tpbGxzLmg+CisKK0xFVFpURSBBZU5ERVJVTkc6CisxOS4wOC4yMDEzLCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVN0b3JhZ2VSb29tIGIvZG9jL2xmdW4vUXVlcnlTdG9yYWdlUm9vbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjJlNDBkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUXVlcnlTdG9yYWdlUm9vbQpAQCAtMCwwICsxLDIxIEBACitRdWVyeVN0b3JhZ2VSb29tKCkNCisNCitGdW5rdGlvbjoNCisgICAgc3RyaW5nIFF1ZXJ5U3RvcmFnZVJvb20oKQ0KKw0KK0RlZmluaWVydCBpbjoNCisgICAgL3N0ZC9yb29tL3Nob3ANCisNCitSdWVja2dhYmV3ZXJ0Og0KKyAgICBEYXRlaW5hbWUgZGVzIExhZ2VycywgaW4gZGVtIGRpZSBhdWZnZWthdWZ0ZW4gR2VnZW5zdGFlbmRlIGF1ZmJld2FocnQgDQorICAgIHdlcmRlbi4NCisNCitTaWVoZSBhdWNoOg0KKyAgICBGdW5rdGlvbmVuOg0KKyAgICAgIEFkZEZpeGVkT2JqZWN0KCksIFJlbW92ZUZpeGVkT2JqZWN0KCksIFNldFN0b3JhZ2VSb29tKCksIA0KKyAgICAgIFF1ZXJ5QnV5VmFsdWUoKSwgUXVlcnlCdXlGYWN0KCksIHNlbGxfb2JqKCksIGJ1eV9vYmooKQ0KKyAgICBQcm9wZXJ0aWVzOg0KKyAgICAgIFBfS0VFUEVSLCBQX01JTl9TVE9DSywgUF9TVE9SRV9DT05TVU1FDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorTGV0enRlIEFlbmRlcnVuZzogMjEuMDUuMjAxNCwgQnVnZml4DQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlUaW1lZEF0dHJNb2RpZmllciBiL2RvYy9sZnVuL1F1ZXJ5VGltZWRBdHRyTW9kaWZpZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkwODYwOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5VGltZWRBdHRyTW9kaWZpZXIKQEAgLTAsMCArMSw0MiBAQAorUXVlcnlUaW1lZEF0dHJNb2RpZmllcigpCitGVU5LVElPTjoKKyAgICAgbWFwcGluZyBRdWVyeVRpbWVkQXR0ck1vZGlmaWVyKHN0cmluZyBrZXkpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jCisKK0FSR1VNRU5URToKKyAgICAga2V5CS0JYXVzIFBfVElNRURfQVRUUl9NT0QgYWJ6dWZyYWdlbmRlciBFaW50cmFnCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGVyIHp1IGtleSBnZWhvZXJlbmRlIEVpbnRyYWcgaW4gUF9USU1FRF9BVFRSX01PRCB3aXJkIGFiZ2VmcmFndC4NCisNCitSVWVDS0dBQkVXRVJUOg0KKyAgICAgRWluIGxlZXJlcyBNYXBwaW5nIGltIEZhbGxlIGVpbmVzIGZlaGxlcmhhZnRlbiBrZXktQXJndW1lbnRlcyBvZGVyIAorICAgICBlaW5lcyBuaWNodCBleGlzdGVudGVuIEtleXMuDQorICAgICANCisgICAgIEFuc29uc3RlbiB3aXJkIGVpbiBNYXBwaW5nIGRlciBGb3JtDQorICAgICANCisgICAgICAgIChbDQorICAgICAgICAgICBLZXkgOiAoWyBNYXBwaW5nIG1pdCBkZW4gTW9kaWZpa2F0b3JlbiBdKSA7DQorICAgICAgICAgICAgICAgICBBYmxhdWZ6ZWl0IDsgQWJsYXVmb2JqZWt0IDsgTmFjaHJpY2h0ZW5lbXBmYWVuZ2VyIA0KKyAgICAgICAgXSkgICAgDQorDQorICAgICB6dXJ1ZWNrZ2VnZWJlbi5EaWUgQWJsYXVmemVpdCBpc3QgaGllcmJlaSBkaWUgWmVpdCBpbiBTZWt1bmRlbiBzZWl0DQorICAgICBkZW0gMS4gSmFuIDE5NzAsIDAuMDowIEdNVCwgZGFzIEFibGF1Zm9iamVrdCBpc3QgZGFzIE9iamVrdCBhbiBkZXNzZW4NCisgICAgIEV4aXN0ZW56IGRpZSBBdHRyaWJ1dHZlcmFlbmRlcnVuZ2VuIGdlYnVuZGVuIGlzdCB1bmQgZGVyDQorICAgICBOYWNocmljaHRlbmVtcGZhZW5nZXIgaXN0IGRhc2plbmlnZW4gT2JqZWt0ZSB3ZWxjaGVzIGltIEZhbGxlIA0KKyAgICAgZHVyY2ggZGVuIEF1ZnJ1ZiB2b24gIk5vdGlmeVRpbWVkQXR0ck1vZEV4cGlyZWQiIGJlbmFjaHJpY2h0aWd0IA0KKyAgICAgd2lyZCBzb2JhbGQgZGFzIEF0dHJpYnV0IGFiZ2VsYXVmZW4gaXN0LiANCisgICAgIERlciBGdW5rdGlvbiBOb3RpZnlUaW1lZEF0dHJNb2RFeHBpcmVkIHdpcmQgYWxzIEFyZ3VtZW50IGRlciBrZXkNCisgICAgIGRlciBhYmdlbGF1ZmVuZW4gQXR0cmlidXR2ZXJhZW5kZXJ1bmcgdWViZXJnZWJlbi4NCisgICAgIERhcyBNYXBwaW5nIGlzdCBlaW5lIEtvcGllIGRlciBPcmlnaW5hbGRhdGVuc3RydWt0dXIgenUgZGllc2VtIEtleS4NCisgICAgCitTSUVIRSBBVUNIOg0KKwlRdWVyeUF0dHJpYnV0ZSgpLCBRdWVyeVJlYWxBdHRyaWJ1dGUoKSwgUXVlcnlBdHRyaWJ1dGVPZmZzZXQoKSwNCisJU2V0QXR0cmlidXRlKCksIFNldFJlYWxBdHRyaWJ1dGUoKSwgVXBkYXRlQXR0cmlidXRlcygpLA0KKwlTZXRUaW1lZEF0dHJNb2RpZmllcigpLCBEZWxldGVUaW1lZEF0dHJNb2RpZmllcigpLA0KKwlQX0FUVFJJQlVURVMsIFBfQVRUUklCVVRFU19PRkZTRVRTLCBQX1RJTUVEX0FUVFJfTU9ELA0KKwlQX1hfQVRUUl9NT0QsIFBfTV9BVFRSX01PRCwgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0xhc3QgbW9kaWZpZWQ6IFR1ZSBKdWwgMjcgMjA6MDA6MjAgMjAwNCBieSBNdWFkaWINCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVRvdGFsUVAgYi9kb2MvbGZ1bi9RdWVyeVRvdGFsUVAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxNWNjMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5VG90YWxRUApAQCAtMCwwICsxLDI1IEBACitRdWVyeVRvdGFsUVAoKQorCitGVU5LVElPTjoKKyAgICBpbnQgUXVlcnlUb3RhbFFQKCkKKworREVGSU5JRVJUIElOOgorICAgIC9zZWN1cmUvcXVlc3RtYXN0ZXIuYworCitBUkdVTUVOVEU6CisgICAga2VpbmUKKworUlVFQ0tHQUJFV0VSVDoKKyAgICBBYmVudGV1ZXJwdW5rdGUgc2FlbXRsaWNoZXIgUXVlc3RzCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiBsaWVmZXJ0IGRpZSBBYmVudGV1ZXJwdW5rdGUgZGVyIHNhZW10bGljaGVyIGFrdGl2aWVydGVyCisgICAgUXVlc3RzIHp1cnVlY2suCisKK1NJRUhFIEFVQ0g6CisgICAgR2l2ZVF1ZXN0LCBRdWVyeVF1ZXN0LCAvc2VjdXJlL3F1ZXN0bWFzdGVyLmgsIFF1ZXJ5R3JvdXBlZEtleXMsCisgICAgUXVlcnlNYXhRUCwgUXVlcnlPcHRRUAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitadWxldHp0IGdlYWVuZGVydDogU2FtLCAyNS4gTm92IDIwMDAsIDE0OjA0OjI4IHZvbiBab29rLgorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9RdWVyeVVzZXIgYi9kb2MvbGZ1bi9RdWVyeVVzZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5YTBhNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5VXNlcgpAQCAtMCwwICsxLDUwIEBACitRdWVyeVVzZXIoKQorCitGVU5LVElPTjoKKyAgICAgcHVibGljIG9iamVjdCBRdWVyeVVzZXIoKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbnBjL2NvbWJhdC5jCisgICAgIC9zdGQvY2xvdGhpbmcvd2Vhci5jCisgICAgIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisgICAgIGFsbGUgT2JqZWt0ZSwgaW4gZGVuZW4gZXMgZGFydWViZXIgaGluYXVzIG5vZXRpZyBpc3QKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIExpZWZlcnQgZGVuIGFrdHVlbGxlbiBOdXR6ZXIgKExlYmV3ZXNlbikgZWluZXMgSXRlbXMgb2RlciBOUENzLgorICAgICAKKyAgICAgRGllc2UgRnVua3Rpb24gd2lyZCB6LkIuIHZvbiBnZXRfa2lsbGluZ19wbGF5ZXIoKSBiZW51dHp0LCB1bQorICAgICBoZXJhdXN6dWZpbmRlbiwgenUgd2VsY2hlbSBTcGllbGVyIGRlbm4gZGFzIE9iamVrdCBnZWhvZXJ0LCB3YXMgZGVuCisgICAgIHRvZWRsaWNoZW4gU2NoYWRlbiB2ZXJ1cnNhY2h0IGhhdC4KKworICAgICBJbSBGYWxsZSBlaW5lcyBOUENzIGlzdCBkaWVzIHN0YW5kYXJkbWFlc3NpZyBkZXIgU3BpZWxlciwgYmVpIGRlbSBkZXIKKyAgICAgTlBDIGFscyBIZWxmZXItTlBDIGVpbmdldHJhZ2VuIGlzdCAocy4gUmVnaXN0ZXJIZWxwZXJOUEMpLgorICAgICBJbSBGYWxsZSBlaW5lciBSdWVzdHVuZyBpc3QgZXMgZGFzIExlYmV3ZXNlbiwgd2VsY2hlcyBzaWUgZ2VyYWRlIHRyYWVndC4KKyAgICAgSW0gRmFsbGUgZWluZXIgV2FmZmUgaXN0IGVzIGRhcyBMZWJld2VzZW4sIHdlbGNoZXMgc2llIGdlcmFkZSBnZXp1ZWNrdAorICAgICBoYXQuCisgICAgIEFsbGUgYW5kZXJlbiBPYmpla3RlIGVudGhhbHRlbiBrZWluZW4gRGVmYXVsdCBmdWVyIGRpZXNlIEZ1bmt0aW9uLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEYXMgbnV0emVuZGUgTGViZXdlc2VuLCBmYWxscyBlcyBlcm1pdHRlbHQgd2VyZGVuIGtvbm50ZSwgc29uc3QgMC4KKworQkVNRVJLVU5HRU46CisgICAgIFNvbGx0ZSBpbiBhbGxlbiBPYmpla3RlbiBkZWZpbmllcnQgd2VyZGVuLCB3ZWxjaGUgTGViZXdlc2VuIFNjaGFkZW4KKyAgICAgenVmdWVnZW4sIG9obmUgZGFzcyBkYXMgdmVydXJzYWNoZW5kZSBMZWJld2VzZW4gZGFiZWkgYWxzIEZlaW5kIGltCisgICAgIERlZmVuZCgpIGFuZ2ViZW4gd2lyZC4KKyAgICAgRGVyIGdlbGllZmVydGUgTnV0emVyIG11c3MgZXhwbGl6aXQga2VpbiBTcGllbGVyIHNlaW4uIEVzIHdhZXJlIHouQi4KKyAgICAgbW9lZ2xpY2gsIGRhc3Mgdm9uIGVpbmVtIFNwaWVsZXIga29udHJvbGxpZXJ0ZXIgTlBDIGVpbmVuIEJ1bWVyYW5nIG51dHp0LgorCitCRUlTUElFTEU6CisgICAgIEVpbiB2b24gZWluZW0gU3BpZWxlciBiZXNjaHdvcmVuZXMgV2VzZW4gd2lyZnQgZWluZW4gQnVtZXJhbmcgbmFjaCBlaW5lbQorICAgICBGZWluZC4KKyAgICAgRGFubiBsaWVmZXJ0IFF1ZXJ5VXNlcigpIGltIEJ1bWVyYW5nIGRlbiBOUEMgYWxzIE51dHplciB1bmQKKyAgICAgUXVlcnlVc2VyKCkgaW0gTlBDIHdpZWRlcnVtIGRlbiBTcGllbGVyLgorICAgICAKK1NJRUhFIEFVQ0g6CisgICAgIFJlZ2lzdGVySGVscGVyTlBDKCksIGdldF9raWxsZXJfcGxheWVyKCkKKyAgICAgUF9XT1JOLCBQX1dJRUxERUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEyLjExLjIwMTMsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUXVlcnlWYWxpZE9iamVjdCBiL2RvYy9sZnVuL1F1ZXJ5VmFsaWRPYmplY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyMmQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1F1ZXJ5VmFsaWRPYmplY3QKQEAgLTAsMCArMSw0NyBAQAorUXVlcnlWYWxpZE9iamVjdCgpCisKK0ZVTktUSU9OOgorICAgICBwdWJsaWMgaW50IFF1ZXJ5VmFsaWRPYmplY3Qoc3RyaW5nIG9uYW1lKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3ZpcnR1YWwvdl9jb21waWxlci5jCisKK0FSR1VNRU5URToKKyAgICAgb25hbWUKKyAgICAgICBPYmpla3RuYW1lLCBkZXIgZ2VwcnVlZnQgd2VyZGVuIHNvbGwgKGtvbXBsZXR0ZXIgUGZhZCBtaXQgLyBhbSBBbmZhbmcpIAorCitSVWVDS0dBQkVXRVJUOgorICAgICA8PTAgLSBmYWxscyBWQyBuaWNodCB6dXN0YWVuZGlnIGlzdC4KKyAgICAgPjAgLSBmYWxscyBkZXIgVkMgc2ljaCBmdWVyIGRhcyBPYmpla3QgenVzdGFlbmRpZyBlcmtsYWVydC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBVZWJlciBkaWUgRnVua3Rpb24gbGFlc3N0IHNpY2ggaGVyYXVzZmluZGVuLCBvYiBlaW4gVkMgc2ljaCBmdWVyIGRhcworICAgICBnZXd1ZW5zY2h0ZSBPYmpla3QgenVzdGFlbmRpZyBmdWVobHQuIERhYmVpIHdpcmQgVmFsaWRhdGUoKSwKKyAgICAgUF9DT01QSUxFUl9QQVRILCBOb1BhcmFPYmplY3RzKCkgdW5kIFBfUEFSQSBpbSBWQyBhdXNnZXdlcnRldDoKKyAgICAgMS4gWnVlcnN0IHdpcmQgbWl0IFZhbGlkYXRlKCkgZ2VwcnVlZnQsIG9iIGRlciBGaWxlbmFtZSAob2huZSBQZmFkKSBvayBpc3QuCisgICAgIDIuIHdpcmQgZ2VndWNrdCwgb2IgZGFzIGFuZ2VmcmFndGUgT2JqZWt0IGltIHJpY2h0aWdlbiBQZmFkIGxpZWd0IAorICAgICAgICAoUF9DT01QSUxFUl9QQVRIKS4KKyAgICAgMy4gd2VubiBkYXMgYW5nZWZyYWd0ZSBPYmpla3QgZWluIFBhcmEtT2JqZWt0IGlzdDoKKyAgICAgICBhKSB3aXJkIE5vUGFyYU9iamVjdHMoKSBnZXBydWVmdCwgd2VubiBkYXMgIT0wIGlzdCwgc2luZCBnYXIga2VpbmUgUGFyYS0KKyAgICAgICAgICBPYmpla3RlIGVybGF1YnQuCisgICAgICAgYikgd2lyZCBQX1BBUkEgX2ltIFZDXyBhYmdlZnJhZ3QsIGRvcnQga2FubiBtYW4gZWluIEFycmF5IGFsbGVyIAorICAgICAgICAgIGVybGF1YnRlbiBQYXJhLURpbWVuc2lvbmVuIHJlaW5zY2hyZWliZW4uIEZ1ZXIgYWxsZSBhbmRlcmVuIGVya2xhZXJ0IAorICAgICAgICAgIHNpY2ggZGVyIFZDIGZ1ZXIgbmljaHQgenVzdGFlbmRpZy4gV2VubiBQX1BBUkEgbmljaHQgZ2VzZXR6dCBpc3QsIAorICAgICAgICAgIHNpbmQgYWxsZSBlcmxhdWJ0LiBFaW4gbGVlcmVzIEFycmF5ICh7fSkgd3VlcmRlIGVpbmVtIAorICAgICAgICAgIE5vUGFyYU9iamVjdHMoKSB7cmV0dXJuIDE7fSBlbnRzcHJlY2hlbi4KKworQkVNRVJLVU5HRU46CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgdm9tIG1vdmUgYWJnZWZyYWd0LiBCaXR0ZSBhdWYgamVkZW4gRmFsbCBQX1BBUkEgb2RlcgorICAgICBOb1BhcmFPYmplY3RzKCkgcGFzc2VuZCBkZWZpbmllcmVuLCBzb25zdCBidWdndHMuCisKKyAgICAgV2VubiBqZW1hbmQgbWl0IGRlbSBvYmVuIGJlc2NocmllYmVuIFN0YW5kYXJkdmVyaGFsdGVuIG5pY2h0IGdsdWVja2xpY2gKKyAgICAgaXN0LCBrYW5uIG1hbiBkaWUgRnVua3Rpb24gcGFzc2VuZCB1ZWJlcnNjaHJlaWJlbi4KKworCitTSUVIRSBBVUNIOgorICAgICB2aXJ0dWFsX2NvbXBpbGVyCisgICAgIEN1c3RvbWl6ZU9iamVjdCgpLCBWYWxpZGF0ZSgpLCBOb1BhcmFPYmplY3RzKCksIAorICAgICBQX0NPTVBJTEVSX1BBVEgsIFBfUEFSQQorICAgICAvc3RkL3ZpcnR1YWwvdl9jb21waWxlci5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyMS4xMC4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZWNlaXZlTXNnIGIvZG9jL2xmdW4vUmVjZWl2ZU1zZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDQzYmNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVjZWl2ZU1zZwpAQCAtMCwwICsxLDI1MCBAQAorUmVjZWl2ZU1zZygpCisKK3B1YmxpYyB2YXJhcmdzIGludCBSZWNlaXZlTXNnKHN0cmluZyBtc2csIGludCBtc2dfdHlwLCBzdHJpbmcgbXNnX2FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBtc2dfcHJlZml4LCBtaXhlZCBvcmlnaW4pCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9jb21tLmMKKyAgICAvc3RkL25wYy9jb21tLmMKKyAgICAvc3RkL3BsYXllci9jb21tLmMKKyAgICAvc3RkL3Jvb20vaXRlbXMuYworCitBUkdVTUVOVEU6CisgICAgc3RyaW5nIG1zZworICAgICAgU3RyaW5nIG1pdCBkZXIgdWViZXJtaXR0ZWx0ZW4gTmFjaHJpY2h0LiBNdXNzIG5pY2h0IHVtZ2Vicm9jaGVuIHNlaW4sCisgICAgICBkYSBSZWNlaXZlTXNnKCkgZGFzIGViZW5mYWxscyBlcmxlZGlndC4KKyAgICBpbnQgbXNnX3R5cAorICAgICAgTmFjaHJpY2h0ZW50eXAoZW4pIGZ1ZXIgRmlsdGVydW5nIHVuZCBGbGFncyBmdWVyIEJlaGFuZGx1bmcvVW1icnVjaC4KKyAgICAgIFNpZWhlIHVudGVuIGZ1ZXIgbWl0IHwga29tYmluaWVyYmFyZSBLb25zdGFudGVuLgorICAgIHN0cmluZyBtc2dfYWN0aW9uIChvcHRpb25hbCkKKyAgICAgIEF1c2xvZXNlbmRlIEFrdGlvbiwgd2lyZCBhdWNoIGZ1ZXIgSWdub3JpZXJlbiB2ZXJ3ZW5kZXQuCisgICAgICBEZWZhdWx0IGlzdCBxdWVyeV92ZXJiKCkuIFNpZWhlIHVudGVuIGZ1ZXIgYWx0ZXJuYXRpdmUgS29uc3RhbnRlbi4KKyAgICBzdHJpbmcgbXNnX3ByZWZpeCAob3B0aW9uYWwpCisgICAgICBTdHJpbmcsIHdlbGNoZXIgZ2dmLiBpbSBicmVha19zdHJpbmcoKSBhbHMgaW5kZW50IHZlcndlbmRldCB3aXJkLgorICAgICAgRGVmYXVsdCBpc3QgMCAoa2VpbiBJbmRlbnQpCisgICAgbWl4ZWQgb3JpZ2luICg8b2JqZWN0PikgKG9wdGlvbmFsKQorICAgICAgRGFzIGRpZSBNZWxkdW5nIGF1c2xvZXNlbmRlIE9iamVrdCwgd2lyZCBmdWVyIElnbm9yaWVyZW4gdmVyd2VuZGV0LgorICAgICAgRGVmYXVsdDogcHJldmlvdXNfb2JqZWN0KCkKKworQkVTQ0hSRUlCVU5HOgorICAgIFJlY2VpdmVNc2coKSB3aXJkIGJlbnV0enQsIHVtIGVpbmVtIExlYmV3ZXNlbiBlaW5lIE5hY2hyaWNodCB6dSBzZW5kZW4uCisgICAgRGFiZWkgcnVmdCBlcyBkYXMgc29uc3QgdWVibGljaGUgdGVsbF9vYmplY3QoKSBmdWVyIFNwaWVsZXIgYnp3LgorICAgIGNhdGNoX3RlbGwoKSBpbSBOUEMgYXVmLgorCisgICAgR2VyYWRlIGZ1ZXIgTmFjaHJpY2h0ZW4gYW4gU3BpZWxlciBiaWV0ZXQgZGllIE1ldGhvZGUgd2VpdGVyZSBGZWF0dXJlcywKKyAgICBkaWUgYmlzaGVyIHNvbnN0IGhhZW5kaXNjaCB6dSBpbXBsZW1lbnRpZXJlbiB3YXJlbjoKKyAgICAxKSBQcnVlZnVuZyBhdWYgRW1wZmFuZ2JhcmtlaXQsIGplIG5hY2ggJ21zZ190eXAnLCB6QgorICAgICAgIE1UX0xPT0sgbnVyIGFuIE5pY2h0YmxpbmRlCisgICAgICAgTVRfTElTVEVOIG51ciBhbiBOaWNodHRhdWJlCisgICAgICAgTVRfREVCVUcgbnVyIGFuIE1hZ2llci9UZXN0c3BpZWxlcgorICAgIDIpIFBydWVmZW4gYXVmIElnbm9yaWVyZW4gdm9uCisgICAgICAgLSBBa3Rpb24gKCdtc2dfYWN0aW9uJykKKyAgICAgICAgIC0gbWl0ICdtc2dfYWN0aW9uJyB8fCBxdWVyeV92ZXJiKCkKKyAgICAgICAtIFVyaGViZXIgKCdvcmlnaW4nKQorICAgICAgICAgLSBmdWVyIHNlbmRlbmRlIFNwaWVsZXIgbWl0IG9yaWdpbi0+cXVlcnlfcmVhbG5hbWUoKQorICAgICAgICAgLSBmdWVyIHNlbmRlbmRlIE5QQ3MgbWl0IG9yaWdpbi0+TmFtZShSQVcpKQorICAgIDMpIFNwZWljaGVydW5nIGluIGRlciB0bWhpc3QgKFR5cCBNVF9DT01NKQorICAgIDQpIFNwZWljaGVydW5nIGltIEtvYm9sZCAoVHlwIE1UX0NPTU0gKyBha3RpdmVyIEtvYm9sZCkKKyAgICA1KSBVbWJyZWNoZW4gdW50ZXIgQmVydWVja3NpY2h0aWd1bmcgdm9uIGluZGVudCwgJ21zZ190eXAnLUZsYWdzCisgICAgICAgZnVlciBVbWJydWNoIHVuZCBQX1BSRVBFTkRfQlMKKworICAgIFJhZXVtZSBkZWZpbmllcmVuIHN0YW5kYXJkbWFlc3NpZyBlYmVuZmFsbHMgZWluIFJlY2VpdmVNc2coKSwgd2VsY2hlcyBpbgorICAgIGplZGVtIE9iamVrdCBpbSBSYXVtIFJlY2VpdmVNc2coKSBtaXQgZGVuIHVlYmVyZ2ViZW5lbiBBcmd1bWVudGVuIGF1ZnJ1ZnQuCisgICAgSW4gZGllc2VtIEZhbGwgaXN0IGRlciBSdWVja2dhYmUgZGVyIGtsZWluc3RlIHZvbiBhbGxlbiBnZXJ1ZmVuZW4KKyAgICBSZWNlaXZlTXNnKCkgenVydWVja2dlbGllZmVydGUgV2VydC4KKyAgICAKK1JVZUNLR0FCRVdFUlQ6CisgICAgPiAwIGZ1ZXIgRXJmb2xnLCA8IDAgZnVlciBNaXNzZXJmb2xnLCBzLnUuCisgICAgTVNHX0RFTElWRVJFRCAgICBiZWkgZXJmb2xncmVpY2hlciBadXN0ZWxsdW5nCisgICAgTVNHX0JVRkZFUkVEICAgICBiZWkgWndpc2NoZW5zcGVpY2hlcnVuZyBkdXJjaCBkZW4gS29ib2xkCisKKyAgICBNU0dfRkFJTEVEICAgICAgIG5pY2h0IG5hZWhlciBzcGV6aWZpemllcnRlciBGZWhsZXIgYmVpIFp1c3RlbGx1bmcKKyAgICBNU0dfSUdOT1JFRCAgICAgIE5hY2hyaWNodCB3dXJkZSBpZ25vcmllcnQgKEFic2VuZGVyLCBvcmlnaW4pCisgICAgTVNHX1ZFUkJfSUdOICAgICBOYWNocmljaHQgd3VyZGUgaWdub3JpZXJ0IChLb21tYW5kb3ZlcmIsIG1zZ19hY3Rpb24pCisgICAgTVNHX01VRF9JR04gICAgICBBYnNlbmRlbmRlcyBNdWQgd3VyZGUgaWdub3JpZXJ0LgorICAgIE1TR19TRU5TRV9CTE9DSyAgUGFzc2VuZGUgU2lubmUgZGVzIEVtcGZhZW5nZXIgc2luZCBibG9ja2llcnQgKHouQi4KKyAgICAgICAgICAgICAgICAgICAgIGJsaW5kLCB0YXViKQorICAgIE1TR19CVUZGRVJfRlVMTCAgS29ib2xkIGthbm4gc2ljaCBuaWNodHMgbWVociBtZXJrZW4KKworQkVNRVJLVU5HRU46CisgICAgRnVlciBzYWVtdGxpY2hlIEFsdGVybmF0aXZtZWxkdW5nZW4gaW0gRmFsbGUgZWluZXIgbmljaHQgZXJmb2xncmVpY2gKKyAgICB6dWdlc3RlbGx0ZW4gTmFjaHJpY2h0IGlzdCBkZXIgQXVmcnVmZXIgdm9uIFJlY2VpdmVNc2coKSB2ZXJhbnR3b3J0bGljaC4KKworICAgIE5QQ3M6CisgICAgKiBSZWNlaXZlTXNnKCkgcnVmdCB6d2Vja3MgQWJ3YWVydHNrb21wYXRpYmlsaXRhZXQgY2F0Y2hfdGVsbCgpIGF1ZgorICAgICogZW1wZm9obGVuIGlzdCwgaW4gTlBDcyBudW4gUmVjZWl2ZU1zZygpIHp1IHVlYmVyc2NocmVpYmVuLgorICAgICAgKiBjYXRjaF90ZWxsKCkgbXVzcyB3ZWl0ZXJoaW4gZnVlciBhbmRlcmUgdGVsbF9vYmplY3QoKQorICAgICAgICB1ZWJlcnNjaHJpZWJlbiAgd2VyZGVuCisKK0JFSVNQSUVMRToKKyAgICAjMS4xIE5hY2hyaWNodCBhbiBlaW5lbiBTcGllbGVyLCB6QiBpbiBkZXIgV3Vlc3RlCisgICAgdGhpc19wbGF5ZXIoKS0+UmVjZWl2ZU1zZygiRGllIFNvbm5lIGJyZW5udCBkaXIgYXVmIGRlbiBLb3BmLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVF9GRUVMfE1UX0xPT0spOworCisgICAgIzEuMiBOYWNocmljaHQgYW4gZWluZW4gU3BpZWxlciB2b24gZWluZW0gTlBDIG1pdCBJbmRlbnQKKyAgICAvLyBiZWkgYWt0aXZlbSBFZGl0b3IrS29ib2xkIGxhbmRldCBkaWVzZXIgVGV4dCBhdWNoIGltIEtvYm9sZAorICAgIHRoaXNfcGxheWVyKCktPlJlY2VpdmVNc2coIkR1IGhhdXN0IGphIGdhbnogc2Nob2VuIHJlaW4hIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UX0NPTU18TVRfRkFSfE1TR19ET05UX1NUT1JFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFfVEVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmtzaGF0IHRlaWx0IGRpciBtaXQ6ICIpOworCisgICAgIzEuMyBOYWNocmljaHQgYW4gZWluZW4gU3BpZWxlciBtaXQgRmFsbGJhY2stS2Fza2FkZQorICAgIC8vIEFjaHR1bmcsIGJlaSBNVF9DT01NIG9kZXIgSWdub3JpZXJlbiBnaWJ0IGVzIG5hdHVlcmxpY2ggYXVjaAorICAgIC8vIE1pc3NlcmZvbGdzLVJ1ZWNrZ2FiZW4uIEJlaSBlaW5lbSBub3JtYWxlbiBLb21tYW5kbyB3aWUgZGllc2VtCisgICAgLy8gaGllciBpc3QgZGFzIHVucHJvYmxlbWF0aXNjaCB1bmQgZGFoZXIgc2lubnZvbGw6CisgICAgaWYodGhpc19wbGF5ZXIoKS0+UmVjZWl2ZU1zZygKKyAgICAgICAgICJEdSBkcnVlY2tzdCBkZW4gS25vcGYgdW5kIGVzIG9lZmZuZXQgc2ljaCBrbmlyc2NoZW5kICIKKyAgICAgICAgICJlaW4ga2xlaW5lcyBGYWNoIGluIGRlciBXYW5kLiIsIE1UX0xPT0spIDwgTVNHX0RFTElWRVJFRCAmJgorICAgICAgIHRoaXNfcGxheWVyKCktPlJlY2VpdmVNc2coCisgICAgICAgICAiRHUgZHJ1ZWNrc3QgZGVuIEtub3BmIHVuZCBpcmdlbmQgZXR3YXMgc2NoZWludCBzaWNoICIKKyAgICAgICAgICJrbmlyc2NoZW5kIHp1IG9lZmZuZW4uIERhcyBHZXJhZXVzY2gga2FtIHZvbiBkZXIgV2FuZC4iLAorICAgICAgICAgTVRfTElTVEVOKSA8IE1TR19ERUxJVkVSRUQpIC8vIGxlaWRlciBibGluZCBVTkQgdGF1YiAuLi4gYWxzbzoKKyAgICAgIHRoaXNfcGxheWVyKCktPlJlY2VpdmVNc2coCisgICAgICAgICJEdSBkcnVlY2tzdCBkZW4gS25vcGYgdW5kIGlyZ2VuZCBldHdhcyBzY2hlaW50IHp1IHBhc3NpZXJlbiwgIgorICAgICAgICAiYWJlciBsZWlkZXIgc2llaHN0IHVuZCBob2Vyc3QgZHUgbmljaHRzLiIsIE1UX0ZFRUwpOworCisKKyAgICAjMi4xIEltIE5QQyBhbHMgRW1wZmFlbmdlciBhdWYgZWluIFRNIHJlYWdpZXJlbgorICAgIHB1YmxpYyB2YXJhcmdzIGludCBSZWNlaXZlTXNnKHN0cmluZyBtc2csIGludCBtc2dfdHlwLCBzdHJpbmcgbXNnX2FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgbXNnX3ByZWZpeCwgbWl4ZWQgb3JpZ2luKSB7CisgICAgICBpbnQgcmV0ID0gTVNHX0RFTElWRVJFRDsgIC8vIERlZmF1bHQKKworICAgICAgLy8gZWluZSBPT0MtS29tbXVuaWthdGlvbj8KKyAgICAgIGlmKG1zZ190eXAmTVRfQ09NTSkgeworICAgICAgICBpZihzdHJzdHIobXNnLCAiaGlsZmUiKT49MCkKKyAgICAgICAgICBpZihlbnZpcm9ubWVudChvcmlnaW4pPT1lbnZpcm9ubWVudCgpKSB7CisgICAgICAgICAgICBvcmlnaW4tPlJlY2VpdmVNc2coIkljaCB3ZXJkIGRpciBnbGVpY2ggaGVsZmVuISIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRfQ09NTXxNU0dfRE9OVF9TVE9SRSwgTUFfVEVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJrc2hhdCB0ZWlsdCBkaXIgbWl0OiAiKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3JpZ2luLT5SZWNlaXZlTXNnKCJIaWxmIGRpciBzZWxic3QsIGRhbm4gaGlsZnQgZGlyIEdvdHQhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVF9DT01NfE1UX0ZBUnxNU0dfRE9OVF9TVE9SRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQV9URUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmtzaGF0IHRlaWx0IGRpciBtaXQ6ICIpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiguLi4pCisgICAgICAgIFsuLi5dCisgICAgICB9IGVsc2UgaWYobXNnX3R5cCZNVF9MSVNURU4gJiYgbXNnX2FjdGlvbj09TUFfU0FZKSB7CisgICAgICAgIFsuLi5dCisgICAgICB9CisKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisKKyAgICAjMy4xIGFscyBTZW5kZXIgYW4gdmllbGUsIFZhcmlhbnRlIG1pdCBlaWdlbmVtIGZpbHRlcgorICAgIC8vIEFjaHR1bmc6IHNpZWhlIDMuMy4gc2VuZF9yb29tKCkgbG9lc3QgdmllbGVzLgorICAgIC8vIExpdmluZyBuaWNrdCBudXIgc2VpbmVuIE5pY2h0Z2VnbmVybiB6dQorICAgIG9iamVjdCAqYWxsID0gZmlsdGVyKGFsbF9pbnZlbnRvcnkoZW52aXJvbm1lbnQodGhpc19wbGF5ZXIoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICMnbGl2aW5nKSAtICh7dGhpc19wbGF5ZXIoKX0pOworICAgIGFsbCAtPSB0aGlzX3BsYXllcigpLT5QcmVzZW50RW5lbWllcygpOworICAgIGFsbC0+UmVjZWl2ZU1zZyh0aGlzX3BsYXllcigpLT5OYW1lKCkrCisgICAgICAgICAgICAgICAgICAgICIgbmlja3QgZGlyIHZlcnN0b2hsZW4genUgdW5kIHNjaGVpbnQgYmVyZWl0LiIsCisgICAgICAgICAgICAgICAgICAgIE1UX0xPT0ssIE1BX0VNT1RFKTsKKworICAgICMzLjIgYWxzIFNlbmRlciBhbiB2aWVsZSwgVmFyaWFudGUgbWl0IGVpbnplbG5lbSBJdGVyaWVyZW4KKyAgICAvLyBBY2h0dW5nOiBzaWVoZSAzLjMuIHNlbmRfcm9vbSgpIGxvZXN0IHZpZWxlcy4KKyAgICAvLyBMaXZpbmcgdHJpbmt0IGV0d2FzLCBqZWRlciBpbSBSYXVtIHNvbGwgZXMgc2VoZW4gb2RlciBob2VyZW4KKyAgICBvYmplY3Qgb2IgPSBmaXJzdF9pbnZlbnRvcnkoZW52aXJvbm1lbnQodGhpc19wbGF5ZXIoKSkpOworICAgIGRvIHsKKyAgICAgIGlmKGxpdmluZyhvYikgJiYgb2IhPXRoaXNfcGxheWVyKCkpCisgICAgICAgIG9iLT5SZWNlaXZlTXNnKHRoaXNfcGxheWVyKCktPk5hbWUoKSsiIHRyaW5rdCBlaW5lbiBTY2huYXBzIGF1cy4iLAorICAgICAgICAgICAgICAgICAgICAgICBNVF9MT09LfE1UX0xJU1RFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgTUFfRFJJTkspOworICAgICAgb2IgPSBuZXh0X2ludmVudG9yeShvYik7CisgICAgfSB3aGlsZShvYik7CisKKyAgICAjMy4zIGFscyBTZW5kZXIgYW4gdmllbGUsIFZhcmlhbnRlIG1pdCBzZW5kX3Jvb20KKyAgICAvLyBMaXZpbmcgZ3J1ZXNzdCBzZWluZSBGcmV1bmRlCisgICAgLy8gc2VuZF9yb29tKCkgcnVmdCBSZWNlaXZlTXNnIG1pdCBhbGxlbiBlbnRzcHJlY2hlbmRlbiBQYXJhbWV0ZXJuCisgICAgb2JqZWN0ICpleGNsdWRlID0gdGhpc19wbGF5ZXIoKS0+UHJlc2VudEVuZW1pZXMoKTsKKyAgICBzZW5kX3Jvb20odGhpc19vYmplY3QoKSwKKyAgICAgICAgICAgICAgdGhpc19wbGF5ZXIoKS0+TmFtZSgpKyIgZ3J1ZXNzdCBkaWNoLiIsCisgICAgICAgICAgICAgIE1UX0xPT0t8TVRfTElTVEVOLAorICAgICAgICAgICAgICBNQV9FTU9URSwKKyAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgZXhjbHVkZSk7CisKKyAgICAjMy40IGFscyBTZW5kZXIgYW4gdmllbGUgbWl0IHNlbmRfcm9vbSB1bmQgUmVjZWl2ZU1zZygpCisgICAgLy8gTGl2aW5nIGdydWVzc3Qgc2VpbmUgRnJldW5kZSwgc2VpbmUgRmVpbmRlIHNlaGVuIGRhcworICAgIC8vIHNlbmRfcm9vbSgpIHJ1ZnQgUmVjZWl2ZU1zZyBtaXQgYWxsZW4gZW50c3ByZWNoZW5kZW4gUGFyYW1ldGVybgorICAgIG9iamVjdCAqZXhjbHVkZSA9IHRoaXNfcGxheWVyKCktPlByZXNlbnRFbmVtaWVzKCk7CisgICAgc2VuZF9yb29tKHRoaXNfb2JqZWN0KCksCisgICAgICAgICAgICAgIHRoaXNfcGxheWVyKCktPk5hbWUoKSsiIGdydWVzc3QgZGljaC4iLAorICAgICAgICAgICAgICBNVF9MT09LfE1UX0xJU1RFTiwgTUFfRU1PVEUsIDAsIGV4Y2x1ZGUpOworICAgIGV4Y2x1ZGUtPlJlY2VpdmVNZXNzYWdlKAorICAgICAgdGhpc19wbGF5ZXIoKS0+TmFtZSgpKyIgZ3J1ZXNzdCwgYWJlciBuaWNodCBkaWNoLiIsCisgICAgICBNVF9MT09LfE1UX0xJU1RFTiwgTUFfRU1PVEUpOworCitLT05TVEFOVEVOIEZVRVIgUEFSQU1FVEVSOgorICAgIFNhZW10bGljaCBpbiAiL3N5cy9saXZpbmcvY29tbS5oIi4gSGllciBuaWNodCBub3R3ZW5kaWdlcndlaXNlCisgICAgaW1tZXIgYWt0dWVsbCBvZGVyIHZvbGxzdGFlbmRpZy4KKworICAgIDxtc2dfdHlwPgorICAgICAgTVRfVU5LTk9XTiAgICAgIHVuc3Blei4gTmFjaHJpY2h0ZW50eXAgKG5pY2h0IHZlcndlbmRlbikuIEVzIHdpcmQKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJzdWNodCwgYXVmZ3J1bmQgPG1zZ19hY3Rpb24+IGRlbiBUeXAgenUgZXJyYXRlbi4KKyAgICAgIE1UX0xPT0sgICAgICAgICBhbGxlcywgd2FzIG1hbiBzaWVodAorICAgICAgTVRfTElTVEVOICAgICAgIGFsbGVzLCB3YXMgbWFuIGhvZXJ0CisgICAgICBNVF9GRUVMICAgICAgICAgYWxsZXMsIHdhcyBtYW4gZnVlaGx0CisgICAgICBNVF9UQVNURSAgICAgICAgYWxsZXMsIHdhcyBtYW4gc2NobWVja3QKKyAgICAgIE1UX1NNRUxMICAgICAgICBhbGxlcywgd2FzIG1hbiByaWVjaHQKKyAgICAgIE1UX01BR0lDICAgICAgICBhbGxlIHNvbnN0aWdlbiAodWViZXJzaW5ubGljaGVuKSBXYWhybmVobXVuZ2VuCisgICAgICBNVF9OT1RJRklDQVRJT04gU3RhdHVzbWVsZHVuZ2VuLCBLb21tYW5kb2Jlc3RhZXRpZ3VuZ2VuCisgICAgICBNVF9DT01NICAgICAgICAgYWxsZSBPT0MtS29tbXVuaWthdGlvbiwgZC5oLiBuaWNodCBkdXJjaCBvLmcuIFNpbm5lCisgICAgICAgICAgICAgICAgICAgICAgYWJnZWRlY2t0LgorICAgICAgTVRfRkFSICAgICAgICAgIGFsbGVzLCB3YXMgYXVzIGRlciBGZXJuZSAvIGVpbmVtIGFuZGVyZW4gUmF1bSBrb21tdC4KKyAgICAgICAgICAgICAgICAgICAgICBtdXNzIG1pdCBtaW4uIGVpbmVtIGFuZGVyZW4gVHlwIGtvbWJpbmllcnQgd2VyZGVuCisgICAgICBNVF9ERUJVRyAgICAgICAgRGVidWdtZWxkdW5nZW4sIHNlaGVuIG51ciBNYWdpZXIgaW0gTWFnaWVybW9kdXMKKyAgICAgIE1UX05FV1MgICAgICAgICBNYWlscyAmIE1QQQorCisgICAgICBNU0dfRE9OVF9CVUZGRVIgTmFjaHJpY2h0IGRhcmYgbmljaHQgaW0gS29ib2xkIGdlc3BlaWNoZXJ0IHdlcmRlbgorICAgICAgTVNHX0RPTlRfU1RPUkUgIE5hY2hyaWNodCBkYXJmIG5pY2h0IGluIGRpZSBDb21tLUhpc3RvcnkKKyAgICAgIE1TR19ET05UX1dSQVAgICBOYWNocmljaHQgbmljaHQgcGVyIGJyZWFrX3N0cmluZyB1bWJyZWNoZW4KKyAgICAgIE1TR19ET05UX0lHTk9SRSBOYWNocmljaHQga2FubiBuaWNodCBpZ25vcmllcnQgd2VyZGVuCisKKyAgICAgIE1TR19CU19MRUFWRV9MRlMgICAgd2llIEJTX0xFQVZFX01ZX0xGUyBmdWVyIGJyZWFrX3N0cmluZygpCisgICAgICBNU0dfQlNfU0lOR0xFX1NQQUNFIHdpZSBCU19TSU5HTEVfU1BBQ0UgZnVlciBicmVha19zdHJpbmcoKQorICAgICAgTVNHX0JTX0JMT0NLICAgICAgICB3aWUgQlNfQkxPQ0sgZnVlciBicmVha19zdHJpbmcoKQorICAgICAgTVNHX0JTX05PX1BBUklOREVOVCB3aWUgQlNfTk9fUEFSSU5ERU5UIGZ1ZXIgYnJlYWtfc3RyaW5nKCkKKyAgICAgIE1TR19CU19JTkRFTlRfT05DRSAgd2llIEJTX0lOREVOVF9PTkNFIGZ1ZXIgYnJlYWtfc3RyaW5nKCkKKyAgICAgIE1TR19CU19QUkVQX0lOREVOVCAgd2llIEJTX1BSRVBFTkRfSU5ERU5UIGZ1ZXIgYnJlYWtfc3RyaW5nKCkKKworICAgIDxtc2dfYWN0aW9uPiAob3B0aW9uYWwpCisgICAgICBNQV9VTktOT1dOICAgICBVbnNwZXouIEFrdGlvbi4gRXMgd2lyZCBkZXIgRGVmYXVsdCBxdWVyeV92ZXJiKCkKKyAgICAgICAgICAgICAgICAgICAgIGJlbnV0enQgYnp3LiB2ZXJzdWNodCwgZGllIEFrdGlvbiB6dSBlcnJhdGVuLgorICAgICAgTUFfUFVUICAgICAgICAgSmVtYW5kIGxlZ3QgZXR3YXMgaGluIHVuZCBnaWJ0IGplbWFuZGVuIGV0d2FzCisgICAgICBNQV9UQUtFICAgICAgICBKZW1hbmQgbmltbXQgZXR3YXMKKyAgICAgIE1BX01PVkVfSU4gICAgIEplbWFuZCBiZXRyaXR0IGRlbiBSYXVtCisgICAgICBNQV9NT1ZFX09VVCAgICBKZW1hbmQgdmVybGFlc3N0IGRlbiBSYXVtCisgICAgICBNQV9NT1ZFICAgICAgICBKZW1hbmQgYmV3ZWd0IHNpY2ggCisgICAgICBNQV9GSUdIVCAgICAgICBKZW1hbmQga2FlbXBmdAorICAgICAgTUFfV0lFTEQgICAgICAgSmVtYW5kIHp1ZWNrdCBlaW5lIFdhZmZlCisgICAgICBNQV9VTldJRUxEICAgICBKZW1hbmQgc3RlY2t0IGVpbmUgV2FmZmUgd2VnCisgICAgICBNQV9XRUFSICAgICAgICBKZW1hbmQgemllaHQgZXR3YXMgYW4KKyAgICAgIE1BX1VOV0VBUiAgICAgIEplbWFuZCB6aWVodCBldHdhcyBhdXMKKyAgICAgIE1BX0VBVCAgICAgICAgIEplbWFuZCBpc3N0IGV0d2FzCisgICAgICBNQV9EUklOSyAgICAgICBKZW1hbmQgdHJpbmt0IGV0d2FzCisgICAgICBNQV9TUEVMTCAgICAgICBKZW1hbmQgd2lya3QgZWluZW4gU3BlbGwKKyAgICAgIE1BX0xPT0sgICAgICAgIEplbWFuZCBzaWVodCBldHdhcyBhbiwgdW50ZXJzdWNodCBldHdhcworICAgICAgTUFfTElTVEVOICAgICAgSmVtYW5kIGhvcmNodCBvZGVyIGxhdXNjaHQgYW4gZXR3YXMKKyAgICAgIE1BX0ZFRUwgICAgICAgIEplbWFuZCBiZXRhc3RldCBldHdhcworICAgICAgTUFfU01FTEwgICAgICAgSmVtYW5kIHNjaG51ZWZmZWx0IGhlcnVtCisgICAgICBNQV9TRU5TRSAgICAgICBKZW1hbmQgbWFjaHQgZWluZSB1ZWJlcnNpbm5saWNoZSBXYWhybmVobXVuZworICAgICAgTUFfUkVBRCAgICAgICAgSmVtYW5kIGxpZXN0IGV0d2FzCisgICAgICBNQV9VU0UgICAgICAgICBKZW1hbmQgYmVudXR6dCBldHdhcworICAgICAgTUFfU0FZICAgICAgICAgSmVtYW5kIHNhZ3QgZXR3YXMKKyAgICAgIE1BX1JFTU9WRSAgICAgIEV0d2FzIHZlcnNjaHdpbmRldAorICAgICAgLy8gTUFfQ0hBVCAgICAgICAgQ2hhdGtyYW1zICh6LkIuIHRlaWxlLW1pdCwgVGVhbWthbXBmY2hhdCkKKyAgICAgIE1BX0NIQU5ORUwgICAgIEViZW5lbgorICAgICAgTUFfRU1PVEUgICAgICAgKHIpRW1vdGVzLCBTb3VsdmVyYmVuIChyZW1vdGVzIG1pdCBUeXAgTVRfQ09NTXxNVF9GQVIpCisgICAgICBNQV9TSE9VVCAgICAgICBSdWZlbiAobmljaHQ6IHNob3V0KCkhKQorICAgICAgTUFfU0hPVVRfU0VGVU4gUnVmZW4gdWViZXIgc2hvdXQoU0UpCisKK1NJRUhFIEFVQ0g6CisgICAgVmVyd2FuZHQ6IHNlbmRfcm9vbShTRSkKKyAgICBMZnVuczogICAgVGVzdElnbm9yZShMKQorICAgIEVmdW5zOiAgICB0ZWxsX29iamVjdChFKSwgY2F0Y2hfdGVsbChMKSwgY2F0Y2hfbXNnKEwpCisgICAgICAgICAgICAgIHF1ZXJ5X3ZlcmIoRSksIHF1ZXJ5X29uY2VfaW50ZXJhY3RpdmUoRSksIGJyZWFrX3N0cmluZyhTRSkKKworMTMuMDMuMjAxNiwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZWdpc3RlckV2ZW50IGIvZG9jL2xmdW4vUmVnaXN0ZXJFdmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmM1ZDhkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVnaXN0ZXJFdmVudApAQCAtMCwwICsxLDgyIEBACisKK0ZVTktUSU9OOgorICAgICBpbnQgUmVnaXN0ZXJFdmVudChzdHJpbmcgZWlkLCBzdHJpbmcgZnVuLCBvYmplY3QgbGlzdGVuZXIpOworCitERUZJTklFUlQgSU46CisgICAgIC9wL2RhZW1vbi9ldmVudGQuYworREVLTEFSSUVSVCBJTjoKKyAgICAgL3N5cy9ldmVudHMuaAorCitBUkdVTUVOVEU6CisgICAgIHN0cmluZyBlaWQsCisgICAgICAgRGllIElEIGRlcyBFdmVudHMsIGZ1ZXIgZGVuIG1hbiBzaWNoIHJlZ2lzdHJpZXJlbiB3aWxsLiBEYSBkaWVzZXIKKyAgICAgICBTdHJpbmcgZnVlciBhbGxlIEV2ZW50cyBqZXdlaWxzIGVpbmRldXRpZyBzZWluIG11c3MsIGVtcGZpZWhsdCBlcyBzaWNoLAorICAgICAgIGZ1ZXIgZWlnZW5lIEV2ZW50cyB6LkIuIGFscyBQcmFlZml4IGRlbiBlaWdlbmVuIE1hZ2llcm5hbWVuIHp1IG5laG1lbiwKKyAgICAgICB6LkIuICJ6ZXNzdHJhX3Z1bGthbmF1c2JydWNoIi4KKyAgICAgICBBQ0hUVU5HOiBJRHMsIGRpZSBtaXQgJ19ldnRfbGliXycgYmVnaW5uZW4sIHNpbmQgQVVTU0NITElFU1NMSUNIIGRlcgorICAgICAgIE11ZGxpYiB2b3JiZWhhbHRlbiEKKyAgICAgc3RyaW5nIGZ1biwKKyAgICAgICBOYW1lIGRlciBGdW5rdGlvbiwgZGllIGltIE9iamVrdCBsaXN0ZW5lciBiZWkgQXVmdHJldGVuIGRlcyBFdmVudHMKKyAgICAgICBnZXJ1ZmVuIHdlcmRlbiBzb2xsLgorICAgICBvYmplY3QgbGlzdGVuZXIsCisgICAgICAgRGFzIE9iamVrdCwgZGFzIGFscyBMYXVzY2hlciBmdWVyIGRpZXNlbiBFdmVudCByZWdpc3RyaWVydCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEYXMgT2JqZWt0ICdsaXN0ZW5lcicgd2lyZCBhbHMgTGF1c2NoZXIgZGllc2VzIEV2ZW50cyByZWdpc3RyaWVydC4gQWIKKyAgICAgZGllc2VtIE1vbWVudCB3aXJkIGltbWVyIGRhbm4sIHdlbm4gZWluIEV2ZW50IG1pdCBkZXIgSUQgJ2VpZCcgYXVzZ2Vsb2VzdAorICAgICB3aXJkLCBpbiAnbGlzdGVuZXInIGRpZSBGdW5rdGlvbiAnZnVuJyBhdWZnZXJ1ZmVuICh6ZWl0dmVyem9lZ2VydCwgbWVpc3QKKyAgICAgMC0ycykuCisgICAgIAorICAgICBEaWUgRnVua3Rpb24gd2lyZCBkYWJlaSBpbW1lciBtaXQgMyBBcmd1bWVudGVuIGF1ZmdlcnVmZW46CisgICAgIGxpc3RlbmVyLT5mdW4oZWlkLCB0cmlnZ2Vyb2IsIGRhdGEpOworICAgICBIaWVyYmVpIGlzdCAnZWlkJyBkaWUgamV3ZWlsaWdlIEV2ZW50LUlEIHVuZCAndHJpZ2dlcm9iJyBpc3QgZGFzIE9iamVrdCwKKyAgICAgd2VsY2hlcyBkZW4gRXZlbnQgYXVzbG9lc3RlLiAKKyAgICAgJ2RhdGEnIGthbm4gamVkZXIgTFBDLURhdGVudHlwIHNlaW4gdW5kIGVudGhhZWx0IGRpZSBEYXRlbiwgZGllIGRhcworICAgICB0cmlnZ2VybmRlIE9iamVrdCBhbiBhbGxlIExpc3RlbmVyIHVlYmVybWl0dGVsbiB3aWxsIChkYW1pdCBzaW5kIERhdGVudHlwCisgICAgIHVuZCBJbmhhbHQga29tcGxldHQgYWJoYWVuZ2lnIHZvbSBFdmVudCEpCisKKyAgICAgRXhpc3RpZXJ0IGJpc2hlciBub2NoIGtlaW4gRXZlbnQgbWl0IGRlciBJRCAnZWlkJywgd2lyZCBpbXBsaXppdCBlaW4KKyAgICAgbmV1ZXIgRXZlbnQgZXJzdGVsbHQsIGRlciBlcnN0bWFsIG51ciBkYXMgc2ljaCBnZXJhZGUgcmVnaXN0cmllcmVuZGUKKyAgICAgT2JqZWt0IGFscyBMYXVzY2hlciBoYXQuCisKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSBmdWVyIEVyZm9sZywgPD0wIGZ1ZXIgTWlzc2VyZm9sZy4KKyAgICAgMSAgIC0gRXJmb2xnLCAnbGlzdGVuZXInIHd1cmRlIGVpbmdldHJhZ2VuLgorICAgICAtMSAgLSBmYWxzY2hlIEFyZ3VtZW50ZSB3dXJkZW4gdWViZXJnZWJlbgorICAgICAtMiAgLSBuaWNodC1vZWZmZW50bGljaGVyIEV2ZW50IHVuZCAnbGlzdGVuZXInIHd1cmRlIG5pY2h0IGZ1ZXIgZGllc2VuCisgICAgICAgICAgIEV2ZW50IGZyZWlnZWdlYmVuIChtb21lbnRhbiBnaWJ0IGVzIG5vY2gga2VpbmUgbmljaHQtb2VmZmVudGxpY2hlbgorICAgICAgICAgICBFdmVudHMpCisgICAgIC0zICAtICdmdW4nIGluICdsaXN0ZW5lcicgaXN0IG5pY2h0IHZvcmhhbmRlbiBvZGVyIG5pY2h0IHZvbiBhdXNzZW4gCisgICAgICAgICAgIGF1ZnJ1ZmJhciAocHJvdGVjdGVkLCBzdGF0aWMsIHByaXZhdGUpLgorICAgICAKK0JFTUVSS1VOR0VOOgorICAgICBXZW5uICdsaXN0ZW5lcicgYmVyZWl0cyBmdWVyIGRlbiBFdmVudCByZWdpc3RyaWVydCB3aXJkLCB3aXJkIGRpZSBhbHRlCisgICAgIFJlZ2lzdHJpZXJ1bmcgdWViZXJzY2hyaWViZW4gKGFscyBnZ2YuIGdpbHQgZGFubiBkZXIgamV0enQgdWViZXJnZWJlbmUKKyAgICAgRnVua3Rpb25zbmFtZSkuCisgICAgIERpZSBGdW5rdGlvbiAnZnVuJyBzb2xsdGUgc3BhcnNhbSBtaXQgZGVuIEV2YWwtVGlja3MgdW1nZWhlbi4gTW9tZW50YW4KKyAgICAgaXN0IGRpZSBtYXguIE1lbmdlIGFuIFRpY2tzIGF1ZiAzMDAwMCBiZXNjaHJhZW5rdC4gRGllcyBrYW5uIGJlaQorICAgICBQcm9ibGVtZW4gYXVjaCBqZWRlcnplaXQgcmVkdXppZXJ0IHdlcmRlbiEKKyAgICAgRGVyIEVWRU5URCBtZXJrdCBzaWNoIEV2ZW50LUxhdXNjaGVyIG5pY2h0IHVlYmVyIFJlYm9vdHMgaGluYXVzLgorICAgICBTb2xsdGUgc2ljaCBlaW5lIEJsdWVwcmludCBhbm1lbGRlbiwgc2ljaCB6ZXJzdG9lcmVuIHVuZCBuZXVnZWxhZGVuCisgICAgIHdlcmRlbiwgaXN0IGRpZSBuZXVlIEJsdWVwcmludCBub2NoIGFuZ2VtZWxkZXQsIHdlaWwgZGFzIG5ldWUgT2JqZWt0CisgICAgIHVudGVyIGRlbSBhbHRlbiBOYW1lbiB3aWVkZXJnZWZ1bmRlbiB3aXJkLiBEaWVzIGdpbHQgX25pY2h0XyBmdWVyCisgICAgIENsb25lcyEKKworQkVJU1BJRUxFOgorICAgICAxLiBFaW4gT2JqZWt0IG1vZWNodGUgdWViZXIgU3BpZWxlcnRvZGUgaW5mb3JtaWVydCB3ZXJkZW46CisgICAgICAgICAgRVZFTlRELT5SZWdpc3RlckV2ZW50KEVWVF9MSUJfUExBWUVSX0RFQVRILCAic3BpZWxlcl9pc3RfdG90IiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqZWN0KCkpOworICAgICAgICBBYiBqZXR6dCB3aXJkIGltIE9iamVrdCBqZWRlcyBNYWwsIHdlbm4gZWluIFNwaWVsZXIgc3RpcmJ0LCBkaWUgCisgICAgICAgIEZ1bmt0aW9uICJzcGllbGVyX2lzdF90b3QiIGF1ZmdlcnVmZW4uCisKKyAgICAgMi4gRWluIE9iamVrdCB3aWxsIGluZm9ybWllcnQgd2VyZGVuLCB3ZW5uIGRlciBFdmVudAorICAgICAgICAiYm9pbmdfendlcmdlbmtvZW5pZ19hbmdyaWZmIiBhdXNnZWxvZXN0IHdpcmQ6CisgICAgICAgICAgIEVWRU5URC0+UmVnaXN0ZXJFdmVudCgiYm9pbmdfendlcmdlbmtvZW5pZ19hbmdyaWZmIiwiYWxhcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqZWN0KCkpOworCitTSUVIRSBBVUNIOgorICAgICBldmVudHMsIGV2ZW50ZCwgVW5yZWdpc3RlckV2ZW50KCksIFRyaWdnZXJFdmVudCgpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE1LjA4LjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlZ2lzdGVySGVscGVyTlBDIGIvZG9jL2xmdW4vUmVnaXN0ZXJIZWxwZXJOUEMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwZThiMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1JlZ2lzdGVySGVscGVyTlBDCkBAIC0wLDAgKzEsODcgQEAKK1JlZ2lzdGVySGVscGVyTlBDKCkKK0ZVTktUSU9OOgorICAgICBwdWJsaWMgaW50IFJlZ2lzdGVySGVscGVyTlBDKG9iamVjdCBucGMsIGludCBmbGFncyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9wbGF5ZXIvY29tYmF0LmMKKyAgICAgL3N5cy9saXZpbmcvY29tYmF0LmgKKworQVJHVU1FTlRFOgorICAgICBvYmplY3QgbnBjCisgICAgICAgT2JqZWt0IGRlcyBoZWxmZW5kZW4gTlBDLCBkZXIgYW5nZW1lbGRldCB3ZXJkZW4gc29sbC4KKworICAgICBpbnQgZmxhZ3MKKyAgICAgICB2ZXItb2Rlci10ZSBLb25zdGFudGVuLCBkaWUgZGllIEFydCBkZXMgSGVsZmVyLU5QQyBiZXNjaHJlaWJlbiAocy51LikKKworQkVTQ0hSRUlCVU5HOgorICAgICBNaXQgZGllc2VyIEZ1bmt0aW9uIHdpcmQgZWluIGVpbmVtIFNwaWVsZXIgaGVsZmVuZGVyIE5QQyBpbSBTcGllbGVyCisgICAgIGFuZ2VtZWxkZXQuIEhpZXJkdXJjaCBrYW5uIHNwYWV0ZXIgaGVyYXVzZ2VmdW5kZW4gd2VyZGVuLCB3ZWxjaGUgTlBDCisgICAgIGVpbmVtIFNwaWVsZXIgaGVsZmVuIHVuZCBnZ2YuIGRlbiB2b24gZGllc2VuIHZlcnVyc2FjaHRlbiBTY2hhZGVuIGltCisgICAgIEthbXBmIGRlbSBTcGllbGVyIHp1enVyZWNobmVuLgorCisgICAgIERpZSBGbGFncyBzaW5kIGVpbmUgZGVyIGZvbGdlbmRlbiBLb25zdGFudGVuIG9kZXIgZWluZSBiZWxpZWJpZ2UgZHVyY2gKKyAgICAgdmVyLW9kZXItdW5nIGdlYmlsZGV0ZSBLb21iaW5hdGlvbi4KKworICAgICBNb21lbnRhbiBnaWJ0IGVzIDIgS2xhc3NlbiB2b24gSGVsZmVyLU5QQzoKKyAgICAgKyBHVUlMRF9IRUxQRVI6IGRlciBIZWxmZXItTlBDIGlzdCBlaW4gR2lsZGVuLU5QQworICAgICArIE1JU0NfSEVMUEVSOiAgZGVyIEhlbGZlci1OUEMgaXN0IGlyZ2VuZGVpbiBOUEMsIGRlciBuaWNodCB6dSBlaW5lciBHaWxkZQorICAgICAgICAgICAgICAgICAgICAgZ2Vob2VydC4KKworICAgICBadXNhZXR6bGljaCB6dSBkZW4gS2xhc3NlbiBnaWJ0IGVzIG5vY2ggd2VpdGVyZSBGbGFncywgZGllIGV0d2FzIHVlYmVyCisgICAgIGRlbiBIZWxmZXItTlBDIHNhZ2VuOgorCisgICAgICsgRVhDTFVTSVZFX0hFTFBFUjogZGllc2VyIEhlbGZlci1OUEMgZHVsZGV0IGtlaW5lbiB3ZWl0ZXJlbiBOUEMgZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2xlaWNoZW4gS2xhc3NlLgorICAgICArIEFDVElWRV9IRUxQRVI6IGlzdCBkaWVzZXMgRmxhZyBnZXNldHp0LCBpc3QgZGVyIE5QQyBtZWhyIGFscyBudXIgcmVpbmVyCisgICAgICAgICAgICAgICAgICAgICAgU2NobGFnZmFlbmdlci4KKworICAgICBXaXJkIEVYQ0xVU0lWRV9IRUxQRVIgZ2VzZXR6dCB1bmQgZXMgaXN0IGluIGRlciBnbGVpY2hlbiBLbGFzc2Ugc2Nob24gZWluCisgICAgIE5QQyBhbmdlbWVsZGV0LCBzY2hsYWVndCBkaWUgUmVnaXN0cmllcnVuZyBmZWhsLgorICAgICBJc3QgaW4gZGVyIGdsZWljaGVuIEtsYXNzZSBiZXJlaXRzIGVpbiBOUEMgbWl0IEVYQ0xVU0lWRV9IRUxQRVIKKyAgICAgYW5nZW1lbGRldCwgc2NobGFlZ3QgZGllIFJlZ2lzdGllcnVuZyBlYmVuZmFsbHMgZmVobCwgYXVjaCB3ZW5uIGRlciBuZXVlCisgICAgIE5QQyBrZWluIEVYQ0xVU0lWRV9IRUxQRVIgc2V0enQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDEsIHdlbm4gZGllIFJlZ2lzdHJpZXJ1bmcgZXJmb2xncmVpY2ggd2FyLgorICAgICAwIHNvbnN0LiBJbiBkaWVzZW0gRmFsbCBkYXJmIGRlciBOUEMgZGVtIFNwaWVsZXIgTklDSFQgaGVsZmVuLCB3ZWRlcgorICAgICAgIHBhc3NpdiAoU2NobGFnZmFlbmdlciksIG5vY2ggYWt0aXYuCisKK0JFTUVSS1VOR0VOOgorICAgICBEaWVzZSBGdW5rdGlvbiBzZXR6dCBiZWkgZGVyIEVyZm9sZyBkaWUgUHJvcGVydHkgUF9IRUxQRVJfTlBDIGluIDxucGM+CisgICAgIGF1ZiBwYXNzZW5kZSBXZXJ0ZS4KKyAgICAgQml0dGUgYXVmIGdhciBrZWluZW4gRmFsbCBkaWUgbnVtZXJpc2NoZW4gV2VydGUgZGVyIEtvbnN0YW50ZW4gZnVlcgorICAgICA8ZmxhZ3M+IG51dHplbiwgZGllc2Uga29lbm5lbiBzaWNoIGplZGVyemVpdCBhZW5kZXJuLgorCitCRUlTUElFTEU6CisgICAgIDEuIEVpbiBuaWNodC1leGtsdXNpdmVyIEdpbGRlbi1OUEMsIGRlciBkZW0gU3BpZWxlciBmb2xndC4KKyAgICAgaWYgKHNwaWVsZXItPlJlZ2lzdGVySGVscGVyTlBDKHRoaXNfb2JqZWN0KCksIEdVSUxEX0hFTFBFUikgPT0gMSkgeworICAgICAgIG1vdmUoZW52aXJvbm1lbnQoc3BpZWxlciksIE1fR08pOworICAgICAgIHNwaWVsZXItPkFkZFB1cnN1ZXIodGhpc19vYmplY3QoKSk7CisgICAgICAgLy8gbWVsZHVuZyBhdXNnZWJlbmUuLi4KKyAgICAgfQorCisgICAgIDJhLiBFaW4gZXhrbHVzaXZlciBOaWNodC1HaWxkZW4tTlBDCisgICAgIGlmIChzcGllbGVyLT5SZWdpc3RlckhlbHBlck5QQyh0aGlzX29iamVjdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlTQ19IRUxQRVJ8RVhDTFVTSVZFX0hFTFBFUikgPT0gMSkgeworICAgICAgIG1vdmUoZW52aXJvbm1lbnQoc3BpZWxlciksIE1fR08pOworICAgICB9CisKKyAgICAgMmIuIEVpbiBuaWNodC1leGtsdXNpdmVyIE5pY2h0LUdpbGRlLU5QQywgZGVyIG5hY2ggMmEuIGtvbW10LgorICAgICBpZiAoc3BpZWxlci0+UmVnaXN0ZXJIZWxwZXJOUEModGhpc19vYmplY3QoKSwgTUlTQ19IRUxQRVIpID09IDEpIHsKKyAgICAgICAvLyAuLi4gd2VubiBkZXIgTlBDIGF1cyAyYSBub2NoIGV4aXN0aWVydCwgdHJpZmZ0IGRpZXMgaGllciBuaWUgenUuCisgICAgIH0KKworICAgICAzLiBFaW4gZXhrbHVzaXZlciBOUEMsIGRlciB3ZWl0ZXJlIEdpbGRlbi0gdW5kIHNvbnN0aWdlIE5QQyBhdXNzY2hsaWVzc3QKKyAgICAgICAgKFNvbGNoZSBLb21iaW5hdGlvbiBiaXR0ZSBtaXQgZGVyIEdpbGRlbi1CYWxhbmNlIGFic3RpbW1lbi4pCisgICAgIGlmIChzcGllbGVyLT5SZWdpc3RlckhlbHBlck5QQyh0aGlzX29iamVjdCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVNDX0hFTFBFUnxHVUlMRF9IRUxQRVJ8RVhDTFVTSVZFX0hFTFBFUikgPT0gMSkgeworICAgICAgIG1vdmUoZW52aXJvbm1lbnQoc3BpZWxlciksIE1fR08pOworICAgICB9CisKKyAgICAgNC4gRGllIFJlZ2lzdHJpZXJ1bmcgb2huZSBLbGFzc2Ugc2NobGFlZ3QgZmVobCwgei5CLjoKKyAgICAgICBzcGllbGVyLT5SZWdpc3RlckhlbHBlck5QQyh0aGlzX29iamVjdCgpLCAwKTsKKyAgICAgICBzcGllbGVyLT5SZWdpc3RlckhlbHBlck5QQyh0aGlzX29iamVjdCgpLCBFWENMVVNJVkVfSEVMUEVSKTsKKworU0lFSEUgQVVDSDoKKyAgICBVbnJlZ2lzdGVySGVscGVyTlBDKCkKKyAgICBQX0hFTFBFUl9OUEMKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlZ2lzdGVySGVscGVyT2JqZWN0IGIvZG9jL2xmdW4vUmVnaXN0ZXJIZWxwZXJPYmplY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExY2I2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1JlZ2lzdGVySGVscGVyT2JqZWN0CkBAIC0wLDAgKzEsMTEzIEBACisKK0ZVTktUSU9OOgorICAgICBpbnQgUmVnaXN0ZXJIZWxwZXJPYmplY3Qob2JqZWN0IGhlbHBlciwgaW50IHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nfGNsb3N1cmUgY2FsbGJhY2spOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2hlbHBlcnMuYworCitBUkdVTUVOVEU6CisgICAgIG9iamVjdCBoZWxwZXIKKyAgICAgICBEYXMgT2JqZWt0LCBkYXMgYmVpIGVpbmVtIExlYmV3ZXNlbiBhbHMgSGlsZnNvYmpla3QgcmVnaXN0cmllcnQgCisgICAgICAgd2VyZGVuIHNvbGwuIERhcyBPYmpla3QgbXVzcyBzaWNoIGRhenUgbmljaHQgaW0gSW52ZW50YXIgZGVzCisgICAgICAgTGViZXdlc2VucyBiZWZpbmRlbi4KKyAgICAgaW50IHR5cGUKKyAgICAgICBIZWxmZXJ0eXAsIGVpbmVyIGRlciBpbiAvc3lzL2xpdmluZy9oZWxwZXJzLmggZGVmaW5pZXJ0ZW4gVHlwZW46CisgICAgICAgLSBIRUxQRVJfVFlQRV9BRVJJQUwgZnVlciBkaWUgRmx1Zy0vU2VnZWx1bnRlcnN0dWV0enVuZworICAgICAgIC0gSEVMUEVSX1RZUEVfQVFVQVRJQyBmdWVyIFRhdWNodW50ZXJzdHVldHp1bmcKKyAgICAgc3RyaW5nfGNsb3N1cmUgY2FsbGJhY2sKKyAgICAgICAgQ2xvc3VyZSBvZGVyIEZ1bmt0aW9uc25hbWUgYWxzIFN0cmluZzsgZGllcyBpc3QgZGllIEZ1bmt0aW9uLCBkaWUgaW0KKyAgICAgICAgT2JqZWt0IGhlbHBlciBnZXJ1ZmVuIHdpcmQsIHVtIGFienVmcmFnZW4sIG9iIGVzIHNpY2ggYWt0dWVsbCBmdWVyCisgICAgICAgIHp1c3RhZW5kaWcgZXJrbGFlcnQgb2RlciBuaWNodC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEYXMgT2JqZWt0ICJoZWxwZXIiIHdpcmQgYWxzIEhpbGZzb2JqZWt0IGZ1ZXIgYmVzdGltbXRlIEFrdGl2aXRhZXRlbiB3aWUKKyAgICAgenVtIEJlaXNwaWVsIEZsaWVnZW4gb2RlciBUYXVjaGVuIHJlZ2lzdHJpZXJ0LiAKKyAgICAgCisgICAgIERpZSBhbHMgQ2FsbGJhY2sgdWViZXJnZWJlbmUgRnVua3Rpb24gd2lyZCBiZWkgZGVyIEFiZnJhZ2UgZGVyIAorICAgICBQXypfSEVMUEVSUy1Qcm9wZXJ0aWVzIChzaWVoZSB1bnRlbikgYXVmZ2VydWZlbiB1bmQgZGVyZW4gCisgICAgIFJ1ZWNrZ2FiZXdlcnQgaW4gZGVyIFByb3BlcnR5IHZlcm1lcmt0LiAKKyAgICAgCisgICAgIERlciBSdWVja2dhYmV3ZXJ0IGRlciBDYWxsYmFjay1NZXRob2RlIG11c3MgaW0gV2VydGViZXJlaWNoIAorICAgICAwLi4xMDAwMCBsaWVnZW4sIHdvYmVpIGVpbiBXZXJ0IHZvbiAwIGJlZGV1dGV0LCBkYXNzIGRhcyBIaWxmc29iamVrdCAKKyAgICAgc2ljaCBnZXJhZGUgbmljaHQgenVzdGFlbmRpZyBmdWVobHQuIEJlaSBkZW4gV2VydGVuID4wIGlzdCBlcyBkZW0gCisgICAgIGFiZnJhZ2VuZGVuIE9iamVrdCB1ZWJlcmxhc3Nlbiwgd2llIGVzIGRpZXNlIERhdGVuIGJld2VydGV0LgorCisgICAgIERpZSBGdW5rdGlvbiBtdXNzIGV4aXN0aWVyZW4gdW5kIHB1YmxpYyBzZWluLCBkLmguIHZvbiBhdXNzZW4gZ2VydWZlbiAKKyAgICAgd2VyZGVuIGtvZW5uZW4uCisgICAgIAorICAgICBEaWUgRnVua3Rpb24gYmVrb21tdCBkYXMgU3BpZWxlcm9iamVrdCB1bmQgZGFzIGFiZnJhZ2VuZGUgT2JqZWt0IGFscworICAgICBQYXJhbWV0ZXIgdWViZXJnZWJlbi4KKworSElOV0VJUzoKKyAgICAgRXMgaXN0IGVpbiBVbnRlcnNjaGllZCwgb2Igc2ljaCBlaW4gT2JqZWt0IHZpYSBVbnJlZ2lzdGVySGVscGVyT2JqZWN0KCkKKyAgICAgYWxzIEhlbGZlciBhdXN0cmFlZ3QsIG9kZXIgb2IgZGVyIEF1ZnJ1ZiBkZXIgQ2FsbGJhY2stRnVua3Rpb24gZWluZQorICAgICAwIHp1cnVlY2tnaWJ0LiBJbSBsZXR6dGVyZW4gRmFsbCBpc3QgZGFzIE9iamVrdCBuYWNoIHdpZSB2b3IgCisgICAgIHJlZ2lzdHJpZXJ0IHVuZCBrYW5uIHRyb3R6ZGVtIHZvbSBhYmZyYWdlbmRlbiBPYmpla3QgYWxzIAorICAgICBmdW5rdGlvbnNmYWVoaWcgYW5nZXNlaGVuIHdlcmRlbi4KKworUlVFQ0tHQUJFV0VSVEU6CisgICAgICAxICBPYmpla3Qgd3VyZGUgZXJmb2xncmVpY2ggcmVnaXN0cmllcnQgKEhFTFBFUl9TVUNDRVNTKQorICAgICAtMSAgYW5nZWdlYmVuZXMgSGlsZnNvYmpla3QgZXhpc3RpZXJ0IG5pY2h0IChIRUxQRVJfTk9fQ0FMTEJBQ0tfT0JKRUNUKQorICAgICAtMiAgYW5nZWdlYmVuZXMgSGlsZnNvYmpla3QgaXN0IGJlcmVpdHMgZnVlciBkaWVzZSBBcnQgZGVyCisgICAgICAgICBVbnRlcnN0dWV0enVuZyByZWdpc3RyaWVydCAoSEVMUEVSX0FMUkVBRFlfTElTVEVEKQorCitCRUlTUElFTEU6CisgICAgIGEpIEVpbmUgbHVmdGdlZnVlbGx0ZSBCbGFzZSB3aWxsIHNpY2ggYWxzIFRhdWNoLUhlbGZlciBhbSBTcGllbGVyCisgICAgIGFubWVsZGVuIHVuZCBpc3QgenVzdGFlbmRpZywgc29sYW5nZSBzaWNoIG5vY2ggTHVmdCBpbiBpaHIgYmVmaW5kZXQ6CisKKyAgICAgaW50IGx1ZnQgPSA1OyAvLyBnbG9iYWxlIFZhcmlhYmxlIHouQi4gZnVlciBMdWZ0aW5oYWx0IHZvbiA1IEF0ZW16dWVnZW4KKworICAgICAvLyBSZWdpc3RyaWVydW5nIGltIFNwaWVsZXJvYmpla3QKKyAgICAgaWYgKCBUUC0+UmVnaXN0ZXJIZWxwZXJPYmplY3QoTUUsIEhFTFBFUl9UWVBFX0FRVUFUSUMsCisgICAgICAgICAgIkRpdmluZ0NhbGxiYWNrIikgPT0gSEVMUEVSX1NVQ0NFU1MgKSB7CisgICAgICAgdGVsbF9vYmplY3QoVFAsICJEdSBrYW5uc3QgamV0enQgbWl0IEhpbGZlIGRlciBMdWZ0Ymxhc2UgdW50ZXIgV2Fzc2VyICIKKyAgICAgICAgICJhdG1lbi5cbiIpOworICAgICB9CisKKyAgICAgLy8gaGllciBrb2VubmVuIG5hdHVlcmxpY2ggYXVjaCBub2NoIGtvbXBsZXhlcmUgRGluZ2UgYWJsYXVmZW4sIHouQi4KKyAgICAgLy8gd2VubiBlaW4gV2VydCB6dXJ1ZWNrZ2VnZWJlbiB3ZXJkZW4gc29sbCwgZGVyIG5pY2h0IG51ciAwIG9kZXIgMSBpc3QuCisgICAgIHB1YmxpYyBpbnQgRGl2aW5nQ2FsbGJhY2sob2JqZWN0IHBsYXllciwgb2JqZWN0IGNhbGxlcikgeworICAgICAgIHJldHVybiAoZW52aXJvbm1lbnQoTUUpPT1wbGF5ZXIgJiYgbHVmdD4wKTsKKyAgICAgfQorCisgICAgIGIpIEVpbiBTcGllbGVyIGJlZmluZGV0IHNpY2ggaW4gZWluZW0gUmF1bSBtaXQgZWluZW0gc3RlaWxlbiBBYmhhbmcsIGRlbgorICAgICBtYW4gaGludW50ZXJzcHJpbmdlbiBrYW5uLiBEaWVzIGdlaHQgYWJlciBudXIgZGFubiBnZWZhaHJsb3MsIHdlbm4gZXMKKyAgICAgSGlsZnNvYmpla3RlIGdpYnQsIGRpZSBkZW4gKFNlZ2VsKWZsdWcgZXJsYXViZW46CisKKyAgICAgLy8gY21kX3NwcmluZ2VuKCkgc2VpIGRpZSBGdW5rdGlvbiwgZGllIGJlaSBkZXIgRWluZ2FiZSBkZXMgQmVmZWhscyBkdXJjaAorICAgICAvLyBkZW4gU3BpZWxlciBhdWZnZXJ1ZmVuIHdpcmQuCisgICAgIHN0YXRpYyBpbnQgY21kX3NwcmluZ2VuKHN0cmluZyBzdHIpIHsKKyAgICAgICBbLi4uXQorICAgICAgIC8vIFByb3BlcnR5IGFiZnJhZ2VuCisgICAgICAgbWFwcGluZyBoZWxwZXJzID0gVFAtPlF1ZXJ5UHJvcChQX0FFUklBTF9IRUxQRVJTKTsKKyAgICAgICAvLyBMaXN0ZSBkZXIgV2VydGUgZnVlciBkaWUgZWluemVsbmVuIFVudGVyc3R1ZXR6dW5nc29iamVrdGUgZXJtaXR0ZWxuCisgICAgICAgaW50ICp2YWx1ZXMgPSBtX3ZhbHVlcyhoZWxwZXJzLDApOworICAgICAgIC8vIFNwaWVsZXIgc2Nob25tYWwgcnVudGVyYmV3ZWdlbiwgZGllIEZvbGdlbiBzZWluZXMgSGFuZGVsbnMgc3B1ZXJ0CisgICAgICAgLy8gZXIgZGFubiwgd2VubiBlciB1bnRlbiBhbmdla29tbWVuIGlzdC4KKyAgICAgICBUUC0+bW92ZSh6aWVscmF1bSwgTV9HT3xNX1NJTEVOVCk7CisgICAgICAgLy8gImhlbHBlcnMiIGlzdCBpbW1lciBlaW4gTWFwcGluZywgZGFzIHBydWVmZW4gd2lyIG5pY2h0IGV4dHJhLgorICAgICAgIC8vIFdlbm4gZGllIExpc3RlIGRlciBPYmpla3RlIG5vY2ggbWluZGVzdGVucyBlaW4gRWxlbWVudCBlbnRoYWVsdCwKKyAgICAgICAvLyBuYWNoZGVtIGFsbGUgdW56dXN0YWVuZGlnZW4gSGlsZnNvYmpla3RlIChSdWVja2dhYmV3ZXJ0IGRlcgorICAgICAgIC8vIENhbGxiYWNrLUZ1bmt0aW9uID09IDApIHJhdXNnZXJlY2huZXQgd3VyZGVuLCBleGlzdGllcnQgbWluZGVzdGVucworICAgICAgIC8vIGVpbiBnZWVpZ25ldGVzIEhpbGZzb2JqZWt0LgorICAgICAgIGlmICggc2l6ZW9mKHZhbHVlcy0oezB9KSkgKSB7CisgICAgICAgICB0ZWxsX29iamVjdChUUCwgIlNhbmZ0IHNlZ2Vsc3QgRHUgZGVuIEhhbmcgaGluYWIuXG4iKTsKKyAgICAgICB9CisgICAgICAgZWxzZSB7CisgICAgICAgICB0ZWxsX29iamVjdChUUCwgQlMoIlRvZGVzbXV0aWcgc3ByaW5nc3QgRHUgZGVuIEhhbmcgaGluYWIgdW5kICIKKyAgICAgICAgICAgInNjaGxhZWdzdCBoYXJ0IHVudGVuIGF1Zi4gRHUgaGFldHRlc3QgdmllbGxlaWNodCBkYXJhbiBkZW5rZW4gIgorICAgICAgICAgICAic29sbGVuLCBEaXIgZ2VlaWduZXRlIEhpbGZzbWl0dGVsIGZ1ZXIgc28gZWluZSBBa3Rpb24genUgIgorICAgICAgICAgICAiYmVzb3JnZW4uIik7CisgICAgICAgICBUUC0+RGVmZW5kKDgwMCwgKHtEVF9CTFVER0VPTn0pLCAoW1NQX05PX0FDVElWRV9ERUZFTlNFOjFdKSwgTUUpOworICAgICAgIH0KKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBGdW5rdGlvbmVuOiAgVW5yZWdpc3RlckhlbHBlck9iamVjdCgpCisgICAgIFByb3BlcnRpZXM6ICBQX0hFTFBFUl9PQkpFQ1RTLCBQX0FFUklBTF9IRUxQRVJTLCBQX0FRVUFUSUNfSEVMUEVSUworICAgICBTb25zdGlnZXM6ICAgL3N5cy9saXZpbmcvaGVscGVycy5oCisKKzA1LjAyLjIwMTUgQXJhdGhvcm4KKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlQWRqZWN0aXZlIGIvZG9jL2xmdW4vUmVtb3ZlQWRqZWN0aXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjA1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9SZW1vdmVBZGplY3RpdmUKQEAgLTAsMCArMSwyNCBAQAorUmVtb3ZlQWRqZWN0aXZlKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgUmVtb3ZlQWRqZWN0aXZlKHN0cmluZ3xzdHJpbmcqIGFkaik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgYWRqCisgICAgICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZyBtaXQgZGVuIEFkamVrdGl2ZW4uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRmFsbHMgZWluaWdlIGRlciB2b3JoYW5kZW5lbiBBZGpla3RpdmUgbmljaHQgbWVociB2ZXJ3ZW5kZXQgd2VyZGVuCisgICAgIHNvbGxlbiwga29lbm5lbiBzaWUgbWl0IGRpZXNlciBGdW5rdGlvbiBlbnRmZXJudCB3ZXJkZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitTSUVIRSBBVUNIOgorICAgICBBZGRBZGplY3RpdmUoKSwgUmVtb3ZlSWQoKSwgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIwLjAxLjIwMTUsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZUNsYXNzIGIvZG9jL2xmdW4vUmVtb3ZlQ2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlZGE2YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1JlbW92ZUNsYXNzCkBAIC0wLDAgKzEsMjMgQEAKK1JlbW92ZUNsYXNzKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgUmVtb3ZlQ2xhc3Moc3RyaW5nfHN0cmluZyogY2xhc3MpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgIHN0cmluZy9zdHJpbmcqIGNsYXNzCS0gU3RyaW5nIG9kZXIgU3RyaW5nYXJyYXkgZGVyIEtsYXNzZShuKQorCitCRVNDSFJFSUJVTkc6CisgICAgIERlbSBPYmpla3Qgd2VyZGVuIGVpbmlnZSBkZXIgbWl0IEFkZENsYXNzKCkgZ2VzZXR6dGVuIEtsYXNzZW4gd2llZGVyIA0KKyAgICAgZW50em9nZW4uCisgICAgIERpZSBhbGxnZW1laW4gdmVyZnVlZ2JhcmVuIEtsYXNzZW4gc2luZCB1bnRlciAvc3lzL2NsYXNzLmggZGVmaW5pZXJ0LgorCitTSUVIRSBBVUNIOgorICAgICBBZGRDbGFzcygpLCBpc19jbGFzc19tZW1iZXIoKQorICAgICBQX0NMQVNTCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIwLjAxLjIwMTUsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlQ21kIGIvZG9jL2xmdW4vUmVtb3ZlQ21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTQxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9SZW1vdmVDbWQKQEAgLTAsMCArMSw2MCBAQAorUmVtb3ZlQ21kKEwpCitGVU5LVElPTjoKKyAgICB2YXJhcmdzIGludCBSZW1vdmVDbWQobWl4ZWQgY21kLCBpbnQgbm9ydWxlLCBtaXhlZCBpZCkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvdGhpbmcvY29tbWFuZHMuYworCitBUkdVTUVOVEU6CisgICAgY29tCisgICAgICAgICBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncyBtaXQgZGVuIHp1IGVudGZlcm5lbmRlbiBLb21tYW5kb3MuCisgICAgbm9ydWxlCisgICAgICAgICBLb21tYW5kb3MgbWl0IFJlZ2VsbiB3ZXJkZW4gbmljaHQgZW50ZmVybnQgKGF1c3NlciBiZWkgY21kPT0wKQorICAgIGlkCisgICAgICAgICBlaW5lIElELCBtaXQgZGVyIG1hbiBlaW4gdm9yaGVyIG1pdCBkaWVzZXIgSUQgZ2VzcGVpY2hlcnRlcworICAgICAgICAgS29tbWFuZG8gZWluZGV1dGlnIGx2c2NoZW4ga2FubgorCitCRVNDSFJFSUJVTkc6CisgICAgTWl0IEFkZENtZCgpIGhpbnp1Z2VmdWVndGUgS29tbWFuZG9zIGtvZW5uZW4gbWl0IGRpZXNlbSBCZWZlaGwgd2llZGVyCisgICAgYWJnZW1lbGRldCB3ZXJkZW4uIERpZSBlbnRmZXJudGVuIEtvbW1hbmRvcyBzaW5kIGRpcmVrdCBuYWNoIGRlbQorICAgIFJlbW92ZUNtZCgpLUF1ZnJ1ZiBuaWNodCBtZWhyIGFuc3ByZWNoYmFyLgorCisgICAgV2lyZCBlaW4gUmVnZWxzdHJpbmcgYW5nZWdlYmVuLCBzbyB3aXJkIGRpZSBpZGVudGlzY2hlIEFkZENtZC0KKyAgICBSZWdlbCBlbnRmZXJudC4KKworQkVNRVJLVU5HRU46CisgICAgVWViZXJnaWJ0IG1hbiBmdWVyIGNvbSBlaW5lIDAsIHNvIHdlcmRlbiBhbGxlIGRlZmluaWVydGVuIEtvbW1hbmRvcworICAgIGVudGZlcm50IQorCitSVUVDS0dBQkVXRVJUOgorICAgIEFuemFobCBkZXIgZW50ZmVybnRlbiBLb21tYW5kb3MuCisKK0JFSVNQSUVMRToKKyAgICAoMSkgQWRkQ21kKCJ0ZXN0Iik7CisgICAgKDIpIEFkZENtZCgidGVzdHx0ZXN0ZSZtaXQmcGFyYW1ldGVyIik7CisgICAgKDMpIEFkZENtZCgoeyJ0ZXN0In0pLDEpOworICAgICg0KSBBZGRDbWQoInRlc3QiLDAsMCwiWFlaIik7CisgICAgKDUpIEFkZENtZCgidGVzdCZtaXQmcGFyYW1ldGVyIiwwLDAsIlhZWiIpOworCisgICAgUmVtb3ZlQ21kKDApOworICAgIC0gZW50ZmVybnQgYWxsZSBLb21tYW5kb3MKKyAgICBSZW1vdmVDbWQoInRlc3QiLDEpOworICAgIC0gZW50ZmVybnQgKDEpIHVuZCAoMykKKyAgICBSZW1vdmVDbWQoInRlc3QiKTsKKyAgICAtIGVudGZlcm50ICgxKSwgKDMpIHVuZCBlaW5lbiBUZWlsIHZvbiAoMiksCisgICAgICBlcyB2ZXJibGVpYnQgInRlc3RlJm1pdCZwYXJhbWV0ZXIiCisgICAgUmVtb3ZlQ21kKCJ0ZXN0fHRlc3RlJm1pdCZwYXJhbWV0ZXIiCisgICAgLSBlbnRmZXJudCAoMikKKyAgICBSZW1vdmVDbWQoInRlc3QiLDAsIlhZWiIpOworICAgIC0gZW50ZmVybnQgKDQpIHVuZCAoNSkKKyAgICBSZW1vdmVDbWQoInRlc3QiLDEsIlhZWiIpOworICAgIC0gZW50ZmVybnQgKDQpLCBuaWNodCAoNSkKKyAgICBSZW1vdmVDbWQoMCwwLCJYWVoiKTsKKyAgICAtIGVudGZlcm50ICg0KSB1bmQgKDUpCisKK1NJRUhFIEFVQ0g6CisJCQlBZGRDbWQoTCksIEFkZENtZF9ic3AKKyAgICBTb25zdGlnZXM6CQlyZXBsYWNlX3BlcnNvbmFsKEUpLCBlbmFibGVfY29tbWFuZHMoRSksIGluaXQoRSkKKyAgICBBbHRlcm5hdGl2ZW46CUFkZEFjdGlvbihMKSwgYWRkX2FjdGlvbihFKQorCisyNC5NYWVyeiAyMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZW1vdmVEZWZlbmRlciBiL2RvYy9sZnVuL1JlbW92ZURlZmVuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDQ2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9SZW1vdmVEZWZlbmRlcgpAQCAtMCwwICsxLDM2IEBACitSZW1vdmVEZWZlbmRlcigpCisKK0ZVTktUSU9OOgorCXZvaWQgUmVtb3ZlRGVmZW5kZXIob2JqZWN0IGZyaWVuZCk7CisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL2xpdmluZy9jb21iYXQuYworCitBUkdVTUVOVEU6CisJZnJpZW5kCisJICBPYmpla3QgKG5vcm1hbCBMZWJld2VzZW4pLCB3ZWxjaGVzIHp1a3VlbmZ0aWcgbmljaHQgbWVociB1ZWJlcgorCSAgQW5ncmlmZmUgaW5mb3JtaWVydCB3ZXJkZW4gc29sbCB1bmQgZGllc2UgYXVjaCBuaWNodCBtZWhyIGFid2VocnQuCisKK0JFU0NIUkVJQlVORzoKKwlFaW4gTGViZXdlc2VuLCB3ZWxjaGVzIGFuZ2VncmlmZmVuIHdpcmQsIGthbm4gYW5kZXJlIE9iamVrdGUgdWViZXIKKwllaW5lbiBzb2xjaGVuIEFuZ3JpZmYgcGVyIEluZm9ybURlZmVuZCgpIGluZm9ybWllcmVuIG9kZXIgaWhuZW4KKwlzb2dhciBkaWUgTW9lZ2xpY2hrZWl0IGdlYmVuLCBwZXIgRGVmZW5kT3RoZXIoKSBkaXJla3QgaW4gZGVuCisJbGF1ZmVuZGVuIEFuZ3JpZmYgZWluenVncmVpZmVuIChTY2hhZWRlbiBhYndlaHJlbiBvZGVyIHVtd2FuZGVsbikuCisJSW0gTm9ybWFsZmFsbCBoYW5kZWx0IGVzIHNpY2ggaGllcmJlaSB1bSBhbmRlcmUgTGViZXdlc2VuLCB3ZWxjaGUKKwlhbHMgVmVydGVpZGlnZXIgZGVzIGFuZ2VncmlmZmVuZW4gTGViZXdlc2VucyBhdWZ0cmV0ZW46IERhaGVyIGRlcgorCU5hbWUgZGVyIEZ1bmt0aW9uLiBBdXNzZXJkZW0gYmVzdGVodCBkaWUgRWluc2NocmFlbmt1bmcsIGRhc3MgZGllc2UKKwlPYmpla3RlIGluIGRlciBnbGVpY2hlbiBVbWdlYnVuZyBzZWluIG11ZXNzZW4sIHdpZSBkYXMgenUKKwl2ZXJ0ZWlkaWdlbmRlIExlYmV3ZXNlbi4KKwlEaWUgT2JqZWt0ZSBzaW5kIGluIEZvcm0gZWluZXMgQXJyYXlzIGluIGRlciBQcm9wZXJ0eSBQX0RFRkVOREVSUworCWFiZ2VzcGVpY2hlcnQgdW5kIGtvZW5uZW4gZG9ydCBhYmdlcnVmZW4gd2VyZGVuLiBOYXR1ZXJsaWNoIGthbm4KKwltYW4gYWx0ZSBPYmpla3RlIGRpcmVrdCBkb3J0IGxvZXNjaGVuLCBqZWRvY2ggc29sbHRlIG1hbiBkaWUKKwloaWVyZnVlciBiZXJlaXRnZXN0ZWxsdGUgRnVua3Rpb25lbiBSZW1vdmVEZWZlbmRlcigpIHZlcndlbmRlbi4KKwladW0gSGluenVmdWVnZW4gdm9uIEVpbnRyYWVnZW4gaW0gQXJyYXkgc3RlaHQgZWJlbmZhbGxzIGVpbmUKKwlGdW5rdGlvbiBiZXJlaXQ6IEFkZERlZmVuZGVyKCkuCisKK1NJRUhFIEFVQ0g6CisJQWRkRGVmZW5kZXIoKSwgSW5mb3JtRGVmZW5kKCksIERlZmVuZE90aGVyKCksCisJUF9ERUZFTkRFUlMsIC9zdGQvbGl2aW5nL2NvbWJhdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFRodSBKdWwgMjkgMTg6NDg6NDUgMTk5OSBieSBQYXRyeW4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZURldGFpbCBiL2RvYy9sZnVuL1JlbW92ZURldGFpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNhZjJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlRGV0YWlsCkBAIC0wLDAgKzEsNTcgQEAKK1JlbW92ZURldGFpbCgpCisKK0ZVTktUSU9OOgorICAgIHZvaWQgUmVtb3ZlRGV0YWlsKG1peGVkICprZXlzKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAga2V5cworICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiB6dSBlbnRmZXJuZW5kZW4gRGV0YWlscy4KKworQkVTQ0hSRUlCVU5HOgorICAgIEVudGZlcm50IGRpZSBpbiA8a2V5cz4gYW5nZWdlYmVuZW4gRGV0YWlscyBhdXMgZGVyIExpc3RlIGRlcgorICAgIHZvcmhhbmRlbmVuIERldGFpbHMuIFVlYmVyZ2lidCBtYW4gZnVlciA8a2V5cz4gZWluZSAwLCBzbyB3ZXJkZW4KKyAgICBzYWVtdGxpY2hlIERldGFpbHMgZW50ZmVybnQhCisKK0JFSVNQSUVMOgorICAgIEVpbiBrbGVpbmVzIEJlaXNwaWVsLCBiZWkgZGVtIGVpbmUgT2VmZm51bmcgZXJzY2hlaW50IHVuZCB3aWVkZXIKKyAgICB2ZXJzY2h3aW5kZXQsIGplIG5hY2hkZW0sIG9iIG1hbiBlaW5lIEx1a2Ugb2VmZm5ldCBvZGVyIHNjaGxpZXNzdC4KKyAgICAgIGludCBvZWZmbmVMdWtlKHN0cmluZyBzdHIpOworICAgICAgaW50IHNjaGxpZXNzZUx1a2Uoc3RyaW5nIHN0cik7CisgICAgICAuLi4KKyAgICAgIEFkZENtZCgib2VmZm5lIiwgIydvZWZmbmVMdWtlKTsKKyAgICAgIEFkZENtZCgic2NobGllc3NlIiwgIydzY2hsaWVzc2VMdWtlKTsKKyAgICAgIC4uLgorICAgICAgaW50IG9lZmZuZUx1a2Uoc3RyaW5nIHN0cikgeworICAgICAgICBpZihzdHIhPSJsdWtlIiB8fCBHZXREZXRhaWwoIm9lZmZudW5nIikpCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEFkZERldGFpbCgib2VmZm51bmciLCJEdSBzaWVoc3QgZWluZSBrbGVpbmUgT2VmZm51bmcuXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGludCBzY2hsaWVzc2VMdWtlKHN0cmluZyBzdHIpIHsKKyAgICAgICAgaWYoc3RyIT0ibHVrZSIgfHwgIUdldERldGFpbCgib2VmZm51bmciKSkKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgUmVtb3ZlRGV0YWlsKCJvZWZmbnVuZyIpOyAvLyBEZXRhaWwgd2llZGVyIGVudGZlcm5lbgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworQkVNRVJLVU5HRU46CisgICAgRGEgaW50ZXJuIERldGFpbHMgdW5kIFNwZWNpYWxEZXRhaWxzIGltIGdsZWljaGVuIE1hcHBpbmcgdmVyd2FsdGV0CisgICAgd2VyZGVuLCBsYXNzZW4gc2ljaCBtaXQgZGllc2VyIEZ1bmt0aW9uIGF1Y2ggU3BlY2lhbERldGFpbHMKKyAgICBlbnRmZXJuZW4uCisgICAgRGllIEZ1bmt0aW9uIFJlbW92ZVNwZWNpYWxEZXRhaWwoKSBzb2xsdGUgYWxzbyBuaWNodCBnZW51dHp0IHdlcmRlbiEKKworU0lFSEUgQVVDSDoKKyAgICBTZXR6ZW46ICAgIEFkZERldGFpbCgpLCBBZGRSZWFkRGV0YWlsKCksIEFkZFNtZWxscygpLCBBZGRTb3VuZHMoKSwKKyAgICAgICAgICAgICAgIEFkZFRvdWNoRGV0YWlsKCkKKyAgICBMb2VzY2hlbjogIFJlbW92ZVJlYWREZXRhaWwoKSwgUmVtb3ZlU21lbGxzKCksCisgICAgICAgICAgICAgICBSZW1vdmVTb3VuZHMoKSwgUmVtb3ZlVG91Y2hEZXRhaWwoKQorICAgIERhdGVuOiAgICAgUF9ERVRBSUxTLCBQX1JFQURfREVUQUlMUywgUF9TTUVMTFMsIFBfU09VTkRTLAorICAgICAgICAgICAgICAgUF9UT1VDSF9ERVRBSUxTLCBQX1NQRUNJQUxfREVUQUlMUworICAgIFZlcmFsdGV0OiAgQWRkU3BlY2lhbERldGFpbCgpLCBSZW1vdmVTcGVjaWFsRGV0YWlsKCksIFBfUkVBRF9NU0cKKyAgICBTb25zdGlnZXM6IEdldERldGFpbCgpLCBicmVha19zdHJpbmcoKQorCis4LiBKdWxpIDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZW1vdmVFeGl0IGIvZG9jL2xmdW4vUmVtb3ZlRXhpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM2MWYyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlRXhpdApAQCAtMCwwICsxLDI4IEBACitSZW1vdmVFeGl0KCkKK0ZVTktUSU9OOgorICAgICB2b2lkIFJlbW92ZUV4aXQoc3RyaW5nfHN0cmluZyogY21kKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3Jvb20vZXhpdHMKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcvc3RyaW5nKiBjbWQKKyAgICAgICAgICBSaWNodHVuZyhlbiksIGRpZSBlbnRmZXJudCB3ZXJkZW4gc29sbGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZSBpbiBjbWQgYW5nZWdlYmVuZW4gQXVzZ2FlbmdlIHdlcmRlbiB3aWVkZXIgZW50ZmVybnQuCisKKyAgICAgSXN0IGNtZCA9IDAsIHNvIHdlcmRlbiBhbGxlIEF1c2dhZW5nZSBlbnRmZXJudC4KKworQkVNRVJLVU5HRU46CisgICAgIEF1c2dhZW5nZSB3ZXJkZW4gYW4gZGVyIGdsZWljaGVuIFN0ZWxsZSBnZXNwZWljaGVydDoKKyAgICAgLSBSZW1vdmVFeGl0KCkgZ3JlaWZ0IGF1ZiBkaWUgZ2xlaWNoZW4gRGF0ZW4gd2llIFJlbW92ZVNwZWNpYWxFeGl0KCkKKyAgICAgICB6dSwgZW50ZmVybnQgYWxzbyBhdWNoIHNwZXppZWxsZSBBdXNnYWVuZ2UhCisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZEV4aXQoKSwgQWRkU3BlY2lhbEV4aXQoKSwgR2V0RXhpdHMoKQorICAgICBSZW1vdmVTcGVjaWFsRXhpdCgpLAorICAgICBIX0hPT0tfRVhJVF9VU0UsIFBfRVhJVFMsIFBfSElERV9FWElUUywgL3N0ZC9yb29tL2V4aXRzLmMKKyAgICAgYXVzZ2FlbmdlCisKKzMxLjAxLjIwMTUsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZUV4dHJhTG9vayBiL2RvYy9sZnVuL1JlbW92ZUV4dHJhTG9vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmExOTZlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlRXh0cmFMb29rCkBAIC0wLDAgKzEsMzkgQEAKK1JlbW92ZUV4dHJhTG9vaygpCisKK2ludCBSZW1vdmVFeHRyYUxvb2soc3RyaW5nIGxvb2spOworCitERUZJTklFUlQgSU46CisgICAvc3RkL2xpdmluZy9kZXNjcmlwdGlvbi5jCisKK0JFU0NIUkVJQlVORzoKKyAgIERlciBFeHRyYWxvb2sgZXJzY2hlaW50IGluIGRlciBMYW5nYmVzY2hyZWlidW5nIGRlcyBMZWJld2VzZW5zLgorICAgRWludHJhZWdlIGtvZW5uZW4gbWl0IGRpZXNlciBGdW5rdGlvbiAodm9yemVpdGlnKSB3aWVkZXIgZW50ZmVybnQgd2VyZGVuLgorCitBUkdVTUVOVEU6CisgIC0gc3RyaW5nIGtleToKKyAgICBTY2hsdWVzc2Vsd29ydCwgdW50ZXIgZGVtIGRlciBFaW50cmFnLCBkZW4gbWFuIGVudGZlcm5lbiBtb2VjaHRlLCB2b24KKyAgICBBZGRFeHRyYUxvb2soKSByZWdpc3RyaWVydCB3dXJkZS4KKworUlVFQ0tHQUJFV0VSVEU6CisgID4gMCwgZmFsbHMgZGVyIEVpbnRyYWcgZXJmb2xncmVpY2ggZW50ZmVybnQgd3VyZGUuCisgIDwgMCBzb25zdC4KKyAgICAtMToga2VpbmVuIChndWVsdGlnZW4pIDxrZXk+IHVlYmVyZ2ViZW4uCisgICAgLTI6IGtlaW4gRWludHJhZyBmdWVyIDxrZXk+IGdlZnVuZGVuLgorCitCRU1FUktVTkdFTjoKKyAgQmVpbSBFbnRmZXJuZW4gbWl0IGRpZXNlciBGdW5rdGlvbiB3aXJkIGRpZSAiRW5kZW1lbGR1bmciIGRlcyBlbnRmZXJudGVuCisgIEVpbnRyYWdlcyBuaWNodCBhdXNnZWdlYmVuLgorCitCRUlTUElFTEU6CisgICMgRXh0cmFsb29rIHJlZ2lzdHJpZXJlbi4KKyAgbGl2aW5nLT5BZGRFeHRyYUxvb2soIkBXRVIxIHdpcmQgdm9uIGVpbmVyIEhvcmRlIERhZW1vbmVuIHZlcmZvbGd0LiIsCisgICAgICAgICAgICAgICAgICAgICAgICJlbm5veF9kYWVtb25lbmhvcmRlbnZlcmZvbGdlcmxvb2siKTsKKyAgIyBOdW4ga2FubiBkZXIgRWludHJhZyBhdWNoIHdpZWRlciBlbnRmZXJudCB3ZXJkZW46CisgIGxpdmluZy0+UmVtb3ZlRXh0cmFMb29rKCJlbm5veF9kYWVtb25lbmhvcmRlbnZlcmZvbGdlcmxvb2siKTsKKworU0lFSEUgQVVDSDoKKyAgIEFkZEV4dHJhTG9vaygpLAorICAgUF9JTlRFUk5BTF9FWFRSQV9MT09LCisKKzE0LjA1LjIwMDcsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlRml4ZWRPYmplY3QgYi9kb2MvbGZ1bi9SZW1vdmVGaXhlZE9iamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE2YjJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlRml4ZWRPYmplY3QKQEAgLTAsMCArMSw0MCBAQAorUmVtb3ZlRml4ZWRPYmplY3QoKQorCitGVU5LVElPTjoKKwl2b2lkIFJlbW92ZUZpeGVkT2JqZWN0KHN0cmluZyBmaWxlbmFtZSk7CisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL2xhZGVuLmMKKworQVJHVU1FTlRFOgorCXN0cgorCSAgRGF0ZWluYW1lIGRlcyBPYmpla3Rlcywgd2VsY2hlcyBuaWNodCBtZWhyIGRhdWVyaGFmdCBpbSBMYWRlbiBzZWluCisJICBzb2xsLgorCitSVWVDS0dBQkVXRVJUOgorICAgICAgICBrZWluZXIKKworQkVTQ0hSRUlCVU5HOgorCU9iamVrdGUsIGRpZSBtaXR0ZWxzIGRlciBGdW5rdGlvbiBBZGRGaXhlZE9iamVjdCgpIGltIExhZGVuCisJZWluZ2VidW5kZW4gd2VyZGVuLCBzaW5kIGRvcnQgc3RhZW5kaWcgdmVyZnVlZ2Jhci4gVW0gZGllc2VuIFp1c3RhbmQKKwl3aWVkZXIgYXVmenVoZWJlbiwga2FubiBtYW4gc2llIG1pdHRlbHMgZGllc2VyIEZ1bmt0aW9uIHdpZWRlcgorCWVudGZlcm5lbi4gRXZlbnR1ZWxsIGltIExhZ2VyIGJlZmluZGxpY2hlIE9iamVrdGUgZGllc2VyIEFydCB3ZXJkZW4KKwloaWVyYmVpIG5pY2h0IHplcnN0b2VydCB1bmQga29lbm5lbiBkdXJjaGF1cyBub2NoIGdla2F1ZnQgd2VyZGVuLAorCWJpcyBzaWUgYWxsZSBzaW5kLiBEYW5hY2ggZ2lidCBlcyBzaWUgZG9ydCBuaWNodCBtZWhyIQorCitCRUlTUElFTEU6CisJSW0gYWxsZW4gTGFlZGVuIGdpYnQgZXMgc2Nob24gZWluIE9iamVrdCwgd2VsY2hlcyBkb3J0CisJc3RhbmRhcmRtYWVzc2lnIGVyaGFlbHRsaWNoIGlzdC4gRm9sZ2VuZGUgWmVpbGUgc29yZ3QgZGFmdWVyOgorCSAgQWRkRml4ZWRPYmplY3QoIi9vYmovYm9lcnNlIiw4MCwoeyJib2Vyc2UiLCJnZWxkYm9lcnNlIn0pKTsKKwlXZW5uIG1hbiBkYXMgaW4gc2VpbmVtIExhZGVuIG5pY2h0IHd1ZW5zY2h0LCBrYW5uIG1hbiBkaWUgR2VsZGJvZXJzZQorCW1pdHRlbHMgZm9sZ2VuZGVyIFplaWxlIHdpZWRlciBhdXMgZGVtIExhZGVuIGxvZXNjaGVuOgorCSAgUmVtb3ZlRml4ZWRPYmplY3QoIi9vYmovYm9lcnNlIik7CisJRXMgaXN0IG5pY2h0IG1vZWdsaWNoLCBrZWluZSBvZGVyIG1laHJlcmUgT2JqZWt0ZSBhbnp1Z2ViZW4sIHVtIGF1ZgorCWRpZXNlIFdlaXNlIGFsbGUgYnp3LiBtZWhyZXJlIE9iamVrdGUgYWxzIG5pY2h0IG1laHIgc3RhZW5kaWcKKwl2ZXJmdWVnYmFyIHp1IG1hcmtpZXJlbi4KKworU0lFSEUgQVVDSDoKKwlBZGRGaXhlZE9iamVjdCgpLCBTZXRTdG9yYWdlUm9vbSgpLCAvc3RkL3N0b3JlLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogVGh1IEp1biAxOCAxNDoxOToxOSAxOTk4IGJ5IFBhdHJ5bgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlRnJvbU1lbnUgYi9kb2MvbGZ1bi9SZW1vdmVGcm9tTWVudQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODMyNmFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlRnJvbU1lbnUKQEAgLTAsMCArMSwzMiBAQAorUmVtb3ZlRnJvbU1lbnUoKQorCitGVU5LVElPTjoKKyAgICAgaW50IFJlbW92ZUZyb21NZW51KG1peGVkIGlkcykKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3B1Yi5jCisKK0FSR1VNRU5URToKKyAgICAgaWRzIC0gc3RyaW5nIG9kZXIgc3RyaW5nKgorCSAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzLCBtaXQgZGVuZW4gc2ljaCBkaWUgU3BlaXNlIGJ6dy4KKyAgICAgICAgICAgZGFzIEdldHJhZW5rIGJlaW0gQmVzdGVsbGVuIGFuc3ByZWNoZW4gbGFlc3N0LgorCitSVUVDS0dBQkVXRVJUOgorICAgICBpbnQgLSBBbnphaGwgZW50ZmVybnRlciBFaW56ZWxtZW51ZWVpbnRyYWVnZQorCitCRVNDSFJFSUJVTkc6CisgICAgIE1pdCBkaWVzZXIgTWV0aG9kZSBrYW5uIG1hbiBpZC1iYXNpZXJ0IFNwZWlzZW4gdW5kIEdldHJhZW5rZQorICAgICB3aWVkZXIgdm9uIGRlciBLYXJ0ZSBlbnRmZXJuZW4gKHdlbm4gekIgbnVyIHNhaXNvbmJhc2llcnQKKyAgICAgYmVzdGltbXRlIERpbmdlIGFuZ2Vib3RlbiB3ZXJkZW4gc29sbGVuKS4KKyAgICAgCitCRU1FUktVTkdFTjoKKyAgICAgLSBzaWNoIHp3aXNjaGVuIHp3ZWkgU3BlaXNlbiB1ZWJlcnNjaG5laWRlbmRlIElEcyBmdWVocmVuIHp1CisgICAgICAgdW5kZWZpbmllcnRlbSBWZXJoYWx0ZW4hCisgICAgIC0gYmVpIEJlbnV0enVuZyB2b24gUmVtb3ZlRnJvbU1lbnUgc29sbHRlIG1hbiBpbiBEZWxheS1TcGVpc2VuIG9kZXIKKyAgICAgICAtR2V0cmFlbmtlbiBhdWYgZGllIE51dHp1bmcgdm9tIGlkZW50LVBhcmFtZXRlciBpbiBkZW4KKyAgICAgICBTZXJ2aWVybmFjaHJpY2h0ZW4gdmVyemljaHRlbiAoZXMgc2VpLCBtYW4gd2Vpc3Mgd2FzIG1hbiB0dXQpCisKK1NJRUhFIEFVQ0g6CisgICAgIEFkZFRvTWVudSgpLCBBZGRGb29kKCksIEFkZERyaW5rKCksIC9zeXMvcHViLmgKKworMTUuIEZlYnJ1YXIgMjAwOSBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlRnVuYyBiL2RvYy9sZnVuL1JlbW92ZUZ1bmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0YWJlNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1JlbW92ZUZ1bmMKQEAgLTAsMCArMSw4NyBAQAorUmVtb3ZlRnVuYygpCisKK0ZVTktUSU9OOgorICAgICBpbnQgUmVtb3ZlRnVuYyhvYmplY3QgcnVlc3QsIGludCBpbmZvLCBvYmplY3QgdXNlcik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgZWlnZW5lbiBPYmpla3RlbiAoZnVlciAvc3RkL2Nsb3RoaW5nL3dlYXIpCisKK0FSR1VNRU5URToKKyAgICAgcnVlc3QgKG9iamVjdCkKKyAgICAgICAgICBEaWUgUnVlc3R1bmcvS2xlaWR1bmcsIGRpZSBhdXNnZXpvZ2VuIHdlcmRlbiBzb2xsLgorICAgICBpbmZvIChpbnQpCisgICAgICAgICAgQmVpIChpbmZvJk1fU0lMRU5UKSB3aXJkIGtlaW5lIE1lbGR1bmcgdWViZXIgZGFzIEF1c3ppZWhlbgorICAgICAgICAgIGF1c2dlZ2ViZW4uCisgICAgICAgICAgQmVpIChpbmZvJk1fTk9DSEVDSykgd2lyZCBkaWUgS2xlaWR1bmcgYXVzZ2V6b2dlbiwgZWdhbCB3YXMgZGllc2UKKyAgICAgICAgICBGdW5rdGlvbiB6dXJ1ZWNrZ2lidC4gRGllcyB0cml0dCBpbnNiZXNvbmRlcmUgZGFubiBhdWYsIHdlbm4gZGVyCisgICAgICAgICAgU3BpZWxlciwgZGVyIGRpZSBSdWVzdHVuZyB0cmFlZ3QsIHN0aXJidCB1bmQgZGllIFJ1ZXN0dW5nIGluCisgICAgICAgICAgZGllIExlaWNoZSBiZXdlZ3Qgd2lyZC4KKyAgICAgdXNlciAob2JqZWN0KQorICAgICAgICAgIERhcyBMZWJld2VzZW4sIHdlbGNoZXMgZGllIFJ1ZXN0dW5nL0tsZWlkdW5nIGdlcmFkZSB0cmFlZ3QgdW5kIHNpZQorICAgICAgICAgIGF1c3ppZWhlbiB3aWxsLgorCitCRVNDSFJFSUJVTkc6CisgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24ga2FubiBtYW4gcHJ1ZWZlbiwgb2Igc2ljaCBkYXMgS2xlaWR1bmdzc3R1ZWNrIGJ6dy4KKyAgICAgUnVlc3R1bmcgPHJ1ZXN0PiB2b24gdGhpc19wbGF5ZXIoKSBhdXN6aWVoZW4gbGFlc3N0IG9kZXIgbmljaHQuCisgICAgIEthbm4gZGllIFJ1ZXN0dW5nIGF1c2dlem9nZW4gd2VyZGVuLCBzbyBtdXNzIGVpbiBXZXJ0IHVuZ2xlaWNoIDAKKyAgICAgenVydWVja2dlZ2ViZW4gd2VyZGVuLgorICAgICAKKyAgICAgRGllc2UgRnVua3Rpb24gbWVsZGV0IG51ciBlaW5lbiBfV3Vuc2NoXyBhbi4gRGllc2VyIGthbm4gaWdub3JpZXJ0CisgICAgIHdlcmRlbiAoei5CLiBiZWkgYmVzdGltbXRlbiBCZXdlZ3VuZ2VuLCBUb2QgZGVzIFNwaWVsZXJzIGV0Yy4pLgorICAgICBVbmFiaGFlbmdpZyB2b20gV2VydCBkaWVzZXIgRnVua3Rpb24ga2FubiBkYXMgQXVzemllaGVuIG5vY2ggU2NoZWl0ZXJuCisgICAgIG9kZXIgRXJ6d3VuZ2VuIHdlcmRlbi4KKyAgICAgV2VubiBpaHIgc2ljaGVyIHNlaW4gd29sbHQsIGRhc3MgZGVyIFNwaWVsZXIgZWluIE9iamVrdCBhbmdlem9nZW4gaGF0LAorICAgICBiZW51dHp0IGJpdHRlIEluZm9ybVVud2VhcigpLgorCitSVWVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIHNpY2ggZGllIFJ1ZXN0dW5nIG5pY2h0IGF1c3ppZWhlbiBsYWVzc3QsIGFuc29uc3RlbiB1bmdsZWljaCAwLgorCitCRU1FUktVTkdFTjoKKyAgICAgVmVyZmx1Y2h0ZSBSdWVzdHVuZ2VuLCBkaWUgc2ljaCBlcnN0IG5hY2ggRW50ZmVybnVuZyBkZXMgRmx1Y2hlcyB3aWVkZXIKKyAgICAgYXVzemllaGVuIGxhc3Nlbiwgc29sbHRlIG1hbiBiZXNzZXIgbWl0IFBfQ1VSU0VEIHJlYWxpc2llcmVuIChtYW4gc3BhcnQKKyAgICAgZGllIFJlbW92ZUZ1bmMoKSBlaW4pLgorICAgICBCaXR0ZSBuaWNodCBkcmF1ZiB2ZXJsYXNzZW4sIGRhc3MgdGhpc19wbGF5ZXIoKSBkYXMgYXVzemllaGVuZGUgTGViZXdlc2VuCisgICAgIGlzdC4KKyAgICAgRGllIFJlaWhlbmZvbGdlIGRlciBBcmd1bWVudGUgaXN0IGV0d2FzIHVuc2Nob2VuLCBhYmVyIGxlaWRlciB3dXJkZSA8dXNlcj4KKyAgICAgZXJoZWJsaWNoIHNwYWV0ZXIgaGluenVnZWZ1ZWd0IHVuZCBlcyB3YXIgdW5tb2VnbGljaCwgZWluaWdlIGh1bmRlcnQKKyAgICAgT2JqZWt0ZSB6dSBhZW5kZXJuLgorCitCRUlTUElFTEU6CisgICAgIEVpbiBVbWhhbmcsIGRlbiBtYW4gbnVyIG1pdCBndXRlciBFaW5zdGVsbHVuZyB3aWVkZXIgYXVzemllaGVuIGthbm46CisKKyAgICAgaW5oZXJpdCAic3RkL2FybW91ci5jIjsKKworICAgICAjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorICAgICAjaW5jbHVkZSA8bW92aW5nLmg+CisKKyAgICAgY3JlYXRlKCkKKyAgICAgeworICAgICAgIDo6Y3JlYXRlKCk7CisKKyAgICAgICBTZXRQcm9wKFBfQVJNT1VSX1RZUEUsIEFUX0NMT0FLKTsKKyAgICAgICAvKiB6aWcgd2VpdGVyZSBTZXRQcm9wJ3MsIHVtIGRlbiBVbWhhbmcgenUga29uZmlndXJpZXJlbiAqLworCisgICAgICAgLyogUmVtb3ZlRnVuYygpIGlzdCBpbSBVbWhhbmcgc2VsYnN0IHp1IGZpbmRlbiAqLworICAgICAgIFNldFByb3AoUF9SRU1PVkVfRlVOQywgdGhpc19vYmplY3QoKSk7CisgICAgIH0KKworICAgICBpbnQgUmVtb3ZlRnVuYyhvYmplY3QgbWUsIGludCBpbmZvLCBvYmplY3QgdXNlcikKKyAgICAgeworICAgICAgIGlmICh1c2VyLT5RdWVyeVByb3AoUF9BTElHTikgPj0gMCB8fCAoaW5mbyZNX05PQ0hFQ0spKQorICAgICAgICAgcmV0dXJuIDE7ICAgLyogZ3V0ZSBDaGFyYWt0ZXJlIGtvZW5uZW4gZGVuIFVtaGFuZyBhdXN6aWVoZW4gKi8KKworICAgICAgIC8qIEFuc29uc3RlbiBnZWJlbiB3aXIgZXZ0bC4gZWluZW4gZW50c3ByZWNoZW5kZW4gSGlud2VpcyBhdXM6ICovCisgICAgICAgaWYgKCEoaW5mbyZNX1NJTEVOVCkpCisgICAgICAgICAgIHdyaXRlKCAiRGVyIFVtaGFuZyB3aXJkIHZvbiBEZWluZXIgQm9zaGVpdCBzbyBzZWhyICIKKyAgICAgICAgICAgICAgICAgKyJhbmdlem9nZW4sIGRhc3MgRHUgaWhuXG5uaWNodCBtZWhyIGF1c3ppZWhlbiBrYW5uc3QhXG4iKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBQX1dFQVJfTVNHLCBQX1VOV0VBUl9NU0csIFBfV0lFTERfTVNHLCBQX1VOV0lFTERfTVNHCisgICAgIERvVW53ZWFyKCksIERvV2VhcigpLCBJbmZvcm1XZWFyKCksIEluZm9ybVVud2VhcigpCisgICAgIC9zdGQvY2xvdGhpbmcvd2Vhci5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAyLjA3LjIwMTMsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlSWQgYi9kb2MvbGZ1bi9SZW1vdmVJZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU3MDk5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlSWQKQEAgLTAsMCArMSwyNiBAQAorUmVtb3ZlSWQoKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBSZW1vdmVJZChzdHJpbmd8c3RyaW5nKiBpZHMpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgIGlkcworICAgICAgICAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzIG1pdCBkZW4gQmV6ZWljaG51bmdlbiwgZGllIGF1cyBkZXIKKyAgICAgICAgICBMaXN0ZSBkZXIgSURzIGRlcyBPYmpla3RlcyBlbnRmZXJudCB3ZXJkZW4gc29sbGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgIFdlbm4gZWluIE9iamVrdCBzaWNoIG5pY2h0IG1laHIgbWl0IGdld2lzc2VuIEJlemVpY2huZXJuIGFuc3ByZWNoZW4KKyAgICAgbGFzc2VuIHNvbGwsIGthbm4gbWFuIGRpZXNlIG1pdCBkaWVzZXIgRnVua3Rpb24gZW50ZmVybmVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworU0lFSEUgQVVDSDoKKyAgICAgQWRkSWQoKSwgUmVtb3ZlQWRqZWN0aXZlKCksIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyMC4wMS4yMDE1LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZUluZm8gYi9kb2MvbGZ1bi9SZW1vdmVJbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZWQ2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9SZW1vdmVJbmZvCkBAIC0wLDAgKzEsMjQgQEAKK1JlbW92ZUluZm8oKQorRlVOS1RJT046CisgICAgIHZvaWQgUmVtb3ZlSW5mbyhzdHJpbmcga2V5KQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbnBjL2luZm8uYworCitBUkdVTUVOVEU6CisgICAgIGtleQl6dSBsb2VzY2hlbmRlciBTY2hsdWVzc2VsCisKK0JFU0NIUkVJQlVORzoKKyAgICAgTG9lc2NodCBkaWUgQW50d29ydCB6dW0gZW50c3ByZWNoZW5kZW4gRnJhZ2VzY2hsdWVzc2VsLgorCitCRUlTUElFTDoKKyAgICAgLy8gZXJzdGVsbGVuIHVuZCBsb2VzY2hlbgorICAgICBBZGRJbmZvKCJnb2xkIiwic2FndDogSWNoIGhhYmUga2VpbmVzLlxuIik7CisgICAgIFJlbW92ZUluZm8oImdvbGQiKTsKKworU0lFSEUgQVVDSDoKKyAgICAgQWRkSW5mbyhMKSwgQWRkU3BlY2lhbEluZm8oTCkKKyAgICAgUF9QUkVfSU5GTywgUF9ERUZBVUxUX0lORk8KKyAgICAgL3N0ZC9ucGMvaW5mby5jCisKKzE3LkF1Zy4yMDAzIEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZW1vdmVJdGVtIGIvZG9jL2xmdW4vUmVtb3ZlSXRlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTQ1NGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlSXRlbQpAQCAtMCwwICsxLDQxIEBACitSZW1vdmVJdGVtKCkKKworRlVOS1RJT046CisJdm9pZCBSZW1vdmVJdGVtKG1peGVkIGZpbGUpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9yb29tL2l0ZW1zLmMKKworQVJHVU1FTlRFOgorCWZpbGUKKwkgICAgIFN0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzIG1pdCBkZW0gTmFtZW4gZGVzIHp1IGVudGZlcm5lbmRlbgorCSAgICAgT2JqZWt0cy4KKworQkVTQ0hSRUlCVU5HOgorCURhcyBtaXQgQWRkSXRlbShmaWxlKSBkZW0gUmF1bSBoaW56dWdlZnVlZ3RlIE9iamVrdCB3aXJkIHdpZWRlciBhdXMKKwlkZXIgTGlzdGUgZGVyIE9iamVrdGUgZW50ZmVybnQuCisJV3VyZGUgYmVpIEFkZEl0ZW0oKSBlaW4gQXJyYXkgdm9uIERhdGVpbmFtZW4gdWViZXJnZWJlbiwgc28gbXVzcyBkYXMKKwlzZWxiZSBBcnJheSBhdWNoIGJlaSBSZW1vdmVJdGVtKCkgdWViZXJnZWJlbiB3ZXJkZW4hCisJRmFsbHMgZGFzIE9iamVrdCwgZGFzIGR1cmNoIGRlbiBBZGRJdGVtKCktQXVmcnVmIGVyemV1Z3Qgd3VyZGUsIHNpY2gKKwlub2NoIGltIFJhdW0gYmVmaW5kZXQsIHdpcmQgZXMgZHVyY2ggZGVuIFJlbW92ZUl0ZW0oKS1BdWZydWYgemVyc3RvZXJ0LgorCitSVUVDS0dBQkVXRVJUOgorCWtlaW5lcgorCitCRUlTUElFTEU6CisJRWluIG11ZWxsc2NobHVja2VyZnJlaWVyIExhZGVuIGxhZXNzdCBzaWNoIHdpZSBmb2xndCBlcnpldWdlbjoKKworCWluaGVyaXQgIi9zdGQvbGFkZW4iOworCSNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisKKwljcmVhdGUoKQorCXsKKwkgIDo6Y3JlYXRlKCk7ICAvLyBIaWVyIHdpcmQgdS5hLiBkZXIgTXVlbGxzY2hsdWNrZXIgZXJ6ZXVndAorCisJICBSZW1vdmVJdGVtKCIvb2JqL2VudHNvcmciKTsgLy8gdW5kIHdlZyBkYW1pdCEKKworCSAgU2V0UHJvcCguLi4pOyAgLy8gdW5kIGRpZSBub3JtYWxlIEJlc2NocmVpYnVuZy4uLgorCX0KKworU0lFSEUgQVVDSDoKKwlBZGRJdGVtKCksIC9zdGQvcm9vbS9pdGVtcy5jCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZW1vdmVLbm93blBvdGlvbiBiL2RvYy9sZnVuL1JlbW92ZUtub3duUG90aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTQxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9SZW1vdmVLbm93blBvdGlvbgpAQCAtMCwwICsxLDI1IEBACitSZW1vdmVLbm93blBvdGlvbigpCisKK0ZVTktUSU9OOgorICAgICBpbnQgUmVtb3ZlS25vd25Qb3Rpb24oaW50IG5yKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcGxheWVyL3BvdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgaW50IG5yICAgICAgIE51bW1lciBlaW5lcyBaVHMKKworQkVTQ0hSRUlCVU5HOgorICAgICBFbnRmZXJudCBlaW5lbiBiZWthbm50ZW4gWlQgYXVzIGVpbmVuIFNwaWVsZXIuIE51ciB2b20gT3Jha2VsIHJ1ZmJhci4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSAgRXJmb2xnCisgICAgIC0xIGZlaGxlbmRlIEJlcmVjaHRpZ3VuZworICAgICAtMiBOdW1tZXIgbmljaHQgZWluZ2V0cmFnZW4KKworU0lFSEUgQVVDSDoKKyAgICAgU29uc3RpZ2VzOiB6YXViZXJ0cmFlbmtlLCAvc2VjdXJlL3BvdGlvbm1hc3Rlci5jLCAvcm9vbS9vcmFrZWwuYworICAgICBWZXJ3YW5kdDogIEZpbmRQb3Rpb24oKSwgQWRkS25vd25Qb3Rpb24oKSwgSW5MaXN0KCkKKyAgICAgUHJvcHM6ICAgICBQX1BPVElPTlJPT01TLCBQX0tOT1dOX1BPVElPTlJPT01TCisKKzYuRmViIDIwMTYgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZVBsdXJhbElkIGIvZG9jL2xmdW4vUmVtb3ZlUGx1cmFsSWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2MGUwMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1JlbW92ZVBsdXJhbElkCkBAIC0wLDAgKzEsMjggQEAKK1JlbW92ZVBsdXJhbElkKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgUmVtb3ZlUGx1cmFsSWQobWl4ZWQgaWQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdW5pdC5jCisKK0FSR1VNRU5URToKKyAgICAgaWQKKyAgICAgICAgICBJZGVudGZpa2F0aW9uc3N0cmluZyBvZGVyIEFycmF5IHZvbiBTdHJpbmdzCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2VyZGVuIGVpbiBvZGVyIG1laHJlcmUgQmV6ZWljaG5lciBlbnRmZXJudCwgbWl0IGRlbmVuIHNpY2ggCisgICAgIG1laHJlcmUgRWluaGVpdGVuIGRlciBNZW5nZSBhbnNwcmVjaGVuIGxhc3Nlbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFSVNQSUVMRToKKyAgICAgc2llaGUgL2l0ZW1zL21vbmV5LmMKKworU0lFSEUgQVVDSDoKKyAgICAgUmVtb3ZlU2luZ3VsYXJJZCgpLCBBZGRQbHVyYWxJZCgpLCBBZGRJZCgpLCBpZCgpLCAvc3RkL3VuaXQuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBNb24gSnVsIDE0IDExOjMwOjAwIDE5OTcgYnkgU2lsdmFuYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZW1vdmVQdXJzdWVyIGIvZG9jL2xmdW4vUmVtb3ZlUHVyc3VlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmEyMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlUHVyc3VlcgpAQCAtMCwwICsxLDI2IEBACitSZW1vdmVSdXJzdWVyKCkKKworRlVOS1RJT046CisgIHZvaWQgUmVtb3ZlUHVyc3VlcihvYmplY3QgcHVyc3VlcikKKworQVJHVU1FTlRFOgorICBwdXJzdWVyOiBPYmpla3QsIGRhcyBhdXMgZGVyIFZlcmZvbGdlcmxpc3RlIGRlcyBPYmpla3RlcywgaW4gZGVtCisgICAgICAgICAgIFJlbW92ZVB1cnN1ZXIgYXVmZ2VydWZlbiB3dXJkZSwgYXVzZ2V0cmFnZW4gd2VyZGVuIHNvbGwuCisKK0ZVTktUSU9OOgorICBEdXJjaCBkZW4gQXVmcnVmIHZvbiBSZW1vdmVQdXJzdWVyIGluIGVpbmVtIE9iamVrdCwgd2VsY2hlcyBsaXZpbmcoKSBpc3QsCisgIHdpcmQgZGFzIE9iamVjdCwgd2VsY2hlcyBhbHMgQXJndW1lbnQgdWViZXJnZWJlbiB3dXJkZSBhdXMgZGVyIExpc3RlCisgIGRlciBWZXJmb2xnZXIgYXVzZ2V0cmFnZW4uCisKK1JVRUNLR0FCRVdFUlQ6CisgIGtlaW5lcgorCitCRU1FUktVTkc6CisgIGtlaW5lCisKK0JFSVNQSUVMRToKKyAgZmluZF9wbGF5ZXIoImpvZiIpLT5SZW1vdmVQdXJzdWVyKGZpbmRfcGxheWVyKCJraXJrIikpCisgIERhbmFjaCB3aXJkIEpvZiBuaWNodCBtZWhyIHZvbiBLaXJrIHZlcmZvbGd0LgorCitTSUVIRSBBVUNIOgorICAiQWRkUHVyc3VlciIsICJQcmV2ZW50Rm9sbG93IgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlUmVhZERldGFpbCBiL2RvYy9sZnVuL1JlbW92ZVJlYWREZXRhaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1Nzk1NAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1JlbW92ZVJlYWREZXRhaWwKQEAgLTAsMCArMSwzMSBAQAorUmVtb3ZlUmVhZERldGFpbCgpCisKK0ZVTktUSU9OOgorICAgIHZvaWQgUmVtb3ZlUmVhZERldGFpbChzdHJpbmd8c3RyaW5nKiBrZXlzKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAga2V5cworICAgICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiB6dSBlbnRmZXJuZW5kZW4gRGV0YWlscy4KKworQkVTQ0hSRUlCVU5HOgorICAgIEVudGZlcm50IGRpZSBpbiBrZXlzIGFuZ2VnZWJlbmVuIERldGFpbHMgYXVzIGRlciBMaXN0ZSBkZXIgdm9yaGFuZGVuZW4KKyAgICBsZXNiYXJlbiBEZXRhaWxzLgorCitCRU1FUktVTkdFTjoKKyAgICBVZWJlcmdpYnQgbWFuIGZ1ZXIga2V5cyBlaW5lIDAsIHNvIHdlcmRlbiBzYWVtdGxpY2hlIGxlc2JhcmVuIERldGFpbHMKKyAgICBlbnRmZXJudCEKKworU0lFSEUgQVVDSDoKKyAgICBTZXR6ZW46ICAgIEFkZERldGFpbCgpLCBBZGRSZWFkRGV0YWlsKCksIEFkZFNtZWxscygpLCBBZGRTb3VuZHMoKSwKKyAgICAgICAgICAgICAgIEFkZFRvdWNoRGV0YWlsKCkKKyAgICBMb2VzY2hlbjogIFJlbW92ZURldGFpbCgpLCBSZW1vdmVTbWVsbHMoKSwKKyAgICAgICAgICAgICAgIFJlbW92ZVNvdW5kcygpLCBSZW1vdmVUb3VjaERldGFpbCgpCisgICAgRGF0ZW46ICAgICBQX0RFVEFJTFMsIFBfUkVBRF9ERVRBSUxTLCBQX1NNRUxMUywgUF9TT1VORFMsIFBfVE9VQ0hfREVUQUlMUworICAgIFZlcmFsdGV0OiAgQWRkU3BlY2lhbERldGFpbCgpLCBSZW1vdmVTcGVjaWFsRGV0YWlsKCksIFBfUkVBRF9NU0cKKyAgICBTb25zdGlnZXM6IEdldERldGFpbCgpLCBicmVha19zdHJpbmcoKQorCisyMC4wMS4yMDE1LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZVJlc2lzdGFuY2VNb2RpZmllciBiL2RvYy9sZnVuL1JlbW92ZVJlc2lzdGFuY2VNb2RpZmllcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTYzMGZiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlUmVzaXN0YW5jZU1vZGlmaWVyCkBAIC0wLDAgKzEsMzcgQEAKK1JlbW92ZVJlc2lzdGFuY2VNb2RpZmllcigpCisKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIHZvaWQgUmVtb3ZlUmVzaXN0YW5jZU1vZGlmaWVyKHN0cmluZyBhZGQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nIGFkZDoKKyAgICAgIEVpbiBldmVudHVlbGxlciBJZGVudGlmaWthdG9yIGZ1ZXIgZWluZW4gZ2VzZXR6dGVuIE1vZGlmaWthdG9yLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZSB2b24gZWluZW0gT2JqZWt0IGltIFppZWxvYmpla3QgZ2VzZXR6dGUgUmVzaXN0ZW56IHdpcmQgZ2Vsb2VzY2h0LAorICAgICBkZXIgU2NobHVlc3NlbCBhZGQgd2lyZCBkYXp1IGJlbnV0enQsIGVpbmUgYmVzdGltbXRlIFJlc2lzdGVueiB6dQorICAgICBsb2VzY2hlbiAoc28ga2FubiBlaW4gc2V0emVuZGVzIE9iamVrdCBtZWhyZXJlIHZlcnNjaGllZGVuZSBSZS0KKyAgICAgc2lzdGVuemVuIHNldHplbiB1bmQgc2VsZWt0aXYgbG9lc2NoZW4pLgorCitCRUlTUElFTEU6CisgICAgIC8vIHVuc2VyIE9lbCBhdXMgQWRkUmVzaXN0YW5jZU1vZGlmaWVyKCkgdmVyYnJlbm50IGVuZGd1ZWx0aWcKKyAgICAgdmFyYXJncyB2b2lkIHRyaWdnZXJfc2Vuc2l0aXZlX2F0dGFjaygpIHsKKyAgICAgIC4uLgorICAgICAgaWYoZW52aXJvbm1lbnQoKSAmJiBsaXZpbmcoZW52aXJvbm1lbnQoKSkpIHsKKyAgICAgICBlbnZpcm9ubWVudCgpLT5SZW1vdmVSZXNpc3RhbmNlTW9kaWZpZXIoIm9lbCIpOworICAgICAgIHRlbGxfb2JqZWN0KGVudmlyb25tZW50KCksIkRhcyBPZWwgdmVyYnJlbm50IGVuZGd1ZWx0aWcuXG4iKTsKKyAgICAgIH0KKyAgICAgIHJlbW92ZSgpOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIE1vZGlmaWthdG9yZW46CUFkZFJlc2lzdGFuY2VNb2RpZmllciwgUF9SRVNJU1RBTkNFX01PRElGSUVSCisgICAgIHNpbXBsZSBSZXNpc3Rlbno6CVBfUkVTSVNUQU5DRSwgUF9WVUxORVJBQklMSVRZCisgICAgIEhhdXB0bWFwcGluZzoJUF9SRVNJU1RBTkNFX1NUUkVOR1RIUworICAgICBCZXJlY2hudW5nOglDaGVja1Jlc2lzdGFuY2UoKSwgVXBkYXRlUmVzaXN0YW5jZVN0cmVuZ3RocygpCisgICAgIGFuZGVyZXM6CQliYWxhbmNlLCAvc3RkL2FybW91ci9jb21iYXQuYywgL3N0ZC9saXZpbmcvY29tYmF0LmMKKworMjkuQXByIDIwMDIsIEdsb2luc29uQE1HCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZW1vdmVSb3V0ZSBiL2RvYy9sZnVuL1JlbW92ZVJvdXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDE3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9SZW1vdmVSb3V0ZQpAQCAtMCwwICsxLDIzIEBACitSZW1vdmVSb3V0ZSgpCisKK0ZVTktUSU9OOgorICAgICB2b2lkIFJlbW92ZVJvdXRlKCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90cmFuc3BvcnQuYworCitBUkdVTUVOVEU6CisgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGVyIFRyYW5zcG9ydGVyIHdpcmQgYW5nZWhhbHRlbiB1bmQgZGVyIGdlc2FtdGUgRmFocnBsYW4gd2lyZAorICAgICBnZWxvZXNjaHQuIERhbWl0IGxhc3NlbiBzaWNoIHp1bSBCZWlzcGllbCB2YXJpYWJsZSBSb3V0ZW4ga29uc3RydWllcmVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworU0lFSEUgQVVDSDoKKyAgICAgQWRkUm91dGUoKSwgQWRkTXNnKCksIEFkZEZ1bigpLCAvc3RkL3RyYW5zcG9ydC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoyNDoyNiAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlU2Vuc2l0aXZlT2JqZWN0IGIvZG9jL2xmdW4vUmVtb3ZlU2Vuc2l0aXZlT2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNmUwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9SZW1vdmVTZW5zaXRpdmVPYmplY3QKQEAgLTAsMCArMSw1NiBAQAorUmVtb3ZlU2Vuc2l0aXZlT2JqZWN0KCkKK0ZVTktUSU9OOgorICAgICB2b2lkIFJlbW92ZVNlbnNpdGl2ZU9iamVjdChvYmplY3Qgb2IpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9jb250YWluZXIvaW52ZW50b3J5LmMKKyAgICAgZ2VuZXJhbGl6ZXMgL3N0ZC9saXZpbmcvaW52ZW50b3J5LmMKKworQVJHVU1FTlRFOgorICAgICBvYiAtIHp1IGVudGZlcm5lbmRlcyBPYmpla3QKKworQkVTQ0hSRUlCVU5HOgorICAgICBFbnRmZXJudCBvYiBhdXMgZGVuIEJlbmFjaHJpY2h0aWd1bmdzbGlzdGVuIGRlcyBDb250YWluZXJzLgorICAgICBXaXJkIHZvbiB0aGluZy9tb3ZpbmcuYyBpbSBhbHRlbiBFbnZpcm9ubWVudCBnZXJ1ZmVuLCB3ZW5uCisgICAgIFBfU0VOU0lUSVZFIGdlc2V0enQgaXN0LgorICAgICBSdWZ0IGRhenUgUmVtb3ZlU2Vuc2l0aXZlT2JqZWN0RnJvbUxpc3QoKS4KKworQkVNRVJLVU5HRU46CisgICAgIFNldHp0IG1hbiBQX1NFTlNJVElWRSBuaWNodCBhbHMgRGVmYXVsdCBzb25kZXJuIHNpdHVhdGlvbnNhYmhhZW5naWcsCisgICAgIGRhbm4gbXVzcyBtYW4gYXVjaCBSZW1vdmVTZW5zaXRpdmVPYmplY3QgaW0gRW52aXJvbm1lbnQKKyAgICAgYXVjaCBzZWxic3QgcnVmZW4hCisKK0JFSVNQSUVMOgorICAgICAvLyBGYWNrZWwgKGluaGVyaXRpbmcgbGlnaHRzb3VyY2UpCisgICAgIHZvaWQgY3JlYXRlKCkgeworICAgICAuLi4KKyAgICAgICBTZXRQcm9wKFBfU0VOU0lUSVZFLAorICAgICAgICAoeyh7U0VOU0lUSVZFX0lOVkVOVE9SWV9UUklHR0VSLERUX0ZJUkUsMTIwfSl9KSk7CisgICAgIC4uLgorICAgICB9CisKKyAgICAgLy8gd2VubiBkaWUgRmFja2VsIGdlbG9lc2NodCB3aXJkLCB2ZXJsaWVydCBzaWUgaWhyZSBha3RpdmUKKyAgICAgLy8gRWlnZW5zY2hhZnQgdW5kIG11c3MgZGFzIGRlbSBlbnZpcm9ubWVudCgpIG1pdHRlaWxlbgorICAgICBzdGF0aWMgaW50IGV4dGluZ3Vpc2goc3RyaW5nIHN0cikgeworICAgICAgaW50IGk7CisgICAgICBpPTo6ZXh0aW5ndWlzaChzdHIpOworICAgICAgaWYoaSAmJiBRdWVyeVByb3AoUF9MSUdIVCk8PTApIHsKKyAgICAgICBTZXRQcm9wKFBfU0VOU0lUSVZFLDApOworICAgICAgIGlmKGVudmlyb25tZW50KCkpCisgICAgICAgIGVudmlyb25tZW50KCktPlJlbW92ZVNlbnNpdGl2ZU9iamVjdCh0aGlzX29iamVjdCgpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBpOworICAgICB9CisKKyAgICAgLSBlbXBmaW5kbGljaGUgT2JqZWt0ZSB3aWUgRWlzemFwZmVuIGtvZW5uZW4gamV0enQgd2llZGVyIGdlZmFocmxvcworICAgICAgIGluIGRhcyBzZWxiZSBlbnZpcm9ubWVudCgpIGJld2VndCB3ZXJkZW4KKworU0lFSEUgQVVDSDoKKyAgICAgUF9TRU5TSVRJVkUKKyAgICAgSW5zZXJ0U2Vuc2l0aXZlT2JqZWN0CisgICAgIGluc2VydF9zZW5zaXRpdmVfaW52X3RyaWdnZXIsIGluc2VydF9zZW5zaXRpdmVfaW52CisgICAgIFBfU0VOU0lUSVZFX0FUVEFDSywgUF9TRU5TSVRJVkVfSU5WRU5UT1JZLCBQX1NFTlNJVElWRV9JTlZFTlRPUllfVFJJR0dFUgorICAgICBDaGVja1NlbnNpdGl2ZUF0dGFjaworCisyNS5BcHIuMjAwMSwgR2xvaW5zb25ATUcKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlU2luZ3VsYXJJZCBiL2RvYy9sZnVuL1JlbW92ZVNpbmd1bGFySWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2OTk5YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1JlbW92ZVNpbmd1bGFySWQKQEAgLTAsMCArMSwyOCBAQAorUmVtb3ZlU2luZ3VsYXJJZCgpCisKK0ZVTktUSU9OOgorICAgICB2b2lkIFJlbW92ZVNpbmd1bGFySWQobWl4ZWQgaWQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdW5pdC5jCisKK0FSR1VNRU5URToKKyAgICAgaWQKKyAgICAgICAgICBJZGVudGlmaWthdGlvbnNzdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncworCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdlcmRlbiBlaW4gb2RlciBtZWhyZXJlIEJlemVpY2huZXIgZW50ZmVybnQsIG1pdCBkZW5lbiBzaWNoIGVpbmUKKyAgICAgZWluemVsbmUgRWluaGVpdCBhbnNwcmVjaGVuIGxhZXNzdC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFSVNQSUVMRToKKyAgICAgc2llaGUgL2l0ZW1zL21vbmV5LmMKKworU0lFSEUgQVVDSDoKKyAgICAgQWRkU2luZ3VsYXJJZCgpLCBSZW1vdmVQbHVyYWxJZCgpLCBBZGRJZCgpLCBpZCgpLCAvc3RkL3VuaXQuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBNb24gSnVsIDE0IDExOjMxOjAwIDE5OTcgYnkgU2lsdmFuYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyIGIvZG9jL2xmdW4vUmVtb3ZlU2tpbGxBdHRyaWJ1dGVNb2RpZmllcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRmZDEwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlU2tpbGxBdHRyaWJ1dGVNb2RpZmllcgpAQCAtMCwwICsxLDU5IEBACitSZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyKCkKK0ZVTktUSU9OOgorICAgIHB1YmxpYyBpbnQgUmVtb3ZlU2tpbGxBdHRyaWJ1dGVNb2RpZmllcihvYmplY3QgY2FzdGVyLCBzdHJpbmcgYXRybmFtZSkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL3NraWxsX2F0dHJpYnV0ZXMuYworCitBUkdVTUVOVEU6CisgICAgPGF0cm5hbWU+ICAgc3RyaW5nCisgICAgICAgICAgICAgICAgTmFtZSBkZXMgU2tpbGwtQXR0cmlidXRlcywgdm9uIGRlbSBkZXIgTW9kaWZpa2F0b3IgZ2Vsb2VzY2h0CisgICAgICAgICAgICAgICAgd2VyZGVuIHNvbGwuCisgICAgICAgICAgICAgICAgKERlZmluaWVydCBpbiAvc3lzL2xpdmluZy9za2lsbF9hdHRyaWJ1dGVzLmgpCisKKyAgICA8Y2FzdGVyPiAgICBvYmplY3QKKyAgICAgICAgICAgICAgICBPYmpla3QsIGRlc3NlbiBNb2RpZmlrYXRvciB3aWVkZXIgZW50ZmVybnQgd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzoKKyAgICBFbnRmZXJudCBkZW4gTW9kaWZpa2F0b3IsIGRlbiBPYmplY3QgPGNhc3Rlcj4gZ2VzZXR6dCBoYXQsIHdpZWRlci4gRGllcworICAgIGlzdCBudXIgbm90d2VuZGlnLCB3ZW5uIGRlciBFZmZla3Qgdm9yIEFibGF1ZiBkZXIgR3VlbHRpZ2tlaXQgZGVzCisgICAgTW9kaWZpa2F0b3JzIGF1ZmdlaG9iZW4gd2VyZGVuIHNvbGwuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgU0FfTU9EX1JFTU9WRUQgICAgICAgICB3ZW5uIGRlciBNb2RpZmlrYXRvciBnZWxvZXNjaHQgd3VyZGUKKyAgICBTQV9NT0RfTk9UX0ZPVU5EICAgICAgIHdlbm4gZGVyIE1vZGlmaWthdG9yIG5pY2h0IGdlZnVuZGVuIHd1cmRlCisgICAgV2VubiBtYW4gbnVyIHdpc3NlbiB3aWxsLCBvYiBkaWUgT3BlcmF0aW9uIGVyZm9sZ3JlaWNoIHdhciwgZW1wZmllaGx0IGVzCisgICAgc2ljaCwgYXVmID09IFNBX01PRF9SRU1PVkVEIHp1IHBydWVmZW4uCisKK0JFSVNQSUVMRToKKyAgICAvLyBlaW5lIFdhZmZlIHNldHp0IGltIEluZm9ybVdpZWxkKCkgZWluZW4gQm9udXMgYXVmIFNBX0RBTUFHRSBmdWVyIDEwbWluCisgICAgcHJvdGVjdGVkIHZvaWQgSW5mb3JtV2llbGQob2JqZWN0IHBsLCBpbnQgc2lsZW50KSB7CisgICAgICBpZiAob2JqZWN0cChwbCkpIHsKKyAgICAgICAgaWYgKHBsLT5Nb2RpZnlTa2lsbEF0dHJpYnV0ZShTQV9EQU1BR0UsIDIwLCA2MDApID09IFNBX01PRF9PSykKKyAgICAgICAgICAvLyBFcmZvbGdzbWVsZHVuZyBhbiBTcGllbGVyCisgICAgICAgIGVsc2UKKyAgICAgICAgICAvLyBNaXNzZXJmb2xnc21lbGR1bmcgYW4gU3BpZWxlci4KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyB3ZW5uIGRlciBTcGllbGVyIGRpZSBXYWZmZSB2b3IgQWJsYXVmIGRlciA2MDBzIHdlZ3N0ZWNrZW4gd2lsbCwgbXVzcworICAgIC8vIGRlciBCb251cyBuYXR1ZXJsaWNoIGF1Y2ggd2llZGVyIHJhdXMKKyAgICBwcm90ZWN0ZWQgdm9pZCBJbmZvcm1VbndpZWxkKG9iamVjdCBwbCwgaW50IHNpbGVudCkgeworICAgICAgaWYgKG9iamVjdHAocGwpKQorICAgICAgICBwbC0+UmVtb3ZlU2tpbGxBdHRyaWJ1dGVNb2RpZmllcih0aGlzX29iamVjdCgpLCBTQV9EQU1BR0UpOworICAgICAgICAvLyBmYWxscyBrZWluIHNvbGNoZXIgTW9kIG1laHIgZ2VzZXR6dCB3YXIsIGxpZWZlcnQgUlNBTSgpCisgICAgICAgIC8vIFNBX01PRF9OT1RfRk9VTkQgenVydWVjay4gQXVzd2VydHVuZyBkZXMgUnVlY2tnYWJld2VydGVzIGlzdAorICAgICAgICAvLyB2ZXJuYWNobGFlc3NpZ3QuCisgICAgfQorICAgIAorU0lFSEUgQVVDSDoKKyAgICBTa2lsbHMgTGVybmVuOiAgTGVhcm5Ta2lsbCwgTW9kaWZ5U2tpbGwsIExpbWl0QWJpbGl0eQorICAgICogTnV0enVuZzogICAgICBVc2VTcGVsbCwgVXNlU2tpbGwKKyAgICAqIEFiZnJhZ2VuOiAgICAgUXVlcnlTa2lsbCwgUXVlcnlTa2lsbEFiaWxpdHkKKyAgICAqIE1vZGlmaWthdGlvbjogTW9kaWZ5U2tpbGxBdHRyaWJ1dGUsIFF1ZXJ5U2tpbGxBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgIFF1ZXJ5U2tpbGxBdHRyaWJ1dGVNb2RpZmllcgorICAgICAgKiBQcm9wZXJ0aWVzOiBQX1NLSUxMX0FUVFJJQlVURVMsIFBfU0tJTExfQVRUUklCVVRFX09GRlNFVFMKKyAgICAqIHNvbnN0aWc6ICAgICAgc3BydWNoZXJtdWVkdW5nLCBza2lsbF9pbmZvX2xpc3RlCisgICAgKiBQcm9wZXJ0aWVzOiAgIFBfTkVXU0tJTExTCisKKzEzLjA4LjIwMDgsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZVNtZWxscyBiL2RvYy9sZnVuL1JlbW92ZVNtZWxscwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzcyMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlU21lbGxzCkBAIC0wLDAgKzEsMzggQEAKK1JlbW92ZVNtZWxscygpCisKK0ZVTktUSU9OOgorICAgIHZvaWQgUmVtb3ZlU21lbGxzKHN0cmluZ3xzdHJpbmcqIGtleXMpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICBrZXlzCisgICAgICBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncyBtaXQgZGVuIHp1IGVudGZlcm5lbmRlbiBEZXRhaWxzLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllc2UgRnVua3Rpb24gZW50c3ByaWNodCBkZW0gUmVtb3ZlRGV0YWlsKCkgZnVlciBTdGFuZGFyZGRldGFpbHMsCisgICAgbnVyIGtvZW5uZW4gaGllcm1pdCBHZXJ1ZWNoZSBlbnRmZXJudCB3ZXJkZW46CisgICAgRW50ZmVybnQgZGllIGluIDxrZXlzPiBhbmdlZ2ViZW5lbiBEZXRhaWxzIGF1cyBkZXIgTGlzdGUgZGVyCisgICAgdm9yaGFuZGVuZW4gRGV0YWlscy4gVWViZXJnaWJ0IG1hbiBmdWVyIDxrZXlzPiBlaW5lIDAsIHNvIHdlcmRlbgorICAgIHNhZW10bGljaGUgRGV0YWlscyBlbnRmZXJudCEKKworQkVJU1BJRUw6CisgICAgWnVlcnN0IGVyemV1Z2VuIHdpciBlaW4ga2xlaW5lcyBEZXRhaWwsIG1pdCBkZW0gd2lyIGFtIFJhdWNoIHJpZWNoZW4KKyAgICBrb2VubmVuLiBEYXMgRmV1ZXIgYnJlbm50IGxhbmdzYW0gYWIgdW5kIGRhcyBEZXRhaWwgd2lyZCB3aWVkZXIKKyAgICBlbnRmZXJudDoKKworICAgICAgQWRkU21lbGxzKCJyYXVjaCIsKiBIIFUgUyBUICpcbiIpOworICAgICAgY2FsbF9vdXQoIydSZW1vdmVTbWVsbHMsIDEwMCwgInJhdWNoIik7CisKK1NJRUhFIEFVQ0g6CisgICAgU2V0emVuOiAgICBBZGREZXRhaWwoKSwgQWRkUmVhZERldGFpbCgpLCBBZGRTbWVsbHMoKSwgQWRkU291bmRzKCksCisgICAgICAgICAgICAgICBBZGRUb3VjaERldGFpbCgpCisgICAgTG9lc2NoZW46ICBSZW1vdmVEZXRhaWwoKSwgUmVtb3ZlUmVhZERldGFpbCgpLCBSZW1vdmVTbWVsbHMoKSwKKyAgICAgICAgICAgICAgIFJlbW92ZVNvdW5kcygpLCBSZW1vdmVUb3VjaERldGFpbCgpCisgICAgRGF0ZW46ICAgICBQX0RFVEFJTFMsIFBfUkVBRF9ERVRBSUxTLCBQX1NNRUxMUywgUF9TT1VORFMsIFBfVE9VQ0hfREVUQUlMUworICAgIFZlcmFsdGV0OiAgQWRkU3BlY2lhbERldGFpbCgpLCBSZW1vdmVTcGVjaWFsRGV0YWlsKCksIFBfUkVBRF9NU0cKKyAgICBTb25zdGlnZXM6IEdldERldGFpbCgpLCBicmVha19zdHJpbmcoKQorCisyMC4wMS4yMDE1LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZVNvdW5kcyBiL2RvYy9sZnVuL1JlbW92ZVNvdW5kcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQ5MDBhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlU291bmRzCkBAIC0wLDAgKzEsNDYgQEAKK1JlbW92ZVNvdW5kcygpCisKK0ZVTktUSU9OOgorICAgIHZvaWQgUmVtb3ZlU291bmRzKHN0cmluZ3xzdHJpbmcqIGtleXMpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICBrZXlzCisgICAgICBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncyBtaXQgZGVuIHp1IGVudGZlcm5lbmRlbiBEZXRhaWxzLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllc2UgRnVua3Rpb24gZW50c3ByaWNodCBkZW0gUmVtb3ZlRGV0YWlsKCkgZnVlciBTdGFuZGFyZGRldGFpbHMsICAgCisgICAgbnVyIGtvZW5uZW4gaGllcm1pdCBHZXJhdWVzY2hlIGVudGZlcm50IHdlcmRlbjoKKyAgICBFbnRmZXJudCBkaWUgaW4gPGtleXM+IGFuZ2VnZWJlbmVuIERldGFpbHMgYXVzIGRlciBMaXN0ZSBkZXIKKyAgICB2b3JoYW5kZW5lbiBEZXRhaWxzLiBVZWJlcmdpYnQgbWFuIGZ1ZXIgPGtleXM+IGVpbmUgMCwgc28gd2VyZGVuCisgICAgc2FlbXRsaWNoZSBEZXRhaWxzIGVudGZlcm50IQorCitCRUlTUElFTDoKKyAgICBXaXIgbGFzc2VuIGV0d2FzIE11c2lrIHNwaWVsZW4gdW5kIHdlbm4gd2lyIGRlbiBQbGF0dGVuc3BpZWxlcgorICAgIGF1c21hY2hlbiwgZGFubiBlbmRldCBzaWUgdW5kIG1hbiBob2VydCBhdWNoIG5pY2h0cyBtZWhyOgorCisgICAgICBpbnQgYXVzbWFjaGVuKHN0cmluZyBzdHIpOworICAgICAgLi4uCisgICAgICBBZGRTb3VuZHMoKHsibXVzaWsiLCJoaXAtaG9wIn0pICwiS2xpbmd0IG5hY2ggSGlwLUhvcC4uLlxuIik7CisgICAgICBBZGRDbWQoIm1hY2h8bWFjaGUmcGxhdHRlbnNwaWVsZXImYXVzIiwgIydhdXNtYWNoZW4sCisgICAgICAgICAgICAgIldhcyB3aWxsc3QgZHUgKGF1cyltYWNoZW4/fFdpbGxzdCBkdSBkZW4gYXVzbWFjaGVuP14iKTsKKyAgICAgIC4uLgorICAgICAgaW50IGF1c21hY2hlbihzdHJpbmcgc3RyKSB7CisgICAgICAgIGlmKCFHZXREZXRhaWwoIm11c2lrIiwgMCwgU0VOU0VfU09VTkQpKSAvLyBleGlzdGllcnQgTXVzaWtkZXRhaWwgPworICAgICAgICAgIHJldHVybigiRGVyIFBsYXR0ZW5zcGllbGVyIGxhZXVmdCBkb2NoIGdhciBuaWNodCFcbiIsIDEpOworICAgICAgICBSZW1vdmVTb3VuZHMoMCk7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICBTZXR6ZW46ICAgIEFkZERldGFpbCgpLCBBZGRSZWFkRGV0YWlsKCksIEFkZFNtZWxscygpLCBBZGRTb3VuZHMoKSwKKyAgICAgICAgICAgICAgIEFkZFRvdWNoRGV0YWlsKCkKKyAgICBMb2VzY2hlbjogIFJlbW92ZURldGFpbCgpLCBSZW1vdmVSZWFkRGV0YWlsKCksIFJlbW92ZVNtZWxscygpLAorICAgICAgICAgICAgICAgUmVtb3ZlVG91Y2hEZXRhaWwoKQorICAgIERhdGVuOiAgICAgUF9ERVRBSUxTLCBQX1JFQURfREVUQUlMUywgUF9TTUVMTFMsIFBfU09VTkRTLCBQX1RPVUNIX0RFVEFJTFMKKyAgICBWZXJhbHRldDogIEFkZFNwZWNpYWxEZXRhaWwoKSwgUmVtb3ZlU3BlY2lhbERldGFpbCgpLCBQX1JFQURfTVNHCisgICAgU29uc3RpZ2VzOiBHZXREZXRhaWwoKSwgYnJlYWtfc3RyaW5nKCkKKworOC4gSnVsaSAyMDExIEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZW1vdmVTcGVjaWFsRGV0YWlsIGIvZG9jL2xmdW4vUmVtb3ZlU3BlY2lhbERldGFpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmVjNGNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlU3BlY2lhbERldGFpbApAQCAtMCwwICsxLDM3IEBACitWRVJBTFRFVDogUmVtb3ZlU3BlY2lhbERldGFpbCgpCisKK0ZVTktUSU9OOgorICAgIHZvaWQgUmVtb3ZlU3BlY2lhbERldGFpbChzdHJpbmd8c3RyaW5nKiBrZXlzKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAga2V5cworICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiB6dSBlbnRmZXJuZW5kZW4gRGV0YWlscy4KKworQkVTQ0hSRUlCVU5HOgorICAgIEVudGZlcm50IGRpZSBpbiBrZXlzIGFuZ2VnZWJlbmVuIERldGFpbHMgYXVzIGRlciBMaXN0ZSBkZXIKKyAgICB2b3JoYW5kZW5lbiBTcGVjaWFsRGV0YWlscy4KKworICAgIFZFUkFMVEVUOiBCaXR0ZSBSZW1vdmVEZXRhaWwoKSBiZW51dHplbi4KKworQkVNRVJLVU5HRU46CisgICAgVWViZXJnaWJ0IG1hbiBmdWVyIGtleXMgZWluZSAwLCBzbyB3ZXJkZW4gc2FlbXRsaWNoZSBTcGVjaWFsRGV0YWlscworICAgIGVudGZlcm50IQorICAgIERhIGludGVybiBEZXRhaWxzIHVuZCBTcGVjaWFsRGV0YWlscyBpbSBnbGVpY2hlbiBNYXBwaW5nIHZlcndhbHRldAorICAgIHdlcmRlbiwgbGFzc2VuIHNpY2ggbWl0IGRpZXNlciBGdW5rdGlvbiBhdWNoIERldGFpbHMgZW50ZmVybmVuLgorICAgIE1hbiBzb2xsdGUgZGllc2UgRnVua3Rpb24gZGVzaGFsYiBuaWNodCBtZWhyIHZlcndlbmRlbiwgc2llaGUKKyAgICBBZGREZXRhaWwgbWl0IENsb3N1cmVzLgorCitTSUVIRSBBVUNIOgorICAgIFNldHplbiA6ICAgQWRkRGV0YWlsKCksIEFkZFJlYWREZXRhaWwoKSwgQWRkU21lbGxzKCksIEFkZFNvdW5kcygpLAorICAgICAgICAgICAgICAgQWRkVG91Y2hEZXRhaWwoKQorICAgIExvZXNjaGVuOiAgUmVtb3ZlRGV0YWlsKCksIFJlbW92ZVJlYWREZXRhaWwoKSwgUmVtb3ZlU21lbGxzKCksCisgICAgICAgICAgICAgICBSZW1vdmVTb3VuZHMoKSwgUmVtb3ZlVG91Y2hEZXRhaWwoKQorICAgIERhdGVuOiAgICAgUF9ERVRBSUxTLCBQX1JFQURfREVUQUlMUywgUF9TTUVMTFMsIFBfU09VTkRTLCBQX1RPVUNIX0RFVEFJTFMKKyAgICBWZXJhbHRldDogIEFkZFNwZWNpYWxEZXRhaWwoKSwgUF9SRUFEX01TRworICAgIFNvbnN0aWdlczogR2V0RGV0YWlsKCksIGJyZWFrX3N0cmluZygpCisKKzIwLjAxLjIwMTUsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vUmVtb3ZlU3BlY2lhbEV4aXQgYi9kb2MvbGZ1bi9SZW1vdmVTcGVjaWFsRXhpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWExOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVtb3ZlU3BlY2lhbEV4aXQKQEAgLTAsMCArMSwyOSBAQAorUmVtb3ZlU3BlY2lhbEV4aXQoKQorRlVOS1RJT046CisgICAgIHZvaWQgUmVtb3ZlU3BlY2lhbEV4aXQoc3RyaW5nfHN0cmluZyogY21kKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3Jvb20vZXhpdHMKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcvc3RyaW5nKiBjbWQKKyAgICAgICAgICBSaWNodHVuZyhlbiksIGRpZSBlbnRmZXJudCB3ZXJkZW4gc29sbGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZSBpbiBjbWQgYW5nZWdlYmVuZW4gQXVzZ2FlbmdlIHdlcmRlbiB3aWVkZXIgZW50ZmVybnQuCisKKyAgICAgSXN0IGNtZCA9IDAsIHNvIHdlcmRlbiBhbGxlIEF1c2dhZW5nZSBlbnRmZXJudC4KKworQkVNRVJLVU5HRU46CisgICAgIEF1c2dhZW5nZSB3ZXJkZW4gYW4gZGVyIGdsZWljaGVuIFN0ZWxsZSBnZXNwZWljaGVydDoKKyAgICAgLSBSZW1vdmVTcGVjaWFsRXhpdCgpIGdyZWlmdCBhdWYgZGllIGdsZWljaGVuIERhdGVuIHdpZSBSZW1vdmVFeGl0KCkKKyAgICAgICB6dSwgZW50ZmVybnQgYWxzbyBhdWNoIG5vcm1hbGUgQXVzZ2FlbmdlIQorCitTSUVIRSBBVUNIOgorICAgICBBZGRFeGl0KCksIEFkZFNwZWNpYWxFeGl0KCksIEFkZEd1YXJkZWRFeGl0KCksIEdldEV4aXRzKCkKKyAgICAgUmVtb3ZlRXhpdCgpLAorICAgICBQX0VYSVRTLCBQX0hJREVfRVhJVFMsIC9zdGQvcm9vbS9leGl0cy5jCisgICAgIGF1c2dhZW5nZQorCiszMS4wMS4yMDE1LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1JlbW92ZVRvdWNoRGV0YWlsIGIvZG9jL2xmdW4vUmVtb3ZlVG91Y2hEZXRhaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4MTZhNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1JlbW92ZVRvdWNoRGV0YWlsCkBAIC0wLDAgKzEsNTQgQEAKK1JlbW92ZVRvdWNoRGV0YWlsKCkKKworRlVOS1RJT046CisgICAgdm9pZCBSZW1vdmVUb3VjaERldGFpbChzdHJpbmd8c3RyaW5nKiBrZXlzKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAga2V5cworICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiB6dSBlbnRmZXJuZW5kZW4gRGV0YWlscy4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGVudHNwcmljaHQgZGVtIFJlbW92ZURldGFpbCgpIGZ1ZXIgU3RhbmRhcmRkZXRhaWxzLAorICAgIG51ciBrb2VubmVuIGhpZXJtaXQgKGFiKXRhc3RiYXJlIERldGFpbHMgZW50ZmVybnQgd2VyZGVuOgorICAgIEVudGZlcm50IGRpZSBpbiA8a2V5cz4gYW5nZWdlYmVuZW4gRGV0YWlscyBhdXMgZGVyIExpc3RlIGRlcgorICAgIHZvcmhhbmRlbmVuIERldGFpbHMuIFVlYmVyZ2lidCBtYW4gZnVlciA8a2V5cz4gZWluZSAwLCBzbyB3ZXJkZW4KKyAgICBzYWVtdGxpY2hlIHRhc3RiYXJlbi9mdWVobGJhcmVuIERldGFpbHMgZW50ZmVybnQhCisKK0JFSVNQSUVMOgorICAgIFp1ZXJzdCB3aXJkIGVpbiBEZXRhaWwgImJvZGVuIiBlcnpldWd0LCBkYXMgYWJnZXRhc3RldCB3ZXJkZW4ga2Fubi4KKyAgICBEaWVzZXMga2FubiBkdXJjaCBCZXRhZXRpZ2VuIGVpbmVzIEtub3BmZXMsIGFlaCwgZW50ZmVybnQgd2VyZGVuLgorCisgICAgICBpbnQga25vcGYoKTsKKyAgICAgIHZvaWQga25vcGYyKCk7CisKKyAgICAgIEFkZFRvdWNoRGV0YWlsKCJib2RlbiIsICJFciBpc3QgYXVzIFN0ZWluLlxuIik7CisgICAgICBBZGRDbWQoImRydWVja3xkcnVlY2tlJmtub3BmIiwgIydrbm9wZiwgIldhcyB3aWxsc3QgZHUgZHJ1ZWNrZW4/Iik7CisKKyAgICAgIHZvaWQga25vcGYoKSB7CisgICAgICAgIHRlbGxfcm9vbSh0aGlzX29iamVjdCgpLCBicmVha19zdHJpbmcoCisgICAgICAgICAgdGhpc19wbGF5ZXIoKS0+TmFtZShXRVIpKyIgZHJ1ZWNrdCBlaW5lbiBLbm9wZiwgZGVyIGRhYmVpIHNhdHQgIisKKyAgICAgICAgICAia2xhY2t0LiIsIDc4KSk7CisKKyAgICAgICAgaWYoZmluZF9jYWxsX291dCgjJ2tub3BmMik8PTApCisgICAgICAgICAgY2FsbF9vdXQoIydrbm9wZjIsIDEpOworICAgICAgfQorICAgICAgCisgICAgICB2b2lkIGtub3BmMigpIHsKKyAgICAgICAgdGVsbF9yb29tKHRoaXNfb2JqZWN0KCksICJVaG9oLiBEZXIgQm9kZW4ga2xhcHB0IHdlZy4gRHUgZmFlbGxzdC4iKTsKKyAgICAgICAgUmVtb3ZlVG91Y2hEZXRhaWxzKCJib2RlbiIpOworICAgICAgfQorCitTSUVIRSBBVUNIOgorICAgIFNldHplbjogICAgQWRkRGV0YWlsKCksIEFkZFJlYWREZXRhaWwoKSwgQWRkU21lbGxzKCksIEFkZFNvdW5kcygpLAorICAgICAgICAgICAgICAgQWRkVG91Y2hEZXRhaWwoKQorICAgIExvZXNjaGVuOiAgUmVtb3ZlRGV0YWlsKCksIFJlbW92ZVJlYWREZXRhaWwoKSwgUmVtb3ZlU21lbGxzKCksCisgICAgICAgICAgICAgICBSZW1vdmVTb3VuZHMoKQorICAgIERhdGVuOiAgICAgUF9ERVRBSUxTLCBQX1JFQURfREVUQUlMUywgUF9TTUVMTFMsIFBfU09VTkRTLCBQX1RPVUNIX0RFVEFJTFMKKyAgICBWZXJhbHRldDogIEFkZFNwZWNpYWxEZXRhaWwoKSwgUmVtb3ZlU3BlY2lhbERldGFpbCgpLCBQX1JFQURfTVNHCisgICAgU29uc3RpZ2VzOiBHZXREZXRhaWwoKSwgYnJlYWtfc3RyaW5nKCkKKworMjAuMDEuMjAxNSwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SZXNpemVSaW5nQnVmZmVyIGIvZG9jL2xmdW4vUmVzaXplUmluZ0J1ZmZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWE2YzA4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmVzaXplUmluZ0J1ZmZlcgpAQCAtMCwwICsxLDQ0IEBACitSZXNpemVSaW5nQnVmZmVyKCkKKworRlVOS1RJT046CisgICAgcHJvdGVjdGVkIHN0cnVjdCBzdGRfcmluZ2J1ZmZlciBidWYgUmluZ0J1ZmZlclB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGRfcmluZ2J1ZmZlciBidWYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC91dGlsL3JpbmdidWZmZXIuYworICAgIC9zeXMvdXRpbC9yaW5nYnVmZmVyLmgKKyAgICAKK0FSR1VNRU5URToKKyAgICBidWYgIC0gUmluZ3B1ZmZlciwgZGVzc2VuIEdyb2Vzc2UgZ2VhZW5kZXJ0IHdlcmRlbiBzb2xsCisgICAgc2l6ZSAtIG5ldWUgR3JvZXNzZSAoaW50KSAKKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGVyc3RlbGx0IGVpbmVuIG5ldWVuIFJpbmdwdWZmZXIgZGVyIEdyb2Vzc2UgPHNpemU+LCB3ZWxjaGVyCisgICAgZGVuIGdsZWljaGVuIE1vZHVzIGhhdCB3aWUgPGJ1Zj4gdW5kIGRpZSBnbGVpY2hlbiBEYXRlbiBlbnRoYWVsdC4KKyAgICBJc3QgZGVyIG5ldWUgUHVmZmVyIGtsZWluZXIgYWxzIDxidWY+LCBzbyBrb21tdCBlcyBoaWVyYmVpIHp1CisgICAgRGF0ZW52ZXJsdXN0LgorICAgIDxidWY+IHdpcmQgbmljaHQgdmVyYWVuZGVydC4gSXN0IGRpZSBHcm9lc3NlIHZvbiA8YnVmPiBnbGVpY2ggZGVyCisgICAgbmV1ZW4gZ2V3dWVuc2NodGVuIEdyb2Vzc2UsIHdpcmQgbGV0enRlbmRsaWNoIGRlciBSaW5ncHVmZmVyIGtvcGllcnQuIAorICAgIEplIG5hY2ggR3JvZXNzZSB2b24gPGJ1Zj4gdW5kIFdlcnQgdm9uIDxzaXplPiBrYW5uIGRpZXMgZWluZSB0ZXVyZQorICAgIEFuZ2VsZWdlbmhlaXQgc2Vpbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICBEZXIgbmV1ZSBSaW5ncHVmZmVyIG1pdCBHcm9lc3NlIDxzaXplPi4KKworQkVJU1BJRUxFOgorICAgIC8vIFJpbmdwdWZmZXIgYW5sZWdlbjoKKyAgICBzdHJ1Y3Qgc3RkX3JpbmdidWZmZXIgYnVmZmVyID0gQ3JlYXRlUmluZ0J1ZmZlcig1LCBNT0RFX0ZJRk8pOworICAgIC8vIDUgV2VydGUgcmVpbnNjaHJlaWJlbjoKKyAgICBmb3JlYWNoKGludCBpOiA1KSBSaW5nQnVmZmVyUHV0KGJ1ZmZlciwgaSk7CisgICAgLy8gR3JvZXNzZSBhZW5kZXJuCisgICAgYnVmZmVyID0gUmVzaXplUmluZ0J1ZmZlcihidWZmZXIsIDEwKTsKKyAgICAvLyBEYXRlbiBhbHMgQXJyYXkgZXJtaXR0ZWxuOgorICAgIG1peGVkIGFycmF5ID0gUmluZ0J1ZmZlckdldChidWZmZXIpOworICAgIC8vIGFycmF5IGVudGhhZWx0OiAoezAsMCwwLDAsMCwwLDEsMiwzLDR9KQorCitTSUVIRSBBVUNIOgorICAgIFJpbmdCdWZmZXJHZXQoKSwgUmluZ0J1ZmZlclB1dCgpLCBDcmVhdGVSaW5nQnVmZmVyKCkKKworMjMuMDUuMjAwOCwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SaW5nQnVmZmVyR2V0IGIvZG9jL2xmdW4vUmluZ0J1ZmZlckdldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDZiNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmluZ0J1ZmZlckdldApAQCAtMCwwICsxLDQxIEBACitSaW5nQnVmZmVyR2V0KCkKKworRlVOS1RJT046CisgICAgcHJvdGVjdGVkIG1peGVkIFJpbmdCdWZmZXJHZXQoc3RydWN0IHN0ZF9yaW5nYnVmZmVyIGJ1Zik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3V0aWwvcmluZ2J1ZmZlci5jCisgICAgL3N5cy91dGlsL3JpbmdidWZmZXIuaAorCitBUkdVTUVOVEU6CisgICAgYnVmIC0gUmluZ3B1ZmZlciwgd2VsY2hlciBhdXNnZWJlbiB3ZXJkZW4gc29sbAorCitCRVNDSFJFSUJVTkc6CisgICAgRGllc2UgRnVua3Rpb24gbGllZmVydCBkaWUgRGF0ZW4gZGVzIFJpbmdwdWZmZXJzIGluIEZvcm0gZWluZXMgQXJyYXlzCisgICAgenVydWVjaywgd2VsY2hlcyBkYW5uIHdlaXRlcnZlcmFyYmVpdGV0IHdlcmRlbiBrYW5uLgorICAgIERpZSBSZWloZW5mb2xnZSBkZXIgRGF0ZW4gaXN0IGVudHNwcmVjaGVuZCBkZXMgYmVpbSBBbmxlZ2VuIGRlcworICAgIFJpbmdwdWZmZXJzIGFuZ2ViZW5lbiBNb2RlczoKKyAgICBNT0RFX0ZJRk86IGFlbHRlc3RlIERhdGVuIHp1ZXJzdAorICAgIE1PREVfTElGTzogbmV1ZXN0ZSBEYXRlbiB6dWVyc3QKKworQkVNRVJLVU5HRU46CisgICAgQWVuZGVydW5nZW4gYW0gQXJyYXkgYmVlaW5mbHVzc2VuIGRpZSBEYXRlbiBkZXMgUmluZ3B1ZmZlcnMgbmljaHQuIEFiZXI6CisgICAgSGllcmJlaSB3ZXJkZW4gZGllIERhdGVuIG5pY2h0IHRpZWYga29waWVydC4gRC5oLiBlbnRoYWVsdCBkZXIgUmluZ3B1ZmZlcgorICAgIFJlZmVyZW56ZW4gYXVmIHdlaXRlcmUgRGF0ZW4sIHplaWdlbiBkZXIgUmluZ3B1ZmZlciB1bmQgZGFzIGhpZXIKKyAgICBnZWxpZWZlcnRlIEFycmF5IGF1ZiBkaWUgZ2xlaWNoZW4gRGF0ZW4uCisKK0JFSVNQSUVMRToKKyAgICAvLyBSaW5ncHVmZmVyIGFubGVnZW46CisgICAgc3RydWN0IHN0ZF9yaW5nYnVmZmVyIGJ1ZmZlciA9IENyZWF0ZVJpbmdCdWZmZXIoMTAsIE1PREVfRklGTyk7CisgICAgLy8gMTUgV2VydGUgcmVpbnNjaHJlaWJlbjoKKyAgICBmb3JlYWNoKGludCBpOiAxNSkgUmluZ0J1ZmZlclB1dChidWZmZXIsIGkpOworICAgIC8vIFdlcnRlIGFicnVmZW46CisgICAgbWl4ZWQgYXJyYXk9UmluZ0J1ZmZlckdldChidWZmZXIpOworICAgIC8vIGFycmF5IGVudGhhZWx0IG51bjoKKyAgICAvLyAoezUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNH0pIAorCitTSUVIRSBBVUNIOgorICAgIENyZWF0ZVJpbmdCdWZmZXIoKSwgUmluZ0J1ZmZlclB1dCgpLCBSZXNpemVSaW5nQnVmZmVyKCkKKworMjMuMDUuMjAwOCwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9SaW5nQnVmZmVyUHV0IGIvZG9jL2xmdW4vUmluZ0J1ZmZlclB1dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE3OGJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vUmluZ0J1ZmZlclB1dApAQCAtMCwwICsxLDMwIEBACitSaW5nQnVmZmVyUHV0KCkKKworRlVOS1RJT046CisgICAgcHJvdGVjdGVkIHZvaWQgUmluZ0J1ZmZlclB1dChzdHJ1Y3Qgc3RkX3JpbmdidWZmZXIgYnVmLCBtaXhlZCB2YWwpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC91dGlsL3JpbmdidWZmZXIuYworICAgIC9zeXMvdXRpbC9yaW5nYnVmZmVyLmgKKworQVJHVU1FTlRFOgorICAgIGJ1ZiAtIFJpbmdwdWZmZXIsIGluIGRlbiA8dmFsPiBnZXNjaHJpZWJlbiB3ZXJkZW4gc29sbAorICAgIHZhbCAtIG5ldWVzIERhdHVtCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiBzY2hyZWlidCA8dmFsPiBpbiBkZW4gUmluZ3B1ZmZlciA8YnVmPi4gSGllcmJlaSB3aXJkIGdnZi4KKyAgICBkYXMgYWVsdGVzdGUgaW0gUHVmZmVyIGV4aXN0aWVyZW5kZSBEYXR1bSB1ZWJlcnNjaHJpZWJlbi4gPGJ1Zj4gbXVzcyBlaW5lCisgICAgdm9uIENyZWF0ZVJpbmdCdWZmZXIoKSBvZGVyIFJlc2l6ZVJpbmdCdWZmZXIoKSB6dXJ1ZWNrZ2VsaWVmZXJ0ZXIKKyAgICBSaW5ncHVmZmVyIHNlaW4uCisKK0JFSVNQSUVMRToKKyAgICAvLyBSaW5ncHVmZmVyIGFubGVnZW46CisgICAgc3RydWN0IHN0ZF9yaW5nYnVmZmVyIGJ1ZmZlciA9IENyZWF0ZVJpbmdCdWZmZXIoMTAsIE1PREVfRklGTyk7CisgICAgLy8gMTUgV2VydGUgcmVpbnNjaHJlaWJlbjoKKyAgICBmb3JlYWNoKGludCBpOiAxNSkgUmluZ0J1ZmZlclB1dChidWZmZXIsIGkpOworCitTSUVIRSBBVUNIOgorICAgIFJpbmdCdWZmZXJHZXQoKSwgQ3JlYXRlUmluZ0J1ZmZlcigpLCBSZXNpemVSaW5nQnVmZmVyKCkKKworMjMuMDUuMjAwOCwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TZWFyY2hQYXRoIGIvZG9jL2xmdW4vU2VhcmNoUGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzVmZGNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2VhcmNoUGF0aApAQCAtMCwwICsxLDgzIEBACitTZWFyY2hQYXRoCisKK0ZVTktUSU9OOgorICAgICBwdWJsaWMgaW50IFNlYXJjaFBhdGgoc3RyaW5nIGZyb20sIHN0cmluZyB0bywgaW50IHBhcmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zdXJlIGNhbGxiYWNrKQorCitERUZJTklFUlQgSU46CisgICAgIC9wL2RhZW1vbi9wYXRoZC5jCisgICAgIDxzeXMvcGF0aC5kPgorCitBUkdVTUVOVEU6CisgICAgIGZyb20gICAgIC0gRGVyIFN0YXJ0cHVua3QKKyAgICAgdG8gICAgICAgLSBEZXIgRW5kcHVua3QKKyAgICAgcGFyYSAgICAgLSBEaWUgUGFyYXdlbHQgaW4gZGVyIGdlc3VjaHQgd2lyZCAoTm9ybWFsd2VsdDogMCkKKyAgICAgY2FsbGJhY2sgLSBDbG9zdXJlLCBkaWUgYW0gRW5kZSBkZXIgUGZhZHN1Y2hlIGdlcnVmZW4gd2lyZAorCitCRVNDSFJFSUJVTkc6CisgICAgRGllc2UgRnVua3Rpb24gYmVyZWNobmV0IC0gc29mZXJuIG1vZWdsaWNoIC0gZGVuIGt1ZXJ6ZXN0ZW4gUGZhZCB6d2lzY2hlbgorICAgIDxmcm9tPiB1bmQgPHRvPiBpbiBkZXIgKFBhcmEtKVdlbHQgPHBhcmE+LgorICAgIAorICAgIERpZSBQZmFkc3VjaGUgd2lyZCBhbmhhbmQgdm9uIERhdGVuIHVlYmVyIHZvbiBTcGllbGVybiBnZWxhdWZlbmUgV2VnZQorICAgIGR1cmNoZ2VmdWVocnQuIEQuaC4gR2ViaWV0ZSwgZGllIHZvbiBTcGllbGVybiBuaWNodCAoaW4gbGV0enRlciBaZWl0IG1hbCkKKyAgICBiZXRyZXRlbiB3ZXJkZW4sIHNpbmQgYXVjaCBkZW0gUGZhZGRhZW1vbiBuaWNodCBiZWthbm50LiBBdWNoIGthbm4gZXMKKyAgICBHZWJpZXRlIGdlYmVuLCB3byB6d2FyIGdlYmlldHNpbnRlcm4gUGZhZGUgYmVrYW5udCBzaW5kLCBhYmVyIGtlaW5lIFdlZ2UKKyAgICBpbiBkZW4gUmVzdCB2b20gTUcuCisKKyAgICBEYSBkaWVzZSBTdWNoZSBpbSBBbGxnZW1laW5lbiBTRUhSIGF1ZndlbmRpZyBzZWluIGthbm4sIHdpcmQgc2llIG1laXN0ZW5zCisgICAgbmljaHQgc29mb3J0IGZlcnRpZywgc29uZGVybiBkYXVlcnQgZWluZSBXZWlsZS4gV2VubiBzaWUgZmVydGlnIGlzdCwgd2lyZAorICAgIGRpZSBDbG9zdXJlIDxjYWxsYmFjaz4gYXVmZ2VydWZlbiB1bmQgaWhyIGRpZSBBcmd1bWVudGUgPGZyb20+LCA8dG8+LAorICAgIDxwYXJhd2VsdD4sIDxrb3N0ZW4+LCA8cGF0aD4gdW5kIDxjbWRzPiB1ZWJlcmdlYmVuLiBEaWUgQmVkZXV0dW5nCisgICAgZGllc2VyIEFyZ3VtZW50ZSBpc3QgdW50ZW4gZXJrbGFlcnQuCisKKyAgICBFaW5lIFN1Y2hlIG5hY2ggZWluZW0gUGZhZCBpbiBlaW5lciBQYXJhd2VsdCBmdWVocnQgZHVyY2ggUmFldW1lIGRlcgorICAgIGdld3VlbnNjaGVuIFBhcmF3ZWx0IHVuZCBkdXJjaCBSYWV1bWUgZGVyIE5vcm1hbHdlbHQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDEgICAgICAtIFN1Y2hlIHd1cmRlIGdlc3RhcnRldAorICAgICAyICAgICAgLSBQZmFkIGdlZnVuZGVuICh1bmQgY2FsbGJhY2sgZ2VydWZlbikKKyAgICAtMSAgICAgIC0gZXMgbGFldWZ0IHNjaG9uIGVpbiBTdWNoYXVmdHJhZ2UgZnVlciBkaWUgVUlEIGRlcyBhbmZyYWdlbmRlbgorICAgICAgICAgICAgICBPYmpla3RlcworICAgIC0yICAgICAgLSBlcyBsYXVmZW4gYmVyZWl0cyB6dXZpZWxlIFN1Y2hhbmZyYWdlbgorICAgIC0zICAgICAgLSA8ZnJvbT4gdW5kL29kZXIgPHRvPiBzaW5kIG5pY2h0IGJla2FubnQKKyAgICAKKyAgICBBbiA8Y2FsbGJhY2s+IHVlYmVyZ2ViZW5lIEFyZ3VtZW50ZSBhbSBFbmRlIGRlciBQZmFkc3VjaGU6CisgICAgICAgIDxmcm9tPiAtIFN0YXJ0cHVua3QgZGVzIFdlZ2VzIChzdHJpbmcpCisgICAgICAgIDx0bz4gICAtIFppZWxwdW5rdCBkZXMgV2VnZXMgKHN0cmluZykKKyAgICAgICAgPHBhcmE+IC0gUGFyYXdlbHQgZGVzIFdlZ2VzIChpbnQpCisgICAgICAgIDxjb3N0cz4tIEtvc3RlbiBkZXMgV2VnZS4gKGludCkgSmUgaG9laGVyLCBkZXN0bworICAgICAgICAgICAgICAgICBsYWVuZ2VyL3VuZ3VlbnN0aWdlci4gMCwgd2VubiBrZWluIFBmYWQgZ2VmdW5kZW4KKyAgICAgICAgPHBhdGg+IC0gQXJyYXkgbWl0IFJhdW1uYW1lbiwgZGllIGR1cmNobGF1ZmVuIHdlcmRlbiAoc3RyaW5nKikKKyAgICAgICAgICAgICAgICAgMCwgd2VubiBrZWluIFBmYWQgZ2VmdW5kZW4KKyAgICAgICAgPGNtZHM+IC0gQXJyYXkgbWl0IEtvbW1hbmRvcyB6dW0gQWJsYXVmZW4gZGVzIFdlZ2VzIChzdHJpbmcqKQorICAgICAgICAgICAgICAgICAwLCB3ZW5uIGtlaW4gUGZhZCBnZWZ1bmRlbgorCitCRU1FUktVTkdFTjoKKyAgIEVzIGlzdCBuYXR1ZXJsaWNoIG5pY2h0IGRhenUgZ2VkYWNodCwgU3BpZWxlcm4gZmVydGlnZSBSb3V0ZW4gendpc2NoZW4KKyAgIE9ydGVuIHp1IGdlYmVuIC0gYnp3LiBudXIgaW4gQXVzbmFobWVmYWVsbGVuLgorICAgUGZhZGFiZnJnZW4gd2VyZGVuIGdlbG9nZ3QuCisKKyAgIERpZSBBbmdhYmUgPGNvc3RzPiBzYWd0IGdyb2IgZXR3YXMgdWViZXIgZGllIExhZW5nZSB1bmQgdm9yIGFsbGVtIHVlYmVyIGRpZQorICAgIlF1YWxpdGFldCIgZGVzIFBmYWRlcyBhdXMuIERpZSBzdGVpZ3QgYmVpIFBhcmF3ZWx0d2VjaHNlbG4sIHdlbmlnCisgICBhYmdlbGF1ZmVuZW4gVmVyYmluZHVuZ2VuIHp3aXNjaGVuIFJhZXVtZW4gb2RlciB3ZW5uIGVpbmUgVmVyYmluZHVuZyBrZWluCisgICBub3JtYWxlciBBdXNnYW5nIGlzdC4KKworICAgRGllIENsb3N1cmUgPGNhbGxiYWNrPiBzb2xsdGUgbmljaHQgenV2aWVsZSBUaWNrcyB2ZXJicmF1Y2hlbi4KKworQkVJU1BJRUw6CisgICAjaW5jbHVkZSA8cGF0aGQuaD4KKyAgIHZvaWQgc3VjaGVyZ2VibmlzKHN0cmluZyBmcm9tLCBzdHJpbmcgdG8sIGludCBwYXJhLCBpbnQgY29zdHMsIHN0cmluZyoKKyAgICAgICAgcGF0aCwgc3RyaW5nKiBjbWRzKSB7CisgICAgICAgIHRlbGxfb2JqZWN0KGZpbmRfcGxheWVyKCJ6ZXNzdHJhIiksIHNwcmludGYoCisgICAgICAgICAgICAiRXJnZWJuaXMgUGZhZHN1Y2hlIHZvbiAlcyBuYWNoICVzIGluIFBhcmEgJWQgZnVlciAlZDpcbiAlT1xuICVPXG4iLAorICAgICAgICAgICAgZnJvbSwgdG8sIHBhcmEsIGNvc3RzLCBwYXRoLCBjbWRzKSk7CisgICB9OworCisgICAuLi4KKyAgIG1peGVkIHJlcz1QQVRIRC0+U2VhcmNoUGF0aCgiL2dpbGRlbi9hYmVudGV1cmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2QvZWJlbmUvZGFuY2VyL2x1Y2t5L3Jvb20vcG92YV9sYTMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICMnc3VjaGVyZ2VibmlzKTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjIuMTIuMjAxNSwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TZWxlY3RFbmVteSBiL2RvYy9sZnVuL1NlbGVjdEVuZW15Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2M2UwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZWxlY3RFbmVteQpAQCAtMCwwICsxLDMyIEBACitTZWxlY3RFbmVteSgpCisKK0ZVTktUSU9OOgorCXZhcmFyZ3Mgb2JqZWN0IFNlbGVjdEVuZW15KG9iamVjdCpoZXJlKTsKKworREVGSU5JRVJUIElOOgorCS9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKwloZXJlCisJICBHZWduZXIsIGF1cyB3ZWxjaGVuIGF1c2dld2FlaGx0IHdlcmRlbiBzb2xsIChvcHRpb25hbCEpCisKK1JVZUNLR0FCRVdFUlQ6CisJQXVzZ2V3YWVobHRlciBHZWduZXIsIGRlciBhbmdlZ3JpZmZlbiB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorCURpZXNlIEZ1bmt0aW9uIHdhZWhsdCBlaW5lbiBHZWduZXIgYXVzLCBkZXIgYW5nZWdyaWZmZW4gd2VyZGVuIHNvbGwuCisJV2VyZGVuIGtlaW5lIEdlZ25lciBpbSBQYXJhbWV0ZXIgPGhlcmU+IGFuZ2VnZWJlbiwgc28gd2lyZCBkZXIKKwlSdWVja2dhYmV3ZXJ0IGRlciBGdW5rdGlvbiBQcmVzZW50RW5lbWllcygpIHZlcndhbmR0LCB3ZWxjaGUgZGllCisJYWt0dWVsbCBhbndlc2VuZGVuIEdlZ25lciBpbSBSYXVtIGxpZWZlcnQuCisJU2luZCBrZWluZSBHZWduZXIgYW53ZXNlbmQsIHNvIHdpcmQgMCB6dXJ1ZWNrZ2VsaWVmZXJ0LgorCURhbmFjaCB3aXJkIGdlc2NoYXV0LCBvYiBHZWduZXIgYmV2b3J6dWd0IGF1c2dld2FlaGx0IHdlcmRlbiBzb2xsZW4uCisJRGllcyBnZXNjaGllaHQgbWl0dGVscyBkZXIgRnVua3Rpb24gUXVlcnlQcmVmZXJlZEVuZW15KCkuCisJQXVjaCBkaWVzZXIgYmV2b3J6dWd0ZSBHZWduZXIgbXVzcyBpbSBzZWxiZW4gUmF1bSBzZWluISBXZW5uIG5pY2h0LAorCXdpcmQgZG9jaCBpcmdlbmRlaW4gYW5kZXJlciBHZWduZXIgYXVzZ2V3YWVobHQgdW5kIHp1cnVlY2tnZWdlYmVuLgorCitTSUVIRSBBVUNIOgorCVByZXNlbnRFbmVtaWVzKCksIFF1ZXJ5UHJlZmVyZWRFbmVteSgpLCBQX1BSRUZFUkVEX0VORU1ZLAorCUluc2VydEVuZW15KCksIFN0b3BIdW50Rm9yKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogVGh1IE1heSAyNyAxNTowMTo0OCAxOTk5IGJ5IFBhdHJ5bgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vU2VsZWN0RmFyRW5lbXkgYi9kb2MvbGZ1bi9TZWxlY3RGYXJFbmVteQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTc0ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2VsZWN0RmFyRW5lbXkKQEAgLTAsMCArMSw0NSBAQAorCitTZWxlY3RGYXJFbmVteSgpCisKKworRlVOS1RJT046CisgICAgICAgIHZhcmFyZ3Mgb2JqZWN0IFNlbGVjdEZhckVuZW15KG9iamVjdCAqaGVyZSwgaW50IG1pbiwgaW50IG1heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvcmNlZnJvbSkKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL2xpdmluZy90ZWFtLmMKKworQVJHVU1FTlRFOgorICAgICAgICBoZXJlICAgICAgIC0gUnVlY2tnYWJld2VydCB2b24gUHJlc2VudEVuZW1pZXMoKQorICAgICAgICBtaW4gICAgICAgIC0gbWluaW1hbGUgS2FtcGZyZWloZQorICAgICAgICBtYXggICAgICAgIC0gbWF4aW1hbGUgS2FtcGZyZWloZQorICAgICAgICBmb3JjZWZyb20gIC0gR2VnbmVyIE1VU1MgYXVzIHVlYmVyZ2ViZW5lbSBBcnJheSBhdXNnZXdhZWhsdCB3ZXJkZW4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBXYWVobHQgZWluZW4gRmVpbmQgYXVzIFJlaWhlIDxtaW4+IGJpcyA8bWF4PiBhdXMuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgICAgIERlciBBdXNlcndhZWhsdGUgOi0pCisKK0JFTUVSS1VOR0VOOgorICAgICAgICAxLiBXZW5uIGluIGRlbiBhbmdlZ2ViZW4gUmVpaGVuIGtlaW4gRmVpbmQgaXN0IG9kZXIgPG1heD4ga2xlaW5lcgorICAgICAgICAgICBhbHMgPG1pbj4gaXN0LCB3aXJkIGF1Y2gga2VpbmVyIHp1cnVlY2tnZWdlYmVuLgorICAgICAgICAyLiBBdXMgRWZmaXppZW56Z3J1ZW5kZW4gc29sbHRlIGZvcmNlZnJvbSBudXIgYmVudXR6dCB3ZXJkZW4sIHdlbm4KKyAgICAgICAgICAgZXMgd2lya2xpY2ggbm9ldGlnIGlzdCAocy4gaGllcnp1IGF1Y2ggU2VsZWN0TmVhckVuZW15KCkpLgorICAgICAgICAzLiAwIDw9IDxtaW4+IDw9IDxtYXg+IDwgTUFYX1RFQU1ST1dTCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIFVlYmVyc2ljaHQ6IHRlYW1rYW1wZgorICAgICAgICBQcm9wZXJ0aWVzOiBQX1RFQU0sIFBfQVNTT0NfTUVNQkVSUywgUF9URUFNX0FUVEFDS19DTUQsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9BVVRPRk9MTE9XLCBQX1RFQU1fQ09MT1JTLCBQX1RFQU1fTEVBREVSLAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fTkVXTUVNQkVSLCBQX1RFQU1fV0FOVEVEX1JPVywgUF9URUFNX1dJTVBZX1JPVworICAgICAgICBCZXdlZ3VuZzogICBJc1RlYW1Nb3ZlLCBUZWFtRmxlZQorICAgICAgICBNaXRnbGllZGVyOiBJc1RlYW1MZWFkZXIsIFRlYW1NZW1iZXJzCisgICAgICAgIEthbXBmOiAgICAgIEFzc29jTWVtYmVyLCBEZUFzc29jTWVtYmVyLCBJbnNlcnRFbmVteVRlYW0sCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdE5lYXJFbmVteQorICAgICAgICBQb3NpdGlvbmVuOiBQcmVzZW50UG9zaXRpb24sIFByZXNlbnRSb3dzLCBQcmVzZW50RW5lbXlSb3dzLAorICAgICAgICAgICAgICAgICAgICBQcmVzZW50VGVhbVBvc2l0aW9uLCBTd2FwUm93cworICAgICAgICBTb25zdGlnZXM6ICBUZWFtUHJlZml4LCB0ZWFta2FtcGZfaW50ZXJuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE2LTA4LTIwMTAsIEdhYnlsb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1NlbGVjdE5lYXJFbmVteSBiL2RvYy9sZnVuL1NlbGVjdE5lYXJFbmVteQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThiZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2VsZWN0TmVhckVuZW15CkBAIC0wLDAgKzEsNDkgQEAKKworU2VsZWN0TmVhckVuZW15KCkKKworCitGVU5LVElPTjoKKyAgICAgICAgdmFyYXJncyBvYmplY3QgU2VsZWN0TmVhckVuZW15KG9iamVjdCAqaGVyZSwgaW50IGZvcmNlZnJvbSkKKworREVGSU5JRVJUIElOOgorICAgICAgICAvc3RkL2xpdmluZy90ZWFtLmMKKworQVJHVU1FTlRFOgorICAgICAgICBoZXJlICAgICAgLSBSdWVja2dhYmV3ZXJ0IHZvbiBQcmVzZW50RW5lbWllcygpCisgICAgICAgIGZvcmNlZnJvbSAtIEdlZ25lciBNVVNTIGF1cyB1ZWJlcmdlYmVuZW0gQXJyYXkgYXVzZ2V3YWVobHQgd2VyZGVuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgV2FlaGx0IGVpbmVuIGltIE5haGthbXBmIGVycmVpY2hiYXJlbiBGZWluZCBhdXMKKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgICAgRGVyIEF1c2Vyd2FlaGx0ZSA6LSkKKworQkVNRVJLVU5HRU46CisgICAgICAgIDEuIEZhbGxzIGRlciBTcGllbGVyIGluIGVpbmVtIFRlYW0gaXN0IHVuZCBpbiBlaW5lciBoaW50ZXJlbiBSZWloZQorICAgICAgICAgICBzdGVodCwgd2lyZCBrZWluIEZlaW5kIGF1c2dld2FlaGx0LCBlcyBzZWkgZGVubiwgZGVyIFNwaWVsZXIgaGF0CisgICAgICAgICAgIGVpbmVuIEthbXBmIG1pdCBlaW5lbSBUZWFtbWl0Z2xpZWQgYW5nZWZhbmdlbi4KKyAgICAgICAgMi4gV2VubiBlaW4gYmV2b3J6dWd0ZXIgRmVpbmQgaW4gZWluZXIgZGVyIGhpbnRlcmVuIFJlaWhlbiBlaW5lcworICAgICAgICAgICBUZWFtcyBzdGVodCwgd2lyZCBzb2xhbmdlIGRhcyBUZWFtIGJldm9yenVndC4KKyAgICAgICAgMy4gQXVjaCBGZWluZGUgaW4gZGVuIGhpbnRlcmVuIFJlaWhlbiBrb2VubmVuIGltIE5haGthbXBmIGVycmVpY2hiYXIKKyAgICAgICAgICAgc2Vpbiwgd2VubiBkaWUgdm9yZGVyZW4gUmVpaGVuIG5pY2h0IGdlbnVlZ2VuZCBEZWNrdW5nIGJpZXRlbi4KKyAgICAgICAgNC4gQUNIVFVORzogRGVyIEF1c2Vyd2FlaGx0ZSBrb21tdCBuaWNodCBub3R3ZW5kaWdlcndlaXNlIGF1cyBkZW0KKyAgICAgICAgICAgdWViZXJnZWJlbmVuIEFycmF5LCB3ZW5uIGZvcmNlZnJvbT0wIGlzdC4gTm9ybWFsZXJ3ZWlzZSBpc3QgZGllc2VzCisgICAgICAgICAgIFZlcmhhbHRlbiBiZWFic2ljaHRpZ3QsIGRhbWl0IGplbWFuZCwgZGVyIHNpY2ggaW4gZGVyIFJlaWhlIHZvcgorICAgICAgICAgICBlaW5lbiBHZWduZXIgc3RlbGx0LCBhbmdlZ3JpZmZlbiB3aXJkLCBhdWNoIHdlbm4gZXIgbm9jaCBuaWNodAorICAgICAgICAgICBGZWluZCBpc3QuCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIFVlYmVyc2ljaHQ6IHRlYW1rYW1wZgorICAgICAgICBQcm9wZXJ0aWVzOiBQX1RFQU0sIFBfQVNTT0NfTUVNQkVSUywgUF9URUFNX0FUVEFDS19DTUQsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9BVVRPRk9MTE9XLCBQX1RFQU1fQ09MT1JTLCBQX1RFQU1fTEVBREVSLAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fTkVXTUVNQkVSLCBQX1RFQU1fV0FOVEVEX1JPVywgUF9URUFNX1dJTVBZX1JPVworICAgICAgICBCZXdlZ3VuZzogICBJc1RlYW1Nb3ZlLCBUZWFtRmxlZQorICAgICAgICBNaXRnbGllZGVyOiBJc1RlYW1MZWFkZXIsIFRlYW1NZW1iZXJzCisgICAgICAgIEthbXBmOiAgICAgIEFzc29jTWVtYmVyLCBEZUFzc29jTWVtYmVyLCBJbnNlcnRFbmVteVRlYW0sCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdEZhckVuZW15CisgICAgICAgIFBvc2l0aW9uZW46IFByZXNlbnRQb3NpdGlvbiwgUHJlc2VudFJvd3MsIFByZXNlbnRFbmVteVJvd3MsCisgICAgICAgICAgICAgICAgICAgIFByZXNlbnRUZWFtUG9zaXRpb24sIFN3YXBSb3dzCisgICAgICAgIFNvbnN0aWdlczogIFRlYW1QcmVmaXgsIHRlYW1rYW1wZl9pbnRlcm4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMTYtMDgtMjAxMCwgR2FieWxvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vU2V0IGIvZG9jL2xmdW4vU2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTY5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZXQKQEAgLTAsMCArMSwxMzcgQEAKK1NldCgpCitGVU5LVElPTjoKKyAgICAgcHVibGljIHZhcmFyZ3MgbWl4ZWQgU2V0KHN0cmluZyBuYW1lLCBtaXhlZCBWYWx1ZSwgaW50IFR5cGUsIGludCBleHRlcm4pOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvcHJvcGVydGllcy5jCisgICAgIC9zeXMvdGhpbmcvcHJvcGVydGllcy5oIChQcm90b3R5cCkKKworQVJHVU1FTlRFOgorICAgICBuYW1lIC0gUHJvcGVydHksIGRpZSBtYW5pcHVsaWVydCB3ZXJkZW4gc29sbAorICAgICBWYWx1ZSAtIGRlciB6dSBzZXR6ZW5kZS9hZW5kZXJuZGUgV2VydAorICAgICBUeXBlIC0gZGllIEVpZ2Vuc2NoYWZ0IGRlciBQcm9wZXJ0eSwgZGllIG1hbmlwdWxpZXJ0IHdlcmRlbiBzb2xsCisgICAgIGV4dGVybiAtIEludGVybmUgVmVyd2VuZHVuZzoKKyAgICBXdXJkZSBTZXQgdWViZXIgU2V0UHJvcCB2b24gYXVzc2VuIGdlcnVmZW4uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRWluZSBkZXIgaW5uZXJlbiBFaWdlbnNjaGFmdGVuIGRlciBQcm9wZXJ0eSAnbmFtZScgd2lyZCB2ZXJhZW5kZXJ0LgorICAgICAnVHlwZScgaXN0IGRhYmVpIGVpbmVyIGRlciBpbiAvc3lzL3RoaW5nL3Byb3BlcnRpZXMuaCBkZWZpbmllcnRlbgorICAgICBGX1hYWCAtIFdlcnRlOgorCisgICAgIEZfVkFMVUUgKD09MCwgZGVmYXVsdCkKKyAgICAgICBTZXR6dCBkZW4gSW5oYWx0IGRlciBQcm9wZXJ0eSBhdWYgJ1ZhbHVlJy4gQWVobmxpY2ggIlNldFByb3AiLAorICAgICAgIHVtZ2VodCBqZWRvY2ggZWluZSBldHdhaWdlIEZfU0VUX01FVEhPRCBvZGVyIF9zZXRfJ25hbWUnKCktTWV0aG9kZS4KKyAgICAgRl9NT0RFCisgICAgIEZfTU9ERV9BUworICAgICBGX01PREVfQUQKKyAgICAgICBBZW5kZXJ0IGVpbmVzIGRlciBpbnRlcm5lbiBGbGFncyBkZXIgUHJvcGVydHkuIEZfTU9ERSBuZWdpZXJ0IGRlbgorICAgICAgIHZvcmhlcmlnZW4gV2VydCB2b20gRmxhZyAnVmFsdWUnLCBGX01PREVfQVMgc2V0enQgdW5kIEZfTU9ERV9BRAorICAgICAgIGxvZXNjaHQgaWhuLgorICAgICAgIFZlcmZ1ZWdiYXJlIGludGVybmUgRmxhZ3M6CisgICAgICAgICBTQVZFIAorICAgICAgICAgICBQcm9wZXJ0eSB3aXJkIGJlaSBzYXZlX29iamVjdCgpIGdlc3BlaWNoZXJ0CisgICAgICAgICBQUk9URUNURUQgCisgICAgICAgICAgIEZsYWcgc2V0emJhciBkdXJjaDogICBiZWxpZWJpZ2VzIE9iamVrdAorICAgICAgICAgICBGbGFnIGxvZXNjaGJhciBkdXJjaDogdGhpc19vYmplY3QoKSwgUk9PVCwgRU0rCisgICAgICAgICAgIEluaGFsdCBkZXIgUHJvcGVydHkgdmVyYWVuZGVybiBzb3dpZSBTZXQtIHVuZCBRdWVyeS1NZXRob2RlbgorICAgICAgICAgICBzZXR6ZW4gb2RlciBsb2VzY2hlbiBkdWVyZmVuIG51ciBub2NoIHRoaXNfb2JqZWN0KCksIFJPT1QsIEVNKworICAgICAgICAgICBXQVJOVU5HOiBEaWVzZXMgRmxhZyBuaWNodCBsZWljaHRmZXJ0aWcgYmVpIFNwaWVsZXJuIHNldHplbiEKKyAgICAgICAgIFNFQ1VSRUQgIAorICAgICAgICAgICBGbGFnIHNldHpiYXIgZHVyY2g6ICAgdGhpc19vYmplY3QoKSwgUk9PVCwgRU0rCisgICAgICAgICAgIEZsYWcgbG9lc2NoYmFyIGR1cmNoOiBOaWVtYW5kZW4hCisgICAgICAgICAgIEluaGFsdCBkZXIgUHJvcGVydHkgdmVyYWVuZGVybiBzb3dpZSBTZXQtIHVuZCBRdWVyeS1NZXRob2RlbgorICAgICAgICAgICBzZXR6ZW4gb2RlciBsb2VzY2hlbiBkdWVyZmVuIG51ciBub2NoIHRoaXNfb2JqZWN0KCksIFJPT1QsIEVNKworICAgICAgICAgTk9TRVRNRVRIT0QgCisgICAgICAgICAgIFByb3BlcnR5IG5pY2h0IG1laHIgdWViZXIgU2V0UHJvcCgpIGFlbmRlcmJhcgorICAgICAgICAgICAoZGFtaXQgZW50ZmFsbGVuIGF1Y2ggU0VUX01FVEhPRCwgX3NldF8nbmFtZScpCisgICAgIEZfU0VUX01FVEhPRAorICAgICAgIEFlbmRlcnQgZGVuIEVpbnRyYWcgZnVlciBlaW5lIFNldE1ldGhvZCAtIGVpbmUgQ2xvc3VyZSwgZGllIGFuc3RhdHQKKyAgICAgICBkZXMgU2V0emVucyBkZXIgUHJvcGVydHkgYmVpbSBBdWZydWYgdm9uIFNldFByb3AgbWl0ICdWYWx1ZScKKyAgICAgICBhdWZnZXJ1ZmVuIHdpcmQuCisgICAgIEZfUVVFUllfTUVUSE9ECisgICAgICAgQWVuZGVydCBkZW4gRWludHJhZyBmdWVyIGVpbmUgUXVlcnlNZXRob2QgLSBlaW5lIENsb3N1cmUsIGRpZSBhbnN0YXR0CisgICAgICAgZGVzIExlc2VucyBkZXIgUHJvcGVydHkgYmVpbSBBdWZydWYgdm9uIFF1ZXJ5UHJvcCBhdWZnZXJ1ZmVuIHdpcmQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERhcyBFcmdlYm5pcyBkZXIgTWFuaXB1bGF0aW9uIGJ6dy4gZWluZXIgZGVyIGRlZmluaWVydGVuCisgICAgIEZlaGxlcmNvZGVzLgorCitCRU1FUktVTkdFTjoKKyAgICAgLSBTZXQoKSBzb2xsdGUgbmljaHQgenVtIHJlZ3VsYWVyZW4gTWFuaXB1bGllcmVuIGRlcyBJbmhhbHRzIGVpbmVyCisgICAgICAgUHJvcGVydHkgdmVyd2VuZGV0IHdlcmRlbiwgZGEgc293b2hsIEZfU0VUX01FVEhPRCBhbHMgYXVjaCBsaWJpbnRlcm5lCisgICAgICAgX3NldF8nbmFtZScoKS1NZXRob2RlbiB1bWdhbmdlbiB3ZXJkZW4gdW5kIGRhcyBFcmdlYm5pcyBmdWVyIHNvCisgICAgICAgdmVyYWVuZGVydGUgUHJvcGVydGllcyB1bmRlZmluaWVydCBpc3QuCisgICAgIC0gZWluZSBnZXNldHp0ZSBGX1NFVC9GX1FVRVJZX01FVEhPRCBoYXQgYmVpIFNldFByb3AvUXVlcnlQcm9wIFZvcnJhbmcKKyAgICAgICB2b3IgZWluZXIgX3NldC9fcXVlcnlfbWV0aG9kCisgICAgICAgLT4gX3NldC9fcXVlcnkgd2lyZCBuYWNoIGVyZm9sZ3JlaWNoZW0gUnVmIHZvbiBGX1hYWF9NRVRIT0QgaWdub3JpZXJ0CisgICAgIC0gRl9TRVQvRl9RVUVSWV9NRVRIT0Qgc29sbHRlIG5vcm1hbGVyd2Vpc2UgVm9yenVnIHZvciBlaW5lcgorICAgICAgIF9zZXRfL19xdWVyeV8qIGdlZ2ViZW4gd2VyZGVuLgorCisgICAgU2V0TWV0aG9kcy9RdWVyeU1ldGhvZHM6CisgICAgIC0gZmFsbHMgaWhyIFF1ZXJ5L1NldE1ldGhvZHMgYW4gb2VmZmVudGxpY2hlbiBQcm9wZXJ0aWVzIHNldHplbgorICAgICAgIHdvbGx0LCBwcnVlZnQgYml0dGUgdm9yaGVyLCBvYiBkb3J0IG5pY2h0IHNjaG9uIGVpbmUgKGZyZW1kZSkgZ2VzZXR6dAorICAgICAgIGlzdCB1bmQgYnJlY2h0IGdnZi4gZXVlciBTZXQoKSBhYiwgdW0gbmljaHQgZGllIEFyYmVpdCBhbmRlcmVyCisgICAgICAgTWl0bWFnaWVyIHp1IHNhYm90aWVyZW4gKHouQi4gUF9IQU5EUykKKyAgICAgLSBQcm9wZXJ0aWVzIHNvbGx0ZW4gbWl0IFF1ZXJ5LSBvZGVyIFNldE1ldGhvZGVuIG51ciBzbyBsYW5nZSB3aWUKKyAgICAgICBub2V0aWcgYmVsZWd0IHdlcmRlbgorICAgICAgIC0+IG1hbmNoZSBQcm9wZXJ0aWVzIHNvbGx0ZSBtYW4gYWxzIFdlcnQgc2V0emVuLCBfYXVjaCB3ZW5uXyBkaWUKKyAgICAgICAgICBTcGllbGVyIHNpZSB6dXJ1ZWNrc2V0emVuIGtvZW5udGVuICh6QiBQX01TR0lOL1BfTVNHT1VUKQorICAgICAtIGF1ZiBrZWluZW4gRmFsbCBkZW4gV2VydCBzcGVpY2hlcm4sIHVlYmVyc2NocmVpYmVuLCBydWVja3NjaHJlaWJlbiwKKyAgICAgICBkYXMgZnVlaHJ0IGZhc3QgaW1tZXIgenUgUHJvYmxlbWVuLgorICAgICAtIFNldC9RdWVyeU1ldGhvZGVuIHNvbGx0ZW4gbmljaHQgYWxzIFRyaWdnZXIvTGlzdGVuZXIgZnVlciBlaW4KKyAgICAgICBFcmVpZ25pcyAoei5CLiBQX0RJRV9NU0cgZnVlciBkYXMgRXJlaWduaXMgIlRvZCBkZXMgU3BpZWxlcnMiKQorICAgICAgIG1pc3NicmF1Y2h0IHdlcmRlbgorICAgICAgIC0+IGVzIGdpYnQgc2ljaGVyZSB1bmQgc2F1YmVyZSBNb2VnbGljaGtlaXRlbiAoTm90aWZ5UGxheWVyRGVhdGgpLAorICAgICAgICAgIHVuZCB3ZW5uIG5pY2h0LCB3ZW5kZXQgZXVjaCBhbiBkZW4gRU0gZXVyZXMgVmVydHJhdWVucworICAgICAtIEZfU0VUL0ZfUVVFUllfTUVUSE9EcyBrb2VubmVuICdwcm90ZWN0ZWQnIChlbXBmb2hsZW4pIG9kZXIgJ3N0YXRpYycKKyAgICAgICBzZWluLiBfc2V0Xy9fcXVlcnlfIGR1ZXJmZW4gbW9tZW50YW4gX25pY2h0XyAncHJvdGVjdGVkJyBzZWluLCBmdWVyCisgICAgICAgZ2VodCBudXIgJ3N0YXRpYycgKGluIGRpZXNlbSBGYWxsIGVtcGZvaGxlbikuCisKK0JFSVNQSUVMRToKKyAgICAgIyMjIEFlbmRlcm4gdm9uIEVpZ2Vuc2NoYWZ0ZW4gZWluZXIgUHJvcGVydHkgIyMjCisgICAgIC8vIFNldHplbiBkZXMgU0FWRS1GbGFncyAoYmVpIHNhdmVfb2JqZWN0KCkgbWl0enVzcGVpY2hlcm4pCisgICAgIFNldChQX1hZWiwgU0FWRSwgRl9NT0RFX0FTKTsKKworICAgICAvLyBMb2VzY2hlbiBkZXMgU0FWRS1GbGFncworICAgICBTZXQoUF9YWVosIFNBVkUsIEZfTU9ERV9BRCk7CisgICAgIAorICAgICAvLyBOZWdpZXJlbiBkZXMgYmlzaGVyaWdlbiBTQVZFLUZsYWdzCisgICAgIFNldChQX1hZWiwgU0FWRSwgRl9NT0RFKTsKKyAgICAgLy8gSGlud2VpczogZGFzIFNldHplbiBkZXMgRmxhZ3MgZnVua3Rpb25pZXJ0IG1pdHRlbHMgRl9NT0RFIG51ciBkYW5uLAorICAgICAvLyB3ZW5uIHNpY2hlcmdlc3RlbGx0IGlzdCwgZGFzcyBlcyB2b3JoZXIgbmljaHQgZ2VzZXR6dCB3YXIuIERpZSAKKyAgICAgLy8gc2ljaGVyZSBWYXJpYW50ZSBpc3QgZGFoZXIsIEZfTU9ERV9BUyB6dSB2ZXJ3ZW5kZW4uCisKKyAgICAgLy8gU3BlcnJlbiBkZXMgU2V0UHJvcC9TRVRfTUVUSE9ELVp1Z3JpZmZzOgorICAgICBTZXQoUF9YWVosIE5PU0VUTUVUSE9ELCBGX01PREVfQVMpOworCisgICAgIC8vIFZvcmxhZXVmaWdlciBadWdyaWZmc3NjaHV0eiBmdWVyIGVpbmUgUHJvcGVydHk6CisgICAgIFNldChQX1hZWiwgUFJPVEVDVEVELCBGX01PREVfQVMpOworCisgICAgIC8vIFBlcm1hbmVudGVyIFp1Z3JpZmZzc2NodXR6IGZ1ZXIgZWluZSBQcm9wZXJ0eToKKyAgICAgU2V0KFBfWFlaLCBTRUNVUkVELCBGX01PREVfQVMpOworCisgICAgICMjIyBTZXR6ZW4gZWluZXIgU2V0TWV0aG9kL1F1ZXJ5TWV0aG9kICMjIworICAgICAvLyBTZXR6ZW4gZWluZXIgaW50ZXJuZW4gU2V0TWV0aG9kCisgICAgIG1peGVkIGZvbyhtaXhlZCB2YWwpOworICAgICAuLi4KKyAgICAgU2V0KFBfWFlaLCAjJ2ZvbywgRl9TRVRfTUVUSE9EKTsKKyAgICAgLi4uCisKKyAgICAgLy8gU2V0emVuIGVpbmVyIFF1ZXJ5TWV0aG9kIGJlaSBlaW5lbSBhbmRlcmVuIE9iamVrdAorICAgICBtaXhlZCBiYXIoKTsKKyAgICAgLi4uCisgICAgIG90aGVyLT5TZXQoUF9YWVosICMnYmFyLCBGX1FVRVJZX01FVEhPRCk7CisgICAgIC4uLgorCisgICAgIC8vIERlciBWb2xsc3RhZW5kaWdrZWl0IGhhbGJlciBzZWkgZGFzIEFlbmRlcm4gZWluZXIgUHJvcGVydHkgdW50ZXIKKyAgICAgLy8gVW1nZWh1bmcgdm9uIFNldC1NZXRob2RlbiBhbmdlZ2ViZW4uIEVzIGlzdCBhYmVyIGF1cyBvLmcuIEdydWVuZGVuCisgICAgIC8vIHp1IGVtcGZlaGxlbiwgZGllc2UgVmFyaWFudGUgbmljaHQgenUgdmVyd2VuZGVuLgorICAgICBTZXQoUF9YWVosICJibGEiLCBGX1ZBTFVFKTsKKworU0lFSEUgQVVDSDoKKyAgICAgQWVobmxpY2hlczogU2V0UHJvcChMKSwgUXVlcnlQcm9wKEwpLCBRdWVyeShMKQorICAgICBHZW5lcmVsbDogIFNldFByb3BlcnRpZXMoTCksIFF1ZXJ5UHJvcGVydGllcyhMKQorICAgICBLb256ZXB0OiAgcHJvcGVydGllcywgL3N0ZC90aGluZy9wcm9wZXJ0aWVzLmMKKyAgICAgU29uc3RpZ2VzOiAgUF9BVVRPTE9BRE9CSgorCiswNi4gSmFuIDIwMDggQXJhdGhvcm4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1NldEF0dGFja0NoYXRzIGIvZG9jL2xmdW4vU2V0QXR0YWNrQ2hhdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyMDNhMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1NldEF0dGFja0NoYXRzCkBAIC0wLDAgKzEsNjggQEAKK1NldEF0dGFja0NoYXRzKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgU2V0QXR0YWNrQ2hhdHMoaW50IGNoYW5jZSwgbWl4ZWQgc3Rycyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9ucGMvY2hhdC5jCisKK0FSR1VNRU5URToKKyAgICAgY2hhbmNlCisgICAgICAgICAgUHJvemVudHVhbGUgV2FocnNjaGVpbmxpY2hrZWl0IGVpbmVyIEF1c2dhYmUKKyAgICAgc3RycworICAgICAgICAgIFN0cmluZ2FycmF5IG1pdCBkZW4gTW9uc3RlcmNoYXRzCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGVyIE5QQyBnaWJ0IG1pdCBkZXIgV2FocnNjaGVpbmxpY2hrZWl0ICdjaGFuY2UnIGVpbmVuIHp1ZmFlbGxpZworICAgICBnZXdhZWhsdGVuIFRleHQgYXVzICdzdHJzJyB2b24gc2ljaC4gRGllIEFycmF5ZWxlbWVudGUga29lbm5lbiAKKyAgICAgYXVjaCBGdW5rdGlvbmVuICgiQEBmdW5jQEAiKSBvZGVyIENsb3N1cmVzIGVudGhhbHRlbiwgZGllIGRhbm4KKyAgICAgYXVmZ2VydWZlbiB3ZXJkZW4gdW5kIGRlcmVuIFJ1ZWNrZ2FiZXdlcnRlIGRhcyBNb25zdGVyIGRhbm4gYXVzZ2lidC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisgICAgIAorQkVNRVJLVU5HRU46CisgICAgIEF0dGFja0NoYXRzIHdlcmRlbiBudXIgaW0gS2FtcGYgYXVzZ2VnZWJlbi4gQW5zb25zdGVuIGlzdCBTZXRDaGF0cygpCisgICAgIHp1IHZlcndlbmRlbi4KKyAgICAgCisgICAgICdjaGFuY2UnIHdpcmQgaW4gZGVyIFByb3BlcnR5IFBfQUNIQVRfQ0hBTkNFIGFiZ2VsZWd0LiBVbSBlaW5lbiBOUEMKKyAgICAgdm9ydWViZXJnZWhlbmQgJ3N0aWxsenVsZWdlbicsIGthbm4gbWFuIFBfQUNIQVRfQ0hBTkNFIGF1ZiAwIHNldHplbi4KKyAgICAgCisgICAgIE1hbiBrYW5uIEF0dGFja0NoYXRzIG51dHplbiwgdW0gTW9uc3RlcnNwZWxscyB6dSByZWFsaXNpZXJlbi4gQmVzc2VyCisgICAgIGlzdCBlcyBhYmVyLCBkYWZ1ZXIgJ0FkZFNwZWxsJyB6dSB2ZXJ3ZW5kZW4uCisgICAgIAorQkVJU1BJRUxFOgorCisgICAgIFNldEF0dGFja0NoYXRzKCAyMCwKKyAgICAgICAoeyAiRGVyIE9yayB0cml0dCBEaXIgaW4gZGVuIEhpbnRlcm4uXG4iLAorICAgICAgICAgICJEZXIgT3JrIGJydWVsbHQ6IExlYmVuZCBrb21tc3QgRHUgaGllciBuaWNodCByYXVzIVxuIiwKKyAgICAgICAgICAiRGVyIE9yayBibHV0ZXQgc2Nob24gYXVzIG1laHJlcmVuIFd1bmRlbi5cbiIsCisgICAgICAgICAgIkBAa25pcnNjaEBAIiB9KSApOworICAgICAgICAgIAorICAgICBzdHJpbmcga25pcnNjaCgpCisgICAgIHsKKyAgICAgICBvYmplY3QgKnJ1ZXN0dW5nLCAqdG1wLCBoZWxtOworICAgICAgIAorICAgICAgIHJ1ZXN0dW5nID0gdGhpc19wbGF5ZXIoKS0+UXVlcnlQcm9wKFBfQVJNT1VSUyk7IC8vIGdldHJhZ2VuZSBSdWVzdHVuZworICAgICAgIHRtcCA9IGZpbHRlcl9vYmplY3RzKHJ1ZXN0dW5nLCAiaWQiLCBBVF9IRUxNRVQpOworICAgICAgIC8vIFdlbm4gZGVyIFNwaWVsZXIgZWluZW4gSGVsbSB0cmFlZ3QsIGVudGhhZWx0ICd0bXAnIGpldHp0CisgICAgICAgLy8gZWluIEFycmF5IG1pdCBkZW0gSGVsbW9iamVrdCBhbHMgZWluemlnZW0gRWxlbWVudAorICAgICAgIGlmIChzaXplb2YodG1wKSkgaGVsbSA9IHRtcFswXTsKKwkgaWYgKG9iamVjdHAoaGVsbSkpCisJIHsKKwkgICAvLyBBQyBudXIgZGFubiBzZW5rZW4sIHdlbm4gc2llIG5pY2h0IHNjaG9uIDAgaXN0LgorCSAgIGlmIChoZWxtLT5RdWVyeVByb3AoUF9BQyk+MCkgeworCSAgICAgaGVsbS0+RGFtYWdlKDEpOworCSAgICAgcmV0dXJuICJEZXIgT3JrIGJlc2NoYWVkaWd0IERlaW5lbiBIZWxtIVxuIjsKKwkgICB9CisJICAgcmV0dXJuICIiOworCSB9CisJIGVsc2UKKwkgICByZXR1cm4gIiI7IC8vIGtlaW5lIE1lbGR1bmcKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBQX0FDSEFUX0NIQU5DRSwgU2V0Q2hhdHMoKSwgL3N0ZC9ucGMvY2hhdC5jLCBBZGRTcGVsbCgpCisKK0xFVFpURSBBRU5ERVJVTkc6CisJRG9uLCAyNy4xMi4yMDA3LCAxNjozNTowMCB2b24gQXJhdGhvcm4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1NldEF0dHIgYi9kb2MvbGZ1bi9TZXRBdHRyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlY2YzODEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZXRBdHRyCkBAIC0wLDAgKzEsMzEgQEAKK1NldEF0dHIoKQorRlVOS1RJT046CisgICAgIHByaXZhdGUgc3RhdGljIGludCBTZXRBdHRyKHN0cmluZyBhdHRyLCBpbnQgdmFsKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYworCitBUkdVTUVOVEU6CisgICAgIGF0dHIgICAgICAgLSB6dSBzZXR6ZW5kZXMgQXR0cmlidXQKKyAgICAgdmFsICAgICAgICAtIFdlcnQKKworQkVTQ0hSRUlCVU5HOgorICAgICBGaWx0ZXJ0IGRlbiBXZXJ0IGR1cmNoIF9maWx0ZXJhdHRyKCkuIERhZHVyY2ggd2VyZGVuIFNUUiwgSU5ULCBDT04sIERFWAorICAgICBhdWYgMjAgYmVncmVuenQuIFNldHp0IGRhbm4gZGFzIEF0dHJpYnV0LgorICAgICBPZmZzZXRzIHdlcmRlbiBoaWVyIG5pY2h0IGJlcnVlY2tzaWNodGlndCwgUXVlcnlBdHRyaWJ1dGUoKSBnaWJ0IGFsc28KKyAgICAgdmFsICsgZXR3YWlnZSBPZmZzZXRzL01vZGlmaWVyIHp1cnVlY2suCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIFRhdHNhZWNobGljaCBnZXNldHp0ZXIgV2VydC4KKworQkVNRVJLVU5HRU46CisgICAgIFdpcmQgdm9uIFNldEF0dHJpYnV0ZSgpIHVuZCBTZXRSZWFsQXR0cmlidXRlKCkgYXVmZ2VydWZlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgUXVlcnlBdHRyaWJ1dGUoKSwgUXVlcnlSZWFsQXR0cmlidXRlKCksIFF1ZXJ5QXR0cmlidXRlT2Zmc2V0KCksDQorICAgICBTZXRBdHRyaWJ1dGUoKSwgU2V0UmVhbEF0dHJpYnV0ZSgpLCBVcGRhdGVBdHRyaWJ1dGVzKCksDQorICAgICBUZXN0QXR0cmlidXRlTG9jaygpLA0KKyAgICAgUF9BVFRSSUJVVEVTLCBQX0FUVFJJQlVURVNfT0ZGU0VUUywgUF9BVFRSSUJVVEVTX01PRElGSUVSLA0KKyAgICAgUF9YX0FUVFJfTU9ELCBQX01fQVRUUl9NT0QsIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYw0KKworMTMuTm92LjIwMDIsIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vU2V0QXR0cmlidXRlIGIvZG9jL2xmdW4vU2V0QXR0cmlidXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYjU0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZXRBdHRyaWJ1dGUKQEAgLTAsMCArMSwyOCBAQAorU2V0QXR0cmlidXRlKCkKK0ZVTktUSU9OOgorICAgICBpbnQgU2V0QXR0cmlidXRlKHN0cmluZyBhdHRyLCBpbnQgdmFsKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYworCitBUkdVTUVOVEU6CisgICAgIGF0dHIgICAgICAgLSB6dSBzZXR6ZW5kZXMgQXR0cmlidXQKKyAgICAgdmFsICAgICAgICAtIFdlcnQKKworQkVTQ0hSRUlCVU5HOgorICAgICBOaW1tIHZhbCBhbHMgR2VzYW10d2VydCBkZXMgQXR0cmlidXRlcywgZC5oLiB6aWVodCBldHdhaWdlIE9mZnNldHMgdm9yCisgICAgIFNldHplbiBhYi4gKFF1ZXJ5QXR0cmlidXRlIGdpYnQgZGFubiBhbHNvIHZhbCB6dXJ1ZWNrKQorCitSVWVDS0dBQkVXRVJUOgorICAgICBEZW4gZHVyY2ggU2V0QXR0ciBnZWZpbHRlcnRlbiBnZXNldHp0ZW4gV2VydC4KKyAgICAgQml0dGUgbmljaHQgYXVmIFNwaWVsZXIgYW53ZW5kZW4hCisKK1NJRUhFIEFVQ0g6DQorCVF1ZXJ5QXR0cmlidXRlKCksIFF1ZXJ5UmVhbEF0dHJpYnV0ZSgpLCBRdWVyeUF0dHJpYnV0ZU9mZnNldCgpLA0KKwlTZXRBdHRyaWJ1dGUoKSwgU2V0UmVhbEF0dHJpYnV0ZSgpLCBVcGRhdGVBdHRyaWJ1dGVzKCksDQorCVNldFRpbWVkQXR0ck1vZGlmaWVyKCksIFF1ZXJ5VGltZWRBdHRyTW9kaWZpZXIoKSwgDQorCURlbGV0ZVRpbWVkQXR0ck1vZGlmaWVyKCksDQorCVBfQVRUUklCVVRFUywgUF9BVFRSSUJVVEVTX09GRlNFVFMsIFBfVElNRURfQVRUUl9NT0QsDQorCVBfWF9BVFRSX01PRCwgUF9NX0FUVFJfTU9ELCAvc3RkL2xpdmluZy9hdHRyaWJ1dGVzLmMNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorTGFzdCBtb2RpZmllZDogVHVlIEp1bCAyNyAyMDowMDoyMCAyMDA0IGJ5IE11YWRpYg0KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1NldEJ1eUZhY3QgYi9kb2MvbGZ1bi9TZXRCdXlGYWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MTU0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZXRCdXlGYWN0CkBAIC0wLDAgKzEsMzYgQEAKK1NldEJ1eUZhY3QoKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBTZXRCdXlGYWN0KGludCBmYWN0KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xhZGVuLmMKKworQVJHVU1FTlRFOgorICAgICBmYWN0CisgICAgICAgICAgRGVyIEVpbmthdWZzcHJlaXNtdWx0aXBsaWthdG9yLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERlciBQcmVpcywgZGVyIGJlaW0gS2F1ZiBlaW5lcyBPYmpla3RzIGltIExhZGVuIHp1IGVudHJpY2h0ZW4gaXN0LAorICAgICBlcnJlY2huZXQgc2ljaCBhdXMgc2VpbmVtIFdlcnQgKCBQX1ZBTFVFKSwgbXVsdGlwbGl6aWVydCBtaXQgZGVtIEZha3RvcgorICAgICBmYWN0LiBEaWVzZXIgUHJlaXMgaXN0IGtvbnN0YW50IHVuZCBuaWNodCB2b24gZGVyIGFrdHVlbGxlbiBNYXJrdGxhZ2UKKyAgICAgYWJoYWVuZ2lnLgorCisgICAgIERlciBEZWZhdWx0d2VydCBpc3QgMy4gRWluIGhvZWhlcmVyIFdlcnQgZW50c3ByaWNodCBlaW5lbSB0ZXVyZW4gTGFkZW4sCisgICAgIHdhZWhyZW5kIGVpbiBrbGVpbmVyZXIgV2VydCB6dSBrbGVpbmVuIFByZWlzZW4gZnVlaHJ0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVNRVJLVU5HRU46CisgICAgIE5vcm1hbGVyd2Vpc2Uga29tbXQgbWFuIG9obmUgZGllc2UgRnVua3Rpb24gYXVzOiBpbiB0ZXVyZW4gTGFlZGVuIHdpcmQKKyAgICAgbmljaHQgdmllbCBlaW5nZWthdWZ0IChlcyBzZWkgZGVubiwgZXMgbGllZ2VuIHN0YW5kYXJkbWFlc3NpZyBndXRlCisgICAgIE9iamVrdGUgaW0gU3BlaWNoZXIpLCBlaW5lbSBCaWxsaWdsYWRlbiB3aXJkIGJhbGQgZGFzIEdlbGQgYXVzZ2VoZW4gbWl0CisgICAgIGRlciBGb2xnZSwgZGFzcyBkZXIgTGFkZW5iZXNpdHplciBuaWNodHMgbWVociBhbmthdWZlbiBrYW5uIHVuZCBzZWluCisgICAgIExhZ2VyIGdhZWhuZW5kIGxlZXIgaXN0LgorCitTSUVIRSBBVUNIOgorICAgICBRdWVyeUJ1eUZhY3QoKSwgL3N0ZC9sYWRlbi5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoyNDo1MiAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vU2V0Q2hhdHMgYi9kb2MvbGZ1bi9TZXRDaGF0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjQyNWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2V0Q2hhdHMKQEAgLTAsMCArMSw2OSBAQAorU2V0Q2hhdHMoKQorCitGVU5LVElPTjoKKwl2b2lkIFNldENoYXRzKGludCBjaGFuY2UsbWl4ZWQgc3Rycyk7CisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL25wYy9jaGF0LmMKKworQVJHVU1FTlRFOgorCWNoYW5jZQorCSAgUHJvemVudHVhbGUgV2FocnNjaGVpbmxpY2hrZWl0IGVpbmVyIEF1c2dhYmUKKwlzdHJzCisJICBTdHJpbmdhcnJheSBtaXQgZGVuIE1vbnN0ZXJjaGF0cworCitCRVNDSFJFSUJVTkc6CisJRGVyIE5QQyBnaWJ0IG1pdCBkZXIgV2FocnNjaGVpbmxpY2hrZWl0IDxjaGFuY2U+IHBybyBIZWFydGJlYXQgZWluZW4KKwl6dWZhZWxsaWcgZ2V3YWVobHRlbiBUZXh0IGF1cyBkZW0gQXJyYXkgPHN0cnM+IHZvbiBzaWNoLgorCURpZSBBcnJheWVsZW1lbnRlIGtvZW5uZW4gYXVjaCBDbG9zdXJlcyBvZGVyCisJcHJvY2Vzc19zdHJpbmcoKS1GdW5rdGlvbmVuICgiQEBmdW5jQEAiKSBlbnRoYWx0ZW4sIGRpZSBkYW5uCisJYXVmZ2VydWZlbiB3ZXJkZW4gdW5kIGRlcmVuIFJ1ZWNrZ2FiZXdlcnRlIGRhcyBNb25zdGVyIGRhbm4gYXVzZ2lidC4KKwkgKEZ1ZXIga2VpbmUgQXVzZ2FiZSBkYW5uIExlZXJzdHJpbmcgIiIgenVydWVja2dlYmVuISkKKwlJbiBkaWVzZW4gRnVua3Rpb25lbiBpc3QgdGhpc19wbGF5ZXIoKSBkYXMgTW9uc3RlciBzZWxic3QhCisJRnVlciBaZWlsZW51bWJydWVjaGUgaXN0IGltbWVyIHNlbGJzdCB6dSBzb3JnZW4uCisKK1JVRUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK0JFSVNQSUVMRToKKwlFaW4gZWluZmFjaGVzIEJlaXNwaWVsOgorCSAgLy8gUHJvdG90eXBlIGZ1ZXIgQ2xvc3VyZS4KKwkgIHN0YXRpYyBzdHJpbmcgaW5mbzEoKTsKKwkgIHZvaWQgY3JlYXRlKCkKKwkgIHsgLi4uCisJICAgIFNldENoYXRzKDIwLAorCSAgICh7IkRlciBPcmsgc2FndDogSGF1IGFiLCBiZXZvciBpY2ggRGljaCBmcmVzc2UuXG4iLAorCSAgICAgIkRlciBPcmsgZ3JpbnN0IERpY2ggdW52ZXJzY2hhZW10IGFuLlxuIiwKKwkgICAgICJEZXIgT3JrIHdlZGVsdCBtaXQgc2VpbmVtIFNhZWJlbCB2b3IgRGVpbmVtIEdlc2ljaHQgaGVydW0uXG4iLAorCSAgICAgIkRlciBPcmsgZHJvaHQgRGlyIG1pdCBkZXIgRmF1c3QuXG4iLAorICAgICAgICAgICAgICMnaW5mbzEsCisJICAgICAiQEBpbmZvMkBAIn0pKTsKKyAgICAgICAgICB9CisJICAvLyBGdW5rdGlvbiBhbHMgQ2xvc3VyZS4gUHJvdG90eXBlIG5vdHdlbmRpZyEKKwkgIHN0YXRpYyBzdHJpbmcgaW5mbzEoKQorCSAgeyBpZihRdWVyeVByb3AoUF9IUCk8UXVlcnlQcm9wKFBfQUxJR04pKQorCSAgICAgIHJldHVybiJHbGVpY2ggd2VyZGUgaWNoIHZvbiBoaWVyIGZsaWVoZW4hXG4iOworCSAgICByZXR1cm4iIjsKKwkgIH0KKwkgIC8vIEZ1bmt0aW9uIGFscyBwcm9jZXNzX3N0cmluZygpLgorCSAgc3RyaW5nIGluZm8yKCkKKwkgIHsgcmV0dXJuIFF1ZXJ5UHJvcChQX0hQKT09UXVlcnlQcm9wKFBfTUFYX0hQKT8KKwkgIkRlciBPcmsgZ3JpbnN0OiBNaXIgZ2VodCBlcyBmYW50YXN0aXNjaCFcbiI6CisJICJEZXIgT3JrIHNldWZ6dDogTWlyIGdpbmcgZXMgd2lya2xpY2ggc2Nob24gbWFsIGJlc3Nlci5cbiI7CisJICB9CisKK0JFTUVSS1VOR0VOOgorCUltIEthbXBmIHdlcmRlbiBrZWluZSBDaGF0cyBhdXNnZWdlYmVuLiBFcyBpc3QgZGFubiBTZXRBdHRhY2tDaGF0cygpCisJenUgdmVyd2VuZGVuLgorCUZ1bmt0aW9uZW4gYWxzIHByb2Nlc3Nfc3RyaW5nKCkgc29sbHRlIG1hbiBuaWNodCBtZWhyIHZlcndlbmRlbi4KKwk8Y2hhbmNlPiB3aXJkIGluIGRlciBQcm9wZXJ0eSBQX0NIQVRfQ0hBTkNFIGFiZ2VsZWd0LiBVbSBlaW5lbiBOUEMKKwl2b3J1ZWJlcmdlaGVuZCAnc3RpbGx6dWxlZ2VuJywga2FubiBtYW4gUF9DSEFUX0NIQU5DRSBhdWYgMCBzZXR6ZW4uCisgIFdlbm4ga2VpbiBTcGllbGVyIGFud2VzZW5kIGlzdCwgaGFiZW4gTlBDIGluIGRlciBSZWdlbCBrZWluZW4gSGVhcnRiZWF0LAorICB3ZXN3ZWdlbiBkYW5uIGF1Y2ggZGllIENoYXRzIGF1c2dlc2NoYWx0ZXQgc2luZC4KKyAgU3BpZWxlciBrb2VubmVuIE5QQyAnc3RpbGxlbicsIGQuaC4gQ2hhdHMgdW5kIEF0dGFja0NoYXRzIGFic2NoYWx0ZW4uCisKK1NJRUhFIEFVQ0g6CisJUF9DSEFUX0NIQU5DRSwgU2V0QXR0YWNrQ2hhdHMoKSwgcHJvY2Vzc19zdHJpbmcoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBTYXQgSmFuIDE4IDE4OjQ4OjA2IDIwMDMgYnkgUGF0cnluCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TZXRDb2luc1BlclVuaXRzIGIvZG9jL2xmdW4vU2V0Q29pbnNQZXJVbml0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2UzODc5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2V0Q29pbnNQZXJVbml0cwpAQCAtMCwwICsxLDM4IEBACitTZXRDb2luc1BlclVuaXRzKCkKKworRlVOS1RJT046CisgICAgIHZvaWQgU2V0Q29pbnNQZXJVbml0cyhpbnQgY29pbnMsIGludCB1bml0cyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC91bml0LmMKKworQVJHVU1FTlRFOgorICAgICBjb2lucworICAgICAgICAgIFphaGwgZGVyIE11ZW56ZW4KKyAgICAgdW5pdHMKKyAgICAgICAgICBaYWhsIGRlciBFaW5oZWl0ZW4KKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3aXJkIGZlc3RnZWxlZ3QsIHdpZXZpZWwgZWluZSBiZXN0aW1tdGUgTWVuZ2UgZGVyIEVpbmhlaXRlbiBrb3N0ZXQuCisgICAgIEVpbmUgZWluemVsbmUgRWluaGVpdCBrb3N0ZXQgY29pbnMvdW5pdHMgTXVlbnplbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFTUVSS1VOR0VOOgorICAgICBCZWkgZGVyIFByZWlzYmVyZWNobnVuZyB3aXJkIGFiZ2VydW5kZXQuIEhhdCBtYW4gYWxzbyBlaW4gVmVyaGFlbHRuaXMKKyAgICAgdm9uIGVpbmVyIE11ZW56ZSBwcm8gendlaSBFaW5oZWl0ZW4sIHNvIGlzdCBkZXIgUHJlaXMgZWluZXIgZWluemVsbmVuCisgICAgIEVpbmhlaXQgMCEKKworQkVJU1BJRUxFOgorICAgICBFaW5lIEVpbmhlaXQgc29sbCAzLjUgTXVlbnplbiB3ZXJ0IHNlaW46CisKKyAgICAgLyogNyBNdWVuemVuIC8gMiBFaW5oZWl0ZW4gPSAzLjUgTXVlbnplbiAvIEVpbmhlaXQgKi8KKyAgICAgU2V0Q29pbnNQZXJVbml0cyg3LDIpOworCitTSUVIRSBBVUNIOgorICAgICBRdWVyeUNvaW5zUGVyVW5pdHMoKSwgU2V0R3JhbXNQZXJVbml0cygpLCBRdWVyeUdyYW1zUGVyVW5pdHMoKSwKKyAgICAgL3N0ZC91bml0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjI0OjU3IDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TZXREb29yU3RhdHVzIGIvZG9jL2xmdW4vU2V0RG9vclN0YXR1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTQ4NjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2V0RG9vclN0YXR1cwpAQCAtMCwwICsxLDI5IEBACitGVU5LVElPTjoKKyAgICAgdm9pZCBTZXREb29yU3RhdHVzKHN0cmluZyBkZXN0LCBpbnQgc3RhdHVzKTsKKworREVGSU5JRVJUIElOOgorICAgICAvb2JqL2Rvb3JtYXN0ZXIuYworCitBUkdVTUVOVEU6CisgICAgIDxkZXN0PiAgID0gWmllbHJhdW0gZGVyIFR1ZXIuCisgICAgIDxzdGF0dXM+ID0gRGVyIG5ldWUgWnVzdGFuZCBkZXIgVHVlci4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEZXIgWnVzdGFuZCBkZXIgVHVlciwgZGllIHZvbiBkaWVzZW0gUmF1bSBuYWNoIDxkZXN0PiBmdWVocnQsIHdpcmQgYXVmCisgICAgIDxzdGF0dXM+IGdlYWVuZGVydC4gSGllcmJlaSBtdXNzIDxzdGF0dXM+IGVpbmVyIGRlciBkcmVpIGZvbGdlbmRlbiBXZXJ0ZQorICAgICBhdXMgPGRvb3Jyb29tLmg+IHNlaW46CisKKyAgICAgICBEX1NUQVRVU19MT0NLRUQgLSBUdWVyIGFiZ2VzY2hsb3NzZW4KKyAgICAgICBEX1NUQVRVU19DTE9TRUQgLSBUdWVyIGdlc2NobG9zc2VuCisgICAgICAgRF9TVEFUVVNfT1BFTiAgIC0gVHVlciBnZW9lZmZuZXQKKworUlVFQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKKworU0lFSEUgQVVDSDoKKyAgICBOZXdEb29yKCksIFF1ZXJ5RG9vcktleSgpLCBRdWVyeURvb3JTdGF0dXMoKSwgUF9ET09SX0lORk9TLAorICAgIC9zdGQvcm9vbS9kb29ycy5jLCAvb2JqL2Rvb3JtYXN0ZXIuYywgR2V0UGhpb2xlbkluZm9zKCksIFF1ZXJ5QWxsRG9vcnMoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGV0enRlIEFlbmRlcnVuZzogRG9uLCAwOC4wNS4yMDE0LCBHYWJ5bG9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TZXRFbmVtaWVzIGIvZG9jL2xmdW4vU2V0RW5lbWllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzc5YTU2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2V0RW5lbWllcwpAQCAtMCwwICsxLDMzIEBACitTZXRFbmVtaWVzKCkKKworRlVOS1RJT046CisgICAgIG1hcHBpbmcgU2V0RW5lbWllcyhvYmplY3QgKm15ZW5lbWllcyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvY29tYmF0LmMKKworQVJHVU1FTlRFOgorICAgICBteWVuZW1pZXMKKwkgIEFycmF5OiAoe0dlZ25lcmFycmF5LCBaZWl0ZW5hcnJheX0pCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEludGVybmVzIE1hcHBpbmcgbWl0IGJla2FubnRlbiBHZWduZXJuIHVuZCBaZWl0ZW4uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgTm9ybWFsZXJ3ZWlzZSBmdWVndCBtYW4gZWluemVsbmUgR2VnbmVyIG1pdHRlbHMgSW5zZXJ0RW5lbXkoKSBlaW4gdW5kCisgICAgIGxvZXNjaHQgYWx0ZSBGZWluZGUgbWl0dGVscyBTdG9wSHVudEZvcigpLgorCisgICAgIFVtIGplZG9jaCBtaXQgZWluZW0gU2NobGFnIHZpZWxlIFZlcmFlbmRlcnVuZ2VuIHZvcnp1bmVobWVuLCBrYW5uIG1hbgorICAgICBkaWUgRnVua3Rpb24gU2V0RW5lbWllcygpIG51dHplbi4KKworICAgICBJaHIgdWViZXJnaWJ0IG1hbiBlaW4gQXJyYXkgbWl0IGVpbmVtIEFycmF5IG1pdCBkZW4gZ2V3dWVuc2NodGVuIEdlZ25lcm4KKyAgICAgYWxzIHVuZCBlaW5lbSB6d2VpdGVuLCBnbGVpY2hncm9zc2VuIEFycmF5IG1pdCBkZW4gWmVpdGVuLCB3aWUgbGFuZ2UKKyAgICAgZGllc2UgR2VnbmVyIGFrdHVlbGwgc2VpbiBzb2xsZW4sIGFscyBFaW50cmFlZ2UuCisKKyAgICAgRGllIEZ1bmt0aW9uIHRyYWVndCBkaWVzZSBXZXJ0ZSBhbHMgR2VnbmVyIG1pdCBlbnRzcHJlY2hlbmRlcgorICAgICBGZWluZGVzemVpdCBlaW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIEluc2VydEVuZW15KCksIFN0b3BIdW50Rm9yKCksIFNlbGVjdEVuZW15KCksIFByZXNlbnRFbmVtaWVzKCkKKworMTAuRmViIDIwMDUgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1NldEdyYW1zUGVyVW5pdHMgYi9kb2MvbGZ1bi9TZXRHcmFtc1BlclVuaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYmY5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZXRHcmFtc1BlclVuaXRzCkBAIC0wLDAgKzEsMzIgQEAKK1NldEdyYW1zUGVyVW5pdHMoKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBTZXRHcmFtc1BlclVuaXRzKGludCBncmFtcywgaW50IHVuaXRzKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3VuaXQuYworCitBUkdVTUVOVEU6CisgICAgIGdyYW1zCisgICAgICAgICAgR2V3aWNodCBpbiBHcmFtbQorICAgICB1bml0cworICAgICAgICAgIFphaGwgZGVyIEVpbmhlaXRlbgorCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdpcmQgZmVzdGdlbGVndCwgd2lldmllbCBlaW5lIGJlc3RpbW10ZSBNZW5nZSBkZXIgRWluaGVpdGVuIHdpZWd0LgorICAgICBFaW5lIGVpbnplbG5lIEVpbmhlaXQgd2llZ3QgZ3JhbXMvdW5pdHMgR3JhbW0uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitCRUlTUElFTEU6CisgICAgIFZpZXIgRWluaGVpdGVuIHNvbGxlbiAzIEdyYW1tIHdpZWdlbjoKKworICAgICBTZXRHcmFtc1BlclVuaXRzKDMsNCk7CisKK1NJRUhFIEFVQ0g6CisgICAgIFNldENvaW5zUGVyVW5pdHMoKSwgUXVlcnlDb2luc1BlclVuaXRzKCksIFF1ZXJ5R3JhbXNQZXJVbml0cygpLAorICAgICAvc3RkL3VuaXQuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDggMTA6MjU6MDkgMTk5NiBieSBXYXJnb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1NldFByb3AgYi9kb2MvbGZ1bi9TZXRQcm9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjAyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZXRQcm9wCkBAIC0wLDAgKzEsNDcgQEAKK1NldFByb3AoKQorRlVOS1RJT046CisgICAgIHB1YmxpYyBtaXhlZCBTZXRQcm9wKHN0cmluZyBuYW1lLCBtaXhlZCBWYWx1ZSk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9wcm9wZXJ0aWVzLmMKKyAgICAgL3N5cy90aGluZy9wcm9wZXJ0aWVzLmggKFByb3RvdHlwKQorCitBUkdVTUVOVEU6CisgICAgIG5hbWUJLSBQcm9wZXJ0eSwgZGVyZW4gV2VydCB2ZXJhZW5kZXJ0IHdlcmRlbiBzb2xsLgorICAgICBWYWx1ZQktIFdlcnQsIGF1ZiBkZW4gZGVyIEluaGFsdCBkZXIgUHJvcGVydHkgZ2VzZXR6dCB3ZXJkZW4gc29sbAorCitCRVNDSFJFSUJVTkc6CisgICAgIERlciBEYXRlbndlcnQgZGVyIFByb3BlcnR5ICduYW1lJyB3aXJkIGF1ZiBkZW4gV2VydCAnVmFsdWUnIGdlc2V0enQuCisKKyAgICAgRXhpc3RpZXJ0IGVpbmUgRl9TRVRfTUVUSE9EIG9kZXIgZWluZSBfc2V0XyduYW1lJygpLU1ldGhvZGUgZnVlcgorICAgICBkaWVzZSBQcm9wZXJ0eSwgc28gd2lyZCBkaWVzZSBhdWZnZXJ1ZmVuIHVuZCBpaHIgJ1ZhbHVlJyB1ZWJlcmdlYmVuLgorICAgICBFaW5lIEZfU0VUX01FVEhPRCBoYXQgZGFiZWkgVm9ycmFuZyB2b3IgX3NldF8nbmFtZScoKSwgZC5oLgorICAgICBfc2V0XyduYW1lJygpIHdpcmQgbmFjaCBlcmZvbGdyZWljaGVyIEZfUVVFUllfTUVUSE9EIG5pY2h0IG1laHIKKyAgICAgZ2VydWZlbi4KKworICAgICAoRGllc2UgTWV0aG9kZW4gbnV0emVuIGRhbm4gU2V0KCksIHVtIGRlbiBEYXRlbndlcnQgZGVyIFByb3BlcnR5CisgICAgICAnbmFtZScgenUgYWVuZGVybi4gVGVpbHdlaXNlIHdlcmRlbiBhYmVyIGF1Y2ggaW50ZXJuZSBWYXJpYWJsZW4gc28KKyAgICAgIG9lZmZlbnRsaWNoIGdlbWFjaHQgdW5kIHNpbmQgbmljaHQgaW4gZGVyIHVlYmVyIFNldC9RdWVyeSB2ZXJmdWVnYmFyZW4KKyAgICAgIFByb3BlcnR5ICduYW1lJyBhYmdlbGVndC4pCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERlciBXZXJ0LCBkZXIgbnVuIGluIGRlciBQcm9wZXJ0eSBnZXNwZWljaGVydCBpc3QuCisgICAgIEluIGRlciBSZWdlbCBpc3QgZGFzICdWYWx1ZScuIFdlbm4gZGllIFByb3BlcnR5IHVlYmVyIGVpbmUgU0VUX01FVEhPRAorICAgICBvZGVyIGVpbmUgX3NldF8nbmFtZScoKS1GdW5rdGlvbiB2ZXJmdWVndCB1bmQgZGllc2UgJ1ZhbHVlJyBhZW5kZXJ0CisgICAgICh6dW0gQmVpc3BpZWwsIGluZGVtIHNpZSAnVmFsdWUnIGFuIGVpbmVuIGJlc3RpbW10ZW4gZXJsYXVidGVuCisgICAgIFdlcnRlYmVyZWljaCBhbnBhc3N0KSwga2FubiBkZXIgUnVlY2tnYWJld2VydCBqZWRvY2ggYXVjaCB2ZXJhZW5kZXJ0CisgICAgIHNlaW4uCisKKyAgICAgV2VubiBkaWUgUHJvcGVydHkgbmljaHQgdmVyYWVuZGVydCB3ZXJkZW4gZGFyZiwgd2lyZCAtMSB6dXJ1ZWNrZ2VnZWJlbi4KKworQkVJU1BJRUxFOgorICAgICAvLyBnZWJlbiB3aXIgZGVtIFp3ZXJnIGVpbmUgS3VyemJlc2NocmVpYnVuZworICAgICBTZXRQcm9wKFBfU0hPUlQsICJFaW4ga2xlaW5lciBad2VyZyIpOworCitTSUVIRSBBVUNIOgorICAgICBBZWhubGljaGVzOglRdWVyeVByb3AoTCksIFNldChMKSwgUXVlcnkoTCkKKyAgICAgR2VuZXJlbGw6CQlTZXRQcm9wZXJ0aWVzKEwpLCBRdWVyeVByb3BlcnRpZXMoTCkKKyAgICAgS29uemVwdDoJCXByb3BlcnRpZXMsIC9zdGQvdGhpbmcvcHJvcGVydGllcy5jCisKKzE1LkRleiAyMDA0IEdsb2luc29uCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1NldFByb3BlcnRpZXMgYi9kb2MvbGZ1bi9TZXRQcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMWZhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZXRQcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjcgQEAKK1NldFByb3BlcnRpZXMoKQorRlVOS1RJT046CisgICAgIHZvaWQgU2V0UHJvcGVydGllcyhtYXBwaW5nIHByb3BzKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RoaW5nL3Byb3BlcnRpZXMuYworCitBUkdVTUVOVEU6CisgICAgIHByb3BzCS0gTWFwcGluZyBtaXQgZGVuIERhdGVuIGZ1ZXIgYWxsZSBQcm9wZXJ0aWVzCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gc2V0enQgYW5nZWdlYmVuZSBQcm9wZXJ0aWVzIGF1ZiBlaW5lbiBTY2hsYWcuCisgICAgIE1hcHBpbmcgbXVzcyB3aWUgZm9sZ3QgYXVmZ2ViYXV0IHNlaW46CisJKFsgbmFtZTogd2VydDsgZmxhZ3M7IHNldF9tZXRob2Q7IHF1ZXJ5X21ldGhvZCwKKwkgICBuYW1lMjogLi4uIF0pOworCitCRU1FUktVTkdFTjoKKyAgICAgLSBkaWVzZSBGdW5rdGlvbiB3aXJkIHZvbiByZXN0b3JlX29iamVjdCgpIHZlcndlbmRldCwgdW0gbmljaHQgYWxsZQorICAgICAgIHJlc3RhdXJpZXJ0ZW4gUHJvcGVydGllcyBlaW56ZWxuIHNldHplbiB6dSBtdWVzc2VuLgorICAgICAtIFNFQ1VSRUQvUFJPVEVDVEVEL05PU0VUTUVUSE9EIFByb3BlcnRpZXMgd2VyZGVuIGJlcnVlY2tzaWNodGlndAorCitTSUVIRSBBVUNIOgorICAgICBBZWhubGljaGVzOglTZXRQcm9wKEwpLCBRdWVyeVByb3AoTCksIFNldChMKSwgUXVlcnkoTCkKKyAgICAgR2VuZXJlbGw6CQlRdWVyeVByb3BlcnRpZXMoTCkKKyAgICAgS29uemVwdDoJCXByb3BlcnRpZXMsIC9zdGQvdGhpbmcvcHJvcGVydGllcy5jCisKKzEuTWFpIDIwMDQgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1NldFJlYWxBdHRyaWJ1dGUgYi9kb2MvbGZ1bi9TZXRSZWFsQXR0cmlidXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZWExNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TZXRSZWFsQXR0cmlidXRlCkBAIC0wLDAgKzEsMzEgQEAKK1NldFJlYWxBdHRyaWJ1dGUoKQorRlVOS1RJT046CisgICAgIGludCBTZXRSZWFsQXR0cmlidXRlKHN0cmluZyBhdHRyLCBpbnQgdmFsKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYworCitBUkdVTUVOVEU6CisgICAgIGF0dHIgICAgICAgLSB6dSBzZXR6ZW5kZXMgQXR0cmlidXQKKyAgICAgdmFsICAgICAgICAtIFdlcnQKKworQkVTQ0hSRUlCVU5HOgorICAgICBTZXR6dCBkZW4gcmVhbGVuIFdlcnQgZGVzIEF0dHJpYnV0ZXMsIGQuaC4gZGFzIHJlaW5lIEF0dHJpYnV0LAorICAgICB3ZW5uIG1vZWdsaWNoLiBMZWRpZ2xpY2ggZWluZSBBbGlhcy1NZXRob2RlIGZ1ZXIgU2V0QXR0cigpLgorICAgICAoUXVlcnlBdHRyaWJ1dGUoKSBnaWJ0IGFsc28gdmFsICsgZXR3YWlnZSBPZmZzZXRzL01vZGlmaWVyIHp1cnVlY2spCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERlbiBnZXNldHp0ZW4gV2VydC4KKworQkVNRVJLVU5HRU46CisgICAgIEJpdHRlIG5pY2h0IGF1ZiBTcGllbGVyIGFud2VuZGVuIQorCitTSUVIRSBBVUNIOg0KKwlRdWVyeUF0dHJpYnV0ZSgpLCBRdWVyeVJlYWxBdHRyaWJ1dGUoKSwgUXVlcnlBdHRyaWJ1dGVPZmZzZXQoKSwNCisJU2V0QXR0cmlidXRlKCksIFNldFJlYWxBdHRyaWJ1dGUoKSwgVXBkYXRlQXR0cmlidXRlcygpLA0KKwlTZXRUaW1lZEF0dHJNb2RpZmllcigpLCBRdWVyeVRpbWVkQXR0ck1vZGlmaWVyKCksIA0KKwlEZWxldGVUaW1lZEF0dHJNb2RpZmllcigpLA0KKwlQX0FUVFJJQlVURVMsIFBfQVRUUklCVVRFU19PRkZTRVRTLCBQX1RJTUVEX0FUVFJfTU9ELA0KKwlQX1hfQVRUUl9NT0QsIFBfTV9BVFRSX01PRCwgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0xhc3QgbW9kaWZpZWQ6IFR1ZSBKdWwgMjcgMjA6MDA6MjAgMjAwNCBieSBNdWFkaWINCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TZXRTcGVsbEZhdGlndWUgYi9kb2MvbGZ1bi9TZXRTcGVsbEZhdGlndWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0NjI3YgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1NldFNwZWxsRmF0aWd1ZQpAQCAtMCwwICsxLDc1IEBACitTZXRTcGVsbEZhdGlndWUKKworRlVOS1RJT046CisgICAgcHVibGljIHZhcmFyZ3MgaW50IFNldFNwZWxsRmF0aWd1ZShpbnQgZHVyYXRpb24sIHN0cmluZyBrZXkpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9za2lsbHMuYworICAgIC9zdGQvcGxheWVyL3NraWxscy5jCisgICAgL3N5cy9saXZpbmcvc2tpbGxzLmgKKworQVJHVU1FTlRFOgorICAgIGludCBkdXJhdGlvbjogV2llIGxhbmcgc29sbCBkaWUgU3BydWNoZXJtdWVkdW5nIGFuZGF1ZXJuPworICAgIHN0cmluZyBrZXkgIDogRWluZGV1dGlnZXIgTmFtZSBkZXMgU3BydWNoZXMsIGVpbmVyIEdydXBwZSB2b24gU3BydWVjaGVuCisgICAgICAgICAgICAgICAgICBvZGVyIDAgZnVlciBkaWUgZ2xvYmFsZSBTcHJ1Y2hlcm11ZWR1bmcuCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiBkaWVudCB6dW0gVmVyd2FsdGVuIHZvbiBpbmRpdmlkdWVsbGVuIFNwcnVjaGVybXVlZHVuZ2VuCisgICAgKFNwZWxsZmF0aWd1ZSwgU3BydWNoc3BlcnJlbikuCisgICAgSGllcm1pdCBsYXNzZW4gc2ljaCB1bmFiaGFlbmdpZ2UgRXJtdWVkdW5nZW4vU3BlcnJlbiBmdWVyIGVpbnplbG5lCisgICAgU3BydWVjaGUgb2RlciBHcnVwcGVuIHZvbiBTcHJ1ZWNoZW4gZ2VzdGFsdGVuLgorCisgICAgPGR1cmF0aW9uPiBpc3QgZGllIFplaXQgKGluIFNla3VuZGVuKSwgd2VsY2hlIGRpZSBTcHJ1Y2hlcm11ZWR1bmcKKyAgICBhbmhhbHRlbiBzb2xsIChuaWNodCBkaWUgRW5kemVpdCkuCisKKyAgICBXaXJkIDxrZXk+IG5pY2h0IGFuZ2VnZWJlbiBvZGVyIGlzdCAwLCB3aXJkIGRpZSBnbG9iYWxlIFNwcnVjaHNwZXJyZQorICAgIGdlc2V0enQgKGlkZW50aXNjaCB6dSBkZXIgUHJvcGVydHkgUF9ORVhUX1NQRUxMX1RJTUUpLCBhbmRlcmVuZmFsbHMgZGllCisgICAgdW50ZXIgPGtleT4gZ2VzcGVpY2hlcnRlIFNwcnVjaGVybXVlZHVuZy4KKyAgICBTZXR6dCBtYW4gZWluZW4gRWludHJhZyBvaG5lIEFuZ2FiZSB2b24gPGtleT4gYmVkZXV0ZXQgZGllcyBkYW1pdCBhdWNoLAorICAgIGRhc3MgZGVyIFdlcnQgdm9uIFBfTkVYVF9TUEVMTF9USU1FIGdlYWVuZGVydCB3aXJkLgorCitSVWVDS0dBQkVXRVJUOgorICAgIC0xICAgIERlciBFaW50cmFnIDxrZXk+IGlzdCBub2NoIG5pY2h0IGFiZ2VsYXVmZW4sIGVzIHd1cmRlIF9rZWluZV8KKyAgICAgICAgICBuZXVlIFNwcnVjaGVybXVlZHVuZy8tU3BlcnJlIGdlc3BlaWNoZXJ0LgorCisgICAgPjAgICAgRWludHJhZyB3dXJkZSBnZXNwZWljaGVydCwgUnVlY2tnYWJld2VydCBpc3QgZGllIFplaXQsIHp1IGRlciBkaWUKKyAgICAgICAgICBTcGVycmUgYWJsYWV1ZnQuCisKK0JFSVNQSUVMRToKKyAgICBFaW4gU3BlbGwgZ2Vob2VydCB6dSBlaW5lciBHcnVwcGUgdm9uIFNwZWxscyBtaXQgZGVtIE5hbWVuICdleHRyYXN1ZXNzJy4KKyAgICBFciBkYXJmIG51ciBhdXNnZWZ1ZWhydCB3ZXJkZW4sIHdlbm4gc2VpdCA1cyBrZWluIGFuZGVyZXIgU3BydWNoIGF1cyBkZXIKKyAgICBHcnVwcGUgYXVzZ2VmdWVocnQgd3VyZGUuCisgICAgaWYgKENhbGN1bGF0ZVNwZWxsU3VjY2VzcyguLi4pID4geCkgeworICAgICAgLy8gU3BlbGxmYXRpZ3VlIHNldHplbiAodW5kIEVyZm9sZyBwcnVlZmVuISkKKyAgICAgIGlmIChvYi0+U2V0U3BlbGxGYXRpZ3VlKDUsICJleHRyYXN1ZXNzIikgPiAtMSkgeworICAgICAgICB0ZWxsX29iamVjdChvYiwgIkR1IGZ1ZXR0ZXJzdCAiICsgZW5lbXktPk5hbWUoV0VOKSArICIgbWl0IGVpbmVtICIKKyAgICAgICAgICAiU3R1ZWNrIHN1ZXNzZXIgU2Nob2tvdG9ydGUuXG4iKTsKKyAgICAgICAgLi4uCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLy8gU2F1ZXJlaSEgWnUgZXJtdWVkZXQgZnVlciBkaWVzZW4gU3BydWNoLiBGZWhsZXJtZGVsZHVuZyAuLi4KKyAgICAgIH0KKyAgICB9CisgICAgRGllc2VzIHNldHp0IG5hdHVlcmxpY2ggdm9yYXVzLCBkYXNzIGFsbGUgYW5kZXJlbiBTcHJ1ZWNoZSBkZXIgR3J1cHBlCisgICAgImV4dHJhc3Vlc3MiIGRlbiBnbGVpY2hlbiA8a2V5PiBwcnVlZmVuIHVuZCBzZXR6ZW4uCisgICAgKFdpbGwgbWFuIHZvciBDYWxjdWxhdGVTcGVsbFN1Y2Nlc3MoKSB3aXNzZW4sIG9iIGRlciBTcHJ1Y2ggdWViZXJoYXVwdAorICAgICBnZXdpcmt0IHdlcmRlbiBkdWVyZnRlLCBzb2xsdGUgbWFuIGhpZXJ6dSBkYW5uIENoZWNrU3BlbGxGYXRpZ3VlKCkKKyAgICAgdmVyd2VuZGVuLikKKworQkVNRVJLVU5HRU46CisgICAgRGllIGdlbmF1ZW4gWmVpdGRhdWVybiBrb2VubmVuIHZvbiBTcGllbGVybiBiZWVpbmZsdXNzdCB3ZXJkZW4sIHNpZQorICAgIHVudGVybGllZ2VuIGRlciBqZXdlaWxpZ2VuIEVpbnN0ZWxsdW5nIHZvbiAnc3BydWNoZXJtdWVkdW5nJywgZC5oLiBrb2VubmVuCisgICAgYXVmIHZvbGxlIDJzIGF1ZmdlcnVuZGV0IHdlcmRlbi4gKERpZXMgaXN0IG5pY2h0IGRlciBGYWxsIGJlaSBOUEMuKQorICAgIEF1Y2ggd2VubiBkaWVzZSBGdW5rdGlvbiB6dW0gVmVyd2FsdGVuIHZvbiBiZWxpZWJpZ2VuIFplaXRzcGVycmVuIGdlbnV0enQKKyAgICB3ZXJkZW4ga29lbm5lbiwgYmVzY2hyYWVua3QgZXVjaCBiaXR0ZSBhdWYgU3BydWNoZXJtdWVkdW5nZW4gdW5kIGJlbnV0enQKKyAgICBhbnNvbnN0ZW4gY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkoKS4gRmFsbHMgaWhyIGRpZXNiemdsLiB3ZWl0ZXJlL2FuZGVyZQorICAgIFd1ZW5zY2hlIGhhYnQsIHNwcmVjaHQgZGVuL2RpZSBNdWRsaWItRU0gYW4uCisKK1NJRUhFIEFVQ0g6CisgICAgQ2hlY2tTcGVsbEZhdGlndWUoTCksIERlbGV0ZVNwZWxsRmF0aWd1ZShMKQorICAgIFBfTkVYVF9TUEVMTF9USU1FCisgICAgc3BydWNoZXJtdWVkdW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI3LjAzLjIwMTAsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vU2V0U3RvcmFnZVJvb20gYi9kb2MvbGZ1bi9TZXRTdG9yYWdlUm9vbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjU1YTFlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2V0U3RvcmFnZVJvb20KQEAgLTAsMCArMSw3NCBAQAorU2V0U3RvcmFnZVJvb20oKQorCitGVU5LVElPTjoKKyAgICAgICAgdm9pZCBTZXRTdG9yYWdlUm9vbShzdHJpbmcgc3RvcmUpOworCitERUZJTklFUlQgSU46CisgICAgICAgIC9zdGQvcm9vbS9zaG9wLmMKKworQVJHVU1FTlRFOgorICAgICAgICBzdG9yZQorICAgICAgICAgIERhdGVpbmFtZSBkZXMgTGFnZXJzLCBpbiBkZW0gZGllIGF1Zmdla2F1ZnRlbiBPYmpla3RlIGF1ZmJld2FocnQKKyAgICAgICAgICB3ZXJkZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgICAgIGtlaW5lcgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24gd2lyZCBkZW0gTGFkZW4gYmVrYW5udCBnZWdlYmVuLCB3ZWxjaGVzIE9iamVrdAorICAgICAgICBhbHMgTGFnZXIgZnVlciBhbmdla2F1ZnRlIE9iamVrdGUgZGllbmVuIHNvbGwuIEplZGVyIExhZGVuIG11c3MKKyAgICAgICAgZXhwbGl6aXQgZWluZW4gZWlnZW5lbiBMYWdlcnJhdW0gc2V0emVuLCBhbnNvbnN0ZW4gd2lyZCBlaW4gCisgICAgICAgIExhdWZ6ZWl0ZmVobGVyIGF1c2dlbG9lc3QgdW5kIGRlciBMYWRlbiBpc3QgbmljaHQgbGFkYmFyLgorICAgICAgICAKKyAgICAgICAgRGFzIFNwZWljaGVyb2JqZWt0IHNvbGx0ZSAvc3RkL3N0b3JlLmMgZXJiZW4sIGRhIGRvcnQgZWluaWdlCisgICAgICAgIEF1ZnJhZXVtZnVua3Rpb25lbiBkZWZpbmllcnQgc2luZC4gRW50c2NoZWlkZW5kIGZ1ZXIgc2VsYmlnZSBzaW5kCisgICAgICAgIGRpZSBQcm9wZXJ0aWVzIFBfTUlOX1NUT0NLIHVuZCBQX1NUT1JFX0NPTlNVTUUuCisKK0JFSVNQSUVMRToKKyAgICAgICAgRGVyIFJhdW0gJ215bGFkZW4uYycga29lbm50ZSBldHdhIHNvIGF1c3NlaGVuOgorICAgICAgICAgIAorICAgICAgICAgIC8vIG15bGFkZW4uYworICAgICAgICAgIGluaGVyaXQgIi9zdGQvc2hvcCI7CisgICAgICAgICAgI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyAgICAgICAgICAKKyAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGUoKSB7CisgICAgICAgICAgICA6OmNyZWF0ZSgpOworICAgICAgICAgICAgU2V0UHJvcCguLi4pOyAvLyBCZXNjaHJlaWJ1bmcgd2llIGJlaSBub3JtYWxlbiBSYWV1bWVuCisgICAgICAgICAgICBTZXRTdG9yYWdlUm9vbSgiL2QvYmVpc3BpZWwvbXlzdG9yZSIpOworICAgICAgICAgICAgQWRkRml4ZWRPYmplY3QoIi9pdGVtcy9mYWNrZWwiKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgSW4gZGllc2VtIExhZGVuIHdpcmQgbnVuIGRpZSBTdGFuZGFyZGZhY2tlbCBhbHMgbWVuZ2VubWFlc3NpZyAKKyAgICAgICAgdW5iZWdyZW56dGVyIEFydGlrZWwgdmVya2F1ZnQuCisKKyAgICAgICAgRGVyIHp1Z2Vob2VyaWdlIExhZ2VycmF1bSAnbXlzdG9yZS5jJyBrYW5uIGRhbm4gaW0gZWluZmFjaHN0ZW4gRmFsbAorICAgICAgICBzbyBhdXNzZWhlbjoKKyAgICAgICAgICAKKyAgICAgICAgICAvLyBteXN0b3JlLmMKKyAgICAgICAgICBpbmhlcml0ICIvc3RkL3N0b3JlIjsKKyAgICAgICAgICAjaW5jbHVkZSA8cm9vbXMuaD4gIC8vIEZ1ZXIgQWRkSXRlbS1Lb25zdGFudGVuCisgICAgICAgICAgCisgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkgeworICAgICAgICAgICAgOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIC8vIEtFSU5FIHdlaXRlcmVuIEJlc2NocmVpYnVuZ2VuIQorICAgICAgICAgICAgLy8gMS4gZXJidCBkZXIgU3BlaWNoZXIga2VpbmUgQmVzY2hyZWlidW5nc21vZHVsZSwKKyAgICAgICAgICAgIC8vIDIuIHNvbGxlbiBkYSBlaCBudXIgU2FjaGVuIHVuZCBrZWluZSBTcGllbGVyIHJlaW4hCisgICAgICAgICAgICBBZGRJdGVtKCIvaXRlbXMvc2NoYXVmZWwiLCBSRUZSRVNIX1JFTU9WRSk7CisgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgRGVyIExhZGVuIHZlcmthdWZ0IG51biBhdWNoIFNjaGF1ZmVsbiwgamVkb2NoIG51ciBlaW5lIHBybyBSZXNldC4KKworSElOV0VJU0U6ICAgICAgICAKKyAgICAgICAgRnVlciBzdGFuZGFyZG1hZXNzaWcgdmVya2F1ZnRlIFdhcmVuIGJlYWNodGUgbWFuIGRlbiBVbnRlcnNjaGllZCAKKyAgICAgICAgendpc2NoZW4gZGVuIEZ1bmt0aW9uZW4gQWRkSXRlbSgpIHVuZCBBZGRGaXhlZE9iamVjdCgpLgorICAgICAgICBEaWUgZXJzdGdlbmFubnRlIEZ1bmt0aW9uIGlzdCBpbSBMYWdlciB6dSB2ZXJ3ZW5kZW4sIGxldHp0ZXJlIGplZG9jaAorICAgICAgICBpbSBMYWRlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgICAgQWxsZ2VtZWluZXM6ICBsYWRlbgorICAgICAgICBGdW5rdGlvbmVuOiAgIEFkZEl0ZW0oTCksIEFkZEZpeGVkT2JqZWN0KEwpLCBSZW1vdmVGaXhlZE9iamVjdChMKSAKKyAgICAgICAgQmFzaXNvYmpla3RlOiAvc3RkL3N0b3JlLmMKKyAgICAgICAgUHJvcGVydGllczogICBQX01JTl9TVE9DSywgUF9TVE9SRV9DT05TVU1FCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE5LUp1bi0yMDE1LCBBcmF0aG9ybgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vU2V0VGltZWRBdHRyTW9kaWZpZXIgYi9kb2MvbGZ1bi9TZXRUaW1lZEF0dHJNb2RpZmllcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODA0ODIzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2V0VGltZWRBdHRyTW9kaWZpZXIKQEAgLTAsMCArMSw5MiBAQAorU2V0VGltZWRBdHRyTW9kaWZpZXIoKQorRlVOS1RJT046CisgICAgIGludCBTZXRUaW1lZEF0dHJNb2RpZmllcihzdHJpbmcga2V5LCBtYXBwaW5nIG1vZGlmaWVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXRkYXRlZCwgb2JqZWN0IGRlcGVuZGVudCwgbWl4ZWQgbm90aWZ5KSAKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jCisKK0FSR1VNRU5URToKKyAgICAga2V5CS0JaW4gUF9USU1FRF9BVFRSX01PRCB2b3J6dW5laG1lbmRlciBvZGVyIHp1IAorICAgICAgICAgICAgICAgICAgICAgICAgYWVuZGVybmRlciBFaW50cmFnDQorICAgICBtb2RpZmllciAgIC0gICAgICAgTWFwcGluZyBtaXQgZGVuIEF0dHJpYnV0dmVyYWVuZGVydW5nZW4NCisgICAgIG91dGRhdGVkICAgLSAgICAgICBaZWl0cHVua3QgenUgZGVtIGRpZSBBdHRyaWJ1dHZlcmFlbmRlcnVuZ2VuDQorICAgICAgICAgICAgICAgICAgICAgICAgYWJsYXVmZW4gc29sbGVuIGluIFNla3VuZGVuIHNlaXQgZGVtDQorICAgICAgICAgICAgICAgICAgICAgICAgMS4gSmFuIDE5NzAsIDAuMDowIEdNVCBvZGVyIDANCisgICAgIGRlcGVuZGVudCAgLSAgICAgICBPYmpla3QgZGVzc2VuIEV4aXN0ZW56IGVpbmUgQmVkaW5ndW5nIGZ1ZXIgZGllDQorICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXR2ZXJhZW5kZXJ1bmcgc2VpbiBzb2xsIG9kZXIgMA0KKyAgICAgbm90aWZ5ICAgICAtICAgICAgIE9iamVrdCBvZGVyIEZpbGUgZGFzIG1pdHRlbHMgCisgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZnlUaW1lZEF0dHJNb2RFeHBpcmVkIHVlYmVyDQorICAgICAgICAgICAgICAgICAgICAgICAgZGVuIEF0dHJpYnV0YWJsYXVmIGluZm9ybWllcnQgd2VyZGVuIHNvbGwNCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGVyIHp1IGtleSBnZWhvZXJlbmRlIEVpbnRyYWcgd2lyZCBpbiBQX1RJTUVEX0FUVFJfTU9EIGFuZ2VsZWd0IG9kZXINCisgICAgIG1vZGlmaXppZXJ0IHVuZCB1cGRhdGVfbWF4X3NwX2FuZF9ocCBhdWZnZXJ1ZmVuLg0KKyAgICAgRXMgZW1wZmllaGx0IHNpY2ggYXVmIGRpZSBFaW5kZXV0aWdrZWl0IGRlcyBzdHJpbmctUGFyYW1ldGVycyBrZXkKKyAgICAgYmVzb25kZXJlcyBBdWdlbm1lcmsgenUgbGVnZW4uCisNCisgICAgIFVudGVyIGRlbSBLZXkga2V5IHdpcmQgaW4gUF9USU1FRF9BVFRSX01PRCBlaW4gRWludHJhZyB2b3JnZW5vbW1lbiwNCisgICAgIHdlbGNoZXIgZGllIEF0dHJpYnV0ZSBkZXMgTGl2aW5ncyB1bSBkaWUgaW4gbW9kaWZpZXIgc3RlaGVuZGVuIE9mZnNldHMNCisgICAgIHZlcmFlbmRlcnQuDQorDQorICAgICBEaWVzZSBWZXJhZW5kZXJ1bmcgaXN0IHNvbGFuZ2UgYWt0aXYgYmlzIGVudHdlZGVyIGRpZSBpbiBvdXRkYXRlZA0KKyAgICAgc3RlaGVuZGUgWmVpdCB1ZWJlcnNjaHJpdHRlbiBpc3Qgb2RlciBkYXMgaW4gZGVwZW5kZW50IHVlYmVyZ2ViZW5lDQorICAgICBPYmpla3QgbmljaHQgbWVociBleGlzdGllcnQuDQorICAgICBTaW5kIGJlaWRlIEFyZ3VtZW50ZSAwIHNvIGxhZXVmdCBkaWUgQXR0cmlidXR2ZXJhZW5kZXJ1bmcgbmljaHQgYWINCisgICAgIHVuZCBrYW5uIGR1cmNoIERlbGV0ZVRpbWVkQXR0ck1vZGlmaWVyIGdlbG9lc2NodCB3ZXJkZW4uDQorICAgICBMYWV1ZnQgZGllIEF0dHJpYnV0dmVyYWVuZGVydW5nIGFiLCBzbyB3aXJkIGRlciBpbiBub3RpZnkgYW5nZWdlYmVuZQ0KKyAgICAgRW1wZmFlbmdlciBtaXR0ZWxzIEF1ZnJ1ZiBOb3RpZnlUaW1lZEF0dHJNb2RFeHBpcmVkIGRhdm9uIAorICAgICBiZW5hY2hyaWNodGlndC4NCisgICAgIERlciBGdW5rdGlvbiBOb3RpZnlUaW1lZEF0dHJNb2RFeHBpcmVkIHdpcmQgYWxzIEFyZ3VtZW50IGRlciBrZXkNCisgICAgIGRlciBhYmdlbGF1ZmVuZW4gQXR0cmlidXR2ZXJhZW5kZXJ1bmcgdWViZXJnZWJlbi4NCisNCitCRUlTUElFTEU6DQorICAgICBFaW4gTlBDIGthbm4gZWluZW4gU3BpZWxlciBhdWYgZGllIGZvbGdlbmRlIFdlaXNlIHNvbGFuZ2UgZGllDQorICAgICBBdHRyaWJ1dGUgdW0gZWlucyBoZXJhYnNldHplbiBiaXMgZW50d2VkZXIgZWluZSBTdHVuZGUgdmVyc3RyaWNoZW4NCisgICAgIGlzdCBvZGVyIGRlciBOUEMgbmljaHQgbWVociBleGlzdGllcnQgenVtIEJlaXNwaWVsIHdlaWwgZXIgZ2V0b2V0ZXQNCisgICAgIHd1cmRlLg0KKw0KKyAgICAgICBwbGF5ZXItPlNldFRpbWVkQXR0ck1vZGlmaWVyKCBwbGF5ZXItPnF1ZXJ5X3JlYWxfbmFtZSgpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW0FfU1RSOi0xLEFfSU5UOi0xLEFfREVYOi0xLEFfQ09OOi0xXSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUoKSszNjAwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzX29iamVjdCgpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzX29iamVjdCgpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KKw0KKyAgICAgV2lsbCBkZXIgTlBDIG51biBub2NoIGRhcmF1ZiByZWFnaWVyZW4sIGRhc3MgZGllIEF0dHJpYnV0bW9kaWZpa2F0aW9uDQorICAgICBkdXJjaCBUaW1lb3V0IGFiZ2VsYXVmZW4gaXN0LCBzbyBrb2VubnRlIGRpZXMgZm9sZ2VuZGVybWFzc2VuIGdlc2NoZWhlbi4NCisNCisgICAgICAgdm9pZCBOb3RpZnlUaW1lZEF0dHJNb2RFeHBpcmVkKHN0cmluZyBzdHIpDQorICAgICAgIHsNCisgICAgICAgICAgIC8vIERpZSBGdW5rdGlvbiB3aXJkIGF1cyBkZW0gTGViZXdlc2VuIGdlcnVmZW4sIGluIHdlbGNoZW0gZGVyIE1vZAorICAgICAgICAgICAvLyBnZXJhZGUgYWJnZWxhdWZlbiBpc3QuIEFsc28gTWVsZHVuZ3NhdXNnYWJlIGFuCisgICAgICAgICAgIC8vIHByZXZpb3VzX29iamVjdCgpLgorICAgICAgICAgICB0ZWxsX29iamVjdChwcmV2aW91c19vYmplY3QoKQorICAgICAgICAgICAgICAgLCJEYSBoYXN0IER1IGFiZXIgbm9jaG1hbCBHbHVlY2sgZ2VoYWJ0LlxuIik7DQorICAgICAgIH0NCisNCisNCitSVWVDS0dBQkVXRVJUOg0KKyAgICAgVEFUVFJfSU5WQUxJRF9BUkdTICAgICAgLSAgICAgSW0gRmFsbGUgZWluZXMgZmVobGVuZGVuIGtleS1Bcmd1bWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaW5lcyBmZWhsZW5kZW4gbW9kaWZpZXItQXJndW1lbnRzIG9kZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpbmVzIGJlcmVpdHMgYWJnZWxhdWZlbmVuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRldC1Bcmd1bWVudHMNCisgICAgIFRBVFRSX09LICAgICAgICAgICAgICAgIC0gICAgIEltIEVyZm9sZ3NmYWxsDQorDQorICAgICBEaWUgUnVlY2tnYWJld2VydGUgc2luZCBpbiAvc3lzL2xpdmluZy9hdHRyaWJ1dGVzLmggZGVmaW5pZXJ0Lg0KKworU0lFSEUgQVVDSDoNCisgICAgIEF0dHJpYnV0ZTogIFF1ZXJ5QXR0cmlidXRlKCksIFNldEF0dHJpYnV0ZSgpDQorICAgICAgICAgICAgICAgICBTZXRSZWFsQXR0cmlidXRlKCksIFF1ZXJ5UmVhbEF0dHJpYnV0ZSgpLA0KKyAgICAgICAgICAgICAgICAgUXVlcnlBdHRyaWJ1dGVPZmZzZXQoKSwNCisgICAgICAgICAgICAgICAgIFVwZGF0ZUF0dHJpYnV0ZXMoKQ0KKyAgICAgTWV0aG9kZW46ICAgUXVlcnlUaW1lZEF0dHJNb2RpZmllcigpLCBEZWxldGVUaW1lZEF0dHJNb2RpZmllcigpDQorICAgICBDYWxsYmFjazogICBOb3RpZnlUaW1lZEF0dHJNb2RFeHBpcmVkKCkNCisgICAgIFByb3BlcnRpZXM6IFBfQVRUUklCVVRFUywgUF9BVFRSSUJVVEVTX09GRlNFVFMNCisJCSBQX1hfQVRUUl9NT0QsIFBfTV9BVFRSX01PRA0KKwkJIFBfVElNRURfQVRUUl9NT0QNCisgICAgIFNvbnN0aWdlczogIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYw0KKworTEVUWlRFIEFlbmRlcnVuZzoKKzE1LjAyLjIwMDksIFplc3N0cmEKKworCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TaG93RG9vcnMgYi9kb2MvbGZ1bi9TaG93RG9vcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkMzZiMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1Nob3dEb29ycwpAQCAtMCwwICsxLDIzIEBACitTaG93RG9vcnMoKQorCitGVU5LVElPTjoKKwl2b2lkIFNob3dEb29ycygpCisKK0FSR1VNRU5URToKKwlLZWluZS4KKworQkVTQ0hSRUlCVU5HOgorCVplaWd0IGFsbGUgU2VoZXJ0b3IgYW4sIGRpZSBkZXIgU2VoZXIgKHRoaXNfcGxheWVyKCkpIHNjaG9uIGtlbm50LgorCUZhbGxzIGluIHNlaW5lciBVbWdlYnVuZyBlaW4gVG9yIHN0ZWh0LCBzbyB3aXJkIGRpZXNlcyBlaW5nZWtsYW1tZXJ0LgorCitSVUVDS0dBQkVXRVJUOgorCUtlaW5lci4KKworQkVNRVJLVU5HRU46CisgICAgRGllc2UgRnVua3Rpb24gd2lyZCB2b24gL2Qvc2VoZXIvcG9ydGFsZS9zZWhlcnRvcm1hc3RlciBkZWZpbmllcnQuCisKK0JFSVNQSUVMRToKKyAgICAvZC9zZWhlci9wb3J0YWxlL3NlaGVydG9ybWFzdGVyLT5TaG93RG9vcnMoKQorCitTSUVIRSBBVUNIOgorICAgIERpc2NvdmVyRG9vciwgRG9vcklzS25vd24sIFRlbGVwb3J0LCBHZXREb29yc01hcHBpbmcKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1Nob3dQcm9wTGlzdCBiL2RvYy9sZnVuL1Nob3dQcm9wTGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGJjNGNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2hvd1Byb3BMaXN0CkBAIC0wLDAgKzEsNDkgQEAKK1Nob3dQcm9wTGlzdCgpCisKK0ZVTktUSU9OOgorICAgICB2b2lkIFNob3dQcm9wTGlzdChzdHJpbmcgKnByb3BzKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RoaW5nL3V0aWwuYworCitBUkdVTUVOVEU6CisgICAgIHByb3BzCisgICAgICAgICAgQXJyYXkgdm9uIFN0cmluZ3MgbWl0IGRlbiBOYW1lbiBkZXIgUHJvcGVydGllcywgZGllIGF1c2dlZ2ViZW4KKyAgICAgICAgICB3ZXJkZW4gc29sbGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgIEdpYnQgZGllIEluaGFsdGUgZGVyIGluIHByb3BzIGFuZ2VnZWJlbmVuIFByb3BlcnRpZXMgYXVzLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVJU1BJRUxFOgorICAgICBTZWkgdGVzdC5jIGZvbGdlbmRlcyBQcm9ncmFtbToKKworICAgICBpbmhlcml0ICJzdGQvdGhpbmciOworICAgICBpbmhlcml0ICJzdGQvdGhpbmcvdXRpbCI7CisKKyAgICAgY3JlYXRlKCkgeworICAgICAgIDo6Y3JlYXRlKCk7CisKKyAgICAgICBTZXRQcm9wKFBfU0hPUlQsICJLdXJ6Iik7CisgICAgICAgU2V0UHJvcChQX05BTUUsICh7ICJOYW1lIiwgIk5hbWVucyIsICJOYW1lbiIsICJOYW1lbiIgfSkpOworICAgICAgIFNldFByb3AoIm1lIiwgdGhpc19vYmplY3QoKSApOworICAgICB9CisKKyAgICAgTWl0IHhjYWxsIHRlc3QtPlNob3dQcm9wTGlzdCggKHsgUF9TSE9SVCwgUF9OQU1FLCAibWUiIH0pICk7IGVyaGllbHRlCisgICAgIG1hbiBkYW5uIGZvbGdlbmRlIEF1c2dhYmU6CisKKyAgICAgKnNob3J0OiAiS3VyeiIKKyAgICAgKm5hbWU6ICh7ICJOYW1lIiwgIk5hbWVucyIsICJOYW1lbiIsICJOYW1lbiIgfSkKKyAgICAgKm1lOiBPQkooL3BsYXllcnMvd2FyZ29uL3Rlc3QjMTIzNDUpCisKK0JFTUVSS1VOR0VOOgorICAgICBNaXQgZGVtIEJlZmVobCB4cHJvcHMgZGVzIE1HdG9vbHMgbGFzc2VuIHNpY2ggdWVicmlnZW5zIHNhZW10bGljaGUKKyAgICAgUHJvcGVydGllcyBlaW5lcyBPYmpla3RlIGF1ZiBlaW5lbiBTY2hsYWcgYXVzZ2ViZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIC9zdGQvdGluZy91dGlsLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjI1OjI2IDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Ta2lsbFJlc1RyYW5zZmVyIGIvZG9jL2xmdW4vU2tpbGxSZXNUcmFuc2ZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTgzZWVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU2tpbGxSZXNUcmFuc2ZlcgpAQCAtMCwwICsxLDI4IEBACitTa2lsbFJlc1RyYW5zZmVyKCkKKworRlVOS1RJT046CisgICAgIHByb3RlY3RlZCB2b2lkIFNraWxsUmVzVHJhbnNmZXIobWFwcGluZyBmcm9tX00sIG1hcHBpbmcgdG9fTSkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9za2lsbF91dGlscworCitBUkdVTUVOVEU6CisgICAgIG1hcHBpbmcgZnJvbV9NOiBNYXBwaW5nIG1pdCB6dSBrb3BpZXJlbmRlbiBXZXJ0ZW4KKyAgICAgbWFwcGluZyB0b19NOiAgIFppZWxtYXBwaW5nCisKK0JFU0NIUkVJQlVORzoKKyAgICAgSW50ZXJuZSBNZXRob2RlLCBkaWUgekIgKCEpIHdhZWhyZW5kIGRlciBBdXNmdWVocnVuZyB2b24gQXR0YWNrKCkgZHVyY2gKKyAgICAgU2tpbGxzIG9kZXIgUF9UTVBfQVRUQUNLX01PRCBnZWFlbmRlcnRlIFdlcnRlIHNlbGVrdGllcnQgaW4gZGFzCisgICAgIEhhdXB0YW5ncmlmZnNtYXBwaW5nIHVlYmVydHJhZWd0LgorCisgICAgIERlcnplaXQgd2VyZGVuIGZvbGdlbmRlIFdlcnRlIGtvcGllcnQ6CisgICAgIFNJX1NLSUxMREFNQUdFLCBTSV9TS0lMTERBTUFHRV9NU0csIFNJX1NLSUxMREFNQUdFX01TRzIsCisgICAgIFNJX1NLSUxMREFNQUdFX1RZUEUsIFNJX1NQRUxMCisKK0JFTUVSS1VOR0VOOgorICAgICAqIHdpcmQgYW4gbWVocmVyZW4gU3RlbGxlbiwgbmljaHQgbnVyIGRlciBsaXZpbmcvY29tYmF0IHZlcndlbmRldAorCitTSUVIRSBBVUNIOgorICAgICBQX1RNUF9BVFRBQ0tfTU9ELCBVc2VTa2lsbCAoV2FmZmVuZmFlaGlna2VpdGVuKQorCisxOC5KdWwgMjAxNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vU3BlbGxBdHRhY2sgYi9kb2MvbGZ1bi9TcGVsbEF0dGFjawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTI0ZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU3BlbGxBdHRhY2sKQEAgLTAsMCArMSw3MSBAQAorU3BlbGxBdHRhY2soKQorCitGVU5LVElPTjoKKyAgICAgICAgdm9pZCBTcGVsbEF0dGFjayhvYmplY3QgZW5lbXkpCisKK0FSR1VNRU5URToKKyAgICAgICAgZW5lbXk6IERlciBGZWluZC4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIGluIGplZGVtIEhlYXJ0YmVhdCBlaW5lcyBOUENzIGF1c2dlZnVlaHJ0LAorICAgICAgICBmYWxscyBuaWNodCBQX0RJU0FCTEVfQVRUQUNLIGdlc2V0enQgaXN0IChQYXJhbHlzZSkuCisgICAgICAgIFN0YW5kYXJkbWFlc3NpZyB0dXQgZGllc2UgRnVua3Rpb24gbmljaHRzLCBhYmVyIG1hbiBrYW5uIHNpZQorICAgICAgICB1ZWJlcnNjaHJlaWJlbiwgZGFtaXQgaW4gamVkZW0gSGVhcnRiZWF0IEFuZ3JpZmZlIG1pdCBTcGVsbHMKKyAgICAgICAgYXVzZ2VmdWVocnQgd2VyZGVuLgorCisgICAgICAgIE1hbiBzb2xsdGUgaGllcmJlaSBlaW4gcmFuZG9tKCkgZWluYmF1ZW4sIGRhbWl0IGRlciBOUEMgbmljaHQKKyAgICAgICAgaW4gamVkZW0gSGVhcnRiZWF0IGF1Y2ggd2lya2xpY2ggZWluZW4gQW5ncmlmZiBhdXNmdWVocnQuCisgICAgICAgIEF1c3NlcmRlbSBzb2xsdGUgbWFuIGF1Y2ggZnVlciBldmVudHVlbGxlIEF1c2dhYmVuIHNvcmdlbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgICAgS2VpbmVyLgorCitCRU1FUktVTkc6CisgICAgICAgIERpZSBBdHRhY2tDaGF0cywgZGllIG1pdHRlbHMgU2V0QXR0YWNrQ2hhdHMgZ2VzZXR6dCB3ZXJkZW4KKyAgICAgICAga29lbm5lbiwgbWFjaHQgaW0gR3J1bmRlIG5pY2h0cyBhbmRlcmVzLCBhYmVyIENoYXRzIHNpbmQgaGFsdAorICAgICAgICBrZWluZSBBbmdyaWZmZS4gOi0pCisKK0JFSVNQSUVMRToKKyAgICAgICAgSW0gR3J1bmRlIGlzdCBkaWVzZXMgc2ltcGxlIEJlaXNwaWVsIGVpbmUgTmFjaGJpbGR1bmcgdm9uCisgICAgICAgIEF0dGFjay1DaGF0cyB1bmQgc29sbCBkZW1lbnRzcHJlY2hlbmQgbnVyIGRlciBBbnNjaGF1dW5nIGRpZW5lbi4KKworICAgICAgICB2b2lkIFNwZWxsQXR0YWNrKG9iamVjdCBlbmVteSkgCisgICAgICAgIHsKKyAgICAgICAgICAvLyBtaXQgODAlIFdhaHJzY2hlaW5saWNoa2VpdCB3aXJkIG5pY2h0cyBnZW1hY2h0LgorICAgICAgICAgIHN3aXRjaChyYW5kb20oNSkpCisgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAwOiAKKyAgICAgICAgICAgICAgd3JpdGUoIkRlciBPcmsgdHJpdHQgRGlyIGluIGRlbiBIaW50ZXJuLlxuIik7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgMTogCisgICAgICAgICAgICAgIHdyaXRlKCJEZXIgT3JrIGJydWVsbHQ6IExlYmVuZCBrb21tc3QgRHUgaGllciBuaWNodCByYXVzIVxuIik7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgd3JpdGUoIkRlciBPcmsgYmx1dGV0IHNjaG9uIGF1cyBtZWhyZXJlbiBXdW5kZW4uXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICB3cml0ZShrbmlyc2NoKGVuZW15KSk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzdHJpbmcga25pcnNjaChvYmplY3QgZW5lbXkpCisgICAgICAgIHsKKyAgICAgICAgICAgaWYgKG9iamVjdHAoZW5lbXkpKQorICAgICAgICAgICAgIGhlbG0gPSBlbmVteS0+UXVlcnlBcm1vdXJCeVR5cGUoQVRfSEVMTUVUKTsKKyAgICAgICAgICAgaWYgKG9iamVjdHAoaGVsbSkpCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICBoZWxtLT5EYW1hZ2UoMSk7CisgICAgICAgICAgICAgcmV0dXJuICJEZXIgT3JrIGJlc2NoYWVkaWd0IERlaW5lbiBIZWxtIVxuIjsKKyAgICAgICAgICAgfQorICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgcmV0dXJuICIiOyAvLyBrZWluZSBNZWxkdW5nCisgICAgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgICAgIkF0dGFjayIsICJTZXRBdHRhY2tDaGF0cyIsIC9zdGQvbnBjL2NvbWJhdC5jCisKK0xFVFpURSBBRU5ERVJVTkc6CisgRG9uLCAyNy4wMi4yMDAzLCAxMjo1MDowMCB2b24gSGlydWRvCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TcGVsbERlZmVuZCBiL2RvYy9sZnVuL1NwZWxsRGVmZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTM3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TcGVsbERlZmVuZApAQCAtMCwwICsxLDQzIEBACitTcGVsbERlZmVuZCgpCitGVU5LVElPTjoKKyAgICAgcHVibGljIGludCBTcGVsbERlZmVuZChvYmplY3QgY2FzdGVyLG1hcHBpbmcgc2luZm8pOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgb2JqZWN0IGNhc3RlcgktIEdlZ25lcgorICAgICBtYXBwaW5nIHNpbmZvCS0gWnVzYXR6aW5mb3JtYXRpb25lbiB6dW0gU3BlbGwKKworQkVTQ0hSRUlCVU5HOgorICAgICBVZWJlciBkZW4gU2tpbGwgU0tfU1BFTExfREVGRU5EIG1pdCBkZW4gQXVmcnVmcGFyYW1ldGVybgorICAgICAgIFNJX0VORU1ZICAgIDogPGNhc3Rlcj4KKyAgICAgdW5kCisgICAgICAgU0lfU0tJTExBUkcgOiA8c2luZm8+CisgICAgIHdpcmQgZWluZSBBYndlaHJjaGFuY2UgaW4gMC4wMSUtU2Nocml0dGVuIGZ1ZXIgZWluZW4KKyAgICAgU3BlbGwgZXJtaXR0ZWx0LCBhbHNvIDAlIC0gMTAwJSBiencuIGFscyBSdWVja2dhYmV3ZXJ0CisgICAgIDAgLSAxMDAwMC4KKyAgICAgCisgICAgIFdlaXRlcmhpbiB3aXJkIGF1dG9tYXRpc2NoIFBfTUFHSUNfUkVTSVNUQU5DRV9PRkZTRVQgdW5kIGRlciBTa2lsbAorICAgICBTS19TUEVMTF9ERUZFTkQgYmVydWVja3NpY2h0aWd0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEaWUgQWJ3ZWhyY2hhbmNlIGluIDAuMDElLVNjaHJpdHRlbi4KKyAgICAgCisgICAgIEZ1ZXIgU3BpZWxlciB3aXJkIGRpZXNlciBSdWVja2dhYmV3ZXJ0IGF1ZiAzMzMzIG1heGltYWwsIGFsc28gMzMsMzMlCisgICAgIEFid2Vocm1vZWdsaWNoa2VpdCBiZXNjaHJhZW5rdC4KKworQkVNRVJLVU5HRU46CisgICAgIERpZSBTcGVsbGJvb2tzIG11ZXNzZW4gc2VsYnN0IGF1ZiBkaWUgQXVzd2VydHVuZyBkaWVzZXIgRnVua3Rpb24KKyAgICAgYWNodGVuISBEaWVzIGdlc2NoaWVodCBudXIgaW0gRmFsbGUgdm9uIFRyeUdsb2JhbEF0dGFja1NwZWxsKCkKKyAgICAgdW5kIGJlaSBTcGVsbHMgZnVlciBOUENzIG1pdHRlbHMgUF9TUEVMTFMgYXV0b21hdGlzY2ghCisKKyAgICAgQml0dGUgYmVpIE5QQ3MgbmljaHQgcGF1c2NoYWwgMTAwJSAvIDEwMDAwIHp1cnVlY2tnZWJlbi4gRGFua2UuCisKK1NJRUhFIEFVQ0g6CisgICAgIFZlcndhbmR0OiAgICAgUF9NQUdJQ19SRVNJU1RBTkNFX09GRlNFVAorICAgICBBZWhubGljaDogICAgIFBfTk9NQUdJQworICAgICBHZW5lcmVsbDogICAgIFRyeUdsb2JhbEF0dGFja1NwZWxsLCAvc3RkL3NwZWxsYm9vay5jCisgICAgIFNvbnN0aWdlczogICAgVXNlU2tpbGwsIFNLX1NQRUxMX0RFRkVORAorCisyOS5EZXogMjAwNyBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vU3BlbGxJbmZvcm0gYi9kb2MvbGZ1bi9TcGVsbEluZm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjliMjAxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU3BlbGxJbmZvcm0KQEAgLTAsMCArMSwzMSBAQAorU3BlbGxJbmZvcm0KKworRlVOS1RJT046CisgICAgICAgIHZvaWQgU3BlbGxJbmZvcm0oY2FzdGVyLHNwZWxsLHNpbmZvKTsKKworREVGSU5JRVJUIElOOgorICAgICAgICBzZWxiZXIgenUgZGVmaW5pZXJlbgorCitBUkdVTUVOVEU6CisgICAgICAgIHBsCisgICAgICAgICAgRGFzIExlYmV3ZXNlbiwgZGFzIGVyZm9sZ3JlaWNoIGdlemF1YmVydCBoYXQuCisgICAgICAgIHNwZWxsCisgICAgICAgICAgRGVyIE5hbWUgZGVzIGdlemF1YmVydGVuIFNwZWxscworICAgICAgICBzaW5mbworICAgICAgICAgIERhcyBrb21wbGV0dGUgU3BlbGxtYXBwaW5nIGRlcyBnZXphdWJlcnRlbiBTcGVsbHMKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIHZvbSBTcGVsbGJ1Y2ggZWluZXIgR2lsZGUgaW4gZGVyIFVtZ2VidW5nCisgICAgICAgIChFbnZpcm9ubWVudCkgZWluZXMgTGViZXdlc2VucyBhdWZnZXJ1ZmVuLCB3ZW5uIGltbWVyIGRhcyBMZWJld2VzZW4KKyAgICAgICAgZWluZW4gU3BlbGwgX2VyZm9sZ3JlaWNoXyBnZXphdWJlcnQgaGF0LgorICAgICAgICBCZW1lcmt1bmc6IEJpdHRlIHZlcm1laWRlbiwgYXVmd2FlbmRpZ2UgU2FjaGVuIGluIGRlciBGdW5rdGlvbiB6dQorICAgICAgICBtYWNoZW4sIGRhIHNvbnN0IHUuVS4gZGVzd2VnZW4gR2lsZGVuIGFuZmFuZ2VuIHp1IGJ1Z2dlbi4gRmFsbHMgZXMKKyAgICAgICAgc2VpbiBtdXNzLCBtYWNodCBkYW5uIGxpZWJlciBlaW5lbiBjYWxsX291dCBtaXQgMnMgV2FydGV6ZWl0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAgICBrZWluZXIKKworU0lFSEUgQVVDSDoKKyAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxNi4wNC4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TdGFydCBiL2RvYy9sZnVuL1N0YXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjYzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TdGFydApAQCAtMCwwICsxLDI1IEBACitTdGFydCgpCisKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIHZvaWQgU3RhcnQoaW50IHBvcyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90cmFuc3BvcnQuYworCitBUkdVTUVOVEU6CisgICAgIHBvcworICAgICAgICAgIEZhaHJwbGFuc3RhdGlvbiwgYW4gZGVyIGJlZ29ubmVuIHdlcmRlbiBzb2xsLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHNjaGlja3QgZGVuIFRyYW5zcG9ydGVyIGF1ZiBkaWUgU3RyZWNrZS4gRGFiZWkgYmVnaW5udAorICAgICBkZXIgV2VnIGFuIGRlciBtaXQgcG9zIGJlemVpY2huZXRlbiBTdGVsbGUgaW0gRmFocnBsYW4uIERlZmF1bHQgaXN0IDAsCisgICAgIGQuaC4gZGVyIFRyYW5zcG9ydGVyIGJlZ2lubnQgc2VpbmVuIFdlZyBhbiBkZXIgZXJzdGVuIEZhaHJwbGFucG9zaXRpb24uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitTSUVIRSBBVUNIOgorICAgICBIYWx0KCksIC9zdGQvdHJhbnNwb3J0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjI1OjMwIDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TdG9wSHVudEZvciBiL2RvYy9sZnVuL1N0b3BIdW50Rm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOGI5MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TdG9wSHVudEZvcgpAQCAtMCwwICsxLDUyIEBACitTdG9wSHVudEZvcigpCisKK0ZVTktUSU9OOgorICB2YXJhcmdzIGludCBTdG9wSHVudEZvcihvYmplY3QgYXJnLGludCBzaWxlbnQpOworCitERUZJTklFUlQgSU46CisgIC9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgYXJnCisgICAgRGVyIEdlZ25lciwgd2VsY2hlciBuaWNodCBtZWhyIGJla2FlbXBmdCB3ZXJkZW4gc29sbC4KKyAgc2lsZW50CisgICAgRmxhZywgd2VsY2hlcyBnZXNldHp0IGFuemVpZ3QsIGRhc3MgZGllIGJlaWRlbiBFeC1TdHJlaXRoYWVobmUKKyAgICB1ZWJlciBkYXMgZWluc2VpdGlnZSBGcmllZGVuc2FuZ2Vib3QgbmljaHQgaW5mb3JtaWVydCB3ZXJkZW4KKyAgICBzb2xsZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgIEZsYWc6IEJlaSAwIHdhciBkZXIgR2VnbmVyIG5pY2h0IGF1ZmZpbmRiYXIsIGJlaSAxIEVyZm9sZy4KKworQkVTQ0hSRUlCVU5HOgorICBNaXQgZGllc2VyIEZ1bmt0aW9uIGthbm4gbWFuIGVpbiBMZWJld2VzZW4gPGFyZz4gYWxzIEdlZ25lcgorICBhdXN0cmFnZW4uIEltIE5vcm1hbGZhbGwgZXJoYWx0ZW4gc293b2hsIGRhcyBha3R1ZWxsZSBPYmpla3QsIGFscworICBhdWNoIGRlciBHZWduZXIgZWluZSBJbmZvcm1hdGlvbiBkYXJ1ZWJlci4gRGllcyBrYW5uIGplZG9jaCBtaXQgZGVtCisgIGdlc2V0enRlbiBGbGFnIDxzaWxlbnQ+IHVudGVyYnVuZGVuIHdlcmRlbi4KKyAgRXMgaXN0IGF1Y2ggbW9lZ2xpY2gsIGF1ZiBkaWVzZSBNZWxkdW5nIEVpbmZsdXNzIHp1IG5laG1lbiwgaW5kZW0KKyAgbWFuIGRpZSBGdW5rdGlvbiBTdG9wSHVudFRleHQoKSB1ZWJlcnNjaHJlaWJ0LCB3ZWxjaGUgZGFmdWVyCisgIHZlcmFudHdvcnRsaWNoIGlzdC4KKyAgQWNodHVuZzogVW0gendpc2NoZW4gYmVpZGVuIFN0cmVpdGhhZWhuZW4gRnJpZWRlbiB6dSBzY2hsaWVzc2VuLAorICBtdXNzIGRlciBlaW5lIEdlZ25lciBqZXdlaWxzIGJlaSBkZW0gYW5kZXJlbiBhdXNnZXRyYWdlbiB3ZXJkZW4uIEVpbgorICBlaW56ZWxuZXMgU3RvcEh1bnRGb3IoKSBpc3Qgc296dXNhZ2VuIG51ciBlaW4gZWluc2VpdGlnZXMKKyAgRnJpZWRlbnNhbmdlYm90LgorCitCRU1FUktVTkdFTjoKKyAgU29sbCBlaW4gVmllY2ggdW50ZXIgYmVzdGltbXRlbiBVbXN0YWVuZGVuIG5pY2h0IGFuZ3JlaWZiYXIgc2VpbiwgaXN0IGluCisgIGtlaW5lbSBGYWxsIFN0b3BIdW50Rm9yKCkgaW0gRGVmZW5kKCkgenUgdmVyd2VuZGVuLCBzb25kZXJuIFBfTk9fQVRUQUNLLgorICBHcnVuZDogU3RvcHB0IG1hbiB1bmxpZWJzYW1lIEthZW1wZmUgamV3ZWlscyBhbSBBbmZhbmcgdm9tIERlZmVuZCwga2FubiBlaW4KKyAgR2VnbmVyIGdlZmFocmxvcyBBbmdyaWZmc3NwZWxscyBhdXNmdWVocmVuICh1bmQgdWViZW4pLCBvaG5lIGRhc3MgZGllIEdlZmFocgorICBiZXN0ZWh0LCBkYXNzIGRlciBOUEMgenVydWVja3NjaGxhZWd0LgorCitCRUlTUElFTEU6CisgIE1hbiB3aWxsIGF1cyBpcmdlbmRlaW5lbSBHcnVuZCBkZW4gS2FtcGYgendpc2NoZW4gc2ljaCB1bmQgR2VnbmVyIGVuZW15CisgIGVpbnN0ZWxsZW46CisgIC4uLgorICBTdG9wSHVudEZvcihlbmVteSk7IC8vIGVuZW15IG5pY2h0IG1laHIgYmVrYWVtcGZlbgorICBlbmVteS0+U3RvcEh1bnRGb3IodGhpc19vYmplY3QoKSk7IC8vIGVuZW15IHNvbGwgbWljaCBuaWNodCBiZWthZW1wZmVuLgorICAuLi4KKworU0lFSEUgQVVDSDoKKyAgU3RvcEh1bnRUZXh0KCksIFNlbGVjdEVuZW15KCksIFF1ZXJ5RW5lbWllcygpLCBJc0VuZW15KCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMTYuMDMuMjAwOCwgWmVzc3RyYSAKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1N0b3BIdW50VGV4dCBiL2RvYy9sZnVuL1N0b3BIdW50VGV4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2E4Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vU3RvcEh1bnRUZXh0CkBAIC0wLDAgKzEsNTggQEAKK1N0b3BIdW50VGV4dCgpCisKK0ZVTktUSU9OOgorCXZvaWQgU3RvcEh1bnRUZXh0KG9iamVjdCBhcmcpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9saXZpbmcvY29tYmF0LmMKKworQVJHVU1FTlRFOgorCWFyZworCSAgRGVyIEdlZ25lciwgd2VsY2hlciBuaWNodCBtZWhyIGJla2FlbXBmdCB3aXJkLgorCitCRVNDSFJFSUJVTkc6CisJTWl0IGRlciBGdW5rdGlvbiBTdG9wSHVudEZvcigpIGthbm4gbWFuIGVpbiBMZWJld2VzZW4gYWxzIEdlZ25lcgorCWF1c3RyYWdlbi4gRGFiZWkgZXJoYWx0ZW4gc293b2hsIGRlciBHZWduZXIsIGFscyBhdWNoIGRhcyBMZWJld2VzZW4sCisJd2VsY2hlcyAoZWluc2VpdGlnISkgRnJpZWRlbiBzY2hsaWVzc3QsIGpld2VpbHMgZWluZSBNZWxkdW5nLCBzb2Zlcm4KKwltYW4gZGllcyBuaWNodCBtaXR0ZWxzIGVpbmVzIEZsYWdzIHVudGVyYmluZGV0LgorCUVzIGlzdCBudW4gbW9lZ2xpY2gsIGF1ZiBkaWVzZSBNZWxkdW5nIEVpbmZsdXNzIHp1IG5laG1lbiwgaW5kZW0KKwltYW4gZGllIEZ1bmt0aW9uIFN0b3BIdW50VGV4dCgpIHVlYmVyc2NocmVpYnQsIHdlbGNoZSBkYWZ1ZXIKKwl2ZXJhbnR3b3J0bGljaCBpc3QuCisKK0JFSVNQSUVMOgorCUVpbiBMZWJld2VzZW4gbW9lY2h0ZSBlaW5lbiBLYW1wZiBzb2ZvcnQgYWJicmVjaGVuLCB3ZW5uIGVzIHZvbgorCWVpbmVtIEZyb3NjaCBhbmdlZ3JpZmZlbiB3aXJkOgorCSAgaW50IERlZmVuZChpbnQgZGFtLG1peGVkIGRhbV90eXBlLG1peGVkIHNwZWxsLG9iamVjdCBlbmVteSkKKwkgIHsgaWYoZW5lbXkmJmVuZW15LT5RdWVyeVByb3AoUF9GUk9HKSkKKwkgICAgeyBpZihTdG9wSHVudEZvcihlbmVteSkpCisgICAgICAgICAgICAgIHsgLy8gd2VubiBGcm9zY2ggYW5ncmVpZmVuIHdpbGwsIGRlciBub2NoIGtlaW4gR2VnbmVyIHdhcgorICAgICAgICAgICAgICAgIHRlbGxfb2JqZWN0KGFyZywKKyAgICAgICAgIHRoaXNfb2JqZWN0KCktPk5hbWUoV0VSKSsiIGthZW1wZnQgbmljaHQgbWl0IERpci5cbiIKKwkrIldhaHJzY2hlaW5saWNoIHdlcmRlbiBGcm9lc2NoZSB2ZXJzY2hvbnQuXG4iKTsKKwkgICAgICAgIHRlbGxfb2JqZWN0KHRoaXNfb2JqZWN0KCksCisJICJEZXIgYmxvZWRlIEZyb3NjaCB3b2xsdGUgRGljaCBkb2NoIHRhdHNhZWNobGljaCBhbmdyZWlmZW4uXG4iKTsKKyAgICAgICAgICAgICAgfQorCSAgICAgIGVuZW15LT5TdG9wSHVudEZvcih0aGlzX29iamVjdCgpLDEpOworICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKwkgICAgcmV0dXJuOjpEZWZlbmQoZGFtLGRhbV90eXBlLHNwZWxsLGVuZW15KTsKKwkgIH0KKwkgIC8vIHdpcmQgbnVyIGF1ZmdlcnVmZW4sIHdlbm4gZGVyIEdlZ25lciBpcmdlbmR3YW5uIEZyb3NjaCB3dXJkZQorCSAgdm9pZCBTdG9wSHVudFRleHQob2JqZWN0IGFyZykKKwkgIHsgdGVsbF9vYmplY3QoYXJnLAorCSB0aGlzX29iamVjdCgpLT5OYW1lKFdFUikrIiBqYWdkIERpY2ggbmljaHQgbWVoci5cbiIKKwkrIldhaHJzY2hlaW5saWNoIHdlcmRlbiBGcm9lc2NoZSB2ZXJzY2hvbnQuXG4iKTsKKwkgICAgdGVsbF9vYmplY3QodGhpc19vYmplY3QoKSwKKwkiRGVpbiBHZWduZXIgaXN0IGRvY2ggdGF0c2FlY2hsaWNoIHBsb2V0emxpY2ggRnJvc2NoIGdld29yZGVuIVxuIik7CisJICB9CisJV2FydW0gYnJhdWNodCBtYW4gbnVuIGRhcyBlcnN0ZSBTdG9wSHVudEZvcigpLCB3ZW5uIGRvY2ggR2VnbmVyIGVyc3QKKwlpbiA6OkRlZmVuZCgpIGVpbmdldHJhZ2VuIHdlcmRlbiwgd2VsY2hlcyBkb2NoIGdhciBuaWNodCBhdXNnZWZ1ZWhydAorCXdpcmQsIHdlbm4gZGVyIEdlZ25lciBlaW4gRnJvc2NoIGlzdD8gTWFuIGJlYWNodGUgaGllcmJlaSwgZGFzcyBkZXIKKwlHZWduZXIgamEgYXVjaCB3YWVocmVuZCBkZXMgS2FtcGZlcyBvZGVyIHdhZWhyZW5kIGRlciBGZWluZHNjaGFmdAorCWlyZ2VuZHdhbm4gRnJvc2NoIHdlcmRlbiBrb2VubnRlIHVuZCBkYW5uIHNjaG9uIEdlZ25lciB3YXIuCisKK1NJRUhFIEFVQ0g6CisJU3RvcEh1bnRGb3IoKSwgU2VsZWN0RW5lbXkoKSwgUXVlcnlFbmVtaWVzKCksIElzRW5lbXkoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDI2IDE2OjQ3OjUxIDE5OTkgYnkgUGF0cnluCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9TdWdnZXN0QXJ0aWNsZSBiL2RvYy9sZnVuL1N1Z2dlc3RBcnRpY2xlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNGJhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9TdWdnZXN0QXJ0aWNsZQpAQCAtMCwwICsxLDM1IEBACitTdWdnZXN0QXJ0aWNsZSgpCisKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIGludCBTdWdnZXN0QXJ0aWNsZShzdHJpbmcgbmFtZSk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9sYW5ndWFnZS5jCisKK0FSR1VNRU5URToKKyAgICAgbmFtZQorICAgICAgICAgIERlciBOYW1lIHp1ciBFbnRzY2hlaWR1bmdzaGlsZmUuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gdmVyc3VjaHQgaGVyYXVzenVmaW5kZW4sIG9iIGRlciBBcnRpa2VsIHp1IGRpZXNlbSBPYmpla3QKKyAgICAgZWluIHVuYmVzdGltbXRlciBvZGVyIGJlc3NlciBlaW4gYmVzdGltbXRlciBBcnRpa2VsIHNlaW4gc29sbHRlLiBEaWUKKyAgICAgVm9yZ2VoZW5zd2Vpc2UgaXN0IGZvbGdlbmRlOiBHaWJ0IGVzIGluIGRlciBVbWdlYnVuZyBkaWVzZXMgT2JqZWt0ZXMKKyAgICAgZWluIHdlaXRlcmVzIE9iamVrdCwgZGFzIGRlbiBOYW1lbiBuYW1lIGJlc2l0enQsIHNvIHdpcmQgZWluCisgICAgIHVuYmVzdGltbXRlciBBcnRpa2VsIHZvcmdlc2NobGFnZW4sIGFuc29uc3RlbiBlaW4gYmVzdGltbXRlci4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMCwgd2VubiBlaW4gdW5iZXN0aW1tdGVyIEFydGlrZWwgZ2VlaWduZXQgaXN0LCBhbnNvbnN0ZW4gMS4KKworQkVNRVJLVU5HRU46CisgICAgIERlciBWZXJnbGVpY2ggZXJmb2xndCBtaXR0ZWxzIGRlciBQcm9wZXJ0eSBQX05BTUUuIFVtIEVyZm9sZyB6dSBoYWJlbiwKKyAgICAgc29sbHRlIG1hbiBkaWVzZSBGdW5rdGlvbiBkYWhlciBpbiBkZXIgRm9ybQorCisgICAgIFN1Z2dlc3RBcnRpY2xlKFF1ZXJ5UHJvcChQX05BTUUpKQorCisgICAgIGF1ZnJ1ZmVuLgorCitTSUVIRSBBVUNIOgorICAgICBRdWVyeUFydGljbGUoKSwgbmFtZSgpLCAvc3RkL3RoaW5nL2xhbmd1YWdlLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjI1OjM0IDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9Td2FwUm93cyBiL2RvYy9sZnVuL1N3YXBSb3dzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNWQ5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9Td2FwUm93cwpAQCAtMCwwICsxLDQwIEBACisKK1N3YXBSb3dzKCkKKworCitGVU5LVElPTjoKKyAgICBpbnQgU3dhcFJvd3MoIG9iamVjdCBvYjEsIG9iamVjdCBvYjIgKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvdGVhbS5jCisKK0FSR1VNRU5URToKKyAgICBvYjEsIG9iMiAtIFNwaWVsZXIsIGRpZSBkaWUgUmVpaGVuIHRhdXNjaGVuIHNvbGxlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZSBhbmdlZ2ViZW5lbiBTcGllbGVyIHRhdXNjaGVuIGRpZSBSZWloZW4uCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgMSBiZWkgZXJmb2xncmVpY2hlbSBUYXVzY2gsIDAgc29uc3QuCisKK0JFTUVSS1VORzoKKyAgICBEZXIgVGF1c2NoIHdpcmQgbnVyIGR1cmNoZ2VmdWVocnQsIHdlbm4gZGllIGFuZ2VnZWJlbmVuIFNwaWVsZXIgYXVjaAorICAgIHRhdHNhZWNobGljaCBpbSBUZWFtIHNpbmQgdW5kIGRhbWl0IGtlaW4gTlBDIHZvciBlaW5lbiBTcGllbGVyIGdlc3RlbGx0CisgICAgd3VlcmRlLgorICAgIE1vZWNodGUgbWFuIHdpc3Nlbiwgb2IgZWluIFNwaWVsZXIgZWluZSBSZWloZSBnZXdlY2hzZWx0IGhhdCwgbXVzcyBtYW4KKyAgICBzaWNoIGRlciBIaWxmZSBlaW5lcyBIb29rcyBiZWRpZW5lbjogSF9IT09LX1RFQU1ST1dDSEFOR0UKKworU0lFSEUgQVVDSDoKKyAgICAgICAgVWViZXJzaWNodDogdGVhbWthbXBmCisgICAgICAgIFByb3BlcnRpZXM6IFBfVEVBTSwgUF9URUFNX0xFQURFUiwgUF9URUFNX0FTU09DX01FTUJFUlMsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9ORVdNRU1CRVIKKyAgICAgICAgQmV3ZWd1bmc6ICAgSXNUZWFtTW92ZSwgVGVhbUZsZWUKKyAgICAgICAgTWl0Z2xpZWRlcjogSXNUZWFtTGVhZGVyLCBUZWFtTWVtYmVycworICAgICAgICBLYW1wZjogICAgICBBc3NvY01lbWJlciwgRGVBc3NvY01lbWJlciwgSW5zZXJ0RW5lbXlUZWFtCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdE5lYXJFbmVteSwgU2VsZWN0RmFyRW5lbXkKKyAgICAgICAgUG9zaXRpb25lbjogUHJlc2VudFBvc2l0aW9uLCBQcmVzZW50Um93cywgUHJlc2VudEVuZW15Um93cywKKyAgICAgICAgICAgICAgICAgICAgUHJlc2VudFRlYW1Qb3NpdGlvbgorICAgICAgICBTb25zdGlnZXM6ICBUZWFtUHJlZml4LCB0ZWFta2FtcGZfaW50ZXJuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE2LTA4LTIwMTAsIEdhYnlsb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1Rha2VGbGF3IGIvZG9jL2xmdW4vVGFrZUZsYXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmZDAzYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1Rha2VGbGF3CkBAIC0wLDAgKzEsNzUgQEAKK1Rha2VGbGF3KCkKKworRlVOS1RJT046CisgICAgIHZhcmFyZ3Mgdm9pZCBUYWtlRmxhdyhvYmplY3QgZW5lbXkpOyAoV2FmZmVuKQorICAgICB2YXJhcmdzIHZvaWQgVGFrZUZsYXcobWl4ZWQgZGFtX3R5cGVzLG1hcHBpbmcgZWluZm9zKSAoUnVlc3R1bmdlbikKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2FybW91ci9jb21iYXQuYywKKyAgICAgL3N0ZC93ZWFwb24vY29tYmF0LmMKKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgaW4gV2FmZmVuIHVuZCBSdWVzdHVuZ2VuIHdhZWhyZW5kIGRlcyBLYW1wZmVzCisgICAgIGF1ZmdlcnVmZW4uIEluIGVpbmVyIFdhZmZlIGVyZm9sZ3QgZGVyIEF1ZnJ1ZiBiZWkgamVkZW0gU2NobGFnIG1pdAorICAgICBkaWVzZXIgV2FmZmUsIGJlaSBSdWVzdHVuZ2VuIHdpcmQgVGFrZUZsYXcoKSBpbiBlaW5lciB6dWZhZWxsaWcKKyAgICAgYXVzZ2V3YWVobHRlbiBnZXRyYWdlbmVuIFJ1ZXN0dW5nIGF1ZmdlcnVmZW4uCisgICAgIFdhZmZlbiBiZWtvbW1lbiBkYXMgR2VnbmVyb2JqZWt0IHVlYmVyZ2ViZW4sIFJ1ZXN0dW5nZW4gZGllIGVyd2VpdGVydGVuCisgICAgIERlZmVuZEluZm9zIChzLiBkb3J0IGZ1ZXIgRGV0YWlscykuIEF1ZmdydW5kIGRpZXNlciBJbmZvcm1hdGlvbmVuIGthbm4KKyAgICAgbWFuIGRlbiBTY2hhZGVuLCBkZW4gZWluIEdlZ2Vuc3RhbmQgbmltbXQsIGZsZXhpYmxlciBnZXN0YWx0ZW4gKHouQi4gYmVpCisgICAgIGVpbmVyIFdhZmZlIGluIEFiaGFlbmdpZ2tlaXQgdm9uIFBfQk9EWSBkZXMgR2VnbmVycy4pCisKKyAgICAgU293ZWl0IG1hbiBkaWUgRnVua3Rpb24gbmljaHQgdWViZXJsYWVkdCwgYmV3aXJrdCBzaWUgbmljaHRzIHdlaXRlciBhbHMKKyAgICAgZGFzIEVyaG9laGVuIGVpbmVzIFphZWhsZXJzLCBkZXIgbWl0IFF1ZXJ5RmxhdygpIGFiZ2VmcmFndCB3ZXJkZW4ga2Fubi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFTUVSS1VOR0VOOgorICAgICBEaWUgV2FmZmVuLS8gUnVlc3R1bmdza2xhc3NlIHdpcmQgbmljaHQgYXV0b21hdGlzY2ggcmVkdXppZXJ0ISBXZW5uCisgICAgIGVpbmUgV2FmZmUgb2RlciBSdWVzdHVuZyBzaWNoIGFibnV0emVuIHNvbGwsIG11c3MgbWFuIFRha2VGbGF3KCkKKyAgICAgdWViZXJsYWRlbiB1bmQgZG9ydCBlbnRzcHJlY2hlbmQgaGFuZGVsbiwgb2RlciAoZnVlciBlaW5mYWNoZQorICAgICBGYWVsbGUpIGRpZSBQcm9wZXJ0eSBQX1FVQUxJVFkgc2V0emVuLgorCitCRUlTUElFTEU6CisgICAgIEVpbmUgV2FmZmUsIGRlcmVuIFdhZmZlbmtsYXNzZSBhbGxlIDIwIFNjaGxhZWdlIHVtIDEgYWJuaW1tdDoKKworICAgICBpbmhlcml0ICJzdGQvd2VhcG9uIjsKKworICAgICAjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorICAgICAjaW5jbHVkZSA8Y29tYmF0Lmg+CisKKyAgICAgY3JlYXRlKCkKKyAgICAgeworICAgICAgIC8qIERhcyBVZWJsaWNoZS4uLiAqLworICAgICB9CisKKyAgICAgVGFrZUZsYXcoKQorICAgICB7CisgICAgICAgaW50IGZsYXc7CisKKyAgICAgICAvKiBlcnN0IG1hbCBkZW4gWmFlaGxlciBlcmhvZWhlbi4uLiAqLworICAgICAgIDo6VGFrZUZsYXcoKTsKKworICAgICAgIC8qIGpldHp0IGRlbiBha3R1ZWxsZW4gWmFlaGxlcnN0YW5kIGFiZnJhZ2VuICovCisgICAgICAgZmxhdyA9IFF1ZXJ5RmxhdygpWzBdOworCisgICAgICAgLyogQWJ6dWcgbnVyIGplZGVuIDIwLiBTY2hsYWcgKi8KKyAgICAgICBpZiAoIShmbGF3ICUgMjApKSB7CisgICAgICAgICAvKiBTbywgamV0enQgZnVlciBkZW4gU2NoYWRlbiBzb3JnZW4uIEhpZXJmdWVyIGJlbnV0enQgKi8KKyAgICAgICAgIC8qIG1hbiBhbSBzaWNoZXJzdGVuIGRpZSBlaW5nZWJhdXRlIEZ1bmt0aW9uIERhbWFnZSgpICovCisgICAgICAgICBEYW1hZ2UoMSk7CisgICAgICAgfQorICAgICB9CisKKyAgICAgRGllc2VzIGVpbmZhY2hlIEJlaXNwaWVsIGhhZXR0ZSBuYXR1ZXJsaWNoIGF1Y2ggdWViZXIgZWluCisgICAgIFNldFByb3AoUF9RVUFMSVRZLDIwKTsgaW0gY3JlYXRlKCkgcmVhbGlzaWVydCB3ZXJkZW4ga29lbm5lbi4KKworU0lFSEUgQVVDSDoKKyAgICAgUXVlcnlGbGF3KCksIERhbWFnZSgpLCBEZWZlbmRJbmZvLCBQX1FVSUFMSVRZLCAvc3RkL2FybW91ci9jb21iYXQuYywKKyAgICAgL3N0ZC93ZWFwb24vY29tYmF0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogVGh1IE1heSAyMiAxMDozMDoxMCAxOTk3IGJ5IFBhcmFjZWxzdXMKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1RlYW1GbGVlIGIvZG9jL2xmdW4vVGVhbUZsZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzMTdhMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1RlYW1GbGVlCkBAIC0wLDAgKzEsNDAgQEAKKworVGVhbUZsZWUoKQorCisKK0ZVTktUSU9OOgorICAgICAgICBpbnQgVGVhbUZsZWUoKQorCitERUZJTklFUlQgSU46CisgICAgICAgIC9zdGQvbGl2aW5nL3RlYW0uYworCitBUkdVTUVOVEU6CisgICAgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgU3BpZWxlciB3aXJkIHp1ciBGbHVjaHQgaW4gaGludGVyZSBSZWloZSB2ZXJhbmxhc3N0LCBmYWxscyBlciBkaWVzCisgICAgICAgIGVpbmdlc3RlbGx0IGhhdC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgICAgMSwgZmFsbHMgZGVyIFNwaWVsZXIgaW4gZWluZSBoaW50ZXJlIFJlaWhlIGZsaWVoZW4gd29sbHRlIHVuZCBuYWNoCisgICAgICAgIGRlbSBWZXJzdWNoIG5pY2h0IG1laHIgaW4gZGVyIGVyc3RlbiBSZWloZSBzdGVodCwgc29uc3QgMC4KKworQkVNRVJLVU5HRU46CisgICAgICAgIEJlaW0gVGVhbWxlaXRlciBmdWVocnQgZGVyIEZsdWNodHZlcnN1Y2ggZGF6dSwgZGFzcyBzZWluIFRlYW0gbmljaHQKKyAgICAgICAgbWVociBmb2xndC4KKworU0lFSEUgQVVDSDoKKyAgICAgICAgVWViZXJzaWNodDogdGVhbWthbXBmCisgICAgICAgIFByb3BlcnRpZXM6IFBfVEVBTSwgUF9BU1NPQ19NRU1CRVJTLCBQX1RFQU1fQVRUQUNLX0NNRCwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX0FVVE9GT0xMT1csIFBfVEVBTV9DT0xPUlMsIFBfVEVBTV9MRUFERVIsCisgICAgICAgICAgICAgICAgICAgIFBfVEVBTV9ORVdNRU1CRVIsIFBfVEVBTV9XQU5URURfUk9XLCBQX1RFQU1fV0lNUFlfUk9XCisgICAgICAgIEJld2VndW5nOiAgIElzVGVhbU1vdmUKKyAgICAgICAgTWl0Z2xpZWRlcjogSXNUZWFtTGVhZGVyLCBUZWFtTWVtYmVycworICAgICAgICBLYW1wZjogICAgICBBc3NvY01lbWJlciwgRGVBc3NvY01lbWJlciwgSW5zZXJ0RW5lbXlUZWFtLAorICAgICAgICAgICAgICAgICAgICBTZWxlY3ROZWFyRW5lbXksIFNlbGVjdEZhckVuZW15CisgICAgICAgIFBvc2l0aW9uZW46IFByZXNlbnRQb3NpdGlvbiwgUHJlc2VudFJvd3MsIFByZXNlbnRFbmVteVJvd3MsCisgICAgICAgICAgICAgICAgICAgIFByZXNlbnRUZWFtUG9zaXRpb24sIFN3YXBSb3dzCisgICAgICAgIFNvbnN0aWdlczogIFRlYW1QcmVmaXgsIHRlYW1rYW1wZl9pbnRlcm4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMTYtMDgtMjAxMCwgR2FieWxvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vVGVhbU1lbWJlcnMgYi9kb2MvbGZ1bi9UZWFtTWVtYmVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGNhOTNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vVGVhbU1lbWJlcnMKQEAgLTAsMCArMSwzOCBAQAorCitUZWFtTWVtYmVycygpCisKKworRlVOS1RJT046CisgICAgICAgIG9iamVjdCAqVGVhbU1lbWJlcnMoKQorCitERUZJTklFUlQgSU46CisgICAgICAgIC9zdGQvbGl2aW5nL3RlYW0uYworCitBUkdVTUVOVEU6CisgICAgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgTGllZmVydCBUZWFtbWl0Z2xpZWRlciBkZXMgVGVhbXMgZGVzIFNwaWVsZXJzLgorCitSVUVDS0dBQkVXRVJUOgorICAgICAgICBBcnJheSBtaXQgQUxMRU4gVGVhbW1pdGdsaWVkZXJuLgorCitCRU1FUktVTkdFTjoKKyAgICAgICAgRmFsbHMgZGVyIFNwaWVsZXIgaW4ga2VpbmVtIFRlYW0gaXN0LCBlbnRoYWVsdCBkYXMgQXJyYXkgbnVyIGRlbgorICAgICAgICBTcGllbGVyLgorCitTSUVIRSBBVUNIOgorICAgICAgICBVZWJlcnNpY2h0OiB0ZWFta2FtcGYKKyAgICAgICAgUHJvcGVydGllczogUF9URUFNLCBQX0FTU09DX01FTUJFUlMsIFBfVEVBTV9BVFRBQ0tfQ01ELAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fQVVUT0ZPTExPVywgUF9URUFNX0NPTE9SUywgUF9URUFNX0xFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX05FV01FTUJFUiwgUF9URUFNX1dBTlRFRF9ST1csIFBfVEVBTV9XSU1QWV9ST1cKKyAgICAgICAgQmV3ZWd1bmc6ICAgSXNUZWFtTW92ZSwgVGVhbUZsZWUKKyAgICAgICAgTWl0Z2xpZWRlcjogSXNUZWFtTGVhZGVyCisgICAgICAgIEthbXBmOiAgICAgIEFzc29jTWVtYmVyLCBEZUFzc29jTWVtYmVyLCBJbnNlcnRFbmVteVRlYW0sCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdE5lYXJFbmVteSwgU2VsZWN0RmFyRW5lbXkKKyAgICAgICAgUG9zaXRpb25lbjogUHJlc2VudFBvc2l0aW9uLCBQcmVzZW50Um93cywgUHJlc2VudEVuZW15Um93cywKKyAgICAgICAgICAgICAgICAgICAgUHJlc2VudFRlYW1Qb3NpdGlvbiwgU3dhcFJvd3MKKyAgICAgICAgU29uc3RpZ2VzOiAgVGVhbVByZWZpeCwgdGVhbWthbXBmX2ludGVybgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiAxNi0wOC0yMDEwLCBHYWJ5bG9uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9UZWFtUHJlZml4IGIvZG9jL2xmdW4vVGVhbVByZWZpeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmJlYmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vVGVhbVByZWZpeApAQCAtMCwwICsxLDM3IEBACisKK1RlYW1QcmVmaXgoKQorCisKK0ZVTktUSU9OOgorICAgICAgICBzdHJpbmcgVGVhbVByZWZpeCgpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgICAgL3N0ZC9saXZpbmcvdGVhbS5jCisKK0FSR1VNRU5URToKKyAgICAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBFcmdpYnQgVGVhbS1QcmVmaXggZWluZXMgU3BpZWxlcnMuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgICAgICJbVGVhbSBUZWFtbmFtZV0gIiwgZmFsbHMgZGVyIFNwaWVsZXIgaW4gZWluZW0gVGVhbSBpc3QsCisgICAgICAgICIiICAgICAgICAgICAgICAgICAgc29uc3QuCisKK0JFTUVSS1VOR0VOOgorCitTSUVIRSBBVUNIOgorICAgICAgICBVZWJlcnNpY2h0OiB0ZWFta2FtcGYKKyAgICAgICAgUHJvcGVydGllczogUF9URUFNLCBQX0FTU09DX01FTUJFUlMsIFBfVEVBTV9BVFRBQ0tfQ01ELAorICAgICAgICAgICAgICAgICAgICBQX1RFQU1fQVVUT0ZPTExPVywgUF9URUFNX0NPTE9SUywgUF9URUFNX0xFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgUF9URUFNX05FV01FTUJFUiwgUF9URUFNX1dBTlRFRF9ST1csIFBfVEVBTV9XSU1QWV9ST1cKKyAgICAgICAgQmV3ZWd1bmc6ICAgSXNUZWFtTW92ZSwgVGVhbUZsZWUKKyAgICAgICAgTWl0Z2xpZWRlcjogSXNUZWFtTGVhZGVyLCBUZWFtTWVtYmVycworICAgICAgICBLYW1wZjogICAgICBBc3NvY01lbWJlciwgRGVBc3NvY01lbWJlciwgSW5zZXJ0RW5lbXlUZWFtLAorICAgICAgICAgICAgICAgICAgICBTZWxlY3ROZWFyRW5lbXksIFNlbGVjdEZhckVuZW15CisgICAgICAgIFBvc2l0aW9uZW46IFByZXNlbnRQb3NpdGlvbiwgUHJlc2VudFJvd3MsIFByZXNlbnRFbmVteVJvd3MsCisgICAgICAgICAgICAgICAgICAgIFByZXNlbnRUZWFtUG9zaXRpb24sIFN3YXBSb3dzCisgICAgICAgIFNvbnN0aWdlczogIHRlYW1rYW1wZl9pbnRlcm4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMTYtMDgtMjAxMCwgR2FieWxvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vVGVsZXBvcnQgYi9kb2MvbGZ1bi9UZWxlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTAyZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vVGVsZXBvcnQKQEAgLTAsMCArMSwyOCBAQAorVGVsZXBvcnQoKQorCitGVU5LVElPTjoKKyAgICBpbnQgVGVsZXBvcnQoc3RyaW5nIHppZWwpCisKK0FSR1VNRU5URToKKyAgICB6aWVsOiBOdW1tZXIgZGVzIFNlaGVydG9ycywgenUgZGVtIHRlbGVwb3J0aWVydCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgIFRlbGVwb3J0aWVydCBkZW4gU2VoZXIgKHRoaXNfcGxheWVyKCkpIHp1IGRlbSBUb3IgbWl0IGRlciBhbmdlZ2ViZW5lbgorICAgIE51bW1lci4gRmFsbHMga2VpbmUgTnVtbWVyIGFuZ2VnZWJlbiB3aXJkLCB3aXJkIG1pdCBTaG93RG9vcnMoKSBkaWUKKyAgICBMaXN0ZSBkZXIgYmVrYW5udGVuIFRvcmUgYW5nZXplaWd0IHVuZCBhdWYgZGllIEVpbmdhYmUgZWluZXIgTnVtbWVyCisgICAgZ2V3YXJ0ZXQuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgMCwgZmFsbHMgZGVyIFNlaGVyIG5pY2h0IG5lYmVuIGVpbmVtIFRvciBzdGVodCwgZGFzcyBlciBrZW5udC4KKyAgICAxICBzb25zdC4KKworQkVNRVJLVU5HRU46CisgICAgRGVyIFNlaGVyIG11c3MgaW4gZWluZW0gUmF1bSBzdGVoZW4sIGluIGRlbSBzaWNoIGVpbiBTZWhlcnRvciBiZWZpbmRldCwKKyAgICBkYXNzIGVyIGtlbm50LiBEZXIgU2VoZXIgbXVzcyBhdWNoIGRhcyBhbmdlZ2ViZW5lIFppZWwga2VubmVuLgorICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgdm9uIC9kL3NlaGVyL3BvcnRhbGUvc2VoZXJ0b3JtYXN0ZXIgZGVmaW5pZXJ0LgorCitCRUlTUElFTEU6CisgICAgL2Qvc2VoZXIvcG9ydGFsZS9zZWhlcnRvcm1hc3Rlci0+VGVsZXBvcnQoMSkKKworU0lFSEUgQVVDSDoKKyAgICBEaXNjb3ZlckRvb3IsIERvb3JJc0tub3duLCBTaG93RG9vcnMsIEdldERvb3JzTWFwcGluZwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vVGVzdElnbm9yZSBiL2RvYy9sZnVuL1Rlc3RJZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2NjRjMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1Rlc3RJZ25vcmUKQEAgLTAsMCArMSw2NiBAQAorVGVzdElnbm9yZSgpCisKK0ZVTktUSU9OOgorICAgICBwdWJsaWMgaW50IFRlc3RJZ25vcmUoc3RyaW5nfHN0cmluZyogYXJnKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcGxheWVyL2NvbW0uYworCitBUkdVTUVOVEU6CisgICAgIGFyZworICAgICAgICAgU3RyaW5nIG9kZXIgQXJyYXkgdm9uIFN0cmluZ3MsIGRpZSBnZXRlc3RldCB3ZXJkZW4gc29sbGVuLAorICAgICAgICAgRm9ybWF0IGpld2VpbHM6IFtzcGllbGVyXS5ha3Rpb25bLnF1YWxpZml6aWVyZXJdCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDAsIHdlbm4gYXJnIG5pY2h0IGlnbm9yaWVydCB3aXJkCisgICAgIE1TR19JR05PUkVELCB3ZW5uIChtaW4uIGVpbiBFbGVtZW50IHZvbikgYXJnIGlnbm9yaWVydCB3aXJkCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCBnZXBydWVmdCwgb2IgZGVyIFNwaWVsZXIgaXJnZW5kZWluZW4gRWludHJhZyBhdWYgc2VpbmVyIExpc3RlCisgICAgIGhhdCwgZGVyIGRhenUgZnVlaHJ0LCBkYXNzIDxhcmc+IGlnbm9yaWVydCB3aXJkLiBIaWVyYmVpIGtvbW1lbiBqZSBuYWNoCisgICAgIGRlbiBBbmdhYmVuIGluIDxhcmc+IGZvbGdlbmRlIFJlZ2VsbiB6dW0gVHJhZ2VuOgorICAgICAxKSBzcGllbGVyCisgICAgICAgIFdpcmQgZGVyIFNwaWVsZXIgaWdub3JpZXJ0PworICAgICAyKSAuYWt0aW9uCisgICAgICAgIElnbm9yaWVydCBkZXIgU3BpZWxlciAuYWt0aW9uLCBkLmguIGRpZSBBa3Rpb24ga29tcGxldHQgKE9ITkUKKyAgICAgICAgUXVhbGlmaXppZXJlcik/CisgICAgIDMpIHNwaWVsZXIuYWt0aW9uCisgICAgICAgIElnbm9yaWVydCBkZXIgU3BpZWxlciBzcGllbGVyLCAuYWt0aW9uIG9kZXIgc3BpZWxlci5ha3Rpb24/CisgICAgIDQpIHNwaWVsZXIuYWt0aW9uLnF1YWxpZml6aWVyZXIKKyAgICAgICAgSWdub3JpZXJ0IGRlciBTcGllbGVyIHNwaWVsZXIsIC5ha3Rpb24sIHNwaWVsZXIuYWt0aW9uIG9kZXIKKyAgICAgICAgc3BpZWxlci5ha3Rpb24ucXVhbGlmaXppZXJlcj8KKyAgICAgNSkgLmFrdGlvbi5xdWFsaWZpemllcmVyCisgICAgICAgIElnbm9yaWVydCBkZXIgU3BpZWxlciAuYWt0aW9uIG9kZXIgLmFrdGlvbi5xdWFsaWZpemllcmVyPworCisgICAgIERhIFRlc3RJZ25vcmUoKSBkYW1pdCBkdXJjaGF1cyBldHdhcyBhdWZ3ZW5kaWdlciBzZWluIGthbm4sIHNvbGx0ZQorICAgICBtYW4gZGllcyBuaWNodCB1bm5vZXRpZyBvZnQgYXVmcnVmZW4uIChCcmF1Y2h0IG1hbiBkYXMgRXJnZWJuaXMgei5CLgorICAgICBrdXJ6IHNwYWV0ZXIgbm9jaG1hbCwga29lbm50ZSBtYW4gZGFzIEVyZ2VibmlzIHNwZWljaGVybi4pIFdpcmQgZGVyCisgICAgIFF1YWxpZml6aWVyZXIgbmljaHQgZ2VicmF1Y2h0LCBzb2xsdGUgbWFuIGlobiB3ZWdsYXNzZW4uCisKK0JFSVNQSUVMOgorICAgICBpZiAoIXRoaXNfcGxheWVyKCktPlRlc3RJZ25vcmUoImFuZHkiKSkKKyAgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLCAiQW5keSB0ZWlsdCBEaXIgbWl0OiBIYWxsbyFcbiIpOworCisgICAgIC8vIEJlaXNwaWVsIGZ1ZXIgZWluZSBJZ25vcmUtQ2hlY2sgZnVlciBBa3Rpb24gKGtyYXR6ZW4pIGZ1ZXIgZWluZW4KKyAgICAgLy8gU3BpZWxlciAodGhpc19wbGF5ZXIoKSkgYW4gZWluZW0gYW5kZXJlbiBTcGllbGVyICh0YXJnZXQpCisgICAgIGlmICghdGFyZ2V0LT5UZXN0SWdub3JlKCAoe2dldHVpZCh0aGlzX3BsYXllcigpKSArICIua3JhdHplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dWlkKHRoaXNfcGxheWVyKCkpICsgIi5rcmF0eiJ9KSApKQorICAgICB7CisgICAgICAgdGVsbF9vYmplY3QodGFyZ2V0LCB0aGlzX3BsYXllcigpLT5OYW1lKCkrIiBrcmF0enQgZGljaC5cbiIpOworICAgICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksICJEdSBrcmF0enQgIit0YXJnZXQtPk5hbWUoKSsiLlxuIik7CisgICAgIH0KKyAgICAgZWxzZQorICAgICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksIHRhcmdldC0+TmFtZSgpKyIgaWdub3JpZXJ0IGRpY2guXG4iKTsKKworICAgICAvLyBhbGx1bWZhc3NlbmRlciBJZ25vcmllci1DaGVjayBpbiBlaW5lciBHaWxkZSAoS2xlcnVzKSBhdWYKKyAgICAgLy8gZWluZSBBa3Rpb24gKGt1cmllcmVuKSBmdWVyIGVpbmVuIGJlc3RpbW10ZW4gU3BpZWxlciAoZGVuIGNhc3RlcikKKyAgICAgLy8gYW4gZWluZW0genUga3VyaWVyZW5kZW4gU3BpZWxlciAodGFyZ2V0KQorICAgICBpZiAodGFyZ2V0LT5UZXN0SWdub3JlKGdldHVpZChjYXN0ZXIpKyIua3VyaWVyZS5rbGVydXMiKSkKKyAgICAgICB0ZWxsX29iamVjdChjYXN0ZXIsIGJyZWFrX3N0cmluZygKKyAgICAgICAgIHRhcmdldC0+TmFtZSgpKyIgaWdub3JpZXJ0IGRlaW5lbiBWZXJzdWNoLiIsIDc4KSk7CisKK1NJRUhFIEFVQ0g6CisgICAgIFBfSUdOT1JFLCBBZGRJZ25vcmUsIFJlbW92ZUlnbm9yZSwgVGVzdElnbm9yZVNpbXBsZSwgL3N0ZC9wbGF5ZXIvY29tbS5jCisKKzI2LjA0LjIwMTQgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9UZXN0SWdub3JlU2ltcGxlIGIvZG9jL2xmdW4vVGVzdElnbm9yZVNpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDI2MzJlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vVGVzdElnbm9yZVNpbXBsZQpAQCAtMCwwICsxLDU1IEBACitUZXN0SWdub3JlU2ltcGxlKCkKKworRlVOS1RJT046CisgICAgIHB1YmxpYyBpbnQgVGVzdElnbm9yZVNpbXBsZShzdHJpbmcgKmFyZykKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9jb21tLmMKKworQVJHVU1FTlRFOgorICAgICBhcmcKKyAgICAgICAgIExpc3RlIHZvbiBTdHJpbmdzLCBkaWUgZ2V0ZXN0ZXQgd2VyZGVuIHNvbGxlbgorCitCRVNDSFJFSUJVTkc6CisgICAgIFRlc3RJZ25vcmVTaW1wbGUoKSBwcnVlZnQsIG9iIGRlciBTcGllbGVyIG1pbi4gZWluZW4gZGVyIHVlYmVyZ2ViZW5lbgorICAgICBFaW50cmFlZ2UgYXVmIHNlaW5lciBJZ25vcmllcmVsaXN0ZSBoYXQuCisgICAgIEZhbGxzIG1hbiBtZWhyZXJlIEVpbnRyYWVnZSBwcnVlZmVuIG11c3MvbW9lY2h0ZSwgaXN0IGVzIHNjaG5lbGxlciwgYWxsZQorICAgICBFaW50cmFlZ2UgaW4gZWluZW0genUgdWViZXJnZWJlbiBhbnN0YXR0IGZ1ZXIgamVkZW4gZWluemVsbiAKKyAgICAgVGVzdElnbm9yZVNpbXBsZSgpIGF1Znp1cnVmZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDEsIGZhbGxzIGVzIG1pbmRlc3RlbnMgZWluZSBVZWJlcmVpbnN0aW1tdW5nZW4gdm9uIGFyZyB1bmQgZGVyCisgICAgIElnbm9yaWVyZS1MaXN0ZSBkZXMgU3BpZWxlcnMgZ2lidC4KKyAgICAgMCwgc29uc3QuCisKK0JFSVNQSUVMOgorICAgICBpZiAoIXRoaXNfcGxheWVyKCktPlRlc3RJZ25vcmVTaW1wbGUoKHsiYW5keSJ9KSkpCisgICAgICAgdGVsbF9vYmplY3QodGhpc19wbGF5ZXIoKSwgIkFuZHkgdGVpbHQgRGlyIG1pdDogSGFsbG8hXG4iKTsKKworICAgICAvLyBCZWlzcGllbCBmdWVyIGVpbmUgSWdub3JlLUNoZWNrIGZ1ZXIgQWt0aW9uIChrcmF0emVuKSBmdWVyIGVpbmVuCisgICAgIC8vIFNwaWVsZXIgKHRoaXNfcGxheWVyKCkpIGFuIGVpbmVtIGFuZGVyZW4gU3BpZWxlciAodGFyZ2V0KQorICAgICBpZiAoIXRhcmdldC0+VGVzdElnbm9yZVNpbXBsZShnZXR1aWQodGhpc19wbGF5ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHVpZCh0aGlzX3BsYXllcigpKSsiLmtyYXR6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dWlkKHRoaXNfcGxheWVyKCkpKyIua3JhdHplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5rcmF0eiIsICIua3JhdHplIn0pKSkgeworICAgICAgIHRlbGxfb2JqZWN0KHRhcmdldCwgdGhpc19wbGF5ZXIoKS0+TmFtZSgpKyIga3JhdHp0IGRpY2guXG4iKTsKKyAgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLCAiRHUga3JhdHp0ICIrdGFyZ2V0LT5OYW1lKCkrIi5cbiIpOworICAgICB9IGVsc2UKKyAgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLCB0YXJnZXQtPk5hbWUoKSsiIGlnbm9yaWVydCBkaWNoLlxuIik7CisKKyAgICAgLy8gYWxsdW1mYXNzZW5kZXIgSWdub3JpZXItQ2hlY2sgaW4gZWluZXIgR2lsZGUgKEtsZXJ1cykgYXVmCisgICAgIC8vIGVpbmUgQWt0aW9uIChrdXJpZXJlbikgZnVlciBlaW5lbiBiZXN0aW1tdGVuIFNwaWVsZXIgKGRlbiBjYXN0ZXIpCisgICAgIC8vIGFuIGVpbmVtIHp1IGt1cmllcmVuZGVuIFNwaWVsZXIgKHRhcmdldCkKKyAgICAgaWYgKHRhcmdldC0+VGVzdElnbm9yZVNpbXBsZSgoe2dldHVpZChjYXN0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dWlkKGNhc3RlcikrIi5rdXJpZXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHVpZChjYXN0ZXIpKyIua3VyaWVyZS5rbGVydXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5rdXJpZXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIua3VyaWVyZS5rbGVydXMifSkpKQorICAgICAgIHRlbGxfb2JqZWN0KGNhc3RlciwgYnJlYWtfc3RyaW5nKAorICAgICAgICAgdGFyZ2V0LT5OYW1lKCkrIiBpZ25vcmllcnQgZGVpbmVuIFZlcnN1Y2guIiwgNzgpKTsKKworU0lFSEUgQVVDSDoKKyAgICAgUF9JR05PUkUsIEFkZElnbm9yZSwgUmVtb3ZlSWdub3JlLCBUZXN0SWdub3JlLCAvc3RkL3BsYXllci9jb21tLmMKKworMjYuMDQuMjAxNCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1Rlc3RMaW1pdFZpb2xhdGlvbiBiL2RvYy9sZnVuL1Rlc3RMaW1pdFZpb2xhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQ0Mjk5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vVGVzdExpbWl0VmlvbGF0aW9uCkBAIC0wLDAgKzEsMjEgQEAKK1Rlc3RMaW1pdFZpb2xhdGlvbigpCitGVU5LVElPTjoKKyAgICAgIHN0YXR1cyBUZXN0TGltaXRWaW9sYXRpb24obWFwcGluZyBjaGVjaykKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9hdHRyaWJ1dGVzLmMKKw0KK1BBUkFNRVRFUjoNCisgICAgIGNoZWNrCS0gTWFwcGluZyBtaXQgQXR0cmlidXRlbjogKFs8YXR0cj46PHdlcnQ+XSkNCisKK0JFU0NIUkVJQlVORzoKKyAgICAgUHJ1ZWZ0LCBvYiBkaWUgU3VtbWUgZGVyIGluIGNoZWNrIGVudGhhbHRlbmVuIE1vZGlmaWthdG9yZW4gZGllIFN1bW1lCisgICAgIGFsbGVyIE1vZGlmaWthdG9yZW4gaW0gU3BpZWxlciB1ZWJlciBkZW4genVnZWxhc3NlbmVuIEdyZW56d2VydCBoZWJ0LgorICAgICAKK1NJRUhFIEFVQ0g6CisgICAgIFF1ZXJ5QXR0cmlidXRlKCksIFF1ZXJ5UmVhbEF0dHJpYnV0ZSgpLCBRdWVyeUF0dHJpYnV0ZU9mZnNldCgpLA0KKyAgICAgU2V0QXR0cigpLCBTZXRBdHRyaWJ1dGUoKSwgU2V0UmVhbEF0dHJpYnV0ZSgpLCBVcGRhdGVBdHRyaWJ1dGVzKCksDQorICAgICBQX0FUVFJJQlVURVMsIFBfQVRUUklCVVRFU19PRkZTRVRTLCBQX0FUVFJJQlVURVNfTU9ESUZJRVIsDQorICAgICBQX1hfQVRUUl9NT0QsIFBfTV9BVFRSX01PRCwgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jDQorCisxMy5KdW4uMjAwNCwgTXVhZGliClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vVHJpZ2dlckV2ZW50IGIvZG9jL2xmdW4vVHJpZ2dlckV2ZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDA4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9UcmlnZ2VyRXZlbnQKQEAgLTAsMCArMSw1OSBAQAorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBpbnQgVHJpZ2dlckV2ZW50KHN0cmluZyBlaWQsIG1peGVkIGRhdGEpOworCitERUZJTklFUlQgSU46CisgICAgIC9wL2RhZW1vbi9ldmVudGQuYworREVLTEFSSUVSVCBJTjoKKyAgICAgL3N5cy9ldmVudHMuaAorCitBUkdVTUVOVEU6CisgICAgIHN0cmluZyBlaWQsCisgICAgICAgRGllIElEIGRlcyBFdmVudHMsIGRlciBhdXNnZWxvZXN0IHdlcmRlbiBzb2xsLgorICAgICAgIERhIGRpZXNlciBTdHJpbmcgZnVlciBhbGxlIEV2ZW50cyBqZXdlaWxzIGVpbmRldXRpZyBzZWluIG11c3MsIAorICAgICAgIGVtcGZpZWhsdCBlcyBzaWNoLCBmdWVyIGVpZ2VuZSBFdmVudHMgei5CLiBhbHMgUHJhZWZpeCBkZW4gZWlnZW5lbiAKKyAgICAgICBNYWdpZXJuYW1lbiB6dSBuZWhtZW4sIHouQi4gInplc3N0cmFfdnVsa2FuYXVzYnJ1Y2giLgorICAgICAgIEFDSFRVTkc6IElEcywgZGllIG1pdCAnZXZ0X2xpYl8nIGJlZ2lubmVuLCBzaW5kIEFVU1NDSExJRVNTTElDSCBkZXIKKyAgICAgICBNdWRsaWIgdm9yYmVoYWx0ZW4hCisKKyAgICAgbWl4ZWQgZGF0YSwKKyAgICAgICBEYXRlbiwgZGllIGplZGVyIExhdXNjaGVyIHVlYmVyZ2ViZW4gYmVrb21tdC4gS2FubiBlaW4gYmVsaWViaWdlcgorICAgICAgIERhdGVudHlwIHNlaW4uIEdnZi4gZWluIE1hcHBpbmcgb2RlciBBcnJheSBiZW51dHplbi4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEZXIgRXZlbnQgbWl0IGRlciBJRCAnZWlkJyB3aXJkIGF1c2dlbG9lc3QuIE1pdCBrdXJ6ZXIgVmVyem9lZ2VydW5nCisgICAgIChtZWlzdCAwLTJzKSB3ZXJkZW4gYWxsZSBmdWVyICdlaWQnIHJlZ2lzdHJpZXJ0ZW4gTGF1c2NoZXIgZHVyY2ggQXVmcnVmCisgICAgIGVpbmVyIEZ1bmt0aW9uIGluIGlobmVuIGluZm9ybWllcnQ6CisgICAgIGxpc3RlbmVyLT5mdW4oZWlkLCB0cmlnZ2Vyb2IsIGRhdGEpOworICAgICAndHJpZ2dlcm9iJyBpc3QgaGllcmJlaSBkYXMgT2JqZWt0LCB3ZWxjaGUgVHJpZ2dlckV2ZW50KCkgZ2VydWZlbiBoYXQsCisgICAgICdkYXRhJyBkYXMsIHdhcyBkYXMgdHJpZ2dlcm5kZSBPYmpla3RlIGFscyBEYXRlbiB3ZWl0ZXJ2ZXJ0ZWlsZW4gbW9lY2h0ZS4KKyAgICAgRGllIGVpbnplbG5lbiBmdW4oKSBpbiBkZW4gbGF1c2NoZW5kZW4gT2JqZWt0ZW4gbXVlc3NlbiB3aXNzZW4sIHdhcyBzaWUKKyAgICAgbWl0ICdkYXRhJyBhbmZhbmdlbiBzb2xsZW4uIDstKQorCitSVWVDS0dBQkVXRVJUOgorICAgICAxIGZ1ZXIgRXJmb2xnLCA8PTAgZnVlciBNaXNzZXJmb2xnLgorICAgICAxICAgLSBFcmZvbGcsIEV2ZW50ICdlaWQnIHd1cmRlIGF1c2dlbG9lc3QuCisgICAgIC0xICAtIGZhbHNjaGUgQXJndW1lbnRlIHd1cmRlbiB1ZWJlcmdlYmVuCisgICAgIC0yICAtIG5pY2h0LW9lZmZlbnRsaWNoZXIgRXZlbnQgdW5kIGRhcyB0cmlnZ2VybmRlIE9iamVrdCB3dXJkZSBuaWNodAorICAgICAgICAgICBmdWVyIGRpZXNlbiBFdmVudCBmcmVpZ2VnZWJlbiAobW9tZW50YW4gZ2lidCBlcyBub2NoIGtlaW5lCisgICAgICAgICAgIG5pY2h0LW9lZmZlbnRsaWNoZW4gRXZlbnRzKQorICAgICAtMyAgLSBFdmVudCAnZWlkJyBleGlzdGllcnQgbmljaHQsIGQuaC4gZXMgZ2lidCBrZWluZSBMYXVzY2hlci4KKyAgICAgLTQgIC0gRXMgZ2lidCB6dXZpZWxlIG5pY2h0IHZlcmFyYmVpdGV0ZSBFdmVudHMuCisKK0JFTUVSS1VOR0VOOgorCisKK0JFSVNQSUVMRToKKyAgICAgMS4gRWluIFdhZWNodGVyIHdpcmQgYW5nZWdyaWZmZW46CisgICAgICAgIEVWRU5URC0+VHJpZ2dlckV2ZW50KCJ4YW5kX2hvbHpmYWVsbGVybGFnZXJfYW5ncmlmZiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWyJhbmdyZWlmZXIiOiBlbmVteSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3J0IjogZW52aXJvbm1lbnQodGhpc19vYmplY3QoKSkgXSkgKTsKKyAgICAgICAgQWxsZSBhbmRlcmVuIGFuZ2VtZWxkZXRlbiBXYWVjaHRlciBkZXIgTGFnZXJzIHdlcmRlbiBudW4gaW5mb3JtaWVydAorICAgICAgICB1bmQga29lbm5lbiBpaHJlcnNlaXRzIHJlYWdpZXJlbiAoZGVtIGVyc3RlbiBXYWVjaHRlciB6dWhpbGZlIGtvbW1lbgorICAgICAgICBvZGVyIGF1Y2ggZGllIExhZ2VydG9yZSBzY2hsaWVzc2VuKS4KKworU0lFSEUgQVVDSDoKKyAgICAgZXZlbnRzLCBldmVudGQsIFVucmVnaXN0ZXJFdmVudCgpLCBSZWdpc3RlckV2ZW50KCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMTUuMDguMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vVW5yZWdpc3RlckV2ZW50IGIvZG9jL2xmdW4vVW5yZWdpc3RlckV2ZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTM2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9VbnJlZ2lzdGVyRXZlbnQKQEAgLTAsMCArMSw0OSBAQAorCitGVU5LVElPTjoKKyAgICAgaW50IFVucmVnaXN0ZXJFdmVudChzdHJpbmcgZWlkLCBvYmplY3QgbGlzdGVuZXIpOworCitERUZJTklFUlQgSU46CisgICAgIC9wL2RhZW1vbi9ldmVudGQuYworREVLTEFSSUVSVCBJTjoKKyAgICAgL3N5cy9ldmVudHMuaAorCitBUkdVTUVOVEU6CisgICAgIHN0cmluZyBlaWQsCisgICAgICAgRGllIElEIGRlcyBFdmVudHMsIHZvbSBkZW0gbWFuIHNpY2ggYWJtZWxkZW4gd2lsbC4KKyAgICAgb2JqZWN0IGxpc3RlbmVyLAorICAgICAgIERhcyBPYmpla3QsIGRhcyBhbHMgTGF1c2NoZXIgYXVzZ2V0cmFnZW4gd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGFzIE9iamVrdCAnbGlzdGVuZXInIHdpcmQgYWxzIExhdXNjaGVyIGRpZXNlcyBFdmVudHMgYXVzZ2V0cmFnZW4uIEFiCisgICAgIGRpZXNlbSBNb21lbnQgd2lyZCBlcyBiZWkgRXZlbnRzIHZvbSBUeXAgJ2VpZCcgbmljaHQgbWVociBpbmZvcm1pZXJ0LiAgICAgCisKKyAgICAgSGF0IGRlciBFdmVudCAnZWlkJyBpbSBBbnNjaGx1c3Mga2VpbmUgTGF1c2NoZXIgbWVociwgd2lyZCBlciBpbXBsaXppdAorICAgICBnZWxvZXNjaHQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDEgZnVlciBFcmZvbGcsIDw9MCBmdWVyIE1pc3NlcmZvbGcuCisgICAgIDEgICAtIEVyZm9sZywgJ2xpc3RlbmVyJyB3dXJkZSBlaW5nZXRyYWdlbi4KKyAgICAgLTEgIC0gZmFsc2NoZSBBcmd1bWVudGUgdWViZXJnZWJlbgorICAgICAtMiAgLSAnbGlzdGVuZXInIGlzdCBuaWNodCBmdWVyICdlaWQnIHJlZ2lzdHJpZXJ0LgorICAgIAorQkVNRVJLVU5HRU46CisgICAgIFdlbm4gc2ljaCBlaW4gT2JqZWt0IHZvciBaZXJzdG9lcnVuZyBuaWNodCBhYm1lbGRldCwgd2lyZCBlcyBnZ2YuIGJlaW0KKyAgICAgbmFlY2hzdGVuIEF1ZnRyZXRlbiB2b24gJ2VpZCcgYXV0b21hdGlzY2ggYXVzZ2V0cmFnZW4uCisgICAgIEZhbGxzIEJsdWVwcmludHMgbmFjaCBOZXVsYWRlbiBuaWNodCBhdXRvbWF0aXNjaCBhbmdlbWVsZGV0IHNlaW4gc29sbGVuLAorICAgICBzb2xsdGVuIHNpZSBzaWNoIGltIHJlbW92ZSgpIGV4cGxpeml0IGFibWVsZGVuLgorCitCRUlTUElFTEU6CisgICAgIDEuIEVpbiBPYmpla3QgbW9lY2h0ZSBuaWNodCBtZWhyIHVlYmVyIFNwaWVsZXJ0b2RlIGluZm9ybWllcnQgd2VyZGVuOgorICAgICAgICAgIEVWRU5URC0+VW5yZWdpc3RlckV2ZW50KEVWVF9MSUJfUExBWUVSX0RFQVRILCB0aGlzX29iamVjdCgpKTsKKworICAgICAyLiBFaW4gT2JqZWt0IG1vZWNodGUgc2ljaCBiZWkgWmVyc3RvZXJ1bmcgYWJtZWxkZW46CisgICAgICAgdmFyYXJncyBpbnQgcmVtb3ZlKGludCBzaWxlbnQpIHsKKyAgICAgICAgICAgLi4uCisgICAgICAgICAgIEVWRU5URC0+VW5yZWdpc3RlckV2ZW50KCJ6ZXNzdHJhX3Z1bGthbmF1c2JydWNoIix0aGlzX29iamVjdCgpKTsKKyAgICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIGV2ZW50cywgZXZlbnRkLCBVbnJlZ2lzdGVyRXZlbnQoKSwgUmVnaXN0ZXJFdmVudCgpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE1LjA4LjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1VucmVnaXN0ZXJIZWxwZXJOUEMgYi9kb2MvbGZ1bi9VbnJlZ2lzdGVySGVscGVyTlBDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzg0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9VbnJlZ2lzdGVySGVscGVyTlBDCkBAIC0wLDAgKzEsNDUgQEAKK1VucmVnaXN0ZXJIZWxwZXJOUEMoKQorRlVOS1RJT046CisgICAgIHB1YmxpYyBpbnQgVW5yZWdpc3RlckhlbHBlck5QQyhvYmplY3QgbnBjKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIG9iamVjdCBucGMKKyAgICAgICBPYmpla3QgZGVzIGhlbGZlbmRlbiBOUEMsIGRlciBhYmdlbWVsZGV0IHdlcmRlbiBzb2xsLgorCitCRVNDSFJFSUJVTkc6CisgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24gd2lyZCBlaW4gZWluZW0gU3BpZWxlciBoZWxmZW5kZXIgTlBDIGltIFNwaWVsZXIKKyAgICAgd2llZGVyIGFiZ2VtZWxkZXQsIHdlbm4gZGllc2VyIGRlbSBTcGllbGVyIGFiIGpldHp0IG5pY2h0IG1laHIgaGlsZnQuCisKKyAgICAgV2VubiBlaW4gSGVsZmVyLU5QQyB6ZXJzdG9lcnQgd2lyZCwgaXN0IGRlciBBdWZydWYgbmljaHQgbm9ldGlnLgorICAgICBCbGVpYnQgZGFzIE9iamVrdCBkZXMgTlBDIGFiZXIgZXhpc3RlbnQsIGJpdHRlIGF1ZiBqZWRlbiBGYWxsIHdpZWRlcgorICAgICBvcmRlbnRsaWNoIGFibWVsZGVuLCBkYSBhbnNvbnN0ZW4gZ2dmLiBkZXIgU3BpZWxlciB1bm5vZXRpZyBibG9ja2llcnQKKyAgICAgd2lyZC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBkaWUgQWJtZWxkdW5nIGVyZm9sZ3JlaWNoIHdhci4KKyAgICAgMCBzb25zdCwgei5CLiB3ZW5uIGRlciBOUEMgZ2FyIG5pY2h0IGFscyBIZWxmZXIgcmVnaXN0cmllcnQgd2FyLgorCitCRU1FUktVTkdFTjoKKyAgICAgRGllc2UgRnVua3Rpb24gc2V0enQgYmVpIGRlciBFcmZvbGcgZGllIFByb3BlcnR5IFBfSEVMUEVSX05QQyBpbiA8bnBjPgorICAgICBhdWYgMC4KKworQkVJU1BJRUxFOgorICAgICAxLiBFaW4gTlBDLCBkZXIgZGVtIFNwaWVsZXIgbmljaHQgbWVociBoZWxmZW4gd2lsbCB1bmQgbm9ybWFsZXJ3ZWlzZW4gaW0KKyAgICAgICAgUmF1bSB2ZXJibGVpYmVuIHNvbGw6CisgICAgIHRlbGxfb2JqZWN0KHNwaWVsZXIsICJJY2ggbWFnIERpY2ggbmljaHQgbWVociwgRHUgYmlzdCBkb29mIVxuIik7CisgICAgIGlmIChzcGllbGVyLT5VbnJlZ2lzdGVySGVscGVyTlBDKHRoaXNfb2JqZWN0KCkpICE9IDEpIHsKKyAgICAgICAvLyBkYXMgaXN0IGphIGJsb2VkLi4uCisgICAgICAgcmVtb3ZlKDApOworICAgICB9CisgICAgIGVsc2UgeworICAgICAgIHRlbGxfcm9vbShlbnZpcm9ubWVudCgpLAorICAgICAgICAgICBOYW1lKCkrIiBkcmVodCAiICtzcGllbGVyLT5OYW1lKFdFTSkgKyAiIHNjaG1vbGxlbmQgZGVuIFJ1ZWNrZW4gIgorICAgICAgICAgICAienUuXG4iKTsKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgIFVucmVnaXN0ZXJIZWxwZXJOUEMoKQorICAgIFBfSEVMUEVSX05QQwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vVW5yZWdpc3RlckhlbHBlck9iamVjdCBiL2RvYy9sZnVuL1VucmVnaXN0ZXJIZWxwZXJPYmplY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmZDg0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1VucmVnaXN0ZXJIZWxwZXJPYmplY3QKQEAgLTAsMCArMSw0NyBAQAorRlVOS1RJT046CisgICAgIGludCBVbnJlZ2lzdGVySGVscGVyT2JqZWN0KG9iamVjdCBoZWxwZXIsIGludCB0eXBlKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9oZWxwZXJzLmMKKworQVJHVU1FTlRFOgorICAgICBvYmplY3QgaGVscGVyCisgICAgICAgRGFzIE9iamVrdCwgZGFzIGFscyBIaWxmc29iamVrdCBkZXJlZ2lzdHJpZXJ0IHdlcmRlbiBzb2xsLgorICAgICBpbnQgdHlwZQorICAgICAgIEhlbGZlcnR5cCwgZWluZXIgZGVyIGluIC9zeXMvbGl2aW5nL2hlbHBlcnMuaCBkZWZpbmllcnRlbiBUeXBlbjoKKyAgICAgICAtIEhFTFBFUl9UWVBFX0FFUklBTCBmdWVyIGRpZSBGbHVnLS9TZWdlbHVudGVyc3R1ZXR6dW5nCisgICAgICAgLSBIRUxQRVJfVFlQRV9BUVVBVElDIGZ1ZXIgVGF1Y2h1bnRlcnN0dWV0enVuZworCitCRVNDSFJFSUJVTkc6CisgICAgIERhcyBhbHMgSGlsZnNvYmpla3QgZnVlciBiZXN0aW1tdGUgQWt0aXZpdGFldGVuIHdpZSB6dW0gQmVpc3BpZWwgVGF1Y2hlbgorICAgICBvZGVyIEZsaWVnZW4gYmVpIGVpbmVtIExlYmV3ZXNlbiByZWdpc3RyaWVydGUgT2JqZWt0ICJoZWxwZXIiIG1lbGRldAorICAgICBzaWNoIGJlaSBkaWVzZW0gYWIuCisgICAgIEhpbndlaXM6IGZ1ZXIgZWluZSB0ZW1wb3JhZXIgZ3VlbHRpZ2UgIk5pY2h0LVp1c3RhZW5kaWdrZWl0IiBrYWVtZSBhdWNoCisgICAgIGluIEZyYWdlLCBpbiBkaWVzZXIgWmVpdCBlaW5mYWNoICIwIiB6dXJ1ZWNrenVnZWJlbiwgc3RhdHQgc2ljaAorICAgICBrb21wbGV0dCBhYnp1bWVsZGVuLgorCitSVUVDS0dBQkVXRVJURToKKyAgICAgIDEgIE9iamVrdCB3dXJkZSBlcmZvbGdyZWljaCBhdXNnZXRyYWdlbiAoSEVMUEVSX1NVQ0NFU1MpCisgICAgIC0xICBhbmdlZ2ViZW5lcyBIaWxmc29iamVrdCBleGlzdGllcnQgbmljaHQgKEhFTFBFUl9OT19DQUxMQkFDS19PQkpFQ1QpCisgICAgIC0zICBhbmdlZ2ViZW5lcyBIaWxmc29iamVrdCB3YXIgZ2FyIG5pY2h0IGFuZ2VtZWxkZXQKKyAgICAgICAgIChIRUxQRVJfTk9USElOR19UT19VTlJFR0lTVEVSKQorCitCRUlTUElFTDoKKyAgICAgRWluZSBsdWZ0Z2VmdWVsbHRlIEJsYXNlIGhhdHRlIHNpY2ggYWxzIFRhdWNoLUhlbGZlciBhbSBTcGllbGVyCisgICAgIGFuZ2VtZWxkZXQsIGlzdCBqZXR6dCBhYmVyIHZlcmJyYXVjaHQgdW5kIG1lbGRldCBzaWNoIGRhaGVyIGFiOgorCisgICAgIC8vIEF1c3RyYWdlbiBpbSBTcGllbGVyb2JqZWt0CisgICAgIHZvaWQgQmxhc2VBdXN0cmFnZW4oKSB7CisgICAgICAgWy4uLl0KKyAgICAgICBpZiAoIFRQLT5VbnJlZ2lzdGVySGVscGVyT2JqZWN0KE1FLCBIRUxQRVJfVFlQRV9BUVVBVElDKQorICAgICAgICAgICAgPT0gSEVMUEVSX1NVQ0NFU1MgKQorICAgICAgICAgcmVtb3ZlKCk7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgRnVua3Rpb25lbjogIFJlZ2lzdGVySGVscGVyT2JqZWN0KCkKKyAgICAgUHJvcGVydGllczogIFBfSEVMUEVSX09CSkVDVFMsIFBfQUVSSUFMX0hFTFBFUlMsIFBfQVFVQVRJQ19IRUxQRVJTCisgICAgIFNvbnN0aWdlczogICAvc3lzL2xpdmluZy9oZWxwZXJzLmgKKworMTkuMDIuMjAxMyBBcmF0aG9ybgorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9VbndlYXIgYi9kb2MvbGZ1bi9VbndlYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0YzdmYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1Vud2VhcgpAQCAtMCwwICsxLDM4IEBACitVbndlYXIoKQorRlVOS1RJT046CisgICAgIHB1YmxpYyBpbnQgVW53ZWFyKG9iamVjdCBvYikgCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvY2xvdGhpbmcuYworCitBUkdVTUVOVEU6CisgICAgIG9iamVjdCBvYgorICAgICAgIERpZSBSdWVzdHVuZyBvZGVyIEtsZWlkdW5nLCBkaWUgYXVzZ2V6b2dlbiB3aXJkLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERhcyBMZWJld2VzZW4sIGluIGRlbSBkaWVzZSBGdW5rdGlvbiBnZXJ1ZmVuIHdpcmQsIHppZWh0IGRpZSBSdWVzdHVuZworICAgICBvZGVyIGRhcyBLbGVpZHVuZ3NzdHVlY2sgPG9iPiBhdXMuCisgICAgIEFCRVI6ICdBdXN6aWVoZW4nIGJlZGV1dGV0IGluIGRpZXNlbSBLb250ZXh0IGxlZGlnbGljaCwgZGFzcyBkaWUKKyAgICAgUnVlc3R1bmcvS2xlaWR1bmcgYXVzIFBfQVJNT1VSUyBiencuIFBfQ0xPVEhJTkcgYXVzZ2V0cmFnZW4gd2lyZC4gRXMKKyAgICAgZmluZGVuIHp1ciBaZWl0IGtlaW5lIFBydWVmdW5nZW4gc3RhdHQsIG9iIGRhcyBMZWJld2VzZW4gZGVuIEdlZ2Vuc3RhbmQKKyAgICAgdWViZXJoYXVwdCBhdXN6aWVoZW4ga2Fubi4gR2VuYXVzb3dlbmlnIHdlcmRlbiBGdW5rdGlvbmVuIHdpZQorICAgICBJbmZvcm1VbndlYXIoKS9SZW1vdmVGdW5jKCkgZ2VydWZlbiBvZGVyIGV0d2FpZ2UgU3RhdC1Cb25pIGRlYWt0aXZpZXJ0LgorCisgICAgIERpZSBGdW5rdGlvbiBpc3QgbnVyIGRhenUgZ2VkYWNodCwgaW0gWnVnZSBkZXMgQXVzemllaGVucyBlaW5lcyBPYmpla3RzCisgICAgIHZvbiBkaWVzZW0gaW0gTGViZXdlc2VuIGdlcnVmZW4genUgd2VyZGVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICAxLCB3ZW5uIGRhcyBBdXN6aWVoZW4gZXJmb2xncmVpY2ggd2FyLgorICAgICAwIHNvbnN0LgorCitCRU1FUktVTkdFTjoKKyAgICAgTmljaHQgdm9uIEhhbmQgYXVmcnVmZW4sIGVzIHNlaSBkZW5uIG1hbiB3ZWlzcyBnZW5hdSwgd2FzIG1hbiB0dXQuIFVuZCBhbQorICAgICBiZXN0ZW4gYXVjaCBkYW5uIG5pY2h0LgorCitTSUVIRSBBVUNIOgorICAgICBXZWFyKCksIFdlYXJBcm1vdXIoKSwgV2VhckNsb3RoaW5nKCksIFVud2VhckFybW91cigpLCBVbndlYXJDbG90aGluZygpCisgICAgIFBfQ0xPVEhJTkcsIFBfQVJNT1VSUworICAgICBGaWx0ZXJDbG90aGluZygpLCBGaWx0ZXJBcm1vdXJzKCkKKworWlVMRVRaVCBHRUFlTkRFUlQ6CisxNC4wMy4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9VbndlYXJBcm1vdXIgYi9kb2MvbGZ1bi9VbndlYXJBcm1vdXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiNTVkYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1Vud2VhckFybW91cgpAQCAtMCwwICsxLDM4IEBACitVbndlYXJBcm1vdXIoKQorRlVOS1RJT046CisgICAgIHB1YmxpYyBpbnQgVW53ZWFyQXJtb3VyKG9iamVjdCBvYikgCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvY2xvdGhpbmcuYworCitBUkdVTUVOVEU6CisgICAgIG9iamVjdCBvYgorICAgICAgIERpZSBSdWVzdHVuZywgZGllIGF1c2dlem9nZW4gd2lyZC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEYXMgTGViZXdlc2VuLCBpbiBkZW0gZGllc2UgRnVua3Rpb24gZ2VydWZlbiB3aXJkLCB6aWVodCBkaWUgUnVlc3R1bmcKKyAgICAgPG9iPiBhdXMuCisgICAgIEFCRVI6ICdBdXN6aWVoZW4nIGJlZGV1dGV0IGluIGRpZXNlbSBLb250ZXh0IGxlZGlnbGljaCwgZGFzcyBkaWUKKyAgICAgUnVlc3R1bmcvS2xlaWR1bmcgYXVzIFBfQVJNT1VSUyBhdXNnZXRyYWdlbiB3aXJkLiBFcyBmaW5kZW4genVyIFplaXQKKyAgICAga2VpbmUgUHJ1ZWZ1bmdlbiBzdGF0dCwgb2IgZGFzIExlYmV3ZXNlbiBkZW4gR2VnZW5zdGFuZCB1ZWJlcmhhdXB0CisgICAgIGF1c3ppZWhlbiBrYW5uLiBHZW5hdXNvd2VuaWcgd2VyZGVuIEZ1bmt0aW9uZW4gd2llCisgICAgIEluZm9ybVVud2VhcigpL1JlbW92ZUZ1bmMoKSBnZXJ1ZmVuIG9kZXIgZXR3YWlnZSBTdGF0LUJvbmkgZGVha3RpdmllcnQuCisKKyAgICAgRGllIEZ1bmt0aW9uIGlzdCBudXIgZGF6dSBnZWRhY2h0LCBpbSBadWdlIGRlcyBBdXN6aWVoZW5zIGVpbmVzIE9iamVrdHMKKyAgICAgdm9uIGRpZXNlbSBpbSBMZWJld2VzZW4gZ2VydWZlbiB6dSB3ZXJkZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDEsIHdlbm4gZGFzIEF1c3ppZWhlbiBlcmZvbGdyZWljaCB3YXIuCisgICAgIDAgc29uc3QuCisKK0JFTUVSS1VOR0VOOgorICAgICBOaWNodCB2b24gSGFuZCBhdWZydWZlbiwgZXMgc2VpIGRlbm4gbWFuIHdlaXNzIGdlbmF1LCB3YXMgbWFuIHR1dC4gVW5kIGFtCisgICAgIGJlc3RlbiBhdWNoIGRhbm4gbmljaHQuCisKK1NJRUhFIEFVQ0g6CisgICAgIFdlYXIoKSwgV2VhckFybW91cigpLCBXZWFyQ2xvdGhpbmcoKSwgVW53ZWFyKCksIFVud2VhckNsb3RoaW5nKCkKKyAgICAgUF9DTE9USElORywgUF9BUk1PVVJTCisgICAgIEZpbHRlckNsb3RoaW5nKCksIEZpbHRlckFybW91cnMoKQorCitaVUxFVFpUIEdFQWVOREVSVDoKKzE0LjAzLjIwMDksIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1Vud2VhckNsb3RoaW5nIGIvZG9jL2xmdW4vVW53ZWFyQ2xvdGhpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1NjY1NAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1Vud2VhckNsb3RoaW5nCkBAIC0wLDAgKzEsMzggQEAKK1Vud2VhckNsb3RoaW5nKCkKK0ZVTktUSU9OOgorICAgICBwdWJsaWMgaW50IFVud2VhckNsb3RoaW5nKG9iamVjdCBvYikgCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvY2xvdGhpbmcuYworCitBUkdVTUVOVEU6CisgICAgIG9iamVjdCBvYgorICAgICAgIERhcyBLbGVpZHVuZ3NzdHVjaywgZGFzIGF1c2dlem9nZW4gd2lyZC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEYXMgTGViZXdlc2VuLCBpbiBkZW0gZGllc2UgRnVua3Rpb24gZ2VydWZlbiB3aXJkLCB6aWVodCBkYXMKKyAgICAgS2xlaWR1bmdzc3R1ZWNrIDxvYj4gYXVzLgorICAgICBBQkVSOiAnQXVzemllaGVuJyBiZWRldXRldCBpbiBkaWVzZW0gS29udGV4dCBsZWRpZ2xpY2gsIGRhc3MgZGllCisgICAgIFJ1ZXN0dW5nL0tsZWlkdW5nIGF1cyBQX0NMT1RISU5HIGF1c2dldHJhZ2VuIHdpcmQuIEVzIGZpbmRlbiB6dXIgWmVpdAorICAgICBrZWluZSBQcnVlZnVuZ2VuIHN0YXR0LCBvYiBkYXMgTGViZXdlc2VuIGRlbiBHZWdlbnN0YW5kIHVlYmVyaGF1cHQKKyAgICAgYXVzemllaGVuIGthbm4uIEdlbmF1c293ZW5pZyB3ZXJkZW4gRnVua3Rpb25lbiB3aWUKKyAgICAgSW5mb3JtVW53ZWFyKCkvUmVtb3ZlRnVuYygpIGdlcnVmZW4uCisKKyAgICAgRGllIEZ1bmt0aW9uIGlzdCBudXIgZGF6dSBnZWRhY2h0LCBpbSBadWdlIGRlcyBBdXN6aWVoZW5zIGVpbmVzIE9iamVrdHMKKyAgICAgdm9uIGRpZXNlbSBpbSBMZWJld2VzZW4gZ2VydWZlbiB6dSB3ZXJkZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDEsIHdlbm4gZGFzIEF1c3ppZWhlbiBlcmZvbGdyZWljaCB3YXIuCisgICAgIDAgc29uc3QuCisKK0JFTUVSS1VOR0VOOgorICAgICBOaWNodCB2b24gSGFuZCBhdWZydWZlbiwgZXMgc2VpIGRlbm4gbWFuIHdlaXNzIGdlbmF1LCB3YXMgbWFuIHR1dC4gVW5kIGFtCisgICAgIGJlc3RlbiBhdWNoIGRhbm4gbmljaHQuCisKK1NJRUhFIEFVQ0g6CisgICAgIFdlYXIoKSwgV2VhckFybW91cigpLCBXZWFyQ2xvdGhpbmcoKSwgVW53ZWFyKCksIFVud2VhckFybW91cigpCisgICAgIFBfQ0xPVEhJTkcsIFBfQVJNT1VSUworICAgICBGaWx0ZXJDbG90aGluZygpLCBGaWx0ZXJBcm1vdXJzKCkKKworWlVMRVRaVCBHRUFlTkRFUlQ6CisxNC4wMy4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9VbndpZWxkRnVuYyBiL2RvYy9sZnVuL1Vud2llbGRGdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDkyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9VbndpZWxkRnVuYwpAQCAtMCwwICsxLDUyIEBACitVbndpZWxkRnVuYygpCisKK0ZVTktUSU9OOgorICAgICBpbnQgVW53aWVsZEZ1bmMob2JqZWN0IHdlYXBvbiwgaW50IGluZm8sIG9iamVjdCB1c2VyKTsKKworREVGSU5JRVJUIElOOgorICAgICBlaWdlbmVuIE9iamVrdGVuLCBmdWVyIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgd2VhcG9uIChvYmplY3QpCisgICAgICAgICAgRGllIFdhZmZlLCBkaWUgd2VnZ2VzdGVja3Qgd2VyZGVuIHNvbGwuCisgICAgIGluZm8gKGludCkKKyAgICAgICAgICBCZWkgKGluZm8mTV9TSUxFTlQpIHdpcmQga2VpbmUgTWVsZHVuZyB1ZWJlciBkYXMgV2Vnc3RlY2tlbgorICAgICAgICAgIGF1c2dlZ2ViZW4uCisgICAgICAgICAgQmVpIChpbmZvJk1fTk9DSEVDSykgd2lyZCBkaWUgV2FmZmUgYXVjaCB3ZWdnZXN0ZWNrdCwgd2VubgorICAgICAgICAgIHNpZSB2ZXJmbHVjaHQgaXN0LiBEaWUgdHJpdHQgaW5zYmVzb25kZXJlIGRhbm4gYXVmLCB3ZW5uIGRlcgorICAgICAgICAgIFNwaWVsZXIsIGRlciBkaWUgV2FmZmUgYmVudXR6dCwgc3RpcmJ0IHVuZCBkaWUgV2FmZmUgaW4KKyAgICAgICAgICBkaWUgTGVpY2hlIGJld2VndCB3aXJkLgorICAgICB1c2VyIChvYmplY3QpCisgICAgICAgICAgRGFzIExlYmV3ZXNlbiwgd2VsY2hlcyBkaWUgV2FmZmUgZ2VyYWRlIGdlenVlY2t0IGhhdCB1bmQgc2llIG51bgorICAgICAgICAgIGF1c3ppZWhlbiB3aWxsLgorCitCRVNDSFJFSUJVTkc6CisgICAgIEhpZXIga29lbm5lbiB6dXNhZXR6bGljaGUgQWJmcmFnZW4gdm9yZ2Vub21tZW4gd2VyZGVuLCBvYiBzaWNoIGRpZQorICAgICBXYWZmZSA8d2VhcG9uPiB3ZWdzdGVja2VuIGxhZXNzdCBvZGVyIG5pY2h0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIHNpY2ggZGllIFdhZmZlIG5pY2h0IHdlZ3N0ZWNrZW4gbGFlc3N0LCBhbnNvbnN0ZW4gdW5nbGVpY2ggMC4KKworQkVNRVJLVU5HRU46CisgICAgIFZlcmZsdWNodGUgV2FmZmVuLCBkaWUgc2ljaCBlcnN0IG5hY2ggRW50ZmVybnVuZyBkZXMgRmx1Y2hlcyB3ZWdzdGVja2VuCisgICAgIGxhc3Nlbiwgc29sbHRlIG1hbiBiZXNzZXIgbWl0IFBfQ1VSU0VEIHJlYWxpc2llcmVuLgorICAgICBTZWxic3Qgd2VubiBtYW4gZWluZW4gV2VydCB1bmdsZWljaCBOdWxsIHp1cnVlY2tnaWJ0LCBpc3QgZGFzIG5vY2gKKyAgICAga2VpbmUgR2FyYW50aWUsIGRhc3Mgc2ljaCBkaWUgV2FmZmUgYXVjaCB3aXJrbGljaCB6dWVja2VuIGxhZXNzdCEgRGVyCisgICAgIFNwaWVsZXIga29lbm50ZSB6dW0gQmVpc3BpZWwgbm9jaCBlaW5lIFdhZmZlIGdlenVlY2t0IGhhYmVuLCBkaWUgc2ljaAorICAgICBuaWNodCB3ZWdzdGVja2VuIGxhZXNzdCwgZXRjLgorICAgICBXZW5uIGlociBzaWNoZXIgc2VpbiB3b2xsdCwgZGFzcyBkZXIgU3BpZWxlciBlaW4gT2JqZWt0IGdlenVlY2t0IGhhdCwKKyAgICAgYmVudXR6dCBiaXR0ZSBJbmZvcm1XZWFyKCkuCisgICAgIEJpdHRlIG5pY2h0IGRyYXVmIHZlcmxhc3NlbiwgZGFzcyB0aGlzX3BsYXllcigpIGRhcyBMZWJld2VzZW4gaXN0LAorICAgICB3ZWxjaGVzIGRpZSBXYWZmZSBnZXp1ZWNrdCB1bmQgd2Vnc3RlY2tlbiB3aWxsLgorICAgICBEaWUgUmVpaGVuZm9sZ2UgZGVyIEFyZ3VtZW50ZSBpc3QgZXR3YXMgdW5zY2hvZW4sIGFiZXIgbGVpZGVyIHd1cmRlIDx1c2VyPgorICAgICBlcmhlYmxpY2ggc3BhZXRlciBoaW56dWdlZnVlZ3QgdW5kIGVzIHdhciB1bm1vZWdsaWNoLCBlaW5pZ2UgaHVuZGVydAorICAgICBPYmpla3RlIHp1IGFlbmRlcm4uCisKK1NJRUhFIEFVQ0gKKyAgICAgUF9XSUVMRF9NU0csIFBfVU5XSUVMRF9NU0csIFBfV0VBUl9NU0csIFBfVU5XRUFSX01TRworICAgICBEb1dpZWxkKCksIERvVW53aWVsZCgpLCBJbmZvcm1XaWVsZCgpLCBJbmZvcm1VbndpZWxkKCksIAorICAgICBVbndpZWxkRnVuYywgV2llbGRGdW5jKCkgCisgICAgIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAyLjAyLjIwMDksIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1VwZGF0ZUF0dHJpYnV0ZXMgYi9kb2MvbGZ1bi9VcGRhdGVBdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNWEyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9VcGRhdGVBdHRyaWJ1dGVzCkBAIC0wLDAgKzEsMzIgQEAKK1VwZGF0ZUF0dHJpYnV0ZXMoKQorRlVOS1RJT046CisgICAgIHZvaWQgVXBkYXRlQXR0cmlidXRlcygpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jCisKK0JFU0NIUkVJQlVORzoKKyAgICAgUmVjaG5ldCBkYW1pdCBhbGxlIEF0dHJpYnV0bW9kaWZpZXIgZGVyIGltIEludmVudG9yeSBiZWZpbmRsaWNoZW4gDQorICAgICAoUF9YX0FUVFJfTU9ELCBQX1hfSEVBTFRIX01PRCkgdW5kIGdldHJhZ2VuZW4vZ2V6dWVja3RlbiANCisgICAgIChQX01fSEVBTFRIX01PRCwgUF9NX0FUVFJfTU9EKSBPYmpla3RlIHVuZCBhbGxlciBBdHRyaWJ1dG9mZnNldHMgDQorICAgICB6dXNhbW1lbiB1bmQgc3BlaWNoZXJ0IHNpZSBpbiBlaW5lciBpbnRlcm4gZnVlciBBdHRyaWJ1dGUgDQorICAgICB2ZXJ3ZW5kZXRlIFZhcmlhYmxlbi4KKyAgICAgQmVyZWNobmV0IGRhcmF1ZiBiYXNpZXJlbmQgSFAgdW5kIFNQIG5ldS4KKyAgICAgDQorICAgICBEaWUgQmVkaW5ndW5nZW4gZnVlciBkaWUgdWViZXIgUF9USU1FRF9BVFRSX01PRCBnZXNldHp0ZW4gDQorICAgICBBdHRyaWJ1dHZlcmFlbmRlcnVuZ2VuIHdlcmRlbiBpbSBIZWFydGJlYXQgaW4gZGVyIEZ1bmt0aW9uDQorICAgICBhdHRyaWJ1dGVfaGIgdWViZXJwcnVlZnQuDQorCitCRU1FUktVTkdFTjoKKyAgICAgU29sbHRlIG5hY2ggRWluYnJpbmdlbiBuZXVlciBNb2RpZmlrYXRvcm9iamVrdGUgYW0gTGl2aW5nIGdlcnVmZW4KKyAgICAgd2VyZGVuLgorCitTSUVIRSBBVUNIOg0KKwlRdWVyeUF0dHJpYnV0ZSgpLCBRdWVyeVJlYWxBdHRyaWJ1dGUoKSwgUXVlcnlBdHRyaWJ1dGVPZmZzZXQoKSwNCisJU2V0QXR0cmlidXRlKCksIFNldFJlYWxBdHRyaWJ1dGUoKSwgVXBkYXRlQXR0cmlidXRlcygpLA0KKwlTZXRUaW1lZEF0dHJNb2RpZmllcigpLCBRdWVyeVRpbWVkQXR0ck1vZGlmaWVyKCksIA0KKwlEZWxldGVUaW1lZEF0dHJNb2RpZmllcigpLA0KKwlQX0FUVFJJQlVURVMsIFBfQVRUUklCVVRFU19PRkZTRVRTLCBQX1RJTUVEX0FUVFJfTU9ELA0KKwlQX1hfQVRUUl9NT0QsIFBfTV9BVFRSX01PRCwgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzA5LjA1LjIwMDcgYnkgWmVzc3RyYQ0KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1VwZGF0ZVJlc2lzdGFuY2VTdHJlbmd0aHMgYi9kb2MvbGZ1bi9VcGRhdGVSZXNpc3RhbmNlU3RyZW5ndGhzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzQ3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9VcGRhdGVSZXNpc3RhbmNlU3RyZW5ndGhzCkBAIC0wLDAgKzEsMjYgQEAKK1VwZGF0ZVJlc2lzdGFuY2VTdHJlbmd0aHMoKQorCitGVU5LVElPTjoKKyAgICAgcHVibGljIHZvaWQgVXBkYXRlUmVzaXN0YW5jZVN0cmVuZ3RocygpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvY29tYmF0LmMKKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWUgRnVua3Rpb24gd2lyZCBpbnRlcm4gbWVocm1hbHMgKGR1cmNoIERlZmVuZCwgQWRkUmVzaXN0YW5jZU1vZGlmaWVyCisgICAgIHVuZCBSZW1vdmVSZXNpc3RhbmNlTW9kaWZpZXIpIGF1ZmdlcnVmZW4uIEluIGlociB3aXJkIGRhcyBSZXNpc3RlbnotCisgICAgIG1hcHBpbmcgenVzYW1tZW5nZXJlY2huZXQgdW5kIEVpbnRyYWVnZSBnZWxvZXNjaHQsIGRlcmVuIEVpbnRyYWVnZQorICAgICBpbnZhbGlkIHNpbmQgb2RlciBkZXJlbiBzZXR6ZW5kZSBPYmpla3RlIGdlbG9lc2NodCB3dXJkZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitTSUVIRSBBVUNIOgorICAgICBCZXJlY2hudW5nOglDaGVja1Jlc2lzdGFuY2UoKSwgRGVmZW5kKCkKKyAgICAgTW9kaWZpa2F0b3JlbjoJQWRkUmVzaXN0YW5jZU1vZGlmaWVyLCBSZW1vdmVSZXNpc3RhbmNlTW9kaWZpZXIoKSwKKwkJCVBfUkVTSVNUQU5DRV9NT0RJRklFUgorICAgICBzaW1wbGUgUmVzaXN0ZW56OglQX1JFU0lTVEFOQ0UsIFBfVlVMTkVSQUJJTElUWQorICAgICBIYXVwdG1hcHBpbmc6CVBfUkVTSVNUQU5DRV9TVFJFTkdUSFMKKyAgICAgYW5kZXJlczoJCWJhbGFuY2UsIC9zdGQvYXJtb3VyL2NvbWJhdC5jLCAvc3RkL2xpdmluZy9jb21iYXQuYworCisyOS5BcHIgMjAwMiwgR2xvaW5zb25ATUcKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1VzZUhhbmRzIGIvZG9jL2xmdW4vVXNlSGFuZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmYmM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1VzZUhhbmRzCkBAIC0wLDAgKzEsMzcgQEAKK1VzZUhhbmRzCitGVU5LVElPTjoKKyAgICAgcHVibGljIHZhcmFyZ3MgaW50IFVzZUhhbmRzKG9iamVjdCBvYiwgaW50IG51bSkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIG9iICAtIGRhcyBPYmpla3QsIGRhcyBkaWUgSGFlbmRlIGJlbGVnZW4gc29sbAorICAgICBudW0gLSBkaWUgQW56YWhsIGRlciB6dSBiZWxlZ2VuZGVuIEhhZW5kZSAgICAKKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgMSwgZnVlciBFcmZvbGcKKyAgICAgMCwgc29uc3QgICAgIAorCitCRVNDSFJFSUJVTkc6CisgICAgIEJlbGVndCwgd2VubiBtb2VnbGljaCBIYWVuZGUgZWluZXMgTGl2aW5ncyBkdXJjaCBlaW4gYmVzdGltbXRlcworICAgICBPYmpla3QuIFdlbm4gZGllIEFuemFobCBkZXIgZnJlaWVuIEhhZW5kZSAoUF9NQVhfSEFORFMtUF9VU0VEX0hBTkRTKQorICAgICBrbGVpbmVyIGlzdCBhbHMgIm51bSIsIGRhbm4gc2NobGFlZ3QgZGllc2UgQmVsZWd1bmcgZmVobC4KKworQkVJU1BJRUxFOgorICAgICA+IGhhbHRlIHNlaWwgZmVzdAorICAgICAuLi4KKyAgICAgdGhpc19wbGF5ZXIoKS0+VXNlSGFuZHModGhpc19vYmplY3QoKSwyKTsKKyAgICAgLi4uCisKKyAgICAgPiBsYXNzZSBzZWlsIGxvcworICAgICAuLi4KKyAgICAgdGhpc19wbGF5ZXIoKS0+RnJlZUhhbmRzKHRoaXNfb2JqZWN0KCkpOworICAgICAuLi4KKworU0lFSEUgQVVDSDoKKyAgICAgUF9IQU5EUywgUF9IQU5EU19VU0VEX0JZCisgICAgIFBfTUFYX0hBTkRTLCBQX1VTRURfSEFORFMsIFBfRlJFRV9IQU5EUworICAgICBGcmVlSGFuZHMKKworMS5GZWIuMjAwNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vVXNlU2tpbGwgYi9kb2MvbGZ1bi9Vc2VTa2lsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjEyYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vVXNlU2tpbGwKQEAgLTAsMCArMSw0OCBAQAorVXNlU2tpbGwoKQorRlVOS1RJT046CisgICAgcHVibGljIHZhcmFyZ3MgbWl4ZWQgVXNlU2tpbGwoc3RyaW5nIHNraWxsLCBtYXBwaW5nIGFyZ3MpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9za2lsbHMuYworCitBUkdVTUVOVEU6CisgICAgc3RyaW5nIHNraWxsICAgICBTa2lsbC1OYW1lCisgICAgbWFwcGluZyBhcmdzICAgICBBcmd1bWVudGUgKHZlcmFlbmRlcnRlIFNraWxsbWFwcGluZy1JbmZvcm1hdGlvbmVuKQorCitCRVNDSFJFSUJVTkc6CisgICAgQmVudXR6dCBlaW5lbiBTa2lsbC4gRGllc2VyIFNraWxsIHNvbGx0ZSAoYWxzIGdyb3NzZ2VzY2hyaWViZW5lciBTa2lsbCkKKyAgICBpbSBMaXZpbmcgdm9ybGllZ2VuIHVuZCBkYXMgTGl2aW5nIGRhcmYga2VpbiBHZWlzdCBzZWluLgorICAgIAorICAgIERpZSBBcmd1bWVudGUgJ2FyZ3MnIHdlcmRlbiB0ZW1wb3JhZXIgYXVmIGRhcyBTa2lsbG1hcHBpbmcgZGVzIExpdmluZworICAgIGFkZGllcnQgKGFsc28gbnVyIGZ1ZXIgZGllc2VuIEF1ZnJ1ZiB1bmQgU0lfSU5IRVJJVCBndWVsdGlnKS4KKyAgICAKKyAgICBFaW5lIGF1c2Z1ZWhyYmFyZSBTa2lsbC1GdW5rdGlvbiB6dW0gU2tpbGwgd2lyZCBpbiBmb2xnZW5kZXIKKyAgICBSZWloZW5mb2xnZSBiZXN0aW1tdDoKKyAgICAtIGVpbmUgZ2VzZXR6dGUgU0lfQ0xPU1VSRSBudXR6ZW4KKyAgICAtIGVpbiBnZXNldHp0ZXMgU0lfU0tJTExGVU5DIGluIGRlciBnZXNldHp0ZW4gR2lsZGUgbnV0emVuCisgICAgLSBpbSBMaXZpbmcgZGllIEZ1bmt0aW9uICJTdGRTa2lsbF8iK3NraWxsICh6QiBXYWZmZW5za2lsbHMpIG51dHplbgorICAgIC0gUXVlcnlTa2lsbEFiaWxpdHkoKSBudXR6ZW4KKyAgICBEaWUgc28gYmVzdGltbXRlIFNraWxsLUZ1bmt0aW9uIHdpcmQgZGFubiBhbHMgU0lfQ0xPU1VSRSBpbSBTcGllbGVyCisgICAgZ2VzZXR6dCB1bmQgaXN0IGJpcyB6dXIgWmVyc3RvZXJ1bmcgZGVyIGVudHNwcmVjaGVuZGVuIE9iamVrdGUgZ3VlbHRpZy4KKyAgICBEaWUgTWV0aG9kZSB3aXJkIGRhbm4gZ2VydWZlbiAoZGVyIFNraWxsIGFsc28gYW5nZXdhbmR0KS4KKyAgICAKKyAgICBTdGFuZGFyZG1hZXNzaWcgZ2lidCBlaW4gVXNlU2tpbGwoKSBhbHNvIGVpbmZhY2ggZGVuIFNJX1NLSUxMQUJJTElUWS1XZXJ0CisgICAgZWluZXMgU2tpbGxzIHp1cnVlY2ssIGVzIHNlaSBkZW5uLCBlaW5lIEZ1bmt0aW9uIHd1cmRlIGZ1ZXIgZGVuIFNraWxsCisgICAgYW4gZWluZXIgZGVyIG9iZW4gZ2VuYW5udGVuIFN0ZWxsZW4gaW1wbGVtZW50aWVydC4KKyAgICAKKyAgICBFaW4gZXZlbnR1ZWxsIHVlYmVyZ2VvcmRuZXRlciBTa2lsbCAoU0lfSU5IRVJJVCkgd2lyZCBtaXQgZGVtIGR1cmNoIGRlbgorICAgIEF1ZnJ1ZiBkZXIgU2tpbGwtRnVua3Rpb24gdmVyYWVuZGVydGVuIE1hcHBpbmcgbWl0IFVzZVNraWxsKHNraWxsLCBhcmdzKQorICAgIGViZW5mYWxscyBub2NoIGF1c2dlZnVlaHJ0LCBiZXZvciBkYXMgUmVzdWx0YXQgenVydWVja2dlZ2ViZW4gd2lyZC4KKworU0lFSEUgQVVDSDoKKyAgICBTa2lsbHMgTGVybmVuOiAgTGVhcm5Ta2lsbCwgTW9kaWZ5U2tpbGwsIExpbWl0QWJpbGl0eQorICAgICogTnV0enVuZzogICAgICBVc2VTcGVsbAorICAgICogQWJmcmFnZW46ICAgICBRdWVyeVNraWxsLCBRdWVyeVNraWxsQWJpbGl0eQorICAgICogTW9kaWZpa2F0aW9uOiBNb2RpZnlTa2lsbEF0dHJpYnV0ZSwgUXVlcnlTa2lsbEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyLCBSZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyCisgICAgICAqIFByb3BlcnRpZXM6IFBfU0tJTExfQVRUUklCVVRFUywgUF9TS0lMTF9BVFRSSUJVVEVfT0ZGU0VUUworICAgICogc29uc3RpZzogICAgICBzcHJ1Y2hlcm11ZWR1bmcsIHNraWxsX2luZm9fbGlzdGUKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9ORVdTS0lMTFMKKyAgICBTcGVsbGJvb2s6ICAgICAgTGVhcm4sIFNwZWxsU3VjY2VzcywgRXJmb2xnLCBNaXNzZXJmb2xnCisKKzQuIE9rdCAyMDExIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vVXNlU3BlbGwgYi9kb2MvbGZ1bi9Vc2VTcGVsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGYxYzRkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vVXNlU3BlbGwKQEAgLTAsMCArMSw3NyBAQAorVXNlU3BlbGwoKQorRlVOS1RJT046CisgICAgcHVibGljIHZhcmFyZ3MgaW50IFVzZVNwZWxsKHN0cmluZyBzdHIsIHN0cmluZyBzcGVsbCkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL3NraWxscy5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgc3RyICAgICAgIFNwZWxsLU9wdGlvbmVuCisgICAgc3RyaW5nIHNwZWxsICAgICBvcHRpb25hbGVyIFNwZWxsbmFtZQorCitCRVNDSFJFSUJVTkc6CisgICAgQmVudXR6dCBlaW5lbiBTcGVsbCwgZGVzc2VuIFNwZWxsbmFtZSAnc3BlbGwnIGdnZiB1ZWJlciBxdWVyeV92ZXJiKCkKKyAgICBlcm1pdHRlbHQgd2lyZC4gRGllc2VyIFNwZWxsIHNvbGx0ZSAoYWxzIGtsZWluZ2VzY2hyaWViZW5lcgorICAgIFNraWxsL1NwZWxsKSBpbSBMaXZpbmcgdm9ybGllZ2VuLgorICAgIAorICAgIERpZSBBcmd1bWVudGUgJ3N0cicgd2VyZGVuIGFscyBTSV9TS0lMTEFSRyB0ZW1wb3JhZXIgaW4gZGFzCisgICAgU2tpbGxtYXBwaW5nIGVpbmdldHJhZ2VuIChhbHNvIG51ciBmdWVyIGRpZXNlbiBBdWZydWYgZ3VlbHRpZykuCisgICAgCisgICAgRWluZSBhdXNmdWVocmJhcmUgU3BlbGwtRnVua3Rpb24genVtIFNwZWxsIHdpcmQgaW4gZm9sZ2VuZGVyCisgICAgUmVpaGVuZm9sZ2UgYmVzdGltbXQ6CisgICAgLSBlaW5lIGdlc2V0enRlIFNJX0NMT1NVUkUgbnV0emVuCisgICAgLSAiVXNlU3BlbGwiIGFuIGVpbmVtIGdlc2V0enRlbiBTSV9TUEVMTEJPT0sgbnV0emVuCisgICAgLSAiVXNlU3BlbGwiIGFuIGRlciBnZXNldHp0ZW4gUF9HVUlMRCBudXR6ZW4KKyAgICAgIC0gW1VzZVNwZWxsIGRlciBHaWxkZSBzdWNodCBpQSBlYmVuZmFsbHMgbnVyIGRlbiBTcGVsbCBhbSBTcGVsbGJvb2tdCisgICAgLSBlaW5lIENsb3N1cmUgbWl0IFJ1ZWNrZ2FiZXdlcnQgMCBlcnN0ZWxsZW4KKyAgICBEaWUgc28gYmVzdGltbXRlIFNwZWxsLUZ1bmt0aW9uIHdpcmQgZGFubiBhbHMgU0lfQ0xPU1VSRSBpbSBTcGllbGVyCisgICAgZ2VzZXR6dCB1bmQgaXN0IGJpcyB6dXIgWmVyc3RvZXJ1bmcgZGVyIGVudHNwcmVjaGVuZGVuIE9iamVrdGUgZ3VlbHRpZy4KKyAgICBEaWUgTWV0aG9kZSB3aXJkIGRhbm4gZ2VydWZlbiAoZGVyIFNwZWxsIGFsc28gYW5nZXdhbmR0KS4KKworICAgIFN0YW5kYXJkbWFlc3NpZyBnaWJ0IGVpbiBVc2VTcGVsbCgpIGFsc28gMCB6dXJ1ZWNrLCBlcyBzZWkgZGVubiwgZWluZQorICAgIEZ1bmt0aW9uIHd1cmRlIGZ1ZXIgZGVuIFNwZWxsIGFuIGVpbmVyIGRlciBvYmVuIGdlbmFubnRlbiBTdGVsbGVuCisgICAgaW1wbGVtZW50aWVydC4KKworICAgIFNJX0lOSEVSSVQgaXN0IGZ1ZXIgU3BlbGxzIGJlaW0gQXVmcnVmIHdpcmt1bmdzbG9zIChnaWx0IGFiZXIgYmVpCisgICAgTGVhcm5Ta2lsbCBub3JtYWwpLgorCisgICAgRWluIER1cmNobGF1ZiB2b24gVXNlU3BlbGwgZHVyY2ggZGVuIFNwaWVsZXIgc2llaHQgaW4gZXR3YSBzbyBhdXM6CisgICAgICAxKSBEaWUgTWV0aG9kZSB3aXJkIGFscyBFbXBmYWVuZ2VyIGZ1ZXIgS29tbWFuZG9zIGJla2FubnQgZ2VtYWNodC4KKyAgICAgICAgIERhcyBwYXNzaWVydCBtaXQgZGVyIEFud2Vpc3VuZworICAgICAgICAgJ2FkZF9hY3Rpb24oIlVzZVNwZWxsIiwgIiIsIDEpOycgaW4gZGVuIERhdGVpZW4gcGxheWVyL2Jhc2UuYyB1bmQKKyAgICAgICAgIGluIGxpdmluZy9ucGMuYy4KKworICAgICAgMikgL3N0ZC9saXZpbmcvc2tpbGxzOjpVc2VTcGVsbCB3aXJkIGR1cmNoIEtvbW1hbmRvIG9kZXIgSGVhcnRiZWF0CisgICAgICAgICBnZXJ1ZmVuLgorICAgICAgCisgICAgICAzKSBVc2VTcGVsbCgpIGVybWl0dGVsdCBlaW5lIFNJX0NMT1NVUkUgb2RlciBkZWxlZ2llcnQgZGllc2VuIEF1ZnJ1ZgorICAgICAgICAgYW4gZGllIGd1ZWx0aWdlIEdpbGRlL2RhcyBTcGVsbGJvb2sgd2VpdGVyLgorICAgICAgCisgICAgICA0KSBFaW5lIGd1ZWx0aWdlIENsb3N1cmUgd2lyZCBhdXNnZWZ1ZWhydC4gVXNlU3BlbGwoKSB1ZWJlcmdpYnQgZGFiZWkKKyAgICAgICAgIGRpZSBTcGVsbC9Ta2lsbC1JbmZvcm1hdGlvbmVuIHVuZCBTSV9TS0lMTEFSRy4KKyAgICAgIAorICAgICAgNC4xLikgSW0gTm9ybWFsZmFsbCBlaW5lciBHaWxkZS9TcGVsbGJvb2sgbGFuZGV0IGRlciBBdWZydWYgdWViZXIKKyAgICAgICAgICAgIC9zdGQvZ2lsZGVuX29iOjpVc2VTcGVsbCgpIGluIC9zdGQvc3BlbGxib29rOjpVc2VTcGVsbCgpIHVuZAorICAgICAgICAgICAgZGllc2VzIHJ1ZnQgZWluZSBTcGVsbGZ1bmt0aW9uIGltIFNwZWxsYm9vayBhdWYuCisgICAgICAgICAgICBEaWUgU3BlbGxmdW5rdGlvbiBhcmJlaXRldCBtaXQgZGVuIFNwZWxsLUluZm9ybWF0aW9uZW4gdW5kCisgICAgICAgICAgICBnaWJ0IGVpbiBFUkZPTEcsIE1JU1NFUkZPTEcgb2RlciAwIGRhZnVlciB6dXJ1ZWNrLCBvYiBkYXMKKyAgICAgICAgICAgIFNwZWxsYm9vayBMZXJuZW4vRmVobGVybWVsZHVuZyBvZGVyIG5pY2h0cyBtYWNoZW4gc29sbC4KKyAgICAgICAgICAgIERlbWVudHNwcmVjaGVuZCB3ZXJkZW4gUF9TUCwgUF9BVFRBQ0tfQlVTWSB1bmQKKyAgICAgICAgICAgIFBfTkVYVF9TUEVMTF9USU1FIGltIFNwZWxsYm9vayBnZWFlbmRlcnQuCisKKyAgICAgIDUuKSBEZXIgQXVmcnVmIGRlciBDbG9zdXJlIGtlaHJ0IHp1cnVlY2sgdW5kIHdpcmQgenVydWVja2dlZ2ViZW4uCisgICAgICAgICAgRGFtaXQgaXN0IGRlciAwLVJ1ZWNrZ2FiZXdlcnQgZGVyIFNwZWxsZnVua3Rpb24gaW0gU3BlbGxib29rCisgICAgICAgICAgYWVxdWl2YWxlbnQgZWluZW0gbmljaHQgYXVzZ2VmdWVocnRlbiBLb21tYW5kby4KKworU0lFSEUgQVVDSDoKKyAgICBTa2lsbHMgTGVybmVuOiAgTGVhcm5Ta2lsbCwgTW9kaWZ5U2tpbGwsIExpbWl0QWJpbGl0eQorICAgICogTnV0enVuZzogICAgICBVc2VTa2lsbAorICAgICogQWJmcmFnZW46ICAgICBRdWVyeVNraWxsLCBRdWVyeVNraWxsQWJpbGl0eQorICAgICogTW9kaWZpa2F0aW9uOiBNb2RpZnlTa2lsbEF0dHJpYnV0ZSwgUXVlcnlTa2lsbEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgUXVlcnlTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyLCBSZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyCisgICAgICAqIFByb3BlcnRpZXM6IFBfU0tJTExfQVRUUklCVVRFUywgUF9TS0lMTF9BVFRSSUJVVEVfT0ZGU0VUUworICAgICogc29uc3RpZzogICAgICBzcHJ1Y2hlcm11ZWR1bmcsIHNraWxsX2luZm9fbGlzdGUKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9ORVdTS0lMTFMKKyAgICBTcGVsbGJvb2s6ICAgICAgVXNlU3BlbGwgKHNwZWxsYm9vayksIExlYXJuLCBTcGVsbFN1Y2Nlc3MKKworNS4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9WYWxpZGF0ZSBiL2RvYy9sZnVuL1ZhbGlkYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZjQ3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9WYWxpZGF0ZQpAQCAtMCwwICsxLDQ3IEBACitWYWxpZGF0ZSgpCisKK0ZVTktUSU9OOgorICAgc3RyaW5nIFZhbGlkYXRlKHN0cmluZyBvbmFtZSk7CisKK0RFRklOSUVSVCBJTjoKKyAgIC9zdGQvdmlydHVhbC92X2NvbXBpbGVyLmMKKworQVJHVU1FTlRFOgorICAgb25hbWUKKyAgICAgICBPYmpla3RuYW1lLCBkZXIgZ2VwcnVlZnQgd2VyZGVuIHNvbGwgCisKK1JVZUNLR0FCRVdFUlQ6CisgICAKK0JFU0NIUkVJQlVORzoKKyAgIERpZXNlIEZ1bmt0aW9uIGhhdCBkaWUgQXVmZ2FiZSB6dSB1ZWJlcnBydWVmZW4gb2IgZWluIE9iamVrdCB3ZWxjaGVzCisgICBnZWxhZGVuIHdlcmRlbiBzb2xsLCBpbiBkZW0gVkMgIHVlYmVyaGF1cHQgZXJsYXVidCBpc3QuIERpZXNlciAKKyAgIEZ1bmt0aW9uIHdpcmQgbnVyIGRlciByZWluZSBGaWxlbmFtZSB1ZWJlcmdlYmVuLCBvaG5lIFBmYWQhCisgICBEaWVzZSBGdW5rdGlvbiBtYWNodCBpbSBTdGFuZGFyZC1WQyBpbiAvc3RkLyBuaWNodHMgd2VpdGVyLCBhbHMKKyAgIGRhcyAnLmMnIGFtIEZpbGUgTmFtZW4gYWJ6dXNjaG5laWRlbi4KKyAgIFNvbGx0ZSBkZXIgRGF0ZWluYW1lIGd1ZWx0aWcgc2VpbiBsaWVmZXJ0IGRpZSBGdW5rdGlvbiBhbHMgUnVlY2tnYWJld2VydAorICAgZGVuIEZpbGVuYW1lbiBvaG5lIC5jIHVuZCBzb25zdCAwLgorCitCRU1FUktVTkdFTjoKKyAgIEFtIGJlc3RlbiBydWZ0IG1hbiBpbiBzZWluZW0gVmFsaWRhdGUoKSBkYXMgOjpWYWxpZGF0ZSgpLCB3YXMgZWluZW0gZGllCisgICBBcmJlaXQgYWJuaW1tdCwgZWluIC5jIGFtIEVuZGUgenUgZW50ZmVybmVuLgorCitCRUlTUElFTDoKKyAgIHN0cmluZyBWYWxpZGF0ZShzdHJpbmcgb25hbWUpIHsKKyAgICAgc3RyaW5nIHJhdW0sIHNwaWVsZXI7CisgICAgIC8vLmMgYWJzY2huZWlkZW4KKyAgICAgb25hbWU9OjpWYWxpZGF0ZShvbmFtZSk7CisgICAgIAorICAgICAvLyBmb2xndCBkZXIgUmF1bSBkZW0gTXVzdGVyICJhcmVuYXxuYW1lIj8gV2VubiBuZWluIC0+IHVuZ3VlbHRpZywKKyAgICAgLy8gMCB6dXJlY2tnZWJlbiwgc29uc3QgZGVuIEZpbGVuYW1lbi4KKyAgICAgaWYoc3NjYW5mKG9uYW1lLCIlc3wlcyIscmF1bSxzcGllbGVyKTwyIHx8IHJhdW0hPSJhcmVuYSIpCisgICAgICAgIHJldHVybiAwOworICAgICByZXR1cm4gb25hbWU7CisgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIHZpcnR1YWxfY29tcGlsZXIKKyAgICAgQ3VzdG9taXplT2JqZWN0KCksIFZhbGlkYXRlKCksIE5vUGFyYU9iamVjdHMoKSwgCisgICAgIFBfQ09NUElMRVJfUEFUSCwgUF9QQVJBCisgICAgIC9zdGQvdmlydHVhbC92X2NvbXBpbGVyLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI3LjEwLjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1dlYXIgYi9kb2MvbGZ1bi9XZWFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzhhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9XZWFyCkBAIC0wLDAgKzEsMzcgQEAKK1dlYXIoKQorRlVOS1RJT046CisgICAgIHB1YmxpYyBpbnQgV2VhcihvYmplY3Qgb2IpIAorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2Nsb3RoaW5nLmMKKworQVJHVU1FTlRFOgorICAgICBvYmplY3Qgb2IKKyAgICAgICBEaWUgUnVlc3R1bmcgb2RlciBLbGVpZHVuZywgZGllIGFuZ2V6b2dlbiB3aXJkLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERhcyBMZWJld2VzZW4sIGluIGRlbSBkaWVzZSBGdW5rdGlvbiBnZXJ1ZmVuIHdpcmQsIHppZWh0IGRpZSBSdWVzdHVuZworICAgICBvZGVyIGRhcyBLbGVpZHVuZ3NzdHVlY2sgPG9iPiBhbi4KKyAgICAgQUJFUjogJ0FuemllaGVuJyBiZWRldXRldCBpbiBkaWVzZW0gS29udGV4dCBsZWRpZ2xpY2gsIGRhc3MgZGllCisgICAgIFJ1ZXN0dW5nL0tsZWlkdW5nIGluIFBfQVJNT1VSUyBiencuIFBfQ0xPVEhJTkcgZWluZ2V0cmFnZW4gd2lyZC4gRXMKKyAgICAgZmluZGVuIHp1ciBaZWl0IGtlaW5lIFBydWVmdW5nZW4gc3RhdHQsIG9iIGRhcyBMZWJld2VzZW4gZGVuIEdlZ2Vuc3RhbmQKKyAgICAgdWViZXJoYXVwdCBhbnppZWhlbiBrYW5uLiBHZW5hdXNvd2VuaWcgd2VyZGVuIEZ1bmt0aW9uZW4gd2llIEluZm9ybVdlYXIoKQorICAgICBnZXJ1ZmVuIG9kZXIgZXR3YWlnZSBTdGF0LUJvbmkgYWt0aXZpZXJ0LgorICAgICBEaWUgRnVua3Rpb24gaXN0IG51ciBkYXp1IGdlZGFjaHQsIGltIFp1Z2UgZGVzIEFuemllaGVucyBlaW5lcyBPYmpla3RzCisgICAgIHZvbiBkaWVzZW0gaW0gTGViZXdlc2VuIGdlcnVmZW4genUgd2VyZGVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICAxLCB3ZW5uIGRhcyBBbnppZWhlbiBlcmZvbGdyZWljaCB3YXIuCisgICAgIDAgc29uc3QuCisKK0JFTUVSS1VOR0VOOgorICAgICBOaWNodCB2b24gSGFuZCBhdWZydWZlbiwgZXMgc2VpIGRlbm4gbWFuIHdlaXNzIGdlbmF1LCB3YXMgbWFuIHR1dC4gVW5kIGFtCisgICAgIGJlc3RlbiBhdWNoIGRhbm4gbmljaHQuCisKK1NJRUhFIEFVQ0g6CisgICAgIFdlYXJBcm1vdXIoKSwgV2VhckNsb3RoaW5nKCksIFVud2VhcigpLCBVbndlYXJBcm1vdXIoKSwgVW53ZWFyQ2xvdGhpbmcoKQorICAgICBQX0NMT1RISU5HLCBQX0FSTU9VUlMKKyAgICAgRmlsdGVyQ2xvdGhpbmcoKSwgRmlsdGVyQXJtb3VycygpCisKK1pVTEVUWlQgR0VBZU5ERVJUOgorMTQuMDMuMjAwOSwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vV2VhckFybW91ciBiL2RvYy9sZnVuL1dlYXJBcm1vdXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkOGU5NQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL1dlYXJBcm1vdXIKQEAgLTAsMCArMSwzNyBAQAorV2VhckFybW91cigpCitGVU5LVElPTjoKKyAgICAgcHVibGljIGludCBXZWFyQXJtb3VyKG9iamVjdCBvYikgCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvY2xvdGhpbmcuYworCitBUkdVTUVOVEU6CisgICAgIG9iamVjdCBvYgorICAgICAgIERpZSBSdWVzdHVuZywgZGllIGFuZ2V6b2dlbiB3aXJkLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERhcyBMZWJld2VzZW4sIGluIGRlbSBkaWVzZSBGdW5rdGlvbiBnZXJ1ZmVuIHdpcmQsIHppZWh0IGRpZSBSdWVzdHVuZworICAgICA8b2I+IGFuLgorICAgICBBQkVSOiAnQW56aWVoZW4nIGJlZGV1dGV0IGluIGRpZXNlbSBLb250ZXh0IGxlZGlnbGljaCwgZGFzcyBkaWUKKyAgICAgUnVlc3R1bmcvS2xlaWR1bmcgaW4gUF9BUk1PVVJTIGVpbmdldHJhZ2VuIHdpcmQuIEVzIGZpbmRlbiB6dXIgWmVpdCBrZWluZQorICAgICBQcnVlZnVuZ2VuIHN0YXR0LCBvYiBkYXMgTGViZXdlc2VuIGRlbiBHZWdlbnN0YW5kIHVlYmVyaGF1cHQgYW56aWVoZW4KKyAgICAga2Fubi4gR2VuYXVzb3dlbmlnIHdlcmRlbiBGdW5rdGlvbmVuIHdpZSBJbmZvcm1XZWFyKCkgZ2VydWZlbiBvZGVyCisgICAgIGV0d2FpZ2UgU3RhdC1Cb25pIGFrdGl2aWVydC4KKyAgICAgRGllIEZ1bmt0aW9uIGlzdCBudXIgZGF6dSBnZWRhY2h0LCBpbSBadWdlIGRlcyBBbnppZWhlbnMgZWluZXMgT2JqZWt0cworICAgICB2b24gZGllc2VtIGltIExlYmV3ZXNlbiBnZXJ1ZmVuIHp1IHdlcmRlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBkYXMgQW56aWVoZW4gZXJmb2xncmVpY2ggd2FyLgorICAgICAwIHNvbnN0LgorCitCRU1FUktVTkdFTjoKKyAgICAgTmljaHQgdm9uIEhhbmQgYXVmcnVmZW4sIGVzIHNlaSBkZW5uIG1hbiB3ZWlzcyBnZW5hdSwgd2FzIG1hbiB0dXQuIFVuZCBhbQorICAgICBiZXN0ZW4gYXVjaCBkYW5uIG5pY2h0LgorCitTSUVIRSBBVUNIOgorICAgICBXZWFyKCksIFdlYXJDbG90aGluZygpLCBVbndlYXIoKSwgVW53ZWFyQXJtb3VyKCksIFVud2VhckNsb3RoaW5nKCkKKyAgICAgUF9DTE9USElORywgUF9BUk1PVVJTCisgICAgIEZpbHRlckNsb3RoaW5nKCksIEZpbHRlckFybW91cnMoKQorCitaVUxFVFpUIEdFQWVOREVSVDoKKzE0LjAzLjIwMDksIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1dlYXJDbG90aGluZyBiL2RvYy9sZnVuL1dlYXJDbG90aGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2MwMjgwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vV2VhckNsb3RoaW5nCkBAIC0wLDAgKzEsMzcgQEAKK1dlYXJDbG90aGluZygpCitGVU5LVElPTjoKKyAgICAgcHVibGljIGludCBXZWFyQ2xvdGhpbmcob2JqZWN0IG9iKSAKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9jbG90aGluZy5jCisKK0FSR1VNRU5URToKKyAgICAgb2JqZWN0IG9iCisgICAgICAgRGFzIEtsZWlkdW5nc3N0dWNrLCBkYXMgYW5nZXpvZ2VuIHdpcmQuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGFzIExlYmV3ZXNlbiwgaW4gZGVtIGRpZXNlIEZ1bmt0aW9uIGdlcnVmZW4gd2lyZCwgemllaHQgZGFzCisgICAgIEtsZWlkdW5nc3N0dWVjayA8b2I+IGFuLgorICAgICBBQkVSOiAnQW56aWVoZW4nIGJlZGV1dGV0IGluIGRpZXNlbSBLb250ZXh0IGxlZGlnbGljaCwgZGFzcyBkaWUKKyAgICAgUnVlc3R1bmcvS2xlaWR1bmcgaW4gUF9DTE9USElORyBlaW5nZXRyYWdlbiB3aXJkLiBFcyBmaW5kZW4genVyIFplaXQKKyAgICAga2VpbmUgUHJ1ZWZ1bmdlbiBzdGF0dCwgb2IgZGFzIExlYmV3ZXNlbiBkZW4gR2VnZW5zdGFuZCB1ZWJlcmhhdXB0CisgICAgIGFuemllaGVuIGthbm4uIEdlbmF1c293ZW5pZyB3ZXJkZW4gRnVua3Rpb25lbiB3aWUgSW5mb3JtV2VhcigpIGdlcnVmZW4uCisKKyAgICAgRGllIEZ1bmt0aW9uIGlzdCBudXIgZGF6dSBnZWRhY2h0LCBpbSBadWdlIGRlcyBBbnppZWhlbnMgZWluZXMgT2JqZWt0cworICAgICB2b24gZGllc2VtIGltIExlYmV3ZXNlbiBnZXJ1ZmVuIHp1IHdlcmRlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBkYXMgQW56aWVoZW4gZXJmb2xncmVpY2ggd2FyLgorICAgICAwIHNvbnN0LgorCitCRU1FUktVTkdFTjoKKyAgICAgTmljaHQgdm9uIEhhbmQgYXVmcnVmZW4sIGVzIHNlaSBkZW5uIG1hbiB3ZWlzcyBnZW5hdSwgd2FzIG1hbiB0dXQuIFVuZCBhbQorICAgICBiZXN0ZW4gYXVjaCBkYW5uIG5pY2h0LgorCitTSUVIRSBBVUNIOgorICAgICBXZWFyKCksIFdlYXJBcm1vdXIoKSwgVW53ZWFyKCksIFVud2VhckFybW91cigpLCBVbndlYXJDbG90aGluZygpCisgICAgIFBfQ0xPVEhJTkcsIFBfQVJNT1VSUworICAgICBGaWx0ZXJDbG90aGluZygpLCBGaWx0ZXJBcm1vdXJzKCkKKworWlVMRVRaVCBHRUFlTkRFUlQ6CisxNC4wMy4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9XZWFyRnVuYyBiL2RvYy9sZnVuL1dlYXJGdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNmZkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9XZWFyRnVuYwpAQCAtMCwwICsxLDgwIEBACitXZWFyRnVuYygpCisKK0ZVTktUSU9OOgorICAgICBpbnQgV2VhckZ1bmMob2JqZWN0IHJ1ZXN0LCBpbnQgc2lsZW50LCBvYmplY3QgdXNlcik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgZWlnZW5lbiBPYmpla3RlbiAoZnVlciAvc3RkL2Nsb3RoaW5nL3dlYXIpCisKK0FSR1VNRU5URToKKyAgICAgcnVlc3QgKG9iamVjdCkKKyAgICAgICAgICBEaWUgUnVlc3R1bmcvS2xlaWR1bmcsIGRpZSBhbmdlem9nZW4gd2VyZGVuIHNvbGwuCisgICAgIHNpbGVudCAoaW50KQorICAgICAgICAgIE9iIGRhYmVpIGVpbmUgTWVsZHVuZyBhdXNnZWdlYmVuIHdpcmQuCisgICAgIHVzZXIgKG9iamVjdCkKKyAgICAgICAgICBEYXMgTGViZXdlc2VuLCB3ZWxjaGVzIGRpZSBSdWVzdHVuZy9LbGVpZHVuZyBhbnppZWhlbiB3aWxsLgorCitCRVNDSFJFSUJVTkc6CisgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24ga2FubiBtYW4gcHJ1ZWZlbiwgb2Igc2ljaCBkYXMgS2xlaWR1bmdzc3R1ZWNrIGJ6dy4KKyAgICAgUnVlc3R1bmcgPHJ1ZXN0PiB2b24gdGhpc19wbGF5ZXIoKSBhbnppZWhlbiBsYWVzc3Qgb2RlciBuaWNodC4KKyAgICAgS2FubiBkaWUgUnVlc3R1bmcgYW5nZXpvZ2VuIHdlcmRlbiwgc28gbXVzcyBlaW4gV2VydCB1bmdsZWljaCAwCisgICAgIHp1cnVlY2tnZWdlYmVuIHdlcmRlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMCwgd2VubiBzaWNoIGRpZSBSdWVzdHVuZyBuaWNodCBhbnppZWhlbiBsYWVzc3QsIGFuc29uc3RlbiB1bmdsZWljaCAwLgorCitCRU1FUktVTkdFTjoKKyAgICAgQml0dGUgbmljaHQgZGFyYXVmIHZlcmxhc3NlbiwgZGFzcyBkZXIgU3BpZWxlciBkYXMgT2JqZWt0IGF1Y2ggd2lya2xpY2gKKyAgICAgYW56aWVodCwgd2VubiBtYW4gaGllciAxIHp1cnVlY2tnaWJ0LgorICAgICBTcGV6aWVsbCBiZWkgU2NoaWxkZW4ga2FubiBkYXMgQW56aWVoZW4gdHJvdHogZWluZXMgUnVlY2tnYWJld2VydGVzIAorICAgICAhPSAwIGltbWVyIG5vY2ggc2NoaWVmIGdlaGVuLCB3ZW5uIGRlciBTcGllbGVyIGtlaW5lIEhhbmQgbWVociBmcmVpIGhhdC4KKyAgICAgV2VubiBpaHIgc2ljaGVyIHNlaW4gd29sbHQsIGRhc3MgZGVyIFNwaWVsZXIgZWluIE9iamVrdCBhbmdlem9nZW4gaGF0LAorICAgICBiZW51dHp0IGJpdHRlIEluZm9ybVdlYXIoKS4KKyAgICAgQml0dGUgbmljaHQgZHJhdWYgdmVybGFzc2VuLCBkYXNzIHRoaXNfcGxheWVyKCkgZGFzIGF1c3ppZWhlbmRlIExlYmV3ZXNlbgorICAgICBpc3QuCisgICAgIERpZSBSZWloZW5mb2xnZSBkZXIgQXJndW1lbnRlIGlzdCBldHdhcyB1bnNjaG9lbiwgYWJlciBsZWlkZXIgd3VyZGUgPHVzZXI+CisgICAgIGVyaGVibGljaCBzcGFldGVyIGhpbnp1Z2VmdWVndCB1bmQgZXMgd2FyIHVubW9lZ2xpY2gsIGVpbmlnZSBodW5kZXJ0CisgICAgIE9iamVrdGUgenUgYWVuZGVybi4KKworQkVJU1BJRUxFOgorICAgICBFaW4gSGVsbSwgZGVyIG51ciB2b24gRWxmZW4gZ2V0cmFnZW4gd2VyZGVuIGthbm46CisKKyAgICAgaW5oZXJpdCAic3RkL2FybW91ci5jIjsKKworICAgICAjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorCisgICAgIGNyZWF0ZSgpCisgICAgIHsKKyAgICAgICA6OmNyZWF0ZSgpOworCisgICAgICAgU2V0UHJvcChQX0FSTU9VUl9UWVBFLCBBVF9IRUxNRVQpOworICAgICAgIC8qIHppZyB3ZWl0ZXJlIFNldFByb3AncywgdW0gZGVuIEhlbG0genUga29uZmlndXJpZXJlbiAqLworCisgICAgICAgLyogV2VhckZ1bmMoKSBpc3QgaW0gSGVsbSBzZWxic3QgenUgZmluZGVuICovCisgICAgICAgU2V0UHJvcChQX1dFQVJfRlVOQywgdGhpc19vYmplY3QoKSk7CisgICAgIH0KKworICAgICBpbnQgV2VhckZ1bmMob2JqZWN0IG1lLCBpbnQgc2lsZW50LCBvYmplY3QgdXNlcikKKyAgICAgeworICAgICAgIGlmICh1c2VyLT5RdWVyeVByb3AoUF9SQUNFKSA9PSAiRWxmIikKKyAgICAgICAgIHJldHVybiAxOyAgIC8qIEVsZmVuIGR1ZXJmZW4gZGVuIEhlbG0gdHJhZ2VuICovCisKKyAgICAgICAvKiBEaWUgYW5kZXJlbiBSYXNzZW4gc29sbHRlbiB6dW1pbmRlc3QgZXJmYWhyZW4ga29lbm5lbiwgd2llc28KKyAgICAgICAgICBzaWUgZGVuIEhlbG0gbmljaHQgdHJhZ2VuIGtvZW5uZW4uLi4gKi8KKyAgICAgICBpZiAoIXNpbGVudCkKKyAgICAgICAgICAgd3JpdGUoICJEZXIgSGVsbSBydXRzY2h0IERpciBpbW1lciB1ZWJlciBEZWluZSBydW5kZW4gIgorICAgICAgICAgICAgICAgICArIk9ocmVuLlxuIiApOworICAgICAgIHJldHVybiAwOworICAgICB9CisKKyAgICAgR2lidCBqZXR6dCBlaW4gTmljaHQtRWxmICJ0cmFnZSBoZWxtIiBlaW4sIHNvIGJla29tbXQgZXIgZGllIE1lbGR1bmcKKyAgICAgIkRlciBIZWxtIHJ1dHNjaHQgRGlyIGltbWVyIHVlYmVyIERlaW5lIHJ1bmRlbiBPaHJlbi4iLCBFbGZlbiBkYWdlZ2VuCisgICAgIHBhc3N0IGRhcyBUZWlsIHdpZSBhbmdlZ29zc2VuLgorCitTSUVIRSBBVUNIOgorICAgICBQX1dFQVJfTVNHLCBQX1VOV0VBUl9NU0csIFBfV0lFTERfTVNHLCBQX1VOV0lFTERfTVNHCisgICAgIERvV2VhcigpLCBEb1Vud2VhcigpLCBJbmZvcm1VbndlYXIoKSwgSW5mb3JtV2VhcigpCisgICAgIC9zdGQvY2xvdGhpbmcvd2Vhci5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAyLjAyLjIwMDksIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL1dpZWxkRnVuYyBiL2RvYy9sZnVuL1dpZWxkRnVuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2UyOTlmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vV2llbGRGdW5jCkBAIC0wLDAgKzEsNzcgQEAKK1dpZWxkRnVuYygpCisKK0ZVTktUSU9OOgorICAgICBpbnQgV2llbGRGdW5jKG9iamVjdCB3ZWFwb24sIGludCBzaWxlbnQsIG9iamVjdCB1c2VyKTsKKworREVGSU5JRVJUIElOOgorICAgICBlaWdlbmVuIE9iamVrdGVuIChmdWVyIC9zdGQvd2VhcG9uL2NvbWJhdCkKKworQVJHVU1FTlRFOgorICAgICB3ZWFwb24gKG9iamVjdCkKKyAgICAgICAgICBEaWUgV2FmZmUsIGRpZSBnZXp1ZWNrdCB3ZXJkZW4gc29sbC4KKyAgICAgc2lsZW50IChpbnQpCisgICAgICAgICAgT2IgZGFiZWkgZWluZSBNZWxkdW5nIGF1c2dlZ2ViZW4gd2VyZGVuIHNvbGwuCisgICAgIHVzZXIgKG9iamVjdCkKKyAgICAgICAgICBEYXMgTGViZXdlc2VuLCB3ZWxjaGVzIGRpZSBXYWZmZSB6dWVja2VuIHdpbGwuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgSW4gZGllc2VyIEZ1bmt0aW9uIGthbm4gbWFuIHp1c2FldHpsaWNoZSBBYmZyYWdlbiB2b3JuZWhtZW4sIG9iIHNpY2gKKyAgICAgZGllIFdhZmZlIDx3ZWFwb24+IHZvbiA8dXNlcj4genVlY2tlbiBsYWVzc3Qgb2RlciBuaWNodC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMCwgd2VubiBkaWUgV2FmZmUgbmljaHQgZ2V6dWVja3Qgd2VyZGVuIGthbm4sIHNvbnN0IHVuZ2xlaWNoIDAuCisKK0JFTUVSS1VOR0VOOgorICAgICBTZWxic3Qgd2VubiBtYW4gZWluZW4gV2VydCB1bmdsZWljaCBOdWxsIHp1cnVlY2tnaWJ0LCBpc3QgZGFzIG5vY2gKKyAgICAga2VpbmUgR2FyYW50aWUsIGRhc3Mgc2ljaCBkaWUgV2FmZmUgYXVjaCB3aXJrbGljaCB6dWVja2VuIGxhZXNzdCEgRGVyCisgICAgIFNwaWVsZXIga29lbm50ZSB6dW0gQmVpc3BpZWwgbm9jaCBlaW5lIFdhZmZlIGdlenVlY2t0IGhhYmVuLCBkaWUgc2ljaAorICAgICBuaWNodCB3ZWdzdGVja2VuIGxhZXNzdCwgZXRjLgorICAgICBXZW5uIGlociBzaWNoZXIgc2VpbiB3b2xsdCwgZGFzcyBkZXIgU3BpZWxlciBlaW4gT2JqZWt0IGdlenVlY2t0IGhhdCwKKyAgICAgYmVudXR6dCBiaXR0ZSBJbmZvcm1XaWVsZCgpLgorICAgICBCaXR0ZSBuaWNodCBkcmF1ZiB2ZXJsYXNzZW4sIGRhc3MgdGhpc19wbGF5ZXIoKSBkYXMgTGViZXdlc2VuIGlzdCwKKyAgICAgd2VsY2hlcyBkaWUgV2FmZmUgenVlY2tlIHdpbGwuCisgICAgIERpZSBSZWloZW5mb2xnZSBkZXIgQXJndW1lbnRlIGlzdCBldHdhcyB1bnNjaG9lbiwgYWJlciBsZWlkZXIgd3VyZGUgPHVzZXI+CisgICAgIGVyaGVibGljaCBzcGFldGVyIGhpbnp1Z2VmdWVndCB1bmQgZXMgd2FyIHVubW9lZ2xpY2gsIGVpbmlnZSBodW5kZXJ0CisgICAgIE9iamVrdGUgenUgYWVuZGVybi4KKworQkVJU1BJRUxFOgorICAgICBFaW5lIFdhZmZlLCBkaWUgc2ljaCBuaWNodCB2b24gWndlcmdlbiB6dWVja2VuIGxhZXNzdDoKKworICAgICBpbmhlcml0ICJzdGQvd2VhcG9uIjsKKworICAgICAjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorICAgICAjaW5jbHVkZSA8Y29tYmF0Lmg+CisKKyAgICAgY3JlYXRlKCkKKyAgICAgeworICAgICAgIDo6Y3JlYXRlKCk7CisKKyAgICAgICAuLi4gLyogemlnIFNldFByb3AncywgdW0gZGllIFdhZmZlIHp1IGtvbmZpZ3VyaWVyZW4gKi8KKworICAgICAgIC8qIFdpZWxkRnVuYygpIGlzdCBpbiBkZXIgV2FmZmUgc2VsYnN0IHp1IGZpbmRlbiAqLworICAgICAgIFNldFByb3AoUF9XSUVMRF9GVU5DLCB0aGlzX29iamVjdCgpKTsKKyAgICAgfQorCisgICAgIGludCBXaWVsZEZ1bmMob2JqZWN0IHdlYXBvbiwgaW50IHNpbGVudCwgb2JqZWN0IHVzZXIpCisgICAgIHsKKyAgICAgICAvKiBOaWNodC1ad2VyZ2UgZHVlcmZlbiBkaWUgV2FmZmUgenVlY2tlbiAqLworICAgICAgIGlmICh1c2VyLT5RdWVyeVByb3AoUF9SQUNFKSAhPSAiWndlcmciKQorICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAvKiBBbnNvbnN0ZW4gc2FnZW4gd2lyIGV2dGwuLCB3YXJ1bSBkYXMgWnVlY2tlbiBuaWNodCBrbGFwcHQuLi4gKi8KKyAgICAgICBpZiAoIXNpbGVudCkKKyAgICAgICAgIHdyaXRlKCAiRGVpbmUga2xlaW5lbiBIYWVuZGNoZW4ga29lbm5lbiBkZW4gR3JpZmYgbmljaHQgIisKKyAgICAgICAgICAgICAgICAidW1rbGFtbWVybi5cbiIpOworCisgICAgICAgLyogLi4udW5kIGJyZWNoZW4gZGFzIFp1ZWNrZW4gYWIuICovCisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgUF9XSUVMRF9NU0csIFBfVU5XSUVMRF9NU0csIFBfV0VBUl9NU0csIFBfVU5XRUFSX01TRworICAgICBEb1dpZWxkKCksIERvVW53aWVsZCgpLCBJbmZvcm1VbndpZWxkKCksIEluZm9ybVdpZWxkKCkgCisgICAgIFVud2llbGRGdW5jLCBXaWVsZEZ1bmMgCisgICAgIC9zdGQvd2VhcG9uL2NvbWJhdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDIuMDIuMjAwOSwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vV2l0aERyYXcgYi9kb2MvbGZ1bi9XaXRoRHJhdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTUzMmEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vV2l0aERyYXcKQEAgLTAsMCArMSw0MiBAQAorV2l0aERyYXcoKQorRlVOS1RJT046CisgICAgIGludCBXaXRoRHJhdyhpbnQgYW1vdW50KTsKKworREVGSU5JRVJUIElOOgorICAgICAvcC9kYWVtb24vemVudHJhbGJhbmsuYworCitBUkdVTUVOVEU6CisgICAgIGludCBhbW91bnQJLSBhbmdlZm9yZGVydGUgR2VsZG1lbmdlCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGFtaXQgd2lyZCBiZWkgZGVyIFplbnRyYWxiYW5rIGVpbmUgYmVzdGltbXRlIE1lbmdlIEdlbGQgYW5nZWZvcmRlcnQuCisgICAgIERlciBSdWVja2dhYmV3ZXJ0IGhhZW5ndCB2b20gS2Fzc2Vuc3RhbmQgZGVyIFplbnRyYWxiYW5rIGFiIHVuZCBpc3QKKyAgICAgZW50d2VkZXIgYW1vdW50IG9kZXIgYW1vdW50LzMuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIE1lbmdlIGRlcyBiZWkgZGVyIFplbnRyYWxiYW5rICJhYmdlaG9iZW5lbiIgR2VsZGVzLgorCitCRUlTUElFTEU6CisgICAgICNpbmNsdWRlIDxiYW5rLmg+CisgICAgIC4uLgorICAgICBpZihaRU5UUkFMQkFOSy0+V2l0aERyYXcoNTAwMDApPDUwMDAwKQorICAgICAgd3JpdGUoYnJlYWtfc3RyaW5nKAorICAgICAgICJMZWlkZXIga29lbm5lbiB3aXIgaWhuZW4ga2VpbmVuIHZvbGxlbiBadXNjaHVzcyB6dSBpaHJlbSBIb3RlbGJhdSAiCisgICAgICAgImdlYmVuISIsCisgICAgICAgIkRlciBCZWFtdGUgc2FndDogIiw3OCkpOworICAgICAgc2F5KGJyZWFrX3N0cmluZygKKyAgICAgICAiTGVpZGVyIGtvZW5uZW4gd2lyIGlobmVuIGtlaW5lbiB2b2xsZW4gWnVzY2h1c3MgenUgaWhyZW0gSG90ZWxiYXUgIgorICAgICAgICJnZWJlbiEiLAorICAgICAgICJEZXIgQmVhbXRlIHNhZ3QgenUgIit0aGlzX3BsYXllcigpLT5uYW1lKFdFTSkrIjogIiw3OCkpOworICAgICAgLi4uCisKK0JFTUVSS1VOR0VOOgorICAgICBVbnNlcmUgWmVudHJhbGJhbmsgaXN0IGtvcnJ1cHQsIHZvciBhbGxlbSBkYWR1cmNoLCBkYXNzIGluIExhZWRlbiB1bmQKKyAgICAgYW4gYW5kZXJlbiBTdGVsbGVuIEdlbGQgZXJ6ZXVndCB3aXJkLgorCitTSUVIRSBBVUNIOgorICAgICBHZWxkaGFuZGxpbmc6CUFkZE1vbmV5KEwpLCBRdWVyeU1vbmV5KEwpCisgICAgIFplbnRyYWxiYW5rOglQYXlJbihMKSwgX3F1ZXJ5X2N1cnJlbnRfbW9uZXkoTCkKKyAgICAgU29uc3RpZ2VzOgkJL2l0ZW1zL21vbmV5LmMsIC9zeXMvYmFuay5oCisKKzI3LiBBcHIgMjAwNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vX19JTklUIGIvZG9jL2xmdW4vX19JTklUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGI2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9fX0lOSVQKQEAgLTAsMCArMSwxMiBAQAorU1lOT1BTSVM6CisJX19JTklUCisKK0RFU0NSSVBUSU9OOgorCVRoaXMgZnVuY3Rpb24gaXMgY29uc3RydWN0ZWQgYXV0b21hZ2ljYWxseSBieSB0aGUgcGFyc2VyIGF0CisJY29tcGlsZXIsIGlmIHRoZSBwYXJzZXIgd2FzIGNvbXBpbGVkIHdpdGggI2RlZmluZQorCUlOSVRJQUxJU0FUSU9OX19JTklULiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBpbnRlbmRlZCB0byBiZQorCWRlZmluZWQgYnkgdGhlIGxwYyBvYmplY3RzLCBhbmQgbmV2ZXIgdG8gYmUgY2FsbGVkIGZyb20gbHBjCisJb2JqZWN0cy4gVGhpcyBtYW4gcGFnZSBpcyBoZXJlIGp1c3QgZm9yIGNvbXBsZXRlbmVzcy4KKworU0VFIEFMU086CisJaW5pdGlhbGlzYXRpb24oTFBDKQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vX3F1ZXJ5X2N1cnJlbnRfbW9uZXkgYi9kb2MvbGZ1bi9fcXVlcnlfY3VycmVudF9tb25leQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI3ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vX3F1ZXJ5X2N1cnJlbnRfbW9uZXkKQEAgLTAsMCArMSwzMiBAQAorX3F1ZXJ5X2N1cnJlbnRfbW9uZXkoKQorRlVOS1RJT046CisgICAgIGludCBfcXVlcnlfY3VycmVudF9tb25leSgpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3AvZGFlbW9uL3plbnRyYWxiYW5rLmMKKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3aXJkIHp1cnVlY2tnZWdlYmVuLCB3aWV2aWVsIEdlbGQgZGllIFplbnRyYWxiYW5rIGJlc2l0enQuCisKK0JFSVNQSUVMRToKKyAgICAgI2luY2x1ZGUgPGJhbmsuaD4KKyAgICAgLi4uCisgICAgIGlmKFpFTlRSQUxCQU5LLT5fcXVlcnlfY3VycmVudF9tb25leSgpPDMwMDAwKSB7CisgICAgICB3cml0ZShicmVha19zdHJpbmcoCisgICAgICAgIkxlaWRlciBrb2VubmVuIHdpciBpaHJlbiBCYXVzcGFydmVydHJhZyBkZXJ6ZWl0IG5pY2h0IGVpbmxvZXNlbi4iLAorICAgICAgICJEZXIgQmVhbXRlIHNhZ3Q6ICIsNzgpKTsKKyAgICAgIHNheShicmVha19zdHJpbmcoCisgICAgICAgIkxlaWRlciBrb2VubmVuIHdpciBpaHJlbiBCYXVzcGFydmVydHJhZyBkZXJ6ZWl0IG5pY2h0IGVpbmxvZXNlbi4iLAorICAgICAgICJEZXIgQmVhbXRlIHNhZ3QgenUgIit0aGlzX3BsYXllcigpLT5uYW1lKFdFTSkrIjogIiw3OCkpOworICAgICB9CisKK0JFTUVSS1VOR0VOOgorICAgICBVbnNlcmUgWmVudHJhbGJhbmsgaXN0IGtvcnJ1cHQsIHZvciBhbGxlbSBkYWR1cmNoLCBkYXNzIGluIExhZWRlbiB1bmQKKyAgICAgYW4gYW5kZXJlbiBTdGVsbGVuIEdlbGQgZXJ6ZXVndCB3aXJkLgorCitTSUVIRSBBVUNIOgorICAgICBHZWxkaGFuZGxpbmc6CUFkZE1vbmV5KEwpLCBRdWVyeU1vbmV5KEwpCisgICAgIFplbnRyYWxiYW5rOglXaXRoRHJhdyhMKSwgUGF5SW4oTCkKKyAgICAgU29uc3RpZ2VzOgkJL2l0ZW1zL21vbmV5LmMsIC9zeXMvYmFuay5oCisKKzI3LiBBcHIgMjAwNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vX3VucGFyc2VkX2FyZ3MgYi9kb2MvbGZ1bi9fdW5wYXJzZWRfYXJncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTUyN2I4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vX3VucGFyc2VkX2FyZ3MKQEAgLTAsMCArMSwyOSBAQAorX3VucGFyc2VkX2FyZ3MoKQorRlVOS1RJT046CisgICAgIHZhcmFyZ3Mgc3RyaW5nIF91bnBhcnNlZF9hcmdzKGludCBsZXZlbCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9jb21tYW5kLmM6CisKK0FSR1VNRU5URToKKyAgICAgbGV2ZWwKKyAgICAgICAgICBHaWJ0IGFuLCB3aWV2aWVsIGRlcyBUZXh0ZXMgIndlZ2dlcGFyc2VkIiB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBHaWJ0IGRlbiBUZXh0IGRlcyBsZXR6dGVuIEJlZmVobHMgZGVzIFNwaWVsZXJzIChvaG5lIGRhcyBCZWZlaGxzd29ydAorICAgICBzZWxic3QpIHp1cnVlY2suICJsZXZlbCIgZ2lidCBkYWJlaSBhbiwgd2lldmllbCBnZXBhcnNlZCB3aXJkOgorICAgICBsZXZlbCA9IDAgOiBHYXIga2VpbiBQYXJzaW5nLgorICAgICAgICAgICAgICAgICAtPiBlbnRzcHJpY2h0IGVpbmVtIHF1ZXJ5X2NvbW1hbmQoKQorICAgICBsZXZlbCA9IDEgOiBEZXIgVGV4dCB3aXJkIGluIEtsZWluYnVjaHN0YWJlbiB1bWdld2FuZGVsdCwgZG9wcGVsdGUKKyAgICAgICAgICAgICAgICAgTGVlcnplaWNoZW4gd2VyZGVuIGVudGZlcm50LgorICAgICBsZXZlbCA9IDIgOiBTZW1pa29saSwgS29tbWF0YSB1bmQgRG9wcGVscHVua3RlIHdlcmRlbiBpbiBMZWVyemVpY2hlbgorCQkgdW1nZXdhbmRlbHQsIGRvcHBlbHRlIExlZXJ6ZWljaGVuIHVuZCBBcnRpa2VsIChkZXIsIGRpZSwKKwkJIGRhcywgZWluLC4uLikgd2VyZGVuIGVudGZlcm50LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEZXIgZ2VwYXJzdGUgVGV4dC4KKworU0lFSEUgQVVDSDoKKyAgICAgcXVlcnlfY29tbWFuZCgpCisKKzcuQXVnIDIwMDcgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2FjY2Vzc19yaWdodHMgYi9kb2MvbGZ1bi9hY2Nlc3NfcmlnaHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NTk3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9hY2Nlc3NfcmlnaHRzCkBAIC0wLDAgKzEsNzUgQEAKK2FjY2Vzc19yaWdodHMoKQorCitGVU5LVElPTjoKKyAgICBpbnQgYWNjZXNzX3JpZ2h0cyhzdHJpbmcgZXVpZCwgc3RyaW5nIGZpbGUpOworCitERUZJTklFUlQgSU46CisgICAgYWNjZXNzX3JpZ2h0cy5jIChtdXNzIG1hbiBzZWxiZXIgc2NocmVpYmVuKQorCitQQVJBTUVURVI6CisgICAgZXVpZAorICAgICAgICBEaWUgZXVpZCBkZXNqZW5pZ2VuLCBkZXIgYXVmIGRhcyBWZXJ6ZWljaG5pcyBzY2hyZWliZW4gd2lsbAorICAgIGZpbGUKKyAgICAgICAgTmFtZSBkZXIgRGF0ZWksIGF1ZiBkaWUgenVnZWdyaWZmZW4gd2VyZGVuIHNvbGwKKworQkVTQ0hSRUlCVU5HOgorICAgIGFjY2Vzc19yaWdodHMoKSB3aXJkIGltbWVyIGRhbm4gYXVmZ2VydWZlbiwgd2VubiBqZW1hbmQsIGRlciBuaWNodAorICAgIHNvd2llc28gc2Nob24gc2NocmVpYmJlcmVjaHRpZ3QgaXN0LCBpbiBkaWUgRGF0ZWkvZGFzIFZlcnplaWNobmlzIGZpbGUKKyAgICBzY2hyZWliZW4gb2RlciBsb2VzY2hlbiB3aWxsLgorCisgICAgQW5oYW5kIHZvbiBldWlkIGthbm4gbWFuIGRhbm4gZW50c2NoZWlkZW4sIG9iIGRlciBTY2hyZWlienVncmlmZiBlcmxhdWJ0CisgICAgd2lyZCBvZGVyIG5pY2h0LgorCitSVUVDS0dBQkVXRVJUOgorICAgIDAsIHdlbm4gZGVyIFp1Z3JpZmYgdmVyd2VpZ2VydCB3aXJkLAorICAgIDEsIHdlbm4gZGVyIFp1Z3JpZmYgZXJsYXVidCB3aXJkLgorCitCRUlTUElFTEU6CisgICAgLyogL2QvaW5zZWxuL3dhcmdvbi9hY2Nlc3NfcmlnaHRzLmMgKi8KKworICAgIGludCBhY2Nlc3NfcmlnaHRzKHN0cmluZyBldWlkLCBzdHJpbmcgZmlsZSkKKyAgICB7CisgICAgICBzdHJpbmcgZGlyLCByZXN0OworCisgICAgICAvLyBDYXR3ZWF6bGUgZGFyZiBhdWYgYWxsZXMgenVncmVpZmVuICgqYXJnbCogO14pCisgICAgICBpZiAoZXVpZCA9PSAiY2F0d2VhemxlIikKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIC8vIFJlY2h0ZSBhdWYgZWluemVsbmUgVmVyemVpY2huaXNzZSBlcm1pdHRlbG46CisgICAgICBpZiAoc3NjYW5mKGZpbGUsICIlcy8lcyIsIGRpciwgcmVzdCkgIT0gMikKKyAgICAgICAgcmVzdCA9IGZpbGU7CisKKyAgICAgIC8vIEpvZiB1bmQgQm9pbmcgZHVlcmZlbiBhbiBUYXJrbyBSZXViIHJ1bXBmdXNjaGVuOgorICAgICAgaWYgKGRpciA9PSAidGFya28iICYmIChldWlkID09ICJqb2YiIHx8IGV1aWQgPT0gImJvaW5nIikpCisgICAgICAgIHJldHVybiAxOworCisgICAgICAvLyBBbnRoZWEgZGFyZiBkaWUgS2FydGVuIHZvbiBBdXJvcmEgdW5kIGRlciBQaXJhdGVuaG9laGxlIGJlYXJiZWl0ZW46CisgICAgICBpZiAoZGlyID09ICJNQVBTIiAmJiAKKyAgICAgICAgICBtZW1iZXIoICh7IkF1cm9yYSIsICJQaXJhdGVuaG9laGxlIiB9KSwgcmVzdCkgPj0gMCAmJiAKKyAgICAgICAgICBldWlkID09ICJhbnRoZWEiKQorICAgICAgICByZXR1cm4gMTsKKworICAgICAgLy8gYWxsZSBhbmRlcmVuIGR1ZXJmZW4gbmljaHQhCisgICAgICByZXR1cm4gMDsKKyAgICB9CisKK0JFTUVSS1VOR0VOOgorICAgIGZpbGUgaXN0IGltbWVyIHJlbGF0aXYgenUgZGVtIFZlcnplaWNobmlzLCBpbiBkZW0gZGFzIGFjY2Vzc19yaWdodHMuYworICAgIGxpZWd0ISBXaWxsIGFsc28gamVtYW5kIGF1ZiAvZC9pbnNlbG4vd2FyZ29uL3RhcmtvL21hY3Jvcy5oIHNjaHJlaWJlbiwKKyAgICB3aXJkIGZpbGUgInRhcmtvL21hY3Jvcy5oIiB1ZWJlcmdlYmVuLgorCisgICAgSW4gVmVyemVpY2huaXNzZW4gdm9uIE1hZ2llcm4gbWl0IGVpbmVtIExldmVsID49IEVMREVSX0xWTCB3aXJkIGRhcworICAgIGFjY2Vzc19yaWdodHMuYyBOSUNIVCBhdXNnZXdlcnRldCAoZGEgZGFtaXQgYW5kZXJlIE1hZ2llciB6Qi4gYW4KKyAgICBFcnptYWdpZXJyZWNodGUgZ2VsYW5nZW4ga29lbm50ZW4pLgorCisgICAgRXMgd2lyZCBpbW1lciBudXIgRUlOIGFjY2Vzc19yaWdodHMuYyBhdXNnZXdlcnRldCwgbmFlbWxpY2ggZGFzIGluIGRlcgorICAgIHRpZWZzdGVuIFZlcnplaWNobmlzZWJlbmUuCisKKyAgICBNYW4ga2FubiBzb3dvaGwgaW4gc2VpbmVuIFJlZ2lvbnN2ZXJ6ZWljaG5pc3NlbiBhbHMgYXVjaCBpbiBzZWluZW4KKyAgICBIb21ldmVyemVpY2huaXNzZW4gYWNjZXNzX3JpZ2h0cy5jLURhdGVpZW4gYW5sZWdlbi4KKworICAgIEdBTlogV0lDSFRJRyEhIQorICAgIEZ1ZXIgZGllIERhdGVpZW4sIGRpZSBldnRsLiB2b24gYW5kZXJlbiBhbmdlbGVndCB3ZXJkZW4sIGlzdCBtYW4gaW1tZXIKKyAgICBub2NoIHNlbGJzdCB2ZXJhbnR3b3J0bGljaCEgV2VubiBqZW1hbmQgYWxzbyBlaW4gR2ViaWV0IGJlaSBEaXIgYW4tCisgICAgc2NobGllc3N0LCBtdXNzIGVzIGVyc3Qgdm9uIGRlbiB2ZXJhbnR3b3J0bGljaGVuIFJlZ2lvbnNtYWdpZXJuIGFiZ2VzZWduZXQKKyAgICBzZWluIQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vYnVmZmVyX2hwIGIvZG9jL2xmdW4vYnVmZmVyX2hwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTdiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9idWZmZXJfaHAKQEAgLTAsMCArMSw3NiBAQAorRlVOS1RJT046CisgICAgaW50IGJ1ZmZlcl9ocCggaW50IHZhbCwgaW50IHJhdGUgKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgdmFsOiAgR2VzYW10ZSBIZWlsdW5nLgorICAgIHJhdGU6IExQLVJhdGUuCisgICAgICAgIAorQkVTQ0hSRUlCVU5HOgorICAgIEVyaG9laHQgZGllIExQIGVpbmVzIFNwaWVsZXJzIGF1dG9tYXRpc2NoIGluc2dlc2FtdCB1bSBkZW4gV2VydCAidmFsIi4KKyAgICBQcm8gaGVhcnRfYmVhdCgpIHdpcmQgaWhtIGRhYmVpIGRlciBXZXJ0ICJyYXRlIiB6dWdlZnVlaHJ0LgorICAgIFNvbGxlbiBuZWJlbiBQX0hQIG5vY2ggd2VpdGVyZSBQcm9wcyBtYW5pcHVsaWVydCB3ZXJkZW4gLSBic3B3LiB6dXIKKyAgICBQX0ZPT0QgLSBiaWV0ZXQgc2ljaCBkaWUgRnVua3Rpb24gY29uc3VtZSgpIGFuLgorCitSVUVDS0dBQkVXRVJURToKKyAgICBEZXIgZ2V0YW5rdGUgV2VydCBwcm8gaGVhcnRfYmVhdCgpLgorCitCRU1FUktVTkc6CisgICAgU29sbHRlIHZvbiBqZWRlciB0cmFnYmFyZW4gSGVpbHVuZyBnZW51dHp0IHdlcmRlbiwgd2VsY2hlIGRlbiBTcGllbGVyCisgICAgZGFyYXVmIHNjaGxpZXNzZW4gbGFzc2VuIGthbm4sIGF1ZiBuYXR1ZXJsaWNoZW0gdW5kIG5pY2h0bWFnaXNjaGVtIFdlZworICAgIChFc3NlbiwgVHJpbmtlbikgZ2VoZWlsdCB3b3JkZW4genUgc2Vpbi4KKworQkVJU1BJRUw6CisgICAgI2RlZmluZSBUUCB0aGlzX3BsYXllcigpCisgICAgLi4uCisKKyAgICBpbnQgaGVpbHVuZz0xOworICAgIC4uLgorCisgICAgY3JlYXRlKCkKKyAgICB7CisgICAgIDo6Y3JlYXRlKCk7CisgICAgIFNldFByb3AoUF9OQU1FLCJIZWlscGZsYW56ZSIpOworICAgICAuLi4KKworICAgICBBZGRDbWQoImlzcyIsImVhdCIpOworICAgIH0KKworICAgIGludCBlYXQoc3RyaW5nIHN0cikKKyAgICB7CisgICAgICBub3RpZnlfZmFpbCgiV0FTIHdpbGxzdCBEdSBlc3Nlbj9cbiIpOworICAgICAgaWYgKCAhc3RyIHx8ICFpZChzdHIpICkKKyAgICAgICByZXR1cm4gMDsKKyAgICAgIC4uLgorCisgICAgICBpZiAoICFUUC0+ZWF0X2Zvb2QoMjUpICkKKyAgICAgICByZXR1cm4gMTsKKworICAgICAgVFAtPmJ1ZmZlcl9ocCgyMCw1KTsKKyAgICAgIFRQLT5idWZmZXJfc3AoODAsMTApOworICAgICAgaGVpbHVuZy0tOworICAgICAgd3JpdGUoQlMoIkR1IGZ1ZWhsc3QgbGFuZ3NhbSwgd2llIERlaW5lIEtyYWVmdGUgenVydWVja2tlaHJlbi4iKSk7CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJlc2V0KCkKKyAgICB7CisgICAgICBoZWlsdW5nPTE7CisgICAgICA6OnJlc2V0KCk7CisgICAgfQorCisgICAgRXMgd2lyZCBkdXJjaCBlYXRfZm9vZCBnZXRlc3RldCwgb2IgZGVyIFNwaWVsZXIgbm9jaCBnZW51ZWdlbmQgZXNzZW4ga2Fubi4KKyAgICBXZW5uIGphLCBrcmllZ3QgdW5zZXIgSGVsZCBkaWUgMjUgYXV0b21hdGlzY2ggb2JlbiBkcmF1ZiB1bmQgYXVzc2VyZGVtCisgICAgMjAgTFAgaW4gNS1MUC1TY2hyaXR0ZW4gdW5kIDgwIEtQIGluIDEwLUxQLVNjaHJpdHRlbiBndXRnZXNjaHJpZWJlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgQWVobmxpY2g6ICBoZWFsX3NlbGYsIHJlc3RvcmVfc3BlbGxfcG9pbnRzLCByZXN0b3JlX2hpdF9wb2ludHMsIAorICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcAorICAgICBUYW5rZW46ICAgIGNvbnN1bWUsIGRyaW5rX2FsY29ob2wsIGRyaW5rX3NvZnQsIGVhdF9mb29kCisgICAgIFByb3BzOiAgICAgUF9TUCwgUF9IUCwKKyAgICAgS29uemVwdGU6ICBoZWlsdW5nCisKKzkuIEF1Z3VzdCAyMDE1IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9idWZmZXJfc3AgYi9kb2MvbGZ1bi9idWZmZXJfc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3MzQxYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2J1ZmZlcl9zcApAQCAtMCwwICsxLDM2IEBACitGVU5LVElPTjoKKyAgICBpbnQgYnVmZmVyX3NwKCBpbnQgdmFsLCBpbnQgcmF0ZSApOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvbGlmZS5jCisKK0FSR1VNRU5URToKKyAgICB2YWw6ICBHZXNhbXRlIEhlaWx1bmcuCisgICAgcmF0ZTogS1AtUmF0ZS4KKyAgICAgICAgCitCRVNDSFJFSUJVTkc6CisgICAgRXJob2VodCBkaWUgS1AgZWluZXMgU3BpZWxlcnMgYXV0b21hdGlzY2ggaW5zZ2VzYW10IHVtIGRlbiBXZXJ0ICJ2YWwiLgorICAgIFBybyBoZWFydF9iZWF0KCkgd2lyZCBpaG0gZGFiZWkgZGVyIFdlcnQgInJhdGUiIHp1Z2VmdWVocnQuCisgICAgU29sbGVuIG5lYmVuIFBfU1Agbm9jaCB3ZWl0ZXJlIFByb3BzIG1hbmlwdWxpZXJ0IHdlcmRlbiAtIGJzcHcuIHp1cgorICAgIFBfRk9PRCAtIGJpZXRldCBzaWNoIGRpZSBGdW5rdGlvbiBjb25zdW1lKCkgYW4uCisKK1JVRUNLR0FCRVdFUlRFOgorICAgIERlciBnZXRhbmt0ZSBXZXJ0IHBybyBoZWFydF9iZWF0KCkuCisKK0JFTUVSS1VORzoKKyAgICBTb2xsdGUgdm9uIGplZGVyIHRyYWdiYXJlbiBIZWlsdW5nIGdlbnV0enQgd2VyZGVuLCB3ZWxjaGUgZGVuIFNwaWVsZXIKKyAgICBkYXJhdWYgc2NobGllc3NlbiBsYXNzZW4ga2FubiwgYXVmIG5hdHVlcmxpY2hlbSB1bmQgbmljaHRtYWdpc2NoZW0gV2VnCisgICAgKEVzc2VuLCBUcmlua2VuKSBnZWhlaWx0IHdvcmRlbiB6dSBzZWluLgorCitCRUlTUElFTDoKKyAgICBzLiBCc3AuIHp1ICJidWZmZXJfaHAiCisKK1NJRUhFIEFVQ0g6CisgICAgIEFlaG5saWNoOiAgaGVhbF9zZWxmLCByZXN0b3JlX3NwZWxsX3BvaW50cywgcmVzdG9yZV9oaXRfcG9pbnRzLCAKKyAgICAgICAgICAgICAgICBidWZmZXJfaHAKKyAgICAgVGFua2VuOiAgICBjb25zdW1lLCBkcmlua19hbGNvaG9sLCBkcmlua19zb2Z0LCBlYXRfZm9vZAorICAgICBQcm9wczogICAgIFBfU1AsIFBfSFAsCisgICAgIEtvbnplcHRlOiAgaGVpbHVuZworCis5LiBBdWd1c3QgMjAxNSBHbG9pbnNvbgorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9idXlfb2JqIGIvZG9jL2xmdW4vYnV5X29iagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjE5OTViCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vYnV5X29iagpAQCAtMCwwICsxLDQyIEBACitidXlfb2JqKCkKKworRlVOS1RJT046CisJc3RhdGljIHN0cmluZyBidXlfb2JqKG1peGVkIG9iLCBpbnQgc2hvcnQpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9zaG9wLmMKKworQVJHVU1FTlRFOgorCW9iIC0gZGVyIEdlZ2Vuc3RhbmQgYmVpIGRlbSBnZXBydWVmdCB3ZXJkZW4gc29sbCwgb2IgZGVyIExhZGVuIGlobgorCSAgICAgYW4gdGhpc19wbGF5ZXIoKSB2ZXJrYXVmdC4gU29sbHRlIGVzIHNpY2ggaGllcmJlaSB1bSBlaW4KKwkgICAgIEZpeGVkT2JqZWN0IGhhbmRlbG4sIHdpcmQgZWluIFN0cmluZyB1ZWJlcmdlYmVuLCBhbnNvbnN0ZW4gZWluCisJICAgICBvYmplY3QuCisgICAgICAgIHNob3J0IC0gQmlzaGVyIG5vY2ggbmljaHQgaW4gQmVudXR6dW5nLiBBYmVyIGZ1ZXIgZGllIFp1a3VuZnQKKyAgICAgICAgICAgICB2b3JnZXNlaG4sIGZhbGxzIG1hbiBtZWhyZXJlIE9iamVrdGUgYXVmIGVpbm1hbCBrYXVmdC4KKyAgICAgICAgICAgICBFaW4gYXVzd2VydGVuIGlzdCBrZWluZSBQZmxpY2h0LCB3YWVyZSBhYmVyIHByYWt0aXNjaCwgZGFtaXQKKyAgICAgICAgICAgICBkZXIgU2Nyb2xsIGRhYmVpIG5pY2h0IHp1IGdyb3NzIHdpcmQuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgICAgIEVpbiBTdHJpbmcgd2FzIGRlciBIYWVuZGxlciBzYWdlbiBzb2xsIHdpZXNvIGRlciBHZWdlbnN0YW5kIG5pY2h0CisJdmVya2F1ZnQgd2lyZC4gRGVyIFN0cmluZyB3aXJkIGRhYmVpIHdpZSBmb2xndCB1bWdlYnJvY2hlbjoKKyAgICAgICAgYnJlYWtfc3RyaW5nKHN0ciwgNzgsIE5hbWUoV0VSLCAxKSsiIHNhZ3Q6ICIpCitCRVNDSFJFSUJVTkc6CisJRHVyY2ggdWViZXJzY2hyZWliZW4gZGllc2VyIEZ1bmt0aW9uIGlzdCBlcyBtb2VnbGljaCBiZXN0aW1tdGUKKwlPYmpla3RlICh3aWUgei5iLiBRdWVzdG9iamVrdGUpIG51ciBhbiBhdXNnZXdhZWhsdGUgU3BpZWxlciB6dQorCXZlcmthdWZlbikuIEFiZXIgYXVjaCBhYmZyYWdlbiBvYiBkZXIgTGFkZW4gdWViZXJoYXVwdCBtaXQKKwl0aGlzX3BsYXllcigpIGhhbmRlbHQsIHNpbmQgbW9lZ2xpY2guCisKK0JFSVNQSUVMRToKKwlzdGF0aWMgc3RyaW5nIGJ1eV9vYmoobWl4ZWQgb2IsIGludCBzaG9ydCkKKwl7CisJICAgaWYgKFBMLT5RdWVyeVByb3AoUF9SQUNFKT09Ilp3ZXJnIikKKwkgICAgICByZXR1cm4gIkljaCB2ZXJrYXVmZSBuaWNodHMgYW4gWndlcmdlISI7CisJICAgcmV0dXJuIDo6YnV5X29iaihvYiwgc2hvcnQpOworCX0KKworU0lFSEUgQVVDSDoKKwlzZWxsX29iaigpLCBBZGRGaXhlZE9iamVjdCgpLCBSZW1vdmVGaXhlZE9iamVjdCgpLCBTZXRTdG9yYWdlUm9vbSgpLAorICAgICAgICAvc3RkL3Nob3AuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBUaHUgTWFyIDQgMTU6MjY6MTMgMTk5OSBieSBQYWRyZWljCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9jYXRjaF9tc2cgYi9kb2MvbGZ1bi9jYXRjaF9tc2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmMDljOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2NhdGNoX21zZwpAQCAtMCwwICsxLDE1IEBACitjYXRjaF9tc2coKQorCitTWU5PUFNJUzoKKyAgICB2b2lkIGNhdGNoX21zZyhtaXhlZCAqYXJyLCBvYmplY3Qgb2JqKQorCitERVNDUklQVElPTjoKKyAgICBXaGVuIHNheSgpLCB0ZWxsX29iamVjdCgpICBvciB0ZWxsX3Jvb20oKSBhcmUgdXNlZCB3aXRoIGFuIGFycmF5IAorICAgIGFzIG1lc3NhZ2UsIHRoZSBhcnJheSB3aWxsIGJlIHBhc3NlZCB0byBjYXRjaF9tZXNzYWdlKCkgaW4gYWxsIGxpdmluZworICAgIG9iamVjdHMgdGhhdCBjYW4gaGVhciBpdCwgaW5zdGVhZCBvZiB3cml0aW5nIHRvIHRoZSB1c2VyIHJlc3AuCisgICAgc2VuZGluZyB0byBjYXRjaF90ZWxsKCkuIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50CisgICAgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMgYmV0d2VlbiBsaXZpbmdzLiBUaGUgc2Vjb25kIGRlbm90ZXMKKyAgICB0aGUgb2JqZWN0IHRoYXQgaGFzIHNlbnQgdGhlIG1lc3NhZ2UuCisKK1NFRSBBTFNPOgorIHNheShFKSwgdGVsbF9yb29tKEUpLCB0ZWxsX29iamVjdChFKSwgY2F0Y2hfdGVsbChMKQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vY2F0Y2hfdGVsbCBiL2RvYy9sZnVuL2NhdGNoX3RlbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0ODMyYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2NhdGNoX3RlbGwKQEAgLTAsMCArMSwyNSBAQAorY2F0Y2hfdGVsbCgpCisKK1NZTk9QU0lTOgorCXZvaWQgY2F0Y2hfdGVsbChzdHJpbmcpCisKK0RFU0NSSVBUSU9OOgorCVdoZW4gYSBtZXNzYWdlIGlzIHNlbnQgdG8gYSBub25pbnRlcmFjdGl2ZSBwbGF5ZXIsIHZpYSBzYXkoKSwKKwl0ZWxsX29iamVjdCwgdGVsbF9yb29tKCksIHByaW50ZigpIG9yIHdyaXRlKCksIGl0IHdpbGwgZ2V0IHRvIHRoZQorCWZ1bmN0aW9uIGNhdGNoX3RlbGwoc3RyaW5nKS4gVGhpcyB3aWxsIGVuYWJsZSBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuCisJTlBDcyBhbmQgZnJvbSBhIHBsYXllciB0byBhbiBOUEMuCisKKwlBbHNvLCBpZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaXMgYmVpbmcgc2hhZG93ZWQgYW5kIHRoZQorCXNoYWRvdyBoYXMgY2F0Y2hfdGVsbCgpIGRlZmluZWQsIGl0IHdpbGwgcmVjZWl2ZSBhbGwgb3V0cHV0CisJdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgd3JpdHRlbiB0byB0aGUgdXNlci4KKworCUlmIGEgbWVzc2FnZSBpcyBzZW50IGJ5IGFuIGludGVyYWN0aXZlIG9iamVjdCwgY2F0Y2hfdGVsbCgpIGlzCisJbm90IGNhbGxlZCBpbiB0aGF0IG9iamVjdCwgdG8gcHJldmVudCByZWN1cnNpdmUgY2FsbHMuIFRodXMKKwljYXRjaF90ZWxsKCkgaW4gaW50ZXJhY3RpdmUgb2JqZWN0cyBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgdGhlCisJb3V0cHV0IHRoYXQgZ29lcyB0byB0aGUgdXNlcnMuCisKKwlUaGUgZWZ1biBzaG91dCgpIHNlbmRzIHRvIGludGVyYWN0aXZlIG9iamVjdHMgb25seS4KKworU0VFIEFMU086CisJZW5hYmxlX2NvbW1hbmRzKEUpLCBzYXkoRSksIHRlbGxfb2JqZWN0KEUpLCB0ZWxsX3Jvb20oRSksCisJd3JpdGUoRSksIGNhdGNoX21zZyhMKSAKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2NoZWNrX2FuZF91cGRhdGVfdGltZWRfa2V5IGIvZG9jL2xmdW4vY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzYzI2MQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2NoZWNrX2FuZF91cGRhdGVfdGltZWRfa2V5CkBAIC0wLDAgKzEsOTMgQEAKK2NoZWNrX2FuZF91cGRhdGVfdGltZWRfa2V5KCkKKworRlVOS1RJT046CisgICAgICAgcHVibGljIGludCBjaGVja19hbmRfdXBkYXRlX3RpbWVkX2tleShpbnQgZHVyYXRpb24sIHN0cmluZyBrZXkpCisgICAgICAgCitERUZJTklFUlQgSU46CisgICAgICAgL3N0ZC9saXZpbmcvbGlmZS5jICAgIAorCitBUkdVTUVOVEU6CisgICAgICAgaW50IGR1cmF0aW9uOiBJbiB3aWV2aWVsIFNla3VuZGVuIHdpcmQgPGtleT4gd2llZGVyIGZyZWlnZWJlYmVuLAorICAgICAgICAgICAgICAgICAgICAgKHouQi4gd2FubiBrYW5uIGRlciBTcGllbGVyIGFuIGRpZXNlciBTdGVsbGUgZWluZSBuZXVlIAorICAgICAgICAgICAgICAgICAgICAgSGVpbHVuZyBiZWtvbW1lbikuCisgICAgICAgc3RyaW5nIGtleSAgOiBFaW5kZXV0aWdlciBOYW1lLCB3aXJkIHp1c2FtbWVuIG1pdCA8ZHVyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICBnZXNwZWljaGVydC4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgIERpZXNlIEZ1bmt0aW9uIGhhdCBkaWUgQXVmZ2FiZSwgWmVpdHNwZXJyZW4gdmVyc2NoaWVkZW5zdGVyIEFydAorICAgICAgIGVpbmZhY2ggenUgZXJtb2VnbGljaGVuICh6LkIuIGRpZSBSZWFsaXNpZXJ1bmcgY2hhcmFrdGVyLWFiaGFlbmdpZ2VyCisgICAgICAgSGVpbHN0ZWxsZW4gdS5hZS4pLgorCisgICAgICAgPGtleT4gbXVzcyBlaW5kZXV0aWcgc2VpbiwgYW0gYmVzdGVuIHZlcndlbmRldCBtYW4gZGVuIGVpZ2VuZW4KKyAgICAgICBNYWdpZXJuYW1lbiAodW5kIGdnZi4gbmVuIEdlYmlldHNuYW1lbikgYWxzIFRlaWwgZGVzIFN0cmluZ3MuCisKKyAgICAgICBEaWUgRnVua3Rpb24gaXN0IGRlZmluaWVydCBpbiAvc3RkL2xpdmluZy9saWZlLmMuIFNvbWl0IGZ1bmt0aW9uaWVydAorICAgICAgIHNpZSBhdWNoIGJlaSBOUENzLiBEaWUgRGF0ZW4gd2VyZGVuIGluIFBfVElNSU5HX01BUCBnZXNwZWljaGVydCwgc2luZAorICAgICAgIGFsc28gZ2VnZW4gImVuZGUiIHJlc2lzdGVudC4gKHdlcmRlbiBhbGxlcmRpbmdzIG5hY2ggQWJsYXVmIGdnZi4KKyAgICAgICAnYXVmZ2VyYWV1bXQnKQorCisgICAgICAgRGFzIE1hcHBpbmcgUF9USU1JTkdfTUFQIGlzdCBOSUNIVCB6dXIgQWJmcmFnZSB1bmQgLyBvZGVyIE1hbmlwdWxhdGlvbgorICAgICAgICdwZXIgSGFuZCcgdm9yZ2VzZWhlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgICAwICAgIElyZ2VuZGVpbiBGZWhsZXIgaW0gQXVmcnVmLCBldnRsLiBleGlzdGllcnQgZGllIEZ1bmt0aW9uIChub2NoKQorICAgICAgICAgICAgbmljaHQgaW0gamV3LiBPYmpla3QuCisKKyAgICAgIC0xICAgIEFsbGVzIG9rYXkuIE5ldWVyIFplaXRwdW5rdCB3aXJkIGF1dG9tYXRpc2NoIGdlc3BlaWNoZXJ0LiBJbgorICAgICAgICAgICAgZGllc2VtIEZhbGwgZGFyZiBkZXIgU3BpZWxlciBnZWhlaWx0IHdlcmRlbi4KKworICAgICAgPjAgICAgS2V5IG5vY2ggZ2VzcGVycnQsIGluIGRlbSBGYWxsIGRhcmYgYWxzbyBuaWNodCBnZWhlaWx0IHdlcmRlbi4gCisgICAgICAgICAgICBEZXIgUnVlY2tnYWJld2VydCBpc3QgZGVyIFplaXRwdW5rdCwgYWIgZGVtIDxrZXk+IHdpZWRlciBmcmVpIGlzdCwKKyAgICAgICAgICAgIGxhZXNzdCBzaWNoIGRhaGVyIGRhenUgbnV0emVuLCB1bSBkZW0gU3BpZWxlciBlaW5lbiBBbmhhbHRzcHVua3QKKyAgICAgICAgICAgIHp1IGdlYmVuLCB3YW5uIGVyIGRpZSBTdGVsbGUgd2llZGVyIG51dHplbiBrYW5uLCBldHdhOgorCisgICAgICAgICAgICAiRGllIFNjaGFsZSBpc3QgZXJzdCBoYWxiIHZvbGwsIER1IG11c3N0IG5vY2ggZXR3YXMgd2FydGVuLiIKKworQkVJU1BJRUxFOgorICAgICAgIEVpbmUgSGVpbHN0ZWxsZSBzb2xsIGplZGVtIFNwaWVsZXIgYWxsZSA1bWluIHp1ciBWZXJmdWVndW5nIHN0ZWhlbjoKKworICAgICAgIEFkZENtZCgoeyJ0cmluayIsInRyaW5rZSJ9KSwidHJpbmtfY21kIik7CisKKyAgICAgICBpbnQgdHJpbmtfY21kKHN0cmluZyBzdHIpeworICAgICAgICAgLi4uCisgICAgICAgICAuLi4KKyAgICAgICAgIC8qCisgICAgICAgICBEZXIga2V5IHNvbGx0ZSBuYXR1ZXJsaWNoIGVpbmUgZXR3YXMgZWluZGV1dGlnZXJlIEtlbm56ZWljaG51bmcKKyAgICAgICAgIHdpZSBldHdhICJ0aWxseV90cmlua2VuIiBiZWtvbW1lbiwgYXVjaCB3ZW5uIGVyIGR1cmNoIGVpbmVuCisgICAgICAgICBhbmRlcmVuIChnbGVpY2huYW1pZ2VuKSBuaWNodCB1ZWJlcnNjaHJpZWJlbiB3ZXJkZW4ga2Fubi4KKworICAgICAgICAgVHJpZmZ0IGRpZXNlIEFiZnJhZ2UgaGllciB6dSwga2FubiBkZW0gU3BpZWxlciBIZWlsdW5nIG8uYWUuIHp1LQorICAgICAgICAgZ2VmdWVocnQgd2VyZGVuLiBEaWUgbmV1ZSBaZWl0IChkdXJhdGlvbikgd2lyZCBhdXRvbWF0aXNjaCBnZXNldHp0LgorICAgICAgICAgKi8KKyAgICAgICAgIGlmKHRoaXNfcGxheWVyKCktPmNoZWNrX2FuZF91cGRhdGVfdGltZWRfa2V5KDMwMCwiam9mX3RyaW5rZW4iKT09LTEpeworICAgICAgICAgICBpZih0aGlzX3BsYXllcigpLT5kcmlua19zb2Z0KDIpKXsKKyAgICAgICAgICAgICB0aGlzX3BsYXllcigpLT5oZWFsX3NlbGYoNTApOworICAgICAgICAgICAgIHdyaXRlKCJEdSBmdWVobHN0IERpY2ggc2ljaHRsaWNoIGVyZnJpc2NodC5cbiIpOworICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICBlbHNleworICAgICAgICAgICAgIHdyaXRlKCJEdSBoYXN0IHNjaG9uIHp1dmllbCBnZXRydW5rZW4uXG4iKTsKKyAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgd3JpdGUoIkR1IHRyaW5rc3QgdW5kIGRlbmtzdCAuIG8gTyAoSG1tLCBuaWNodCBzY2hsZWNodCkuXG4iKTsKKyAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgfQorICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworQkVNRVJLVU5HRU46IAorICAgICAgIEF1Y2ggYmVpIGRpZXNlciBGdW5rdGlvbiBpc3QgZGFyYXVmIHp1IGFjaHRlbiwgZGFzcyBQcm9wZXJ0aWVzIHdpZQorICAgICAgIFBfRk9PRCwgUF9EUklOSyB1bmQgUF9BTENPSE9MIGJlcnVlY2tzaWNodGlndCB3ZXJkZW4uCisgICAgICAgSGVpbHN0ZWxsZW4gc2luZCBkZW0genVzdGFlbmRpZ2VuIE1hZ2llciBmdWVyIEhlaWx1bmdzLUJhbGFuY2UgenUgCisgICAgICAgbWVsZGVuLiBXZXIgZGllcyBtb21lbnRhbiBpc3QsIGthbm4gZGVtIE1haWxhbGlhcyBoZWlsdW5nc19iYWxhbmNlCisgICAgICAgZW50bm9tbWVuIHdlcmRlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgICBjaGVja190aW1lZF9rZXksIGVhdF9mb29kLCBkcmlua19hbGNvaG9sLCBkcmlua19zb2Z0LCBoZWFsX3NlbGYsCisgICAgICAgcmVzdG9yZV9zcGVsbF9wb2ludHMsIHJlZHVjZV9oaXRfcG9pbnQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDguMDEuMjAxMiwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9jaGVja19yZXN0cmljdGlvbnMgYi9kb2MvbGZ1bi9jaGVja19yZXN0cmljdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4MTVjZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2NoZWNrX3Jlc3RyaWN0aW9ucwpAQCAtMCwwICsxLDE0OSBAQAorY2hlY2tfcmVzdHJpY3Rpb25zKCkKK0ZVTktUSU9OOgorICAgIHN0cmluZyBjaGVja19yZXN0cmljdGlvbnMob2JqZWN0IHBsLCBtYXBwaW5nIHJlc3RyKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9yZXN0cmljdGlvbl9jaGVja2VyLmMKKworQVJHVU1FTlRFOgorICAgIG9iamVjdCBwbCAgICAgICAgZ2VwcnVlZnRlcyBMZWJld2VzZW4KKyAgICBtYXBwaW5nIHJlc3RyICAgIE1hcHBpbmcgbWl0IFJlc3RyaWt0aW9uZW4sIHMudS4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZSBNZXRob2RlIHdpcmQgdmVyd2VuZGV0LCB1bSBSZXN0cmlrdGlvbmVuICh6dW0gQmVpc3BpZWwgZnVlciBkYXMKKyAgICBDYXN0ZW4gZWluZXMgU3BlbGxzKSB6dSBwcnVlZmVuLiBTaWUgd2lyZCB2b24gU3BlbGxib29rIHVuZAorICAgIEdpbGRlbm9iamVrdCBkaXJla3QgZ2VudXR6dC4KKworICAgIElociB3aXJkIGRhYmVpIGVpbiBTcGllbGVyb2JqZWt0IHNvd2llIGVpbiBNYXBwaW5nIG1pdCBkZW4gamV3ZWlsaWdlbgorICAgIFJlc3RyaWt0aW9uZW4gdWViZXJnZWJlbi4gRGllIGFrdHVlbGwgbW9lZ2xpY2hlbiBLZXlzIGRlcyBNYXBwaW5ncyBzaW5kCisgICAgd2VpdGVyIHVudGVuIGdlbGlzdGV0LgorCitCRU1FUktVTkdFTjoKKyAgICBFcyB3aXJkIGJlaSBkZXIgUmFzc2UgUF9SRUFMX1JBQ0UgZ2VwcnVlZnQuIERlciBUYXJuaGVsbSBmdW5rdGlvbmllcnQKKyAgICBhbHNvIG5pY2h0LgorCisgICAgQmVpIEVyd2VpdGVydW5nc3ZvcnNjaGxhZWdlbiB3ZW5kZXQgZXVjaCBiaXR0ZSBhbiBlaW5lbiBFTSBvZGVyCisgICAgaW5oZXJpdGV0IGltIFp3ZWlmZWxzZmFsbCBuYWNoIEFic3ByYWNoZS4KKyAgICBOSUVNQUxTIHNvbGNoZW4gQ29kZSBlaW5mYWNoIEtPUElFUkVOLiBTcGFldGVyIG11c3MgbnVyIGlyZ2VuZHdlcgorICAgIGV1cmVtIGFsdGVuIENvZGUgaGludGVyaGVycmFldW1lbi4KKworQWt0dWVsbGUgTGlzdGUgZGVyIHBydWVmYmFyZW4gUGFyYW1ldGVyOgorICAgIFBfTEVWRUwKKyAgICAgIE1pbmRlc3RzdHVmZSwgZGllIGRhcyBMZWJld2VzZW4gYmVzaXR6ZW4gbXVzcywgdW0gZGllIEFrdGlvbgorICAgICAgYXVzenVmdWVocmVuLgorICAgIFBfR1VJTERfTEVWRUwKKyAgICAgIEdpbGRlbmxldmVsLCBkYXMgZGFzIExlYmV3ZXNlbiBtaW5kZXN0ZW5zIGVycmVpY2h0IGhhYmVuIG11c3MsIHVtIGRpZQorICAgICAgQWt0aW9uIGF1c3p1ZnVlaHJlbi4KKyAgICBTUl9TRUVSCisgICAgICBJc3QgZ2VzZXR6dCwgd2VubiBkYXMgTGViZXdlc2VuIFNlaGVyIHNlaW4gbXVzcy4KKyAgICAgIEF1c3dlcnR1bmcgbnVyIGZ1ZXIgSW50ZXJhY3RpdmVzLCBOU0MgaWdub3JpZXJlbiBkYXMgRmxhZy4KKyAgICBQX1hQCisgICAgICBNaW5kZXN0bWVuZ2UgYW4gRXJmYWhydW5nc3B1bmt0ZW4sIGRpZSBlaW4gTGViZXdlc2VuIGJlc2l0emVuIG11c3MsCisgICAgICB1bSBkaWUgQWt0aW9uIGF1c3p1ZnVlaHJlbi4KKyAgICBQX1FQCisgICAgICBNaW5kZXN0bWVuZ2UgYW4gQWJlbnRldWVycHVua3RlbiwgZGllIGRhcyBMZWJld2VzZW4gaGFiZW4gbXVzcy4KKyAgICBQX0FMQ09IT0wKKyAgICAgIE1lbmdlIGFuIEFsa29ob2wsIHVudGVyIGRlciBkZXIgQWxrb2hvbHNwaWVnZWwgZGVzIExlYmV3ZXNlbiBsaWVnZW4KKyAgICAgIG11c3MsIHVtIGRpZSBBa3Rpb24gbm9jaCBhdXNmdWVocmVuIHp1IGtvZW5uZW4uCisgICAgUF9EUklOSworICAgICAgTWVuZ2UgYW4gRmx1ZXNzaWdrZWl0LCB1bnRlciBkZXIgZGVyIEZsdWVzc2lna2VpdHNzcGllZ2VsIGRlcworICAgICAgTGViZXdlc2VuIGxpZWdlbiBtdXNzLCB1bSBkaWUgQWt0aW9uIG5vY2ggYXVzZnVlaHJlbiB6dSBrb2VubmVuLgorICAgIFBfRk9PRAorICAgICAgQmVpbmhhbHRldCBkaWUgTWVuZ2UgYW4gTmFocnVuZywgdW50ZXIgZGVyIGRlciBOYWhydW5nc3NwaWVnZWwgZGVzCisgICAgICBTcGllbGVycyBsaWVnZW4gbXVzcywgdW0gZGllIEFrdGlvbiBub2NoIGF1c2Z1ZWhyZW4genUga29lbm5lbi4KKyAgICBQX0RFQUYKKyAgICAgIElzdCBnZXNldHp0LCBmYWxscyBkZXIgU3BpZWxlciBuaWNodCB0YXViIHNlaW4gZGFyZi4KKyAgICBQX0ZST0cKKyAgICAgIElzdCBnZXNldHp0LCBmYWxscyBkZXIgU3BpZWxlciBrZWluIEZyb3NjaCBzZWluIGRhcmYuCisgICAgUF9CTElORAorICAgICAgSXN0IGdlc2V0enQsIGZhbGxzIGRlciBTcGllbGVyIG5pY2h0IGJsaW5kIHNlaW4gZGFyZi4KKyAgICAgIEFjaHR1bmc6IGRhcyBpc3QgbmljaHQgZ2xlaWNoYmVkZXV0ZW5kIG1pdCBkZW0gVW1zdGFuZCwgZGFzcyBlciBldnRsLgorICAgICAgbmljaHRzIG1laHIgc2VoZW4ga2Fubi4gQXVjaCBhbmRlcmUgR3J1ZW5kZSAoenVtIEJlaXNwaWVsIER1bmtlbGhlaXQpCisgICAgICBrb2VubmVuIGJld2lya2VuLCBkYXNzIGVpbiBTcGllbGVyIG5pY2h0cyBtZWhyIHNpZWh0LgorICAgIEFfSU5ULCBBX0RFWCwgQV9DT04sIEFfU1RSCisgICAgICBKZXdlaWxpZ2UgTWluZGVzdGhvZWhlIGVpbmVzIEF0dHJpYnV0LCB1bSBlaW5lIEFrdGlvbiBhdXNmdWVocmVuIHp1CisgICAgICBrb2VubmVuLgorICAgIFNSX0JBRCwgU1JfR09PRAorICAgICAgR2lidCBhbiwgd2llIFttaW5pbWFsXSBib2VzZSBiencuIHdpZSBbbWF4aW1hbF0gZ3V0IGVpbiBDaGFyYWt0ZXIgc2VpbgorICAgICAgZGFyZiwgdW0gZWluZSBBa3Rpb24gYXVzZnVlaHJlbiB6dSBrb2VubmVuLgorICAgIFNSX01JTl9TSVpFLCBTUl9NQVhfU0laRQorICAgICAgR2lidCBkaWUgbWluaW1hbGUsIGJ6dy4gZGllIG1heGltYWxlIEdyb2Vzc2UgYW4sIGRpZSBlaW4gQ2hhcmFrdGVyCisgICAgICBtYXhpbWFsIGhhYmVuIGRhcmYsIHVtIGVpbmUgQWt0aW9uIGF1c2Z1ZWhyZW4genUga29lbm5lbi4KKyAgICBTUl9GUkVFX0hBTkRTCisgICAgICBHaWJ0IGFuLCB3aWV2aWVsZSBmcmVpZSBIYWVuZGUgZWluIENoYXJha3RlciBmdWVyIGRpZXNlIEFrdGlvbgorICAgICAgYmVzaXR6ZW4gbXVzcy4KKyAgICBTUl9FWENMVURFX1JBQ0UKKyAgICAgIE1pdGdsaWVkZXIgYWxsZXIgaW4gZGllc2VyIExpc3RlIGF1ZmdlZnVlaHJ0ZW4gUmFzc2VuIGtvZW5uZW4KKyAgICAgIGRpZXNlIEFrdGlvbiBuaWNodCBhdXNmdWVocmVuLgorICAgIFNSX0lOQ0xVREVfUkFDRQorICAgICAgTWl0Z2xpZWRlciBhbGxlciBOSUNIVCBpbiBkaWVzZXIgTGlzdGUgYXVmZ2VmdWVocnRlbiBSYXNzZW4ga29lbm5lbgorICAgICAgZGllc2UgQWt0aW9uIG5pY2h0IGF1c2Z1ZWhyZW4uCisgICAgU01fUkFDRQorICAgICAgSGllciBrYW5uIHBybyBSYXNzZSBlaW4gTWFwcGluZyBtaXQgYmVzb25kZXJlbiAobnVyKSBmdWVyIGRpZXNlIFJhc3NlCisgICAgICBnZWx0ZW5kZW4gRWluc2NocmFlbmt1bmdlbiB2b3JnZW5vbW1lbiB3ZXJkZW4uIEFscyBLZXlzIHNpbmQgZGllCisgICAgICBpbiBkaWVzZXIgTWFucGFnZSBiZXNjaHJpZWJlbmVuIEtleXMgZXJsYXVidCwgd29iZWkgU01fUkFDRSBuaWNodAorICAgICAgcmVrdXJzaXYgYXVzZ2V3ZXJ0ZXQgd2lyZC4KKyAgICAgIERlciBSYXNzZW5uYW1lIGlzdCBncm9zcyBnZXNjaHJpZWJlbiB1bmQgIioiIHN0ZWh0IGZ1ZXIgYWxsZSBSYXNzZW4uCisgICAgU1JfRVhDTFVERV9HVUlMRAorICAgIFNSX0lOQ0xVREVfR1VJTEQKKyAgICAgIERpZXNlIGJlaWRlbiBLZXlzIHZlcmhhbHRlbiBzaWNoIHdpZSBTUl8qX1JBQ0UsIG51ciBkYXNzIGhpZXIgR2lsZGVuCisgICAgICBnZW5hbm50IHdlcmRlbi4KKyAgICBTUl9GVU4KKyAgICAgIEhpZXIga2FubiBlaW5lIEZ1bmt0aW9uIGluIHZlcnNjaGllZGVuZW4gRm9ybWVuIHp1bSBQcnVlZmVuIGRlcgorICAgICAgUmVzdHJpa3Rpb25lbiBhbmdlZ2ViZW4gd2VyZGVuLCBzaWVoZSBleGVjdXRlX2FueXRoaW5nKCkuCisgICAgICBEYXMga2FubiBudWV0emxpY2ggc2VpbiwgdW0gYW5kZXJlIFJlc3RyaWt0aW9uZW4genUgcHJ1ZWZlbiwKKyAgICAgIHdpZSBkYXMgQmVzdGVoZW4gdm9uIE1pbmlxdWVzdHMgb2RlciBhbmRlcmUgRmFlaGlna2VpdGVuL0ZsYWdzLgorICAgICAgSXN0IGRlciBUZXN0IG5pY2h0IGJlc3RhbmRlbiwgZ2lidCBkaWUgRnVua3Rpb24gZWluZW4gU3RyaW5nIHp1cnVlY2suCisgICAgU1JfUFJPUAorICAgICAgSGllciBrYW5uIGVpbiBNYXBwaW5nIG1pdCBQcm9wZXJ0aWVzIHVuZCB6dWdlaG9lcmlnZW4gV2VydGVuIGFuZ2VnZWJlbgorICAgICAgd2VyZGVuLCBkaWUgamV3ZWlscyBhdWYgSWRlbnRpdGFldCBnZXBydWVmdCB3ZXJkZW4uIFp1c2FldHpsaWNoIHNvbGx0ZQorICAgICAgZWluZSBNZWxkdW5nIGFuZ2VnZWJlbiB3ZXJkZW4sIGRpZSBhbHMgRmVobGVybWVsZHVuZyBhdXNnZWdlYmVuIHdpcmQsCisgICAgICB3ZW5uIGRlciBTcGllbGVyIGRpZSBCZWRpbmd1bmcgbmljaHQgZXJmdWVsbHQuIEVzIHNvbGx0ZSBpbW1lciBlaW5lCisgICAgICBwYXNzZW5kZSBNZWxkdW5nIGZ1ZXIgZGVuIFNwaWVsZXIgZWluZ2ViYXV0IHdlcmRlbi4gQmVpc3BpZWw6CisgICAgICAoWyBTUl9QUk9QOiAoW1BfQVVTR0FOR19FTlRERUNLVDogMTsgIkRlaW4gU2Nod2VydCBmbHVlc3RlcnQgIgorICAgICAgICAgICJ2ZXJhZXJnZXJ0OiBJY2ggd2VyZGUgRGlyIGVyc3QgZGFubiB6dSBEaWVuc3RlbiBzZWluLCB3ZW5uIER1ICIKKyAgICAgICAgICAiRGljaCBhbHMgd3VlcmRpZyBlcndpZXNlbiBoYXN0ISJdKSBdKQorICAgICAgQXVmZ3J1bmQgZGVyIE1lbGR1bmcgd2lyZCBlbXBmb2hsZW4sIFNSX1BST1AgbmljaHQgaW4gUmVzdHJpa3Rpb25lbgorICAgICAgZWluenVzZXR6ZW4sIGRpZSBtYXNzZW53ZWlzZSBpbiBTYXZlZmlsZXMgbGFuZGVuICh6LkIuCisgICAgICBTcGllbGVyc2F2ZWZpbGVzKS4KKyAgICBTUl9RVUVTVAorICAgICAgSGllciBrYW5uIGVpbiBTdHJpbmctQXJyYXkgbWl0IGRlbiBOYW1lbiAoS2V5cykgZGVyIFF1ZXN0KHMpIGFuZ2VnZWJlbgorICAgICAgd2VyZGVuLCBkaWUgZGVyIFNwaWVsZXIgYmVzdGFuZGVuIGhhYmVuIG11c3MsIHVtIGRpZSBBa3Rpb24gYXVzZnVlaHJlbgorICAgICAgenUga29lbm5lbi4KKyAgICBTUV9NSU5JUVVFU1QKKyAgICAgIEhpZXIga2FubiBlbnR3ZWRlciBlaW4gU3RyaW5nLUFycmF5IG1pdCBkZW4gTGFkZW5hbWVuIGRlciB2ZXJnZWJlbmRlbgorICAgICAgT2JqZWt0ZSBvZGVyIGVpbiBJbnQtQXJyYXkgbWl0IGRlbiBJbmRleC1OdW1tZXJuIChJRHMpIGRlcgorICAgICAgTWluaXF1ZXN0KHMpIChlbXBmb2hsZW4hKSBhbmdlZ2ViZW4gd2VyZGVuLCBkaWUgZGVyIFNwaWVsZXIgYmVzdGFuZGVuCisgICAgICBoYWJlbiBtdXNzLCB1bSBkaWUgQWt0aW9uIGF1c2Z1ZWhyZW4genUga29lbm5lbi4KKworQkVJU1BJRUxFOgorICAgIC8vICMxIExldmVsYmVzY2hyYWVua3VuZyBpbiBkZXIgQWJlbnRldXJlcmdpbGRlCisgICAgQWRkU3BlbGwoImZldWVyYmFsbCIsMjAsCisgICAgICAgICAgICAgKFtTSV9TS0lMTFJFU1RSX0xFQVJOOihbUF9MRVZFTDoxNV0pLCAuLi4KKworICAgIC8vICMyIEdsYXViZW5zdGVzdCBpbSBLbGVydXMKKyAgICBBZGRTcGVsbCgiYmV0ZSIsCisgICAgICAgICAgICAgKFtTSV9TS0lMTFJFU1RSX0xFQVJOOiAoW1BfR1VJTERfTEVWRUwgOiBMVkxfTk9WSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUl9GVU4gOiAjJ2dsYXViZW5zVGVzdCBdKSwgLi4uCisgICAgLy8gbWl0CisgICAgc3RhdGljIHN0cmluZyBnbGF1YmVuc1Rlc3Qob2JqZWN0IHBsKSB7CisgICAgICBpZiAocGwtPlF1ZXJ5UHJvcChLX1NUUkVOR1RIKSA8IDgwMDApCisgICAgICAgIHJldHVybiAoIkRlaW5lIEdsYXViZW5zc3RhZXJrZSBsYWVzc3QgenUgd3VlbnNjaGVuIHVlYnJpZyFcbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gIzMgU01fUkFDRS1Nb2RpZmlrYXRpb24gZGVyIFJlc3RyaWt0aW9uZW46CisgICAgLy8gICAgaGFlcnRlcmUgUmVzdHJpa3Rpb25lbiBmdWVyIFp3ZXJnZQorICAgIC8vICAgIC0gaG9laGVyZXMgTGV2ZWwKKyAgICAvLyAgICAtIHp1c2FldHpsaWNoIEFfU1RSIHBydWVmZW4KKyAgICAoW1BfTEVWRUw6MTUsCisgICAgICBBX0lOVDoxMCwKKyAgICAgIFNNX1JBQ0U6IChbIlp3ZXJnIjogKFtQX0xFVkVMOjE3LCBBX1NUUjoyMF0pXSldKQorICAgIC8vIGlzdCBpZGVudGlzY2ggenUKKyAgICAoW1NNX1JBQ0U6IChbIioiOiAgICAgKFtQX0xFVkVMOjE1LCBBX0lOVDoxMF0pLAorICAgICAgICAgICAgICAgICAiWndlcmciOiAoW1BfTEVWRUw6MTcsIEFfSU5UOjEwLCBBX1NUUjoyMF0pXSldKQorCitTSUVIRSBBVUNIOgorICAgIGV4ZWN1dGVfYW55dGhpbmcoTCksIEFkZFNwZWxsIChHaWxkZSksIFBfUkVTVFJJQ1RJT05TCisKKzAzLiBKYW51YXIgMjAxNCwgQXJhdGhvcm4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2NoZWNrX3RpbWVkX2tleSBiL2RvYy9sZnVuL2NoZWNrX3RpbWVkX2tleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJhZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vY2hlY2tfdGltZWRfa2V5CkBAIC0wLDAgKzEsMzQgQEAKK2NoZWNrX3RpbWVkX2tleSgpCisKK0ZVTktUSU9OOgorICAgICAgIHB1YmxpYyBpbnQgY2hlY2tfdGltZWRfa2V5KHN0cmluZyBrZXkpCisgICAgICAgCitERUZJTklFUlQgSU46CisgICAgICAgL3N0ZC9saXZpbmcvbGlmZS5jICAgIAorCitBUkdVTUVOVEU6CisgICAgICAgc3RyaW5nIGtleSAgOiBFaW5kZXV0aWdlciBOYW1lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICBEaWVzZSBGdW5rdGlvbiBoYXQgZGllIEF1ZmdhYmUsIG1pdHRlbHMgY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkoKQorICAgICAgIGdlc3BlaWNoZXJ0ZSBaZWl0c3BlcnJlbiB6dSBwcnVlZmVuLCBhYmVyIGRhYmVpIG5pY2h0IHp1IHZlcmFlbmRlcm4uCisKKyAgICAgICBFcyBNVVNTIGJlaSBkZXIgZWlnZW50bGljaGVuIEFrdGlvbiAoei5CLiBIZWlsdW5nIGRlcyBTcGllbGVycykgZGVyCisgICAgICAgUnVlY2tnYWJld2VydCB2b24gY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkoKSBiZXJ1ZWNrc2ljaHRpZ3Qgd2VyZGVuLAorICAgICAgIHNvbGx0ZSBkaWVzZXMgbmljaHQgLTEgZ2VsaWVmZXJ0IGhhYmVuLCBNVVNTIDxrZXk+IGFscyBnZXNwZXJydAorICAgICAgIGJldHJhY2h0ZXQgd2VyZGVuLCBkLmguIGNoZWNrX3RpbWVkX2tleSgpIGhhdCBudXIgaW5mb3JtYXRpdmVuCisgICAgICAgQ2hhcmFrdGVyLgorCitSVWVDS0dBQkVXRVJUOgorICAgICAgIDAgICAgRGllIFplaXRzcGVycmUgPGtleT4gaXN0IGFiZ2VsYXVmZW4uCisKKyAgICAgICA+MCAgIDxrZXk+IGlzdCBub2NoIGdlc3BlcnJ0LgorICAgICAgICAgICAgRGVyIFJ1ZWNrZ2FiZXdlcnQgaXN0IGRlciBaZWl0cHVua3QsIGFiIGRlbSA8a2V5PiB3aWVkZXIgZnJlaSBpc3QsCisKK1NJRUhFIEFVQ0g6CisgICAgICAgY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXksIGVhdF9mb29kLCBkcmlua19hbGNvaG9sLCBkcmlua19zb2Z0LAorICAgICAgIGhlYWxfc2VsZiwgcmVzdG9yZV9zcGVsbF9wb2ludHMsIHJlZHVjZV9oaXRfcG9pbnQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDguMDEuMjAxMiwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9jbGVhbl91cCBiL2RvYy9sZnVuL2NsZWFuX3VwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZGRmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9jbGVhbl91cApAQCAtMCwwICsxLDQzIEBACitjbGVhbl91cCgpCitGVU5LVElPTjoKKyAgICAgaW50IGNsZWFuX3VwKGludCByZWYpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcm9vbS5jCisgICAgIG1hbiBrYW5uIGRpZSBGdW5rdGlvbiBqZWRvY2ggYXVjaCBpbiBiZWxpZWJpZ2VuIE9iamVrdGVuIHNlbGJzdAorICAgICBkZWZpbmllcmVuLgorCitBUkdVTUVOVEU6CisgICAgIHJlZgorICAgICAgICAgICAgICsgMCBiZWkgZ2VjbG9uZXRlbiBPYmpla3RlbgorICAgICAgICAgICAgICsgMSBiZWkgZWluZmFjaGVuIGdlbGFkZW5lbiBPYmpla3RlbgorICAgICAgICAgICAgICsgPjEgYmVpIE9iamVrdGVuLCBkaWUgZ2VlcmJ0IHd1cmRlbiBvZGVyIGFscyBCbHVlcHJpbnQgZGllbmVuCisgICAgICAgICAgICAgKyA8MCwgd2VubiBjbGVhbl91cCgpIHZvbiBhdXNzZW4gYXVmZ2VydWZlbiB3dXJkZSAoZGFzIG11c3MgbWFuCisgICAgICAgICAgICAgICBzZWxic3QgYmVhY2h0ZW4hKQorCitCRVNDSFJFSUJVTkc6CisgICAgIFdlbm4gZWluIE9iamVrdCBzZWl0IGxhbmdlciBaZWl0IG5pY2h0IG1laHIgYmVudXR6dCB3dXJkZSwga2FubiBlcyBzaWNoCisgICAgIGhpZXIgc2VsYnN0IHplcnN0b2VyZW4uIERhcyBzb2xsdGUgZGFzIE9iamVrdCBhbGxlcmRpbmdzIG51ciB0dW4sIHdlbm4KKyAgICAgcmVmIGtsZWluZXIgb2RlciBnbGVpY2ggMSBpc3QuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERlciBSdWVja2dhYmV3ZXJ0IGhhdCBudXIgZGFubiBlaW5lIEJlZGV1dHVuZywgd2VubiBzaWNoIGRhcyBPYmpla3QKKyAgICAgbmljaHQgc2VsYnN0IHplcnN0b2VydCBoYXQuIFdpcmQgMCB6dXJ1ZWNrZ2VnZWJlbiwgc28gd2lyZCBjbGVhbl91cCgpCisgICAgIGVyc3QgZGFubiB3aWVkZXIgYXVmZ2VydWZlbiwgbmFjaGRlbSBkYXMgT2JqZWt0IGF1cy0gdW5kIHdpZWRlcgorICAgICBlaW5nZXN3YXBwdCB3dXJkZS4KKworICAgICBFaW4gUnVlY2tnYWJld2VydCB1bmdsZWljaCAwIHplaWd0IGFuLCBkYXNzIGRhcyBPYmpla3Qgc2ljaAorICAgICB3YWhyc2NoZWlubGljaCBpbiBkZXIgbmFlY2hzdGVuIGNsZWFuX3VwKCktUnVuZGUgemVyc3RvZXJlbiBrYW5uLCB3ZW5uCisgICAgIGluIGRlciBad2lzY2hlbnplaXQgekIuIG5vY2ggZWlubWFsIHJlc2V0KCkgYXVmZ2VydWZlbiB3dXJkZS4KKworQkVNRVJLVU5HRU46CisgICAgIFN0YW5kYXJkbWFlc3NpZyBkZWZpbmllcmVuIG51ciBSYWV1bWUgY2xlYW5fdXAoKS4KKworICAgICBEaWUgWmVpdGVuIHp3aXNjaGVuIHp3ZWkgQXVmcnVmZW4gdm9uIGNsZWFuX3VwKCkgYmV0cmFnZW4gbW9tZW50YW4KKyAgICAgZWluZW4gVGFnICg4NjQwMCBTZWt1bmRlbikuCisKK1NJRUhFIEFVQ0g6CisgICAgIHJlc2V0KCksIFBfTkVWRVJfQ0xFQU4KKyAgICAgbWVtb3J5CisKKzIxLiBNYWVyeiAyMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9jbWRfc2hvb3QgYi9kb2MvbGZ1bi9jbWRfc2hvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkNTJjZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2NtZF9zaG9vdApAQCAtMCwwICsxLDMxIEBACitjbWRfc2hvb3QoKQorCitGVU5LVElPTjoKKyAgICBzdGF0aWMgaW50IGNtZF9zaG9vdChzdHJpbmcgc3RyKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9yYW5nZWRfd2VhcG9uLmMKKworQVJHVU1FTlRFOgorICAgIHN0cmluZyBzdHIgICAgLSBTY2h1c3NzeW50YXgKKworQkVTQ0hSRUlCVU5HOgorICAgIEtvbW1hbmRvZnVua3Rpb24gZGVyIEZlcm53YWZmZS4gRW50aGFlbHQgZGllIFZvcmJlcmVpdHVuZyB1bmQgZGVuIFNjaHVzcy4KKworQkVNRVJLVU5HRU46CisgICAgSXN0IGluIGRlciBGZXJud2FmZmUgbWl0IEFkZENtZCggKHsic2NoaWVzcyIsICJzY2hpZXNzZSJ9KSwgImNtZF9zaG9vdCIpOworICAgIGFuZ2VidW5kZW4uIFdpbGwgbWFuIGVpbmUgYW5kZXJlIFN5bnRheCBoYWJlbiwga2FubiBtYW4gbWl0CisgICAgQWRkQ21kL1JlbW92ZUNtZCBkaWVzZSB1bXNldHplbi4KKworQkVJU1BJRUxFOgorICAgIFJlbW92ZUNtZCgoeyJzY2hpZXNzIiwgInNjaGllc3NlIn0pKTsgLy8gZW50ZmVybmUgRGVmYXVsdC1Lb21tYW5kbworICAgIEFkZENtZCgoeyJzY2hsZXVkZXIiLCAic2NobGV1ZGVyZSJ9KSwgIydjbWRfc2hvb3QpOworCitTSUVIRSBBVUNIOgorICAgIEdlbmVyZWxsOiAgUF9BTU1VTklUSU9OLCBQX1NIT09USU5HX1dDLCBQX1NUUkVUQ0hfVElNRQorICAgIE1ldGhvZGVuOiAgc2hvb3RfZGFtKEwpLCBjbWRfc2hvb3QoTCkKKyAgICBLb21tYW5kb3M6IEFkZENtZChMKSwgUmVtb3ZlQ21kKEwpCisgICAgU3ludGF4OiAgICBfdW5wYXJzZWRfYXJncyhMKQorICAgIFNvbnN0aWdlczogZmVybndhZmZlbgorCisyOC5KdWwgMjAxNCBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2NvbW1hbmRfbWUgYi9kb2MvbGZ1bi9jb21tYW5kX21lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjFlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9jb21tYW5kX21lCkBAIC0wLDAgKzEsODEgQEAKK2NvbW1hbmRfbWUoKQorRlVOS1RJT046CisgICAgaW50IGNvbW1hbmRfbWUoc3RyaW5nIHN0cikKKworQVJHVU1FTlRFOgorICAgIHN0cmluZyBzdHIgLSBhdXN6dWZ1ZWhyZW5kZXMgS29tbWFuZG8KKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbnBjLmMsIC9zdGQvcGxheWVyL2NvbW1hbmQuYworCitCRVNDSFJFSUJVTkc6CisgICAgRnVlaHJ0ICdzdHInIHdpZSBlaW4gS29tbWFuZG8gYXVzLCB3ZWxjaGVzIGRpcmVrdCB2b20gTGl2aW5nCisgICAgYWJnZWdlYmVuIHd1cmRlLgorCisgICAgRGVyIFJ1ZWNrZ2FiZXdlcnQgaXN0ID49MSBmdWVyIEVyZm9sZyB1bmQgMCBmdWVyIE1pc3NlcmZvbGcuIAorICAgIFJ1ZWNrZ2FiZXdlcnQgaXN0IGltIEVyZm9sZ3NmYWxsIGRpZSBIb2VoZSBkZXIgRXZhbENvc3QgaW4gVGlja3MuIAorCisgICAgY29tbWFuZF9tZSgpIGxlaXRldCBkZW4gQmVmZWhsIGFuIGNvbW1hbmQoKShFKSB3ZWl0ZXIgdW5kIGVybGF1YnQKKyAgICBkYWR1cmNoIGF1Y2ggZGVuIEF1ZnJ1ZiB2b24gc29uc3QgZHVyY2ggInN0YXRpYyIsICJwcm90ZWN0ZWQiIG9kZXIKKyAgICAicHJpdmF0ZSIgdm9yIGV4dGVybmVtIEF1ZnJ1ZiBnZXNjaHVldHp0ZW4gS29tbWFuZG8tRnVua3Rpb25lbi4KKworICAgIEtvbW1hbmRvcyBtaXQgb2VmZmVudGxpY2hlbiBLb21tYW5kb2Z1bmt0aW9uZW4gKGFsc28gZGFtaXQgYWxsZSBtaXQKKyAgICBBZGRDbWQgZGVmaW5pZXJ0ZW4gS29tbWFuZG9zKSBrb2VubmVuIGF1Y2ggZHVyY2ggY29tbWFuZCgpKEUpCisgICAgdm9uIGF1c3NlbiBhdXNnZWxvZXN0IHdlcmRlbi4KKworQkVNRVJLVU5HRU46ICAgIAorICAgIC0gYmVydWVja3NpY2h0aWd0IEFsaWFzZSwgZC5oLiB3ZW5uIG1hbiBBbGlhc2UgZWluZXMgU3BpZWxlcnMKKyAgICAgIGlnbm9yaWVyZW4gd2lsbCwgbXVzcyBtYW4gZWluIFxcIChmdWVyIGVpbiBcIGltIEVpbmdhYmVzdHJpbmcpCisgICAgICB2b3IgZGVuIEJlZmVobCBzdGVsbGVuCisgICAgLSBmdWVyIG9iamVrdGludGVybmUgS29tbWFuZG9zIGZ1bmt0aW9uaWVydCBhbHNvIGF1Y2ggY29tbWFuZCgpKEUpCisKK0JFSVNQSUVMOgorICAgIChDb2RlIGRlcyBUZXN0cmF1bSBpc3QgaW4gL2RvYy9iZWlzcGllbGUvdGVzdG9iamVrdGUvY29tbWFuZF9tZV90ZXN0cmF1bSkKKyAgICAvLyAjMTogVGVzdHJhdW0sIHp3aW5nZSBTcGllbGVyIGJlaSAic2NobGVpY2hlIGhlcmFuIiB6dW0gRnVyemVuCisgICAgLy8gICAgIGNvbW1hbmRfbWUoKSBpc3QgaGllciBub2V0aWcsIGRhIGRhcyBGdXJ6ZW4gZWluZSBnZXNjaHVldHp0ZQorICAgIC8vICAgICBLb21tYW5kb2Z1bmt0aW9uIGhhdAorICAgIGluaGVyaXQgIi9zdGQvcm9vbSI7CisKKyAgICB2b2lkIGNyZWF0ZSgpIHsKKyAgICAgIDo6Y3JlYXRlKCk7CisgICAgICBBZGRDbWQoInNjaGxlaWNoZSZoZXJhbnxoZXJ1bSIsICJhY3Rpb25fc2NobGVpY2hlbiIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXQoKSB7CisgICAgICA6OmluaXQoKTsKKyAgICAgIGFkZF9hY3Rpb24oImFjdGlvbl9rcmllY2hlbiIsICJrcmllY2giLCAxKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGFjdGlvbl9zY2hsZWljaGVuKHN0cmluZyBzdHIpIHsKKyAgICAgIHN0cmluZyB0bXAgPSB0aGlzX3BsYXllcigpLT5RdWVyeVByb3AoUF9SQUNFKTsKKyAgICAgIC8vIC4uLiAKKyAgICAgIGlmKHRtcFs8MV09PSdlJykgdG1wPXRtcFswLi48Ml07CisgICAgICB3cml0ZShicmVha19zdHJpbmcoIkR1IHZlcnN1Y2hzdCBsZWlzZSB6dSBzY2hsZWljaGVuLCBkYWJlaSBwYXNzaWVydCAiCisgICAgICAgICJkaXIgYWJlciBlaW4gYWxsenUgIisKKyAgICAgICAgKHRtcD09Ik1lbnNjaCI/Im1lbnNjaGxpY2hlcyI6bG93ZXJfY2FzZSh0bXApKyJpc2NoZXMiKSsKKyAgICAgICAgIiBNaXNzZ2VzY2hpY2suIFZlcmZsdWNodCEiLCA3OCkpOworICAgICAgdGhpc19wbGF5ZXIoKS0+Y29tbWFuZF9tZSgiXFxmdXJ6ZSIpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQgYWN0aW9uX2tyaWVjaGVuKHN0cmluZyBzdHIpIHsKKyAgICAgIHdyaXRlKGJyZWFrX3N0cmluZygiRGVpbmUgS25pZSB0dW4genUgc2VociB3ZWggZGFmdWVyLiIsIDc4KSk7CisgICAgICB0ZWxsX3Jvb20odGhpc19vYmplY3QoKSwgYnJlYWtfc3RyaW5nKHRoaXNfcGxheWVyKCktPk5hbWUoV0VSKSsKKyAgICAgICAgIiBrbmFja3QgbWl0IGRlbiBLbmllbi4iLCA3OCkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIAorICAgIC8vICMyIChpbiBvYmlnZW0gUmF1bSk6IHp3aW5nZSBTcGllbGVyIGluIFJhdW0genUgb2JpZ2VtIEtvbW1hbmRvCisgICAgLy8gICAgQmVpZGUgS29tbWFuZG9zIGdlbGluZ2VuLCBkYSBLb21tYW5kbyBtaXQgQWRkQ21kIGRlZmluaWVydC4KKyAgICBmaW5kX3BsYXllcigibmFkZGwiKS0+Y29tbWFuZF9tZSgic2NobGVpY2hlIGhlcnVtIikKKyAgICBjb21tYW5kKCJzY2hsZWljaGUgaGVydW0iLCBmaW5kX3BsYXllcigibmFkZGwiKSk7IAorCisgICAgLy8gIzMgKGluIG9iaWdlbSBSYXVtKTogendpbmdlIFNwaWVsZXIgaW4gUmF1bSB6dSBvYmlnZW0gS29tbWFuZG8KKyAgICBmaW5kX3BsYXllcigibmFkZGwiKS0+Y29tbWFuZF9tZSgia3JpZWNoZSIpCisgICAgLy8gICAgRm9sZ2VuZGVzIEtvbW1hbmRvIHNjaGxhZWd0IGZlaGwsIGRhIEtvbW1hbmRvZnVua3Rpb24gc3RhdGljIGlzdC4KKyAgICBjb21tYW5kKCJrcmllY2hlIiwgZmluZF9wbGF5ZXIoIm5hZGRsIikpOworICAgIAorU0lFSEUgQVVDSDoKKyAgICAgZW5hYmxlX2NvbW1hbmRzKEUpLCBjb21tYW5kKEUpCisKKzA2IFNlcCAyMDEyIEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9jb25zdW1lIGIvZG9jL2xmdW4vY29uc3VtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTc5ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vY29uc3VtZQpAQCAtMCwwICsxLDg1IEBACitwdWJsaWMgdmFyYXJncyBpbnQgY29uc3VtZShtYXBwaW5nIGNpbmZvLCBpbnQgdGVzdG9ubHkpCisKK0ZVTktUSU9OOgorICAgIHB1YmxpYyB2YXJhcmdzIGludCBjb25zdW1lKG1hcHBpbmcgY2luZm8sIGludCB0ZXN0b25seSk7CisKKyAgICBBZW5kZXJ1bmcgZGVyIEdlc3VuZGhlaXQgZWluZXMgTGViZXdlc2VucyBkdXJjaCBldHdhcyBLb25zdW1pZXJiYXJlcy4KKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgY2luZm8KKyAgICAgICAgTWFwcGluZyBtaXQgSW5mb3JtYXRpb25lbiB1ZWJlciBkaWUgR2VzdW5kaGVpdHNhZW5kZXJ1bmcKKyAgICAgICAgSGVpbHVuZy4KKyAgICB0ZXN0b25seQorICAgICAgICBHaWJ0IGFuLCBvYiBudXIgZGllIEJlZGluZ3VuZ2VuIGFiZ2V0ZXN0ZXQgd2VyZGVuIHNvbGxlbiwKKyAgICAgICAgb2RlciBhdWNoIGRpZSBXaXJrdW5nIGVpbnRyZXRlbiBzb2xsLgorCitSVUVDS0dBQkVXRVJUOgorICAgIDEgZXJmb2xncmVpY2gga29uc3VtaWVydAorICAgIDAga2VpbmUgb2RlciBmYWxzY2hlIEFlbmRlcnVuZ3NkYXRlbiBpbiBjaW5mbyAobmljaHQgYmVudXR6YmFyKQorICAgPDAgQmVkaW5ndW5nIGZ1ZXIga29uc3VtaWVyZW4gbmljaHQgZXJmdWVsbHQsIEJpdHNldCBhdXM6CisgICAgICBIQ19NQVhfRk9PRF9SRUFDSEVEICAgIC0gS2FubiBuaWNodHMgbWVociBlc3NlbgorICAgICAgSENfTUFYX0RSSU5LX1JFQUNIRUQgICAtIEthbm4gbmljaHRzIG1laHIgdHJpbmtlbgorICAgICAgSENfTUFYX0FMQ09IT0xfUkVBQ0hFRCAtIEthbm4gbmljaHRzIG1laHIgc2F1ZmVuCisgICAgICBIQ19IT09LX0NBTkNFTExFVElPTiAgIC0gZHVyY2ggSF9IT09LX0NPTlNVTUUgYWJnZWJyb2NoZW4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZSBGdW5rdGlvbiBzdGVsbHQgZWluZSBNb2VnbGljaGtlaXQgenVyIFZlcmZ1ZWd1bmcsIGRpZSBBZW5kZXJ1bmcKKyAgICBkZXIgR2VzdW5kaGVpdCBlaW5lcyBMZWJld2VzZW5zIGJlaW0gS29uc3VtaWVyZW4gdm9uIGlyZ2VuZGV0d2FzICh6LkIgaW4KKyAgICBlaW5lciBLbmVpcGUsIGR1cmNoIGVpbmUgSGVpbHN0ZWxsdGUgb2RlciB0cmFnYmFyZSBUYW5rZSwgLi4uKSB6ZW50cmFsIHp1CisgICAgZXJsZWRpZ2VuLiBTaWUgdmVyZWludCBpbiBzaWNoIGRpZSBQcnVlZnVuZyBhdWYgRHVyY2hmdWVyYmFya2VpdCBkZXIKKyAgICBBZW5kZXJ1bmcgdW5kIEFud2VuZHVuZyBkZXIgQWVuZGVydW5nLgorCisgICAgRGVyIGVyc3RlIFBhcmFtZXRlciBnaWJ0IGRpZSBFaWdlbnNjaGFmdGVuIGRlciBBZW5kZXJ1bmcgYW4sIGRlciB6d2VpdGUgb2IKKyAgICBhdXNzY2hsaWVzc2xpY2ggZGllIFBydWVmdW5nIGF1ZiBBbndlbmRiYXJrZWl0IGVyZm9sZ2VuIHNvbGwuCisKKyAgICBEYXMgTWFwcGluZyBjaW5mbyBoYXQgZm9sZ2VuZGUgU3RydWt0dXI6CisgICAgYSkgRWluZmFjaGUgQW5nYWJlIGRlciBiZXRyb2ZmZW5lbiBQcm9wZXJ0aWVzLiBJbiBuZXVlbSBDb2RlIGJpdHRlIG5pY2h0CisgICAgICAgbWFjaGVuLCBkb3J0IGVpbiBNYXBwaW5nIHdpZSB1bnRlciBiKSBiZXNjaHJpZWJlbiBudXR6ZW4hCisKKyAgICBiKSBTdHJ1a3R1cmllcnQgaW4gRWZmZWt0ZSB1bmQgQmVkaW5ndW5nZW4gbWl0IGZvbGdlbmRlbiBTY2hsdWVzc2VsbjoKKyAgICAgIEhfRUZGRUNUUyAtIE1hcHBpbmcgZGVyIHp1IGFlbmRlcm5kZW4gUHJvcGVydGllcyBtaXQgZGVtIFVtZmFuZyBkZXIKKyAgICAgICAgICAgICAgICAgIEFlbmRlcnVuZywgZXJsYXVidGUgUHJvcGVydGllcyBzaWVoZSBIX0FMTE9XRURfRUZGRUNUUworCisgICAgICBIX0NPTkRJVElPTlMgLSBNYXBwaW5nIGRlciB6dSBwcnVlZmVuZGVuIFByb3BlcnRpZXMgbWl0IGRlbSBVbWZhbmcgZGVyCisgICAgICAgICAgICAgICAgICAgICBBZW5kZXJ1bmcsIGVybGF1YnRlIFByb3BlcnRpZXMgc2llaGUgSF9BTExPV0VEX0NPTkRJVElPTlMKKworICAgICAgSF9ESVNUUklCVVRJT04gLSBWZXJ0ZWlsdW5nIGRlciBBZW5kZXJ1bmcgZnVlciBQX1NQLCBQX0hQCisgICAgICAgICAgICAgICAgICAgICAgIEhEX0lOU1RBTlQgYnp3LiAwOiBpbnN0YW50ZSBIZWlsdW5nCisgICAgICAgICAgICAgICAgICAgICAgIDEgLSA1MDogYW5nZWJlbmUgWmFobCBwcm8gSGVhcnRiZWF0CisgICAgICAgICAgICAgICAgICAgICAgIEhEX1NUQU5EQVJEOiA1IHBybyBIZWFydGJlYXQKKworICAgIEFlbmRlcnVuZ2VuIGtvZW5uZW4gc293b2hsIHBvc2l0aXYgYWxzIGF1Y2ggbmVnYXRpdiBzZWluLgorCitCRU1FUktVTkdFTjoKKyAgICBIaWVyYmVpIGFiZXIgYml0dGUgYmVhY2h0ZW4sIGRhc3MgVGFua2VuL0VudGFua2VuIHNvd2llIEhlaWx1bmdlbiBnZ2YuIHZvbgorICAgIGRlciAoSGVpbHVuZ3MtKUJhbGFuY2UgZ2VuZWhtaWd0IHdlcmRlbiBtdWVzc2VuIQorCitCRUlTUElFTEU6CisgICAgSGVpbHVuZyB1bSAxMDAgS1AsIDUwIExQLCBhYmVyIG51ciB3ZW5uIDMwIFBfRk9PRCBnZWdlc3NlbiB3ZXJkZW4ga2FubjoKKworICAgIGNvbnN1bWUoIChbSF9FRkZFQ1RTOiAoW1BfSFA6NTAsIFBfU1A6MTAwXSksCisgICAgICAgICAgICAgICBIX0NPTkRJVElPTlM6IChbUF9GT09EOjMwXSkgXSkgKTsKKworICAgIEhlaWx1bmcgdW0gMTAwIEtQIHVuZCBWZXJnaWZ0dW5nIHVtIDIsIHdlbm4gMTUgQWxrb2hvbCBnZXRydW5rZW4gd2VyZGVuCisgICAga29lbm5lbi4gRGllIFNQIHdlcmRlbiB6ZWl0dmVyem9lZ2VydCBtaXQgMTAgcHJvIEhlYXJ0YmVhdCB6dWdlZnVlaHJ0LgorCisgICAgY29uc3VtZSgoW0hfRUZGRUNUUzogKFtQX1NQOiAxMDAsIFBfUE9JU09OOiAyXSksCisgICAgICAgICAgICAgIEhfQ09ORElUSU9OUzogKFtQX0FMQ09IT0w6IDE1XSksCisgICAgICAgICAgICAgIEhfRElTVFJJQlVUSU9OOiAxMF0pICkKKworU0lFSEUgQVVDSDoKKyAgICAgQWVobmxpY2g6ICBkcmlua19hbGNvaG9sLCBlYXRfZm9vZCwgZHJpbmtfc29mdAorICAgICBIZWlsdW5nOiAgIGhlYWxfc2VsZiwgcmVzdG9yZV9zcGVsbF9wb2ludHMsIHJlc3RvcmVfaGl0X3BvaW50cywgCisgICAgICAgICAgICAgICAgYnVmZmVyX2hwLCBidWZmZXJfc3AKKyAgICAgVGltaW5nOiAgICBjaGVja19hbmRfdXBkYXRlX3RpbWVkX2tleQorICAgICBFbnR0YW5rZW46IGRlZnVlbF9kcmluaywgZGVmdWVsX2Zvb2QKKyAgICAgUHJvcHM6ICAgICBQX0RSSU5LLCBQX0ZPT0QsIFBfQUxDT0hPTCwgUF9TUCwgUF9IUCwKKyAgICAgICAgICAgICAgICBQX0RFRlVFTF9USU1FX0RSSU5LCisgICAgIEtvbnplcHRlOiAgaGVpbHVuZywgZW50dGFua2VuLCBmb29kCisKK0xFVFpURSBBZU5ERVJVTkc6CisgICAgMjkuMDUuMjAxNSwgQm9pbmcKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vY3JlYXRlIGIvZG9jL2xmdW4vY3JlYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODI2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9jcmVhdGUKQEAgLTAsMCArMSw3OCBAQAorY3JlYXRlKCkKKworRlVOS1RJT046CisgICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZSgpOworICAgICB2b2lkIGNyZWF0ZSgpOworCitERUZJTklFUlQgSU46CisgICAgIGFsbGVuIFN0YW5kYXJkb2JqZWt0ZW4KKworQVJHVU1FTlRFOgorICAgICBrZWluZQorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBlaW4gT2JqZWt0IGdlbGFkZW4gb2RlciBnZWNsb250CisgICAgIHdpcmQuCisgICAgIEluIGRpZXNlciBGdW5rdGlvbiB3aXJkIGRhcyBPYmpla3QgaW5pdGlhbGlzaWVydCB1bmQga29uZmlndXJpZXJ0LgorICAgICBXYWVocmVuZCBkZXMgY3JlYXRlKCkga2FubiBlcyBlaW5lbiB0aGlzX3BsYXllcigpL3RoaXNfaW50ZXJhY3RpdmUoKQorICAgICBnZWJlbiwgbXVzcyBhYmVyIG5pY2h0IQorICAgICBJbSBjcmVhdGUoKSBoYXQgZGFzIE9iamVrdCBub2NoIGtlaW4gZW52aXJvbm1lbnQoKS4KKyAgICAgY3JlYXRlKCkgd2lyZCBudXIgZ2VydWZlbiwgd2VubiBkYXMgT2JqZWt0ZSBnZWNsb250IG9kZXIgZXhwbGl6aXQgZ2VsYWRlbgorICAgICB3aXJkLiBXZW5uIGVzIGF1ZmdydW5kIGVpbmVzIGluaGVyaXQgaW4gZWluZW0gYW5kZXJlbiBPYmpla3Qgdm9tIERyaXZlcgorICAgICBnZWxhZGVuIHdpcmQsIHdpcmQgZGFzIGNyZWF0ZSgpIG5pY2h0IGF1c2dlZnVlaHJ0IChzLiBjcmVhdGVfc3VwZXIoKSkuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitCRU1FUktVTkdFTjoKKyAgICAgRXJidCBtYW4gdm9uIGFuZGVyZW4gT2JqZWt0ZW4sIHNvIGJlc3RlaHQgZGllIGVyc3RlIEFrdGlvbiBpbm5lcmhhbGIKKyAgICAgdm9uIGNyZWF0ZSgpIG5vcm1hbGVyd2Vpc2UgZGFyaW4sIGluIGRpZXNlbiBPYmpla3RlbiBjcmVhdGUoKQorICAgICBhdWZ6dXJ1ZmVuLgorICAgICBEaWUgRnVua3Rpb24ga2FubiBwcm90ZWN0ZWQgb2RlciBzdGF0aWMgc2VpbiAoYWJlciBuaWNodCBwcml2YXRlKS4gRXMKKyAgICAgZHVlcmZ0ZSBmdWVyIGRpZSBtZWlzdGVuIE9iamVrdGUgc2lubnZvbGwgc2VpbiwgY3JlYXRlKCkgcHJvdGVjdGVkIHp1CisgICAgIGRla2xhcmllcmVuLgorCisgICAgIFVtIFNwZWljaGVyIHp1IHNwYXJlbiwga2FubiBtYW4gYmVpIEJsdWVwcmludHMgdm9uIGRlciBLb25maWd1cmllcnVuZworICAgICBhYnNlaGVuIChzaWVoZSBCZWlzcGllbCkuIERpZXMgc29sbHRlIG1hbiBhbGxlcmRpbmdzIG5pY2h0IGJlaSBPYmpla3RlbgorICAgICBtYWNoZW4sIHZvbiBkZW5lbiBrZWluZSBDbG9uZXMgZXJ6ZXVndCB3ZXJkZW4gc29sbGVuICh6Qi4gYmVpIFJhZXVtZW4pLiAKKworICAgICBNYW4gc29sbHRlIGJlaSBBYmJydWNoIGRlcyBjcmVhdGUoKSBpbiBCUCB1bmJlZGluZ3Qgc2V0X25leHRfcmVzZXQoLTEpOworICAgICBydWZlbiwgZGEgc29uc3QgZGllIChuaWNodCBrb25maWd1cmllcnRlKSBCUCByZXNldHRlbiBrYW5uIHVuZCBkYW5uCisgICAgIGJ1Z2d0LgorCitCRUlTUElFTEU6CisgICAgIEVpbiBHZWdlbnN0YW5kIHd1ZXJkZSB3aWUgZm9sZ3Qga29uZmlndXJpZXJ0OgorCisgICAgIGluaGVyaXQgInN0ZC90aGluZyI7CisKKyAgICAgI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKworICAgICBjcmVhdGUoKQorICAgICB7CisgICAgICAgLy8gV2VubiB3aXIgZGllIEJsdWVwcmludCBzaW5kOiBOSUNIVCBrb25maWd1cmllcmVuIQorICAgICAgIC8vIEJlaSBub3JtYWxlbiBSYWV1bWVuIG9kZXIgVHJhbnNwb3J0ZXJuIHNpbmQgZGllc2UgYmVpZGVuCisgICAgICAgLy8gWmVpbGVuIHdlZ3p1bGFzc2VuISEhCisgICAgICAgaWYgKCFjbG9uZXAodGhpc19vYmplY3QoKSkpIHsKKyAgICAgICAgICAgc2V0X25leHRfcmVzZXQoLTEpOyAgICAvLyB3aWNodGlnLCBkYW1pdCBkaWUgQlAgbmljaHQgcmVzZXR0ZXQuCisgICAgICAgICAgIHJldHVybjsKKyAgICAgICB9CisKKyAgICAgICAvLyBBbnNvbnN0ZW4gZGllIGFsbGdlbWVpbmVuIEVpZ2Vuc2NoYWZ0ZW4gdm9uIC9zdGQvdGhpbmcKKyAgICAgICAvLyBrb25maWd1cmllcmVuLi4uCisgICAgICAgOjpjcmVhdGUoKTsKKworICAgICAgIC8vIC4uLnVuZCBudW4gdW5zZXJlIHNwZXppZWxsZW4gRWlnZW5zY2hhZnRlbjoKKyAgICAgICBTZXRQcm9wKFBfTkFNRSwgIk11ZWxsIik7CisgICAgICAgU2V0UHJvcChQX1NIT1JULCAiTXVlbGwiKTsKKyAgICAgICBTZXRQcm9wKFBfTE9ORywgIlZvZWxsaWcgdW5udWV0emVyIE11ZWxsIVxuIik7CisgICAgICAgU2V0UHJvcChQX0FSVElDTEUsIDApOworICAgICAgIFNldFByb3AoUF9WQUxVRSwgMCk7CisgICAgICAgU2V0UHJvcChQX0dFTkRFUiwgTUFMRSk7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgY3JlYXRlKEwpLCByZXNldChMKQorICAgICBob29rKEMpLCBjcmVhdGUoSCksIGNyZWF0ZV9vYihIKSwgY3JlYXRlX3N1cGVyKEgsIHJlc2V0KEgpCisgICAgIGNyZWF0ZShBKSwgcmVzZXQoQSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIyLjEwLjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2NyZWF0ZV9kZWZhdWx0X25wYyBiL2RvYy9sZnVuL2NyZWF0ZV9kZWZhdWx0X25wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzMxYzVjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vY3JlYXRlX2RlZmF1bHRfbnBjCkBAIC0wLDAgKzEsNTUgQEAKK2NyZWF0ZV9kZWZhdWx0X25wYygpCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyB2b2lkIGNyZWF0ZV9kZWZhdWx0X25wYyggaW50IGxldmVsLCBpbnQgbWF4aHAgKTsKKworQkVOVVRaVU5HOgorICAgICBpbmhlcml0ICJzdGQvbnBjIjsKKworRlVOS1RJT046CisgICAgIFNldHplIGRpZSBEYXRlbiBlaW5lcyBNb25zdGVycyBhdWYgZWluZW4gZ2V3aXNzZW4gTGV2ZWwuCisKKyAgICAgRGVyIExldmVsIHNvbGx0ZSB6d2lzY2hlbiAxIHVuZCAyMCBsaWVnZW4uIERpZSBTdGF0cyB3ZXJkZW4gYXVmIGRpZXNlbgorICAgICBMZXZlbCBnZXNldHp0IHVuZCBtZWhyZXJlIGFuZGVyZSBXZXJ0ZSwgc28gZGFzcyBkYXMgTW9uc3RlciB2b24gZGVyCisgICAgIFN0YWVya2UgaGVyIGVpbmVtIFNwaWVsZXIgZ2xlaWNoZW4gTGV2ZWxzIGVudHNwcmljaHQuCisKKyAgICAgV2lyZCBkZXIgKG9wdGlvbmFsZSkgUGFyYW1ldGVyIG1heGhwIHdlZ2dlbGFzc2VuLCB3aXJkIGRpZXNlciBiZXJlY2huZXQKKyAgICAgbmFjaDoKKyAgICAgICAgICBtYXhocCA9IDQyICsgOCAqIGxldmVsCisKKyAgICAgRGllIGdlbmF1ZW4gV2VydGUgc2luZDoKKyAgICAgICAgICBQX0xFVkVMIDogbGV2ZWwKKyAgICAgICAgICBQX01BWF9IUDogbWF4aHAKKyAgICAgICAgICBQX01BWF9TUDogbWF4aHAKKyAgICAgICAgICBQX0hBTkRTIDogMTAgKiBsZXZlbAorICAgICAgICAgIFBfQk9EWSAgOiAoMjAvMykgKiBsZXZlbAorICAgICAgICAgIFBfWFAgICAgOiA1MCAqIGxldmVsICogbWF4aHAgKD09IDUgKiBQX0hBTkRTICogbWF4X2hwKQorCisgICAgICAgICAgQV9TVFIsIEFfSU5ULCBBX0RFWCwgQV9DT04gOiBsZXZlbAorCitCRU1FUktVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHNvbGx0ZSBudXIgaW0gY3JlYXRlKCkgZWluZXMgTW9uc3RlcnMgYmVudXR6dCB3ZXJkZW4uCisgICAgIE9iZW4gYmVzY2hyaWViZW5lIFdlcnRlLCBkaWUgdm9yIGRlbSBBdWZydWYgZGVyIEZ1bmt0aW9uIGdlc2V0enQKKyAgICAgd3VyZGVuLCB3ZXJkZW4gZHVyY2ggZGllIG5ldWVuIFdlcnRlIGVyc2V0enQuCisKKyAgICAgQWIgZWluZW0gQXVmcnVmIG1pdCBMZXZlbCAyMCB3ZXJkZW4gUF9YUCA9IDIwMjAwMCBnZXNldHp0LCBhbHNvIGVpbgorICAgICBLaWxsLVN0dXAgdmVyZ2ViZW4gKHNpZWhlIFBfWFApLgorCitCRUlTUElFTDoKKyAgICAgY3JlYXRlX2RlZmF1bHRfbnBjKDE3KSBlcmdpYnQ6CisKKyAgICAgICAgICBQX0xFVkVMIDogMTcKKyAgICAgICAgICBQX01BWF9IUDogMTc4CisgICAgICAgICAgUF9NQVhfU1A6IDE3OAorICAgICAgICAgIFBfSEFORFMgOiAxNzAKKyAgICAgICAgICBQX0JPRFkgIDogMTEzCisgICAgICAgICAgUF9YUCAgICA6IDE1MTMwMAorCisgICAgICAgICAgQV9TVFIsIEFfSU5ULCBBX0RFWCwgQV9DT04gOiAxNworCitTSUVIRSBBVUNIOgorICAgICBGdW5rdGlvbmVuOiAgQWRkRXhwKCksIEdpdmVLaWxsU2NvcmUoKQorICAgICBQcm9wZXJ0aWVzOiAgUF9YUAorICAgICAgICAgICAgICAgICAgUF9MRVZFTCwgUF9NQVhfSFAsIFBfTUFYX1NQLCBQX0hBTkRTLCBQX0JPRFkKKyAgICAgU29uc3RpZ2VzOiAgIG5wY3MKKworMTQuRmViIDIwMDcgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9jcmVhdGVfc3VwZXIgYi9kb2MvbGZ1bi9jcmVhdGVfc3VwZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3MjVhNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2NyZWF0ZV9zdXBlcgpAQCAtMCwwICsxLDQ5IEBACitjcmVhdGVfc3VwZXIoKQorCitGVU5LVElPTjoKKyAgICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlX3N1cGVyKCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgYWxsZW4gU3RhbmRhcmRvYmpla3RlbgorCitBUkdVTUVOVEU6CisgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gd2lyZCBpbW1lciBkYW5uIGF1ZmdlcnVmZW4sIHdlbm4gZWluIE9iamVrdCBpbXBsaXppdCBkdXJjaAorICAgICBlaW4gJ2luaGVyaXQnIGluIGVpbmVtIGVyYmVuZGVuIE9iamVrdGUgZ2VsYWRlbiB3aXJkLgorICAgICBOb3JtYWx3ZWlzZSBtdXNzIG1hbiBkaWVzZXMgc28gZ2VsYWRlbmUgT2JqZWt0ZSBuaWNodCBrb25maWd1cmllcmVuLCB3ZWlsCisgICAgIG51ciBkYXMgUHJvZ3JhbW0gZGllc2VzIE9iamVrdGVzIGZ1ZXIgZGllIGVyYmVuZGVuIE9iamVrdGUgaW50ZXJlc3NhbnQKKyAgICAgaXN0LCBuaWNodCBzZWluZSBEYXRlbi4KKyAgICAgV2FzIGhpZXIgYWJlciB6LkIuIHNpbm52b2xsIGlzdCwgaXN0IGRhcyBBYnNjaGFsdGVuIGRlcyBSZXNldHMsIGRlbm4gZWluCisgICAgIE9iamVrdCwgd2FzIG51ciBkYXp1IGRpZW50LCBkYXNzIGVzIHZvbiBhbmRlcmVuIGdlZXJidCB3aXJkLCBicmF1Y2h0CisgICAgIGtlaW5lbiBSZXNldCwgYXVjaCB3ZW5uIGVzIGVpbiByZXNldCgpIGRlZmluaWVydCAod2FzIGluIGVyYmVuZGVuIE9iamVrdGUKKyAgICAgYmVudXR6dCB3aXJkKS4KKyAgICAgRGllIGNyZWF0ZV9zdXBlcigpIGluIGRlbiBTdGFuZGFyZG9iamVrdGVuIHR1biBtb21lbnRhbiBnZW5hdSBkaWVzZXMuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitCRU1FUktVTkdFTjoKKyAgICAgV2VubiBpaHIgdm9uIC9zdGQvIGVyYnQsIGJyYXVjaHQgaWhyIGV1Y2ggaW4gYWxsZXIgUmVnZWwgdW0gZGllc2UKKyAgICAgRnVua3Rpb24ga2VpbmUgR2VkYW5rZW4gbWFjaGVuLgorICAgICBJaHIga29lbm50IGRpZXNlIEZ1bmt0aW9uIGFiZXIgaW4gT2JqZWt0ZW4gc2VsYmVyIGRlZmluaWVyZW4sIGRpZSBudXIgenVtCisgICAgIEVyYmVuIGdlZGFjaHQgc2luZC4gRGllcyBrYW5uIHNpbm52b2xsIGVpbiwgd2VubiBpaHIgbmljaHQgdm9uIC9zdGQvIGVyYnQKKyAgICAgdW5kIGVpbiByZXNldCgpIGltIE9iamVrdCBoYWJ0IG9kZXIgd2FzIG1hY2hlbiB3b2xsdCwgd2FzIHVlYmVyIGRhcworICAgICBBYnNjaGFsdGVuIGRlcyBSZXNldHMgaGluYXVzZ2VodC4KKworQkVJU1BJRUxFOgorICAgICBHZWdlYmVuIHNlaSBmb2xnZW5kZSBWZXJlcmJ1bmdza2V0dGU6CisgICAgIC9zdGQvcm9vbSAtPiAvZC9pbnNlbG4vemVzc3RyYS9zdGRyYXVtIC0+IC9kL2luc2Vsbi96ZXNzdHJhL3JhdW0KKworICAgICBXaXJkIG51biAncmF1bScgZ2VsYWRlbiB1bmQgJ3N0ZHJhdW0nIGlzdCBub2NoIG5pY2h0IGdlbGFkZW4sIHdpcmQgZGVyCisgICAgIERyaXZlciBpbXBsaXppdCB2b24gc2VsYnN0ICdzdGRyYXVtJyBsYWRlbiAod2VpbCAncmF1bScgZGFzIFByb2dyYW1tIHZvbgorICAgICAnc3RkcmF1bScgYnJhdWNodCkuIEJlaSBkaWVzZW0gTGFkZW4gd2lyZCBkYXMgY3JlYXRlKCkgaW4gJ3N0ZHJhdW0nIG5pY2h0CisgICAgIGF1c2dlZnVlaHJ0LCBzb25kZXJuIHN0YXR0ZGVzc2VuIGNyZWF0ZV9zdXBlcigpLgorICAgIAorU0lFSEUgQVVDSDoKKyAgICAgY3JlYXRlKEwpLCByZXNldChMKQorICAgICBob29rKEMpLCBjcmVhdGUoSCksIGNyZWF0ZV9vYihIKSwgY3JlYXRlX3N1cGVyKEgsIHJlc2V0KEgpCisgICAgIGNyZWF0ZShBKSwgcmVzZXQoQSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIyLjEwLjIwMDcsIFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2RlZnVlbF9kcmluayBiL2RvYy9sZnVuL2RlZnVlbF9kcmluawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2U4MzRkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZGVmdWVsX2RyaW5rCkBAIC0wLDAgKzEsNTkgQEAKK0ZVTktUSU9OOgorICAgIGludCBkZWZ1ZWxfZHJpbmsoKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgS2VpbmUuCisgICAgICAgIAorQkVTQ0hSRUlCVU5HOgorICAgIEVudHRhbmt0IGRlbiBTcGllbGVyIGF1dG9tYXRpc2NoIHVtIGVpbmVuIGdld2lzc2VuIEZsdWVzc2lna2VpdHMtV2VydCwKKyAgICBzb2Zlcm4gZGVyIFNwaWVsZXIgdWViZXIgZWluZXIgYmVzdGltbXRlbiBFbnR0YW5rLUdyZW56ZSBsaWVndCB1bmQgc2VpdAorICAgIHNlaW5lbSBsZXR6dGVuIEVudHRhbmtlbiBlaW5lIGdld2lzc2UgWmVpdCB2ZXJnYW5nZW4gaXN0LgorICAgIEFsbGUgZGllc2UgV2VydGUgc2luZCByYXNzZW5hYmhhZW5naWcuCisgICAgQXVzc2VyZGVtIHdpcmQgZGVtIFNwaWVsZXIgZWluZSBnZXdpc3NlIE1lbmdlIEFsa29ob2wgZW50em9nZW4uIEVyIHdpcmQKKyAgICBhbHNvIG1pdCBqZWRlbSBmbHVlc3NpZ2VuIEVudHRhbmtlbiBldHdhcyBudWVjaHRlcm5lci4KKworICAgIEVzIGlzdCBhbHNvIE5JQ0hUIG1vZWdsaWNoLCBFaW5mbHVzcyBhdWYgZGllIE1lbmdlIGRlcyBFbnR0YW5rZW5zCisgICAgenUgbmVobWVuLiBEYXMgaXN0IGhpZXIgc28gZ2V3b2xsdC4KKworICAgIEhhdCBkZXIgU3BpZWxlciBtaW5kZXN0ZW5zIAorICAgICogUF9ERUZVRUxfTElNSVRfRFJJTksgaW4gUF9EUklOSworICAgIGthbm4gZXIgYWxsZQorICAgICogUF9ERUZVRUxfVElNRV9EUklOSworICAgIHVtCisgICAgKiAoeD1QX0RSSU5LKlBfREVGVUVMX0FNT1VOVF9EUklOSy8yKSArIHJhbmRvbSh4KQorICAgICAgKGFsc28gdW0gKDUwIGJpcyAxMDAgKiBQX0RSSU5LKSBQcm96ZW50KQorICAgIGVudHRhbmtlbi4KKworUlVFQ0tHQUJFV0VSVEU6CisgICAgREVGVUVMX1RPT19TT09OOiAtMiwgd2VubiBFbnR0YW5raW50ZXJ2YWxsemVpdGVuIHp1IGt1cnouCisgICAgREVGVUVMX1RPT19MT1c6ICAtMSwgd2VubiBFbnR0YW5rZ3JlbnplIG5vY2ggbmljaHQgZXJyZWljaHQuCisgICAgTk9fREVGVUVMOiAgICAgICAgMCwgd2VubiBFbnR0YW5rZW4gbmljaHQgbm9ldGlnIHdhciAoU3BpZWxlciB3YXIgbGVlcikKKyAgICA+MCwgd2VubiBFcmZvbGcgKGVudHRhbmt0ZSBXZXJ0IHdpcmQgenVydWVja2dlZ2ViZW4pLgorCisgICAgKEtvbnN0YW50ZW4ga29tbWVuIGF1cyAvc3lzL2RlZnVlbC5oKQorCitCRU1FUktVTkc6CisgICAgQml0dGUgZGVmdWVsX2RyaW5rKCkgYmVudXR6ZW4gdW5kIG5pY2h0IFBfRFJJTksgb2RlciBQX01BWF9EUklOSyBkZXMKKyAgICBtYW5pcHVsaWVyZW4hCisKKyAgICBFcyBnaWJ0IGtlaW5lIGVpZ2VuZSBNZXRob2RlIGZ1ZXIgZGllIFZlcnJpbmdlcnVuZyB2b24gUF9BTENPSE9MLgorCisgICAgQWNodHVuZzogTnVyIFRvaWxldHRlbiBzb2xsdGVuIGRpZXNlIEZ1bmt0aW9uIGltIFNwaWVsZXIgYXVmcnVmZW4hCisKK0JFSVNQSUVMOgorICAgIHMuIEJzcC4genUgZGVmdWVsX2Zvb2QoKQorCitTSUVIRSBBVUNIOgorICAgICBBZWhubGljaDogIGRlZnVlbF9mb29kCisgICAgIFRhbmtlbjogICAgY29uc3VtZSwgZHJpbmtfYWxjb2hvbCwgZHJpbmtfc29mdCwgZWF0X2Zvb2QKKyAgICAgSGVpbHVuZzogICBoZWFsX3NlbGYsIHJlc3RvcmVfc3BlbGxfcG9pbnRzLCByZXN0b3JlX2hpdF9wb2ludHMsIAorICAgICAgICAgICAgICAgIGJ1ZmZlcl9ocCwgYnVmZmVyX3NwCisgICAgIFRpbWluZzogICAgY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkKKyAgICAgUHJvcHM6ICAgICBQX0RSSU5LLCBQX0ZPT0QsIFBfQUxDT0hPTCwgUF9TUCwgUF9IUCwKKyAgICAgICAgICAgICAgICBQX0RFRlVFTF9USU1FX0ZPT0QsIFBfREVGVUVMX1RJTUVfRFJJTksKKyAgICAgS29uemVwdGU6ICBoZWlsdW5nLCBlbnR0YW5rZW4sIGZvb2QKKworOS4gQXVndXN0IDIwMTUgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2RlZnVlbF9mb29kIGIvZG9jL2xmdW4vZGVmdWVsX2Zvb2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4OTExMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2RlZnVlbF9mb29kCkBAIC0wLDAgKzEsODUgQEAKK0ZVTktUSU9OOgorICAgIGludCBkZWZ1ZWxfZm9vZCgpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvbGlmZS5jCisKK0FSR1VNRU5URToKKyAgICBLZWluZS4KKworQkVTQ0hSRUlCVU5HOgorICAgIEVudHRhbmt0IGRlbiBTcGllbGVyIGF1dG9tYXRpc2NoIHVtIGVpbmVuIGdld2lzc2VuIEVzc2Vucy1XZXJ0LAorICAgIHNvZmVybiBkZXIgU3BpZWxlciB1ZWJlciBlaW5lciBiZXN0aW1tdGVuIEVudHRhbmstR3JlbnplIGxpZWd0IHVuZCBzZWl0CisgICAgc2VpbmVtIGxldHp0ZW4gRW50dGFua2VuIGVpbmUgZ2V3aXNzZSBaZWl0IHZlcmdhbmdlbiBpc3QuCisgICAgQWxsZSBkaWVzZSBXZXJ0ZSBzaW5kIHJhc3NlbmFiaGFlbmdpZy4KKworICAgIEVzIGlzdCBhbHNvIE5JQ0hUIG1vZWdsaWNoLCBFaW5mbHVzcyBhdWYgZGllIE1lbmdlIGRlcyBFbnR0YW5rZW5zCisgICAgenUgbmVobWVuLiBEYXMgaXN0IGhpZXIgc28gZ2V3b2xsdC4KKworICAgIEhhdCBkZXIgU3BpZWxlciBtaW5kZXN0ZW5zIAorICAgICogUF9ERUZVRUxfTElNSVRfRk9PRCBpbiBQX0ZPT0QKKyAgICBrYW5uIGVyIGFsbGUKKyAgICAqIFBfREVGVUVMX1RJTUVfRk9PRAorICAgIHVtCisgICAgKiAoeD1QX0RSSU5LKlBfREVGVUVMX0FNT1VOVF9GT09ELzIpICsgcmFuZG9tKHgpCisgICAgICAoYWxzbyB1bSAoNTAgYmlzIDEwMCAqIFBfRk9PRCkgUHJvemVudCkKKyAgICBlbnR0YW5rZW4uCisKK1JVRUNLR0FCRVdFUlRFOgorICAgIERFRlVFTF9UT09fU09PTjogLTIsIHdlbm4gRW50dGFua2ludGVydmFsbHplaXRlbiB6dSBrdXJ6LgorICAgIERFRlVFTF9UT09fTE9XOiAgLTEsIHdlbm4gRW50dGFua2dyZW56ZSBub2NoIG5pY2h0IGVycmVpY2h0LgorICAgIE5PX0RFRlVFTDogICAgICAgIDAsIHdlbm4gRW50dGFua2VuIG5pY2h0IG5vZXRpZyB3YXIgKFNwaWVsZXIgd2FyIGxlZXIpCisgICAgPjAsIHdlbm4gRXJmb2xnIChlbnR0YW5rdGUgV2VydCB3aXJkIHp1cnVlY2tnZWdlYmVuKS4KKworICAgIChLb25zdGFudGVuIGtvbW1lbiBhdXMgL3N5cy9kZWZ1ZWwuaCkKKworQkVNRVJLVU5HOgorICAgIEJpdHRlIGRlZnVlbF9mb29kKCkgYmVudXR6ZW4gdW5kIG5pY2h0IFBfRk9PRCBvZGVyIFBfTUFYX0ZPT0QgZGVzCisgICAgU3BpZWxlcnMgbWFuaXB1bGllcmVuIQorCisgICAgQWNodHVuZzogTnVyIFRvaWxldHRlbiBzb2xsdGVuIGRpZXNlIEZ1bmt0aW9uIGltIFNwaWVsZXIgYXVmcnVmZW4hCisKK0JFSVNQSUVMOgorICAgIGludCBhY3Rpb25fZW50dGFua2VuKCkgeworICAgICAgc3RyaW5nIG1zZzsKKyAgICAgIGludCB2YWwgPSB0aGlzX3BsYXllcigpLT5kZWZ1ZWxfZm9vZCgpOworCisgICAgICBzd2l0Y2ggKHZhbCkgeworICAgICAgICBjYXNlIERFRlVFTF9UT09fU09PTjoKKyAgICAgICAgICBtc2cgPSAiRHUgd2Fyc3QgZG9jaCBlcnN0IHZvciBrdXJ6ZW0gYXVmIFRvaWxldHRlLi4uIjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERUZVRUxfVE9PX0xPVzoKKyAgICAgICAgICBtc2cgPSAiRHUgdmVyc3VjaHN0IERpY2ggenUgZW50bGVlcmVuLCBhYmVyIGlyZ2VuZHdpZSB3aWxsICIKKyAgICAgICAgICAgICAgICAiZGFzIG5pY2h0IHNvIHJlY2h0IGtsYXBwZW4uIjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOT19ERUZVRUw6CisgICAgICAgICAgbXNnID0gIkR1IGhhc3Qgc2VpdCBsYW5nZW0gbmljaHRzIGdlZ2Vzc2VuLCB3aWUgd2lsbHN0IER1IGRhbm4gIgorICAgICAgICAgICAgICAgICJ3YXMgbG9zd2VyZGVuIGtvZW5uZW4/IjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBzdHJpbmcgcXVhbGlmaWVyOworICAgICAgICAgIGludCBmdXp6eXBlcmNlbnQgPSAoOTArcmFuZG9tKDIwKSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwvdGhpc19wbGF5ZXIoKS0+UXVlcnlQcm9wKFBfTUFYX0ZPT0QpOworICAgICAgICAgIHN3aXRjaChmdXp6eXBlcmNlbnQpIHsKKyAgICAgICAgICAgIGNhc2UgMC4uNTA6ICBxdWFsaWZpZXIgPSAiZXR3YXMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNTEuLjc1OiBxdWFsaWZpZXIgPSAiZW5vcm0iOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICBxdWFsaWZpZXIgPSAidW5nbGF1YmxpY2giOyBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgbXNnID0gIkR1IGVudGxlZXJzdCBEaWNoICIrcXVhbGlmaWVyIisuIFB1aCwgZGFzIHRhdCBndXQhIjsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksIGJyZWFrX3N0cmluZyhtc2csIDc4KSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIEFlaG5saWNoOiAgZGVmdWVsX2RyaW5rCisgICAgIFRhbmtlbjogICAgY29uc3VtZSwgZHJpbmtfYWxjb2hvbCwgZHJpbmtfc29mdCwgZWF0X2Zvb2QKKyAgICAgSGVpbHVuZzogICBoZWFsX3NlbGYsIHJlc3RvcmVfc3BlbGxfcG9pbnRzLCByZXN0b3JlX2hpdF9wb2ludHMsIAorICAgICAgICAgICAgICAgIGJ1ZmZlcl9ocCwgYnVmZmVyX3NwCisgICAgIFRpbWluZzogICAgY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkKKyAgICAgUHJvcHM6ICAgICBQX0RSSU5LLCBQX0ZPT0QsIFBfQUxDT0hPTCwgUF9TUCwgUF9IUCwKKyAgICAgICAgICAgICAgICBQX0RFRlVFTF9USU1FX0ZPT0QsIFBfREVGVUVMX1RJTUVfRFJJTksKKyAgICAgS29uemVwdGU6ICBoZWlsdW5nLCBlbnR0YW5rZW4sIGZvb2QKKworOS4gQXVndXN0IDIwMTUgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2RlcmVnaXN0ZXJfbW9kaWZpZXIgYi9kb2MvbGZ1bi9kZXJlZ2lzdGVyX21vZGlmaWVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYjU0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9kZXJlZ2lzdGVyX21vZGlmaWVyCkBAIC0wLDAgKzEsMjQgQEAKK2RlcmVnaXN0ZXJfbW9kaWZpZXIoKQorRlVOS1RJT046CisgICAgIHZvaWQgZGVyZWdpc3Rlcl9tb2RpZmllcihvYmplY3QgbW9kaWZpZXIpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jCisNCitQQVJBTUVURVI6DQorICAgICBtb2RpZmllcgktIE9iamVrdCBtaXQgUF9YX0FUVFJfTU9EIG9kZXIgUF9NX0FUVFJfTU9EDQorCitCRVNDSFJFSUJVTkc6CisgICAgIE1lbGRldCBlaW5lbiBNb2RpZmllciBpbSBTcGllbGVyIGFiLiBXaXJkIGR1cmNoIFJlbW92ZVNlbnNpdGl2ZU9iamVjdAorICAgICBiZXppZWh1bmdzd2Vpc2UgYmVpbSBBdXN6aWVoZW4gb2RlciBXZWdzdGVja2VuIGdlcnVmZW4uCisgICAgIE11c3MgbmljaHQgZGlyZWt0IGdlcnVmZW4gd2VyZGVuLiBCZWkgVmVyYWVuZGVydW5nZW4gdm9uIE1vZGlmaWthdG9yZW4KKyAgICAgc29sbHRlIHN0YXR0ZGVzc2VuIFVwZGF0ZUF0dHJpYnV0ZXMgZ2VydWZlbiB3ZXJkZW4uICAgICAKKworU0lFSEUgQVVDSDoKKyAgICAgUXVlcnlBdHRyaWJ1dGUoKSwgUXVlcnlSZWFsQXR0cmlidXRlKCksIFF1ZXJ5QXR0cmlidXRlT2Zmc2V0KCksDQorICAgICBTZXRBdHRyKCksIFNldEF0dHJpYnV0ZSgpLCBTZXRSZWFsQXR0cmlidXRlKCksIFVwZGF0ZUF0dHJpYnV0ZXMoKSwNCisgICAgIHJlZ2lzdGVyX21vZGlmaWVyKCksUF9BVFRSSUJVVEVTLCBQX0FUVFJJQlVURVNfT0ZGU0VUUywgCisgICAgIFBfQVRUUklCVVRFU19NT0RJRklFUiwgUF9YX0FUVFJfTU9ELCBQX01fQVRUUl9NT0QsIAorICAgICAvc3RkL2xpdmluZy9hdHRyaWJ1dGVzLmMNCisKKzEzLkp1bi4yMDA0LCBNdWFkaWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9kaWUgYi9kb2MvbGZ1bi9kaWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwNTVmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2RpZQpAQCAtMCwwICsxLDQ1IEBACitkaWUoKQorCitGVU5LVElPTjoKKyAgICAgcHVibGljIHZhcmFyZ3Mgdm9pZCBkaWUoaW50IHBvaXNvbmRlYXRoLGludCBleHRlcm4pOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgIGludCBwb2lzb25kZWF0aAorCSAgRGllc2VzIEZsYWcgc29sbHRlIGJlaSBlaW5lbSBHaWZ0dG9kIChQX1BPSVNPTikgZ2VzZXR6dCBzZWluLgorICAgICBpbnQgZXh0ZXJuCisJICBJbnRlcm4uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGFzIExlYmV3ZXNlbiBzdGlyYnQsIG1laXN0IGF1dG9tYXRpc2NoIHZvbiBkb19kYW1hZ2UoKSBhdXNnZWxvZXN0LCB3ZW5uCisgICAgIDAgSFAgdW50ZXJzY2hyaXR0ZW4gd2VyZGVuLiBJbiBkaWVzZW0gRmFsbCB3aXJkIGRlciBLYW1wZiBiZWVuZGV0LCBHaWZ0LAorICAgICBBbGtvaG9sLCBUcmluay0gdW5kIEVzc3dlcnRlLCBCbGluZGhlaXQsIFRhdWJoZWl0IHUucy53LiBhdWYgTnVsbAorICAgICBnZXNldHp0IG9kZXIgZ2Vsb2VzY2h0LgorCisgICAgIEVzIHdpcmQgYXV0b21hdGlzY2ggZWluZSBMZWljaGUgKHNpZWhlIGF1Y2ggUF9DT1JQU0UsIFBfTk9DT1JQU0UpIG5lYnN0CisgICAgIFRvZGVzbWVsZHVuZ2VuIChzaWVoZSBhdWNoIFBfRElFX01TRykgZXJ6ZXVndCwgdW5kIGZ1ZXIgU3BpZWxlciB3ZXJkZW4KKyAgICAgS2lsbHN0dXBzZSB2ZXJnZWJlbiwgc29mZXJuIG5vdHdlbmRpZy4KKworICAgICBVZWJlciBkZW4gSG9vayBQX1RNUF9ESUVfSE9PSyBrYW5uIG1hbiBqZWRvY2ggYXVmIGRlbiBBdXRvbWF0aXNtdXMKKyAgICAgRWluZmx1c3MgbmVobWVuLCB6LkIuIGtvZW5udGUgZWluIHRlbXBvcmFlcmVyIFRvZGVzYmFubi1aYXViZXIgZGFzCisgICAgIFN0ZXJiZW4gZnVlciBrdXJ6ZSBaZWl0IHZlcmhpbmRlcm4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitCRU1FUktVTkdFTjoKKyAgICAgRGllc2UgRnVua3Rpb24gc29sbHRlIG51ciBzZWx0ZW4gZGlyZWt0IHZlcndlbmRldCB3ZXJkZW4uIE1laXN0IGlzdCBkZXIKKyAgICAgdWVibGljaGUgV2VnIHVlYmVyIERlZmVuZCgpIC0+IGRvX2RhbWFnZSgpIC0+IGRpZSgpIGRpZSBsb2dpc2NoIGJlc3NlcmUKKyAgICAgdW5kIGJhbGFuY2V0ZWNobmlzY2ggZ3VlbnN0aWdlcmUgTG9lc3VuZy4KKworU0lFSEUgQVVDSDoKKyAgICAgVG9kZXN1cnNhY2hlbjoJRGVmZW5kKEwpLCBkb19kYW1hZ2UoTCksIFBfUE9JU09OCisgICAgIFZlcndhbmR0OgkJUF9UTVBfRElFX0hPT0ssIFBfREVBRFMKKyAgICAgVG9kZXNtZWxkdW5nZW46CVBfS0lMTF9OQU1FLCBQX0tJTExfTVNHLCBQX01VUkRFUl9NU0csIFBfRElFX01TRworCQkJUF9aQVBfTVNHLCBQX0VORU1ZX0RFQVRIX1NFUVVFTkNFCisgICAgIFNvbnN0aWdlczoJCVBfQ09SUFNFLCBQX05PQ09SUFNFLCAvc3RkL2NvcnBzZS5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IE1vbiBNYXkgMTQgMTY6MjA6MzQgMjAwMSBieSBQYXRyeW4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2RvVW53ZWFyTWVzc2FnZSBiL2RvYy9sZnVuL2RvVW53ZWFyTWVzc2FnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI5ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZG9VbndlYXJNZXNzYWdlCkBAIC0wLDAgKzEsMjggQEAKK2RvVW53ZWFyTWVzc2FnZSgpCisKK0ZVTktUSU9OOgorCXZvaWQgZG9VbndlYXJNZXNzYWdlKG9iamVjdCB3b3JuX2J5LCBpbnQgYWxsKTsKKworREVGSU5JRVJUIElOOgorCS9zdGQvYXJtb3VyL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKwl3b3JuX2J5CisgICAgICAgICAgRGFzIExlYmV3ZXNlbiwgZGFzcyBkaWUgUnVlc3R1bmcgYmlzaGVyIGdldHJhZ2VuIGhhdAorICAgICAgICBhbGwKKyAgICAgICAgICBXdXJkZSAiemllaGUgYWxsZXMgYXVzIi8iemllaGUgYWxsZSBydWVzdHVuZ2VuIGF1cyIgZWluZ2VnZWJlbiwKKyAgICAgICAgICBzbyBpc3QgYWxsIGdlc2V0enQsIGFuc29uc3RlbiBuaWNodC4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBEaWVzZSBGdW5rdGlvbiBnaWJ0IGJlaW0gQXVzemllaGVuIGVpbmVyIFJ1ZXN0dW5nIGRpZSBlbnRzcHIuCisgICAgICAgIE1lbGR1bmcgYW4gZGVuIFRyYWVnZXIgdW5kIGRpZSBVbWdlYnVuZyBhdXMuCisKK1JVZUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIGRvV2Vhck1lc3NhZ2UoKSwgZG9XaWVsZE1lc3NhZ2UoKSwgZG9VbndpZWxkTWVzc2FnZSgpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFNhdCBKdW4gMjYgMTU6NDE6MDAgMTk5OSBieSBQYXJhY2Vsc3VzCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2RvVW53aWVsZE1lc3NhZ2UgYi9kb2MvbGZ1bi9kb1Vud2llbGRNZXNzYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjA3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9kb1Vud2llbGRNZXNzYWdlCkBAIC0wLDAgKzEsMjUgQEAKK2RvVW53aWVsZE1lc3NhZ2UoKQorCitGVU5LVElPTjoKKwl2b2lkIGRvVW53aWVsZE1lc3NhZ2Uob2JqZWN0IHdpZWxkZWRfYnkpOworCitERUZJTklFUlQgSU46CisJL3N0ZC93ZWFwb24vY29tYmF0LmMKKworQVJHVU1FTlRFOgorCXdpZWxkZWRfYnkKKyAgICAgICAgICBEYXMgTGViZXdlc2VuLCBkYXNzIGRpZSAoUGFyaWVyKVdhZmZlIGJpc2hlciBnZXp1ZWNrdCBoYXR0ZS4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBEaWVzZSBGdW5rdGlvbiBnaWJ0IGJlaW0gV2Vnc3RlY2tlbiBlaW5lciBXYWZmZSBkaWUgZW50c3ByLgorICAgICAgICBNZWxkdW5nIGFuIGRlbiBCZW51dHplciB1bmQgZGllIFVtZ2VidW5nIGF1cy4KKworUlVlQ0tHQUJFV0VSVDoKKwlrZWluZXIKKworU0lFSEUgQVVDSDoKKyAgICAgICAgZG9XZWFyTWVzc2FnZSgpLCBkb1Vud2Vhck1lc3NhZ2UoKSwgZG9XaWVsZE1lc3NhZ2UoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBTYXQgSnVuIDI2IDE1OjMyOjAwIDE5OTkgYnkgUGFyYWNlbHN1cworCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9kb1dlYXJNZXNzYWdlIGIvZG9jL2xmdW4vZG9XZWFyTWVzc2FnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTYyZDVjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZG9XZWFyTWVzc2FnZQpAQCAtMCwwICsxLDI2IEBACitkb1dlYXJNZXNzYWdlKCkKKworRlVOS1RJT046CisJdmFyYXJncyB2b2lkIGRvV2Vhck1lc3NhZ2UoaW50IGFsbCk7CisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL2FybW91ci9jb21iYXQuYworCitBUkdVTUVOVEU6CisJYWxsCisgICAgICAgICAgV3VyZGUgInRyYWdlIGFsbGVzIi8idHJhZ2UgYWxsZSBydWVzdHVuZ2VuIiBlaW5nZWdlYmVuLCBzbworICAgICAgICAgIGlzdCBhbGwgZ2VzZXR6dCwgYW5zb25zdGVuIG5pY2h0LgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIERpZXNlIEZ1bmt0aW9uIGdpYnQgYmVpbSBBbnppZWhlbiBlaW5lciBSdWVzdHVuZyBkaWUgZW50c3ByLgorICAgICAgICBNZWxkdW5nIGFuIGRlbiBUcmFlZ2VyIHVuZCBkaWUgVW1nZWJ1bmcgYXVzLgorCitSVWVDS0dBQkVXRVJUOgorCWtlaW5lcgorCitTSUVIRSBBVUNIOgorICAgICAgICBkb1Vud2Vhck1lc3NhZ2UoKSwgZG9XaWVsZE1lc3NhZ2UoKSwgZG9VbndpZWxkTWVzc2FnZSgpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFNhdCBKdW4gMjYgMTU6MzA6MDAgMTk5OSBieSBQYXJhY2Vsc3VzCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2RvV2llbGRNZXNzYWdlIGIvZG9jL2xmdW4vZG9XaWVsZE1lc3NhZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxNWZhYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2RvV2llbGRNZXNzYWdlCkBAIC0wLDAgKzEsMjQgQEAKK2RvV2llbGRNZXNzYWdlKCkKKworRlVOS1RJT046CisJdm9pZCBkb1dpZWxkTWVzc2FnZSgpOworCitERUZJTklFUlQgSU46CisJL3N0ZC93ZWFwb24vY29tYmF0LmMKKworQVJHVU1FTlRFOgorCWtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgRGllc2UgRnVua3Rpb24gZ2lidCBiZWltIFp1ZWNrZW4gZWluZXIgV2FmZmUgZGllIGVudHNwci4KKyAgICAgICAgTWVsZHVuZyBhbiBkZW4gQmVudXR6ZXIgdW5kIGRpZSBVbWdlYnVuZyBhdXMuCisKK1JVZUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIGRvV2Vhck1lc3NhZ2UoKSwgZG9VbndlYXJNZXNzYWdlKCksIGRvVW53aWVsZE1lc3NhZ2UoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBTYXQgSnVuIDI2IDE1OjMzOjAwIDE5OTkgYnkgUGFyYWNlbHN1cworCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9kb19kYW1hZ2UgYi9kb2MvbGZ1bi9kb19kYW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1ODgzOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2RvX2RhbWFnZQpAQCAtMCwwICsxLDQ0IEBACitkb19kYW1hZ2UoTCkKK0ZVTktUSU9OOgorICAgICBpbnQgZG9fZGFtYWdlKGludCBkYW0sbWl4ZWQgZW5lbXkpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvbGl2aW5nL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgIGludCBkYW0KKwkgIERpZSBhYnp1emllaGVuZGVuIExlYmVuc3B1bmt0ZSAoSFApLgorICAgICBvYmplY3QgZW5lbXkKKwkgIERhcyBPYmpla3QsIHdlbGNoZXMgZGVuIFNjaGFkZW4genVmdWVndC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEZW0gTGViZXdlc2VuIHdlcmRlbiA8ZGFtPiBIUCBhYmdlem9nZW4uIEZhbGxzIHdlbmlnZXIgYWxzIDAgSFAgdWVicmlnCisgICAgIGJsZWliZW4sIHNvIHN0aXJidCBlcyBhdXRvbWF0aXNjaCBtaXR0ZWxzIGRpZSgpLgorICAgICBFaW4gTGViZXdlc2VuLCB3ZWxjaGVzIHNpY2ggYmV3ZWd0IGhhdCwgdHJpZmZ0IGRpZSBlcnN0ZW4gS2FtcGZydW5kZW4KKyAgICAgc2VociB2aWVsIHNjaGxlY2h0ZXIsIHVtIFJlaW4tUmF1cy1BdHRhY2tlbiB6dSB2ZXJoaW5kZXJuLiBEaWVzZXMKKyAgICAgVm9yZ2VoZW4ga2FubiBtYW4gbWl0dGVscyBQX0VOQUJMRV9JTl9BVFRBQ0tfT1VUIGRlYWt0aXZpZXJlbi4KKyAgICAgTGViZXdlc2VuLCB3ZWxjaGUgUF9OT19BVFRBQ0sgZ2VzZXR6dCBoYWJlbiwga2FubiBtYW4gbWl0IGRpZXNlcgorICAgICBGdW5rdGlvbiBuaWNodCBzY2hhZGVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEZXIgdGF0c2FlY2hsaWNoIHZlcnVyc2FjaHRlIFNjaGFkZW4uCisKK0JFTUVSS1VOR0VOOgorICAgICBCZWltIEdlZ25lciA8ZW5lbXk+LCBmYWxscyB2b3JoYW5kZW4sIHdlcmRlbiBYUCB1bmQgQUxJR04gZW50c3ByZWNoZW5kCisgICAgIGFuZ2VwYXNzdCwgaW0gT3BmZXIgd2lyZCBkZXIgR2VnbmVyIGluIFBfS0lMTEVSIHZlcm1lcmt0LCBkZXIgS2FtcGYgd2lyZAorICAgICBiZWVuZGV0LgorICAgICBEaWVzZSBGdW5rdGlvbiBzb2xsdGUgbnVyIHNlbHRlbiBkaXJla3QgdmVyd2VuZGV0IHdlcmRlbi4gTWVpc3QgaXN0IGRlcgorICAgICB1ZWJsaWNoZSBXZWcgdWViZXIgRGVmZW5kKCkgLT4gZG9fZGFtYWdlKCkgLT4gZGllKCkgZGllIGxvZ2lzY2ggYmVzc2VyZQorICAgICB1bmQgYmFsYW5jZXRlY2huaXNjaCBndWVuc3RpZ2VyZSBMb2VzdW5nLCBkYSBEZWZlbmQoKSBtYWdpc2NoZQorICAgICBWZXJ0ZWlkaWd1bmdlbiwgZGllIGRlciBTcGllbGVyIGJlaSBzaWNoIGhhdCBiZXJ1ZWNrc2ljaHRpZ3QuCisgICAgIEVzIHNvbGx0ZSBhbHNvIGFsbGVpbiBzY2hvbiBhdXMgRmFpcm5lc3MgZ2VnZW51ZWJlciBkZW4gT2JqZWt0ZW4KKyAgICAgYW5kZXJlciBNYWdpZXIgRGVmZW5kKCkgaW1tZXIgZGVtIGRpcmVrdGVuIHJlZHVjZV9oaXRfcG9pbnRzKCkgb2RlcgorICAgICBkb19kYW1hZ2UoKSB2b3JnZXpvZ2VuIHdlcmRlbi4gTWl0dGVscyBkZXIgRmxhZ3MgaW4gJ3NwZWxsJyBrYW5uIG1hbgorICAgICBzZWhyIHZpZWxlIFBhcmFtZXRlciBiZWVpbmZsdXNzZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIFZlcndhbmR0OglEZWZlbmQoTCksIHJlZHVjZV9oaXRfcG9pbnRzKEwpLCBkaWUoTCkKKyAgICAgUHJvcHM6CVBfTk9fQVRUQUNLLCBQX0VOQUJMRV9JTl9BVFRBQ0tfT1VULCBQX0tJTExFUgorCQlQX1hQLCBQX0FMSUdOCisKKzIzLkZlYi4yMDA0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZG9fZnJhZ2UgYi9kb2MvbGZ1bi9kb19mcmFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA4NjEwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZG9fZnJhZ2UKQEAgLTAsMCArMSwyMSBAQAorZG9fZnJhZ2UoKQorRlVOS1RJT046CisgICAgIGludCBkb19mcmFnZShzdHJpbmcgdGV4dCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL25wYy9pbmZvLmMKKworQVJHVU1FTlRFOgorICAgICBzdHJpbmcgc3RyCSAtIFNjaGx1ZXNzZWx3b3J0IGRlciBGcmFnZQorCitCRVNDSFJFSUJVTkc6CisgICAgIEJlYXJiZWl0ZXQgZWluIFNjaGx1ZXNzZWx3b3J0LCBkYXMgbWl0ICJmcmFnZSA8d2VuPiBuYWNoICIgdWViZXJnZWJlbgorICAgICB3dXJkZS4gR2lidCBlbnRzcHJlY2hlbmRlIEFudHdvcnRlbiBmb3JtYXRpZXJ0IGF1cy4KKworQkVNRVJLVU5HRU46CisgICAgIFJlY2h0IGtvbXBsZXgsIGJlc3NlciBuaWNodCB1ZWJlcnNjaHJlaWJlbiB3ZW5uIG1hbiBlcyBuaWNodCB2ZXJzdGVodC4KKworU0lFSEUgQVVDSDoKKyAgICAgVmVyd2FuZHQ6ICBHZXRJbmZvQXJyLCBBZGRJbmZvCisKKzMxLk1hciAyMDA3IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9kb191bndlYXIgYi9kb2MvbGZ1bi9kb191bndlYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjZmEzNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2RvX3Vud2VhcgpAQCAtMCwwICsxLDM0IEBACitkb191bndlYXIoKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBpbnQgZG9fdW53ZWFyKHN0cmluZyBzdHIsIGludCBzaWxlbnQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvYXJtb3VyL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyCisgICAgICAgICAgU3RyaW5nIGRlciBub3JtYWxlcndlaXNlIGRlbSBQYXJhbWV0ZXIgZGVzICJ6aWVoZSItS29tbWFuZG9zCisgICAgICAgICAgZW50c3ByaWNodC4KKworICAgICBzaWxlbnQKKyAgICAgICAgICAxLCB3ZW5uIGRhcyBBdXN6aWVoZW4gb2huZSBNZWxkdW5nZW4gZHVyY2hnZWZ1ZWhydCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVzZSBGdW5rdGlvbiBzdGVsbHQgZmVzdCwgb2IgZGllIFJ1ZXN0dW5nIHNpY2ggZHVyY2ggc3RyCisgICAgIGlkZW50aWZpemllcmVuIGxhZXNzdCB1bmQgYW5nZXpvZ2VuIGlzdCB1bmQgcnVmdCBpbSBFcmZvbGdzZmFsbAorICAgICBVbldlYXIoc2lsZW50KSBhdWYuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIDEsIHdlbm4gYWxsZXMgZ3V0IGdpbmcsIGFuc29uc3RlbiAwLgorCitCRU1FUktVTkdFTjoKKyAgICAgV2VubiBtYW4gUnVlc3R1bmdlbiAidm9uIGF1c3NlbiIgYXVzemllaGVuIHdpbGwsIHNvbGx0ZSBtYW4gZGlyZWt0CisgICAgIFVuV2VhcigpIHZlcndlbmRlbiEKKworU0lFSEUgQVVDSDoKKyAgICAgZG9fd2VhcigpLCBVbldlYXIoKSwgUmVtb3ZlRnVuYygpLCBJbmZvcm1VbndlYXIoKSwKKyAgICAgL3N0ZC9hcm1vdXIvY29tYmF0LmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogU3VuIEp1biAyNyAyMjoyOTowMCAxOTk5IGJ5IFBhcmFjZWxzdXMKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2RvX3dlYXIgYi9kb2MvbGZ1bi9kb193ZWFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjI3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9kb193ZWFyCkBAIC0wLDAgKzEsMjcgQEAKK2RvX3dlYXIoKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBpbnQgZG9fd2VhcihzdHJpbmcgc3RyLCBpbnQgc2lsZW50KTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2FybW91ci9jb21iYXQuYworCitBUkdVTUVOVEU6CisgICAgIHN0cgorICAgICAgICAgIFN0cmluZywgZGVyIG5vcm1hbGVyd2Vpc2UgZGVtIFBhcmFtZXRlciBkZXMKKyAgICAgICAgICAiemllaGUvdHJhZ2UiLUtvbW1hbmRvcyBlbnRzcHJpY2h0LgorICAgICBzaWxlbnQKKyAgICAgICAgICAxLCB3ZW5uIGRhcyBBbnppZWhlbiBvaG5lIE1lbGR1bmdlbiBkdXJjaGdlZnVlaHJ0IHdlcmRlbiBzb2xsLgorCitCRVNDSFJFSUJVTkc6CisgICAgIFdlbm4gc2ljaCBkaWUgUnVlc3R1bmcgbWl0ICJzdHIiIGlkZW50aWZpemllcmVuIGxhZXNzdCwgd2lyZCB2ZXJzdWNodCwKKyAgICAgc2llIG1pdHRlbHMgRG9XZWFyKCkgYW56dXppZWhlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBzaWNoIGRpZSBSdWVzdHVuZyBhbnppZWhlbiBsaWVzcywgc29uc3QgMC4KKworU0lFSEUgQVVDSDoKKyAgICAgZG9fdW53ZWFyKCksIERvV2VhcigpLCBXZWFyRnVuYygpLCBJbmZvcm1XZWFyKCksIC9zdGQvYXJtb3VyL2NvbWJhdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFN1biBKdW4gMjcgMjI6MzE6MDAgMTk5OSBieSBQYXJhY2Vsc3VzCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9kcmlua19hbGNvaG9sIGIvZG9jL2xmdW4vZHJpbmtfYWxjb2hvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGVkMWRkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZHJpbmtfYWxjb2hvbApAQCAtMCwwICsxLDgzIEBACitGVU5LVElPTjoKKyAgICBwdWJsaWMgdmFyYXJncyBpbnQgZHJpbmtfYWxjb2hvbChpbnQgc3RyZW5ndGgsIGludCB0ZXN0b25seSwgc3RyaW5nIG15dGV4dCkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgc3RyZW5ndGg6IHdpcmQgenVyIGFrdHVlbGxlbiBTYWV0dGlndW5nIFBfQUxDT0hPTCBkYXp1IGFkZGllcnQKKyAgICB0ZXN0b25seTogSXN0IGRhcyBGbGFnIGdlc2V0enQsIHdpcmQgZGVtIFNwaWVsZXIga2VpbiBBTENPSE9MIHp1Z2VmdWVocnQuCisgICAgICAgICAgICAgIERhcmYgbnVyIHp1bSBUZXN0ZW4gZGVyIEhlaWxzdGVsbGUgdmVyd2VuZGV0IHdlcmRlbiB1bmQgbXVzcworICAgICAgICAgICAgICBpbSBub3JtYWxlbiBCZXRyaWViIGF1ZiAnMCcgc3RlaGVuIQorICAgIG15dGV4dDogV2VyIHNlbGJlciBlaW5lbiBUZXh0IGJlaSBNaXNzZXJmb2xnIGF1c2dlYmVuIGxhc3NlbiBtb2VjaHRlLAorICAgICAgICAgICAgZGFyZiBzaWNoIGhpZXIgd2FzIG5ldHRlcyBhdXNkZW5rZW4uCisgICAgICAgICAgICBBY2h0dW5nOiBEYXMgdW50ZXJkcnVlY2t0IG5pY2h0IGRpZSAiTnVlY2h0ZXJuIi1NZWxkdW5nLCBkaWUgYmVpCisgICAgICAgICAgICBuZWdhdGl2ZW0gc3RyZW5ndGggYXVmdHJldGVuIGthbm4sIHdlbm4gUF9BTENPSE9MIHdpZWRlciAwIGlzdC4KKworQkVTQ0hSRUlCVU5HOgorICAgIEVzIHdpcmQgZ2VwcnVlZnQsIG9iIGRlbSBTcGllbGVyIGRlciBhbmdlZ2ViZW5lIFdlcnQgZnVlciAnc3RyZW5ndGgnCisgICAgYXVmIHNlaW5lIGFrdHVlbGxlIFBfQUxDT0hPTCBhZGRpZXJ0IHdlcmRlbiBrYW5uIG9kZXIgbmljaHQuIEZhbGxzCisgICAgZGFzIG1vZWdsaWNoIGlzdCB1bmQgdGVzdG9ubHkgPSAwLCB3aXJkIFBfQUxDT0hPTCBlbnRzcHJlY2hlbmQKKyAgICBha3R1YWxpc2llcnQuCisKKyAgICBTb2xsZW4gbmViZW4gUF9BTENPSE9MIG5vY2ggd2VpdGVyZSBQcm9wcyBtYW5pcHVsaWVydCB3ZXJkZW4gLSBic3B3LiB6dXIKKyAgICBIZWlsdW5nIGVpbmVzIExlYmV3ZXNlbnMgLSBiaWV0ZXQgc2ljaCBkaWUgRnVua3Rpb24gY29uc3VtZSgpIGFuLgorCitSVUVDS0dBQkVXRVJUOgorICAgIDAgYmVpIFtwb3RlbnRpZWxsZW1dIE1pc3NlcmZvbGcgKHN0cmVuZ3RoICsgUF9BTENPSE9MID4gUF9NQVhfQUxDT0hPTCkKKyAgICAxIGJlaSBbcG90ZW50aWVsbGVtXSBFcmZvbGcKKyAgICAqIHBvdGVudGllbGwgYmV6aWVodCBzaWNoIGhpZXIgYXVmIE51dHp1bmcgbWl0ICd0ZXN0b25seScgIT0gMAorCitCRU1FUktVTkc6CisgICAgZHJpbmtfYWxvY29ob2woKSBiaXR0ZSBhbnN0YXR0IGVpZ2VuZXIgTWFuaXB1bGF0aW9uZW4gdm9uIFBfQUxDT0hPTCB1bmQKKyAgICBQX01BWF9BTENPSE9MIHZlcndlbmRlbi4KKworICAgIEFjaHR1bmc6IEltbWVyIGVyc3QgVk9SIGVpbmVyIEhlaWx1bmcgYXVzZnVlaHJlbiB1bmQgYmVpIEVyZm9sZyBoZWlsZW4uCisKKyAgICBCZWkgSGVpbHN0ZWxsZW4gc29sbHRlIGVpbmUgZXZ0bC4gSGVpbHVuZyBkZXMgU3BpZWxlcnMgbWl0IGRlciBlaWdlbnMKKyAgICBkYWZ1ZXIgZWluZ2VyaWNodGV0ZW4gRnVua3Rpb24gY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkgcmVhbGlzaWVydAorICAgIHdlcmRlbi4KKworQkVJU1BJRUw6CisgICAgaW50IGhlaWxzdGVsbGUoKSB7CisgICAgICBpZih0aGlzX3BsYXllcigpLT5kcmlua19hbGNvaG9sKDEwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHUgcHJ1c3Rlc3QgaW4gZGVuIFNjaG5hcHMuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlciBwYXNzdCBuaWNodCBtZWhyIHJlaW4uXG4iKSkgeworICAgICAgICAvLyBQbGF0eiBmdWVyIDEwICJBbGtvaG9sIiB3YXIgbm9jaCwgZGllc2Ugc2luZCBqZXR6dCBiZXJlaXRzIGFkZGllcnQKKyAgICAgICAgLy8gTmFjaHJpY2h0IGFuIGRlbiBTcGllbGVyOgorICAgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLAorICAgICAgICAgICAgICAgICAgICBicmVha19zdHJpbmcoIkR1IHRyaW5rc3QgZGVuIFNjaG5hcHMgYXVzLiIsIDc4KSk7CisKKyAgICAgICAgLy8gTmFjaHJpY2h0IGFuIGFuZGVyZSBMaXZpbmdzIGltIFJhdW0KKyAgICAgICAgb2JqZWN0IG9iID0gZmlyc3RfaW52ZW50b3J5KGVudmlyb25tZW50KHRoaXNfcGxheWVyKCkpKTsKKyAgICAgICAgZG8geworICAgICAgICAgIGlmKGxpdmluZyhvYikgJiYgb2IhPXRoaXNfcGxheWVyKCkpCisgICAgICAgICAgICBvYi0+UmVjZWl2ZU1zZyh0aGlzX3BsYXllcigpLT5OYW1lKCkrIiB0cmlua3QgZWluZW4gU2NobmFwcyBhdXMuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UX0xPT0t8TVRfTElTVEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFfRFJJTkspOworICAgICAgICAgIG9iID0gbmV4dF9pbnZlbnRvcnkob2IpOworICAgICAgICB9IHdoaWxlKG9iKTsKKworICAgICAgICAvLyBSYXNzZW5hYmhhZW5naWdlIEhlaWx1bmc6IFNvZm9ydCBvZGVyIGluIFNjaHJpdHRlbgorICAgICAgICAvLyBUcmFnYmFyZSBIZWlsdW5nZW4gc29sbHRlbiBhdWNoIGVoZXIgYnVmZmVyX2hwL19zcCBiZW51dHplbi4KKyAgICAgICAgaWYodGhpc19wbGF5ZXIoKS0+UXVlcnlQcm9wKFBfUkVBTF9SQUNFKT09IlNjaG5hcHNkcm9zc2VsIikKKyAgICAgICAgICB0aGlzX3BsYXllcigpLT5oZWFsX3NlbGYoMzApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICB0aGlzX3BsYXllcigpLT5idWZmZXJfaHAoMzAsNSk7CisgICAgICAgICAgdGhpc19wbGF5ZXIoKS0+YnVmZmVyX3NwKDMwLDUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgICB9CitTSUVIRSBBVUNIOgorICAgICBBZWhubGljaDogIGNvbnN1bWUsIGVhdF9mb29kLCBkcmlua19zb2Z0CisgICAgIEhlaWx1bmc6ICAgaGVhbF9zZWxmLCByZXN0b3JlX3NwZWxsX3BvaW50cywgcmVzdG9yZV9oaXRfcG9pbnRzLCAKKyAgICAgICAgICAgICAgICBidWZmZXJfaHAsIGJ1ZmZlcl9zcAorICAgICBUaW1pbmc6ICAgIGNoZWNrX2FuZF91cGRhdGVfdGltZWRfa2V5CisgICAgIEVudHRhbmtlbjogZGVmdWVsX2RyaW5rLCBkZWZ1ZWxfZm9vZAorICAgICBQcm9wczogICAgIFBfRFJJTkssIFBfRk9PRCwgUF9BTENPSE9MLCBQX1NQLCBQX0hQLAorICAgICAgICAgICAgICAgIFBfREVGVUVMX1RJTUVfRFJJTksKKyAgICAgS29uemVwdGU6ICBoZWlsdW5nLCBlbnR0YW5rZW4sIGZvb2QKKworOS4gQXVndXN0IDIwMTUgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2RyaW5rX3NvZnQgYi9kb2MvbGZ1bi9kcmlua19zb2Z0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYjZlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9kcmlua19zb2Z0CkBAIC0wLDAgKzEsODMgQEAKK0ZVTktUSU9OOgorICAgIHB1YmxpYyB2YXJhcmdzIGludCBkcmlua19zb2Z0KGludCBzdHJlbmd0aCwgaW50IHRlc3Rvbmx5LCBzdHJpbmcgbXl0ZXh0KQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvbGlmZS5jCisKK0FSR1VNRU5URToKKyAgICBzdHJlbmd0aDogV2lyZCB6dSBkZW0gYXVnZW5ibGlja2xpY2hlbiBTYWV0dGlndW5nc2dyYWQgKFBfRFJJTkspIGFkZGllcnQuCisgICAgdGVzdG9ubHk6IElzdCBkYXMgRmxhZyBnZXNldHp0LCB3aXJkIGRlbSBTcGllbGVyIGtlaW4gRFJJTksgenVnZWZ1ZWhydC4KKyAgICAgICAgICAgICAgRGFyZiBudXIgenVtIFRlc3RlbiBkZXIgSGVpbHN0ZWxsZSB2ZXJ3ZW5kZXQgd2VyZGVuIHVuZCBtdXNzCisgICAgICAgICAgICAgIGltIG5vcm1hbGVuIEJldHJpZWIgYXVmICcwJyBzdGVoZW4hCisgICAgbXl0ZXh0OiBXZXIgc2VsYmVyIGVpbmVuIFRleHQgYmVpIE1pc3NlcmZvbGcgYXVzZ2ViZW4gbGFzc2VuIG1vZWNodGUsCisgICAgICAgICAgICBkYXJmIHNpY2ggaGllciB3YXMgbmV0dGVzIGF1c2Rlbmtlbi4KKyAgICAgICAgICAgIEFjaHR1bmc6IERhcyB1bnRlcmRydWVja3QgbmljaHQgZGllICJEdXJzdCItTWVsZHVuZywgZGllIGJlaQorICAgICAgICAgICAgbmVnYXRpdmVtIHN0cmVuZ3RoIGF1ZnRyaXR0LCB3ZW5uIFBfRFJJTksgd2llZGVyIDAgaXN0LgorCitCRVNDSFJFSUJVTkc6CisgICAgRXMgd2lyZCBnZXBydWVmdCwgb2IgZGVtIFNwaWVsZXIgZGVyIGFuZ2ViZW5lIFdlcnQgInN0cmVuZ3RoIiBhdWYKKyAgICBha3R1ZWxsZSBQX0RSSU5LIGFkZGllcnQgd2VyZGVuIGthbm4gb2RlciBuaWNodC4gSXN0IGRpZXMgbW9lZ2xpY2gsCisgICAgd2lyZCBlcyBnZW1hY2h0LCBlcyBzZWkgZGVubiBkYXMgdGVzdG9ubHkgIT0gMC4KKworICAgIFNvbGxlbiBuZWJlbiBQX0RSSU5LIG5vY2ggd2VpdGVyZSBQcm9wcyBtYW5pcHVsaWVydCB3ZXJkZW4gLSBic3B3LiB6dXIKKyAgICBIZWlsdW5nIGVpbmVzIExlYmV3ZXNlbnMgLSBiaWV0ZXQgc2ljaCBkaWUgRnVua3Rpb24gY29uc3VtZSgpIGFuLgorCitSVUVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIHN0cmVuZ3RoICsgUF9EUklOSyA+IFBfTUFYX0RSSU5LCisgICAgPjAsIHdlbm4gRXJmb2xnCisKK0JFTUVSS1VORzoKKyAgICBkcmlua19zb2Z0KCkgYml0dGUgYW5zdGF0dCBlaWdlbmVyIE1hbmlwdWxhdGlvbmVuIHZvbiBQX0RSSU5LIHVuZAorICAgIFBfTUFYX0RSSU5LIHZlcndlbmRlbi4KKworICAgIEFjaHR1bmc6IEltbWVyIGVyc3QgVk9SIGVpbmVyIEhlaWx1bmcgYXVzZnVlaHJlbiB1bmQgYmVpIEVyZm9sZyBoZWlsZW4uCisKKyAgICBCZWkgSGVpbHN0ZWxsZW4gc29sbHRlIGVpbmUgZXZ0bC4gSGVpbHVuZyBkZXMgU3BpZWxlcnMgbWl0IGRlciBlaWdlbnMKKyAgICBkYWZ1ZXIgZWluZ2VyaWNodGV0ZW4gRnVua3Rpb24gY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkgcmVhbGlzaWVydAorICAgIHdlcmRlbi4KKworQkVJU1BJRUw6CisgICAgaW50IGhlaWxzdGVsbGUoKSB7CisgICAgICBpZih0aGlzX3BsYXllcigpLT5kcmlua19zb2Z0KDEwLCAwLCAiRHUgYmx1YmJlcnN0IG5pY2h0IHVlYmVyemV1Z3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gZGVyIExpbW9uYWRlLiBEYXMgaXN0IHp1IHZpZWwuXG4iKSkgeworICAgICAgICAvLyBQbGF0eiBmdWVyIDEwICJUcmlua2VuIiB3YXIgbm9jaCwgZGllc2Ugc2luZCBqZXR6dCBiZXJlaXRzIGFkZGllcnQKKyAgICAgICAgLy8gTmFjaHJpY2h0IGFuIGRlbiBTcGllbGVyOgorICAgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLCBicmVha19zdHJpbmcoIkR1IG5pbW1zdCBlaW5lbiBncm9zc2VuICIKKyAgICAgICAgICAgICAgICAgICAgIlNjaGx1Y2sgenVja2Vyc3Vlc3NlIExpbW9uYWRlLiIsIDc4KSk7CisKKyAgICAgICAgLy8gYWxsZSBhbmRlcmVuIGltIFJhdW0gYmVrb21tZW4gZXMgZ2dmIGF1Y2ggbWl0OgorICAgICAgICAvLyAxKSBmaWx0ZXIoLi4uLCAjJ2xpdmluZykgZXJnaWJ0IGRpZSBMZWJld2VzZW4gaW0gUmF1bQorICAgICAgICAvLyAyKSBmaWx0ZXJfb2JqZWN0cyguLi4sICJSZWNlaXZlTXNnIikgcnVmdCBSZWNlaXZlTXNnIGFuIGplZGVtCisgICAgICAgIC8vIDMpIFJlY2VpdmVNc2coLi4uKSBiZWtvbW10IGRpZSBGb2xnZXBhcmFtZXRlcgorICAgICAgICBmaWx0ZXJfb2JqZWN0cyhmaWx0ZXIoYWxsX2ludmVudG9yeShlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ2xpdmluZykgLSAoe3RoaXNfcGxheWVyKCl9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVNc2ciLAorICAgICAgICAgICAgICAgICAgICAgICB0aGlzX3BsYXllcigpLT5OYW1lKCkrCisgICAgICAgICAgICAgICAgICAgICAgICAgIiB0cmlua3QgZWluZW4gU2NobHVjayBMaW1vbmFkZS4iLAorICAgICAgICAgICAgICAgICAgICAgICBNVF9MT09LfE1UX0xJU1RFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgTUFfRFJJTkspOworCisgICAgICAgIC8vIFJhc3NlbmFiaGFlbmdpZ2UgSGVpbHVuZzogU29mb3J0IG9kZXIgaW4gU2Nocml0dGVuCisgICAgICAgIC8vIFRyYWdiYXJlIEhlaWx1bmdlbiBzb2xsdGVuIGF1Y2ggZWhlciBidWZmZXJfaHAvX3NwIGJlbnV0emVuLgorICAgICAgICBpZih0aGlzX3BsYXllcigpLT5RdWVyeVByb3AoUF9SRUFMX1JBQ0UpPT0iU2F1ZnppZWdlIikKKyAgICAgICAgICB0aGlzX3BsYXllcigpLT5oZWFsX3NlbGYoMzApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICB0aGlzX3BsYXllcigpLT5idWZmZXJfaHAoMzAsNSk7CisgICAgICAgICAgdGhpc19wbGF5ZXIoKS0+YnVmZmVyX3NwKDMwLDUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIEFlaG5saWNoOiAgY29uc3VtZSwgZHJpbmtfYWxjb2hvbCwgZWF0X2Zvb2QKKyAgICAgSGVpbHVuZzogICBoZWFsX3NlbGYsIHJlc3RvcmVfc3BlbGxfcG9pbnRzLCByZXN0b3JlX2hpdF9wb2ludHMsIAorICAgICAgICAgICAgICAgIGJ1ZmZlcl9ocCwgYnVmZmVyX3NwCisgICAgIFRpbWluZzogICAgY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkKKyAgICAgRW50dGFua2VuOiBkZWZ1ZWxfZHJpbmssIGRlZnVlbF9mb29kCisgICAgIFByb3BzOiAgICAgUF9EUklOSywgUF9GT09ELCBQX0FMQ09IT0wsIFBfU1AsIFBfSFAsCisgICAgICAgICAgICAgICAgUF9ERUZVRUxfVElNRV9EUklOSworICAgICBLb256ZXB0ZTogIGhlaWx1bmcsIGVudHRhbmtlbiwgZm9vZAorCis5LiBBdWd1c3QgMjAxNSBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZHJvcCBiL2RvYy9sZnVuL2Ryb3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI4ZGQxOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2Ryb3AKQEAgLTAsMCArMSw0NSBAQAorZHJvcCgpCisKK0ZVTktUSU9OOgorICAgIHB1YmxpYyB2YXJhcmdzIGludCBkcm9wKG9iamVjdCBvLCBtaXhlZCBtc2cpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvcHV0X2FuZF9nZXQuYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IG8KKyAgICAgICAgRGFzIE9iamVrdCwgZGFzIGZhbGxlbmdlbGFzc2VuIHdlcmRlbiBzb2xsLgorICAgIG1peGVkIG1zZworICAgICAgICBFaW5lIG9wdGlvbmFsZSBNZWxkdW5nLCBkaWUgYW5zdGVsbGUgdm9uIFBfRFJPUF9NU0cgb2RlciBkZXIKKyAgICAgICAgU3RhbmRhcmRtZWxkdW5nIHZlcndlbmRldCB3aXJkLCBvZGVyIC0xLCB1bSBkaWUgTWVsZHVuZyB6dQorICAgICAgICB1bnRlcmRydWVja2VuLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGVyIFNwaWVsZXIgb2RlciBOUEMgbGFlc3N0IGRhcyBPYmpla3QgZmFsbGVuLiBHaWJ0IG8tPm1vdmUoKSBrZWluZW4KKyAgICBwb3NpdGl2ZW4gV2VydCB6dXJ1ZWNrLCBiZWlzcGllbHN3ZWlzZSB3ZWlsIGRhcyBPYmpla3QgdmVyZmx1Y2h0IGlzdCwKKyAgICBiZWtvbW10IGVyIGVpbmUgZW50c3ByZWNoZW5kZSBGZWhsZXJtZWxkdW5nLgorCitSVUVDS0dBQkVXRVJUOgorICAgIFdlbm4gZGFzIEZhbGxlbmxhc3NlbiBnZWtsYXBwdCBoYXQsIDEsIGFuc29uc3RlbiAwLgorCitCRU1FUktVTkc6CisgICAgRGllc2UgRnVua3Rpb24gaXN0IGRhbm4gc2lubnZvbGwsIHdlbm4gbWFuIGRlbiBTcGllbGVyIGVpbiBPYmpla3QKKyAgICBmYWxsZW5sYXNzZW4gbGFzc2VuIHVuZCBzaWNoIG5pY2h0IHNlbGJzdCB1bSBkaWUgRmVobGVyYmVoYW5kbHVuZyBrdWVtbWVybgorICAgIG1vZWNodGUgLSB1bmQgZGEgdW56YWVobGlnZSB2ZXJzY2hpZWRlbmUgRGluZ2Ugc2NoaWVmZ2VoZW4ga29lbm5lbiB1bmQKKyAgICBtYW5jaGUgT2JqZWt0ZSBlaWdlbmUgRmVobGVybWVsZHVuZ2VuIGRlZmluaWVyZW4sIGVpZ2VudGxpY2ggaW1tZXIuCisKKyAgICBEaWUgRnVua3Rpb24gcHJ1ZWZ0IG5pY2h0LCBvYiBkZXIgU3BpZWxlci9OUEMgZGFzIE9iamVrdCB1ZWJlcmhhdXB0IGhhdCwKKyAgICBkYXMgbXVzcyBtYW4gZ2dmLiBzZWxic3QgZXJtaXR0ZWxuLgorCitCRUlTUElFTDoKKyAgICBpZiAodGhpc19wbGF5ZXIoKS0+ZHJvcChvYmosICh7CisgICAgICAgICAgICAiRHUgd2lyZnN0IEBXRU4yIGluIGRlbiBTYWV1cmV0ZWljaC5cbiIsCisgICAgICAgICAgICAiQFdFUjEgd2lyZnQgQFdFTlUyIGluIGRlbiBTYWV1cmV0ZWljaC5cbiIgfSkpKQorICAgICAgICBvYmotPnJlbW92ZSgpOworCitTSUVIRSBBVUNIOgorICAgIG1vdmUoTCksIFBfRFJPUF9NU0csIGRyb3Bfb2JqZWN0cyhMKSwgUF9OT0lOU0VSVF9NU0csIFBfTk9MRUFWRV9NU0csCisgICAgUF9UT09fTUFOWV9NU0csIFBfVE9PX0hFQVZZX01TRywgUF9FTlZfVE9PX0hFQVZZX01TRywgUF9OT0RST1AKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogVGh1IEF1ZyAyOCAyMjoyMDozNyAyMDA4IGJ5IEFteW50aG9yCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9kcm9wX29iaiBiL2RvYy9sZnVuL2Ryb3Bfb2JqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjVlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9kcm9wX29iagpAQCAtMCwwICsxLDI4IEBACitkcm9wX29iaigpCisKK0ZVTktUSU9OCisgICAgaW50IGRyb3Bfb2JqKG9iamVjdCBvYik7CisKK0RFRklOSUVSVCBJTjoKKworICAgIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKKworQVJHVU1FTlRFOgorCisgICAgb2IgIERhcyBPYmpla3QsIGRhcyB2b24gZGVtIExlYmV3ZXNlbiwgaW4gZGVtIGRpZXNlIEZ1bmt0aW9uIGF1ZmdlcnVmZW4KKyAgICAgICAgd2lyZCwgZmFsbGVuZ2VsYXNzZW4gd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzoKKworICAgIERhcyBMZWJld2VzZW4sIGluIGRlbSBkaWVzZSBGdW5rdGlvbiBhdWZnZXJ1ZmVuIHdlcmRlbiBzb2xsLCBsYWVzc3QKKyAgICBkZW4gYW5nZWdlYmVuZW4gR2VnZW5zdGFuZCBmYWxsZW4sIHdlbm4gZGllcyBtb2VnbGljaCBpc3QuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgMSwgd2VubiBkYXMgT2JqZWt0IGZhbGxlbiBnZWxhc3NlbiB3dXJkZSBvZGVyIGRpZXMgbmljaHQgbW9lZ2xpY2ggd2FyLgorICAgIChpbiBkaWVzZW0gRmFsbCB3aXJkIGF1Y2ggZGlyZWt0IGVpbmUgVGV4dGF1c2dhYmUgYXVzZ2VnZWJlbikKKyAgICAwIHNvbnN0LCBpbiBkaWVzZW0gRmFsbCB3aXJkIGluIG5vdGlmeV9mYWlsIGVpbmUgcGFzc2VuZGUgQXVzZ2FiZQorICAgIHBsYXppZXJ0LgorCitTSUVIRSBBVUNIOgorCisgICAgZmluZF9vYnMoKSwgZ2l2ZV9vYmooKSwgcGlja19vYmooKSwgcHV0X29iaigpLCAvc3RkL2xpdmluZy9wdXRfYW5kX2dldC5jCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9kcm9wX29iamVjdHMgYi9kb2MvbGZ1bi9kcm9wX29iamVjdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwNDVmNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2Ryb3Bfb2JqZWN0cwpAQCAtMCwwICsxLDQ4IEBACitkcm9wX29iamVjdHMoKQorCitGVU5LVElPTjoKKyAgICBwdWJsaWMgdmFyYXJncyBpbnQgZHJvcF9vYmplY3RzKHN0cmluZyBzdHIsIG1peGVkIG1zZyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9wdXRfYW5kX2dldC5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgc3RyCisgICAgICAgIFdhcyBmYWxsZW5nZWxhc3NlbiB3ZXJkZW4gc29sbC4KKyAgICBtaXhlZCBtc2cKKyAgICAgICAgRWluZSBvcHRpb25hbGUgTWVsZHVuZywgZGllIGFuc3RlbGxlIHZvbiBQX0RST1BfTVNHIG9kZXIgZGVyCisgICAgICAgIFN0YW5kYXJkbWVsZHVuZyB2ZXJ3ZW5kZXQgd2lyZCwgb2RlciAtMSwgdW0gZGllIE1lbGR1bmcgenUKKyAgICAgICAgdW50ZXJkcnVlY2tlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgIERlciBTcGllbGVyIG9kZXIgTlBDIGxhZXNzdCBkaWUgaW4gPHN0cj4gYmVuYW5udGVuIFNhY2hlbiBmYWxsZW4uCisgICAgS2FubiBlciBlaW4gT2JqZWt0IG5pY2h0IGZhbGxlbmxhc3NlbiwgYmVrb21tdCBlciBlaW5lIGVudHNwcmVjaGVuZGUKKyAgICBGZWhsZXJtZWxkdW5nLiBXZW5uIGtlaW5lIE9iamVrdGUgYXVmIDxzdHI+IHBhc3Nlbiwgd2lyZCBwZXIKKyAgICBfbm90aWZ5X2ZhaWwoKSBlaW5lIE1lbGR1bmcgZ2VzZXR6dCwgYWJlciBub2NoIG5pY2h0IGF1c2dlZ2ViZW4uCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgV2VubiA8c3RyPiBpcmdlbmR3ZWxjaGUgdm9yaGFuZGVuZW4gU2FjaGVuIHNpbmQsIDEsIHNvbnN0IDAuCisKK0JFTUVSS1VORzoKKyAgICBXZW5uIGRpZSBGdW5rdGlvbiAxIHp1cnVlY2tnaWJ0LCBoZWlzc3QgZGFzIG5vY2ggbmljaHQsIGRhc3MgZGVyIFNwaWVsZXIKKyAgICBldHdhcyBmYWxsZW5nZWxhc3NlbiBoYXQhIEVyIGhhdCBlcyBudXIgdmVyc3VjaHQsIGQuaC4gYXVmIGplZGVuIEZhbGwgZWluZQorICAgIE1lbGR1bmcgYmVrb21tZW4uIEdpYnQgZGllIEZ1bmt0aW9uIDAgenVydWVjaywgaGF0IGVyIG5vY2gga2VpbmUgYmVrb21tZW4uCisKK0JFSVNQSUVMOgorICAgIHByaXZhdGUgaW50IGNtZF9vcGZlcm4oc3RyaW5nIHN0cikKKyAgICB7CisgICAgICAgIG5vdGlmeV9mYWlsKCJXQVMgbW9lY2h0ZXN0IER1IG9wZmVybj9cbiIpOworCisgICAgICAgIGlmICghdGhpc19wbGF5ZXIoKS0+ZHJvcF9vYmplY3RzKHN0ciwgKHsgIkR1IG9wZmVyc3QgQFdFTjIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQFdFUjEgb3BmZXJ0IEBXRU5VMi5cbiIgfSkpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgZmlsdGVyX29iamVjdHModGhpc19wbGF5ZXIoKS0+bW92ZWRfb2JqZWN0cygpLCAicmVtb3ZlIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICBtb3ZlKEwpLCBkcm9wKEwpLCBQX0RST1BfTVNHLCBmaW5kX29iamVjdHMoTCksIG1vdmVkX29iamVjdHMoTCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogRnJpIEp1bCAyNSAxMDo1OTozNyAyMDA4IGJ5IEFteW50aG9yCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9lYXRfZm9vZCBiL2RvYy9sZnVuL2VhdF9mb29kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDEwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9lYXRfZm9vZApAQCAtMCwwICsxLDg2IEBACitGVU5LVElPTjoKKyAgICBwdWJsaWMgdmFyYXJncyBpbnQgZWF0X2Zvb2QoaW50IGZvb2QsIGludCB0ZXN0b25seSwgc3RyaW5nIG15dGV4dCkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgZm9vZDogV2lyZCB6dSBkZW0gYXVnZW5ibGlja2xpY2hlbiBTYWV0dGlndW5nc2dyYWQgKFBfRk9PRCkgYWRkaWVydC4KKyAgICB0ZXN0b25seTogSXN0IGRhcyBGbGFnIGdlc2V0enQsIHdpcmQgZGVtIFNwaWVsZXIga2VpbiBGT09EIHp1Z2VmdWVocnQuCisgICAgICAgICAgICAgIERhcmYgbnVyIHp1bSBUZXN0ZW4gZGVyIEhlaWxzdGVsbGUgdmVyd2VuZGV0IHdlcmRlbiB1bmQgbXVzcworICAgICAgICAgICAgICBpbSBub3JtYWxlbiBCZXRyaWViIGF1ZiAnMCcgc3RlaGVuIQorICAgIG15dGV4dDogV2VyIHNlbGJlciBlaW5lbiBUZXh0IGJlaSBNaXNzZXJmb2xnIGF1c2dlYmVuIGxhc3NlbiBtb2VjaHRlLAorICAgICAgICAgICAgZGFyZiBzaWNoIGhpZXIgd2FzIG5ldHRlcyBhdXNkZW5rZW4uCisgICAgICAgICAgICBBY2h0dW5nOiBEYXMgdW50ZXJkcnVlY2t0IG5pY2h0IGRpZSAiSHVuZ2VyIi1NZWxkdW5nLCBkaWUgYmVpCisgICAgICAgICAgICBuZWdhdGl2ZW0gZm9vZCBhdWZ0cmV0ZW4ga2Fubiwgd2VubiBQX0ZPT0Qgd2llZGVyIDAgaXN0LgorCitCRVNDSFJFSUJVTkc6CisgICAgRXMgd2lyZCBnZXBydWVmdCwgb2IgZGVtIFNwaWVsZXIgZGVyIGFuZ2ViZW5lIFdlcnQgInN0cmVuZ3RoIiBhdWYgc2VpbmUKKyAgICBha3R1ZWxsZSBQX0ZPT0QgYWRkaWVydCB3ZXJkZW4ga2FubiBvZGVyIG5pY2h0LiBJc3QgZGllcyBtb2VnbGljaCwgd2lyZAorICAgIHdpcmQgZXMgZ2VtYWNodCwgZXMgc2VpIGRlbm4gZGFzIHRlc3Rvbmx5ICE9IDAuCisKKyAgICBTb2xsZW4gbmViZW4gUF9GT09EIG5vY2ggd2VpdGVyZSBQcm9wcyBtYW5pcHVsaWVydCB3ZXJkZW4gLSBic3B3LiB6dXIKKyAgICBIZWlsdW5nIGVpbmVzIExlYmV3ZXNlbnMgLSBiaWV0ZXQgc2ljaCBkaWUgRnVua3Rpb24gY29uc3VtZSgpIGFuLgorCitSVUVDS0dBQkVXRVJUOgorICAgICAwLCB3ZW5uIHN0cmVuZ3RoICsgUF9GT09EID4gUF9NQVhfRk9PRC4KKyAgICA+MCwgd2VubiBFcmZvbGcuCisKK0JFTUVSS1VORzoKKyAgICBlYXRfZm9vZCgpIGJpdHRlIGFuc3RhdHQgZWlnZW5lciBNYW5pcHVsYXRpb25lbiB2b24gUF9GT09EIHVuZAorICAgIFBfTUFYX0ZPT0QgdmVyd2VuZGVuLgorCisgICAgQWNodHVuZzogSW1tZXIgZXJzdCBWT1IgZWluZXIgSGVpbHVuZyBhdXNmdWVocmVuIHVuZCBiZWkgRXJmb2xnIGhlaWxlbi4KKworICAgIEJlaSBIZWlsc3RlbGxlbiBzb2xsdGUgZWluZSBldnRsLiBIZWlsdW5nIGRlcyBTcGllbGVycyBtaXQgZGVyIGVpZ2VucworICAgIGRhZnVlciBlaW5nZXJpY2h0ZXRlbiBGdW5rdGlvbiBjaGVja19hbmRfdXBkYXRlX3RpbWVkX2tleSByZWFsaXNpZXJ0CisgICAgd2VyZGVuLgorCitCRUlTUElFTDoKKyAgICBpbnQgaGVpbHN0ZWxsZSgpIHsKKyAgICAgIC8vIFdlbm4gYXVmIGRhcyBQX0ZPT0QgZGVzIFNwaWVsZXJzIGRpZSBhbmdlZ2ViZW5lbiAxMCBuaWNodCBtZWhyIGFkZGllcnQKKyAgICAgIC8vIGFkZGllcnQgd2VyZGVuIGtvZW5uZW4gKHdlaWwgc29uc3QgUF9NQVhfRk9PRCB1ZWJlcnNjaHJpdHRlbiB3aXJkKSwKKyAgICAgIC8vIHdpcmQgZGllIEZlaGxlcm1lbGR1bmcgYXVzZ2VnZWJlbiwgZGFzcyBkZXIgU3BpZWxlciBuaWNodHMgbWVocgorICAgICAgLy8gZXNzZW4vdHJpbmtlbiBrYW5uLgorICAgICAgLy8gQmVpIGdlc2V0enRlbSAnbXl0ZXh0JyB3aXJkICdteXRleHQnIGFuIGRlbiBTcGllbGVyIGF1c2dlZ2ViZW4uCisgICAgICAvLyBBbnNvbnN0ZW4gd2lyZCBkaWUgU3RhbmRhcmRtZWxkdW5nIGF1c2dlZ2ViZW4uCisgICAgICBpZiAoIXRoaXNfcGxheWVyKCktPmVhdF9mb29kKDEwLCAwLCAiRGVyIEtla3MgaXN0IGVpbmZhY2ggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInp1dmllbCBmdWVyIERpY2guXG4iKSApCisgICAgICAgIHJldHVybiAxOworCisgICAgICAvLyBTcGllbGVyIGhhdHRlIG5vY2ggYXVzcmVpY2hlbmQgU3BpZWxyYXVtIGJlaSBQX0ZPT0QuIERpZSAxMCBzaW5kIAorICAgICAgLy8gc2Nob24gYWRkaWVydCB3b3JkZW4uIEpldHp0IE5hY2hyaWNodCBhdXNnZWJlbjoKKyAgICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksIGJyZWFrX3N0cmluZygiRHUga25hYmJlcnN0IGVpbiBiaXNzY2hlbiBhbiAiCisgICAgICAgICAgICAgICAgICAiZGVtIEtla3MgaGVydW0gdW5kIGZ1ZWhsc3QgRGljaCBnbGVpY2ggdmllbCBiZXNzZXIuIiwgNzgpKTsKKworICAgICAgLy8gYWxsZSBMZWJld2VzZW4gaW0gUmF1bSBiZWtvbW1lbiBkYXMgYXVjaCBtaXQKKyAgICAgIGZvcmVhY2gob2JqZWN0IG9iOgorICAgICAgICAgICAgICAoZmlsdGVyKGFsbF9pbnZlbnRvcnkoZW52aXJvbm1lbnQodGhpc19wbGF5ZXIoKSkpLCAjJ2xpdmluZykgLQorICAgICAgICAgICAgICAgKHt0aGlzX3BsYXllcigpfSkpKQorICAgICAgICBvYi0+UmVjZWl2ZU1zZyh0aGlzX3BsYXllcigpLT5OYW1lKCkrIiBrbnVzcGVydCBlaW5lbiBLZWtzIHdlZy4iLAorICAgICAgICAgICAgICAgICAgICAgICBNVF9MT09LfE1UX0xJU1RFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgTUFfRUFUKTsKKworICAgICAgLy8gUmFzc2VuYWJoYWVuZ2lnZSBIZWlsdW5nOiBTb2ZvcnQgb2RlciBpbiBTY2hyaXR0ZW4KKyAgICAgIC8vIFRyYWdiYXJlIEhlaWx1bmdlbiBzb2xsdGVuIGF1Y2ggZWhlciBidWZmZXJfaHAvX3NwIGJlbnV0emVuLgorICAgICAgaWYodGhpc19wbGF5ZXIoKS0+UXVlcnlQcm9wKFBfUkVBTF9SQUNFKT09IktydWVtZWxtb25zdGVyIikKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+aGVhbF9zZWxmKDMwKTsKKyAgICAgIGVsc2UgeworICAgICAgICB0aGlzX3BsYXllcigpLT5idWZmZXJfaHAoMzAsNSk7CisgICAgICAgIHRoaXNfcGxheWVyKCktPmJ1ZmZlcl9zcCgzMCw1KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIDE7CisgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBBZWhubGljaDogIGNvbnN1bWUsIGRyaW5rX2FsY29ob2wsIGRyaW5rX3NvZnQKKyAgICAgSGVpbHVuZzogICBoZWFsX3NlbGYsIHJlc3RvcmVfc3BlbGxfcG9pbnRzLCByZXN0b3JlX2hpdF9wb2ludHMsIAorICAgICAgICAgICAgICAgIGJ1ZmZlcl9ocCwgYnVmZmVyX3NwCisgICAgIFRpbWluZzogICAgY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkKKyAgICAgRW50dGFua2VuOiBkZWZ1ZWxfZHJpbmssIGRlZnVlbF9mb29kCisgICAgIFByb3BzOiAgICAgUF9EUklOSywgUF9GT09ELCBQX0FMQ09IT0wsIFBfU1AsIFBfSFAsCisgICAgICAgICAgICAgICAgUF9ERUZVRUxfVElNRV9EUklOSworICAgICBLb256ZXB0ZTogIGhlaWx1bmcsIGVudHRhbmtlbiwgZm9vZAorCis5LiBBdWd1c3QgMjAxNSBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZXhlY3V0ZV9hbnl0aGluZyBiL2RvYy9sZnVuL2V4ZWN1dGVfYW55dGhpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4ODlmMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2V4ZWN1dGVfYW55dGhpbmcKQEAgLTAsMCArMSw0MiBAQAorZXhlY3V0ZV9hbnl0aGluZygpCitGVU5LVElPTjoKKyAgICBwcm90ZWN0ZWQgbWl4ZWQgZXhlY3V0ZV9hbnl0aGluZyhtaXhlZCBmdW4sIG1peGVkIGFyZ3MsIC4uLikKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvdXRpbC9leGVjdXRlci5jCisKK0FSR1VNRU5URToKKyAgICBtaXhlZCBmdW4gICAgICAgIGF1c3p1ZnVlaHJlbmRlIEZ1bmt0aW9uL0FycmF5L0Nsb3N1cmUgLi4uIGFueXRoaW5nCisgICAgbWl4ZWQgYXJncyAgICAgICB3ZWl0ZXJlIEFyZ3VtZW50ZSwgd2VyZGVuIHdlaXRlciB1ZWJlcmdlYmVuCisKK0JFU0NIUkVJQlVORzoKKyAgICBGdWVocnQgImFsbGVzIiBhdXM6CisgICAgCisgICAgJ2Z1bicga2FubiBzZWluOgorICAgIC0gZWluZSBDbG9zdXJlCisgICAgICBbZnVuY2FsbChmdW4sIGFyZ3MsIC4uLildCisgICAgLSBlaW5lbiBTdHJpbmcgYWxzIEZ1bmt0aW9uIGltIE9iamVrdAorICAgICAgW2NhbGxfb3RoZXIodGhpc19vYmplY3QoKSwgZnVuLCBhcmdzLCAuLi4pXQorICAgIC0gZWluIEFycmF5IG1pdCBPYmpla3QvT2JqZWt0bmFtZW4gKyBGdW5rdGlvbiBhbHMgQXVmcnVmIGRlciBGdW5rdGlvbiBhbQorICAgICAgT2JqZWt0L09iamVrdG5hbWVuOgorICAgICAgW2NhbGxfb3RoZXIoYXJyYXlbMF0sIGFycmF5WzFdLCBhcmdzLi4uKV0KKworICAgIFdpcmQgZXhlY3V0ZV9hbnl0aGluZygpIGF1cyBkZW0gcmVzdHJpY3Rpb25fY2hlY2tlciBnZXJ1ZmVuLCB3aXJkIGFscworICAgIGVyc3RlciBQYXJhbWV0ZXIgaW1tZXIgZGFzIGdlcHJ1ZWZ0ZSBMaXZpbmcgdWViZXJnZWJlbi4KKworQkVNRVJLVU5HRU46CisgICAgRXMga2FubiBzaWNoIGFuYmlldGVuLCBkaWUgZ2VydWZlbmUgRnVua3Rpb24gbWl0IHZhcmFyZ3MtQXJndW1lbnRlbiB6dQorICAgIGdlc3RhbHRlbiwgZGFtaXQgaWhyIG1laHIgQXJndW1lbnRlIHVlYmVyZ2ViZW4gd2VyZGVuIGtvZW5uZW4gYWxzIGluIGRlcgorICAgIEZ1bmt0aW9uc2RlZmluaXRpb24gYW5nZWdlYmVuIHNpbmQuIAorCisgICAgRGVyIFJlc3RyaWt0aW9uc3BydWVmZXIgKC9zdGQvcmVzdHJpY3Rpb25fY2hlY2tlcikgdmVyc3RlaHQgaW0gRmFsbGUgZWluZXMKKyAgICBBcnJheXMgbWl0IE9iamVrdC9PYmpla3RuYW1lbiArIEZ1bmt0aW9uIGF1Y2ggZWluIEFycmF5IG1pdCBtZWhyIGFscyAyCisgICAgRWxlbWVudGVuLiBEaWUgd2VpdGVyZW4gRWxlbWVudGUgd2VyZGVuIGRhbm4genUgd2VpdGVyZW4gQXJndW1lbnRlbiBkZXIKKyAgICBnZXJ1ZmVuZW4gRnVua3Rpb24uIEhpZXJiZWkgd2lyZCA8cGw+IGdnZi4gYWJlciBhbHMgZXJzdGVzIEFyZ3VtZW50IHZvcgorICAgIGFsbGUgYW5kZXJlbiBlaW5nZWZ1ZWd0LgorCitTSUVIRSBBVUNIOgorICAgIGNoZWNrX3Jlc3RyaWN0aW9ucywgdmFyYXJncworCiszMS4xMi4yMDEzLCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2V4aXQgYi9kb2MvbGZ1bi9leGl0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MGRiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9leGl0CkBAIC0wLDAgKzEsMzMgQEAKK2V4aXQoKQorCitGVU5LVElPTjoKKyAgdmFyYXJncyB2b2lkIGV4aXQob2JqZWN0IGxpdiwgb2JqZWN0IGRlc3QpOworCitERUZJTklFUlQgSU46CisgIC9zdGQvcm9vbS9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgbGl2IC0gKG9iamVjdCkgRGFzIGJld2VndGUgTGViZXdlc2VuLgorICBkZXN0IC0gKG9iamVjdCkgRGFzIEVudmlyb25tZW50LCBpbiB3ZWxjaGVzIGJld2VndCB3aXJkLgorCitCRVNDSFJFSUJVTkc6CisgIERpZXNlIEZ1bmt0aW9uIHdpcmQgaW1tZXIgZGFubiBhdWZnZXJ1ZmVuLCB3ZW5uIGVpbiBMZWJld2VzZW4gZGVuCisgIFJhdW0gdmVybGFlc3N0LiBTdGFuZGFyZG1hZXNzaWcgd2VyZGVuIGhpZXIgZ2dmLiBkaWUgUmF1bW1lbGR1bmdlbgorICBhYmdlc3RlbGx0LCBtYW4ga2FubiBhYmVyIGF1Y2ggZWlnZW5lIENoZWNrcyBlaW5oYWVuZ2VuLiBJbiBkZW0gRmFsbCBNVVNTCisgIG1hbiBhYmVyIGRhcyBnZWVyYnRlIGV4aXQoKSBhdWYgamVkZW4gRmFsbCBhdWZydWZlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAga2VpbmVyCisKK0JFTUVSS1VORzoKKyAgTWFuIGJlYWNodGUsIGRhc3MgdGhpc19wbGF5ZXIoKSAwIHNlaW4ga2Fubiwgd2VubiB6LkIuIGVpbiBuZXR6dG90ZXIgU3BpZWxlcgorICBTcGllbGVyIGRlbiBSYXVtIHZlcmxhZXNzdC4KKyAgTWFuIGJlYWNodGUgYXVzc2VyZGVtLCBkYXNzIHRoaXNfcGxheWVyKCkgbmljaHQgdW5iZWRpbmd0IGRhcyBiZXdlZ3RlIExpdmluZworICBzZWluIG11c3MuIFdlbm4gei5CLiBqZW1hbmQgZWluIExlYmV3ZXNlbiBiZXdlZ3QsIGlzdCBUUCBkZXIsIGRlciBkaWUKKyAgQmV3ZWd1bmcgZHVyY2hmdWVocnQsIG5pY2h0IGRhcyBMZWJld2VzZW4uCisKK1NJRUhFIEFVQ0g6CisgIGluaXQoKSwgdGhpc19wbGF5ZXIoKSwgcHJldmlvdXNfb2JqZWN0KCksIGNhbGxlcl9zdGFjaygpLAorICBOb3RmaXlMZWF2ZSgpLCBOb3RpZnlSZW1vdmUoKSwgTm90aWZ5RGVzdHJ1Y3QoKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMjUuMDIuMjAwOSwgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZmluZF9vYnMgYi9kb2MvbGZ1bi9maW5kX29icwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjQ0Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZmluZF9vYnMKQEAgLTAsMCArMSwzOCBAQAorZmluZF9vYnMoKQorCitGVU5LVElPTgorICAgIG9iamVjdCogZmluZF9vYnMoc3RyaW5nIHN0ciwgaW50IG1ldGgpCisKK0RFRklOSUVSVCBJTjoKKworICAgIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKKworQVJHVU1FTlRFOgorCisgICAgc3RyICAgICBEZXIgU3RyaW5nIGRlciBnZXBhcnNlZCB3ZXJkZW4gc29sbC4KKyAgICBtZXRoICAgIE1pdCBIaWxmZSBkaWVzZXMgUGFyYW1ldGVycyBrb2VubmVuIGJlc3RpbW10ZSBCZXJlaWNocy0KKyAgICAgICAgICAgIGVpbmdyZW56dW5nZW4gdm9yZ2Vub21tZW4gd2VyZGVuIChkZWZpbmllcnQgaW4gbW92aW5nLmgpOgorCisgICAgICAgICAgICBQVVRfR0VUX05PTkUgLSBrZWluZXJsZWkgQmVyZWljaHNlaW5ncmVuenVuZy4KKyAgICAgICAgICAgIFBVVF9HRVRfVEFLRSAtIGVzIGhhbmRlbHQgc2ljaCB1bSBlaW4gTmVobWVuIHZvbiBHZWdlbnN0YWVuZGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIHdpcmQgZGFzIGludmVudG9yeSBhdXNnZW5vbW1lbi4KKyAgICAgICAgICAgIFBVVF9HRVRfRFJPUCAtIGVzIGhhbmRlbHQgc2ljaCB1bSBkYXMgRW50ZmVybmVuIHZvbiBHZWdlbnN0YWVuZGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIHdpcmQgZGFzIGVudmlyb25tZW50IGF1c2dlbm9tbWVuLiAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitCRVNDSFJFSUJVTkc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgRGVyIFN0cmluZyAoc3RyKSBtdXNzIGZvbGdlbmRlcyBGb3JtYXQgaGFiZW4gZGFtaXQgT2JqZWt0ZSBnZWZ1bmRlbgorICAgIHdlcmRlbi4KKworICAgIDxnZWdlbnN0YW5kPiBbYXVzIGNvbnRhaW5lcl0gW2luIG1pcnxpbSByYXVtXQorCisgICAgPGdlZ2Vuc3RhbmQ+IGthbm4gaGllcmJlaSBzb3dvaGwgZWluZSBPYmpla3QtSUQgYWxzIGF1Y2ggZWluCisgICAgR3J1cHBlbmJlemVpY2huZXIgd2llIHouYi4gImFsbGVzIiBzZWluLgorCitSVWVDS0dBQkVXRVJUOgorCisgICAgRWluIEFycmF5IG1pdCBhbGxlbiBPYmpla3RlbiBkaWUgc2ljaCBhbmdlc3Byb2NoZW4gZnVlaGxlbiwgb2RlciBhYmVyIDAuCisKK1NJRUhFIEFVQ0g6CisKKyAgICBkcm9wX29iaigpLCBnaXZlX29iaigpLCBwaWNrX29iaigpLCBwdXRfb2JqKCksIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2dldF9raWxsaW5nX3BsYXllciBiL2RvYy9sZnVuL2dldF9raWxsaW5nX3BsYXllcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjY4NWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZ2V0X2tpbGxpbmdfcGxheWVyCkBAIC0wLDAgKzEsMzkgQEAKK2dldF9raWxsaW5nX3BsYXllcigpCisKK0ZVTktUSU9OOgorICAgICBwcm90ZWN0ZWQgb2JqZWN0IGdldF9raWxsaW5nX3BsYXllcigpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvbGlmZS5jCisKK0FSR1VNRU5URToKKyAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICBMaWVmZXJ0IGltIFRvZCAobmFjaCBkZW0gdG9ldGVuZGVuIGRvX2RhbWFnZSgpKSBkYXMgU3BpZWxlcm9iamVrdCwgd2FzCisgICAgIGRlbiBUb2Qgd29obCB6dSB2ZXJhbnR3b3J0ZW4gaGF0LCBmYWxscyBlcyBlcm1pdHRlbHQgd2VyZGVuIGthbm4uIEVzCisgICAgIHdlcmRlbiByZWdpc3RyaWVydGUgSGVsZmVyLU5QQyB1bmQgZWluaWdlIHNjaGFkZW52ZXJ1cnNhY2hlbmRlIE9iamVrdGUKKyAgICAgYmVydWVja3NpY2h0aWd0LiBIaWVyYmVpIHdpcmQgUXVlcnlVc2VyKCkgaW4gZGVuIE9iamVrdGVuIGFiZ2VmcmFndC4KKworICAgICBFcyBiZW5vZXRpZ3QgZWluIGd1ZWx0aWdlcyBQX0tJTExFUiwgZC5oLiBmYWxscyBkYXMgTGViZXdlc2VuIHZlcmdpZnRldAorICAgICB3dXJkZSBvZGVyIGRhcyB0b2V0ZW5kZSBPYmpla3QgYXVzIHNvbnN0aWdlbiBHcnVlbmRlbiBuaWNodCBpbiBQX0tJTExFUgorICAgICBzdGVodCwgZnVua3Rpb25pZXJ0IGVzIG5pY2h0LgorICAgICBBdWNoIGdpYnQgZXMgYmVzdGltbXQgT2JqZWt0ZSwgZGllIGZ1ZXIgU3BpZWxlciB0b2V0ZW4ga29lbm5lbiwgZGllIGRpZQorICAgICBkaWVzZSBGdW5rdGlvbiBuaWNodCBrZW5udC4KKyAgICAgKERpZXMgZ2lsdCBiZWlkZXMgZWJlbnNvIGZ1ZXIgL3Avc2VydmljZS9tdXBmZWwvZ2V0a2lsbC5jLCBpc3QgYWxzbyBrZWluCisgICAgICBHcnVuZCwgamVuZXMgc3RhdHQgZGllc2VyIEZ1bmt0aW9uIHp1IG51dHplbi4pCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERhcyBPYmpla3QgZGVzIFNwaWVsZXJzLCBmYWxscyBlcyBlcm1pdHRlbHQgd2VyZGVuIGtvbm50ZSwgc29uc3QgMC4KKworQkVNRVJLVU5HRU46CisgICAgRGVyIE5hbWUgZGVzIFNwaWVsZXIgaXN0IG1pdHRlbCBOYW1lKCkgZXJtaXR0ZWxiYXIuIFdpbGwgbWFuIGRpZSBJbmZvLCAKKyAgICB3b21pdCBlaW4gU3BpZWxlciBkZW4gS2lsbCBnZ2YuIGdlbWFjaHQgaGF0LCBrYW5uIG1hbiBQX0tJTExFUgorICAgIGF1c3dlcnRlbi9udXR6ZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgIFF1ZXJ5VXNlcgorICAgICBQX0tJTExFUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMTEuMTEuMjAxMywgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9naWxkZS9BZGRTa2lsbCBiL2RvYy9sZnVuL2dpbGRlL0FkZFNraWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZGI1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9naWxkZS9BZGRTa2lsbApAQCAtMCwwICsxLDMzIEBACitBZGRTa2lsbCgpCitGVU5LVElPTjoKKyAgICB2YXJhcmdzIGludCBBZGRTa2lsbChzdHJpbmcgc25hbWUsIG1hcHBpbmcgc2tpKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9naWxkZW5fb2IuYworCitBUkdVTUVOVEU6CisgICAgc3RyaW5nIHNuYW1lICAgICAgIE5hbWUgZGVzIFNraWxscworICAgIG1hcHBpbmcgc2tpICAgICAgICBTa2lsbC1NYXBwaW5nCisKK0JFU0NIUkVJQlVORzoKKyAgICBGdWVndCBkZW4gU2tpbGwgenVyIExpc3RlIGRlciBpbiBkaWVzZXIgR2lsZGUgbGVybmJhcmVuIFNraWxscworICAgIGhpbnp1LiBEYXMgTWFwcGluZyBlbnRoYWVsdCBJbmZvcm1hdGlvbmVuLCBkaWUgZGVyIEdpbGRlbnJhdW0KKyAgICBiencuIGRhcyBHaWxkZW5vYmpla3QgenVtIFNraWxsIGhlcmF1c2dlYmVuIHVuZCBkaWUgZGFzIExlcm5lbgorICAgIGRlcyBTa2lsbHMgYmVlaW5mbHVzc2VuLgorCitSVUVDS0dBQldFUlQ6CisgICAgMSBmdWVyIEVyZm9sZworCitCRUlTUElFTDoKKyAgICBBZGRTa2lsbCggRklHSFQoV1RfQ0xVQiksIChbIE9GRlNFVChTSV9TS0lMTExFQVJOKSA6IDEgXSkgKTsKKworU0lFSEUgQVVDSDoKKyAgICBHT2JqIExlcm5lbjogICAgTGVhcm5Ta2lsbCwgTGVhcm5TcGVsbCwgSW5pdGlhbFNraWxsQWJpbGl0eQorICAgICogQW56ZWlnZW46ICAgICBTa2lsbExpc3RlCisgICAgKiBWZXJ3YWx0ZW46ICAgIEFkZFNwZWxsIChnaWxkZSksIFF1ZXJ5U3BlbGwsIFF1ZXJ5U2tpbGwKKyAgICAqIE51dHplbjogICAgICAgVXNlU3BlbGwgKGdpbGRlKQorICAgICogUHJvcGVydGllczogICBQX0dVSUxEX1NLSUxMUywgUF9HTE9CQUxfU0tJTExQUk9QUworICAgIEdpbGRlbmZrdC46ICAgICBHdWlsZFJhdGluZworICAgICogRWluL0F1c3RyaXR0OiBiZWl0cmV0ZW4sIGJlaV9vZGVyX2F1c190cmV0ZW4sIGF1c3RyZXRlbgorCiszLiBPa3QgMjAxMSBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2dpbGRlL0FkZFNwZWxsIGIvZG9jL2xmdW4vZ2lsZGUvQWRkU3BlbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjYTkzNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2dpbGRlL0FkZFNwZWxsCkBAIC0wLDAgKzEsNDcgQEAKK0FkZFNwZWxsKCkKK0ZVTktUSU9OOgorICAgIHZhcmFyZ3MgaW50IEFkZFNwZWxsKHN0cmluZyB2ZXJiLCBtYXBwaW5nIHNraSkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvZ2lsZGVuX29iLmMKKworQVJHVU1FTlRFOgorICAgIHN0cmluZyB2ZXJiICAgICAgICBOYW1lIGRlcyBTcGVsbHMKKyAgICBtYXBwaW5nIHNraSAgICAgICAgU2tpbGwtTWFwcGluZworCitCRVNDSFJFSUJVTkc6CisgICAgRnVlZ3QgZGVuIFNwZWxsIHp1ciBMaXN0ZSBkZXIgaW4gZGllc2VyIEdpbGRlIGxlcm5iYXJlbiBTcGVsbHMKKyAgICBoaW56dS4gRGFzIE1hcHBpbmcgZW50aGFlbHQgSW5mb3JtYXRpb25lbiwgZGllIGRlciBHaWxkZW5yYXVtCisgICAgYnp3LiBkYXMgR2lsZGVub2JqZWt0IHp1bSBTcGVsbCBoZXJhdXNnZWJlbiB1bmQgZGllIGRhcyBMZXJuZW4KKyAgICBkZXMgU3BlbGxzIGJlZWluZmx1c3Nlbi4KKworUlVFQ0tHQUJXRVJUOgorICAgIDEgZnVlciBFcmZvbGcKKworQkVNRVJLVU5HRU46CisgICAgU2llaGUgZGFzIFZlcmhhbHRlbiB2b24gUXVlcnlTcGVsbCAoZ2lsZGUpIHp1bSBadXNhbW1lbmZ1ZWdlbgorICAgIGRlciBBZGRTcGVsbC1JbmZvcm1hdGlvbmVuIGF1cyBHaWxkZSB1bmQgU3BlbGxib29rLiBSZWxldmFudAorICAgIHpCIGZ1ZXIgTGVybnJlc3RyaWt0aW9uZW4uCisKK0JFSVNQSUVMOgorICAgIEFkZFNwZWxsKCJlbnRmbHVjaGUiLAorICAgICAgKFtTSV9TS0lMTFJFU1RSX0xFQVJOIDoKKyAgICAgICAgKFtQX0dVSUxEX0xFVkVMOiBMVkxfV0FOREVSLAorICAgICAgICAgIFNSX0ZVTjogICAgICAgICMnZ2xhdWJlbnNUZXN0XSksCisgICAgICAgIFNJX0RJRkZJQ1VMVFk6IDEwMCwKKyAgICAgICAgU0lfU0tJTExJTkZPOiAgIldhbmRlcnByZWRpZ2VyIGFiIFN0dWZlIDciLAorICAgICAgICBTSV9TS0lMTElORk9fTE9ORzogYnJlYWtfc3RyaW5nKAorICAgICAgICAgICJVbSBqZW1hbmRlbiB2b24gZWluZW0gbGFlc3RpZ2VuIFNwcmFjaGZsdWNoIHp1IGJlZnJlaWVuLCAiCisgICAgICAgICAgInNvbGx0ZSBtYW4gZGllc2UgQW5ydWZ1bmcgYmVudXR6ZW4gWy4uLl0iLCA3OCksCisgICAgICAgIFNJX0dPRDogICAgICAgIExFTUJPTERdKSk7CisKK1NJRUhFIEFVQ0g6CisgICAgR09iaiBMZXJuZW46ICAgIExlYXJuU2tpbGwsIExlYXJuU3BlbGwsIEluaXRpYWxTa2lsbEFiaWxpdHkKKyAgICAqIEFuemVpZ2VuOiAgICAgU2tpbGxMaXN0ZQorICAgICogVmVyd2FsdGVuOiAgICBBZGRTa2lsbCwgUXVlcnlTcGVsbCwgUXVlcnlTa2lsbCwgUXVlcnlTa2lsbAorICAgICogTnV0emVuOiAgICAgICBVc2VTcGVsbCAoZ2lsZGUpCisgICAgKiBQcm9wZXJ0aWVzOiAgIFBfR1VJTERfU0tJTExTLCBQX0dMT0JBTF9TS0lMTFBST1BTCisgICAgR2lsZGVuZmt0LjogICAgIEd1aWxkUmF0aW5nCisgICAgKiBFaW4vQXVzdHJpdHQ6IGJlaXRyZXRlbiwgYmVpX29kZXJfYXVzX3RyZXRlbiwgYXVzdHJldGVuCisKKzMuIE9rdCAyMDExIEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9naWxkZS9HdWlsZFJhdGluZyBiL2RvYy9sZnVuL2dpbGRlL0d1aWxkUmF0aW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZmI2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9naWxkZS9HdWlsZFJhdGluZwpAQCAtMCwwICsxLDI3IEBACitHdWlsZFJhdGluZygpCitGVU5LVElPTjoKKyAgICBpbnQgR3VpbGRSYXRpbmcob2JqZWN0IHBsKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9naWxkZW5fb2IuYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IHBsICAgICAgICAgIFNwaWVsZXIsIGRlciBnZXJhdGV0IHdlcmRlbiBzb2xsCisKK0JFU0NIUkVJQlVORzoKKyAgICBHaWJ0IGRhcyBHdWlsZC1SYXRpbmcgZGVzIFNwaWVsZXJzIGltIEJlcmVpY2ggMC1NQVhfQUJJTElUWSB6dXJ1ZWNrCisgICAgdW5kIHNjaHJlaWJ0IHNpZSBpbiBQX0dVSUxEX1JBVElORy4gV2ljaHRpZyBmdWVyIExldmVsYmVzdGltbXVuZyEKKyAgICAKKyAgICBOb3JtYWxlcndlaXNlIGlzdCBkYXMgZGVyIE1pdHRlbHdlcnQgZGVyIFNraWxsLUFiaWxpdGllcyBhbGxlciBTa2lsbHMKKyAgICB1bmQgU3BlbGxzLCBkYXMgVmVyaGFsdGVuIGthbm4gYWJlciB1ZWJlcnNjaHJpZWJlbiB3ZXJkZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgR09iaiBMZXJuZW46ICAgIExlYXJuU2tpbGwsIExlYXJuU3BlbGwsIEluaXRpYWxTa2lsbEFiaWxpdHkKKyAgICAqIEFuemVpZ2VuOiAgICAgU2tpbGxMaXN0ZQorICAgICogVmVyd2FsdGVuOiAgICBBZGRTcGVsbCAoZ2lsZGUpLCBBZGRTa2lsbCwgUXVlcnlTcGVsbCwgUXVlcnlTa2lsbAorICAgICogTnV0emVuOiAgICAgICBVc2VTcGVsbCAoZ2lsZGUpCisgICAgKiBQcm9wZXJ0aWVzOiAgIFBfR1VJTERfU0tJTExTLCBQX0dMT0JBTF9TS0lMTFBST1BTLCBQX0dVSUxEX1JBVElORworICAgIEdpbGRlbmZrdC46CisgICAgKiBFaW4vQXVzdHJpdHQ6IGJlaXRyZXRlbiwgYmVpX29kZXJfYXVzX3RyZXRlbiwgYXVzdHJldGVuCisKKzEwLiBPa3QgMjAxMSBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2dpbGRlL0luaXRpYWxTa2lsbEFiaWxpdHkgYi9kb2MvbGZ1bi9naWxkZS9Jbml0aWFsU2tpbGxBYmlsaXR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTI2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9naWxkZS9Jbml0aWFsU2tpbGxBYmlsaXR5CkBAIC0wLDAgKzEsMzEgQEAKK0luaXRpYWxTa2lsbEFiaWxpdHkoKQorRlVOS1RJT046CisgICAgc3RhdGljIGludCBJbml0aWFsU2tpbGxBYmlsaXR5KG1hcHBpbmcgc2tpLCBvYmplY3QgcGwpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2dpbGRlbl9vYi5jCisKK0FSR1VNRU5URToKKyAgICBtYXBwaW5nIHNraSAgICAgRGVyIHp1IGxlcm5lbmRlIFNraWxsCisgICAgb2JqZWN0ICBwbCAgICAgIFNwaWVsZXIKKworQkVTQ0hSRUlCVU5HOgorICAgIEdpYnQgZGVuIGluaXRpYWxlbiBBYmlsaXR5LVdlcnQgZnVlciBlaW5lbiBuZXUgenUgbGVybmVuZGVuIFNraWxsIChTcGVsbCkKKyAgICB6dXJ1ZWNrLiBEaWUgU3RhbmRhcmRmb3JtZWwgYmVudXR6dCBudXIgSW50ZWxsaWdlbnogdW5kIFNJX1NLSUxMTEVBUk4gdW5kCisgICAga2FubiBpbiBkZXIgR2lsZGUgdWViZXJzY2hyaWViZW4gd2VyZGVuLgorCitCRU1FUktVTkdFTjoKKyAgICBEZXIgenVydWVja2dlZ2ViZW5lIFdlcnQgd2lyZCBub2NoIGluIGRhcyBTcGllbGVyLVNraWxsc3lzdGVtIGVpbmdlZ2ViZW4KKyAgICB1bmQgZGFoZXIga2FubiBkZXIgcmVhbCBnZWxlcm50ZSBXZXJ0IGFid2VpY2hlbgorCitTSUVIRSBBVUNIOgorICAgIFNraWxsczogICAgICAgICBMaW1pdEFiaWxpdHksIE1vZGlmeVNraWxsCisgICAgR09iaiBMZXJuZW46ICAgIExlYXJuU2tpbGwsIExlYXJuU3BlbGwKKyAgICAqIEFuemVpZ2VuOiAgICAgU2tpbGxMaXN0ZQorICAgICogVmVyd2FsdGVuOiAgICBBZGRTcGVsbCAoZ2lsZGUpLCBBZGRTa2lsbCwgUXVlcnlTcGVsbCwgUXVlcnlTa2lsbAorICAgICogTnV0emVuOiAgICAgICBVc2VTcGVsbCAoZ2lsZGUpCisgICAgKiBQcm9wZXJ0aWVzOiAgIFBfR1VJTERfU0tJTExTLCBQX0dMT0JBTF9TS0lMTFBST1BTCisgICAgR2lsZGVuZmt0LjogICAgIEd1aWxkUmF0aW5nCisgICAgKiBFaW4vQXVzdHJpdHQ6IGJlaXRyZXRlbiwgYmVpX29kZXJfYXVzX3RyZXRlbiwgYXVzdHJldGVuCisKKzMuIE9rdCAyMDExIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZ2lsZGUvTGVhcm5Ta2lsbCBiL2RvYy9sZnVuL2dpbGRlL0xlYXJuU2tpbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4MTk1OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2dpbGRlL0xlYXJuU2tpbGwKQEAgLTAsMCArMSwzNSBAQAorTGVhcm5Ta2lsbCgpCitGVU5LVElPTjoKKyAgICBpbnQgTGVhcm5Ta2lsbChzdHJpbmcgc2tpbGwpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2dpbGRlbl9vYi5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgc2tpbGwgICAgIERlciB6dSBsZXJuZW5kZSBTa2lsbAorCitCRVNDSFJFSUJVTkc6CisgICAgRGllc2UgRnVua3Rpb24gdWViZXJwcnVlZnQgZGVuIFNwaWVsZXIgYXVmIEdpbGRlbnp1Z2Vob2VyaWdrZWl0CisgICAgdW5kIHJ1ZnQsIGZhbGxzIGtlaW4gJ3NraWxsJyBhbmdlZ2ViZW4gaXN0IGRpZSBTa2lsbExpc3RlKCkKKyAgICBmdWVyIFNraWxscyBhdWYuCisKKyAgICBGYWxscyBlaW4gQXJndW1lbnQgYW5nZWdlYmVuIHdpcmQsIHdpcmQgYmVpIGRlbSBTcGllbGVyIGRpZXNlciBTa2lsbAorICAgIGluaXRpYWxpc2llcnQsIHNvZmVybiBlciBkaWUgbm90d2VuZGlnZW4gQW5mb3JkZXJ1bmdlbiBlcmZ1ZWxsdCBoYXQuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgMCBiZWkgRmVobGVyLCAxIGJlaSBFcmZvbGcuCisKK0JFTUVSS1VOR0VOOgorICAgIEZ1ZXIgZGllIExlYmV3ZXNlbi1Ta2lsbHMgZ2lidCBlcyBlaW5lIGdsZWljaG5hbWlnZSBGdW5rdGlvbi4KKyAgICBTaWVoZSBkYWZ1ZXIgTGVhcm5Ta2lsbC4KKworU0lFSEUgQVVDSDoKKyAgICBHT2JqIExlcm5lbjogICAgTGVhcm5TcGVsbCwgSW5pdGlhbFNraWxsQWJpbGl0eQorICAgICogQW56ZWlnZW46ICAgICBTa2lsbExpc3RlCisgICAgKiBWZXJ3YWx0ZW46ICAgIEFkZFNwZWxsIChnaWxkZSksIEFkZFNraWxsLCBRdWVyeVNwZWxsLCBRdWVyeVNraWxsCisgICAgKiBOdXR6ZW46ICAgICAgIFVzZVNwZWxsIChnaWxkZSkKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9HVUlMRF9TS0lMTFMsIFBfR0xPQkFMX1NLSUxMUFJPUFMKKyAgICBHaWxkZW5ma3QuOiAgICAgR3VpbGRSYXRpbmcKKyAgICAqIEVpbi9BdXN0cml0dDogYmVpdHJldGVuLCBiZWlfb2Rlcl9hdXNfdHJldGVuLCBhdXN0cmV0ZW4KKworMy4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9naWxkZS9MZWFyblNwZWxsIGIvZG9jL2xmdW4vZ2lsZGUvTGVhcm5TcGVsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWM1ODQwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZ2lsZGUvTGVhcm5TcGVsbApAQCAtMCwwICsxLDMyIEBACitMZWFyblNwZWxsKCkKK0ZVTktUSU9OOgorICAgIHZhcmFyZ3MgaW50IExlYXJuU3BlbGwoc3RyaW5nIHNwZWxsLCBvYmplY3QgcGwpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2dpbGRlbl9vYi5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgc3BlbGwgICAgIERlciB6dSBsZXJuZW5kZSBTcGVsbAorICAgIG9iamVjdCBwbCAgICAgICAgbGVybmVuZGVyIFNwaWVsZXIsIHdlbm4gMCwgd2lyZCB0aGlzX3BsYXllcigpIGdlbm9tbWVuCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiB1ZWJlcnBydWVmdCBkZW4gU3BpZWxlciBhdWYgR2lsZGVuenVnZWhvZXJpZ2tlaXQKKyAgICB1bmQgcnVmdCwgZmFsbHMga2VpbiAnc3BlbGwnIGFuZ2VnZWJlbiBpc3QgZGllIFNraWxsTGlzdGUoKQorICAgIGZ1ZXIgU3BlbGxzIGF1Zi4KKworICAgIEZhbGxzIGVpbiBBcmd1bWVudCBhbmdlZ2ViZW4gd2lyZCwgd2lyZCBiZWkgZGVtIFNwaWVsZXIgZGllc2VyIFNwZWxsCisgICAgaW5pdGlhbGlzaWVydCwgc29mZXJuIGVyIGRpZSBub3R3ZW5kaWdlbiBBbmZvcmRlcnVuZ2VuIGVyZnVlbGx0IGhhdC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAwIGJlaSBGZWhsZXIsIDEgYmVpIEVyZm9sZy4KKworU0lFSEUgQVVDSDoKKyAgICBHT2JqIExlcm5lbjogICAgTGVhcm5Ta2lsbCwgSW5pdGlhbFNraWxsQWJpbGl0eQorICAgICogQW56ZWlnZW46ICAgICBTa2lsbExpc3RlCisgICAgKiBWZXJ3YWx0ZW46ICAgIEFkZFNwZWxsIChnaWxkZSksIEFkZFNraWxsLCBRdWVyeVNwZWxsLCBRdWVyeVNraWxsCisgICAgKiBOdXR6ZW46ICAgICAgIFVzZVNwZWxsIChnaWxkZSkKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9HVUlMRF9TS0lMTFMsIFBfR0xPQkFMX1NLSUxMUFJPUFMKKyAgICBHaWxkZW5ma3QuOiAgICAgR3VpbGRSYXRpbmcKKyAgICAqIEVpbi9BdXN0cml0dDogYmVpdHJldGVuLCBiZWlfb2Rlcl9hdXNfdHJldGVuLCBhdXN0cmV0ZW4KKworMy4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9naWxkZS9RdWVyeVNraWxsIGIvZG9jL2xmdW4vZ2lsZGUvUXVlcnlTa2lsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWRjZTEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZ2lsZGUvUXVlcnlTa2lsbApAQCAtMCwwICsxLDMzIEBACitRdWVyeVNraWxsKCkKK0ZVTktUSU9OOgorICAgIG1hcHBpbmcgUXVlcnlTa2lsbChzdHJpbmcgc2tpbGwpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2dpbGRlbl9vYi5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgc2tpbGwgICAgICAgTmFtZSBkZXMgU2tpbGxzCisKK0JFU0NIUkVJQlVORzoKKyAgICBMaWVmZXJ0IGZ1ZXIgZGllc2VuIFNraWxsIGRpZSBHaWxkZW5pbmZvcm1hdGlvbmVuIGluIGVpbmVtCisgICAgTWFwcGluZyB6dXJ1ZWNrLgorCitCRUlTUElFTDoKKyAgICAvLyAvZ2lsZGVuL2tsZXJ1cy0+UXVlcnlTa2lsbChGSUdIVChXVF9DTFVCKSkgZ2lidCB6QiB6dXJ1ZWNrOgorICAgIChbU0lfRlVOOiAgICAgICAgICAgICAgICAiRmlnaHRfY2x1YiIsCisgICAgICBPRkZTRVQoU0lfU0tJTExMRUFSTik6IDEKKyAgICAgIFNJX1NLSUxMUkVTVFJfVVNFOiAgICAgKFtTUl9GVU46IydnaWxkZW4va2xlcnVzLT5zcGVsbFRlc3QoKV0pLAorICAgICAgT0ZGU0VUKFNJX1NLSUxMTEVBUk4pOiAjJ2dpbGRlbi9rbGVydXMtPmxlYXJuT2Zmc2V0LAorICAgICAgT0ZGU0VUKFNJX1NQRUxMQ09TVCk6ICAjJ2dpbGRlbi9rbGVydXMtPmNvc3RPZmZzZXQsCisgICAgICBGQUNUT1IoU0lfU1BFTExDT1NUKTogICMnZ2lsZGVuL2tsZXJ1cy0+Y29zdEZhY3Rvcl0pCisKK1NJRUhFIEFVQ0g6CisgICAgR09iaiBMZXJuZW46ICAgIExlYXJuU2tpbGwsIExlYXJuU3BlbGwsIEluaXRpYWxTa2lsbEFiaWxpdHkKKyAgICAqIEFuemVpZ2VuOiAgICAgU2tpbGxMaXN0ZQorICAgICogVmVyd2FsdGVuOiAgICBBZGRTa2lsbCwgQWRkU3BlbGwsIFF1ZXJ5U3BlbGwKKyAgICAqIE51dHplbjogICAgICAgVXNlU3BlbGwgKGdpbGRlKQorICAgICogUHJvcGVydGllczogICBQX0dVSUxEX1NLSUxMUywgUF9HTE9CQUxfU0tJTExQUk9QUworICAgIEdpbGRlbmZrdC46ICAgICBHdWlsZFJhdGluZworICAgICogRWluL0F1c3RyaXR0OiBiZWl0cmV0ZW4sIGJlaV9vZGVyX2F1c190cmV0ZW4sIGF1c3RyZXRlbgorCiszLiBPa3QgMjAxMSBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2dpbGRlL1F1ZXJ5U3BlbGwgYi9kb2MvbGZ1bi9naWxkZS9RdWVyeVNwZWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZjE5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9naWxkZS9RdWVyeVNwZWxsCkBAIC0wLDAgKzEsNTQgQEAKK1F1ZXJ5U3BlbGwoKQorRlVOS1RJT046CisgICAgbWFwcGluZyBRdWVyeVNwZWxsKHN0cmluZyBzcGVsbCkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvZ2lsZGVuX29iLmMKKworQVJHVU1FTlRFOgorICAgIHN0cmluZyBzcGVsbCAgICAgICBOYW1lIGRlcyBTcGVsbHMKKworQkVTQ0hSRUlCVU5HOgorICAgIExpZWZlcnQgZnVlciBkaWVzZW4gU3BlbGwgZGllIEdpbGRlbi0gdW5kIFNwZWxsYm9va2luZm9ybWF0aW9uZW4KKyAgICB6dXNhbW1lbmdlZmFzc3QgaW4gZWluIE1hcHBpbmcgenVydWVjay4KKyAgICBEaWUgR2lsZGVuaW5mb3JtYXRpb25lbiBoYWJlbiBkYWJlaSBWb3JyYW5nIChkLmguIGVpbmUgTGVybnJlc3RyaWt0aW9uCisgICAgaW0gU3BlbGxib29rIHdpcmQgYmVudXR6dCwgYmVpIHVudGVyc2NoaWVkbGljaGVuIFdlcnRlbiBmdWVyIGRhcyBnbGVpY2hlCisgICAgQXR0cmlidXQgZ2VodCBkZXIgV2VydCBpbiBkZXIgR2lsZGUgdm9yKS4KKworQkVJU1BJRUw6CisgICAgLy8gL2dpbGRlbi9rbGVydXMtPlF1ZXJ5U3BlbGwoImVudGZsdWNoZSIpIGdpYnQgekIgenVydWVjazoKKyAgICAoW1NJX1NQRUxMRkFUSUdVRTogMiwKKyAgICAgIFNJX1NQX0xPV19NU0c6ICAgIkRlaW5lIEtvbnplbnRyYXRpb24gcmVpY2h0IG5pY2h0IGF1cywgZGFzIEludGVyZXNzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICJkZXIgR29ldHRlciB6dSAid2Vja2VuLlxuIiwKKyAgICAgIFNJX1RJTUVfTVNHOiAgICAgIlNvIHNjaG5lbGwga29lbm5lbiBzaWNoIGRpZSBHb2V0dGVyIG5pY2h0IHdpZWRlciB1bSAiCisgICAgICAgICAgICAgICAgICAgICAgICJEaWNoIGt1ZW1tZXJuIVxuIiwKKyAgICAgIFNJX1NLSUxMTEVBUk46ICAgNSwKKyAgICAgIE9GRlNFVChTSV9TS0lMTExFQVJOKToxNQorICAgICAgU0lfU0tJTExSRVNUUl9MRUFSTjoKKyAgICAgIChbUF9MRVZFTDogICAgICAgNywKKyAgICAgICAgUF9HVUlMRF9MRVZFTDogTFZMX1dBTkRFUiwKKyAgICAgICAgU1JfRlVOOiAgICAgICAgIydnaWxkZW4va2xlcnVzLT5nbGF1YmVuc1Rlc3RdKSwKKyAgICAgIFNJX0RJRkZJQ1VMVFk6ICAgMTAwLAorICAgICAgU0lfU0tJTExJTkZPOiAgICAiV2FuZGVycHJlZGlnZXIgYWIgU3R1ZmUgNyIsCisgICAgICBTSV9TS0lMTElORk9fTE9ORzoKKyAgICAgICAgIlVtIGplbWFuZGVuIHZvbiBlaW5lbSBsYWVzdGlnZW4gU3ByYWNoZmx1Y2ggenUgYmVmcmVpZW4sICIKKyAgICAgICAgInNvbGx0ZSBtYW4gZGllc2UgQW5ydWZ1bmcgYmVudXR6ZW4gWy4uLl0iLAorICAgICAgU1BfTkFNRTogICAgICAgICAiZW50Zmx1Y2hlIiwKKyAgICAgIFNJX1NLSUxMUkVTVFJfVVNFOiAoWyBTUl9GUkVFX0hBTkRTIDogMCBdKSwKKyAgICAgIFNJX01BR0lDX1RZUEU6ICAgKHtNVF9TQUtSQUx9KQorICAgICAgU0lfR09EOiAgICAgICAgICBMRU1CT0xELAorICAgICAgU0lfU0tJTExSRVNUUl9VU0U6ICAgICAoW1NSX0ZVTjojJ2dpbGRlbi9rbGVydXMtPnNwZWxsVGVzdCgpXSksCisgICAgICBPRkZTRVQoU0lfU0tJTExMRUFSTik6ICMnZ2lsZGVuL2tsZXJ1cy0+bGVhcm5PZmZzZXQsCisgICAgICBPRkZTRVQoU0lfU1BFTExDT1NUKTogICMnZ2lsZGVuL2tsZXJ1cy0+Y29zdE9mZnNldCwKKyAgICAgIEZBQ1RPUihTSV9TUEVMTENPU1QpOiAgIydnaWxkZW4va2xlcnVzLT5jb3N0RmFjdG9yXSkKKworU0lFSEUgQVVDSDoKKyAgICBHT2JqIExlcm5lbjogICAgTGVhcm5Ta2lsbCwgTGVhcm5TcGVsbCwgSW5pdGlhbFNraWxsQWJpbGl0eQorICAgICogQW56ZWlnZW46ICAgICBTa2lsbExpc3RlCisgICAgKiBWZXJ3YWx0ZW46ICAgIEFkZFNraWxsLCBBZGRTcGVsbCwgUXVlcnlTa2lsbAorICAgICogTnV0emVuOiAgICAgICBVc2VTcGVsbCAoZ2lsZGUpCisgICAgKiBQcm9wZXJ0aWVzOiAgIFBfR1VJTERfU0tJTExTLCBQX0dMT0JBTF9TS0lMTFBST1BTCisgICAgR2lsZGVuZmt0LjogICAgIEd1aWxkUmF0aW5nCisgICAgKiBFaW4vQXVzdHJpdHQ6IGJlaXRyZXRlbiwgYmVpX29kZXJfYXVzX3RyZXRlbiwgYXVzdHJldGVuCisKKzMuIE9rdCAyMDExIEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9naWxkZS9Ta2lsbExpc3RlIGIvZG9jL2xmdW4vZ2lsZGUvU2tpbGxMaXN0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2MyYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZ2lsZGUvU2tpbGxMaXN0ZQpAQCAtMCwwICsxLDI3IEBACitTa2lsbExpc3RlKCkKK0ZVTktUSU9OOgorICAgIGludCBTa2lsbExpc3RlKGludCB3aGF0KQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9naWxkZW5fb2IuYworCitBUkdVTUVOVEU6CisgICAgaW50IHdoYXQgICAgICAgIFJ1ZWNrZ2FiZW9wdGlvbjoKKworQkVTQ0hSRUlCVU5HOgorICAgIEdpYnQgZWluZSBUZXh0IG1pdCBMaXN0ZSBtaXQgbGVybmJhcmVuIFNraWxscy9TcGVsbHMgenVydWVjazoKKyAgICAKKyAgICBGdWVyICd3aGF0JzogMCAtIGFsbGU7IDEgLSBTcGVsbHM7IDIgLSBTa2lsbHMuCisgICAgCisgICAgWmVpZ3QgRWludHJhZWdlIGF1cyBTSV9TS0lMTElORk8uCisKK1NJRUhFIEFVQ0g6CisgICAgR09iaiBMZXJuZW46ICAgIExlYXJuU2tpbGwsIExlYXJuU3BlbGwsIEluaXRpYWxTa2lsbEFiaWxpdHkKKyAgICAqIFZlcndhbHRlbjogICAgQWRkU3BlbGwgKGdpbGRlKSwgQWRkU2tpbGwsIFF1ZXJ5U3BlbGwsIFF1ZXJ5U2tpbGwKKyAgICAqIE51dHplbjogICAgICAgVXNlU3BlbGwgKGdpbGRlKQorICAgICogUHJvcGVydGllczogICBQX0dVSUxEX1NLSUxMUywgUF9HTE9CQUxfU0tJTExQUk9QUworICAgIEdpbGRlbmZrdC46ICAgICBHdWlsZFJhdGluZworICAgICogRWluL0F1c3RyaXR0OiBiZWl0cmV0ZW4sIGJlaV9vZGVyX2F1c190cmV0ZW4sIGF1c3RyZXRlbgorICAgIFNraWxsczogICAgICAgICBza2lsbF9pbmZvX2xpc3RlCisKKzMuIE9rdCAyMDExIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZ2lsZGUvVXNlU3BlbGwgYi9kb2MvbGZ1bi9naWxkZS9Vc2VTcGVsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjgyM2NjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZ2lsZGUvVXNlU3BlbGwKQEAgLTAsMCArMSwzMiBAQAorVXNlU3BlbGwoKQorRlVOS1RJT046CisgICAgdmFyYXJncyBpbnQgVXNlU3BlbGwob2JqZWN0IGNhc3Rlciwgc3RyaW5nIHNwZWxsLCBtYXBwaW5nIHNpbmZvKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9naWxkZW5fb2IuYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IGNhc3RlciAgICAgIFNwaWVsZXIsIGRlciBTcGVsbCBudXR6dAorICAgIHN0cmluZyBzcGVsbCAgICAgICBTcGVsbC1OYW1lCisgICAgbWFwcGluZyBzaW5mbyAgICAgIFNwZWxsLUluZm9ybWF0aW9uZW4KKworQkVTQ0hSRUlCVU5HOgorICAgIFBydWVmdCwgb2IgZGVyIFNwZWxsIGluIGRlciBHaWxkZSBkZWZpbmllcnQgaXN0IHVuZCBydWZ0IGlobiBkYW5uCisgICAgZ2dmIGluIGF1cyBkZW0gU3BlbGwtTWFwcGluZyBnZWxlc2VuZW4gR2lsZGVuLVNJX1NQRUxMQk9PSyBhdWYuCisKKyAgICBXaXJkIHZvbiBsaXZpbmcvc2tpbGxzOjpVc2VTcGVsbCBnZXJ1ZmVuLCB3ZW5uIGRpZXNlcyBkaWUgU0lfQ0xPU1VSRSwKKyAgICBhbHNvIGRpZSBGdW5rdGlvbiBlaW5lcyBTcGVsbHMgc3VjaHQsIGZ1ZXIgZGVuIGtlaW4gU0lfU1BFTExCT09LCisgICAgZXhwbGl6aXQgYW5nZWdlYmVuIHd1cmRlLgorCitSVUVDS0dBQldFUlQ6CisgICAgUnVlY2tnYWJld2VydCBkZXMgU3BlbGxzIGF1cyBkZW0gU3BlbGxib29rIG9kZXIgMC4KKworU0lFSEUgQVVDSDoKKyAgICBHT2JqIExlcm5lbjogICAgTGVhcm5Ta2lsbCwgTGVhcm5TcGVsbCwgSW5pdGlhbFNraWxsQWJpbGl0eQorICAgICogQW56ZWlnZW46ICAgICBTa2lsbExpc3RlCisgICAgKiBWZXJ3YWx0ZW46ICAgIEFkZFNwZWxsIChnaWxkZSksIEFkZFNraWxsLCBRdWVyeVNwZWxsLCBRdWVyeVNraWxsCisgICAgKiBQcm9wZXJ0aWVzOiAgIFBfR1VJTERfU0tJTExTLCBQX0dMT0JBTF9TS0lMTFBST1BTCisgICAgR2lsZGVuZmt0LjogICAgIEd1aWxkUmF0aW5nCisgICAgKiBFaW4vQXVzdHJpdHQ6IGJlaXRyZXRlbiwgYmVpX29kZXJfYXVzX3RyZXRlbiwgYXVzdHJldGVuCisKKzMuIE9rdCAyMDExIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZ2lsZGUvYXVzdHJldGVuIGIvZG9jL2xmdW4vZ2lsZGUvYXVzdHJldGVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzBiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9naWxkZS9hdXN0cmV0ZW4KQEAgLTAsMCArMSwzNCBAQAorYXVzdHJldGVuKCkKK0ZVTktUSU9OOgorICAgIHZhcmFyZ3MgaW50IGF1c3RyZXRlbihpbnQgbG9zcykKKworQVJHVU1FTlRFOgorICAgIGludCBsb3NzICAgICAgIFByb3plbnRzYXR6LCB1bSBkZW4gc2ljaCBkaWUgR2lsZGVuc2tpbGxzIHZlcnNjaGxlY2h0ZXJuCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2dpbGRlbl9vYi5jCisKK0JFU0NIUkVJQlVORzoKKyAgICBBdXN0cml0dHNmdW5rdGlvbiBkZXIgR2lsZGUuIFBydWVmdCBkaWUgUmVzdHJpa3Rpb25lbiBkZXIgR2lsZGUgdW5kCisgICAgbGFlc3N0IHRoaXNfcGxheWVyKCkgZ2dmIGF1c3RyZXRlbi4gRGFzIEF1c3RyZXRlbiBhdXMgZGVyIFN0YW5kYXJkLQorICAgIGdpbGRlIGlzdCBkYWJlaSBuaWNodCBtb2VnbGljaC4KKworICAgIERlciBHaWxkZW5tYXN0ZXIgbG9lc3QgZ2dmIGVpbiBFVlRfR1VJTERfQ0hBTkdFIGF1cy4gRGFiZWkgd2VyZGVuCisgICAgRV9PQkpFQ1QsIEVfR1VJTEROQU1FLCBFX0xBU1RfR1VJTEROQU1FIGVudHNwcmVjaGVuZCBnZXNldHp0LgorCisgICAgRGVyIEdpbGRlbm1hc3RlciBzZW5rdCBhdWNoIGRpZSBTa2lsbC9TcGVsbC1GYWVoaWdrZWl0ZW4gdW0gJ2xvc3MnIGJ6dy4KKyAgICBub3JtYWxlcndlaXNlIG1pbmRlc3RlbnMgMjAlLgorCisgICAgRHVyY2ggVWViZXJzY2hyZWliZW4ga29lbm5lbiBoaWVyIHpCIEFic2NoaWVkc21lbGR1bmdlbiBnZXNlbmRldCB3ZXJkZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgR09iaiBMZXJuZW46ICAgIExlYXJuU2tpbGwsIExlYXJuU3BlbGwsIEluaXRpYWxTa2lsbEFiaWxpdHkKKyAgICAqIEFuemVpZ2VuOiAgICAgU2tpbGxMaXN0ZQorICAgICogVmVyd2FsdGVuOiAgICBBZGRTcGVsbCAoZ2lsZGUpLCBBZGRTa2lsbCwgUXVlcnlTcGVsbCwgUXVlcnlTa2lsbAorICAgICogTnV0emVuOiAgICAgICBVc2VTcGVsbCAoZ2lsZGUpCisgICAgKiBQcm9wZXJ0aWVzOiAgIFBfR1VJTERfU0tJTExTLCBQX0dMT0JBTF9TS0lMTFBST1BTCisgICAgR2lsZGVuZmt0LjoKKyAgICAqIEVpbi9BdXN0cml0dDogYmVpdHJldGVuLCBiZWlfb2Rlcl9hdXNfdHJldGVuCisgICAgKiBQcm9wcyBkYWZ1ZXI6IFBfR1VJTERfUkVTVFJJQ1RJT05TCisKKzMuIE9rdCAyMDExIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZ2lsZGUvYmVpX29kZXJfYXVzX3RyZXRlbiBiL2RvYy9sZnVuL2dpbGRlL2JlaV9vZGVyX2F1c190cmV0ZW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZGU3OAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2dpbGRlL2JlaV9vZGVyX2F1c190cmV0ZW4KQEAgLTAsMCArMSwyNSBAQAorYmVpX29kZXJfYXVzX3RyZXRlbigpCitGVU5LVElPTjoKKyAgICBpbnQgYmVpX29kZXJfYXVzX3RyZXRlbihzdHJpbmcgc3RyKQorCitBUkdVTUVOVEU6CisgICAgc3RyaW5nIHN0ciAgICAgICBTcGllbGVycGFyYW1ldGVyCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2dpbGRlbl9vYi5jCisKK0JFU0NIUkVJQlVORzoKKyAgICBBdXMtIG9kZXIgRWludHJpdHRzZnVua3Rpb24sIHJ1ZnQgYmVpdHJldGVuKCkgYnp3LiBhdXN0cmV0ZW4oKSBhdWYuCisgICAgV2lyZCBpbSBTdGQtR2lsZGVucmF1bSBwZXIgQWRkQ21kIHp1ciBWZXJmdWVndW5nIGdlc3RlbGx0LgorCitTSUVIRSBBVUNIOgorICAgIEdPYmogTGVybmVuOiAgICBMZWFyblNraWxsLCBMZWFyblNwZWxsLCBJbml0aWFsU2tpbGxBYmlsaXR5CisgICAgKiBBbnplaWdlbjogICAgIFNraWxsTGlzdGUKKyAgICAqIFZlcndhbHRlbjogICAgQWRkU3BlbGwgKGdpbGRlKSwgQWRkU2tpbGwsIFF1ZXJ5U3BlbGwsIFF1ZXJ5U2tpbGwKKyAgICAqIE51dHplbjogICAgICAgVXNlU3BlbGwgKGdpbGRlKQorICAgICogUHJvcGVydGllczogICBQX0dVSUxEX1NLSUxMUywgUF9HTE9CQUxfU0tJTExQUk9QUworICAgIEdpbGRlbmZrdC46CisgICAgKiBFaW4vQXVzdHJpdHQ6IGJlaXRyZXRlbiwgYXVzdHJldGVuCisgICAgKiBQcm9wcyBkYWZ1ZXI6IFBfR1VJTERfUkVTVFJJQ1RJT05TCisKKzMuIE9rdCAyMDExIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vZ2lsZGUvYmVpdHJldGVuIGIvZG9jL2xmdW4vZ2lsZGUvYmVpdHJldGVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MzhmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9naWxkZS9iZWl0cmV0ZW4KQEAgLTAsMCArMSwyOCBAQAorYmVpdHJldGVuKCkKK0ZVTktUSU9OOgorICAgIGludCBiZWl0cmV0ZW4oKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9naWxkZW5fb2IuYworCitCRVNDSFJFSUJVTkc6CisgICAgQmVpdHJpdHRzZnVua3Rpb24gZGVyIEdpbGRlLiBQcnVlZnQgZGllIEdpbGRlIHNlbGJzdCBpbSBHaWxkZW5tYXN0ZXIsCisgICAgZGFubiBkaWUgUmVzdHJpa3Rpb25lbiBkZXIgR2lsZGUgdW5kIGxhZXNzdCB0aGlzX3BsYXllcigpIGdnZiBlaW50cmV0ZW4uCisKKyAgICBEZXIgR2lsZGVubWFzdGVyIGxvZXN0IGdnZiBlaW4gRVZUX0dVSUxEX0NIQU5HRSBhdXMuIERhYmVpIHdlcmRlbgorICAgIEVfT0JKRUNULCBFX0dVSUxETkFNRSwgRV9MQVNUX0dVSUxETkFNRSBlbnRzcHJlY2hlbmQgZ2VzZXR6dC4KKworICAgIER1cmNoIFVlYmVyc2NocmVpYmVuIGtvZW5uZW4gaGllciB6QiBTdGFuZGFyZC1Ta2lsbHMgdW5kIFNwZWxscyBkZW4KKyAgICBTcGllbGVyIGJlaSBFaW50cml0dCBnZWxlaHJ0IHdlcmRlbi4KKworU0lFSEUgQVVDSDoKKyAgICBHT2JqIExlcm5lbjogICAgTGVhcm5Ta2lsbCwgTGVhcm5TcGVsbCwgSW5pdGlhbFNraWxsQWJpbGl0eQorICAgICogQW56ZWlnZW46ICAgICBTa2lsbExpc3RlCisgICAgKiBWZXJ3YWx0ZW46ICAgIEFkZFNwZWxsIChnaWxkZSksIEFkZFNraWxsLCBRdWVyeVNwZWxsCisgICAgKiBOdXR6ZW46ICAgICAgIFVzZVNwZWxsIChnaWxkZSkKKyAgICAqIFByb3BlcnRpZXM6ICAgUF9HVUlMRF9TS0lMTFMsIFBfR0xPQkFMX1NLSUxMUFJPUFMKKyAgICBHaWxkZW5ma3QuOgorICAgICogRWluL0F1c3RyaXR0OiBiZWlfb2Rlcl9hdXNfdHJldGVuLCBhdXN0cmV0ZW4KKyAgICAqIFByb3BzIGRhZnVlcjogUF9HVUlMRF9SRVNUUklDVElPTlMKKworMy4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9naXZlIGIvZG9jL2xmdW4vZ2l2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWEyNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vZ2l2ZQpAQCAtMCwwICsxLDQzIEBACitnaXZlKCkKKworRlVOS1RJT046CisgICAgcHVibGljIHZhcmFyZ3MgaW50IGdpdmUob2JqZWN0IG8sIG9iamVjdCBkZXN0LCBtaXhlZCBtc2cpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvcHV0X2FuZF9nZXQuYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IG8KKyAgICAgICAgRGFzIE9iamVrdCwgZGFzIHVlYmVyZ2ViZW4gd2VyZGVuIHNvbGwuCisgICAgb2JqZWN0IGRlc3QKKyAgICAgICAgRGVyIFNwaWVsZXIgb2RlciBOUEMsIGRlciBkYXMgT2JqZWt0IGJla29tbWVuIHNvbGwuCisgICAgbWl4ZWQgbXNnCisgICAgICAgIEVpbmUgb3B0aW9uYWxlIE1lbGR1bmcsIGRpZSBhbnN0ZWxsZSB2b24gUF9HSVZFX01TRyBvZGVyIGRlcgorICAgICAgICBTdGFuZGFyZG1lbGR1bmcgdmVyd2VuZGV0IHdpcmQsIG9kZXIgLTEsIHVtIGRpZSBNZWxkdW5nIHp1CisgICAgICAgIHVudGVyZHJ1ZWNrZW4uCisKK0JFU0NIUkVJQlVORzoKKyAgICBEZXIgU3BpZWxlciBvZGVyIE5QQyB1ZWJlcmdpYnQgZGVtIEVtcGZhZW5nZXIgZGFzIE9iamVrdC4gR2lidCBvLT5tb3ZlKCkKKyAgICBrZWluZW4gcG9zaXRpdmVuIFdlcnQgenVydWVjaywgYmVpc3BpZWxzd2Vpc2Ugd2VpbCBkYXMgT2JqZWt0IHZlcmZsdWNodAorICAgIGlzdCBvZGVyIGRlciBFbXBmYWVuZ2VyIGVzIG5pY2h0IG1laHIgdHJhZ2VuIGthbm4sIGJla29tbXQgZXIgZWluZQorICAgIGVudHNwcmVjaGVuZGUgRmVobGVybWVsZHVuZy4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICBXZW5uIGRpZSBVZWJlcmdhYmUgZ2VrbGFwcHQgaGF0LCAxLCBhbnNvbnN0ZW4gMC4KKworQkVNRVJLVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGlzdCBkYW5uIHNpbm52b2xsLCB3ZW5uIG1hbiBkZW4gU3BpZWxlciBlaW4gT2JqZWt0CisgICAgd2VpdGVyZ2ViZW4gbGFzc2VuIHVuZCBzaWNoIG5pY2h0IHNlbGJzdCB1bSBkaWUgRmVobGVyYmVoYW5kbHVuZyBrdWVtbWVybgorICAgIG1vZWNodGUgLSB1bmQgZGEgdW56YWVobGlnZSB2ZXJzY2hpZWRlbmUgRGluZ2Ugc2NoaWVmZ2VoZW4ga29lbm5lbiB1bmQKKyAgICBtYW5jaGUgT2JqZWt0ZSBlaWdlbmUgRmVobGVybWVsZHVuZ2VuIGRlZmluaWVyZW4sIGVpZ2VudGxpY2ggaW1tZXIuCisKKyAgICBEaWUgRnVua3Rpb24gcHJ1ZWZ0IG5pY2h0LCBvYiBkZXIgU3BpZWxlci9OUEMgZGVyIE9iamVrdCB1ZWJlcmhhdXB0IGhhdCwKKyAgICBkYXMgbXVzcyBtYW4gZ2dmLiBzZWxic3QgZXJtaXR0ZWxuLgorCitTSUVIRSBBVUNIOgorICAgIG1vdmUoTCksIFBfR0lWRV9NU0csIGdpdmVfb2JqZWN0cyhMKSwgZ2l2ZV9ub3RpZnkoTCksCisgICAgUF9OT0lOU0VSVF9NU0csIFBfTk9MRUFWRV9NU0csIFBfVE9PX01BTllfTVNHLAorICAgIFBfVE9PX0hFQVZZX01TRywgUF9FTlZfVE9PX0hFQVZZX01TRywgUF9OT0RST1AKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogVGh1IEF1ZyAyOCAyMjoyMToxOSAyMDA4IGJ5IEFteW50aG9yCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9naXZlX25vdGlmeSBiL2RvYy9sZnVuL2dpdmVfbm90aWZ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGQ2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9naXZlX25vdGlmeQpAQCAtMCwwICsxLDU5IEBACitnaXZlX25vdGlmeSgpCitGVU5LVElPTjoKKyAgICAgdm9pZCBnaXZlX25vdGlmeShvYmplY3Qgb2JqKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL25wYy9wdXRfYW5kX2dldC5jCisKK0FSR1VNRU5URToKKyAgICAgb2JqCisgICAgICAgYW4gZGVuIE5QQyB1ZWJlcmdlYmVuZXMgT2JqZWt0CitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIGF1dG9tYXRpc2NoIGltbWVyIGRhbm4gYXVmZ2VydWZlbiwgd2VubiBlaW4KKyAgICAgTGViZXdlc2VuICh3ZWxjaGVzIGtlaW4gU3BpZWxlcmNoYXJha3RlciBpc3QpIGVpbiBPYmpla3QgdWViZXJnZWJlbgorICAgICBiZWtvbW10LiBEaWVzIG11c3MgamVkb2NoIHVlYmVyIGRpZSBGdW5rdGlvbmFsaXRhZXQgdm9uCisgICAgIHB1dF9hbmRfZ2V0LmMgZ2VzY2hlaGVuIHNlaW4sIGlubmVyaGFsYiB2b24gbW92ZSgpIHdpcmQgZGllIEZ1bmt0aW9uCisgICAgIG5pY2h0IGF1ZmdlcnVmZW4hCisKK0JFSVNQSUVMOgorICAgICBPZnRtYWxzIHdpbGwgbWFuIGluIFF1ZXN0cyBlcnJlaWNoZW4sIGRhc3MgZWluZW0gTlBDIGVpbiBiZXN0aW1tdGVzCisgICAgIEl0ZW0gYWxzIEJld2VpcyBkZXIgRXJmdWVsbHVuZyBlaW5lciBiZXN0aW1tdGVuIEF1ZmdhYmUgdWViZXJicmFjaHQKKyAgICAgd2lyZC4gRm9sZ2VuZGVybWFzc2Uga2FubiBkaWVzIHJlYWxpc2llcnQgd2VyZGVuOgorICAgICB2b2lkIGNyZWF0ZSgpIHsKKyAgICAgICA6OmNyZWF0ZSgpOworICAgICAgIC4uLgorICAgICAgIFNldFByb3AoUF9SRUpFQ1QsKHtSRUpFQ1RfR0lWRSwKKyAgICAgICAgIE5hbWUoV0VSKSsiIHNhZ3Q6IERhcyBicmF1Y2hlIGljaCBuaWNodCFcbiJ9KSk7CisgICAgICAgLi4uCisgICAgIH0KKworICAgICB2b2lkIHF1ZXN0X29rKG9iamVjdCBvYmopIHsgLi4uCisgICAgICAgLy8gVmVybmljaHR1bmcgZGVzIFF1ZXN0b2JqZWt0ZXMgdW5kIFF1ZXN0dGV4dGUKKyAgICAgICAvLyBRdWVzdGJlbG9obnVuZyB1bmQgUXVlc3RhbmVya2VubnVuZworICAgICB9CisKKyAgICAgdm9pZCBnaXZlX25vdGlmeShvYmplY3Qgb2JqKSB7CisgICAgICAgaWYob2JqLT5pZCgiXG5xdWVzdGl0ZW0iKSkgLy8gUXVlc3RpdGVtIGJla29tbWVuPworICAgICAgICAgcXVlc3Rfb2sob2JqKTsKKyAgICAgICBlbHNlCisgICAgICAgICA6OmdpdmVfbm90aWZ5KG9iaik7ICAvLyBQX1JFSkVDVCBzb2xsIHNvbnN0IGdyZWlmZW4KKyAgICAgfQorICAgICBEZXIgQXVmcnVmIHZvbiA6OmdpdmVfbm90aWZ5KCkgc3RlbGx0IHNpY2hlciwgZGFzcyBlaW4gT2JqZWt0CisgICAgIHp1cnVlY2tnZWdlYmVuIHdpcmQsIHNvZmVybiBlcyBuaWNodCBkYXMgZ2VzdWNodGUgaXN0LiBFcnJlaWNodCB3aXJkCisgICAgIGRpZXMgdWViZXIgUF9SRUpFQ1QgKHNpZWhlIEJlbWVya3VuZ2VuKS4KKworQkVNRVJLVU5HRU46CisgICAgIFNwZXppZWxsIGluIE5QQ3MgaXN0IGRpZXNlIEZ1bmt0aW9uIG5vcm1hbGVyd2Vpc2UgZGFmdWVyCisgICAgIHZlcmFudHdvcnRsaWNoLCBkYXNzIG1pdHRlbHMgZGVyIFByb3BlcnR5IFBfUkVKRUNUIGRpZSBBbm5haG1lIHZvbgorICAgICBPYmpla3RlbiB2ZXJ3ZWlnZXJ0IHdlcmRlbiBrYW5uLiBVZWJlcnNjaHJlaWJ0IG1hbiBzaWUsIHNvIHNvbGx0ZQorICAgICBtYW4gZ2VnZWJlbmVuZmFsbHMgZGFyYXVmIGFjaHRlbiwgZGFzcyBkaWVzZSBTdGFuZGFyZGZ1bmt0aW9uCisgICAgIGViZW5mYWxscyBhdWZnZXJ1ZmVuIHdpcmQuCisKK1NJRUhFIEFVQ0g6CisgICAgIFBfUkVKRUNULCBzaG93X25vdGlmeSgpLCAKKyAgICAgL3N0ZC9ucGMvcHV0X2FuZF9nZXQuYywgL3N0ZC9saXZpbmcvcHV0X2FuZF9nZXQuYworCisyMi4gT2t0b2JlciAyMDEzLCBBcmF0aG9ybi4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL2dpdmVfb2JqIGIvZG9jL2xmdW4vZ2l2ZV9vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmOGM5OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2dpdmVfb2JqCkBAIC0wLDAgKzEsMjcgQEAKK2dpdmVfb2JqKCkKKworRlVOS1RJT04KKyAgICBpbnQgZ2l2ZV9vYmoob2JqZWN0IG9iLCBvYmplY3Qgd2hlcmUpCisKK0RFRklOSUVSVCBJTjoKKworICAgIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKKworQVJHVU1FTlRFOgorCisgICAgb2IgICAgICBEYXMgT2JqZWt0LCBkYXMgYWJnZWdlYmVuIHdlcmRlbiBzb2xsLgorICAgIHdoZXJlICAgRGFzIExlYmV3ZXNlbiwgZGFzcyBkYXMgT2JqZWt0IGVyaGFlbHQuCisKK0JFU0NIUkVJQlVORzoKKworICAgIERhcyBMZWJld2VzZW4sIGluIGRlbSBkaWVzZSBGdW5rdGlvbiBhdWZnZXJ1ZmVuIHdlcmRlbiBzb2xsLCBnaWJ0CisgICAgZGVuIGFuZ2VnZWJlbmVuIEdlZ2Vuc3RhbmQgKG9iKSBhbiBkYXMgYW5nZWdlYmVuZSBMZWJld2VzZW4gKHdoZXJlKS4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAxLCB3ZW5uIGRhcyBPYmpla3QgdWViZXJnZWJlbiB3dXJkZSBvZGVyIGRpZSBVZWJlcmdhYmUgbmljaHQgbW9lZ2xpY2ggd2FyLgorICAgIChpbiBkaWVzZW0gRmFsbCB3aXJkIGF1Y2ggZGlyZWt0IGVpbmUgVGV4dGF1c2dhYmUgYXVzZ2VnZWJlbikKKyAgICAwIHNvbnN0LCBpbiBkaWVzZW0gRmFsbCB3aXJkIGluIG5vdGlmeV9mYWlsIGVpbmUgcGFzc2VuZGUgQXVzZ2FiZSBwbGF6aWVydC4KKworU0lFSEUgQVVDSDoKKworICAgIHBpY2tfb2JqKCksIGRyb3Bfb2JqKCksIHB1dF9vYmooKSwgZmluZF9vYnMoKSwgL3N0ZC9saXZpbmcvcHV0X2FuZF9nZXQuYwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vaGVhbF9zZWxmIGIvZG9jL2xmdW4vaGVhbF9zZWxmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNjA1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9oZWFsX3NlbGYKQEAgLTAsMCArMSw0OSBAQAoraGVhbF9zZWxmKCkKKworRlVOS1RJT046CisgICAgdm9pZCBoZWFsX3NlbGYoaW50IHBvaW50cyk7CisKK0FSR1VNRU5URToKKyAgICBwb2ludHM6IERpZSBkZW0gTGViZXdlc2VuIHp1a29tbWVuZGUgSGVpbHVuZy4KKworQkVTQ0hSRUlCVU5HOgorICAgIERlbSBMZWJld2VzZW4gd2VyZGVuIHBvaW50cyBMZWJlbnMtIHVuZCBLb256ZW50cmF0aW9uc3B1bmt0ZSAKKyAgICBndXRnZXNjaHJpZWJlbiB1bmQgYXVmIGRpZSBha3R1ZWxsZW4gYWRkaWVydC4gRXMgd2VyZGVuIGFiZXIgbmljaHQKKyAgICBkaWUgbWF4aW1hbGVuIFdlcnRlIHVlYmVyc2Nocml0dGVuLgorCitSVUVDS0dBQkVXRVJUOgorICAgIEtlaW5lcgorCitCRUlTUElFTEU6CisgICAgCisgICAgQWRkQ21kKCJwZmx1ZWNrJmJlZXJlIiwicGZsdWVja2VfY21kIiwiV2FzIG1vZWNodGVzdCBEdSBwZmx1ZWNrZW4/Iik7CisKKyAgICBpbnQgcGZsdWVja2VfY21kKHN0cmluZyBzdHIpeworICAgICAgICB3cml0ZSgiRHUgcGZsdWVja3N0IGVpbmUgQmVlcmUsIGlzc3Qgc2llIHVuZCBmdWVobHN0IERpY2ggZ2xlaWNoICIKKyAgICAgICAgICAgICArInZpZWwgYmVzc2VyLlxuIik7CisgICAgICAgIHRoaXNfcGxheWVyKCktPmhlYWxfc2VsZigzMCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIERlciBTcGllbGVyIGJla29tbXQgaGllciBwcm8gQmVlcmUgZGllIGVyIHBmbHVlY2t0IHVuZCBpc3N0IGplIDMwIExQL0tQCisgICAgenUgc2VpbmVuIG1vbWVudGFuZW4uCisKK0JFTUVSS1VOR0VOOiAKKyAgICBoZWFsX3NlbGYgd2lyZCBnZXJuZSBmdWVyIEhlaWxzdGVsbGVuIGluIEdlYmlldGVuIGdlbm9tbWVuLCBpbiBkZW5lbiBlaW4KKyAgICBTcGllbGVyIGRpZXNlIEhlaWx1bmcgYXVjaCB3aXJrbGljaCBicmF1Y2h0LiBEZW5ub2NoIGlzdCBkZXIgRWluc2F0eiB1bi0KKyAgICBiZWRpbmd0IG1pdCBkZXIgSGVpbHVuZ3NiYWxhbmNlIGFienVzcHJlY2hlbiB1bmQgZGFyYXVmIHp1IGFjaHRlbiwgZGFzcworICAgIHBybyByZXNldCgpIG51ciBlaW5lIGJlc3RpbW10ZSBBbnphaGwgYW4gSGVpbHVuZ2VuIGF1c2dlZ2ViZW4gd2VyZGVuLgorCisgICAgQmVpIEhlaWxzdGVsbGVuIHNvbGx0ZSBlaW5lIGV2dGwuIEhlaWx1bmcgZGVzIFNwaWVsZXJzIG1pdCBkZXIgZWlnZW5zCisgICAgZGFmdWVyIGVpbmdlcmljaHRldGVuIEZ1bmt0aW9uIGNoZWNrX2FuZF91cGRhdGVfdGltZWRfa2V5IHJlYWxpc2llcnQKKyAgICB3ZXJkZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgVmVyd2FuZHQ6ICAgcmVzdG9yZV9zcGVsbF9wb2ludHMsIHJlc3RvcmVfaGl0X3BvaW50cywgYnVmZmVyX2hwCisJCWJ1ZmZlcl9zcCwgY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkKKyAgICBHZWdlbnBhcnRzOiBkb19kYW1hZ2UsIHJlZHVjZV9oaXRfcG9pbnRzLCByZWR1Y2Vfc3BlbGxfcG9pbnRzCisgICAgUHJvcHM6ICAgICAgUF9IUCwgUF9TUAorICAgIEtvbnplcHQ6ICAgIGhlaWx1bmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMjcuMDUuMjAwNyBieSBFbm5veApkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vaGVhcnRfYmVhdCBiL2RvYy9sZnVuL2hlYXJ0X2JlYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzMTRiZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2hlYXJ0X2JlYXQKQEAgLTAsMCArMSw0MiBAQAoraGVhcnRfYmVhdCgpCisKK0ZVTktUSU9OOgorICAgICBwcm90ZWN0ZWQgdm9pZCBoZWFydF9iZWF0KCk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvbGlmZS5jCisgICAgIC9zdGQvbGl2aW5nL2NvbWJhdC5jCisgICAgIHVuZCBhbmRlcmVuLi4uCisgICAgIGthbm4gYXVjaCBpbiBiZWxpZWJpZ2VuIE9iamVrdGVuIHNlbGJzdCBkZWZpbmllcnQgd2VyZGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgYWxsZSB6d2VpIFNla3VuZGVuIHZvbSBHYW1lRHJpdmVyIGF1ZmdlcnVmZW4uIFNpZQorICAgICByZWdlbHQgaW4gZGVyIE1HLU11ZExpYiBkYXMgSGVpbGVuIHZvbiBTcGllbGVybiB1bmQgTW9uc3Rlcm4sIGRlbgorICAgICBBYmxhdWYgdm9uIEthbXBmcnVuZGVuLCBkaWUgVmVyZGF1dW5nIGV0Yy4KKworICAgICBEYSBoZWFydF9iZWF0KCkgemllbWxpY2ggdmllbGUgUmVzc291cmNlbiBkZXMgR2FtZURyaXZlcnMgdmVyYnJhZXQsCisgICAgIHNvbGx0ZSBtYW4gT2JqZWt0ZSBtaXQgaGVhcnRfYmVhdCgpIG51ciBzbyBzZWx0ZW4gd2llIG1vZWdsaWNoCisgICAgIGJlbnV0emVuISBVbmQgc2VsYnN0IGRhbm4gc29sbHRlIGRlciBoZWFydF9iZWF0KCkgbmljaHQgZGllIGdhbnplIFplaXQKKyAgICAgdWViZXIgbGF1ZmVuLCBzb25kZXJuIHNpY2ggc28gYmFsZCB3aWUgbW9lZ2xpY2ggYWJzY2hhbHRlbi4KKworICAgICBEYXMgRWluLSB1bmQgQXVzc2NoYWx0ZW4gZGVzIGhlYXJ0X2JlYXQoKXMgZXJmb2xndCBtaXQKKyAgICAgc2V0X2hlYXJ0X2JlYXQoKS4KKworQkVNRVJLVU5HRU46CisgICAgIDEuIFRldWVyLCB0ZXVlciwgdGV1ZXIhCisgICAgIDIuIFNvbGwgZXVlciBWaWVjaCBwcm8gImVjaHRlbSIgSGVhcnRiZWF0IG1laHJlcmUgS2FtcGZydW5kZW4gaGFiZW4sCisgICAgICAgIGJlbnV0enQgZGFmdWVyIFNBX1NQRUVEIHVuZCBydWZ0IGF1ZiBnYXIga2VpbmVuIEZhbGwgbWVocmZhY2ggCisgICAgICAgIDo6aGVhcnRfYmVhdCgpIGF1Zi4gQWxzbyBfTklDSFRfCisgICAgICAgIHZvaWQgaGVhcnRfYmVhdCgpIHsKKyAgICAgICAgICAgIDo6aGVhcnRfYmVhdCgpOworICAgICAgICAgICAgOjpoZWFydF9iZWF0KCk7IH0KKyAgICAgICAgc29uZGVybjoKKyAgICAgICAgU2V0UHJvcChQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTLCAoW1NBX1NQRUVEOiAyMDBdKSApOworCitTSUVIRSBBVUNIOgorICAgICBFZnVuczogICAgIHNldF9oZWFydF9iZWF0KCksIGFic29sdXRlX2hiX2NvdW50KCksIHNldF9uZXh0X3Jlc2V0KCkKKyAgICAgRmVobGVyOiAgICBtYWtlX2ltbW9ydGFsKEwpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIyLjMuMjAwOCwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9pZCBiL2RvYy9sZnVuL2lkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjVhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9pZApAQCAtMCwwICsxLDc2IEBACitpZCgpCisKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIGludCBpZChzdHJpbmcgc3RyLCBpbnQgbHZsKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKyAgICAgL3N0ZC9wbGF5ZXIvYmFzZS5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nIHN0cgorICAgICAgICAgIFN0cmluZywgYXVmIGRlbiBnZXRlc3RldCB3ZXJkZW4gc29sbC4KKyAgICAgaW50IGx2bAorICAgICAgICAgIEluIC9zdGQvcGxheWVyL2Jhc2UuYyBiZW51dHp0LiBXZW5uIGRlciBTcGllbGVyIHVuc2ljaHRiYXIgaXN0CisgICAgICAgICAgdW5kIGx2bCBrbGVpbmVyIGlzdCBhbHMgc2VpbiBMZXZlbCwgd2lyZCAwIHp1cnVlY2tnZWdlYmVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdpcmQgZ2VwcnVlZnQsIG9iIHNpY2ggZGFzIE9iamVrdCBtaXQgc3RyIGFuc3ByZWNoZW4gbGFlc3N0LiBEYXp1CisgICAgIHdpcmQgc3RyIG1pdCBkZW0gSW5oYWx0IGRlciBQcm9wZXJ0eSBQX0lEUyB2ZXJnbGljaGVuLiBGYWxscworICAgICBQX0FESkVDVElWRVMgZ2VzZXR6dCBpc3QsIHdlcmRlbiBhdWNoIGFsbGUgQWRqZWt0aXZrb21iaW5hdGlvbmVuIG1pdAorICAgICBkZW4gQmV6ZWljaG5lcm4gZ2VwcnVlZnQuCisKKyAgICAgQmVzb25kZXJlIEJlZGV1dHVuZyBoYXQgZGllc2UgRnVua3Rpb24gYmVpIE1lbmdlbm9iamVrdGVuOiBBbmhhbmQgdm9uCisgICAgIHN0ciB3aXJkIHZlcm1lcmt0LCB3ZWxjaGUgTWVuZ2UgZGVzIE9iamVrdGVzIGFuZ2VzcHJvY2hlbiB3aXJkLiBFcworICAgICB3ZXJkZW4gZGFiZWkgbWVocmVyZSBGYWVsbGUgdW50ZXJzY2hpZWRlbjoKKyAgICAgbyBzdHIgaXN0IGVpbmVyIGRlciBtaXQgQWRkSWQoKSBhbmdlZ2ViZW5lciBCZXplaWNobmVyLiBJbiBkaWVzZW0KKyAgICAgICBGYWxsIGlzdCBkaWUgYW5nZXNwcm9jaGVuZSBNZW5nZSBkaWUgR2VzYW10bWVuZ2UuCisgICAgIG8gc3RyIGlzdCBlaW5lciBkZXIgbWl0IEFkZFNpbmd1bGFySWQoKSBhbmdlZ2ViZW5lbiBCZXplaWNobmVyLiBEaWUKKyAgICAgICBhbmdlc3Byb2NoZW5lIE1lbmdlIGlzdCBpbiBkaWVzZW0gRmFsbCAxLgorICAgICBvIHN0ciBpc3QgZWluZXIgZGVyIG1pdCBBZGRQbHVyYWxJZCgpIGFuZ2VnZWJlbmVuIEJlemVpY2huZXIuIERpZQorICAgICAgIGFuZ2VzcHJvY2hlbmUgTWVuZ2UgaXN0IGluIGRpZXNlbSBGYWxsIC4gZGllIEdlc2FtdG1lbmdlLgorICAgICBvIEhhdCBzdHIgZGllIEZvcm0gIjxuPiA8aWQ+Iiwgd29iZWkgPG4+PTEgdW5kIDxpZD4gZWluZSBTaW5ndWxhcklkCisgICAgICAgb2RlciAxIDwgPG4+IDw9IGRlciBHZXNhbXRtZW5nZSB1bmQgPGlkPiBlaW5lIFBsdXJhbElkLCBzbyBpc3QgZGllCisgICAgICAgYW5nZXNwcm9jaGVuZSBNZW5nZSA9IDxuPi4KKyAgICAgV2llIGdlc2FndCwgZ2lsdCBkaWVzIGVpbnppZyB1bmQgYWxsZWluIGJlaSBNZW5nZW5vYmpla3RlbiEKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBzaWNoIGRhcyBPYmpla3Qgdm9uIHN0ciBhbmdlc3Byb2NoZW4gZnVlaGx0LCBhbnNvbnN0ZW4gMC4KKworQkVJU1BJRUxFOgorICAgICBBbmdlbm9tbWVuLCBlaW4gT2JqZWt0IGhhYmUgZm9sZ2VuZGUgQmV6ZWljaG5lcjoKKworICAgICBBZGRJZCggIm11cm1lbCIgKTsKKyAgICAgQWRkQWRqZWN0aXZlKCAicnVuZGUiICk7CisKKyAgICAgRGFubiBsaWVmZXJuIGRpZSBhbmdlZ2ViZW5lbiBpZCgpLUF1ZnJ1ZmUgZm9sZ2VuZGUgRXJnZWJuaXNzZToKKworICAgICBpZCggIm11cm1lbCIgKTsgICAgICAgICA9PiAxCisgICAgIGlkKCAicnVuZGUgbXVybWVsIiApOyAgID0+IDEKKyAgICAgaWQoICJrbGVpbmUgbXVybWVsIiApOyAgPT4gMAorICAgICBpZCggInJ1bmRlciBiYWxsIiApOyAgICA9PiAwCisgICAgIGlkKCAicnVuZGUgbXVybWVsIDIiICk7ID0+IDEsIHdlbm4gZGllcyBkaWUgendlaXRlIE11cm1lbCBpbiBkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xlaWNoZW4gVW1nZWJ1bmcgaXN0LCBhbnNvbnN0ZW4gMAorCisgICAgIEJlaSBlaW5lbSBIYXVmZW4gdm9uIDEwMCBNdWVuemVuIGhhZXR0ZSBtYW4gekIuOgorCisgICAgIEFkZElkKCAiZ2VsZCIgKTsKKyAgICAgQWRkU2luZ3VsYXJJZCggIm11ZW56ZSIgKTsKKyAgICAgQWRkUGx1cmFsSWQoICJtdWVuemVuIiApOworCisgICAgIE5hY2ggZnVlaGxlbiBzaWNoIG5hY2ggZGVuIGZvbGdlbmRlbiBpZCgpLUF1ZnJ1ZmVuIGZvbGdlbmRlIEFuemFobGVuCisgICAgIGFuZ2VzcHJvY2hlbjoKKworICAgICBpZCggImdlbGQiICk7ICAgICAgID0+IDEwMCBNdWVuemVuCisgICAgIGlkKCAibXVlbnplIiApOyAgICAgPT4gMSBNdWVuemUKKyAgICAgaWQoICJtdWVuemVuIiApOyAgICA9PiAxMDAgTXVlbnplbgorICAgICBpZCggIjEgbXVlbnplIiApOyAgID0+IDEgTXVlbnplCisgICAgIGlkKCAiNDIgbXVlbnplbiIgKTsgPT4gNDIgTXVlbnplbgorCisgICAgIGlkKCkgbGllZmVydCBpbiBhbGwgZGllc2VuIEZhZWxsZW4gMSB6dXJ1ZWNrLgorCitTSUVIRSBBVUNIOgorICAgICBBZGRJZCgpLCBBZGRBZGplY3RpdmUoKSwgQWRkU2luZ3VsYXJJZCgpLCBBZGRQbHVyYWxJZCgpLCBwcmVzZW50KCksCisgICAgIG1hdGNoX2lkcygpLCAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMsIC9zdGQvdW5pdC5jCisKKzYuIFNlcCAyMDEyIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vaW5pdCBiL2RvYy9sZnVuL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkMGNhZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2luaXQKQEAgLTAsMCArMSw2NSBAQAoraW5pdCgpCisKK0ZVTktUSU9OOgorCXZvaWQgaW5pdCgpOworCitERUZJTklFUlQgSU46CisJL3N0ZC9yb29tL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorCWtlaW5lCisKK0JFU0NIUkVJQlVORzoKKwlpbml0KCkgd2lyZCBpbW1lciBkYW5uIGF1ZmdlcnVmZW4sIHdlbm4gZWluIGxlYmVuZGVzIE9iamVrdCBpbiBkaWUKKwlOYWVoZSBhbmRlcmVyIE9iamVrdGUgYmV3ZWd0IHdpcmQgb2RlciBlaW4gbmljaHQgbGViZW5kaWdlcyBPYmpla3QKKwlpbiBkaWUgTmFlaGUgdm9uIExlYmV3ZXNlbiBnZWxhbmd0LiBpbml0KCkgd2lyZCBkYWJlaSBpbiBhbGxlbgorCU9iamVrdGVuIGF1ZmdlcnVmZW4sIGJlaSBkZW5lbiBlcyBub3R3ZW5kaWcgaXN0LgorCisJRGVyIEhhdXB0endlY2sgZGllc2VyIEZ1bmt0aW9uIGJlc3RlaHQgZGFyaW4sIGRlbiBPYmpla3RlbgorCXVudGVyZWluYW5kZXIgaWhyZSBqZXdlaWxpZ2VuIEJlZmVobGUgenVnYWVuZ2xpY2ggenUgbWFjaGVuLgorCVdhZWhyZW5kIGRpZXMgaW4gYW5kZXJlbiBNdWRMaWJzIGR1cmNoIGVpbmUgUmVpaGUgdm9uCisJYWRkX2FjdGlvbigpLUF1ZnJ1ZmVuIGltIFJ1bXBmIHZvbiBpbml0KCkgZ2VzY2hhaCwgZ2VzY2hpZWh0IGRpZXMgaW4KKwlkZXIgTUctTXVkTGliIGJlaSBPYmpla3RlbiwgZGllIC9zdGQvdGhpbmcvY29tbWFuZHMuYyBlcmJlbgorCSAoZGFzIHNpbmQgekIuIGFsbGUgU3RhbmRhcmRvYmpla3RlKSBxdWFzaSBhdXRvbWF0aXNjaAorCSAoZG9ydCB3ZXJkZW4gZGllIEJlZmVobGUgZGFubiBwZXIgQWRkQ21kKCkgaW0gY3JlYXRlKCkgYW5nZW1lbGRldCwKKwkgIG1hbiBzcGFydCBzaWNoIGRpZSBJbXBsZW1lbnRpZXJ1bmcgdm9uIGluaXQoKSB1bmQgZGVtIE11ZCBzb21pdAorCSAgU3BlaWNoZXIpLiBEZXIgYW5kZXJlIFdlZyBpc3QgYWJlciBuYXR1ZXJsaWNoIGltbWVyIG5vY2ggbW9lZ2xpY2guCisKK1JVZUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK0JFTUVSS1VOR0VOOgorCURlciBBYmxhdWYgZGVyIGluaXQoKS1LZXR0ZSBpc3Qgd2llIGZvbGd0OgorCW8gSXN0IGRhcyBPYmpla3QgWCwgd2VsY2hlcyBpbnMgWmllbG9iamVrdCBEIGJld2VndCB3dXJkZSwgZWluCisJICBMZWJld2VzZW4sIHNvIHdpcmQgaW4gRCBpbml0KCkgYXVmZ2VydWZlbiwgd29iZWkgdGhpc19wbGF5ZXIoKSBhdWYKKwkgIFggZ2VzZXR6dCBpc3QuCisJbyBEYW5uIHdpcmQgZnVlciBqZWRlcyBPYmpla3QgQyBpbiBEIGZvbGdlbmRlcyBhdXNnZWZ1ZWhydDoKKwkgICsgSXN0IEMgZWluIExlYmV3ZXNlbiwgZGFubiB3aXJkIGluaXQoKSBpbiBYIGF1ZmdlcnVmZW4sIHdvYmVpCisJICAgIHRoaXNfcGxheWVyKCkgYXVmIEMgZ2VzZXR6dCBpc3QuCisJICArIElzdCBYIGVpbiBMZWJld2VzZW4sIGRhbm4gd2lyZCBpbml0KCkgaW4gQyBhdWZnZXJ1ZmVuLCB3b2JlaQorCSAgdGhpc19wbGF5ZXIoKSBhdWYgWCBnZXNldHp0IGlzdC4KKwlvIFNjaGxpZXNzbGljaCB3aXJkIGluIGRlbSBGYWxsLCBkYXNzIEQgbGViZW5kaWcgaXN0LCBpbiBYIGluaXQoKQorCSAgYXVmZ2VydWZlbiwgd29iZWkgdGhpc19wbGF5ZXIoKSBhdWYgRCBnZXNldHp0IGlzdC4KKworQkVJU1BJRUxFOgorCUQgc2VpIGVpbiBSYXVtLCBpbiBkZW0gc2ljaCBkYXMgTGViZXdlc2VuIEwxIHNvd2llIGRpZSBHZWdlbnN0YWVuZGUKKwlOMSB1bmQgTjIgYmVmaW5kZW4uCisJQmV0cml0dCBlaW4gU3BpZWxlciBYIGRpZXNlbiBSYXVtLCBzbyB3ZXJkZW4gZm9sZ2VuZGUgaW5pdCgpcworCWF1ZmdlcnVmZW46CisKKwkgIEQtPmluaXQoKTsgIC8vIHRoaXNfcGxheWVyKCkgPT0gWAorCSAgWC0+aW5pdCgpOyAgLy8gdGhpc19wbGF5ZXIoKSA9PSBMMQorCSAgTDEtPmluaXQoKTsgLy8gdGhpc19wbGF5ZXIoKSA9PSBYCisJICBOMS0+aW5pdCgpOyAvLyB0aGlzX3BsYXllcigpID09IFgKKwkgIE4yLT5pbml0KCk7IC8vIHRoaXNfcGxheWVyKCkgPT0gWAorCisJR2VsYW5ndCBkYWdlZ2VuIGVpbiBuaWNodGxlYmVuZGlnZXMgT2JqZWt0IG5hY2ggRCwgc28gc2llaHQgZGFzIEdhbnplCisJd2llIGZvbGd0IGF1czoKKworCSAgWC0+aW5pdCgpOyAgICAvLyB0aGlzX3BsYXllcigpID09IEwxCisKK1NJRUhFIEFVQ0g6CisJZXhpdCgpLCBBZGRDbWQoKSwgYWRkX2FjdGlvbigpLAorICBOb3RpZnlJbnNlcnQoKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMDQuMDguMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vaW5zZXJ0X3NlbnNpdGl2ZV9pbnYgYi9kb2MvbGZ1bi9pbnNlcnRfc2Vuc2l0aXZlX2ludgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjU0ZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vaW5zZXJ0X3NlbnNpdGl2ZV9pbnYKQEAgLTAsMCArMSwyMSBAQAoraW5zZXJ0X3NlbnNpdGl2ZV9pbnYKK0ZVTktUSU9OOgorICAgICB2b2lkIGluc2VydF9zZW5zaXRpdmVfaW52KG9iamVjdCBvYiwgc3RyaW5nIGtleSwKKwkJCSAgICAgICBpbnQgdGhyZXNob2xkLCBtaXhlZCAqb3B0KQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvY29udGFpbmVyL2ludmVudG9yeS5jCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gc3VjaHQsIG9iIGJlaW0gSGluenVmdWVnZW4gZWluZXMgc2Vuc2l0aXZlbiBPYmpla3RzCisgICAgIHNjaG9uIGVpbiBPYmpla3QgZGEgaXN0LCBkYXNzIGRpZXNlcyBhdXNsb2VzdC4KKworU0lFSEUgQVVDSDoKKyAgICAgUF9TRU5TSVRJVkUKKyAgICAgSW5zZXJ0U2Vuc2l0aXZlT2JqZWN0LCBSZW1vdmVTZW5zaXRpdmVPYmplY3QKKyAgICAgaW5zZXJ0X3NlbnNpdGl2ZV9pbnZfdHJpZ2dlcgorICAgICBQX1NFTlNJVElWRV9BVFRBQ0ssIFBfU0VOU0lUSVZFX0lOVkVOVE9SWSwKKyAgICAgUF9TRU5TSVRJVkVfSU5WRU5UT1JZX1RSSUdHRVIKKyAgICAgQ2hlY2tTZW5zaXRpdmVBdHRhY2sKKworMjguSmFuLjIwMDEsIEdsb2luc29uQE1HCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9pbnNlcnRfc2Vuc2l0aXZlX2ludl90cmlnZ2VyIGIvZG9jL2xmdW4vaW5zZXJ0X3NlbnNpdGl2ZV9pbnZfdHJpZ2dlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjZmMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vaW5zZXJ0X3NlbnNpdGl2ZV9pbnZfdHJpZ2dlcgpAQCAtMCwwICsxLDIxIEBACitpbnNlcnRfc2Vuc2l0aXZlX2ludl90cmlnZ2VyCitGVU5LVElPTjoKKyAgICAgdm9pZCBpbnNlcnRfc2Vuc2l0aXZlX2ludl90cmlnZ2VyKG9iamVjdCBvYiwgc3RyaW5nIGtleSwKKwkJCQkgICAgICAgaW50IHRocmVzaG9sZCwgbWl4ZWQgKm9wdCkKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2NvbnRhaW5lci9pbnZlbnRvcnkuYworCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHN1Y2h0LCBvYiBlaW4gc2Vuc2l0aXZlcyBPYmpla3QgaW0gSW52ZW50b3J5IGlzdCwKKyAgICAgZGFzIGR1cmNoIGRpZXNlcyAoc29lYmVuIGVpbmdlZnVlZ3RlKSBPYmpla3QgYXVzZ2Vsb2VzdCB3aXJkLgorCitTSUVIRSBBVUNIOgorICAgICBQX1NFTlNJVElWRQorICAgICBJbnNlcnRTZW5zaXRpdmVPYmplY3QsIFJlbW92ZVNlbnNpdGl2ZU9iamVjdAorICAgICBpbnNlcnRfc2Vuc2l0aXZlX2ludgorICAgICBQX1NFTlNJVElWRV9BVFRBQ0ssIFBfU0VOU0lUSVZFX0lOVkVOVE9SWSwKKyAgICAgUF9TRU5TSVRJVkVfSU5WRU5UT1JZX1RSSUdHRVIKKyAgICAgQ2hlY2tTZW5zaXRpdmVBdHRhY2sKKworMjguSmFuLjIwMDEsIEdsb2luc29uQE1HCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9pbnRfbG9uZyBiL2RvYy9sZnVuL2ludF9sb25nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MTNlODcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9pbnRfbG9uZwpAQCAtMCwwICsxLDY0IEBACitpbnRfbG9uZygpCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBzdHJpbmcgaW50X2xvbmcobWl4ZWQgdmlld2VyLCBtaXhlZCB2aWV3cG9pbnQsIGludCBmbGFncykKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3Jvb20vZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgIG1peGVkIHZpZXdlcgktIGRlciBCZXRyYWNodGVyIGRlcyBSYXVtZXMKKyAgICAgbWl4ZWQgdmlld3BvaW50CS0gMC9PYmpla3QvQXJyYXkgZGVyL2RpZSBBdXNnYW5nc3B1bmt0KGUpIGRlcworCQkJICBCZXRyYWNodGVucyAodW5kIGRhbWl0IG5pY2h0IHNpY2h0YmFyISkKKyAgICAgaW50IGZsYWdzCQktIE1vZGlmaWthdG9yZW4gZnVlciBkaWUgQW56ZWlnZQorCQkJICAoc2llaGUgIm1hbiBtYWtlX2ludmxpc3QiLCB3aXJkIG1pdCAzIHZlclVORGV0ISkKKworQkVTQ0hSRUlCVU5HOgorICAgICBFcyB3aXJkIGRpZSBCZXNjaHJlaWJ1bmcgZGVzIFJhdW1pbm5lcmVuIGVyc3RlbGx0LiBEYWJlaSB3aXJkIGRpZQorICAgICBMYW5nYmVzY2hyZWlidW5nIGRlcyBSYXVtZXMsIGRpZSBlbnRoYWx0ZW5lbiBPYmpla3RlIChleGtsdXNpdmUKKyAgICAgYWxsZXIgdmlld3BvaW50cyAobm9ybWFsZXJ3ZWlzZSBudXIgZGVyIEJldHJhY2h0ZXIpKSB1bmQgQXVzZ2FlbmdlLAorICAgICB3ZW5uIHZvbSBWaWV3ZXIgZWluZ2VzY2hhbHRldCBkYXJnZXN0ZWxsdC4KKyAgICAgRmFsbHMgZGVyIFJhdW0gaW5uZXJoYWxiIGVpbmVzIGFuZGVyZW4gUmF1bWVzIGxpZWd0IHVuZCBzZWxic3QKKyAgICAgdHJhbnNwYXJlbnQgaXN0LCB3aWUgenVzYWV0emxpY2ggZGllIEt1cnpiZXNjaHJlaWJ1bmcgZGVzIEF1c3Nlbi0KKyAgICAgcmF1bWVzIGFuZ2V6ZWlndC4KKworICAgICBJc3QgVmlld2VyIGVpbiBNYWdpZXIgbWl0IGVpbmdlc2NoYWx0ZXRlbSBNYWdpZXJtb2R1cywgc28gd2lyZCBkZXIKKyAgICAgQmVzY2hyZWlidW5nIGRlciBEYXRlaW5hbWUgZGVzIFJhdW1lcyB2b3Jhbmdlc3RlbGx0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBEaWUgTGFuZ2Jlc2NocmVpYnVuZyBkZXMgUmF1bWVzIHZvbiBpbm5lbi4KKworQkVNRVJLVU5HRU46CisgICAgIERpZSBUcmVubnVuZyB2b24gdmlld2VyIHVuZCB2aWV3cG9pbnQgaGF0IGR1cmNoYXVzIGlocmVuIFNpbm4uIFNvIGlzdAorICAgICBlcyB6dW0gQmVpc3BpZWwgbW9lZ2xpY2gsIGVpbmVuIFJhdW0gIm1pdCBkZW4gQXVnZW4gZWluZXMgQW5kZXJlbiIgenUKKyAgICAgYmV0cmFjaHRlbi4gRGFiZWkgc2FlaGUgbWFuIHNpY2ggc2VsYnN0LCB3ZW5uIG1hbiBpbSBSYXVtIHdhZXJlLgorCitCRUlTUElFTEU6CisgICAgIC8vIGluIGRpZXNlbSBSYXVtIHNpZWh0IG1hbiBrZWluZSBNaXRzcGllbGVyIGltICJzY2hhdSIgb2RlciBiZWltCisgICAgIC8vIEJldHJldGVuICh2aWVsbGVpY2h0IGlzdCBlcyB6dSBuZWJsaWcpCisgICAgIC8vIGRhenUgd2VyZGVuIGVpbmZhY2ggYWxsZSBJbnRlcmFjdGl2ZXMgenUgZGVuIHZpZXdwb2ludHMgYWRkaWVydAorICAgICBzdHJpbmcgaW50X2xvbmcob2JqZWN0IHZpZXdlciwgbWl4ZWQgdmlld3BvaW50cywgaW50IGZsYWdzKSB7CisgICAgICBpZighcG9pbnRlcnAodmlld3BvaW50cykpIHZpZXdwb2ludHM9KHt2aWV3cG9pbnRzfSk7CisgICAgICByZXR1cm4gOjppbnRfbG9uZygmdmlld2VyLAorCQkJdmlld3BvaW50cysKKwkJCWZpbHRlcihhbGxfaW52ZW50b3J5KHRoaXNfb2JqZWN0KCkpLAorCQkJCSAgICAgIydpbnRlcmFjdGl2ZSksCisJCQkmZmxhZ3MpOworICAgICB9CisKKyAgICAgc3RyaW5nIGludF9zaG9ydChvYmplY3Qgdmlld2VyLCBtaXhlZCB2aWV3cG9pbnRzKSB7CisgICAgICBpZighcG9pbnRlcnAodmlld3BvaW50cykpIHZpZXdwb2ludHM9KHt2aWV3cG9pbnRzfSk7CisgICAgICByZXR1cm4gOjppbnRfc2hvcnQoJnZpZXdlciwKKwkJCSB2aWV3cG9pbnRzKworCQkJIGZpbHRlcihhbGxfaW52ZW50b3J5KHRoaXNfb2JqZWN0KCkpLAorCQkJCSAgICAgICMnaW50ZXJhY3RpdmUpKTsKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBBZWhubGljaGVzOglpbnRfc2hvcnQoKQorICAgICBQcm9wZXJ0aWVzOglQX0lOVF9MT05HLCBQX1NIT1JUCisJCQlQX0hJREVfRVhJVFMsIFBfU0hPV19FWElUUworCQkJUF9UUkFOU1BBUkVOVAorICAgICBLb21tYW5kb2tldHRlOgltYWtlX2ludmxpc3QoKSwgc2hvcnQoKQorICAgICBTb25zdGlnZXM6CQlQX1JFRkVSRU5DRV9PQkpFQ1QsIFBfV0FOVFNfVE9fTEVBUk4KKworMTEuIE1haSAyMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9pbnRfc2hvcnQgYi9kb2MvbGZ1bi9pbnRfc2hvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhOGQzYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL2ludF9zaG9ydApAQCAtMCwwICsxLDU4IEBACitpbnRfc2hvcnQoKQorRlVOS1RJT046CisgICAgIHN0cmluZyBpbnRfc2hvcnQobWl4ZWQgdmlld2VyLCBtaXhlZCB2aWV3cG9pbnQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcm9vbS9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgbWl4ZWQgdmlld2VyCS0gZGVyIEJldHJhY2h0ZXIgZGVzIFJhdW1lcworICAgICBtaXhlZCB2aWV3cG9pbnQJLSAwL09iamVrdC9BcnJheSBkZXIvZGllIEF1c2dhbmdzcHVua3QoZSkgZGVzCisJCQkgIEJldHJhY2h0ZW5zICh1bmQgZGFtaXQgbmljaHQgc2ljaHRiYXIhKQorCitCRVNDSFJFSUJVTkc6CisgICAgIEVzIHdpcmQgZWluZSBrdXJ6ZSAgQmVzY2hyZWlidW5nIGRlcyBSYXVtaW5uZXJlbiBlcnN0ZWxsdC4gRGFiZWkgd2lyZAorICAgICBkaWUgS3VyemJlc2NocmVpYnVuZyBkZXMgUmF1bWVzLCBkaWUgZW50aGFsdGVuZW4gT2JqZWt0ZSAoZXhrbHVzaXZlCisgICAgIGFsbGVyIHZpZXdwb2ludHMgKG5vcm1hbGVyd2Vpc2UgbnVyIGRlciBCZXRyYWNodGVyKSkgdW5kIEF1c2dhZW5nZSwKKyAgICAgd2VubiB2b20gVmlld2VyIGVpbmdlc2NoYWx0ZXQgZGFyZ2VzdGVsbHQuCisKKyAgICAgSXN0IFZpZXdlciBlaW4gTWFnaWVyIG1pdCBlaW5nZXNjaGFsdGV0ZW0gTWFnaWVybW9kdXMsIHNvIHdpcmQgZGVyCisgICAgIEJlc2NocmVpYnVuZyBkZXIgRGF0ZWluYW1lIGRlcyBSYXVtZXMgdm9yYW5nZXN0ZWxsdC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRGllIEt1cnpiZXNjaHJlaWJ1bmcgZGVzIFJhdW1lcyB2b24gaW5uZW4uCisKK0JFTUVSS1VOR0VOOgorICAgICBEaWUgVHJlbm51bmcgdm9uIHZpZXdlciB1bmQgdmlld3BvaW50IGhhdCBkdXJjaGF1cyBpaHJlbiBTaW5uLiBTbyBpc3QKKyAgICAgZXMgenVtIEJlaXNwaWVsIG1vZWdsaWNoLCBlaW5lbiBSYXVtICJtaXQgZGVuIEF1Z2VuIGVpbmVzIEFuZGVyZW4iIHp1CisgICAgIGJldHJhY2h0ZW4uIERhYmVpIHNhZWhlIG1hbiBzaWNoIHNlbGJzdCwgd2VubiBtYW4gaW0gUmF1bSB3YWVyZS4KKworQkVJU1BJRUxFOgorICAgICAvLyBpbiBkaWVzZW0gUmF1bSBzaWVodCBtYW4ga2VpbmUgTWl0c3BpZWxlciBpbSAic2NoYXUiIG9kZXIgYmVpbQorICAgICAvLyBCZXRyZXRlbiAodmllbGxlaWNodCBpc3QgZXMgenUgbmVibGlnKQorICAgICAvLyBkYXp1IHdlcmRlbiBlaW5mYWNoIGFsbGUgSW50ZXJhY3RpdmVzIHp1IGRlbiB2aWV3cG9pbnRzIGFkZGllcnQKKyAgICAgc3RyaW5nIGludF9sb25nKG9iamVjdCB2aWV3ZXIsIG1peGVkIHZpZXdwb2ludHMsIGludCBmbGFncykgeworICAgICAgaWYoIXBvaW50ZXJwKHZpZXdwb2ludHMpKSB2aWV3cG9pbnRzPSh7dmlld3BvaW50c30pOworICAgICAgcmV0dXJuIDo6aW50X2xvbmcoJnZpZXdlciwKKwkJCXZpZXdwb2ludHMrCisJCQlmaWx0ZXIoYWxsX2ludmVudG9yeSh0aGlzX29iamVjdCgpKSwKKwkJCQkgICAgICMnaW50ZXJhY3RpdmUpLAorCQkJJmZsYWdzKTsKKyAgICAgfQorCisgICAgIHN0cmluZyBpbnRfc2hvcnQob2JqZWN0IHZpZXdlciwgbWl4ZWQgdmlld3BvaW50cykgeworICAgICAgaWYoIXBvaW50ZXJwKHZpZXdwb2ludHMpKSB2aWV3cG9pbnRzPSh7dmlld3BvaW50c30pOworICAgICAgcmV0dXJuIDo6aW50X3Nob3J0KCZ2aWV3ZXIsCisJCQkgdmlld3BvaW50cysKKwkJCSBmaWx0ZXIoYWxsX2ludmVudG9yeSh0aGlzX29iamVjdCgpKSwKKwkJCQkgICAgICAjJ2ludGVyYWN0aXZlKSk7CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgQWVobmxpY2hlczoJaW50X2xvbmcoKQorICAgICBQcm9wZXJ0aWVzOglQX0lOVF9TSE9SVCwgUF9TSE9SVAorCQkJUF9ISURFX0VYSVRTLCBQX1NIT1dfRVhJVFMKKyAgICAgS29tbWFuZG9rZXR0ZToJbWFrZV9pbnZsaXN0KCksIHNob3J0KCkKKyAgICAgU29uc3RpZ2VzOgkJUF9SRUZFUkVOQ0VfT0JKRUNULCBQX1dBTlRTX1RPX0xFQVJOCisKKzExLiBNYWkgMjAwNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vaXNfY2xhc3NfbWVtYmVyIGIvZG9jL2xmdW4vaXNfY2xhc3NfbWVtYmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTk0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9pc19jbGFzc19tZW1iZXIKQEAgLTAsMCArMSwxNTUgQEAKK2lzX2NsYXNzX21lbWJlcigpCitGVU5LVElPTjoKKyAgICAgaW50IGlzX2NsYXNzX21lbWJlcihzdHJpbmd8c3RyaW5nKiBjbGFzcyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgc3RyaW5nL3N0cmluZyogY2xhc3MJLSBTdHJpbmcgb2RlciBTdHJpbmdhcnJheSBkZXIgS2xhc3NlKG4pCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCBnZXRlc3RldCwgb2IgZGFzIE9iamVrdCBpbiBlaW5lIGRlciBpbiBjbGFzcyBhbmdlZ2ViZW5lbgorICAgICBLbGFzc2VuIGZhZWxsdC4gSW4gZGllc2VuIFRlc3Qgd2VyZGVuIGRpZSBmb2xnZW5kZW4gRWlnZW5zY2hhZnRlbiBkZXMKKyAgICAgT2JqZWt0ZXMgZWluYmV6b2dlbjoKKworICAgICAgIDEuIERpZSBSYXNzZSBkZXMgT2JqZWt0ZXMgKGJlaSBMZWJld2VzZW4pLAorICAgICAgIDIuIGRpZSBJRHMgZGVzIE9iamVrdGVzIHVuZAorICAgICAgIDMuIGRpZSBleHBsaXppdCBhbmdlZ2ViZW5lbiBLbGFzc2VuIGRlcyBPYmpla3Rlcy4KKyAgICAgICA0LiBlaW5pZ2VuIGltcGxpeml0ZW4gS2xhc3NlbiwgZGllIHNpY2ggYXVzIGRlbiBLbGFzc2VuIGluIDMgZXJnZWJlbi4KKworICAgICBEaWUgbW9lZ2xpY2hlbiBLbGFzc2VuIHNpbmQgaW4gL3N5cy9jbGFzcy5oIGRlZmluaWVydC4gTW9tZW50YW4gc3RlaGVuCisgICAgIGZvbGdlbmRlIEtsYXNzZW4genVyIFZlcmZ1ZWd1bmc6CisKKyAgICAgQ0xfQU1NVU5JVElPTgorICAgICAgICAgIERhcyBPYmpla3QgZWlnbmV0IHNpY2ggYWxzIE11bml0aW9uLgorICAgICBDTF9BTklNQUwKKyAgICAgICAgICBEYXMgT2JqZWt0IGlzdCBlaW4gVGllci4KKyAgICAgQ0xfQVJBQ0hOSUQKKyAgICAgICAgICBEYXMgT2JqZWt0IGluIGVpbiBTcGlubmVud2VzZW4uCisgICAgIENMX0JJR0JBTkcKKyAgICAgICAgICBEaWVzZXMgT2JqZWt0IGthbm4gbWVocmVyZW4gTGViZXdlc2VuIGF1ZiBlaW5tYWwgU2NoYWRlbiB6dWZ1ZWdlbi4KKyAgICAgQ0xfQklSRAorICAgICAgICAgIEVpbiBWb2dlbC4KKyAgICAgQ0xfQ1JBV0xJTkcKKyAgICAgICAgICBEaWVzZXMgV2VzZW4gYmV3ZWd0IHNpY2gga3JpZWNoZW5kLgorICAgICBDTF9DVVJTRQorICAgICAgICAgIERhcyBPYmpla3QgaXN0IGVpbiBGbHVjaCAoekIuIGVpbiBTcHJhY2hmbHVjaCkuCisgICAgIENMX0RFTU9OCisgICAgICAgICAgQmVpIGRlbSBPYmpla3QgaGFuZGVsdCBlcyBzaWNoIHVtIGVpbmVuIERhZW1vbi4KKyAgICAgQ0xfRElTRUFTRQorICAgICAgICAgIEVpbmUgS3JhbmtoZWl0LgorICAgICBDTF9EUkFHT04KKyAgICAgICAgICBFaW4gRHJhY2hlLgorICAgICBDTF9EV0FSRgorICAgICAgICAgIEZ1ZXIgdW5zZXJlIGtsZWluZW4gR2Flc3RlLi4uCisgICAgIENMX0VMRgorICAgICAgICAgIEVsZmVuIGFsbGVyIEFydC4KKyAgICAgQ0xfRUxFTUVOVEFMCisgICAgICAgICAgRWluIEVsZW1lbnRhciBpcmdlbmRlaW5lciBBcnQuIE1hdGVyaWFsIHNldHplbiB3YWVyZSBhbmdlYnJhY2h0LgorICAgICBDTF9FWFBMT1NJVkUKKyAgICAgICAgICBCZWkgZGVtIE9iamVrdCBoYW5kZWx0IGVzIHNpY2ggdW0gZWluZW4gU3ByZW5nc3RvZmYuCisgICAgIENMX0ZFTElORQorICAgICAgICAgIEZlbGluZW4gdW5kIGFuZGVyZSBrYXR6ZW5hcnRpZ2VuIExlYmV3ZXNlbi4KKyAgICAgQ0xfRklTSAorICAgICAgICAgIEZpc2NoZSAtIGtlaW5lIE1lZXJlc3NhZXVnZXIhCisgICAgIENMX0ZMWUlORworICAgICAgICAgIERpZXNlcyBXZXNlbiBiZXdlZ3Qgc2ljaCBmbGllZ2VuZC4KKyAgICAgQ0xfRlJPRworICAgICAgICAgIEZyb2VzY2hlIC0gYXVjaCBnZWZyb3NjaHRlIFNwaWVsZXIuCisgICAgIENMX0dIT1NUCisgICAgICAgICAgR2Vpc3RlciB1bmQgZ2Vpc3RlcmhhZnRlIFdlc2VuLgorICAgICBDTF9HSE9VTAorICAgICAgICAgIEVpbiBHaG91bC4gRXIgZmFlbGx0IGF1dG9tYXRpc2NoIGluIGRpZSBLbGFzc2UgQ0xfVU5ERUFELgorICAgICBDTF9HSUFOVAorICAgICAgICAgIEVpbiByaWVzaWdlcyBMZWJld2VzZW4uCisgICAgIENMX0dOT01FCisgICAgICAgICAgRWluIEdub20uCisgICAgIENMX0dPQkxJTgorICAgICAgICAgIEVpbiBHb2JsaW4uCisgICAgIENMX0hPQkJJVAorICAgICAgICAgIEVpbiBIb2JiaXQuCisgICAgIENMX0hPQkdPQkxJTgorICAgICAgICAgIEVpbiBIb2Jnb2JsaW4uIEVyIGZhZWxsdCBhdXRvbWF0aXNjaCBhdWNoIGluIGRpZSBLbGFzc2UgQ0xfR09CTElOLgorICAgICBDTF9IVU1BTgorICAgICAgICAgIEVpbiBNZW5zY2guCisgICAgIENMX0lOT1JHQU5JQworICAgICAgICAgIEFub3JnYW5pc2NoZSBMZWJld2VzZW4gd2llIE1ldGFsbG1vbnN0ZXIKKyAgICAgQ0xfSU5TRUNUCisgICAgICAgICAgSW5zZWt0ZW4gKE5pY2h0IG1pdCBTcGlubmVuIHZlcndlY2hzZWxuKQorICAgICBDTF9MSVZJTkcKKyAgICAgICAgICBMZWJld2VzZW4gaW0gYWxsZ2VtZWluZW4uCisgICAgIENMX01BTU1BTAorICAgICAgICAgIFNhZXVnZXRpZXJlLgorICAgICBDTF9NQU1NQUxfTEFORAorICAgICAgICAgIExhbmRzYWV1Z2V0aWVyZQorICAgICBDTF9NQU1NQUxfV0FURVIKKyAgICAgICAgICBNZWVyZXNzYWV1Z2VyLgorICAgICBDTF9PUkMKKyAgICAgICAgICBFaW4gT3JrLgorICAgICBDTF9QTEFOVAorICAgICAgICAgIFBmbGFuemVuIHVuZCBwZmxhbnplbmFydGlnZSBNb25zdGVyLgorICAgICBDTF9QT0lTT04KKyAgICAgICAgICBEYXMgT2JqZWt0IGlzdCBzZWxic3QgZWluIEdpZnQKKyAgICAgQ0xfUE9JU09OT1VTCisgICAgICAgICAgRGFzIE9iamVrdCBrYW5uIGVpbmVuIFNwaWVsZXIvTlBDIHZlcmdpZnRlbi4KKyAgICAgQ0xfUkVQVElMRQorICAgICAgICAgIFJlcHRpbGllbi4KKyAgICAgQ0xfU0hBRE9XCisgICAgICAgICAgU2NoYXR0ZW53ZXNlbi4KKyAgICAgQ0xfU0tFTEVUT04KKyAgICAgICAgICBFaW4gU2tlbGV0dC4gRXMgZmFlbGx0IGF1dG9tYXRpc2NoIGluIGRpZSBLbGFzc2UgQ0xfVU5ERUFELgorICAgICBDTF9TTElNRQorICAgICAgICAgIEZ1ZXIgRWluemVsbGVyIHVuZCBhZWhubGljaGVzIFNjaGxlaW1nZXRpZXIKKyAgICAgQ0xfU05BS0UKKyAgICAgICAgICBTY2hsYW5nZW4uCisgICAgIENMX1NXSU1NSU5HCisgICAgICAgICAgRGllc2VzIFdlc2VuIGJld2VndCBzaWNoIHNjaHdpbW1lbmQuCisgICAgIENMX1RST0xMCisgICAgICAgICAgRWluIFRyb2xsLgorICAgICBDTF9VTkRFQUQKKyAgICAgICAgICBFaW4gdW50b3RlcyBMZWJld2VzZW4uCisgICAgIENMX1dBTEtJTkcKKyAgICAgICAgICBEaWVzZXMgV2VzZW4gYmV3ZWd0IHNpY2ggZ2VoZW5kLgorICAgICBDTF9WQU1QSVJFCisgICAgICAgICAgRWluIFZhbXBpci4gRXIgZmFlbGx0IGF1dG9tYXRpc2NoIGluIGRpZSBLbGFzc2UgQ0xfVU5ERUFELgorICAgICBDTF9aT01CSUUKKyAgICAgICAgICBFaW4gWm9tYmllLiBFciBmYWVsbHQgYXV0b21hdGlzY2ggaW4gZGllIEtsYXNzZSBDTF9VTkRFQUQuCisKKyAgICAgSW1wbGl6aXRlIEtsYXNzZW46CisgICAgIEJlaSBlaW5pZ2VuIEtsYXNzZW4gd2lyZCBpbSBBZGRDbGFzcygpIGF1dG9tYXRpc2NoIGVpbmUgb2RlciBtZWhyZXJlCisgICAgIHdlaXRlcmVyIEtsYXNzZW4gaGluenVnZWZ1ZWd0IHVuZCBpbSBSZW1vdmVDbGFzcygpIGRpZSBlbnRzcHJlY2hlbmRlbgorICAgICBpbXBsaXppdGVuIEtsYXNzZW4gYXVjaCBhdXRvbWF0aXNjaCBlbnRmZXJudC4KKyAgICAgV3VlbnNjaHQgbWFuIGRpZXNlIGltcGxpeml0ZW4gS2xhc3NlbiBuaWNodCwgbXVzcyBtYW4gbmFjaCBkZW0gQWRkQ2xhc3MoKQorICAgICBkaWVzZSBtaXR0ZWxzIGVpbmVzIGVudHNwcmVjaGVuZGVuIFJlbW92ZUNsYXNzKCkgZW50ZmVybmVuLgorICAgICBEaWUgaW1wbGl6aXRlbiBLbGFzc2VuIGVpbmVyIEtsYXNzZSBsYXNzZW4gc2ljaCBtaXQgSGlsZmUgZGVyIEZ1bmt0aW9uCisgICAgIFF1ZXJ5SW1wbGljaXRDbGFzc2VzKCkgaW4gQ0xBU1NEQiBoZXJhdXNmaW5kZW46CisgICAgICAgQ0xBU1NEQi0+UXVlcnlJbXBsaWNpdENsYXNzZXMoLi4uKQorICAgICBNb21lbnRhbiBzaW5kIGRpZXM6CisgICAgIENMX1pPTUJJRTogICAgICAgQ0xfVU5ERUFECisgICAgIENMX1NLRUxFVE9OOiAgICAgQ0xfVU5ERUFECisgICAgIENMX0dIT1VMOiAgICAgICAgQ0xfVU5ERUFECisgICAgIENMX1ZBTVBJUkU6ICAgICAgQ0xfVU5ERUFECisgICAgIENMX0hPQkdPQkxJTjogICAgQ0xfR09CTElOCisgICAgIENMX01BTU1BTF9MQU5EOiAgQ0xfTUFNTUFMLCBDTF9BTklNQUwKKyAgICAgQ0xfTUFNTUFMX1dBVEVSOiBDTF9NQU1NQUwsIENMX0FOSU1BTAorICAgICBDTF9TTkFLRTogICAgICAgIENMX1JFUFRJTEUKKyAgICAgQ0xfQVJBQ0hOSUQ6ICAgICBDTF9BTklNQUwKKyAgICAgQ0xfQklSRDogICAgICAgICBDTF9BTklNQUwKKyAgICAgQ0xfRklTSDogICAgICAgICBDTF9BTklNQUwKKyAgICAgQ0xfRlJPRzogICAgICAgICBDTF9BTklNQUwKKyAgICAgQ0xfSU5TRUNUOiAgICAgICBDTF9BTklNQUwKKyAgICAgQ0xfTUFNTUFMOiAgICAgICBDTF9BTklNQUwKKyAgICAgQ0xfUkVQVElMRTogICAgICBDTF9BTklNQUwKKyAgICAgQ0xfU05BS0U6ICAgICAgICBDTF9BTklNQUwKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBkYXMgT2JqZWt0IGluIGVpbmUgZGVyIGFuZ2VnZWJlbmVuIEtsYXNzZW4gZmFlbGx0LCBhbnNvbnN0ZW4gMC4KKworU0lFSEUgQVVDSDoKKyAgICAgQWRkQ2xhc3MoKSwgUmVtb3ZlQ2xhc3MoKSwgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisgICAgIFBfQ0xBU1MKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjAuMDEuMjAxNSwgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9sZnVuIGIvZG9jL2xmdW4vbGZ1bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWRkNDVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbGZ1bgpAQCAtMCwwICsxLDEyIEBACitOQU1FOgorCWxmdW4oKQorCitERVNDUklQVElPTjoKKwlUaGlzIGRpcmVjdG9yeSBjb250YWlucyBkZXNjcmlwdGlvbnMgZm9yIHRoZSBsZnVucyB1c2VkIGJ5CisJQW15bGFhcidzIHZlcnNpb24gb2YgdGhlIExQQyBwYXJzZXIuCisKKwlUaGVzZSBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGFwcGxpZWQgYnkgdGhlIHBhcnNlciB0byB0aGUgTFBDCisJb2JqZWN0cyBvbiB2YXJpb3VzIG9jY2FzaW9ucy4KKworU0VFIEFMU086CisJZWZ1bihFKSwgbWFzdGVyKE0pLCBjb25jZXB0cyhDKSwgbHBjKExQQyksIGRyaXZlcihEKQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vbG9jYXRlX29iamVjdHMgYi9kb2MvbGZ1bi9sb2NhdGVfb2JqZWN0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDU2ZTlhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbG9jYXRlX29iamVjdHMKQEAgLTAsMCArMSw1NCBAQAorbG9jYXRlX29iamVjdHMoKQorCitGVU5LVElPTjoKKyAgICAgb2JqZWN0ICpsb2NhdGVfb2JqZWN0cyhzdHJpbmcgZGVzYywgaW50IGluZm8pOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvY29udGFpbmVyL3Jlc3RyaWN0aW9ucy5jCisKK0FSR1VNRU5URToKKyAgICAgZGVzYworICAgICAgICAgIERpZSBVbXNjaHJlaWJ1bmcgZGVzIGdlc3VjaHRlbiBPYmpla3Rlcy4KKworICAgICBpbmZvCisgICAgICAgICAgSXN0IHVuZ2xlaWNoIDAsIHdlbm4gZGllc2UgRnVua3Rpb24gdm9uIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKKyAgICAgICAgICBhdXMgYXVmZ2VydWZlbiB3dXJkZS4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVzZSBGdW5rdGlvbiBlcndlaXRlcnQgZGllIEZ1bmt0aW9uYWxpdGFldCB2b24gcHJlc2VudF9vYmplY3RzKCkKKyAgICAgaW5zb2Zlcm4sIGFscyBkYXNzIGVzIG1vZWdsaWNoIGlzdCwgYXVjaCBub2NoIEJlaGFlbHRlciBpbm5lcmhhbGIgZGVzCisgICAgIEJlaGFlbHRlcnMgenUgZHVyY2hzdWNoZW4uIERhcyBnZW5hdWUgVmVyaGFsdGVuIGhhZW5ndCB2b24gZGVzYyBhYjoKKworICAgICBJc3QgZGVzYyB2b24gZGVyIEZvcm0gIjxpZD4iLCBzbyB3aXJkIGRhcyBFcmdlYm5pcyB2b24KKyAgICAgcHJlc2VudF9vYmplY3RzKGRlc2MpIHp1cnVlY2tnZWdlYmVuLgorCisgICAgIElzdCBkZXNjIHZvbiBkZXIgRm9ybSAiPGdlc3VjaHQ+IGluIDxpZD4iLCBzbyB3aXJkIGluIGFsbGVuIE9iamVrdGVuLAorICAgICBkaWUgdm9uIHByZXNlbnRfb2JqZWN0cygiPGlkPiIpIGVyZmFzc3Qgd3VyZGVuLAorICAgICBsb2NhdGVfb2JqZWN0cygiPGRlc2M+IikgYXVmZ2VydWZlbi4gWnVydWVja2dlZ2ViZW4gd2VyZGVuIGFsbGUgYXVmCisgICAgIGRpZXNlIFdlaXNlIGdlZnVuZGVuZW4gT2JqZWt0ZS4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgQXJyYXkgdm9uIE9iamVrdGVuLCBkaWUgYXVmIGRpZSBvYmVuIGdlc2NoaWxkZXJ0ZSBBcnQgdW5kIFdlaXNlCisgICAgIGVybWl0dGVsdCB3dXJkZW4uIEtvbm50ZSBrZWluIE9iamVrdCBlcm1pdHRlbHQgd2VyZGVuLCB3aXJkIGVpbiBsZWVyZXMKKyAgICAgQXJyYXkgenVydWVja2dlZ2ViZW4uCisKK0JFTUVSS1VOR0VOOgorICAgICBUaGVvcmV0aXNjaCBzb2xsdGUgZXMgbW9lZ2xpY2ggc2VpbiwgdWViZXIgZGVzYyByZWt1cnNpdiBtZWhyZXJlCisgICAgIEJlaGFlbHRlcmViZW5lbiBlcmZhc3NlbiB6dSBrb2VubmVuIChldHdhIG1pdCAic2Nod2VydCBpbiBiZXV0ZWwgaW4KKyAgICAgYmV1dGVsIGluIHdhcmdvbiIpLiBJbiBkZXIgYWt0dWVsbGVuIEltcGxlbWVudGllcnVuZyBrbGFwcHQgZGFzIGplZG9jaAorICAgICBuaWNodDsgbmFjaCBkZW0gZXJzdGVuICJpbiIgaXN0IFNjaGx1c3MhCisKK0JFSVNQSUVMRToKKyAgICAgV2FzIHN0ZWNrdCBhbGxlcyBkZW0gQmV1dGVsLCBkZW4gZGVyIFNwaWVsZXIgYmVpIHNpY2ggdHJhZWd0PworCisgICAgIG9iamVjdCAqb2JzOworICAgICBvYnMgPSB0aGlzX3BsYXllcigpLT5sb2NhdGVfb2JqZWN0cygiYWxsZXMgaW4gYmV1dGVsIik7CisKKyAgICAgVHJhZWd0IGRlciBTcGllbGVyIGtlaW5lbiBCZXV0ZWwgYmVpIHNpY2ggb2RlciBpc3QgZGllc2VyIGxlZXIsIHNvIHdpcmQKKyAgICAgZWluIGxlZXJlcyBBcnJheSB6dXJ1ZWNrZ2VnZWJlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgcHJlc2VudF9vYmplY3RzKCksIC9zdGQvY29udGFpbmVyL3Jlc3RyaWN0aW9ucy5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoyMDozNiAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vbG9nb24gYi9kb2MvbGZ1bi9sb2dvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBmMWUwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbG9nb24KQEAgLTAsMCArMSwxNSBAQAorbG9nb24oKQorCitTWU5PUFNJUzoKKwlpbnQgbG9nb24odm9pZCkKKworREVTQ1JJUFRJT046CisJV2hlbiB0aGUgcGFyc2VyIGFjY2VwdHMgYSBuZXcgY29ubmVjdGlvbiwgaXQgZmlyc3QgY2FsbHMKKwljb25uZWN0KCkgaW4gdGhlIG1hc3RlciBvYmplY3QgYW5kIHRoZW4gYXBwbGllcyBsb2dvbigpIHRvCisJdGhlIG9iamVjdCB0aGF0IGlzIHJldHVybmVkIGJ5IHRoZSBtYXN0ZXIuIFRoYXQgd2lsbCB1c3VhbGx5IGJlCisJYSBzcGVjaWFsIGxvZ2luIG9iamVjdCwgdGhhdCBpcyBleHBlY3RlZCB0byBjbG9uZSBhbmQgZ2V0IGdvaW5nCisJYSB1c2VyIHNoZWxsIG9yIHBsYXllciBvYmplY3QuCisJU2hvdWxkIHJldHVybiAwIG9uIGZhaWx1cmUsIGV2ZXJ5dGhpbmcgZWxzZSBtZWFucyBzdWNjZXNzLgorCitTRUUgQUxTTzoKKwljb25uZWN0KE0pCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9sb25nIGIvZG9jL2xmdW4vbG9uZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGFjNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbG9uZwpAQCAtMCwwICsxLDMxIEBACitsb25nKCkKK0ZVTktUSU9OOgorICAgICB2YXJhcmdzIHN0cmluZyBsb25nKGludCBtb2RlKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMKKworQVJHVU1FTlRFOgorICAgICBpbnQgbW9kZQkJLSBNb2RpZmlrYXRvcmVuIGZ1ZXIgZGllIEFuemVpZ2UsIGZhbGxzIHRoaXNfb2JqZWN0KCkKKwkJCSAgZWluIENvbnRhaW5lciBpc3QKKwkJCSAgKHNpZWhlICJtYW4gbWFrZV9pbnZsaXN0IikKKworQkVTQ0hSRUlCVU5HOgorICAgICBEZXIgSW5oYWx0IGRlciBQcm9wZXJ0eSBQX0xPTkcgd2lyZCBhdXNnZXdlcnRldCB1bmQgenVydWVja2dlZ2ViZW4uCisgICAgIEZhbGxzIGRhcyBPYmpla3QgZWluIENvbnRhaW5lciB1bmQgdHJhbnNwYXJlbnQgKG9mZmVuKSBpc3QsIHdpcmQKKyAgICAgenVkZW0gbWFrZV9pbnZsaXN0KCkgYXVmIGRlbiBJbmhhbHQgenVydWVja2dlZ2ViZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERpZSBMYW5nYmVzY2hyZWlidW5nIGRlcyBPYmpla3Rlcy4KKworQkVNRVJLVU5HRU46CisgICAgIER1cmNoIFVlYmVybGFkZW4gdm9uIGxvbmcoKSBsYXNzZW4gc2ljaCBub2NoIHdlaXRlcmUgRWlnZW5zY2hhZnRlbiBkZXMKKyAgICAgT2JqZWt0ZXMgYW56ZWlnZW4uIEJlaGFlbHRlciBrb2VubmVuIHp1bSBCZWlzcGllbCBub2NoIGlocmVuIEluaGFsdAorICAgICBhbnplaWdlbiwgTGViZXdlc2VuIGlocmVuIEdlc3VuZGhlaXRzenVzdGFuZCwgby5hZS4KKworU0lFSEUgQVVDSDoKKyAgICAgQWVobmxpY2hlczoJc2hvcnQoKQorICAgICBQcm9wZXJ0aWVzOglQX0xPTkcsIFBfSU5WSVMsIFBfVFJBTlNQQVJFTlQKKyAgICAgU29uc3RpZ2VzOgkJbWFrZV9pbnZsaXN0KCkKKworMTEuIE1haSAyMDA0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vbWFrZV9pbW1vcnRhbCBiL2RvYy9sZnVuL21ha2VfaW1tb3J0YWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmNDkwMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL21ha2VfaW1tb3J0YWwKQEAgLTAsMCArMSwyNyBAQAorbWFrZV9pbW1vcnRhbCgpDQorDQorRlVOS1RJT046DQorICAgICB2b2lkIG1ha2VfaW1tb3J0YWwoKTsNCisNCitERUZJTklFUlQgSU46DQorICAgICAvc3RkL25wYy9jb21iYXQuYw0KKw0KK0JFU0NIUkVJQlVORzoNCisgICAgIE1hY2h0IGRlbiBOUEMgZvxyIDUgTWludXRlbiB1bmFuZ3JlaWZiYXIgdW5kIGhlaWx0IGlobi4NCisNCisgICAgIFdpcmQgYmVpIEZlaGxlcm4gaW0gSGVyenNjaGxhZyBkZXMgTlBDcyBnZXJ1ZmVuIHVtIEJ1Z251dHp1bmcNCisgICAgIHp1IHVudGVyYmluZGVuLg0KKw0KKyAgICAgQXVzc2NocmlmdDoNCisgICAgICIuLi4gdmVyc3RlY2t0IHNpY2ggaGludGVyIGVpbmVtIEZlaGxlciBpbSBSYXVtLVplaXQtR2VmdWVnZSB1bmQNCisgICAgICBlbnRnZWh0IHNvIHZvcnVlYmVyZ2VoZW5kIGFsbGVuIEFuZ3JpZmZlbi4iDQorDQorQkVNRVJLVU5HRU46DQorICAgICBOaWNodCBtaXNzYnJhdWNoZW4uDQorDQorU0lFSEUgQVVDSDoNCisgICAgIE1ldGhvZGVuOiAgICAgICBoZWFydF9iZWF0KCksIHN0YXRpYyBfY2hlY2tfaW1tb3J0YWxpdHkoKQ0KKyAgICAgTWFzdGVyOiAgICAgICAgIGhlYXJ0X2JlYXRfZXJyb3IoKQ0KKyAgICAgUHJvcGVydGllczogICAgICJ0aW1lX3RvX21vcnRhbGl0eSINCisNCisxLkp1bmkgMjAwNyBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL21ha2VfaW52bGlzdCBiL2RvYy9sZnVuL21ha2VfaW52bGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmZiY2NhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbWFrZV9pbnZsaXN0CkBAIC0wLDAgKzEsMzggQEAKK21ha2VfaW52bGlzdCgpCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBtaXhlZCBtYWtlX2ludmxpc3Qob2JqZWN0IHZpZXdlciwgbWl4ZWQgaW52LCBpbnQgZmxhZ3MpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9jb250YWluZXIvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgIG9iamVjdCB2aWV3ZXIJLSBkYXMgT2JqZWt0LCB3ZWxjaGVzIHNpY2ggZGVuIEluaGFsdCBhbnNpZWh0IChpbgorCQkJICBkZXIgUmVnZWwgdGhpc19wbGF5ZXIoKSkKKyAgICAgbWl4ZWQgaW52CQktIGVpbiBBcnJheSB2b24gT2JqZWt0ZW4sIGRpZSBpbiBkaWUgTGlzdGUKKwkJCSAgYXVmZ2Vub21tZW4gd2VyZGVuIHNvbGxlbgorICAgICBpbnQgZmxhZ3MJCS0gRm9sZ2VuZGUgV2VydGUga29lbm5lbiB2ZXJPREVSdCB3ZXJkZW46CisJCQkgIDE6IGRhcyBJbnYgbmljaHQgYWxzIFN0cmluZywgc29uZGVybiBhbHMgZWluCisJCQkgICAgIEFycmF5IHp1cnVlY2tnZWJlbgorCQkJICAyOiBnbGVpY2hlIE9iamVrdGUgbmljaHQgenVzYW1tZW5nZWZhc3NlbgorCQkJICA0OiB1bnRlcmRydWVja3QgZGllIEF1c2dhYmUgZGVzIERhdGVpbmFtZW5zIGhpbnRlcgorCQkJICAgICBqZWRlbSB0cm90eiBlaW5nZXNjaGFsdGV0ZW0gTWFnaWVybW9kdXMKKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWUgS3VyemJlc2NocmVpYnVuZ2VuIGRlciBPYmpla3RlIGluIGludiB3ZXJkZW4genUgZWluZXIgTGlzdGUKKyAgICAgenVzYW1tZW5nZWZhc3N0IChlaW5lIFplaWxlIHBybyBPYmpla3QpLiBVbnNpY2h0YmFyZSBPYmpla3RlIHRhdWNoZW4gaW4KKyAgICAgZGllc2VyIExpc3RlIG5pY2h0IGF1Zi4KKworICAgICBJc3Qgdmlld2VyIGVpbiBNYWdpZXIgbWl0IGVpbmdlc2NoYWx0ZXRlbSBNYWdpZXJtb2R1cywgc28gd2lyZCBoaW50ZXIKKyAgICAgZGllIEt1cnpiZXNjaHJlaWJ1bmdlbiBub2NoIGRlciBEYXRlaW5hbWUgZGVzIGpld2VpbGlnZW4gT2JqZWt0ZXMgaW4KKyAgICAgZWNraWdlbiBLbGFtbWVybiBhbmdlZ2ViZW4uIFVuc2ljaHRiYXJlIE9iamVrdGUgZXJzY2hlaW5lbiBpbiBkaWVzZW0KKyAgICAgRmFsbCBhbHMgRmlsZW5hbWVuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBFaW4gU3RyaW5nIG9kZXIgZWluIEFycmF5LCBkaWUgZGFzIGludiBiZXNjaHJlaWJlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgS29tbWFuZG9rZXR0ZToJc2hvcnQoKQorICAgICBQcm9wZXJ0aWVzOglQX1NIT1JULCBQX0lOVklTLCBQX1dBTlRTX1RPX0xFQVJOCisgICAgIFNvbnN0aWdlczoJCVBfUkVGRVJFTkNFX09CSkVDVAorCitMYXN0IG1vZGlmaWVkOiBUdWUgT2N0IDE1IDEwOjEwOjAwIDIwMDIgYnkgUmlrdXMKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL21hc3Rlci9BZGRXaXphcmRGb3JVSUQgYi9kb2MvbGZ1bi9tYXN0ZXIvQWRkV2l6YXJkRm9yVUlECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODQ2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9tYXN0ZXIvQWRkV2l6YXJkRm9yVUlECkBAIC0wLDAgKzEsNDcgQEAKK0FkZFdpemFyZEZvclVJRCgpCisKK0ZVTktUSU9OOgorICAgIHN0cmluZyogQWRkV2l6YXJkRm9yVUlEKHN0cmluZyB1aWQsIHN0cmluZyB3aXphcmQpOworCitERUZJTklFUlQgSU46CisgICAgL3NlY3VyZS9tYXN0ZXIvdXNlcmluZm8uYworCitBUkdVTUVOVEU6CisgICAgdWlkCisgICAgICBEaWUgVUlELCBmdWVyIGRpZSBtYW4gZWluZW4gKHdlaXRlcmVuKSB2ZXJhbnR3b3J0bGljaGVuIE1hZ2llcgorICAgICAgZXhwbGl6aXQgZWludHJhZ2VuIG1vZWNodGUuCisgICAgd2l6YXJkCisgICAgICBEZXIgTWFnaWVyLCBkZW4gbWFuIGVpbnRyYWdlbiBtb2VjaHRlLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllIEZ1bmt0aW9uIHRyYWVndCBlaW5lbiBNYWdpZXIgJ3dpemFyZCcgZXhwbGl6aXQgYWxzIHZlcmFudHdvcnRsaWNoZW4KKyAgICBNYWdpZXIgZnVlciBkaWUgVUlEICd1aWQnIGVpbi4gSGllcmJlaSBrYW5uICd1aWQnIHNvZ2FyIGRlciBOYW1lIGVpbmVzCisJCWFuZGVyZW4gTWFnaWVycyBzZWluLCBkZXNzZW4gVUlEcyAnd2l6YXJkJyBzb3p1c2FnZW4gImFkb3B0aWVydCIuCisKKwkJQmVyZWNodGlndCB6dW0gRWludHJhZ2VuIHZvbiBNYWdpZXJuIGZ1ZXIgYmVzdGltbXRlIFVJRHMgc2luZCBhbGxlIE1hZ2llciwKKyAgICBkaWUgKGltcGxpeml0IG9kZXIgZXhwbGl6aXQpIHZlcmFudHdvcnRsaWNoIGZ1ZXIgZGllIGpld2VpbGlnZSBVSUQgc2luZC4KKyAgICBaLkIuIGthbm4gWmVzc3RyYSBvaG5lIHdlaXRlcmVzIGplbWFuZCB3ZWl0ZXJlbiBhbHMgdmVyYW50d29ydGxpY2ggZnVlcgorICAgIGQuaW5zZWxuLnplc3N0cmEgZWludHJhZ2VuLgorCitSVWVDS0dBQkVXRVJUOgorICAgIFp1cnVlY2tnZWxpZWZlcnQgd2lyZCBlaW4gQXJyYXkgdm9uIFN0cmluZ3MsIGplZGVzIEVsZW1lbnQgaXN0IGVpbmUgVUlELAorICAgIGZ1ZXIgZGllIGRpZXIgTWFnaWVyIGpldHp0IGV4cGxpeml0IGVpbmdldHJhZ2VuIGlzdC4KKworQkVNRVJLVU5HRU46CisgICAgRXMgaXN0IG5pY2h0IG5vZXRpZywgei5CLiBaZXNzdHJhIGFscyB2ZXJhbnR3b3J0bGljaCBmdWVyIGQuaW5zZWxuLnplc3N0cmEKKyAgICBlaW56dXRyYWdlbiwgZGEgc2llIG9obmVoaW4gc2Nob24gaW1wbGl6aXQgZGFmdWVyIHp1c3RhZW5kaWcgaXN0LiBBdWNoCisgICAgZnVlciBSTXMgYnp3LiBHTXMgbXVzcyBpaHJlIFJlZ2lvbiBiencuIEdpbGRlIG5pY2h0IGV4cGxpeml0IGVpbmdldHJhZ2VuIAorICAgIHdlcmRlbi4KKworQkVJU1BJRUxFOgorICAgIG1hc3RlcigpLT5BZGRXaXphcmRGb3JVSUQoInAud2F0ZXJsdWgiLCJ6b29rIik7CisJCQorCQlzdHJpbmcgKnVpZHMgPSBtYXN0ZXIoKS0+QWRkV2l6YXJkRm9yVUlEKCJqb2YiLCJ6b29rIik7CisgICAgcHJpbnRmKCJab29rIGlzdCBudW4gZXhwbGl6aXQgenVzdGFlbmRpZyBmdWVyOiAlc1xuIixDb3VudFVwKHVpZHMpKTsKKworU0lFSEUgQVVDSDoKKyAgICBRdWVyeVdpemFyZHNGb3JVSUQoKSwgUXVlcnlVSURzRm9yV2l6YXJkLAorCQlSZW1vdmVXaXphcmRGcm9tVUlEKCkKKworMjAuMDIuMjAwNywgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9tYXN0ZXIvUXVlcnlVSURBbGlhcyBiL2RvYy9sZnVuL21hc3Rlci9RdWVyeVVJREFsaWFzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYTg0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9tYXN0ZXIvUXVlcnlVSURBbGlhcwpAQCAtMCwwICsxLDQzIEBACitRdWVyeVVJREFsaWFzKCkKKworRlVOS1RJT046CisgICAgdmFyYXJncyBzdHJpbmcqIFF1ZXJ5VUlEc0ZvcldpemFyZChzdHJpbmcgdWlkYWxpYXMsIGludCByZWN1cnNpdmUpOworCitERUZJTklFUlQgSU46CisgICAgL3NlY3VyZS9tYXN0ZXIvdXNlcmluZm8uYworCitBUkdVTUVOVEU6CisgICAgdWlkYWxpYXMKKyAgICAgIFVJRCwgZGllIGV4cGFuZGllcnQgd2VyZGVuIHNvbGwuCisgICAgcmVjdXJzaXZlIChvcHRpb25hbCkKKyAgICAgIEdpYnQgYW4sIG9iIFF1ZXJ5VUlEQWxpYXMoKSAoaW5kaXJla3QpIHJla3Vyc2l2IGF1ZmdlcnVmZW4gd3VyZGUuCisgICAgICBTb2xsdGUgbm9ybWFsZXJ3ZWlzZSBuaWNodCBwZXIgSGFuZCBnZXNldHp0IHdlcmRlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZSBGdW5rdGlvbiBlcm1pdHRlbHQgYXVzIGVpbmVyICJBbGlhcy1VSUQiIGRpZSBVSUQsIGZ1ZXIgZGllIHNpZSBzdGVodC4KKyAgICBIaWVyYmVpIHdlcmRlbiBmb2xnZW5kZSBVSUQtQWxpYXNlIGJlcnVlY2tzaWNodGlndDoKKyAgICAicmVnaW9uIjogICAgZC5yZWdpb24uKiArIHJlZ2lvbiArIGQucmVnaW9uCisgICAgImdpbGRlIjogICAgIEdVSUxELmdpbGRlLCBHVUlMRC5naWxkZW5zcGVsbGJvb2ssIHAuZ2lsZGUKKyAgICAicCI6ICAgICAgICAgcC4qIChvaG5lIHAuc2VydmljZSkKKyAgICAicC5zZXJ2aWNlIjogcC5zZXJ2aWNlLioKKyAgICAibWFnaWVyaWQiOiAgUXVlcnlVSURzRm9yV2l6YXJkKCkKKworICAgIERhcyBFcmdlYm5pcyBkaWVzZXIgRnVua3Rpb24gd2lyZCBsYWVuZ2VyZSBaZWl0IGdlY2FjaGV0IChiaXMgenUgMjRoKS4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICBadXJ1ZWNrZ2VsaWVmZXJ0IHdpcmQgZWluIEFycmF5IHZvbiBTdHJpbmdzLCBqZWRlcyBFbGVtZW50IGlzdCBlaW5lIFVJRC4KKyAgICBTb2xsdGUgdWlkYWxpYXNlIGtlaW5lcyBkZXIgby5nLiBzZWluLCB3aXJkIGVpbiAoe3VpZGFsaWFzfSkgZ2VsaWVmZXJ0LgorCitCRUlTUElFTEU6CisgICAgc3RyaW5nICp1aWRzID0gbWFzdGVyKCktPlF1ZXJ5VUlEQWxpYXMoInNjaGF0dGVud2VsdCIpOworICAgIC8vIHVpZHMgZW50aGFlbHQgbnVuOgorICAgIC8vICh7ImQuYW5mYWVuZ2VyIiwiYW5mYWVuZ2VyIiwiZC5hbmZhZW5nZXIuYXJrIiwiZC5hbmZhZW5nZXIuZW5ub3giLAorICAgIC8vICAgImQuYW5mYWVuZ2VyLmh1bW5pIiwiZC5hbmZhZW5nZXIua2lyaWEiLCJkLmFuZmFlbmdlci5rb256ZXB0ZSIsCisgICAgLy8gICAiZC5hbmZhZW5nZXIubWlyaWwifSkKKworU0lFSEUgQVVDSDoKKyAgICBRdWVyeVdpemFyZHNGb3JVSUQoKSwgCisJCUFkZFdpemFyZEZvclVJRCgpLCBSZW1vdmVXaXphcmRGcm9tVUlEKCkKKworMTYuMTIuMjAwNywgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9tYXN0ZXIvUXVlcnlVSURzRm9yV2l6YXJkIGIvZG9jL2xmdW4vbWFzdGVyL1F1ZXJ5VUlEc0ZvcldpemFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDAyOGMxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbWFzdGVyL1F1ZXJ5VUlEc0ZvcldpemFyZApAQCAtMCwwICsxLDQyIEBACitRdWVyeVVJRHNGb3JXaXphcmQoKQorCitGVU5LVElPTjoKKyAgICB2YXJhcmdzIHN0cmluZyogUXVlcnlVSURzRm9yV2l6YXJkKHN0cmluZyB3aXpuYW1lLCBpbnQgcmVjdXJzaXZlKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zZWN1cmUvbWFzdGVyL3VzZXJpbmZvLmMKKworQVJHVU1FTlRFOgorICAgIHdpem5hbWUKKyAgICAgIERlciBNYWdpZXIsIGZ1ZXIgZGVuIG1hbiBkaWUgVUlEcyBlcm1pdHRlbG4gd2lsbCwgZnVlciBkaWUgZXIKKyAgICAgIHp1c3RhZW5kaWcgaXN0LgorICAgIHJlY3Vyc2l2ZSAob3B0aW9uYWwpCisgICAgICBHaWJ0IGFuLCBvYiBRdWVyeVVJRHNGb3JXaXphcmQoKSAoaW5kaXJla3QpIHJla3Vyc2l2IGF1ZmdlcnVmZW4gd3VyZGUuCisgICAgICBTb2xsdGUgbm9ybWFsZXJ3ZWlzZSBuaWNodCBwZXIgSGFuZCBnZXNldHp0IHdlcmRlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZSBGdW5rdGlvbiBlcm1pdHRlbHQgZGllIFVJRHMsIGZ1ZXIgZGllIGRpZXNlciBNYWdpZXIgenVzdGFlbmRpZyBpc3QuCisgICAgRGFiZWkgd2lyZCBpbXBsaXppZXJ0IGJlcnVlY2tzaWNodGlndCwgd2VubiBkZXIgTWFnaWVyIFJNIGVpbmVyIFJlZ2lvbgorICAgIG9kZXIgR2lsZGVubWFnaWVyIGVpbmVyIEdpbGRlIGlzdCwgZWJlbnNvIHdpZSBWZXJ6ZWljaG5pc3NlIGluIGRlbgorICAgIFJlZ2lvbmVuIG9kZXIgaW4gL3Avc2VydmljZS4KKyAgICBBdXNzZXJkZW0gd2lyZCBuYWNoZ2VzY2hhdXQsIGZ1ZXIgd2VsY2hlIFVJRHMgZGllc2VyIE1hZ2llciBleHBsaXppdAorICAgIGVpbmdldHJhZ2VuIHdvcmRlbiBpc3QuCisgICAgV2VubiB6LkIuIE1hZ2llciBBIGF1Y2ggZnVlciBhbGxlIFVJRHMgdm9uIE1hZ2llciBCIHp1c3RhZW5kaWcgc2VpbgorICAgIHNvbGx0ZSwgbGllZmVydCBkaWUgRnVua3Rpb24gYXVjaCBkaWUgVUlEcyB2b24gQiB6dXJ1ZWNrLgorCitSVWVDS0dBQkVXRVJUOgorICAgIFp1cnVlY2tnZWxpZWZlcnQgd2lyZCBlaW4gQXJyYXkgdm9uIFN0cmluZ3MsIGplZGVzIEVsZW1lbnQgaXN0IGVpbmUgVUlELgorICAgIFNvbGx0ZSBmdWVyIGVpbmVuIE5hbWVuIGtlaW5lIFVJRCBlcm1pdHRlbGJhciBzZWluLCBpc3QgZGFzIEFycmF5cyBsZWVyLgorCitCRUlTUElFTEU6CisgICAgc3RyaW5nICp1aWRzID0gbWFzdGVyKCktPlF1ZXJ5VUlEc0ZvcldpemFyZCgiZW5ub3giKTsKKyAgICAvLyB1aWRzIGVudGhhZWx0IG51bjoKKyAgICAvLyAoeyJlbm5veCIsImQuYW5mYWVuZ2VyLmVubm94IiwiZC5zY2hhdHRlbndlbHQuZW5ub3giLAorICAgIC8vICAgInAuc2VydmljZS5lbm5veCIsIkdVSUxELmNoYW9zIiwicC5jaGFvcyJ9KQorCitTSUVIRSBBVUNIOgorICAgIFF1ZXJ5V2l6YXJkc0ZvclVJRCgpLCAKKwkJQWRkV2l6YXJkRm9yVUlEKCksIFJlbW92ZVdpemFyZEZyb21VSUQoKQorCisxNi4xMi4yMDA3LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL21hc3Rlci9RdWVyeVdpemFyZHNGb3JVSUQgYi9kb2MvbGZ1bi9tYXN0ZXIvUXVlcnlXaXphcmRzRm9yVUlECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDk1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9tYXN0ZXIvUXVlcnlXaXphcmRzRm9yVUlECkBAIC0wLDAgKzEsNDYgQEAKK1F1ZXJ5V2l6YXJkc0ZvclVJRCgpCisKK0ZVTktUSU9OOgorICAgIHZhcmFyZ3Mgc3RyaW5nKiBRdWVyeVdpemFyZHNGb3JVSUQoc3RyaW5nIHVpZCwgaW50IHJlY3Vyc2l2ZSk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc2VjdXJlL21hc3Rlci91c2VyaW5mby5jCisKK0FSR1VNRU5URToKKyAgICB1aWQKKyAgICAgIERpZSBVSUQsIGZ1ZXIgZGllIG1hbiBkaWUgTWFnaWVyIGVybWl0dGVsbiB3aWxsLCBkaWUgZnVlciBzaWUKKyAgICAgIHp1c3RhZW5kaWcgc2luZC4KKyAgICByZWN1cnNpdmUgKG9wdGlvbmFsKQorICAgICAgZ2lidCBhbiwgb2IgZGFzIFF1ZXJ5V2l6YXJkc0ZvclVJRCgpIChpbmRpcmVrdCkgYXVzIGVpbmVtIAorICAgICAgUXVlcnlXaXphcmRzRm9yVUlEKCkgaGVyYXVzIGdlcnVmZW4gd3VyZGUuIFNvbGx0ZSBuaWNodCBtYW51ZWxsIGdlc2V0enQKKyAgICAgIHdlcmRlbi4KKworQkVTQ0hSRUlCVU5HOgorICAgIERpZSBGdW5rdGlvbiBlcm1pdHRlbHQgZGllIE1hZ2llciwgZGllIGZ1ZXIgZGllc2UgVUlEIHp1c3RhZW5kaWcgc2luZC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICBadXJ1ZWNrZ2VsaWVmZXJ0IHdpcmQgZWluIEFycmF5IHZvbiBTdHJpbmdzLCBqZWRlcyBFbGVtZW50IGlzdCBlaW4gTWFnaWVyLgorICAgIFNvbGx0ZSBmdWVyIGVpbmUgVUlEIGtlaW4gTWFnaWVyIGVybWl0dGVsYmFyIHNlaW4sIGlzdCBkYXMgQXJyYXkgbGVlci4KKyAgICBXZW5uIHouQi4gZnVlciBkaWUgVUlEIGRlciBNYWdpZXIgIkF0YW11ciIgZ2VmdW5kZW4gd2lyZCwgYWJlciBmdWVyIGFsbGUgCisgICAgVUlEcyB2b24gIkF0YW11ciIgYXVjaCBkZXIgTWFnaWVyICJSdW1hdGEiIHp1c3RhZW5kaWcgc2VpbiBzb2xsdGUsIHdpcmQgCisgICAgIlJ1bWF0YSIgdWViZXIgZWluZSByZWt1cnNpdmUgU3VjaGUgZ2VmdW5kZW4uCisKK0JFTUVSS1VOR0VOOgorICAgIFdlbm4gZGllIFVJRCBkZW4gTWFnaWVyIG5pY2h0IGltcGxpeml0IGVudGhhZWx0ICh6LkIuIEdVSUxELmdpbGRlLCBpbSAKKyAgICBHZWdlbnNhdHogenUgZC5yZWdpb24ubWFnaWVyKSwgZmluZGV0IGRpZXNlIEZ1bmt0aW9uIG51ciBNYWdpZXIsIGZ1ZXIgZGllIAorICAgIHNlaXQgTGFkZW4gZGVzIE1hc3RlciBiZXJlaXRzIGVpbm1hbCBnZXRfdXNlcmluZm8oKSBvZGVyIAorICAgIFF1ZXJ5VUlEc0ZvcldpemFyZCgpIGltIE1hc3RlciBnZXJ1ZmVuIHd1cmRlLCB3YXMgei5CLiBFaW5sb2dnZW4gcGFzc2llcnQuCisgICAgTWFnaWVyLCBkaWUgbGFuZyBuaWNodCBlaW5sb2dndGVuLCB3ZXJkZW4gYWxzbyBtYW5jaG1hbCBuaWNodCBnZWZ1bmRlbiwKKyAgICB3YXMgaW4gZGVyIFJlZ2VsIG5pY2h0IHNjaGxpbW0gc2VpbiBzb2xsdGUsIGRhIHNpZSBqYSBvaG5laGluIGRlbgorICAgIGVudHNwcmVjaGVuZGVuIENvZGUgZ2VyYWRlIG5pY2h0IHdhcnRlbi4uLgorCitCRUlTUElFTEU6CisgICAgc3RyaW5nICp3aXogPSBtYXN0ZXIoKS0+UXVlcnlXaXphcmRzKCJHVUlMRC5rbGVydXMiKTsKKyAgICAvLyB3aXogZW50aGFlbHQgbnVuOiAoeyJtb3Jnb3RoIiwibWFnZGFsZW5hIn0pCisKK1NJRUhFIEFVQ0g6CisgICAgUXVlcnlVSURzRm9yV2l6YXJkKCksIAorCQlBZGRXaXphcmRGb3JVSUQoKSwgUmVtb3ZlV2l6YXJkRnJvbVVJRCgpCisKKzE2LjEyLjIwMDcsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vbWFzdGVyL1JlbW92ZVdpemFyZEZyb21VSUQgYi9kb2MvbGZ1bi9tYXN0ZXIvUmVtb3ZlV2l6YXJkRnJvbVVJRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTk3MTMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbWFzdGVyL1JlbW92ZVdpemFyZEZyb21VSUQKQEAgLTAsMCArMSwzOCBAQAorUmVtb3ZlV2l6YXJkRnJvbVVJRCgpCisKK0ZVTktUSU9OOgorICAgIHN0cmluZyogUmVtb3ZlV2l6YXJkRnJvbVVJRChzdHJpbmcgdWlkLCBzdHJpbmcgd2l6YXJkKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zZWN1cmUvbWFzdGVyL3VzZXJpbmZvLmMKKworQVJHVU1FTlRFOgorICAgIHVpZAorICAgICAgRGllIFVJRCwgZnVlciBkaWUgbWFuIGVpbmVuIHp1c3RhZW5kaWdlbiBNYWdpZXIgYXVzdHJhZ2VuIHdpbGwuCisgICAgd2l6YXJkCisgICAgICBEZXIgTWFnaWVyLCBkZW4gbWFuIGF1c3RyYWdlbiBtb2VjaHRlLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGllIEZ1bmt0aW9uIGxvZXNjaHQgZGllIFVJRCAndWlkJyBhdXMgZGVyIExpc3RlIGRlciBVSURzLCBmdWVyIGRpZQorICAgICd3aXphcmQnIGV4cGxpeml0IHp1c3RhZW5kaWcgaXN0LgorCisgICAgQmVyZWNodGlndCB6dW0gQXVzdHJhZ2VuIHZvbiBNYWdpZXJuIGZ1ZXIgYmVzdGltbXRlIFVJRHMgc2luZCBhbGxlIE1hZ2llciwKKyAgICBkaWUgKGltcGxpeml0IG9kZXIgZXhwbGl6aXQpIHZlcmFudHdvcnRsaWNoIGZ1ZXIgZGllIGpld2VpbGlnZSBVSUQgc2luZC4KKyAgICBNYW4ga2FubiBzaWNoIGF1Y2ggc2VsYmVyIGF1c3RyYWdlbi4gOy0pCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgWnVydWVja2dlbGllZmVydCB3aXJkIGVpbiBBcnJheSB2b24gU3RyaW5ncywgamVkZXMgRWxlbWVudCBpc3QgZWluZSBVSUQsCisgICAgZnVlciBkaWUgZGllciBNYWdpZXIgamV0enQgZXhwbGl6aXQgZWluZ2V0cmFnZW4gaXN0LgorCitCRUlTUElFTEU6CisgICAgbWFzdGVyKCktPlJlbW92ZVdpemFyZEZyb21VSUQoInAud2F0ZXJsdWgiLCJ6b29rIik7CisJCQorICAgIHN0cmluZyAqdWlkcyA9IG1hc3RlcigpLT5SZW1vdmVXaXphcmRGcm9tVUlEKCJqb2YiLCJ6b29rIik7CisgICAgcHJpbnRmKCJab29rIGlzdCBudW4gZXhwbGl6aXQgenVzdGFlbmRpZyBmdWVyOiAlc1xuIixDb3VudFVwKHVpZHMpKTsKKworU0lFSEUgQVVDSDoKKyAgICBRdWVyeVdpemFyZHNGb3JVSUQoKSwgUXVlcnlVSURzRm9yV2l6YXJkKCkKKwkJQWRkV2l6YXJkRm9yVUlEKCkKKworMjAuMDIuMjAwNywgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9tYXRjaF9pZHMgYi9kb2MvbGZ1bi9tYXRjaF9pZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjOTg1YgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL21hdGNoX2lkcwpAQCAtMCwwICsxLDQ3IEBACittYXRjaF9pZHMoKQorCitGVU5LVElPTjoKKyAgICAgaW50IG1hdGNoX2lkcyhzdHJpbmcgKmxpc3QpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgICpsaXN0CVN0cmluZy1BcnJheSBtaXQgenUgdGVzdGVuZGVuIElEcworCitCRVNDSFJFSUJVTkc6CisgICAgIERpZSBMaXN0ZSBkZXIgdWViZXJnZWJlbmVuIElEcyB3aXJkIG1pdCBkZW4gSURzIGRlcyBPYmpla3RlcworICAgICBVTkQtVmVya251ZXBmdC4gRGllIEdyb2Vzc2UgZGVzIHJlc3VsdGllcmVuZGVuIEFycmF5cyB3aXJkCisgICAgIHp1cnVlY2tnZWdlYmVuLgorICAgICBEaWVzZSBGdW5rdGlvbiBlcmxhdWJ0IGFsc28gZGFzIGdsZWljaHplaXRpZ2UgUHJ1ZWZlbiBhdWYKKyAgICAgbWVocmVyZSBJRHMuIEFsbGVyZGluZ3Mgd2VyZGVuIC0gaW0gR2VnZW5zYXR6IHp1IGlkKCkgLQorICAgICBBZGpla3RpdmUgdW5kIEF1c2RydWVja2UgZGVyIEFydCAiPElEPiA8bnVtbWVyPiIgbmljaHQKKyAgICAgYmVydWVja3NpY2h0aWd0LgorICAgICBFYmVuc28gd2VyZGVuIFNwZXppYWxpdGFldGVuIHdpZSBVbml0b2JqZWt0ZSB1bmQgT2JqZWt0ZSBtaXQKKyAgICAgdWViZXJzY2hyaWViZW5lbSBpZCgpIG5pY2h0IGJlcnVlY2tzaWNodGlndCEgSW0gWndlaWZlbHNmYWxsIGlzdCBkYWhlcgorICAgICBkb2NoIGRpZSBOdXR6dW5nIHZvbiBpZCgpIHp1IGVtcGZlaGxlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgQW56YWhsIGRlciB6dXRyZWZmZW5kZW4gSURzLgorCitCRUlTUElFTEU6CisgICAgIEFuZ2Vub21tZW4sIGVpbiBPYmpla3QgaGFiZSBmb2xnZW5kZSBCZXplaWNobmVyOgorCisgICAgIEFkZElkKCAoeyJtdXJtZWwiLCJrdWdlbCIsImdsYXNtdXJtZWwiLCJnbGFza3VnZWwifSkgKTsKKyAgICAgQWRkQWRqZWN0aXZlKCAicnVuZCIgKTsKKworICAgICBEYW5uIGxpZWZlcm4gZGllIGFuZ2VnZWJlbmVuIG1hdGNoX2lkcygpLUF1ZnJ1ZmUgZm9sZ2VuZGUgRXJnZWJuaXNzZToKKworICAgICBtYXRjaF9pZHMoICh7Im11cm1lbCIsInN0ZWluIn0pICk7ICAgICAgICAgPT4gMQorICAgICBtYXRjaF9pZHMoICh7Im11cm1lbCIsImt1Z2VsIn0pICk7ICAgICAgICAgPT4gMgorICAgICBtYXRjaF9pZHMoICh7InJ1bmRlIG11cm1lbCJ9KSApOyAgICAgICAgICAgPT4gMAorICAgICBtYXRjaF9pZHMoICh7Im11cm1lbCAyIn0pICk7ICAgICAgICAgICAgICAgPT4gMCwgYXVjaCB3ZW5uIGRpZXMgZGllIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6d2VpdGUgTXVybWVsIGluIGRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGVpY2hlbiBVbWdlYnVuZyBpc3QKKworU0lFSEUgQVVDSDoKKyAgICAgQWRkSWQoKSwgQWRkQWRqZWN0aXZlKCksIEFkZFNpbmd1bGFySWQoKSwgQWRkUGx1cmFsSWQoKSwgcHJlc2VudCgpLAorICAgICBpZCgpLCAvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uLmMsIC9zdGQvdW5pdC5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFNhdCBNYXIgMTUgMjE6NDA6MDAgMjAwMCBieSBQYXJhY2Vsc3VzCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9tb3ZlIGIvZG9jL2xmdW4vbW92ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzIzYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbW92ZQpAQCAtMCwwICsxLDIxMiBAQAorbW92ZSgpCisKK0ZVTktUSU9OOiAKKyAgICAgRnVlciB1bmJlbGVidGUgR2VnZW5zdGFlbmRlICgvc3RkL3RoaW5nKToKKyAgICAgICB2YXJhcmdzIGludCBtb3ZlKG9iamVjdHxzdHJpbmcgZGVzdCwgaW50IG1ldGhvZCk7CisKKyAgICAgRnVlciBMZWJld2VzZW4gKC9zdGQvbGl2aW5nLCAvc3RkL25wYywgdXN3Lik6CisgICAgICAgdmFyYXJncyBpbnQgbW92ZShvYmplY3R8c3RyaW5nIGRlc3QsIGludCBtZXRob2QsIHN0cmluZyBkaXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHRleHRvdXQsIHN0cmluZyB0ZXh0aW4pOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvbW92aW5nLmMKKyAgICAgL3N0ZC9saXZpbmcvbW92aW5nLmMKKworQVJHVU1FTlRFOgorICAgICBkZXN0CisgICAgICAgICAgRGFzIFppZWxvYmpla3QgKGVudHdlZGVyIGRlciBEYXRlaW5hbWUgb2RlciBkYXMgT2JqZWt0IHNlbGJzdCkuCisKKyAgICAgbWV0aG9kCisgICAgICAgICAgRGllIEFydCBkZXIgQmV3ZWd1bmcgKGVpbmUgZGVyIHVudGVuIGF1ZmdlZnVlaHJ0ZW4gQXJ0ZW47IGVzCisgICAgICAgICAga29lbm5lbiBhdWNoIG1laHJlcmUgenVzYW1tZW5nZS1PREVSLXQgd2VyZGVuKS4KKworICAgICBkaXIKKyAgICAgICAgICBEaWUgUmljaHR1bmcsIGluIGRpZSBlaW4gTGViZXdlc2VuIGdlaHQuIE5vcm1hbGVyd2Vpc2UgaXN0IGRhcyBkaWUKKyAgICAgICAgICBlaW5nZXNjaGxhZ2VuZSBMYXVmcmljaHR1bmcgKHpCLiAibmFjaCBOb3JkZW4iKS4KKworICAgICB0ZXh0b3V0CisgICAgICAgICAgVmVybGFlc3N0IGVpbiBMZWJld2VzZW4gZWluZW4gUmF1bSwgc28gd2lyZCBkaWVzZSBNZWxkdW5nIGluIGRlbgorICAgICAgICAgIFJhdW0gZ2VzY2hpY2t0LiBJc3QgYmVpIGRpciBlaW4gU3RyaW5nIGFuZ2VnZWJlbiwgc28gd2lyZCBkaWVzZXIKKyAgICAgICAgICBub2NoIGFuIHRleHRvdXQgYW5nZWhhZW5ndC4gRGVyIE5hbWUgZGVzIExlYmV3ZXNlbnMgd2lyZCBkZXIKKyAgICAgICAgICBNZWxkdW5nIGluIGplZGVtIEZhbGwgdm9yYW5nZXN0ZWxsdC4KKworICAgICB0ZXh0aW4KKyAgICAgICAgICBEaWVzZXIgVGV4dCB3aXJkIGltIFppZWxyYXVtIGF1c2dlZ2ViZW4sIHdlbm4gZWluIExlYmV3ZXNlbiBpaG4KKyAgICAgICAgICBiZXRyaXR0LiBCZWkgbm9ybWFsZXIgRm9ydGJld2VndW5nIGlzdCBkYXMgImtvbW10IGFuIi4gRGVtIFRleHQKKyAgICAgICAgICB3aXJkIG5vY2ggZGVyIE5hbWUgZGVzIFNwaWVsZXJzIHZvcmFuZ2VzdGVsbHQuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCB2ZXJzdWNodCwgZGFzIE9iamVrdCBpbiBkYXMgWmllbG9iamVrdCBkZXN0IHp1IGJld2VnZW4uCisgICAgIEFiaGFlbmdpZyB2b20gbW9tZW50YW5lbiBBdWZlbnRoYWx0c29ydCB1bmQgZGVtIFppZWxvYmpla3QgaXN0IGRpZQorICAgICBCZXdlZ3VuZ3NtZXRob2RlIG1ldGhvZCB6dSB3YWVobGVuLgorCisgICAgIEluIDxtb3ZpbmcuaD4gc2luZCBmb2xnZW5kZSBLb25zdGFudGVuIGZ1ZXIgZGllIEFydCBkZXIgQmV3ZWd1bmcKKyAgICAgZGVmaW5pZXJ0OgorICAgICBNX05PQ0hFQ0sKKyAgICAgICAgICBFcyB3ZXJkZW4ga2VpbmUgQWJmcmFnZW4gZHVyY2hnZWZ1ZWhydCwgb2IgZGFzIE9iamVrdCB1ZWJlcmhhdXB0CisgICAgICAgICAgaW4gZGFzIFppZWxvYmpla3QgaGluZWlucGFzc3QgKHdhcyB6Qi4gYXVzIEdld2ljaHRzZ3J1ZW5kZW4gZGVyCisgICAgICAgICAgRmFsbCBzZWluIGtvZW5udGUpLgorCisgICAgIE1fR08KKyAgICAgICAgICBFaW4gTGViZXdlc2VuIGJld2VndCBzaWNoIGdlaGVuZCB2b24gZWluZW0gUmF1bSBpbiBkZW4gbmFlY2hzdGVuLgorICAgICAgICAgIEJlaSBub3JtYWxlbSBHZWhlbiB3aXJkIGRpZXNlIE1ldGhvZGUgYmVudXR6dDsgbWFuIHNvbGx0ZSBzaWUgYXVjaAorICAgICAgICAgIGJlbnV0emVuLCB3ZW5uIG1hbiBTcGllbGVyIHVlYmVyIGVpbmVuIFNwZWNpYWxFeGl0IGluIGVpbmVuCisgICAgICAgICAgYmVuYWNoYmFydGVuIFJhdW0gYmV3ZWd0LgorCisgICAgIE1fVFBPUlQKKyAgICAgICAgICBFaW4gTGViZXdlc2VuIHdpcmQgdm9uIGVpbmVtIFJhdW0gaW4gZWluZW4gYW5kZXJlbiB0ZWxlcG9ydGllcnQuCisgICAgICAgICAgSW0gR2VnZW5zYXR6IHp1IE1fR08ga2FubiBlaW4gUmF1bSB2ZXJoaW5kZXJuLCBkYXNzIG1hbiBpaG4KKyAgICAgICAgICBtaXR0ZWxzIE1fVFBPUlQgdmVybGFlc3N0IG9kZXIgYmV0cml0dC4KKworICAgICBNX05PX1NIT1cKKyAgICAgICAgICBCZWltIEJld2VnZW4gdm9uIExlYmV3ZXNlbiBiZWtvbW1lbiBkaWVzZSBkaWUgQmVzY2hyZWlidW5nIGRlcworICAgICAgICAgIFppZWxyYXVtZXMgbmljaHQgYXVzZ2VnZWJlbi4KKworICAgICBNX05PX0FUVEFDSworICAgICAgICAgIEJlaW0gQmV3ZWdlbiB2b24gTGViZXdlc2VuIGJla29tbWVuIGRpZXNlIGtlaW5lbgorICAgICAgICAgIEJlZ3J1ZXNzdW5nc3NjaGxhZywgd2VubiBlaW4gRmVpbmQgaW0gWmllbHJhdW0gc3RlaHQuCisKKyAgICAgTV9TSUxFTlQKKyAgICAgICAgICBFcyB3ZXJkZW4gYmVpbSBCZXdlZ2VuIGtlaW5lIE1lbGR1bmdlbiBhdXNnZWdlYmVuLiBEaWVzZXIKKyAgICAgICAgICBQYXJhbWV0ZXIgd2lya3Qgc2ljaCBudXIgYXVmIGRhcyBCZXdlZ2VuIHZvbiBMZWJlbndlc2VuIGF1cy4KKworICAgICBNX0dFVAorICAgICAgICAgIERhcyBPYmpla3Qgd2lyZCB2b24gZWluZW0gdW5iZWxlYnRlbiBPYmpla3QgKHpCLiBlaW5lbSBSYXVtLCBlaW5lcgorICAgICAgICAgIExlaWNoZSwgZWluZW0gQmV1dGVsKSBpbiBlaW4gbGViZW5kZXMgT2JqZWt0IChTcGllbGVyIG9kZXIgTlBDKQorICAgICAgICAgIGJld2VndC4KKworICAgICBNX1BVVAorICAgICAgICAgIERhcyBPYmpla3Qgd2lyZCB2b24gZWluZW0gbGViZW5kZW4gT2JqZWt0IGluIGVpbiB1bmJlbGVidGVzIE9iamVrdAorICAgICAgICAgIGJld2VndC4KKworICAgICBNX0dJVkUKKyAgICAgICAgICBEYXMgT2JqZWt0IHdpcmQgdm9uIGVpbmVtIExlYmV3ZXNlbiBhbiBlaW4gYW5kZXJlcyBMZWJld2VzZW4KKyAgICAgICAgICB3ZWl0ZXJnZXJlaWNodC4KKworICAgICBNX01PVkVfQUxMIChOdXIgZnVlciBPYmpla3RlLCBkaWUgL3N0ZC91bml0LmMgZXJiZW4pCisgICAgICAgICAgRXMgd2lyZCBkaWUgZ2VzYW10ZSBNZW5nZSBiZXdlZ3QsIG5pY2h0IG51ciBlaW4gVGVpbC4KKworICAgICBTb2xsIGRhcyBPYmpla3QgYXVmIGplZGVuIEZhbGwgdW5kIG9obmUgamVkZSBBYmZyYWdlIGJld2VndCB3ZXJkZW4sIHNvCisgICAgIHJlaWNodCBlcywgYWxzIG1ldGhvZCBNX05PQ0hFQ0sgenUgdWViZXJnZWJlbi4KKworICAgICBXYWZmZW4gdW5kIFJ1ZXN0dW5nZW4gd2VyZGVuLCBzb3dlaXQgc2llIGdlenVlY2t0IGJ6dy4gYW5nZXpvZ2VuIHNpbmQsCisgICAgIGJlaW0gQmV3ZWdlbiBhdWYgamVkZW4gRmFsbCB3ZWdnZXN0ZWNrdCBiencuIGF1c2dlem9nZW4uIElzdCBpbiBtZXRob2QKKyAgICAgTV9TSUxFTlQgZW50aGFsdGVuLCBzbyBnZXNjaGllaHQgZGllcyBvaG5lIE1lbGR1bmdlbi4KKworICAgICBEaWUgZXJzdGUgQXJ0IGRlcyBGdW5rdGlvbnNhdWZydWZzIGlzdCBzb3dvaGwgYmVpbSBCZXdlZ2VuIHZvbgorICAgICBMZWJld2VzZW4gYWxzIGF1Y2ggdm9uIHVuYmVsZWJ0ZW4gT2JqZWt0ZW4gbW9lZ2xpY2guIERpZSB6d2VpdGUgQXJ0CisgICAgIGxhZXNzdCBzaWNoIG51ciBiZWkgTGViZXdlc2VuIGFud2VuZGVuLgorCitBTk1FUktVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHNvbGx0ZSBuaWNodCAobWVocikgdWViZXJzY2hyaWViZW4gd2VyZGVuLiBTdGF0dGRlc3NlbgorICAgICBncmVpZnQgYml0dGUgYXVmIFByZXZlbnRNb3ZlKCkgdW5kIE5vdGlmeU1vdmUoKSB6dXJ1ZWNrLiBSTXMgc2luZAorICAgICBhdWZnZXJ1ZmVuLCBPYmpla3QgbWl0IHVlYmVyc2NocmllYmVuZW4gbW92ZSgpIG51ciBub2NoIGRhbm4KKyAgICAgYW56dXNjaGxpZXNzZW4sIHdlbm4gZGVyIFp3ZWNrIHNvbnN0IG5pY2h0IGVycmVpY2h0IHdlcmRlbiBrYW5uLiBTb2xsdGV0CisgICAgIGlociBtb3ZlKCkgdWViZXJzY2hyZWliZW46IFNlaWQgZXVjaCBzZWhyIGdlbmF1IGltIGtsYXJlbiwgd2FzIG1vdmUoKQorICAgICBnZW5hdSBtYWNodC4gOy0pCisgICAgIAorICAgICBXZW5uIExpdmluZ3MgYmV3ZWd0IHdlcmRlbiwgc29yZ3QgbW92ZSgpIGF1dG9tYXRpc2NoIGluIEFiaGFlbmdpZ2tlaXQKKyAgICAgdm9uIFBfUEFSQSBkYWZ1ZXIsIGRhc3MgZGFzIExlYmV3ZXNlbiBpbiBkZXIga29ycmVrdGVuIChQYXJhbGxlbC0pV2VsdAorICAgICBsYW5kZXQuCisKKyAgICAgQmVpIEdlZ2Vuc3RhZW5kZW4gd2lyZCBlYmVuZmFsbHMgdmVyc3VjaHQsIGRpZSByaWNodGlnZSBaaWVsd2VsdAorICAgICBhdXN6dXdhZWhsZW4gKGRhbWl0IHouQi4gaW4gZGVyIFBhcmFsbGVsd2VsdCBnZXdvcmZlbmUgQnVtZXJhbmdzIGF1Y2ggbnVyCisgICAgIGlubmVyaGFsYiBkZXIgUGFyYWxsZWx3ZWx0IGZsaWVnZW4pLiBVbSBSZWNoZW56ZWl0IHp1IHNwYXJlbiwgd2lyZCBkYXMKKyAgICAgYWxsZXJkaW5ncyBudXIgdmVyc3VjaHQsIHdlbm4gJ2Rlc3QnIGVpbiBGaWxlbmFtZSBpc3QgdW5kIGtlaW4gT2JqZWt0LgorCisgICAgIEdydW5kOiBiZWkgWmllbG9iamVrdGVuIGhhbmRlbHQgZXMgc2ljaCBtZWlzdCB1bSBCZXdlZ3VuZ2VuIGluIGRhcyBJbnYKKyAgICAgb2RlciBFbnYgZWluZXMgU3BpZWxlcnMgLSB1bmQgZGllIHNpbmQgdW5pbnRlcmVzc2FudC4gUmF1bXdlY2hzZWwgZGFnZWdlbgorICAgICBlcmZvbGdlbiBmYXN0IGltbWVyIHVudGVyIEFuZ2FiZSBlaW5lcyBGaWxlbmFtZW5zIGFuc3RhdHQgZWluZXMgT2JqZWt0ZXMuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEFsbGUgUnVlY2tnYWJld2VydGUgc2luZCBhbHMgc3ltYm9saXNjaGUgS29uc3RhbnRlbiBpbiA8bW92aW5nLmg+CisgICAgIGRlZmluaWVydC4gKE1PVkVfT0sgaXN0IDEsIGFsbGUgYW5kZXJlbiBzaW5kIDwwIHVuZCBzeW1ib2xpc2llcmVuIEZlaGxlci4KKyAgICAgVHJhZGl0aW9uZWxsIGVyZm9sZ3QgZGllIFBydWVmdW5nIGF1ZiBlcmZvbGdyZWljaGVzIE1vdmUgbWl0ID09IDEsIGluCisgICAgIFp1a3VuZnQgd2lyZCA9PSBNT1ZFX09LIGVtcGZvaGxlbi4pCisgICAgIAorICAgICBNT1ZFX09LCisgICAgICAgICAgRGllIEJld2VndW5nIHd1cmRlIGVyZm9sZ3JlaWNoIGFiZ2VzY2hsb3NzZW4uCisKKyAgICAgTUVfUExBWUVSCisgICAgICAgICAgTGViZXdlc2VuIGxhc3NlbiBzaWNoIG5pY2h0IG9obmUgd2VpdGVyZXMgYmV3ZWdlbi4gRXMgbXVzcworICAgICAgICAgIG1pbmRlc3RlbnMgZWluZSBkZXIgTWV0aG9kZW4gTV9OT0NIRUNLLCBNX0dPIG9kZXIgTV9UUE9SVAorICAgICAgICAgIGFuZ2VnZWJlbiB3ZXJkZW4uCisKKyAgICAgTUVfVE9PX0hFQVZZCisgICAgICAgICAgRGFzIFppZWxvYmpla3Qga2FubiBkaWVzZXMgT2JqZWt0IGF1cyBHZXdpY2h0c2dydWVuZGVuIG5pY2h0IG1laHIKKyAgICAgICAgICBhdWZuZWhtZW4uCisKKyAgICAgTUVfQ0FOVF9UUE9SVF9JTgorICAgICAgICAgIERhcyBaaWVsb2JqZWt0IHZlcmJpZXRldCBkYXMgVGVsZXBvcnRpZXJlbiBpbiBzaWNoIGhpbmVpbiAobnVyIGJlaQorICAgICAgICAgIE1fVFBPUlQgb2huZSBNX05PQ0hFQ0spLgorCisgICAgIE1FX0NBTlRfVFBPUlRfT1VUCisgICAgICAgICAgRGVyIFJhdW0sIGluIGRlbSBzaWNoIGRhcyBMZWJld2VzZW4gYmVmaW5kZXQsIHZlcmJpZXRldCBkYXMKKyAgICAgICAgICBUZWxlcG9ydGllcmVuIGF1cyBzaWNoIGhpbmF1cyAobnVyIGJlaSBNX1RQT1JUIG9obmUgTV9OT0NIRUNLKS4KKworICAgICBNRV9DQU5UX0JFX0RST1BQRUQKKyAgICAgICAgICBEYXMgT2JqZWt0IGthbm4gbmljaHQgZmFsbGVuIGdlbGFzc2VuIHdlcmRlbiAoekIuIHdlaWwgUF9OT0RST1AKKyAgICAgICAgICBnZXNldHp0IGlzdCkuCisKKyAgICAgTUVfQ0FOVF9CRV9UQUtFTgorICAgICAgICAgIERhcyBPYmpla3Qga2FubiBuaWNodCBnZW5vbW1lbiB3ZXJkZW4gKHpCLiB3ZWlsIFBfTk9HRVQgZ2VzZXR6dAorICAgICAgICAgIGlzdCkuCisKKyAgICAgTUVfQ0FOVF9CRV9JTlNFUlRFRAorICAgICAgICAgIERhcyBaaWVsb2JqZWt0IHZlcmhpbmRlcnQgZGFzIEVpbmZ1ZWdlbiBhdXMgYmVzdGltbXRlbiBHcnVlbmRlbi4KKworICAgICBNRV9DQU5UX0xFQVZFX0VOVgorICAgICAgICAgIERlciBDb250YWluZXIgdmVyaGluZGVydCBlaW4gdmVybGFzc2VuIGRlcyBPYmpla3RlcworCisgICAgIE1FX1RPT19IRUFWWV9GT1JfRU5WCisgICAgICAgICAgRWluIE9iamVrdCBrYW5uIGVpbmVuIEJlaGFlbHRlciBuaWNodCB2ZXJsYXNzZW4sIGRhIGVzIGRlbSAKKyAgICAgICAgICBMZWJld2VzZW4gc29uc3QgenUgc2Nod2VyIHd1ZXJkZS4KKworICAgICBUT09fTUFOWV9PQkpFQ1RTCisgICAgICAgICAgRGFzIFppZWxvYmpla3Qga2FubiBzb3ZpZWxlIE9iamVrdGUgbmljaHQgbWVociBhdWZuZWhtZW4uCisKKyAgICAgTUVfTk9UX0FMTE9XRUQKKyAgICAgICAgICBSYWV1bWUgbWl0IGdlc2V0enRlciBQcm9wZXJ0eSBQX05PX1BMQVlFUlMga29lbm5lbiBudXIgdm9uCisgICAgICAgICAgVGVzdHNwaWVsZXJuIHVuZCBNYWdpZXJuIGJldHJldGVuIHdlcmRlbi4gQmVpIFNwaWVsZXJuIG9kZXIKKyAgICAgICAgICBHaWxkZW50ZXN0aWVzIGdpYnQgZXMgZGllc2UgRmVobGVybWVsZHVuZy4KKyAgICAgTUVfV0FTX0RFU1RSVUNURUQKKyAgICAgICAgICBEYXMgT2JqZWt0IGhhdCBzaWNoIGVudHdlZGVyIGltIFZlcmxhdWZlIGRlciBCZXdlZ3VuZyBzZWxic3QKKyAgICAgICAgICB6ZXJzdG9lcnQgb2RlciB3dXJkZSB6ZXJzdG9lcnQsIHNvZGFzcyBtb3ZlKCkgbmljaHQgZXJmb2xncmVpY2gKKyAgICAgICAgICBiZWVuZGV0IHdlcmRlbiBrb25udGUuIChCc3A6IHNlbnNpdGl2ZSBPYmpla3RlKQorCisgICAgIE1FX0RPTlRfV0FOVF9UT19CRV9NT1ZFRAorICAgICAgICAgIERhcyBPYmpla3QgbW9lY2h0ZSBuaWNodCBiZXdlZ3Qgd2VyZGVuLgorCitCRUlTUElFTEU6CisgICAgICAgIG8gRWluIE9iamVrdCAiZ2lidCBzaWNoIiBkZW0gU3BpZWxlcjoKKworICAgICAgICAgIG1vdmUodGhpc19wbGF5ZXIoKSwgTV9HRVQpOworCisgICAgICAgIG8gRWluIExlYmV3ZXNlbiB3aXJkIGluIGRpZSBBYmVudGV1cmVyZ2lsZGUgdGVsZXBvcnRpZXJ0OgorCisgICAgICAgICAgbHYtPm1vdmUoIi9naWxkZW4vYWJlbnRldXJlciIsIE1fVFBPUlQpOworCisgICAgICAgIG8gRWluIFNwaWVsZXIgIndpcmQgaW4gZGllIEdpbGRlIGdlZ2FuZ2VuIjoKKworICAgICAgICAgIHRoaXNfcGxheWVyKCktPm1vdmUoIi9naWxkZW4vYWJlbnRldXJlciIsIE1fR08sICJpbiBkaWUgR2lsZGUiKTsKKworICAgICAgICAgIFNwaWVsZXIsIGRpZSBtaXQgaWhtIGltIGdsZWljaGVuIFJhdW0gc3RlaGVuLCBzZWhlbiBmb2xnZW5kZQorICAgICAgICAgIE1lbGR1bmc6CisgICAgICAgICAgIjxuYW1lPiBnZWh0IGluIGRpZSBHaWxkZS4iCisKKyAgICAgICAgbyBFaW4gU3BpZWxlciBzY2h3aW1tdCBkdXJjaHMgTWVlcjoKKworICAgICAgICAgIHRoaXNfcGxheWVyKCktPm1vdmUoIm1lZXJfeHkiLCBNX0dPLCAibmFjaCBOb3JkZW4iLCAic2Nod2ltbXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjaHdpbW10IGhlcmVpbiIpOworCisgICAgICAgICAgU3BpZWxlciBpbiBzZWluZW0gU3RhcnRyYXVtIHNlaGVuICI8bmFtZT4gc2Nod2ltbXQgbmFjaCBOb3JkZW4uIiwKKyAgICAgICAgICBTcGllbGVyIGluIHNlaW5lbSBaaWVscmF1bSBzZWhlbiAiPG5hbWU+IHNjaHdpbW10IGhlcmVpbi4iCisKK1NJRUhFIEFVQ0g6CisgICAgIG1vdmVfb2JqZWN0KCksIHJlbW92ZSgpLCBzZXRtaW4sIHNldG1taW4sIHNldG1vdXQsIHNldG1tb3V0LCByZXZpZXcsCisgICAgIFByZXZlbnRJbnNlcnQoKSwgUHJldmVudExlYXZlKCksIFByZXZlbnRJbnNlcnRMaXZpbmcoKSwKKyAgICAgUHJldmVudExlYXZlTGl2aW5nKCksIFByZXZlbnRNb3ZlKCksIE5vdGlmeUluc2VydCgpLCBOb3RpZnlMZWF2ZSgpLAorICAgICBOb3RpZnlNb3ZlKCksIE5vdGlmeVJlbW92ZSgpLCBpbml0KCksIGV4aXQoKSwKKyAgICAgUF9OT19QTEFZRVJTLCBQX1BBUkEsIC9zdGQvdGhpbmcvbW92aW5nLmMsIC9zdGQvbGl2aW5nL21vdmluZy5jCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyMDE1LUphbi0xOSwgQXJhdGhvcm4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL21vdmVkX29iamVjdHMgYi9kb2MvbGZ1bi9tb3ZlZF9vYmplY3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkY2JkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9tb3ZlZF9vYmplY3RzCkBAIC0wLDAgKzEsMzAgQEAKK21vdmVkX29iamVjdHMoKQorCitGVU5LVElPTjoKKyAgICBwdWJsaWMgb2JqZWN0ICptb3ZlZF9vYmplY3RzKHZvaWQpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvcHV0X2FuZF9nZXQuYworCitBUkdVTUVOVEU6CisgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgIE1pdCBkaWVzZXIgRnVua3Rpb24gbGFzc2VuIHNpY2ggZGllIE9iamVrdGUgZXJtaXR0ZWxuLCBkaWUgZGFzIExlYmV3ZXNlbgorICAgIGJlaW0gbGV0enRlbiBBdWZydWYgdm9uIGRyb3Bfb2JqZWN0cyhMKSBvZGVyIGVpbmVyIGFlaG5saWNoZW4gRnVua3Rpb24KKyAgICBiZXdlZ3QgaGF0LgorCitSVUVDS0dBQkVXRVJUOgorICAgIEFycmF5IG1pdCBkZW4genVsZXR6dCBiZXdlZ3RlbiBPYmpla3Rlbiwgb2RlciBlaW4gbGVlcmVzIEFycmF5LCBmYWxscworICAgIGtlaW5lIE9iamVrdGUgYXVmIGRpZSBCZXNjaHJlaWJ1bmcgZGVzIGxldHp0ZW4gZHJvcF9vYmplY3RzKCkgLyAKKyAgICBwaWNrX29iamVjdHMoKSAvIHB1dF9vYmplY3RzKCkgLyBnaXZlX29iamVjdHMoKSBwYXNzdGVuLgorCitCRUlTUElFTEU6CisgICAgc2llaGUgZHJvcF9vYmplY3RzKCkgdW5kIGdpdmVfb2JqZWN0cygpCisKK1NJRUhFIEFVQ0g6CisgICAgZHJvcF9vYmplY3RzKEwpLCBnaXZlX29iamVjdHMoTCksIHBpY2tfb2JqZWN0cyhMKSwgcHV0X29iamVjdHMoTCksCisgICAgc2hvd19vYmplY3RzKEwpLCBOb3RpZnlNb3ZlKEwpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFRodSBBdWcgMjggMjI6MTk6MjYgMjAwOCBieSBBbXludGhvcgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vbW92ZWRfd2hlcmUgYi9kb2MvbGZ1bi9tb3ZlZF93aGVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmI3ZTljCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbW92ZWRfd2hlcmUKQEAgLTAsMCArMSwyOCBAQAorbW92ZWRfd2hlcmUoKQorCitGVU5LVElPTjoKKyAgICBwdWJsaWMgb2JqZWN0IG1vdmVkX3doZXJlKHZvaWQpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvcHV0X2FuZF9nZXQuYworCitBUkdVTUVOVEU6CisgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgIE1pdCBkaWVzZXIgRnVua3Rpb24gbGFlc3N0IHNpY2ggZXJtaXR0ZWxuLCB3b2hpbiBkYXMgTGViZXdlc2VuIHp1bGV0enQKKyAgICBtaXR0ZWxzIHB1dF9vYmplY3RzKEwpIG9kZXIgZ2l2ZV9vYmplY3RzKEwpIGV0d2FzIGJld2VndCBvZGVyIHdlbSBlcyBtaXQKKyAgICBzaG93X29iamVjdHMoTCkgZXR3YXMgZ2V6ZWlndCBoYXQuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgRGVyIENvbnRhaW5lciBvZGVyIGRhcyBMZWJld2VzZW4sIHdvaGluIGRpZSBHZWdlbnN0YWVuZGUgYmV3ZWd0IHd1cmRlbi4KKworQkVJU1BJRUw6CisgICAgc2llaGUgZ2l2ZV9vYmplY3RzKCkKKworU0lFSEUgQVVDSDoKKyAgICBwdXRfb2JqZWN0cyhMKSwgZ2l2ZV9vYmplY3RzKEwpLCBzaG93X29iamVjdHMoTCksIE5vdGlmeUluc2VydChMKSwKKyAgICBQX0xBU1RfQ09OVEVOVF9DSEFOR0UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogVGh1IEF1ZyAyOCAyMjoxNjoxNSAyMDA4IGJ5IEFteW50aG9yCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9tdXN0ZXIgYi9kb2MvbGZ1bi9tdXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxOWY2OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL211c3RlcgpAQCAtMCwwICsxLDE2IEBACittdXN0ZXIoKQorCitGVU5LVElPTjoKKwl0eXBlIG11c3RlciguLi4pCisJCitBUkdVTUVOVEU6CisJCitCRVNDSFJFSUJVTkc6CisKK1JVRUNLR0FCRVdFUlQ6CisJCitCRU1FUktVTkc6CisJCitCRUlTUElFTDoKKworU0lFSEUgQVVDSDoKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL25hbWUgYi9kb2MvbGZ1bi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTUwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9uYW1lCkBAIC0wLDAgKzEsNTAgQEAKK25hbWUoKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBzdHJpbmcgbmFtZShpbnQgY2FzdXMsIGludCBkZW1vbik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jCisKK0FSR1VNRU5URToKKyAgICAgY2FzdXMKKyAgICAgICAgICBEZXIgRmFsbCwgaW4gZGVtIGRlciBOYW1lIGRla2xpbmllcnQgd2VyZGVuIHNvbGwuCisgICAgIGRlbW9uCisgICAgICAgICAgR2lidCBhbiwgb2IgZGVyIE5hbWUgbWl0IGJlc3RpbW10ZW0gb2RlciB1bmJlc3RpbW10ZW0gQXJ0aWtlbAorICAgICAgICAgIHZlcnNlaGVuIHdlcmRlbiBzb2xsOgorICAgICAgICAgICAgICsgZGVtb24gPSAwOiBVbmJlc3RpbW10ZXIgQXJ0aWtlbC4KKyAgICAgICAgICAgICArIGRlbW9uID0gMTogQmVzdGltbXRlciBBcnRpa2VsLgorICAgICAgICAgICAgICsgZGVtb24gPSAyOiBGaW5kZSBzZWxic3QgaGVyYXVzLCBvYiBlaW4gYmVzdGltbXRlciBvZGVyIGVpbgorICAgICAgICAgICAgICAgdW5iZXN0aW1tdGVyIEFydGlrZWwgdmVyd2VuZGV0IHdlcmRlbiBzb2xsLgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIGVybWl0dGVsdCBkZW4gTmFtZW4gZGVzIE9iamVrdGVzIGltIGdld3VlbnNjaHRlbiBGYWxsCisgICAgIHVuZCBtaXQgZGVtIGFuZ2VnZWJlbmVuIEFydGlrZWwuIE1vZWdsaWNoZSBXZXJ0ZSBmdWVyIGNhc3VzIHNpbmQgaW4KKyAgICAgPHRoaW5nL2xhbmd1YWdlLmg+IGRlZmluaWVydC4gV2VpdGVyaGluIHdlcmRlbiBhdWNoIChmYWxscyBhbmdlZ2ViZW4pCisgICAgIGRpZSBOYW1lbnNhZGpla3RpdmUgZGVrbGluaWVydCB1bmQgaW4gZGVuIE5hbWVuIGVpbmdlYmF1dC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgU3RyaW5nIG1pdCBkZW0gTmFtZW4gZGVzIE9iamVrdGVzLgorCitCRU1FUktVTkdFTjoKKyAgICAgRmFsbHMgUF9BUlRJQ0xFIGdlc2V0enQgaXN0LCB3ZXJkZW4gd2VkZXIgQXJ0aWtlbCBub2NoIE5hbWVuc2FkamVrdGl2ZQorICAgICBpbiBkZW4gTmFtZW4gZWluZ2ViYXV0LgorCisgICAgIFdlbm4gbWFuIGFscyBjYXN1cyBSQVcgYW5naWJ0LCB3aXJkIGRlciBOYW1lIGltIE5vbWluYXRpdiBvaG5lIEFydGlrZWwKKyAgICAgdW5kIE5hbWVuc2FkamVrdGl2ZSB6dXJ1ZWNrZ2VnZWJlbi4KKworQkVJU1BJRUxFOgorICAgICBXZW5uIGRhcyBPYmpla3QgZWluIEJhbGwgbWl0IFBfTkFNRT0iQmFsbCIgdW5kIFBfTkFNRV9BREo9ImtsZWluIiBpc3QsCisgICAgIHNvIGxpZWZlcm4gZGllIGZvbGdlbmRlbiBBdWZydWZlIGRpZSBhbmdlZ2ViZW5lbiBFcmdlYm5pc3NlOgorCisgICAgIG5hbWUoV0VSLDApOyAgICA9PiAiZWluIGtsZWluZXIgQmFsbCIKKyAgICAgbmFtZShXRVNTRU4sMSk7ID0+ICJkZXMga2xlaW5lbiBCYWxscyIKKyAgICAgbmFtZShSQVcpOyAgICAgID0+ICJCYWxsIgorICAgICBuYW1lKFdFTSwyKTsgICAgPT4gImVpbmVtIGtsZWluZW4gQmFsbCIgb2RlciAiZGVtIGtsZWluZW4gQmFsbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBhYmhhZW5naWcgZGF2b24sIHdpZXZpZWxlIEJhZWxsZSBnZXJhZGUgZGEgc2luZC4KKworU0lFSEUgQVVDSDoKKyAgICAgL3N0ZC90aGluZy9kZXNjcmlwdGlvbi5jLCBOYW1lKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogU2F0IEF1ZyAgMyAxMToyODo1NSAyMDAyIGJ5IFZhbmlvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vbm90aWZ5X3BsYXllcl9jaGFuZ2UgYi9kb2MvbGZ1bi9ub3RpZnlfcGxheWVyX2NoYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzY1YWY2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vbm90aWZ5X3BsYXllcl9jaGFuZ2UKQEAgLTAsMCArMSw1NiBAQAordm9pZCBub3RpZnlfcGxheWVyX2NoYW5nZShzdHJpbmcvb2JqZWN0IHdobywgaW50IHJlaW4gWywgaW50IGludmlzXSkKKworRlVOS1RJT046CisgICAgdm9pZCAvbm90aWZ5X3BsYXllcl9jaGFuZ2Uob2JqZWN0IHdobywgaW50IHJlaW4pCisgICAgdm9pZCAvc3RkL3BsYXllci9iYXNlOjpub3RpZnlfcGxheWVyX2NoYW5nZShzdHJpbmcgd2hvLCBpbnQgcmVpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnZpcykKKyAgCitHRVJVRkVOIFZPTjoKKyAgICAvc3RkL3BsYXllci9iYXNlLmMgKGQuaC4gYWxsZSBTcGllbGVyc2hlbGxzLy1PYmpla3RlKQorCitBUkdVTUVOVEU6CisgICAgc3RyaW5nIHdobworICAgICAgZ2V0dWlkKCkgZWluZXMgU3BpZWxlcnMKKyAgICBvYmplY3Qgd2hvCisgICAgICBTcGllbGVyLU9iamVrdAorICAgIGludCByZWluCisgICAgICAwIGZ1ZXIgZGFzIE1VRCB2ZXJsYXNzZW5kZSwgMSBmdWVyIGhlcmVpbmtvbW1lbmRlIFNwaWVsZXIKKyAgICBpbnQgaW52aXMKKyAgICAgIDEgZnVlciB1bnNpY2h0YmFyZSBTcGllbGVyIChNYWdpZXIpCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIHZvbiBMZWJld2VzZW4gZnVlciBoZXJlaW5rb21tZW5kZSB1bmQgZGFzIFNwaWVsCisgICAgdmVybGFzc2VuZGUgU3BpZWxlciBhbiB2ZXJzY2hpZWRlbmVuIFN0ZWxsZW4gYXVmZ2VydWZlbjoKKyAgICAKKyAgICAqIGluIGFuZGVyZW4gU3BpZWxlcm4gbWl0IG5vdGlmeV9wbGF5ZXJfY2hhbmdlKCkgbWl0IGRyZWkgUGFyYW1ldGVybgorICAgICAgLSBkaWVzIGRpZW50IGZ1ZXIgZGllICJlcndhcnRlIi1GdW5rdGlvbmFsaXRhZXQKKyAgICAqIGluIGRlciBHaWxkZSBkZXMgU3BpZWxlcm4gbWl0IHp3ZWkgUGFyYW1ldGVyCisgICAgICAtIGRhbWl0IGtvZW5uZW4gR2lsZGVuIG5vdHdlbmRpZ2UgQW5wYXNzdW5nZW4gdm9ybmVobWVuCisKKyAgICBEaWVzZSBGdW5rdGlvbmVuIHdlcmRlbiBhdWNoIGdlcnVmZW4sIHdlbm4gTWFnaWVyICJpbnZpcyAtZSIgYnp3LgorICAgICJ2aXMgZSIgYmVudXR6ZW4uCisKK0JFSVNQSUVMRToKKyAgICAvLyBpbiBlaW5lciBHaWxkZToKKyAgICB2b2lkIG5vdGlmeV9wbGF5ZXJfY2hhbmdlKG9iamVjdCBwbCwgaW50IHJlaW4pIHsKKyAgICAgIGlmIChyZWluICYmIG9iamVjdHAocGwpKSB7CisgICAgICAgIC8vIENoZWNrcywgb2IgU3BpZWxlcnNraWxscyBpbiBPcmRudW5nIHNpbmQKKyAgICAgICAgbWFwcGluZyBiZXRlID0gcGwtPlF1ZXJ5U2tpbGwoImJldGUiKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbWFwcGluZ3AoYmV0ZSkpIHsKKyAgICAgICAgICBpZiAoSVNfTEVBUk5FUihwbCkgfHwgcGwtPlF1ZXJ5UHJvcChQX1RFU1RQTEFZRVIpKSB7CisgICAgICAgICAgICB0ZWxsX29iamVjdChwbCwgYnJlYWtfc3RyaW5nKAorICAgICAgICAgICAgICAiRHUgYmlzdCBlaW4ga2FwdXR0ZXIgVGVzdC1LbGVyaWtlciAuLi4iLCA3OCwKKyAgICAgICAgICAgICAgIkFya3NoYXQgdGVpbHQgZGlyIG1pdDogIikpOworICAgICAgICAgICAgLy8gbm90ZHVlcmZ0aWdlIFJlcGFyYXR1cmVuCisgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByYWlzZV9lcnJvcigiS2xlcnVzOiBLYXB1dHRlciBvZGVyIGdlc2V0emVyIEtsZXJpa2VyIVxuIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgUmVnaXN0ZXJFdmVudCBtaXQgKEVWVF9MSUJfTE9HSU4sIEVWVF9MSUJfTE9HT1VUKQorICAgIGVyd2FydGUKKworMS4gU2VwIDIwMTEgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL29ic29sZXRlL0FkZEhwSG9vayBiL2RvYy9sZnVuL29ic29sZXRlL0FkZEhwSG9vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjI3OTUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vb2Jzb2xldGUvQWRkSHBIb29rCkBAIC0wLDAgKzEsMjkgQEAKKyoqKioqKioqKioqKioqKioqKioqKiBPQlNPTEVURSBMRlVOICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERpZXNlIEVmdW4gYml0dGUgbmljaHQgbWVociBiZW51dHplbiwgc29uZGVybiBzdGF0dGRlc3NlbiBkaWUgICAgICAgKgorKiBIb29rcyAocy4gL2RvYy9zdGQvaG9va3MpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitBZGRIcEhvb2soKQorRlVOS1RJT046CisgICAgIGludCBBZGRIcEhvb2sob2JqZWN0IG9iKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvcGxheWVyL2xpZmUuYworCitBUkdVTUVOVEU6CisgICAgIG9iIC0gZGFzIE9iamVrdCwgZGFzIHNpY2ggZWludHJhZ2VuIG1vZWNodGUuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgVHJhZWd0IGVpbiBPYmpla3QgaW4gUF9IUF9IT09LUyBlaW4sIHdlbm4gZXMgbmljaHQgc2Nob24gZGFyaW4gc3RlaHQuCisKKyAgICAgQWVuZGVybiBzaWNoIGJlaW0gU3BpZWxlciBkYW5uIEhQIG9kZXIgS1AgKG5pY2h0IGR1cmNoIFNldCgpKSwgd2lyZAorICAgICBhbiBhbGxlbiBlaW5nZXRyYWdlbmVuIE9iamVrdGVuIE5vdGlmeUhwQ2hhbmdlKCkgZ2VydWZlbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBFcmZvbGcsIDAgc29uc3QKKworU0lFSEUgQVVDSDoKKyAgICAgR2VnZW5wYXJ0OglSZW1vdmVIcEhvb2soKQorICAgICBQcm9wczoJUF9IUF9IT09LUywgUF9IUAorICAgICBWZXJ3YW5kdDoJcmVkdWNlX2hpdF9wb2ludHMoKSwgZG9fZGFtYWdlKCksIGJ1ZmZlcl9ocCgpCisKKzIzLkZlYi4yMDA0IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9vYnNvbGV0ZS9BZGRJbnNlcnRIb29rIGIvZG9jL2xmdW4vb2Jzb2xldGUvQWRkSW5zZXJ0SG9vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTgwMjcyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vb2Jzb2xldGUvQWRkSW5zZXJ0SG9vawpAQCAtMCwwICsxLDU5IEBACisqKioqKioqKioqKioqKioqKioqKiogT0JTT0xFVEUgTEZVTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEaWVzZSBFZnVuIGJpdHRlIG5pY2h0IG1laHIgYmVudXR6ZW4sIHNvbmRlcm4gc3RhdHRkZXNzZW4gZGllICAgICAgICoKKyogSG9va3MgKHMuIC9kb2Mvc3RkL2hvb2tzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQWRkSW5zZXJ0SG9vaygpCisKK0ZVTktUSU9OOgorICAgICB2b2lkIEFkZEluc2VydEhvb2sob2JqZWN0IG9iKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9yZXN0cmljdGlvbnMuYworCitBUkdVTUVOVEU6CisgICAgIG9iIC0gRGFzIE9iamVrdCwgZGFzIGluZm9ybWllcnQgd2VyZGVuIHNvbGwsIHdlbm4gZWluIE9iamVrdCBkZW0KKyAgICAgICAgICBTcGllbGVyaW52ZW50YXIgaGluenVnZWZ1ZWd0IHd1cmRlLgorCitCRVNDSFJFSUJVTkc6CisgICAgIChEaWVzZSBGdW5rdGlvbmFsaXRhZXQgd3VyZGUgZXJzZXR6dCBkdXJjaCBkZW4gYWxsZ2VtZWluZW4gSG9vaworICAgICAgSF9IT09LX0lOU0VSVCB1bmQgaXN0IG51ciBub2NoIGF1cyBHcnVlbmRlbiBkZXIgS29tcGF0aWJpbGl0YWV0CisgICAgICB2b3JoYW5kZW4uKQorCisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgaW0gU3BpZWxlcm9iamVrdCBhdWZnZXJ1ZmVuLCB1bSBkYXMgT2JqZWt0IG9iIGFscworICAgICBIb29rLUxpc3RlbmVyIGFuenVtZWxkZW4uIEF1ZiBkaWVzZSBXZWlzZSBlaW5nZXRyYWdlbmUgTGlzdGVuZXIKKyAgICAgd2VyZGVuIGluZm9ybWllcnQsIHdlbm4gZWluIE9iamVrdCBpbnMgU3BpZWxlcmludmVudGFyIGJld2VndCB3dXJkZS4KKyAgICAgVGVjaG5pc2NoIHdpcmQgZGllIEJld2VndW5nIHVlYmVyIE5vdGlmeUluc2VydCgpIGltIFNwaWVsZXJvYmpla3QKKyAgICAgZGV0ZWt0aWVydCwgdW5kIGltIExpc3RlbmVyLU9iamVrdCB3aXJkIGRpZSBGdW5rdGlvbiBJbnNlcnROb3RpZnkoKQorICAgICBnZXJ1ZmVuLCBkaWUgYWxzIFBhcmFtZXRlciBkYXMgbmV1IGlucyBTcGllbGVyaW52ZW50YXIgYmV3ZWd0ZSBPYmpla3QKKyAgICAgdWViZXJnZWJlbiBiZWtvbW10LgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworQkVNRVJLVU5HRU46CisgICAgIERhcyBMaXN0ZW5lci1PYmpla3QgbXVzcyBzaWNoIGViZW5mYWxscyBpbSBTcGllbGVyaW52ZW50YXIgYmVmaW5kZW4sCisgICAgIGFuc29uc3RlbiB3aXJkIGRlciBlaW5nZXRyYWdlbmUgSG9vayB3aWVkZXIgZ2Vsb2VzY2h0LgorCitCRUlTUElFTDoKKyAgICAgCisgICAgIGEpIE9iamVrdCAib2IiIHdpcmQgaW0gU3BpZWxlciBhbHMgTGlzdGVuZXIgYW5nZW1lbGRldDoKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+QWRkSW5zZXJ0SG9vayhvYik7CisKKyAgICAgYikgT2JqZWt0ICJuZXciIHdpcmQgaW5zIFNwaWVsZXJpbnZlbnRhciBiZXdlZ3QsIGRhcyBTcGllbGVyb2JqZWt0CisgICAgICAgIGluZm9ybWllcnQgIm9iIiBkYXJ1ZWJlcjoKKyAgICAgICAgb2ItPkluc2VydE5vdGlmeShuZXcpOworCisgICAgIGMpIERhcyBMaXN0ZW5lci1PYmpla3QgIm9iIiByZWFnaWVydCBkYXJhdWYsIHouQi4gaW5kZW0gZXMgZGllIEZhY2tlbAorICAgICAgICBsb2VzY2h0LCBzb2Zlcm4gc2llIHZvcmhlciBicmFubnRlOgorICAgICAgICB2b2lkIEluc2VydE5vdGlmeShvYmplY3QgbmV3KSB7CisgICAgICAgICAgaWYgKCBvYmplY3RwKG5ldykgJiYgbmV3LT5pZCgiXG5mYWNrZWwiKSAmJiAKKyAgICAgICAgICAgICAgIG5ldy0+UXVlcnlQcm9wKFBfTElHSFRFRCkgKQorICAgICAgICAgICAgbmV3LT51bmxpZ2h0KCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgTm90aWZ5SW5zZXJ0KCksIFJlbW92ZUluc2VydEhvb2soKSwgUXVlcnlJbnNlcnRIb29rcygpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE0LjA0LjIwMTAsIEFyYXRob3JuCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9vYnNvbGV0ZS9Nb2RpZnlTa2lsbEF0dHJpYnV0ZU9sZCBiL2RvYy9sZnVuL29ic29sZXRlL01vZGlmeVNraWxsQXR0cmlidXRlT2xkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZDlhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9vYnNvbGV0ZS9Nb2RpZnlTa2lsbEF0dHJpYnV0ZU9sZApAQCAtMCwwICsxLDkwIEBACitNb2RpZnlTa2lsbEF0dHJpYnV0ZU9sZCgpCisKK0ZVTktUSU9OOgorICAgIHZhcmFyZ3MgaW50IE1vZGlmeVNraWxsQXR0cmlidXRlT2xkKG9iamVjdCBjYXN0ZXIsIHN0cmluZyBhdHJuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUsIGludCBkdXJhdGlvbiwgbWl4ZWQgZnVuKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvc2tpbGxfYXR0cmlidXRlcy5jCisKK0FSR1VNRU5URToKKyAgICA8Y2FzdGVyPiAgICBJR05PUklFUlQKKyAgICAgICAgICAgICAgICBmcnVlaGVyIE9iamVrdCwgZGFzIGRpZSBNb2RpZmlrYXRpb24gdm9ybmltbXQsIGhldXRlIGlzdAorICAgICAgICAgICAgICAgIGRpZXNlcyBBcmd1bWVudCBvaG5lIEJlZGV1dHVuZyB1bmQgd2lyZCBpZ25vcmllcnQuCisKKyAgICA8YXRybmFtZT4gICBTVFJJTkcKKyAgICAgICAgICAgICAgICBOYW1lIGRlcyB6dSB2ZXJhZW5kZXJuZGVuIEF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAoRGVmaW5pZXJ0IGluIC9zeXMvbGl2aW5nL3NraWxsX2F0dHJpYnV0ZXMuaCkKKworICAgIDx2YWx1ZT4gICAgIElOVAorICAgICAgICAgICAgICAgIE5ldWVyIFdlcnQgZGVzIEF0dHJpYnV0cyAoU3RhbmRhcmQ6IDEwMCkKKworICAgIDxkdXJhdGlvbj4gIElOVAorICAgICAgICAgICAgICAgIERhdWVyIGluIFNla3VuZGVuCisKKyAgICA8ZnVuPiAgICAgICBOSUNIVCBNRUhSIFVOVEVSU1RVRVRaVCAtIE1vZGlmeVNraWxsQXR0cmlidXRlKCkgbnV0emVuISEKKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGV4aXN0aWVydCBudXIgYXVzIEtvbXBhdGliaWxpdGFldHNncnVlbmRlbi4gQml0dGUgaW4gbmV1ZW4KKyAgICBPYmpla3RlbiBOSUNIVCBtZWhyIHZlcndlbmRlbiB1bmQgaW4gYWx0ZW4gbmFjaCBNb2VnbGljaGtlaXQgYXVzYmF1ZW4hCisKKyAgICBBZW5kZXJ0IGVpbiBTa2lsbC1BdHRyaWJ1dCBlaW5lcyBMaXZpbmcuCisgICAgCisgICAgRnVlciA8dmFsdWU+IGlzdCBmb2xnZW5kZXMgenUgYmVhY2h0ZW46CisgICAgRnJ1ZWhlciBoYW5kZWx0ZSBlcyBzaWNoIHVtIGVpbmVuIG11bHRpcGxpa2F0aXZlbiBGYWt0b3IuIDEwMCBoYXR0ZSBkaWUKKyAgICBCZWRldXR1bmcgdm9uIDEgdW5kIHZlcmFlbmRlcnRlIG5pY2h0cy4gSGV1dGUgc2luZCBkaWUgTW9kaWZpa2F0b3JlbgorICAgIGFkZGl0aXYuIERpZXNlIEZ1bmt0aW9uIG1hY2h0IGVpbmUgZWluZmFjaGUgVW1yZWNobnVuZywgaW5kZW0gc2llIHZvbSBoaWVyCisgICAgdWViZXJnZWJlbiBXZXJ0IDEwMCBhYnppZWh0LiAoSW4gZGVyIEFubmFobWUsIGRhc3MgZnJ1ZWhlciBtZWlzdCBlaCBudXIgCisgICAgZWluIE1vZGlmaWthdG9yIHp1ciBnbGVpY2hlbiBaZWl0IGFrdGl2IHdhci4pCisgICAgR2lidCBtYW4gaGllciBhbHNvIGhpZXIgZWluZSAxMDAgYW4sIHdpcmQgZWluIE1vZGlmaWthdG9yIHZvbiAwIGVpbmdlLQorICAgIHRyYWdlbiwgZGVyIG5pY2h0cyBhZW5kZXJ0LCBiZWkgMjAwIHdpcmQgZWluIE1vZGlmaWthdG9yIHZvbiAxMDAgZWluZ2UtCisgICAgdHJhZ2VuLCBiZWkgNTAgZWluZXIgdm9uIC01MCwgd2VsY2hlciBkYXMgU2tpbGxhdHRyaWJ1dGUgZm9sZ2xpY2ggCisgICAgcmVkdXppZXJ0LgorCisgICAgRXMgc2luZCBtb21lbnRhbiBtYXguIDUgZ2xlaWNoemVpdGlnZSBTa2lsbGF0dHJpYnV0ZS1Nb2RpZmlrYXRvcmVuIHBybyBTQQorICAgIHp1bGFlc3NpZy4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgMCAgd2VubiBkZXIgV2VydCB1bmd1ZWx0aWcgaXN0IG9kZXIgYXVzIHNvbnN0aWdlbSBHcnVuZGUgbmljaHQgZ2VzZXR6dAorICAgICAgICB3ZXJkZW4ga29ubnRlIChmdWVyIGJlc3NlcmUgRGlhZ25vc3RpayAtPiBNb2RpZnlTa2lsbEF0dHJpYnV0ZSgpKS4KKyAgICA+MCAgd2VubiBhbGxlcyBva2F5IHdhcgorCitCRU1FUktVTkdFTjoKKyAgICBGcnVlaGVyIG11c3N0ZSBlaW4gc2V0emVuZGVzIE9iamVrdCBlaW4gZ3JvZXNzZXJlcyBQX0xFVkVMIGhhYmVuIGFscyBkYXMKKyAgICBPYmpla3QsIHdlbGNoZXMgZWluZW4gdm9yaGVyaWdlbiBNb2RpZmlrYXRvciBnZXNldHp0IGhhdCwgdW0gZGllc2VuIHp1CisgICAgdWViZXJzY2hyZWliZW4uIERpZXMgaXN0IGluendpc2NoZW4gb2huZSBCZWRldXR1bmcuCisKK0JFSVNQSUVMRToKKyAgICBFaW4gTlBDOgorCisgICAgdm9pZAorICAgIGNyZWF0ZSgpIHsKKyAgICAuCisgICAgLgorICAgIC4KKyAgICBBZGRTcGVsbCgxLCAxLAorICAgICAgIkRlciBmdWVyY2h0ZXJsaWNoZSBOUEMgaGF1dCBEaXIgYXVmIGRlbiBLb3BmLlxuIiwKKyAgICAgICJEZXIgZnVlcmNodGVybGljaGUgTlBDIGhhdXQgQFdFTiBhdWYgZGVuIEtvcGYuXG4iLAorICAgICAgRFRfTUFHSUMsICJzY2h3YWVjaGVuIik7CisgICAgLgorICAgIC4KKyAgICB9CisKKyAgICBzY2h3YWVjaGVuKG9iamVjdCBlbmVteSwgaW50IGRhbWFnZSwgbWl4ZWQgKmRhbV90eXBlKSB7CisgICAgICBpbnQgZXJnZWJuaXM7CisgICAgICBlcmdlYm5pcyA9IGVuZW15LT5Nb2RpZnlTa2lsbEF0dHJpYnV0ZU9sZCh0aGlzX29iamVjdCgpLCBTQV9RVUFMSVRZLCA1MCwgNSk7CisgICAgICBpZiAoZXJnZWJuaXMgPiAwKQorICAgICAgICAgIHRlbGxfb2JqZWN0KGVuZW5teSwgIkR1IGZ1ZWhsc3QgRGljaCBnYW56IHNjaHdhY2guXG4iKTsKKyAgICB9CisgICAgCisgICAgRGVyIE5QQyBzY2h3YWVjaHQgc2VpbmVuIEdlZ25lciBlcmhlYmxpY2ghIEFsbGVzIHdpcmQgZnVlciA1IFNla3VuZGVuIHVtCisgICAgNTAsIGQuaC4gMC41IFNraWxsYXR0cmlidXRlIHJlZHV6aWVydCAoNTAgLSAxMDAgPT4gLTUwIGFscyBNb2RpZmlrYXRvcikuCisKK1NJRUhFIEFVQ0g6CisgICAgUF9TS0lMTF9BVFRSSUJVVEVTLCBQX1NLSUxMX0FUVFJJQlVURV9PRkZTRVRTLAorICAgIE1vZGlmeVNraWxsQXR0cmlidXRlLCBRdWVyeVNraWxsQXR0cmlidXRlKCksCisgICAgUmVtb3ZlU2tpbGxBdHRyaWJ1dGVNb2RpZmVyKCksIFF1ZXJ5U2tpbGxBdHRyaWJ1dGVNb2RpZmllcigpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNy4wOC4yMDA4IFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vb2Jzb2xldGUvTm90aWZ5R2l2ZVF1ZXN0IGIvZG9jL2xmdW4vb2Jzb2xldGUvTm90aWZ5R2l2ZVF1ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjk3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9vYnNvbGV0ZS9Ob3RpZnlHaXZlUXVlc3QKQEAgLTAsMCArMSwzNyBAQAorKioqKioqKioqKioqKioqKioqKioqIE9CU09MRVRFIExGVU4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGllc2UgRWZ1biBiaXR0ZSBuaWNodCBtZWhyIGJlbnV0emVuLCBzb25kZXJuIHN0YXR0ZGVzc2VuIGRpZSAgICAgICAqCisqIEV2ZW50cyAoc2llaGUgIm1hbiBldmVudHMiKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTm90aWZ5R2l2ZVF1ZXN0KCkKKworRlVOS1RJT046CisgICAgIHZvaWQgTm90aWZ5R2l2ZVF1ZXN0KG9iamVjdCBwbCwgc3RyaW5nIGtleSk7CisgICAgIAorREVGSU5JRVJUIElOOgorICAgICAvc3RkL2dpbGRlbl9vYi5jCisgICAgIAorQVJHVU1FTlRFOgorICAgICBwbCAgICAgRGVyIFNwaWVsZXIsIGRlciBlaW5lIFF1ZXN0IGdlbG9lc3QgaGF0LgorICAgICBrZXkgICAgTmFtZSBkZXIgZ2Vsb2VzdGVuIFF1ZXN0LgorICAgICAKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllIEZ1bmt0aW9uIHdpcmQgaW4gZGVyIEdpbGRlIGRlcyBTcGllbGVycyBhdWZnZXJ1ZmVuLCB3ZW5uIGRlciAKKyAgICAgU3BpZWxlciBlaW5lIGd1ZWx0aWdlIFF1ZXN0IGJlc3RlaHQgLSB1bmQgendhciB1bmFiaGFlbmdpZyBkYXZvbiwKKyAgICAgb2IgZXIgc2llIGJlcmVpdHMgZ2Vsb2VzdCBoYXQsIG9kZXIgbmljaHQuCisgICAgIAorUlVFQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisgICAgIAorQkVNRVJLVU5HRU46CisgICAgIERpZSBGdW5rdGlvbiBpc3QgZGFmdWVyIGdlZGFjaHQsIHZvbiBHaWxkZW5wcm9ncmFtbWllcmVybiB1ZWJlcnNjaHJpZWJlbgorICAgICB6dSB3ZXJkZW4sIHdlbm4gYmVpc3BpZWxzd2Vpc2UgYmVzdGltbXRlIFF1ZXN0cyBhbHMgQXVmc3RpZWdzYmVkaW5ndW5nCisgICAgIHZlcmxhbmd0IHdlcmRlbiwgZGllc2UgYWJlciBpbiBkZXIgZW50c3ByZWNoZW5kZW4gR2lsZGUgZ2Vsb2VzdCBzZWluCisgICAgIG11ZXNzZW4gKHouQi4gT2JlcmdsYWRpYXRvciBhbHMgTGV2ZWwtNS1aYXViZXJlcikuCisgICAgIAorU0lFSEUgQVVDSDoKKyAgICAgL3N0ZC9naWxkZW5fb2IuYworICAgICAvc3RkL3BsYXllci9xdWVzdHMuYworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBGcmkgT2N0IDQgMTA6MTc6MDAgMTk5NiBieSBTaWx2YW5hCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9vYnNvbGV0ZS9Ob3RpZnlIcENoYW5nZSBiL2RvYy9sZnVuL29ic29sZXRlL05vdGlmeUhwQ2hhbmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODJiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9vYnNvbGV0ZS9Ob3RpZnlIcENoYW5nZQpAQCAtMCwwICsxLDQ3IEBACisqKioqKioqKioqKioqKioqKioqKiogT0JTT0xFVEUgTEZVTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEaWVzZSBFZnVuIGJpdHRlIG5pY2h0IG1laHIgYmVudXR6ZW4sIHNvbmRlcm4gc3RhdHRkZXNzZW4gZGllICAgICAgICoKKyogSG9va3MgKHMuIC9kb2Mvc3RkL2hvb2tzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorTm90aWZ5SHBDaGFuZ2UoKQorCitGVU5LVElPTjoKKwl2b2lkIE5vdGlmeUhwQ2hhbmdlKCk7CisKK0RFRklOSUVSVCBJTjoKKwkvc3RkL3BsYXllci9saWZlLmMKKworQVJHVU1FTlRFOgorCWtlaW5lCisKK0JFU0NIUkVJQlVORzoKKwlXZW5uIHNpY2ggZGllIExlYmVuc3B1bmt0ZSBlaW5lcyBTcGllbGVycyBhZW5kZXJuLCBzbyB3ZXJkZW4gZGF2b24KKwlhdWNoIGFuZGVyZSBPYmpla3RlIHVudGVycmljaHRldCwgc29mZXJuIGRpZXNlIG1pdHRlbHMgZGVyIEZ1bmt0aW9uCisJQWRkSHBIb29rKCkgYmVpIGViZW4gZGllc2VtIFNwaWVsZXIgYW5nZW1lbGRldCB3dXJkZW4uCisJRm9ydGFuIHdpcmQgZGFubiBkaWUgRnVua3Rpb24gTm90aWZ5SHBDaGFuZ2UoKSBpbiBkaWVzZW4KKwlhbmdlbWVsZGV0ZW4gT2JqZWt0ZW4gYXVmZ2VydWZlbiwgd2VubiBzaWNoIGRpZSBQcm9wZXJ0eSBQX0hQIGRlcworCVNwaWVsZXJzIGFlbmRlcnQuIEVzIHdlcmRlbiBoaWVyYmVpIGtlaW5lIEFyZ3VtZW50ZSBhbgorCU5vdGlmeUhwQ2hhbmdlKCkgdWViZXJnZWJlbiwgZGllIGFrdHVlbGxlbiBMZWJlbnNwdW5rdGUga2FubiBtYW4gamEKKwlhdWNoIG9obmUgd2VpdGVyZXMgdWViZXIgZGllIFByb3BlcnR5IFBfSFAgaW4gRXJmYWhydW5nIGJyaW5nZW4gdW5kCisJYWVsdGVyZSBXZXJ0ZSBtdXNzIG1hbiBzaWNoIGdlc29uZGVydCBtZXJrZW4uIFp1IGJlYWNodGVuIGlzdCwgZGFzcworCWRpZSBQcm9wZXJ0eSBQX0hQIGJlaSBBdWZydWYgZGVyIEZ1bmt0aW9uIE5vdGlmeUhwQ2hhbmdlKCkgYmVyZWl0cworCWRlbiBuZXVlbiBXZXJ0IGVudGhhZWx0LgorCUJlaSBkZW0gU3BpZWxlciBhbmdlbWVsZGV0ZSBPYmpla3RlLCBkaWUgdm9uIExlYmVuc3B1bmt0ZWFlbmRlcnVuZ2VuCisJaW5mb3JtaWVydCB3ZXJkZW4gc29sbGVuLCB3ZXJkZW4gYXV0b21hdGlzY2ggYXVzIGRlciBMaXN0ZSBlbnRmZXJudCwKKwl3ZW5uIHNpZSB6ZXJzdG9lcnQgd3VyZGVuLiBEaWVzZSBMaXN0ZSBpc3QgaW4gZGVyIFByb3BlcnR5CisJUF9IUF9IT09LUyB6dSBmaW5kZW4uIFBlciBIYW5kIGthbm4gbWFuIHNpZSBhdWNoIGV4cGxpeml0IG1pdHRlbHMKKwlkZXIgRnVua3Rpb24gUmVtb3ZlSHBIb29rKCkgZW50ZmVybmVuLgorCVN0aXJidCBlaW4gU3BpZWxlciwgc28gd2lyZCBkaWUgRnVua3Rpb24gTm90aWZ5UGxheWVyRGVhdGgoKQorCWF1ZmdlcnVmZW4gdW5kIG5pY2h0IE5vdGlmeUhwQ2hhbmdlKCkhCisKK1JVZUNLR0FCRVdFUlQ6CisJa2VpbmVyCisKK0JFSVNQSUVMRToKKwlpc3QgaW4gQXJiZWl0CisKK1NJRUhFIEFVQ0g6CisJUF9IUCwgUF9IUF9IT09LUywgQWRkSHBIb29rKCksIFJlbW92ZUhwSG9vaygpLAorCURlZmVuZCgpLCBkb19kYW1hZ2UoKSwgTm90aWZ5UGxheWVyRGVhdGgoKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBUaHUgTm92IDE5IDEzOjU0OjMzIDE5OTggYnkgUGF0cnluCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9vYnNvbGV0ZS9RdWVyeUVuZW15IGIvZG9jL2xmdW4vb2Jzb2xldGUvUXVlcnlFbmVteQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBiNTgzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vb2Jzb2xldGUvUXVlcnlFbmVteQpAQCAtMCwwICsxLDI0IEBACisqKioqKioqKioqKioqKioqKioqKiogT0JTT0xFVEUgTEZVTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorRlVOS1RJT046CisJb2JqZWN0IFF1ZXJ5RW5lbXkoKTsKKworREVGSU5JRVJUIElOOgorCS9zdGQvbGl2aW5nL2NvbWJhdC5jCisKK0FSR1VNRU5URToKKwlrZWluZQorCitSVWVDS0dBQkVXRVJUOgorCWdlZnVuZGVuZXIgR2VnbmVyCisKK0JFU0NIUkVJQlVORzoKKwlEaWVzZSBGdW5rdGlvbiBsaWVmZXJ0IHp1ZmFlbGxpZyBlaW5lbiBkZXIgYW53ZXNlbmRlbiBHZWduZXIKKwl6dXJ1ZWNrLCBzb2Zlcm4ga2VpbmUgR2VnbmVyIGJldm9yenVndCBhdXNnZXdhZWhsdCB3ZXJkZW4uCisKK0JFTUVSS1VOR0VOOgorICBEaWVzZSBMZnVuIGV4aXN0aWVydCBuaWNodCBtZWhyLiBCaXR0ZSBTZWxlY3RFbmVteSgpIGJlbnV0emVuLgorCitTSUVIRSBBVUNIOgorCVNlbGVjdEVuZW15KCksIFF1ZXJ5UHJlZmVyZWRFbmVteSgpLCBQX1BSRUZFUkVEX0VORU1ZCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNy4wMi4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9vYnNvbGV0ZS9RdWVyeUluc2VydEhvb2tzIGIvZG9jL2xmdW4vb2Jzb2xldGUvUXVlcnlJbnNlcnRIb29rcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDNkMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vb2Jzb2xldGUvUXVlcnlJbnNlcnRIb29rcwpAQCAtMCwwICsxLDMxIEBACisqKioqKioqKioqKioqKioqKioqKiogT0JTT0xFVEUgTEZVTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEaWVzZSBFZnVuIGJpdHRlIG5pY2h0IG1laHIgYmVudXR6ZW4sIHNvbmRlcm4gc3RhdHRkZXNzZW4gZGllICAgICAgICoKKyogSG9va3MgKHMuIC9kb2Mvc3RkL2hvb2tzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorUXVlcnlJbnNlcnRIb29rcygpCisKK0ZVTktUSU9OOgorICAgICBvYmplY3QgKlF1ZXJ5SW5zZXJ0SG9va3MoKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3BsYXllci9yZXN0cmljdGlvbnMuYworCitBUkdVTUVOVEU6CisgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgKERpZXNlIEZ1bmt0aW9uYWxpdGFldCB3dXJkZSBlcnNldHp0IGR1cmNoIGRlbiBhbGxnZW1laW5lbiBIb29rCisgICAgICBIX0hPT0tfSU5TRVJUIHVuZCBpc3QgbnVyIG5vY2ggYXVzIEdydWVuZGVuIGRlciBLb21wYXRpYmlsaXRhZXQKKyAgICAgIHZvcmhhbmRlbi4pCisKKyAgICAgRGllc2UgRnVua3Rpb24gZ2lidCBkaWUgYWt0dWVsbCBiZWltIFNwaWVsZXJvYmpla3QgYW5nZW1lbGRldGVuCisgICAgIExpc3RlbmVyLU9iamVrdGUgenVydWVjay4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgQXJyYXkgYXVzIE9iamVrdHBvaW50ZXJuIG9kZXIgbGVlcmVzIEFycmF5CisKK1NJRUhFIEFVQ0g6CisgICAgTm90aWZ5SW5zZXJ0KCksIEFkZEluc2VydEhvb2soKSwgUmVtb3ZlSW5zZXJ0SG9vaygpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDE0LjA0LjIwMTAsIEFyYXRob3JuCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9vYnNvbGV0ZS9RdWVyeU9wdFFQIGIvZG9jL2xmdW4vb2Jzb2xldGUvUXVlcnlPcHRRUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY3MmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vb2Jzb2xldGUvUXVlcnlPcHRRUApAQCAtMCwwICsxLDI1IEBACitRdWVyeU9wdFFQKCkKKworRlVOS1RJT046CisgICAgaW50IFF1ZXJ5T3B0UVAoKQorCitERUZJTklFUlQgSU46CisgICAgL3NlY3VyZS9xdWVzdG1hc3Rlci5jCisKK0FSR1VNRU5URToKKyAgICBrZWluZQorCitSVUVDS0dBQkVXRVJUOgorICAgIEFiZW50ZXVlcnB1bmt0ZSBkZXIgb3B0aW9uYWxlbiBRdWVzdHMKKworQkVTQ0hSRUlCVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgZGllIEFiZW50ZXVlcnB1bmt0ZSBkZXIgb3B0aW9uYWxlbgorICAgIEFiZW50ZXVlciB6dXJ1ZWNrLiAKKworU0lFSEUgQVVDSDoKKyAgICBHaXZlUXVlc3QsIFF1ZXJ5UXVlc3QsIC9zZWN1cmUvcXVlc3RtYXN0ZXIuaCwgUXVlcnlHcm91cGVkS2V5cywKKyAgICBRdWVyeU1heFFQLCBRdWVyeVRvdGFsUVAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWnVsZXR6dCBnZWFlbmRlcnQ6IFNhbSwgMjUuIE5vdiAyMDAwLCAxNDowNDoyOCB2b24gWm9vay4KKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vb2Jzb2xldGUvUmVtb3ZlSHBIb29rIGIvZG9jL2xmdW4vb2Jzb2xldGUvUmVtb3ZlSHBIb29rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMTc3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9vYnNvbGV0ZS9SZW1vdmVIcEhvb2sKQEAgLTAsMCArMSwyNSBAQAorKioqKioqKioqKioqKioqKioqKioqIE9CU09MRVRFIExGVU4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGllc2UgRWZ1biBiaXR0ZSBuaWNodCBtZWhyIGJlbnV0emVuLCBzb25kZXJuIHN0YXR0ZGVzc2VuIGRpZSAgICAgICAqCisqIEhvb2tzIChzLiAvZG9jL3N0ZC9ob29rcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1JlbW92ZUhwSG9vaygpCitGVU5LVElPTjoKKyAgICAgaW50IFJlbW92ZUhwSG9vayhvYmplY3Qgb2IpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9wbGF5ZXIvbGlmZS5jCisKK0FSR1VNRU5URToKKyAgICAgb2IgLSBkYXMgT2JqZWt0LCBkYXMgc2ljaCBhdXN0cmFnZW4gbW9lY2h0ZS4KKworQkVTQ0hSRUlCVU5HOgorICAgICBFbnRmZXJudCBkZW4gRWludHJhZyBmdWVyIGRpZXNlcyBPYmpla3QgaW4gUF9IUF9IT09LUy4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBFcmZvbGcsIDAgc29uc3QKKworU0lFSEUgQVVDSDoKKyAgICAgR2VnZW5wYXJ0OglBZGRIcEhvb2soKQorICAgICBQcm9wczoJUF9IUF9IT09LUywgUF9IUAorCisyMy5GZWIuMjAwNCBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vb2Jzb2xldGUvUmVtb3ZlSW5zZXJ0SG9vayBiL2RvYy9sZnVuL29ic29sZXRlL1JlbW92ZUluc2VydEhvb2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzMmVlZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL29ic29sZXRlL1JlbW92ZUluc2VydEhvb2sKQEAgLTAsMCArMSwzMSBAQAorKioqKioqKioqKioqKioqKioqKioqIE9CU09MRVRFIExGVU4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGllc2UgRWZ1biBiaXR0ZSBuaWNodCBtZWhyIGJlbnV0emVuLCBzb25kZXJuIHN0YXR0ZGVzc2VuIGRpZSAgICAgICAqCisqIEhvb2tzIChzLiAvZG9jL3N0ZC9ob29rcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1JlbW92ZUluc2VydEhvb2soKQorCitGVU5LVElPTjoKKyAgICAgdm9pZCBSZW1vdmVJbnNlcnRIb29rKG9iamVjdCBvYik7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9wbGF5ZXIvcmVzdHJpY3Rpb25zLmMKKworQVJHVU1FTlRFOgorICAgICBvYiAtIERhcyBPYmpla3QsIGRhcyBhbHMgTGlzdGVuZXIgYXVzIGRlciBMaXN0ZSBhdXNnZXRyYWdlbiB3ZXJkZW4gc29sbAorCitCRVNDSFJFSUJVTkc6CisgICAgIChEaWVzZSBGdW5rdGlvbmFsaXRhZXQgd3VyZGUgZXJzZXR6dCBkdXJjaCBkZW4gYWxsZ2VtZWluZW4gSG9vaworICAgICAgSF9IT09LX0lOU0VSVCB1bmQgaXN0IG51ciBub2NoIGF1cyBHcnVlbmRlbiBkZXIgS29tcGF0aWJpbGl0YWV0CisgICAgICB2b3JoYW5kZW4uKQorCisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgaW0gU3BpZWxlcm9iamVrdCBhdWZnZXJ1ZmVuLCB1bSBlaW4gYWxzIExpc3RlbmVyCisgICAgIGVpbmdldHJhZ2VuZXMgSG9vay1PYmpla3Qgb2Igd2llZGVyIGF1c3p1dHJhZ2VuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBrZWluZXIKKworU0lFSEUgQVVDSDoKKyAgICBOb3RpZnlJbnNlcnQoKSwgQWRkSW5zZXJ0SG9vaygpLCBRdWVyeUluc2VydEhvb2tzKCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMTQuMDQuMjAxMCwgQXJhdGhvcm4KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL29ic29sZXRlL1Rlc3RBdHRyaWJ1dGVMb2NrIGIvZG9jL2xmdW4vb2Jzb2xldGUvVGVzdEF0dHJpYnV0ZUxvY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2ZTkzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL29ic29sZXRlL1Rlc3RBdHRyaWJ1dGVMb2NrCkBAIC0wLDAgKzEsMjUgQEAKKyoqKioqKioqKioqKioqKioqKioqKiBPQlNPTEVURSBMRlVOICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitUZXN0QXR0cmlidXRlTG9jaygpCitGVU5LVElPTjoKKyAgICAgc3RyaW5nIFRlc3RBdHRyaWJ1dGVMb2NrKG1hcHBpbmcgY2hlY2spCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jCisNCitQQVJBTUVURVI6DQorICAgICBjaGVjawktIE1hcHBpbmcgbWl0IEF0dHJpYnV0ZW46IChbPGF0dHI+Ojx3ZXJ0Pl0pDQorCitCRVNDSFJFSUJVTkc6CisgICAgIFBydWVmdCwgb2IgZWluZXMgZGVyIGltIE1hcHBpbmcgZW50aGFsdGVuZW4gQXR0cmlidXRlIGJsb2NraWVydA0KKyAgICAgaXN0IChiZXJlaXRzIGR1cmNoIGVpbmVuIGFuZGVyZW4gTW9kaWZpZXIgYmVsZWd0IHd1cmRlKS4KKyAgICAgCisgICAgIERhIE1vZGlmaWVyIG5pY2h0IG1laHIgZGlyZWt0IGJsb2NraWVyZW4gaXN0IGRpZXNlIEZ1bmt0aW9uIG9ic29sZXQKKyAgICAgdW5kIGluIExpdmluZ3MgaW56d2lzY2hlbiBuaWNodCBtZWhyIGV4aXN0ZW50LgorCitTSUVIRSBBVUNIOgorICAgICBRdWVyeUF0dHJpYnV0ZSgpLCBRdWVyeVJlYWxBdHRyaWJ1dGUoKSwgUXVlcnlBdHRyaWJ1dGVPZmZzZXQoKSwNCisgICAgIFNldEF0dHIoKSwgU2V0QXR0cmlidXRlKCksIFNldFJlYWxBdHRyaWJ1dGUoKSwgVXBkYXRlQXR0cmlidXRlcygpLA0KKyAgICAgUF9BVFRSSUJVVEVTLCBQX0FUVFJJQlVURVNfT0ZGU0VUUywgUF9BVFRSSUJVVEVTX01PRElGSUVSLA0KKyAgICAgUF9YX0FUVFJfTU9ELCBQX01fQVRUUl9NT0QsIC9zdGQvbGl2aW5nL2F0dHJpYnV0ZXMuYw0KKworMTEuMDUuMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vb2Jzb2xldGUvZXh0cmFfbG9vayBiL2RvYy9sZnVuL29ic29sZXRlL2V4dHJhX2xvb2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzYThlZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL29ic29sZXRlL2V4dHJhX2xvb2sKQEAgLTAsMCArMSwxOSBAQAorKioqKioqKioqKioqKioqKioqKioqIFZFUkFMVEVURSBMRlVOICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEaWVzZSBMRlVOIGlzdCB2ZXJhbHRldC4gQml0dGUgYmVudXR6dCBzaWUgTklDSFQgbWVociwgc29uZGVybiAgKgorKiBzdGF0dGRlc3NkZW4gQWRkRXh0cmFMb29rKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitleHRyYV9sb29rKCkKKworRlVOS1RJT046CisgICAgc3RyaW5nIGV4dHJhX2xvb2soKTsKKworQkVTQ0hSRUlCVU5HOgorICAgIEthbm4gaW4gT2JqZWt0IGRlZmluaWVydCBzZWluLiBXZW5uIGVpbiBMaXZpbmcgKHN0ZC9saXZpbmcvZGVzY3JpcHRpb24pCisgICAgZGFzIE9iamVrdCBlbnRoYWVsdCwgd2lyZCB6dSBkZXNzZW4gbG9uZygpIGRlciB6dXJ1ZWNrZ2VnZWJlbmUgU3RyaW5nCisgICAgaGluenVnZWZ1ZWd0LgorCitTSUVIRSBBVUNIOgorICAgIEFkZEV4dHJhTG9vaygpCisKKzI1LkphbiAyMDE1IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9vYnNvbGV0ZS9wYXJhbW92ZSBiL2RvYy9sZnVuL29ic29sZXRlL3BhcmFtb3ZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Njg2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9vYnNvbGV0ZS9wYXJhbW92ZQpAQCAtMCwwICsxLDQ1IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqIFZFUkFMVEVURSBMRlVOICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqIERPIE5PVCBVU0UhICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitwYXJhbW92ZSgpCisKK0ZVTktUSU9OOgorICAgICBpbnQgcGFyYW1vdmUoKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL3Jvb20vcGFyYS5jCisKK0FSR1VNRU5URToKKyAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICBCZXdlZ3QgZGVuIFNwaWVsZXIgZ2dmLiBpbiBlaW5lIFBhcmFsbGVsZGltZW5zaW9uLgorCitSVWVDS0dBQkVXRVJUOgorICAgICAxLCB3ZW5uIGRlciBTcGllbGVyIGRpZSBEaW1lbnNpb24gZ2V3ZWNoc2VsdCBoYXQuCisKK0JFSVNQSUVMOgorICAgICBpbml0KCl7CisgICAgICAgaWYoIXBhcmFtb3ZlKCkpIDo6aW5pdCgpOworICAgICAgfQorCitCRU1FUktVTkdFTjoKKyAgICAgRElFU0UgRlVOS1RJT04gTklDSFQgTUVIUiBCRU5VVFpFTiEKKworICAgICBEaWVzZSBGdW5rdGlvbiBzb2xsdGUgbnVyIGF1cyBlaW5lbSBpbml0KCkgYXVmZ2VydWZlbiB3ZXJkZW4hCisKKyAgICAgRnVlciBkaWUgRW50c2NoZWlkdW5nLCBpbiB3ZWxjaGVtIFJhdW0gZWluIFNwaWVsZXIgaW4gQWJoYWVuZ2lna2VpdCAKKyAgICAgdm9uIFBfUEFSQSBsYW5kZXQsIGlzdCBkaWUgRnVua3Rpb24gbW92ZSgpIHp1c3RhZW5kaWcuIEFscyBNYWdpZXIgCisgICAgIG11c3MgbWFuIHNpY2ggZGFydW0gbmljaHQgZ2Vzb25kZXJ0IGt1ZW1tZXJuLiBEYXMgaGVpc3N0IGFiZXIgYXVjaCwgCisgICAgIGRhc3MgYmVpbSBBbnNjaGx1c3MgZWluZXMgTm9ybWFsd2VsdHJhdW1lcyBhdXRvbWF0aXNjaCBhbGxlIGluIGRlbSAKKyAgICAgVmVyemVpY2huaXMgbWl0IGdsZWljaGVtIE5hbWVuIHZvcmhhbmRlbmVuIFBhcmFsbGVsd2VsdHJhZXVtZSBtaXQgCisgICAgIGFuZ2VzY2hsb3NzZW4gd2VyZGVuLgorCisgICAgIERlc3dlZ2VuIGlzdCBwYXJhbW92ZSgpIHZlcmFsdGV0IHVuZCBzb2xsdGUgbmljaHQgbWVociBnZW51dHp0IHdlcmRlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgL3N0ZC9yb29tL3BhcmEuYywgUF9QQVJBLCBQX05PX1BMQVlFUlMsIG1vdmUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogMDUuMDguMjAwNywgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vcGljayBiL2RvYy9sZnVuL3BpY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliZjUxZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3BpY2sKQEAgLTAsMCArMSw0OCBAQAorcGljaygpCisKK0ZVTktUSU9OOgorICAgIHB1YmxpYyB2YXJhcmdzIGludCBwaWNrKG9iamVjdCBvLCBtaXhlZCBtc2cpOworCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvcHV0X2FuZF9nZXQuYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IG8KKyAgICAgICAgRGFzIE9iamVrdCwgZGFzIGF1ZmdlaG9iZW4gd2VyZGVuIHNvbGwuCisgICAgbWl4ZWQgbXNnCisgICAgICAgIEVpbmUgb3B0aW9uYWxlIE1lbGR1bmcsIGRpZSBhbnN0ZWxsZSB2b24gUF9QSUNLX01TRyBvZGVyIGRlcgorICAgICAgICBTdGFuZGFyZG1lbGR1bmcgdmVyd2VuZGV0IHdpcmQsIG9kZXIgLTEsIHVtIGRpZSBNZWxkdW5nIHp1CisgICAgICAgIHVudGVyZHJ1ZWNrZW4uCisKK0JFU0NIUkVJQlVORzoKKyAgICBEZXIgU3BpZWxlciBvZGVyIE5QQyBuaW1tdCBkYXMgT2JqZWt0IGF1Zi4gR2lidCBvLT5tb3ZlKCkga2VpbmVuIHBvc2l0aXZlbgorICAgIFdlcnQgenVydWVjaywgYmVpc3BpZWxzd2Vpc2Ugd2VpbCBkYXMgT2JqZWt0IHp1IHNjaHdlciBpc3Qgb2RlciBuaWNodAorICAgIGdlbm9tbWVuIHdlcmRlbiBkYXJmLCBiZWtvbW10IGVyIGVpbmUgZW50c3ByZWNoZW5kZSBGZWhsZXJtZWxkdW5nLgorCitSVUVDS0dBQkVXRVJUOgorICAgIFdlbm4gZGFzIEF1Zm5laG1lbiBnZWtsYXBwdCBoYXQsIDEsIGFuc29uc3RlbiAwLgorCitCRU1FUktVTkc6CisgICAgRGllc2UgRnVua3Rpb24gaXN0IGRhbm4gc2lubnZvbGwsIHdlbm4gbWFuIGRlbiBTcGllbGVyIGVpbiBPYmpla3QKKyAgICBhdWZuZWhtZW4gbGFzc2VuIHVuZCBzaWNoIG5pY2h0IHNlbGJzdCB1bSBkaWUgRmVobGVyYmVoYW5kbHVuZyBrdWVtbWVybgorICAgIG1vZWNodGUgLSB1bmQgZGEgdW56YWVobGlnZSB2ZXJzY2hpZWRlbmUgRGluZ2Ugc2NoaWVmZ2VoZW4ga29lbm5lbiB1bmQKKyAgICBtYW5jaGUgT2JqZWt0ZSBlaWdlbmUgRmVobGVybWVsZHVuZ2VuIGRlZmluaWVyZW4sIGVpZ2VudGxpY2ggaW1tZXIuCisKKyAgICBEaWUgRnVua3Rpb24gcHJ1ZWZ0IG5pY2h0LCBvYiBzaWNoIGRhcyBPYmpla3QgdWViZXJoYXVwdCBpbiBkZXIgUmVpY2h3ZWl0ZQorICAgIGRlcyBTcGllbGVycy9OUEMgYmVmaW5kZXQsIGRhcyBtdXNzIG1hbiBnZ2YuIHNlbGJzdCBlcm1pdHRlbG4uCisKK0JFSVNQSUVMOgorICAgIG9iID0gY2xvbmVfb2JqZWN0KFdFSU5HVU1NSSk7CisKKyAgICBpZiAodGhpc19wbGF5ZXIoKS0+cGljayhvYiwgKHsgIkR1IG5pbW1zdCBAV0VOVTIgYXVzIGRlbSBSZWdhbC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQFdFUjEgbmltbXQgQFdFTlUyIGF1cyBkZW0gUmVnYWwuIiB9KSkpCisgICAgICAgIHdlaW5ndW1taS0tOworICAgIGVsc2UKKyAgICAgICAgb2ItPnJlbW92ZSgpOworCitTSUVIRSBBVUNIOgorICAgIG1vdmUoTCksIFBfUElDS19NU0csIHBpY2tfb2JqZWN0cyhMKSwgUF9OT0lOU0VSVF9NU0csIFBfTk9MRUFWRV9NU0csCisgICAgUF9UT09fTUFOWV9NU0csIFBfVE9PX0hFQVZZX01TRywgUF9FTlZfVE9PX0hFQVZZX01TRywgUF9OT0dFVAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBUaHUgQXVnIDI4IDIyOjIxOjQxIDIwMDggYnkgQW15bnRob3IKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL3BpY2tfb2JqIGIvZG9jL2xmdW4vcGlja19vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjN2MxNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3BpY2tfb2JqCkBAIC0wLDAgKzEsMjcgQEAKK3BpY2tfb2JqKCkKKworRlVOS1RJT04KKyAgICBpbnQgcGlja19vYmoob2JqZWN0IG9iKQorCitERUZJTklFUlQgSU46CisKKyAgICAvc3RkL2xpdmluZy9wdXRfYW5kX2dldC5jCisKK0FSR1VNRU5URToKKworICAgIG9iICAgICAgRGFzIE9iamVrdCwgZGFzIGdlbm9tbWVuIHdlcmRlbiBzb2xsLgorCitCRVNDSFJFSUJVTkc6CisKKyAgICBEYXMgTGViZXdlc2VuLCBpbiBkZW0gZGllc2UgRnVua3Rpb24gYXVmZ2VydWZlbiB3ZXJkZW4gc29sbCwgaGVidAorICAgIGRlbiBhbmdlZ2ViZW5lbiBHZWdlbnN0YW5kIChvYikgYXVmLCBmYWxscyBlcyBpaG0gbW9lZ2xpY2ggaXN0LgorCitSVWVDS0dBQkVXRVJUOgorICAgIDEsIHdlbm4gZGFzIE9iamVrdCBnZW5vbW1lbiB3dXJkZSBvZGVyIGRpZXMgbmljaHQgbW9lZ2xpY2ggd2FyLiAoaW4gZGllc2VtCisgICAgRmFsbCB3aXJkIGF1Y2ggZGlyZWt0IGVpbmUgVGV4dGF1c2dhYmUgYXVzZ2VnZWJlbikKKyAgICAwIHNvbnN0LCBpbiBkaWVzZW0gRmFsbCB3aXJkIGluIG5vdGlmeV9mYWlsIGVpbmUgcGFzc2VuZGUgQXVzZ2FiZQorICAgIHBsYXppZXJ0CisKK1NJRUhFIEFVQ0g6CisKKyAgICBkcm9wX29iaigpLCBmaW5kX29icygpLCBnaXZlX29iaigpLCBwdXRfb2JqKCksIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL3BpY2tfb2JqZWN0cyBiL2RvYy9sZnVuL3BpY2tfb2JqZWN0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMwODNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vcGlja19vYmplY3RzCkBAIC0wLDAgKzEsMzkgQEAKK3BpY2tfb2JqZWN0cygpCisKK0ZVTktUSU9OOgorICAgIHB1YmxpYyB2YXJhcmdzIGludCBwaWNrX29iamVjdHMoc3RyaW5nIHN0ciwgaW50IGZsYWcsIG1peGVkIG1zZyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9wdXRfYW5kX2dldC5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgc3RyCisgICAgICAgIFdhcyBhdWZnZWhvYmVuIHdlcmRlbiBzb2xsLgorICAgIGludCBmbGFnCisgICAgICAgIE11c3MgZGFzIE9iamVrdCBpcmdlbmR3byBkcmluc3RlY2tlbiAoZmxhZyA9IDEpLCBvZGVyIGRhcmYgZXMgZWluZmFjaAorICAgICAgICBzbyBoZXJ1bWxpZWdlbiAoZmxhZyA9IDApPyBEaWVzZXMgQXJndW1lbnQgaXN0IGhhdXB0c2FlY2hsaWNoIGZ1ZXIgZGFzCisgICAgICAgIEtvbW1hbmRvICJob2xlIiBnZWRhY2h0LCBpbiBkZXIgUmVnZWwgYnJhdWNodCBtYW4gZXMgbmljaHQgYW56dWdlYmVuLgorICAgIG1peGVkIG1zZworICAgICAgICBFaW5lIG9wdGlvbmFsZSBNZWxkdW5nLCBkaWUgYW5zdGVsbGUgdm9uIFBfUElDS19NU0cgb2RlciBkZXIKKyAgICAgICAgU3RhbmRhcmRtZWxkdW5nIHZlcndlbmRldCB3aXJkLCBvZGVyIC0xLCB1bSBkaWUgTWVsZHVuZyB6dQorICAgICAgICB1bnRlcmRydWVja2VuLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGVyIFNwaWVsZXIgb2RlciBOUEMgbmltbXQgZGllIGluIDxzdHI+IGJlbmFubnRlbiBTYWNoZW4uIEthbm4gZXIgZWluCisgICAgT2JqZWt0IG5pY2h0IG5laG1lbiwgYmVrb21tdCBlciBlaW5lIGVudHNwcmVjaGVuZGUgRmVobGVybWVsZHVuZy4gV2VubgorICAgIGtlaW5lIE9iamVrdGUgYXVmIDxzdHI+IHBhc3Nlbiwgd2lyZCBwZXIgX25vdGlmeV9mYWlsKCkgZWluZSBNZWxkdW5nCisgICAgZ2VzZXR6dCwgYWJlciBub2NoIG5pY2h0IGF1c2dlZ2ViZW4uCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgV2VubiA8c3RyPiBpcmdlbmR3ZWxjaGUgdm9yaGFuZGVuZW4gU2FjaGVuIHNpbmQsIDEsIHNvbnN0IDAuCisKK0JFTUVSS1VORzoKKyAgICBXZW5uIGRpZSBGdW5rdGlvbiAxIHp1cnVlY2tnaWJ0LCBoZWlzc3QgZGFzIG5vY2ggbmljaHQsIGRhc3MgZGVyIFNwaWVsZXIKKyAgICBldHdhcyBnZW5vbW1lbiBoYXQhIEVyIGhhdCBlcyBudXIgdmVyc3VjaHQsIGQuaC4gYXVmIGplZGVuIEZhbGwgZWluZQorICAgIE1lbGR1bmcgYmVrb21tZW4uIEdpYnQgZGllIEZ1bmt0aW9uIDAgenVydWVjaywgaGF0IGVyIG5vY2gga2VpbmUgYmVrb21tZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgbW92ZShMKSwgcGljayhMKSwgUF9QSUNLX01TRywgZmluZF9vYmplY3RzKEwpLCBtb3ZlZF9vYmplY3RzKEwpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IEZyaSBKdWwgMjUgMTA6NTg6NDMgMjAwOCBieSBBbXludGhvcgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vcHJlc2VudF9vYmplY3RzIGIvZG9jL2xmdW4vcHJlc2VudF9vYmplY3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Y2Y0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9wcmVzZW50X29iamVjdHMKQEAgLTAsMCArMSwzMiBAQAorcHJlc2VudF9vYmplY3RzKCkKKworRlVOS1RJT046CisgICAgIG9iamVjdCAqcHJlc2VudF9vYmplY3RzKHN0cmluZyBkZXNjKTsKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2NvbnRhaW5lci9yZXN0cmljdGlvbnMuYworCitBUkdVTUVOVEU6CisgICAgIGRlc2MKKyAgICAgICAgICBVbXNjaHJlaWJ1bmcgZGVzIGdlc3VjaHRlbiBPYmpla3RlcyBvZGVyICJhbGxlcyIgb2RlciAiYWxsZSIuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGllc2UgRnVua3Rpb24gZ2lidCBkaWUgT2JqZWt0ZSBpbSBJbm5lcmVuIGRlcyBCZWhhZWx0ZXJzIHp1cnVlY2ssIGRpZQorICAgICBzaWNoIG1pdCBkZXNjIGFuc3ByZWNoZW4gbGFzc2VuLiBJbiBkZW0gRmFsbCwgZGFzcyAiYWxsZShzKSIKKyAgICAgYW5nZWZvcmRlcnQgd2lyZCwgc2luZCBkYXMgYWxsZSBzaWNodGJhcmVuIE9iamVrdGUsIGFuc29uc3RlbiBkYXMgZXJzdGUKKyAgICAgT2JqZWt0LCBkYXMgc2ljaCBtaXQgZGVzYyBhbnNwcmVjaGVuIGxhZXNzdC4KKyAgICAgT2JqZWt0ZSwgZGllIFBfSU5WSVMgZ2VzZXR6dCBoYWJlbiwgemFlaGxlbiBhbHMgbmljaHQgYW5zcHJlY2hiYXIsIGltCisgICAgIEdlZ2Vuc2F0eiB6dSBzb2xjaGVuIE9iamVrdGVuLCBkaWUga2VpbmUgUF9TSE9SVCBoYWJlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRWluIEFycmF5IHZvbiBPYmpla3RlbiBtaXQgZGVuIGdlZm9yZGVydGVuIEVpZ2Vuc2NoYWZ0ZW4uCisKKyAgICAgQmVmaW5kZXQgc2ljaCBrZWluIE9iamVrdCBpbSBCZWhhZWx0ZXIsIGRhcyBzaWNoIGR1cmNoIGRlc2MgYW5zcHJlY2hlbgorICAgICBsYWVzc3QsIHNvIHdpcmQgZWluIGxlZXJlcyBBcnJheSB6dXJ1ZWNrZ2VnZWJlbi4KKworU0lFSEUgQVVDSDoKKyAgICAgbG9jYXRlX29iamVjdHMoKSwgL3N0ZC9jb250YWluZXIvcmVzdHJpY3Rpb25zLmMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDMuMDMuMjAxMywgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9wdXQgYi9kb2MvbGZ1bi9wdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlN2VhZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3B1dApAQCAtMCwwICsxLDQzIEBACitwdXQoKQorCitGVU5LVElPTjoKKyAgICBwdWJsaWMgdmFyYXJncyBpbnQgcHV0KG9iamVjdCBvLCBvYmplY3QgZGVzdCwgbWl4ZWQgbXNnKTsKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKKworQVJHVU1FTlRFOgorICAgIG9iamVjdCBvCisgICAgICAgIERhcyBPYmpla3QsIGRhcyBpcmdlbmR3byBoaW5nZXN0ZWNrdCB3ZXJkZW4gc29sbC4KKyAgICBvYmplY3QgZGVzdAorICAgICAgICBEZXIgQmVoYWVsdGVyLCBpbiBkZW4gZGFzIE9iamVrdCBnZXN0ZWNrdCB3ZXJkZW4gc29sbC4KKyAgICBtaXhlZCBtc2cKKyAgICAgICAgRWluZSBvcHRpb25hbGUgTWVsZHVuZywgZGllIGFuc3RlbGxlIHZvbiBQX1BVVF9NU0cgb2RlciBkZXIKKyAgICAgICAgU3RhbmRhcmRtZWxkdW5nIHZlcndlbmRldCB3aXJkLCBvZGVyIC0xLCB1bSBkaWUgTWVsZHVuZyB6dQorICAgICAgICB1bnRlcmRydWVja2VuLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGVyIFNwaWVsZXIgb2RlciBOUEMgc3RlY2t0IGRhcyBPYmpla3QgaW4gZWluZW4gQmVoYWVsdGVyLiBHaWJ0IG8tPm1vdmUoKQorICAgIGtlaW5lbiBwb3NpdGl2ZW4gV2VydCB6dXJ1ZWNrLCBiZWlzcGllbHN3ZWlzZSB3ZWlsIGVyIGRhcyBPYmpla3QgbmljaHQKKyAgICB3ZWdnZWJlbiBkYXJmIG9kZXIgZGVyIEJlaGFlbHRlciBzY2hvbiB2b2xsIGlzdCwgYmVrb21tdCBlciBlaW5lCisgICAgZW50c3ByZWNoZW5kZSBGZWhsZXJtZWxkdW5nLgorCitSVUVDS0dBQkVXRVJUOgorICAgIFdlbm4gZGFzIEJld2VnZW4gZ2VrbGFwcHQgaGF0LCAxLCBhbnNvbnN0ZW4gMC4KKworQkVNRVJLVU5HOgorICAgIERpZXNlIEZ1bmt0aW9uIGlzdCBkYW5uIHNpbm52b2xsLCB3ZW5uIG1hbiBkZW4gU3BpZWxlciBlaW4gT2JqZWt0IGlyZ2VuZHdvCisgICAgaGluc3RlY2tlbiBsYXNzZW4gdW5kIHNpY2ggbmljaHQgc2VsYnN0IHVtIGRpZSBGZWhsZXJiZWhhbmRsdW5nIGt1ZW1tZXJuCisgICAgbW9lY2h0ZSAtIHVuZCBkYSB1bnphZWhsaWdlIHZlcnNjaGllZGVuZSBEaW5nZSBzY2hpZWZnZWhlbiBrb2VubmVuIHVuZAorICAgIG1hbmNoZSBPYmpla3RlIGVpZ2VuZSBGZWhsZXJtZWxkdW5nZW4gZGVmaW5pZXJlbiwgZWlnZW50bGljaCBpbW1lci4KKworICAgIERpZSBGdW5rdGlvbiBwcnVlZnQgbmljaHQsIG9iIHNpY2ggZGFzIE9iamVrdCB1bmQgZGVyIEJlaGFlbHRlciB1ZWJlcmhhdXB0CisgICAgaW4gZGVyIFJlaWNod2VpdGUgZGVzIFNwaWVsZXJzL05QQyBiZWZpbmRlbiwgZGFzIG11c3MgbWFuIGdnZi4gc2VsYnN0CisgICAgZXJtaXR0ZWxuLgorCitTSUVIRSBBVUNIOgorICAgIG1vdmUoTCksIFBfUFVUX01TRywgcHV0X29iamVjdHMoTCksIFBfTk9JTlNFUlRfTVNHLCBQX05PTEVBVkVfTVNHLAorICAgIFBfVE9PX01BTllfTVNHLCBQX1RPT19IRUFWWV9NU0csIFBfRU5WX1RPT19IRUFWWV9NU0csIFBfTk9HRVQsIFBfTk9EUk9QCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFRodSBBdWcgMjggMjI6MjE6NTggMjAwOCBieSBBbXludGhvcgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vcHV0X29iaiBiL2RvYy9sZnVuL3B1dF9vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxYjI5OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3B1dF9vYmoKQEAgLTAsMCArMSwzMCBAQAorcHV0X29iaigpCisKK0ZVTktUSU9OCisgICAgaW50IHB1dF9vYmoob2JqZWN0IG9iLCBvYmplY3Qgd2hlcmUpCisKK0RFRklOSUVSVCBJTjoKKworICAgIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKKworQVJHVU1FTlRFOgorCisgICAgb2IgICAgICBEYXMgT2JqZWt0LCBkYXMgaXJnZW5kd28gaGluZWluZ2VsZWd0IHdlcmRlbiBzb2xsLgorICAgIHdoZXJlICAgRGFzICh0b3RlKSBPYmpla3QsIGluIGRhcyBldHdhcyBoaW5laW5nZWxlZ3Qgd2VyZGVuIHNvbGwuCisKK0JFU0NIUkVJQlVORzoKKworICAgIERhcyBMZWJld2VzZW4sIGluIGRlbSBkaWVzZSBGdW5rdGlvbiBhdWZnZXJ1ZmVuIHdlcmRlbiBzb2xsLCBsZWd0CisgICAgZGVuIGFuZ2VnZWJlbmVuIEdlZ2Vuc3RhbmQgKG9iKSBpbiBkYXMgYW5nZWdlYmVuZSBaaWVsb2JqZWt0ICh3aGVyZSkuCisgICAgRGFiZWkgc29sbHRlIGVzIHNpY2ggYmVpIHdoZXJlIHVtIGVpbmVuIENvbnRhaW5lci9SYXVtIGhhbmRlbG4uCisgICAgSXN0IHdoZXJlIGVpbiBMZWJld2VzZW4sIHZlcndlbmRldCBtYW4gYmVzc2VyIGdpdmVfb2JqKCkuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgMSwgd2VubiBkYXMgT2JqZWt0IHdlZ2dlbGVndCB3dXJkZSBvZGVyIGRpZXMgbmljaHQgbW9lZ2xpY2ggd2FyLiAoaW4gZGllc2VtCisgICAgRmFsbCB3aXJkIGF1Y2ggZGlyZWt0IGVpbmUgVGV4dGF1c2dhYmUgYXVzZ2VnZWJlbikKKyAgICAwIHNvbnN0LCBpbiBkaWVzZW0gRmFsbCB3aXJkIGluIG5vdGlmeV9mYWlsIGVpbmUgcGFzc2VuZGUgQXVzZ2FiZQorICAgIHBsYXppZXJ0CisKK1NJRUhFIEFVQ0g6CisKKyAgICBkcm9wX29iaigpLCBmaW5kX29icygpLCBnaXZlX29iaigpLCBwaWNrX29iaigpLCAvc3RkL2xpdmluZy9wdXRfYW5kX2dldC5jCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9xdWVyeV9wcmV2ZW50X3NoYWRvdyBiL2RvYy9sZnVuL3F1ZXJ5X3ByZXZlbnRfc2hhZG93Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYjBjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9xdWVyeV9wcmV2ZW50X3NoYWRvdwpAQCAtMCwwICsxLDM0IEBACitxdWVyeV9wcmV2ZW50X3NoYWRvdyhMKQorRlVOS1RJT046CisgICAgIHZhcmFyZ3MgaW50IHF1ZXJ5X3ByZXZlbnRfc2hhZG93KG9iamVjdCBzaGFkb3dlcikKKworUEFSQU1FVEVSOgorICAgICBvYmplY3Qgc2hhZG93ZXIJLSBkYSBPYmpla3QsIGRhcyBlaW5lIEJlc2NoYXR0dW5nIGJlYW50cmFndAorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIE1ldGhvZGUga2FubiBpbiBPYmpla3RlbiBkZWZpbmllcnQgd2VyZGVuLCBkaWUgbmljaHQgYmVzY2hhdHRldAorICAgICB3ZXJkZW4gd29sbGVuIG9kZXIgYW5oYW5kIGRlcyBPYmpla3RlcyBzaGFkb3dlciBlbnRzY2hlaWRlbiB3b2xsZW4gb2IKKyAgICAgc2llIGJlc2NoYXR0ZXQgd2VyZGVuIHdvbGxlbi4KKworICAgICBHaWJ0IGRpZSBGdW5rdGlvbiAwIHp1cnVlY2ssIHdpcmQgZWluIFNoYWRvdyBhdWYgZGFzIE9iamVrdCBlcmxhdWJ0LAorICAgICBzb25zdCBzY2hsYWVndCBlcyBmZWhsLgorCitCRUlTUElFTDoKKyAgICAgLy8gZ2VuZXJlbGwga2VpbmUgQmVzY2hhdHR1bmcKKyAgICAgaW50IHF1ZXJ5X3ByZXZlbnRfc2hhZG93KG9iamVjdCB3aG8pIHsKKyAgICAgIHJldHVybiAxOworICAgICB9CisKKyAgICAgLy8gQmVzY2hhdHR1bmcgZHVyY2ggb2ZmaXppZWxsZSBPYmpla3RlIGVybGF1YnQKKyAgICAgaW50IHF1ZXJ5X3ByZXZlbnRfc2hhZG93KG9iamVjdCB3aG8pIHsKKyAgICAgIGlmKHdobyAmJiAhc3Ryc3RyKG9iamVjdF9uYW1lKHdobyksIi9zdGQvcGxheWVyIikpCisgICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gMTsKKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBSZWNodGU6CSAgICAgcXVlcnlfYWxsb3dfc2hhZG93KE0pCisgICAgIEdlbmVyZWxsOgkgICAgIHNoYWRvdyhFKSwgdW5zaGFkb3coRSkKKyAgICAgSW5mb3JtYXRpb25lbjogIHF1ZXJ5X3NoYWRvd2luZyhFKQorCisyMC4gTWFpIDIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9xdWVyeV9yZWFsX25hbWUgYi9kb2MvbGZ1bi9xdWVyeV9yZWFsX25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2MzNkZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3F1ZXJ5X3JlYWxfbmFtZQpAQCAtMCwwICsxLDE1IEBACitxdWVyeV9yZWFsX25hbWUoKQorCitTWU5PUFNJUzoKKwlzdHJpbmcgcXVlcnlfcmVhbF9uYW1lKHZvaWQpCisKK0RFU0NSSVBUSU9OOgorCVRoZSByZXN1bHQgb2YgdGhpc19wbGF5ZXIoKS0+cXVlcnlfcmVhbF9uYW1lKCkgaXMgdXNlZCBhcworCWRlZmF1bHQgYXJndW1lbnQgZm9yIHRoZSBlZnVuIHdpemxpc3QoKS4KKworCUlmIExPR19TSE9VVCB3YXMgI2RlZmluZWQgaW4gdGhlIHBhcnNlciBhdCBjb21waWxlIHRpbWUsIHRoZQorCWVmdW4gc2hvdXQgd2lsbCB1c2UgcXVlcnlfcmVhbF9uYW1lKCkgdG8gbG9nIHRoZSBzaG91dGVyJ3MKKwluYW1lLgorCitTRUUgQUxTTzoKKwlzaG91dChFKSwgd2l6bGlzdChFKQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vcXVlcnlfd2VpZ2h0X2NvbnRlbnRzIGIvZG9jL2xmdW4vcXVlcnlfd2VpZ2h0X2NvbnRlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTgwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9xdWVyeV93ZWlnaHRfY29udGVudHMKQEAgLTAsMCArMSwyMCBAQAorcXVlcnlfd2VpZ2h0X2NvbnRlbnRzKCkKKworRlVOS1RJT046CisgICAgIGludCBxdWVyeV93ZWlnaHRfY29udGVudHMoKQorCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvY29udGFpbmVyL3Jlc3RyaWN0aW9ucy5jCisKK0FSR1VNRU5URToKKyAgICAga2VpbmUKKworQkVTQ0hSRUlCVU5HOgorICAgICBHaWJ0IGRhcyBHZXdpY2h0IGRlcyBJbmhhbHRlcyBkZXMgQmVoYWVsdGVycyB6dXJ1ZWNrIChvaG5lCisgICAgIEJlcnVlY2tzaWNodGlndW5nIHZvbiBQX1dFSUdIVF9QRVJDRU5UISkKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgRGFzIEdld2ljaHQgZGVzIEJlaGFlbHRlcmluaGFsdGVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBXZWQgTWF5IDggMTA6MjM6MzIgMTk5NiBieSBXYXJnb24KZGlmZiAtLWdpdCBhL2RvYy9sZnVuL3JlZHVjZV9oaXRfcG9pbnRzIGIvZG9jL2xmdW4vcmVkdWNlX2hpdF9wb2ludHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliMzM2OAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3JlZHVjZV9oaXRfcG9pbnRzCkBAIC0wLDAgKzEsNDMgQEAKK3JlZHVjZV9oaXRfcG9pbnRzKCkKK0ZVTktUSU9OOgorICAgIGludCByZWR1Y2VfaGl0X3BvaW50cyhpbnQgZGFtYWdlKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9saXZpbmcvbGlmZS5jCisKK0FSR1VNRU5URToKKyAgICBpbnQgZGFtYWdlCS0gZGVyIHp1Z2VmdWVndGUgU2NoYWRlbgorCitCRVNDSFJFSUJVTkc6CisgICAgRGVtIExlYmV3ZXNlbiB3ZXJkZW4gZGFtYWdlIExlYmVuc3B1bmt0ZSBhYmdlem9nZW4sIGFiZXIgZGVyCisgICAgV2VydCB3aXJkIGhpbnRlcmhlciBuaWNodCBrbGVpbmVyIGFscyAxIHNlaW4gdW5kIGRhcyBMZWJld2VzZW4KKyAgICB3aXJkIGRhZHVyY2ggbmljaHQgc3RlcmJlbi4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICBEaWUgdmVyYmxlaWJlbmRlbiBMZWJlbnNwdW5rdGUuCisKK0JFSVNQSUVMRToKKyAgICB3cml0ZSgiUGxvZXR6bGljaCBzY2hpZXNzdCBlaW5lIHNjaGV1c3NsaWNoZSBLcmVhdHVyIGF1cyBkZXIgUGZ1ZXR6ZSAiKworICAgICAgICAgICJoZXJhdXMgdW5kXG5iZWlzc3QgRGljaCBpbnMgQmVpbiwgc2llIHZlcnNjaHdpbmRldCBzbyBzY2huZWxsLCAiKworICAgICAgICAgICJ3aWUgc2llIGdla29tbWVuIGlzdC5cbiIpOworICAgIHRoaXNfcGxheWVyKCktPnJlZHVjZV9oaXRfcG9pbnRzKDUwKTsKKyAgICAoQXVzenVnIGF1cyAvcGxheWVycy9ib2luZy9mcmllZGhvZi9yb29tL2NhdDF4OSkKKworQkVNRVJLVU5HRU46CisgICAgZGFtYWdlIGthbm4gYXVjaCBlaW4gbmVnYXRpdmVyIFdlcnQgc2VpbiwgZGFubiB3ZXJkZW4gZGVtIExlYmV3ZXNlbgorICAgIGRpZXNlIExlYmVuc3B1bmt0ZSBndXRnZXNjaHJpZWJlbiB1bmQgYXVmIGRpZSBha3R1ZWxsZW4gTGViZW5zcHVua3RlCisgICAgYWRkaWVydC4gRGEgZGllcyBlaW5lIEZvcm0gZGVyIEhlaWx1bmcgaXN0LCBudXIgbmFjaCBSdWVja3NwcmFjaGUgbWl0CisgICAgZGVtIFJlZ2lvbnNtYWdpZXIgdmVyd2VuZGVuLgorCisgICAgQmVpIEhlaWxzdGVsbGVuIHNvbGx0ZSBlaW5lIGV2dGwuIEhlaWx1bmcgZGVzIFNwaWVsZXJzIG1pdCBkZXIgZWlnZW5zCisgICAgZGFmdWVyIGVpbmdlcmljaHRldGVuIEZ1bmt0aW9uIGNoZWNrX2FuZF91cGRhdGVfdGltZWRfa2V5IHJlYWxpc2llcnQKKyAgICB3ZXJkZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgR2VnZW5wYXJ0OglyZXN0b3JlX2hpdF9wb2ludHMoKQorICAgIFZlcndhbmR0Oglkb19kYW1hZ2UoKSwgRGVmZW5kKCksIHJlZHVjZV9zcGVsbF9wb2ludHMoKQorICAgIFByb3BzOglQX0hQCisgICAgS29uemVwdDoJaGVpbHVuZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBTYXQgRGVjIDEzIDAxOjAwOjQ3IDE5OTkgYnkgVGlsbHkKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL3JlZHVjZV9zcGVsbF9wb2ludHMgYi9kb2MvbGZ1bi9yZWR1Y2Vfc3BlbGxfcG9pbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYzA2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9yZWR1Y2Vfc3BlbGxfcG9pbnRzCkBAIC0wLDAgKzEsMjcgQEAKK3JlZHVjZV9zcGVsbF9wb2ludHMoKQorRlVOS1RJT046CisgICAgdm9pZCByZWR1Y2Vfc3BlbGxfcG9pbnRzKGludCBwb2ludHMpCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL2xpdmluZy9saWZlLmMKKworQVJHVU1FTlRFOgorICAgIHBvaW50czogQW56YWhsIGRlciBLb256ZW50cmF0aW9uc3B1bmt0ZSBkaWUgYWJnZXpvZ2VuIHdlcmRlbiBzb2xsZW4uCisKK0JFU0NIUkVJQlVORzoKKyAgICBEZW0gTGViZXdlc2VuIHdlcmRlbiBwb2ludHMgS29uemVudHJhdGlvbnNwdW5rdGUgYWJnZXpvZ2VuLiBGYWxscworICAgIGRhcyBMZWJld2VzZW4gd2VuaWdlciBLb256ZW50cmF0aW9uc3B1bmt0ZSBoYXQsIGFscyBhYmdlem9nZW4gd2VyZGVuCisgICAgc29sbGVuLCB3ZXJkZW4gc2llIGF1ZiAwIGdlc2V0enQuCisKK0JFSVNQSUVMRToKKyAgICB3cml0ZSgiRGFzIGJvZXNlIGJvZXNlIE1vbnN0ZXIgc2NoYXV0IERpY2ggZ3JpbW1pZyBhbiB1bmQgbGFidCBzaWNoIGFuICIKKyAgICAgICAgICsiRGVpbmVyIEtvbnplbnRyYXRpb24uXG4iKTsKKyAgICB0aGlzX3BsYXllcigpLT5yZWR1Y2Vfc3BlbGxfcG9pbnRzKDUwKTsKKworU0lFSEUgQVVDSDoKKyAgICBHZWdlbnBhcnQ6CXJlc3RvcmVfc3BlbGxfcG9pbnRzKEwpCisgICAgVmVyd2FuZHQ6CXJlZHVjZV9oaXRfcG9pbnRzKEwpLCBidWZmZXJfc3AoTCkKKyAgICBQcm9wczoJUF9TUAorICAgIEtvbnplcHQ6CWhlaWx1bmcKKworMjMuRmViLjIwMDQgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9yZWdpc3Rlcl9tb2RpZmllciBiL2RvYy9sZnVuL3JlZ2lzdGVyX21vZGlmaWVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OWEwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9yZWdpc3Rlcl9tb2RpZmllcgpAQCAtMCwwICsxLDI0IEBACityZWdpc3Rlcl9tb2RpZmllcigpCitGVU5LVElPTjoKKyAgICAgdm9pZCByZWdpc3Rlcl9tb2RpZmllcihvYmplY3QgbW9kaWZpZXIpCisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9saXZpbmcvYXR0cmlidXRlcy5jCisNCitQQVJBTUVURVI6DQorICAgICBtb2RpZmllcgktIE9iamVrdCBtaXQgUF9YX0FUVFJfTU9EIG9kZXIgUF9NX0FUVFJfTU9EDQorCitCRVNDSFJFSUJVTkc6CisgICAgIFJlZ2lzdHJpZXJ0IGVpbmVuIE1vZGlmaWVyIGltIFNwaWVsZXIuIFdpcmQgZHVyY2ggSW5zZXJ0U2Vuc2l0aXZlT2JqZWN0CisgICAgIGJlemllaHVuZ3N3ZWlzZSBiZWltIEFuemllaGVuIG9kZXIgWnVlY2tlbiBnZXJ1ZmVuLgorICAgICBNdXNzIG5pY2h0IGRpcmVrdCBnZXJ1ZmVuIHdlcmRlbi4gQmVpIFZlcmFlbmRlcnVuZ2VuIHZvbiBNb2RpZmlrYXRvcmVuCisgICAgIHNvbGx0ZSBzdGF0dGRlc3NlbiBVcGRhdGVBdHRyaWJ1dGVzIGdlcnVmZW4gd2VyZGVuLiAgICAgCisKK1NJRUhFIEFVQ0g6CisgICAgIFF1ZXJ5QXR0cmlidXRlKCksIFF1ZXJ5UmVhbEF0dHJpYnV0ZSgpLCBRdWVyeUF0dHJpYnV0ZU9mZnNldCgpLA0KKyAgICAgU2V0QXR0cigpLCBTZXRBdHRyaWJ1dGUoKSwgU2V0UmVhbEF0dHJpYnV0ZSgpLCBVcGRhdGVBdHRyaWJ1dGVzKCksDQorICAgICBkZXJlZ2lzdGVyX21vZGlmaWVyKCksIFBfQVRUUklCVVRFUywgUF9BVFRSSUJVVEVTX09GRlNFVFMsIAorICAgICBQX0FUVFJJQlVURVNfTU9ESUZJRVIsUF9YX0FUVFJfTU9ELCBQX01fQVRUUl9NT0QsIAorICAgICAvc3RkL2xpdmluZy9hdHRyaWJ1dGVzLmMNCisKKzEzLkp1bi4yMDA0LCBNdWFkaWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9yZW1vdmUgYi9kb2MvbGZ1bi9yZW1vdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmYzU5YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3JlbW92ZQpAQCAtMCwwICsxLDM0IEBACityZW1vdmUoKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyBpbnQgcmVtb3ZlKGludCBzaWxlbnQpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvbW92aW5nLmMKKyAgICAgL3N0ZC9saXZpbmcvbW92aW5nLmMKKyAgICAgL3N0ZC9yb29tL21vdmluZy5jCisKK0FSR1VNRU5URToKKyAgICAgc2lsZW50CisgICAgICAgICAgRmFsbHMgdW5nbGVpY2ggMCwgc28gd2VyZGVuIGJlaW0gWmVyc3RvZXJlbiBrZWluZSBNZWxkdW5nZW4KKyAgICAgICAgICBhdXNnZWdlYmVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgIEJlaW0gQXVmcnVmIGRpZXNlciBGdW5rdGlvbiBlbnRmZXJudCBzaWNoIGRhcyBPYmpla3Qgc2VsYnN0LiBEdXJjaAorICAgICBVZWJlcmxhZGVuIGRpZXNlciBGdW5rdGlvbiBrYW5uIG1hbiBkaWVzZW4gVm9yZ2FuZyBub2NoIGR1cmNoIGRpZQorICAgICBBdXNnYWJlIHZvbiBNZWxkdW5nZW4ga29tbWVudGllcmVuLCBvZGVyIGlyZ2VuZHdlbGNoZSBEYXRlbgorICAgICBhYnNwZWljaGVybiwgb2RlciBkYXMgWmVyc3RvZXJlbiBnYW56IHZlcmhpbmRlcm4gKGF1ZiBkaWVzZW0gV2VnLi4uIE1pdAorICAgICBkZXN0cnVjdCgpIGthbm4gZGFzIE9iamVrdCBpbW1lciBub2NoIGRpcmVrdCB6ZXJzdG9lcnQgd2VyZGVuISkKKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgMSwgd2VubiBzaWNoIGRhcyBPYmpla3QgZXJmb2xncmVpY2ggc2VsYnN0IHplcnN0b2VydCBoYXQsIHNvbnN0IDAuCisKK0JFTUVSS1VOR0VOOgorICAgICBOYWNoIGVpbmVtIGVyZm9sZ3JlaWNoZW4gOjpyZW1vdmUoKSBnZWx0ZW4gZGllIHNlbGJlbiBFaW5zY2hyYWVua3VuZ2VuCisgICAgIHdpZSBuYWNoIGVpbmVtIGRlc3RydWN0KCkhCisKK1NJRUhFIEFVQ0g6CisgICAgIGRlc3RydWN0KCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogV2VkIE1heSA4IDEwOjIzOjQwIDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9yZW1vdmVfbXVsdGlwbGUgYi9kb2MvbGZ1bi9yZW1vdmVfbXVsdGlwbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0MGZkMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3JlbW92ZV9tdWx0aXBsZQpAQCAtMCwwICsxLDU4IEBACityZW1vdmVfbXVsdGlwbGUoKQorRlVOS1RJT046CisgICAgIHB1YmxpYyB2YXJhcmdzIGludCByZW1vdmVfbXVsdGlwbGUoaW50IGxpbWl0LCBtaXhlZCBmdW4pOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvY29udGFpbmVyL2l0ZW1zLmMKKworQVJHVU1FTlRFOgorICAgICBsaW1pdDogQW56YWhsIGdsZWljaGVyIE9iamVrdGUsIGRpZSB2ZXJibGVpYmVuIHNvbGxlbi4KKyAgICAgZnVuOiAgIEZ1bmt0aW9uc25hbWUgKHN0cmluZykgb2RlciBDbG9zdXJlLgorCitCRVNDSFJFSUJVTkc6CisgICAgIFdpcmQgZGllc2UgRnVua3Rpb24gYXVmZ2VydWZlbiwgd2VyZGVuIGFsbGUgZ2xlaWNoZW4gT2JqZWt0ZQorICAgICAoc3RhbmRhcmRtYWVzc2lnIGRlZmluaWVydCBhbHMgZ2xlaWNoZXIgTGFkZW5hbWUsIGdsZWljaGUKKyAgICAgIEt1cnpiZXNjaHJlaWJ1bmcgdW5kIGdsZWljaGUgTGFuZ2Jlc2NocmVpYnVuZyksIGRlcmVuIEFuemFobCA8bGltaXQ+CisgICAgIHVlYmVyc2NocmVpdGV0LCBlbnRmZXJudC4KKyAgICAgCisgICAgIEF1c25haG1lbjogTGViZXdlc2VuIHVuZCBwZXIgQWRkSXRlbSgpIGhpbnp1Z2VmdWVndGUgT2JqZWt0ZS4KKworICAgICBNaXQgZGVtIEFyZ3VtZW50IDxmdW4+IGxhc3NlbiBzaWNoIGRpZSBLcml0ZXJpZW4gZnVlciBkaWUgIkdsZWljaGhlaXQiCisgICAgIGFlbmRlcm4uCisgICAgIElzdCA8ZnVuPiBlaW4gRnVua3Rpb25zbmFtZSwgd2lyZCBkaWVzZSBGdW5rdGlvbiBhbiBhbGxlbiBpbiBGcmFnZQorICAgICBrb21tZW5lbmRlbiBPYmpla3RlbiBpbSBDb250YWluZXIgZ2VydWZlbi4KKyAgICAgSXN0IDxmdW4+IGVpbmUgQ2xvc3VyZSwgd2VyZGVuIHNpZSBmdWVyIGplZGVzIGluIEZyYWdlIGtvbW1lbmRlIE9iamVrdAorICAgICBlaW5tYWwgZ2VydWZlbiB1bmQgaWhyIGRhcyBPYmpla3QgdWViZXJnZWJlbi4KKyAgICAgQWxzICdnbGVpY2gnIHdlcmRlbiBhbGxlIE9iamVrdGUgYmV0cmFjaHRldCwgZnVlciBkaWUgPGZ1bj4gZGVuIGdsZWljaGVuCisgICAgIFdlcnQgenVydWVja2xpZWZlcnQuCisgICAgIE9iamVrdGUsIGZ1ZXIgZGllIDxmdW4+IDAgenVydWVja2xpZWZlcnQsIHdlcmRlbiBpZ25vcmllcnQuCisKK0JFTUVSS1VOR0VOOgorICAgICAxKSBSYWV1bWUgcnVmZW4gcmVtb3ZlX211bHRpcGxlKDMpIHN0YW5kYXJkbWFlc3NpZyBpbSByZXNldCgpLCBqZWRvY2gKKyAgICAgICAgbnVyLCB3ZW5uIGtlaW4gU3BpZWxlciBhbndlc2VuZCBpc3QgdW5kIG1laHIgYWxzIDEwIE9iamVrdGUgaW0gUmF1bQorICAgICAgICBzaW5kLgorICAgICAyKSByZW1vdmVfbXVsdGlwZSgwKSBlbnRmZXJudCBhbGxlIGVudGZlcm5iYXJlbiBPYmpla3RlIChzLiBBdXNuYWhtZW4pLgorCitCRUlTUElFTEU6CisgICAgIEVpbiBDb250YWluZXIgZW50aGFlbHQgNSBGYWNrZWxuLiBJbSByZXNldCgpIHJ1ZnQgbWFuIG51bgorICAgICByZW1vdmVfbXVsdGlwbGUoMykgYXVmLiBBbnNjaGxpZXNzZW5kIHNpbmQgbm9jaCAzIEZhY2tlbG4gdWVicmlnLgorICAgICAKKyAgICAgQWxsZSB2ZXJibGVpYmVuZGVuIE9iamVrdGUgaW0gQ29udGFpbmVyIHNvbGxlbiB1bnRlcnNjaGllZGxpY2hlIE5hbWVuCisgICAgIGhhYmVuOgorICAgICByZW1vdmVfbXVsdGlwbGUoMSwgIm5hbWUiKTsKKworICAgICBFaW4gQ29udGFpbmVyIHNvbGwgbnVyIGVpbiBPYmpla3QgYmVoYWx0ZW4sIHdlbGNoZXMgZ3JvZXNzZXIgYWxzIDcwIGNtCisgICAgIGlzdDoKKyAgICAgaW50IGdyb2Vzc2VuX2ZpbHRlcihvYmplY3Qgb2IpIHsKKyAgICAgICBpZiAob2ItPlF1ZXJ5UHJvcChQX1NJWkUgPiA3MCkpIHJldHVybiAxOworICAgICAgIHJldHVybiAwOyAvLyBkYW1pdCBkYXMgT2JqZWt0IGlnbm9yaWVydCB3aXJkLgorICAgICAgIC8vIEFsdGVybmF0aXYga29lbm50ZSBtYW4gc3RhdHQgMCBhdWNoIG9iamVjdF9uYW1lKG9iKSB6dXJ1ZWNrbGllZmVybiwKKyAgICAgICAvLyBkYW5uIHNpbmQgZGllc2UgT2JqZWt0ZSBhbGxlIHVudGVyc2NoaWVkbGljaC4KKyAgICAgfQorICAgICAuLi4KKyAgICAgcmVtb3ZlX211bHRpcGxlKDEsICMnZ3JvZXNzZW5fZmlsdGVyKTsKKworU0lFSEUgQVVDSDoKKyAgICAgcmVzZXQoKQorCiszMS4wMS4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9yZXNldCBiL2RvYy9sZnVuL3Jlc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTIyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9yZXNldApAQCAtMCwwICsxLDg4IEBACityZXNldCgpCitGVU5LVElPTjoKKyAgICAgdm9pZCByZXNldCgpOworICAgICBwcm90ZWN0ZWQgdm9pZCByZXNldCgpOworCitCRVNDSFJFSUJVTkc6CisgICAgIHJlc2V0KCkgd2lyZCB2b20gR2FtZURyaXZlciBpbiBqZWRlbSBPYmpla3QgYXVmZ2VydWZlbiwgdW0gZGVtIE9iamVrdAorICAgICBkaWUgR2VsZWdlbmhlaXQgenUgZ2ViZW4sIHNpY2ggd2llZGVyIGluIGVpbmVuIGRlZmluaWVydGVuIFp1c3RhbmQgenUKKyAgICAgdmVyc2V0emVuOiBSYWV1bWUgdW5kIE1vbnN0ZXIgZXJ6ZXVnZW4gcGVyIEFkZEl0ZW0oKSBlaW5nZWZ1ZWd0ZSB1bmQKKyAgICAgendpc2NoZW56ZWl0bGljaCBlbnRmZXJudGUgT2JqZWt0ZSBuZXUsIFR1ZXJlbiBzY2hsaWVzc2VuIHNpY2ggLi4uCisKKyAgICAgU29sYW5nZSBkYXMgT2JqZWt0ICJiZW51dHp0IiB3aXJkLCB3aXJkIHJlc2V0KCkgcmVnZWxtYWVzc2lnIGFsbGUKKyAgICAgNDUgTWludXRlbiAoKy8tMTUgTWludXRlbikgbWl0IGVpbmVyIEF1ZmxvZXN1bmcgdm9uIDJzIGF1ZmdlcnVmZW4KKyAgICAgKGQuaC4gZGVyIERyaXZlciBwcnVlZnQgdW5kIHJ1ZnQgbnVyIGFsbGUgMiBTZWt1bmRlbiByZXNldCgpIGF1ZgorICAgICBhbGxlbiBPYmpla3RlbikuCisKKyAgICAgV2lyZCBlaW5lIE9iamVrdCBuaWNodCBtZWhyICJiZW51dHp0IiwgZC5oLiB3aXJkIGFuIGVpbmVtIE9iamVrdCBuaWNodAorICAgICB2b24gYXVzc2VuIChkdXJjaCBjYWxsX290aGVyIGV0Yy4pIF9uYWNoXyBlaW5lbSByZXNldCgpIGVpbmUgTWV0aG9kZQorICAgICBiencuIExGdW4gZ2VydWZlbiwgc28gYmVrb21tdCBkaWVzZXMgT2JqZWt0IGtlaW5lbiB3ZWl0ZXJlbiByZXNldCgpLgorCisgICAgIEVpbiBGdW5rdGlvbnNhdWZydWYgYW0gT2JqZWt0IHNjaGFsdGV0IGRlbiByZXNldCgpIHdpZWRlciBlaW4uCisgICAgIEJlaSBlaW5lbSBPYmpla3QgaW4gZWluZW0gQ29udGFpbmVyIHdhZXJlIGRhcyB6QiBkYXMgQmVudXR6ZW4gZGVzCisgICAgIENvbnRhaW5lcnMgKEhpbmVpbmxlZ2VuL0hlcmF1c25laG1lbi9IaW5laW5zZWhlbikuIERhcyBrYW5uCisgICAgIHNlaHIgbGFuZ2UgZGF1ZXJuLgorCisgICAgIERpZSBBYnNjaGFsdHVuZyBrYW5uIG1hbiB2ZXJoaW5kZXJuLCBpbmRlbSBtYW4gaW0gcmVzZXQoKSBwZXIgY2FsbF9vdXQoKQorICAgICBlaW5lIEZ1bmt0aW9uIGltIE9iamVrdCBydWZ0LiBEaWVzIGFiZXIgYml0dGUgX251cl8gbWFjaGVuLCB3ZW5uIGRhcworICAgICBPYmpla3QgX3VuYmVkaW5ndF8gYXVmIGVpbmVuIHN0YWVuZGlnZW4gUmVzZXQgYW5nZXdpZXNlbiBpc3QsIGF1Y2ggd2VubgorICAgICBlcyBuaWNodCAiYmVudXR6dCIgd2lyZC4KKworICAgICBBZW5kZXJuIGxhZXNzdCBzaWNoIGRpZSBaZWl0IHp3aXNjaGVuIGRlbiBBdWZydWZlbiB2b24gcmVzZXQoKSBtaXQKKyAgICAgc2V0X25leHRfcmVzZXQoKS4gRGllIEF1ZmxvZXN1bmcgdm9uIDJzIGthbm4gbWFuIG5pY2h0IGFlbmRlcm4uCisKK0JFTUVSS1VOR0VOOgorICAgICAtIG1hbiBrYW5uIHJlc2V0KCkgbnV0emVuLCB1bSBFcmVpZ25pc3NlIGF1c3p1bG9lc2VuOgorICAgICAgIC0gZXMgaXN0IGJpbGxpZ2VyIGFscyBsYW5nZSBjYWxsX291dCgpCisgICAgICAgLSBzaWVoZSBXYXJudW5nIGJlenVlZ2xpY2ggQWJzY2hhbHRlbiBkZXMgcmVzZXQKKyAgICAgLSBtYW4ga2FubiByZXNldCgpIGFscyBwcm90ZWN0ZWQgb2RlciBzdGF0aWMgZGVmaW5pZXJlbiwgd2VubiBtYW4gbmljaHQKKyAgICAgICBtb2VjaHRlLCBkYXNzIGRpZSBGdW5rdGlvbiB2b24gYXVzc2VuIGdlcnVmZW4gd2VyZGVuIGthbm4uIERpZXMKKyAgICAgICB2ZXJoaW5kZXJ0IEVpbmZsdXNzbmFobWUgdm9uIGF1c3Nlbiwga2FubiBhYmVyIGF1Y2ggRGVidWdtYXNzbmFobWVuCisgICAgICAgZXJzY2h3ZXJlbi4gRXMgaXN0IGFiZXIgZGVubm9jaCBmdWVyIGVpbmlnZSBPYmpla3RlIHNpbm52b2xsLgorICAgICAtIGRlciBEcml2ZXIgcnVmdCByZXNldCgpIHVuYWJoYWVuZ2lnIHZvbiB6dXNhZXR6bGljaGVuLCAibWFudWVsbGVuIgorICAgICAgIFJ1ZmVuIHZvbiByZXNldCgpCisgICAgICAgLSBrZWluZSBSdWZlIHZvbiByZXNldCgpIG1pdCBjYWxsX291dCgpIGF1cyByZXNldCgpIChDYWxsb3V0LUtldHRlbi0KKyAgICAgICAgIGJpbGR1bmcgZHJvaHQpLCBmdWVyIHNvbGNoZSBGYWVsbGUgaXN0IHNldF9uZXh0X3Jlc2V0KEUpIGRhIQorICAgICAtIGJlaSBCbHVlcHJpbnRzIHNvbGx0ZSBkZXIgcmVzZXQoKSBpbiBkZXIgUmVnZWwgYWJnZXNjaGFsdGV0IHdlcmRlbiwKKyAgICAgICBzb2Zlcm4gZXIgbmljaHQgYXVmIHdpY2h0aWdlIEF1ZmdhYmVuIGluIGRlciBCUCB6dSB0dW4gaGF0OgorICAgICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZSgpIHsKKyAgICAgICAgIGlmKCFjbG9uZXAoTUUpKSB7CisgICAgICAgICAgICAgc2V0X25leHRfcmVzZXQoLTEpOworICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KKyAgICAgICAgIDo6Y3JlYXRlKCk7CisgICAgICAgICAuLi4KKyAgICAgICB9CisKK0JFSVNQSUVMRToKKyAgICAgLy8gZWluIE5QQywgZGVyIGJlaSBqZWRlbSByZXNldCgpIHNjaGF1dCwgb2IgdW0gaWhuIGhlcnVtIGJlc3NlcmUKKyAgICAgLy8gQXVzcnVlc3R1bmcgbGllZ3QgYWxzIGRpZSwgZGllIGVyIHNlbGJzdCBnZXJhZGUgdHJhZWd0OgorCisgICAgIC4uLgorICAgICB2b2lkIHJlc2V0KCkgeworICAgICAgIDo6cmVzZXQoKTsKKworICAgICAgIGlmKGNsb25lcCh0aGlzX29iamVjdCgpKSAmJiBlbnZpcm9ubWVudCgpKSB7CisgICAgICAgICBvYmplY3QgbzsKKyAgICAgICAgIG89Zmlyc3RfaW52ZW50b3J5KGVudmlyb25tZW50KCkpOworICAgICAgICAgd2hpbGUobykgeworICAgICAgICAgICAgIGxvb2tfZm9yX2dvb2Rfd2VhcG9uc19hbmRfdXNlX3RoZW1faWZfYmV0dGVyKG8pOworICAgICAgICAgICAgIG89bmV4dF9pbnZlbnRvcnkobyk7CisgICAgICAgICB9CisgICAgICAgfQorICAgICB9CisKKyAgICAgLy8gZWluIHJlc2V0IGZ1ZXIgZWluZW4gR2VnZW5zdGFuZCwgZGVyIHZpZWxsZWljaHQgaW4KKyAgICAgLy8gaW4gZWluZW0gQ29udGFpbmVyIGxhbmRldCB1bmQgZGFubiB3ZWl0ZXIgZWluZW4gcmVzZXQKKyAgICAgLy8gYmVrb21tZW4gbXVzcy9zb2xsCisKKyAgICAgdm9pZCByZXNldCgpIHsKKyAgICAgICAvLyBpcmdlbmQgZWluIENvZGUgaGllcgorICAgICAgIGNhbGxfb3RoZXIodGhpc19vYmplY3QoKSwgIj8/PyIpOyAvLyBlaW5mYWNoIG51ciB3YXMgYXVmcnVmZW4KKyAgICAgfQorCitTSUVIRSBBVUNIOgorICAgICBjbGVhbl91cCgpLCBzZXRfbmV4dF9yZXNldChFKSwgcXVlcnlfbmV4dF9yZXNldChFKQorICAgICBtZW1vcnkKKworbGV0enRlIEFlbmRlcnVuZzogMjAwOS0wMS0xNCBSdW1hdGEKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL3Jlc3RvcmVfaGl0X3BvaW50cyBiL2RvYy9sZnVuL3Jlc3RvcmVfaGl0X3BvaW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUzNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vcmVzdG9yZV9oaXRfcG9pbnRzCkBAIC0wLDAgKzEsMzMgQEAKK3Jlc3RvcmVfaGl0X3BvaW50cygpCitGVU5LVElPTjoKKyAgICBpbnQgcmVzdG9yZV9oaXRfcG9pbnRzKGludCBoZWFsKQorCitBUkdVTUVOVEU6CisgICAgaW50IGhlYWwJLSBkZXIgenUgaGVpbGVuZGUgQmV0cmFnCisKK0JFU0NIUkVJQlVORzoKKyAgICBEZW0gTGViZXdlc2VuIHdlcmRlbiBoZWFsIExlYmVuc3B1bmt0ZSBhdWZnZXNjaGxhZ2VuLiBEaWUgSFAKKyAgICBzdGVpZ2VuIG5pY2h0IHVlYmVyIFBfTUFYX0hQLgorCitSVUVDS0dBQkVXRVJUOgorICAgIERpZSB2ZXJibGVpYmVuZGVuIExlYmVuc3B1bmt0ZS4KKworQkVJU1BJRUxFOgorICAgIHdyaXRlKCJQbG9ldHpsaWNoIHNjaGllc3N0IGVpbmUgc2NoZXVzc2xpY2hlIEtyZWF0dXIgYXVzIGRlciBQZnVldHplICIrCisgICAgICAgICAgImhlcmF1cyB1bmRcbnNjaGxlaW10IGRpY2ggaGVpbGVuZCB2b2xsLCBzaWUgdmVyc2Nod2luZGV0IHNvLCAiKworICAgICAgICAgICJ3aWUgc2llIGdla29tbWVuIGlzdC5cbiIpOworICAgIHRoaXNfcGxheWVyKCktPnJlc3RvcmVfaGl0X3BvaW50cyg1MCk7CisKK0JFTUVSS1VOR0VOOgorICAgIEJlaSBIZWlsc3RlbGxlbiBzb2xsdGUgZWluZSBldnRsLiBIZWlsdW5nIGRlcyBTcGllbGVycyBtaXQgZGVyIGVpZ2VucworICAgIGRhZnVlciBlaW5nZXJpY2h0ZXRlbiBGdW5rdGlvbiBjaGVja19hbmRfdXBkYXRlX3RpbWVkX2tleSByZWFsaXNpZXJ0CisgICAgd2VyZGVuLgorICAgIEFuc29uc3RlbiBiaXR0ZSBidWZmZXJfaHAoKSBiZW51dHplbiB1bmQgZGllIEtvbnplcHRzZWl0ZSBsZXNlbiEKKworU0lFSEUgQVVDSDoKKyAgICBHZWdlbnBhcnQ6CXJlZHVjZV9oaXRfcG9pbnRzKCkKKyAgICBWZXJ3YW5kdDoJYnVmZmVyX2hwKCksIGhlYWxfc2VsZigpLCByZXN0b3JlX3NwZWxsX3BvaW50cygpCisgICAgUHJvcHM6CVBfSFAKKyAgICBLb256ZXB0OgloZWlsdW5nCisKKzIzLkZlYi4yMDA0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vcmVzdG9yZV9zcGVsbF9wb2ludHMgYi9kb2MvbGZ1bi9yZXN0b3JlX3NwZWxsX3BvaW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2MyYTZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vcmVzdG9yZV9zcGVsbF9wb2ludHMKQEAgLTAsMCArMSwzNyBAQAorcmVzdG9yZV9zcGVsbF9wb2ludHMoKQorRlVOS1RJT046CisgICAgdm9pZCByZXN0b3JlX3NwZWxsX3BvaW50cyhpbnQgcG9pbnRzKQorCitBUkdVTUVOVEU6CisgICAgcG9pbnRzOiBBbnphaGwgZGVyIEtvbnplbnRyYXRpb25zcHVua3RlIGRpZSBndXRnZXNjaHJpZWJlbiB3ZXJkZW4gc29sbGVuLgorCitCRVNDSFJFSUJVTkc6CisgICAgRGVtIExlYmV3ZXNlbiB3ZXJkZW4gcG9pbnRzIEtvbnplbnRyYXRpb25zcHVua3RlIGd1dGdlc2NocmllYmVuLiBGYWxscworICAgIFB1bmt0ZSBhYmdlem9nZW4gd2VyZGVuIHNvbGxlbiB1bmQgZGFzIExlYmV3ZXNlbiBuaWNodCB1ZWJlciA8cG9pbnRzPgorICAgIEtvbnplbnRyYXRpb25zcHVua3RlIHZlcmZ1ZWd0LCB3ZXJkZW4gc2llIGF1ZiAwIGdlc2V0enQuCisKK1JVRUNLR0FCRVdFUlQ6CisgICAgS2VpbmVyCisKK0JFSVNQSUVMRToKKyAgICB3cml0ZSgiRGFzIGJvZXNlIGJvZXNlIE1vbnN0ZXIgc2NoYXV0IERpY2ggc3Vlc3MgYW4gdW5kIGdpYnQgZGlyIG1laHIgIgorICAgICAgICAgKyJLb256ZW50cmF0aW9uLlxuIik7CisgICAgdGhpc19wbGF5ZXIoKS0+cmVzdG9yZV9zcGVsbF9wb2ludHMoNTApOworCitCRU1FUktVTkdFTjoKKyAgICBEYSBkYXMgQmVudXR6ZW4gZGVyIEZ1bmt0aW9uIGVpbmUgSGVpbHVuZyBiZWRldXRldCwgc29sbHRlIG1hbiBiZWkKKyAgICBWZXJ3ZW5kdW5nIGF1ZiBqZWRlbiBGYWxsIFJ1ZWNrc3ByYWNoZSBtaXQgc2VpbmVtIFJNIG5laG1lbiwgYnp3CisgICAgZGllIEhlaWxzdGVsbGUgYmVpIGRlciBIZWlsdW5nc2JhbGFuY2UgZ2VuZWhtaWdlbiBsYXNzZW4uCisKKyAgICBCZWkgSGVpbHN0ZWxsZW4gc29sbHRlIGVpbmUgZXZ0bC4gSGVpbHVuZyBkZXMgU3BpZWxlcnMgbWl0IGRlciBlaWdlbnMKKyAgICBkYWZ1ZXIgZWluZ2VyaWNodGV0ZW4gRnVua3Rpb24gY2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkgcmVhbGlzaWVydAorICAgIHdlcmRlbi4KKyAgICBBbnNvbnN0ZW4gYml0dGUgYnVmZmVyX3NwKCkgYmVudXR6ZW4gdW5kIGRpZSBLb256ZXB0c2VpdGUgbGVzZW4hCisKK1NJRUhFIEFVQ0g6CisgICAgR2VnZW5wYXJ0OglyZWR1Y2Vfc3BlbGxfcG9pbnRzKEwpCisgICAgVmVyd2FuZHQ6CWJ1ZmZlcl9zcChMKSwgcmVzdG9yZV9oaXRfcG9pbnRzKEwpCisgICAgUHJvcHM6CVBfU1AKKyAgICBLb256ZXB0OgloZWlsdW5nCisKKzIzLkZlYi4yMDA0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vc2F2ZV9tZSBiL2RvYy9sZnVuL3NhdmVfbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmOWUwYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3NhdmVfbWUKQEAgLTAsMCArMSwyMSBAQAorc2F2ZV9tZShMKQorRlVOS1RJT046CisgICAgdm9pZCBzYXZlX21lKG1peGVkIHZhbHVlX2l0ZW1zKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9wbGF5ZXIvYmFzZS5jCisKK0FSR1VNRU5URToKKyAgICB2YWx1ZV9pdGVtcworICAgICAgIFVuZ2xlaWNoIDAsIHdlbm4gV2VydCBkZXIgR2VnZW5zdGFlbmRlIGJlcmVjaG5ldCB3ZXJkZW4gc29sbC4KKworQkVTQ0hSRUlCVU5HOgorICAgIFNwZWljaGVydCBlaW5lbiBTcGllbGVyLCBzZWluZSBBdXRvbG9hZGVyLCBiZXN0aW1tdCBzZWluIEd1aWxkUmF0aW5nCisgICAgdW5kIGJlcmVjaG5ldC9zcGVpY2hlcnQgYXVmIEFuZm9yZGVydW5nIGRlbiBXZXJ0IGRlciBnZXRyYWdlbmVuCisgICAgR2VnZW5zdGFlbmRlLgorCitTSUVIRSBBVUNIOgorICAgIFByb3BzOiAgICAgICBQX0NBUlJJRURfVkFMVUUsIFBfQVVUT0xPQURPQkosIFBfTEFTVF9MT0dPVVQKKyAgICBLb21tYW5kb3M6ICAgc2F2ZSwgZW5kZQorCisxLlNlcHRlbWJlciAyMDA4IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9zZWNvbmRfbGlmZSBiL2RvYy9sZnVuL3NlY29uZF9saWZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YWJmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9zZWNvbmRfbGlmZQpAQCAtMCwwICsxLDMwIEBACitzZWNvbmRfbGlmZSgpCisKK0ZVTktUSU9OOgorCXZhcmFyZ3MgaW50IHNlY29uZF9saWZlKG9iamVjdCBvYmopOworCitERUZJTklFUlQgSU46CisJL3N0ZC9wbGF5ZXIvbGlmZS5jCisKK0FSR1VNRU5URToKKwlvYmoKKwkgIExlaWNoZSBkZXMgTGViZXdlc2Vucy4KKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIGltIGRpZSgpIGRlcyBMZWJld2VzZW5zIGF1ZmdlcnVmZW4sIHdlbm4gc2ljaGVyCisgICAgICAgIGlzdCwgZGFzcyBlcyBzdGlyYnQuIFVlYmxpY2hlcndlaXNlIGlzdCBkaWVzZSBGdW5rdGlvbiBudXIgaW0gU3BpZWxlcgorICAgICAgICBkZWZpbmllcnQgdW5kIHJlZ2VsdCBFUC1WZXJsdXN0IHVuZCBkZXJnbGVpY2hlbi4gRWluIFNoYWRvdyB3dWVyZGUKKyAgICAgICAgZGllc2UgRnVua3Rpb24gdWViZXJsYWdlcm4sIHVtIHp1IHZlcmhpbmRlcm4sIGRhc3MgZWluIFNwaWVsZXIgc3RpcmJ0LgorCitSVWVDS0dBQkVXRVJUOgorICAgICAgICAxLCB3ZW5uIGRhcyBMZWJld2VzZW4gbmljaHQgc3RpcmJ0LCBzb25zdCAwCisKK0JFTUVSS1VORzoKKyAgICAgICAgQmVpIE5QQ3Mgc29sbHRlIG1hbiBkaXJla3QgZGllKCkgdWViZXJzY2hyZWliZW4sIHdlbm4gbWFuIG5pY2h0CisgICAgICAgIG1vZWNodGUsIGRhc3Mgc2llIHN0ZXJiZW4uCisKK1NJRUhFIEFVQ0g6CisgICAgICAgIGRpZSgpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IDIwMTUtSmFuLTE5LCBBcmF0aG9ybiAKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL3NlbGxfb2JqIGIvZG9jL2xmdW4vc2VsbF9vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzNjJmMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3NlbGxfb2JqCkBAIC0wLDAgKzEsNTIgQEAKK3NlbGxfb2JqKCkNCisNCitGdW5rdGlvbjoNCisgICAgc3RhdGljIHN0cmluZyBzZWxsX29iaihvYmplY3Qgb2IsIGludCBzaG9ydCkNCisNCitEZWZpbmllcnQgaW46DQorICAgIC9zdGQvcm9vbS9zaG9wDQorDQorQXJndW1lbnRlOg0KKyAgICBvYjoNCisgICAgICBEYXMgYW56dWthdWZlbmRlIE9iamVrdA0KKyAgICBzaG9ydDoNCisgICAgICBHaWJ0IGFuLCBvYiBkZXIgVmVya2FldWZlciBudXIgZWluIE9iamVrdCAoMCkgb2RlciBtZWhyZXJlICgxKSANCisgICAgICB2ZXJrYXVmdC4gKFZlcmthdWZlIGFsbGVzIGV0Yy4pDQorDQorQmVzY2hyZWlidW5nOg0KKyAgICBFcm1pdHRlbHQgb2IgZGVyIExhZGVuIGJlcmVpdCBpc3QsIDxvYj4gYW56dWthdWZlbi4NCisNCitSdWVja2dhYmV3ZXJ0Og0KKyAgICBNZWxkdW5nIGRpZSBhdXNnZWdlYmVuIHdpcmQsIHdlbm4gZWluIE9iamVrdCBhYmdlbGVobnQgd2lyZCBvZGVyIDAuDQorDQorQmVtZXJrdW5nOg0KKyAgICBNYW4gc29sbHRlIGltIG5vcm1hbGZhbGwgX25pZW1hbHNfIGVpbmZhY2ggMCB6dXJ1ZWNrZ2ViZW4sIHNvbmRlcm4gZGFzIA0KKyAgICBnZWVyYnRlIHNlbGxfb2JqKCkgYXVzIC9zdGQvcm9vbS9zaG9wLCBkYW1pdCBiZWlzcGllbHN3ZWlzZSBQX05PQlVZIA0KKyAgICBiZWFjaHRldCB3aXJkLg0KKw0KK0JlaXNwaWVsOg0KKyAgICBFaW4gU2NobWllZCwgZGVyIG51ciBXYWZmZW4gYW5rYXVmdDoNCisgICAgDQorICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZSgpDQorICAgIHsNCisgICAgICAuLi4NCisgICAgfQ0KKyAgICANCisgICAgc3RhdGljIHN0cmluZyBzZWxsX29iaihvYmplY3Qgb2IsIGludCBzaG9ydCkNCisgICAgew0KKyAgICAgIGlmKCFvYi0+UXVlcnlQcm9wKFBfV0VBUE9OX1RZUEUpKQ0KKyAgICAgIHsNCisgICAgICAgIHJldHVybiAiSWNoIGJpbiBudXIgYW4gV2FmZmVuIGludGVyZXNzaWVydC4iOw0KKyAgICAgIH0NCisgICAgICByZXR1cm4gOjpzZWxsX29iaihvYixzaG9ydCk7DQorICAgIH0NCisNCitTaWVoZSBhdWNoOg0KKyAgICBGdW5rdGlvbmVuOg0KKyAgICAgIEFkZEZpeGVkT2JqZWN0KCksIFJlbW92ZUZpeGVkT2JqZWN0KCksIFNldFN0b3JhZ2VSb29tKCksIA0KKyAgICAgIFF1ZXJ5U3RvcmFnZVJvb20oKSwgUXVlcnlCdXlWYWx1ZSgpLCBRdWVyeUJ1eUZhY3QoKSwgYnV5X29iaigpDQorICAgIFByb3BlcnRpZXM6DQorICAgICAgUF9LRUVQRVIsIFBfTUlOX1NUT0NLLCBQX1NUT1JFX0NPTlNVTUUNCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitMZXR6dGUgQWVuZGVydW5nOiAyMS4wNS4yMDE0LCBCdWdmaXgNCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9zZXRfb2JqZWN0X25leHRfcmVzZXQgYi9kb2MvbGZ1bi9zZXRfb2JqZWN0X25leHRfcmVzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkZmEyZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3NldF9vYmplY3RfbmV4dF9yZXNldApAQCAtMCwwICsxLDI1IEBACitzZXRfb2JqZWN0X25leHRfcmVzZXQoKQorCitGVU5LVElPTjoKKwlpbnQgc2V0X29iamVjdF9uZXh0X3Jlc2V0KG9iamVjdCBvYiwgaW50IHplaXQgKTsKKworREVGSU5JRVJUIElOOiAvc2VjdXJlL2RlYnVnLmMKKworQVJHVU1FTlRFOgorCW9iOiBEYXMgT2JqZWt0LCBkZXNzIFJlc2V0IGdlc2V0enQgd2VyZGVuIHNvbGwuCisgIHplaXQ6IFplaXQgYmlzIHp1bSBuYWVjaHN0ZW4gUmVzZXQgdm9uIG9iLgorCitGVU5LVElPTjoKKyAgRGllIEZ1bmt0aW9uIHJ1ZnQgbGV0enRlbmRsaWNoIHNldF9uZXh0X3Jlc2V0KCkgaW4gPG9iPiBhdWYgdW5kIHNldHp0IGRhaGVyCisgIGRlc3NlbiBSZXNldHplaXQgYXVmIGVpbmVuIG5ldWVuIFdlcnQuIERpZXMgaXN0IHp1IERlYnVnendlY2tlbiBnZWRhY2h0LgorCisgIERpZSBCZW51dHp1bmcgaXN0IG51ciBmdWVyIEVNKyBtb2VnbGljaC4KKworUlVFQ0tHQUJFV0VSVDoKKwlHaWJ0IGRlbiBSdWVja2dhYmV3ZXJ0IGRlcyBzZXRfbmV4dF9yZXNldCgpLUF1ZnJ1ZnMgaW4gPG9iPiB6dXJ1ZWNrLgorCitTSUVIRSBBVUNIOgorCXNldF9uZXh0X3Jlc2V0KEUpCisKKzEwLjEwLjIwMDcsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vc2hvb3RfZGFtIGIvZG9jL2xmdW4vc2hvb3RfZGFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9zaG9vdF9kYW0KQEAgLTAsMCArMSw0MCBAQAorc2hvb3RfZGFtKCkKKworRlVOS1RJT046CisgICAgc3RhdGljIGludCBzaG9vdF9kYW0obWFwcGluZyBzaG9vdCkKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvcmFuZ2VkX3dlYXBvbi5jCisKK0FSR1VNRU5URToKKyAgICBtYXBwaW5nIHNob290IC0gU2NodXNzZGF0ZW4KKworQkVTQ0hSRUlCVU5HOgorICAgIEVyaGFlbHQgdm9uIC9zdGQvcmFuZ2VkX3dlYXBvbjo6Y21kX3Nob290KCkgZGllIFNjaHVzc2RhdGVuIHVuZCBiZXJlY2huZXQKKyAgICBkZW4gU2NoYWRlbiBkZXIgV2FmZmUsIGJhc2llcmVuZCBhdWYgZGVuIFBfU0hPT1RJTkdfV0Mgdm9uIFdhZmZlIHVuZAorICAgIE11bml0aW9uIHNvd2llIGRlciBHZXNjaGlja2xpY2hrZWl0IGRlcyBTY2h1ZXR6ZW4uIEhpdEZ1bmNzIGRlciBNdW5pdGlvbgorICAgIHVuZCBTa2lsbHMgd2VyZGVuIGhpZXIgZWJlbmZhbGxzIGJlcnVlY2tzaWNodGlndC4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICBTY2hhZGVuLiBFYmVuZmFsbHMgaW4gJ3Nob290JyB1bnRlciBTSV9TS0lMTERBTUFHRSBha3R1YWxpc2llcnQuCisKK0JFTUVSS1VOR0VOOgorICAgICdzaG9vdCcgZW50aGFlbHQgbm9ybWFsZXJ3ZWlzZSBmb2xnZW5kZSBFaW50cmFlZ2U6CisgICAgKiBLZXkgUF9XRUFQT046ICAgICAgIGRpZSBTY2h1c3N3YWZmZQorICAgICogS2V5IFBfV0VBUE9OX1RZUEU6ICBQX0FNTVVOSVRJT04sIGFsc28gZGllIE11bml0aW9ucy1JRAorICAgICogS2V5IFBfU1RSRVRDSF9USU1FOiBQX1NUUkVUQ0hfVElNRSBkZXIgV2FmZmUKKyAgICAqIEtleSBQX1dDOiAgICAgICAgICAgUF9TSE9PVElOR19XQyBkZXIgV2FmZmUKKyAgICAqIEtleSBQX1NIT09USU5HX1dDOiAgUF9TSE9PVElOR19XQyBkZXIgTXVuaXRpb24KKyAgICAqIEtleSBQX0FNTVVOSVRJT046ICAgTXVuaXRpb25zb2JqZWt0IChldmVudHVlbGwgVW5pdCkKKyAgICAqIEtleSBTSV9FTkVNWTogICAgICAgZ3VlbHRpZ2VuIEdlZ25lcgorICAgICogS2V5IFNJX1NLSUxMREFNQUdFX1RZUEU6ICBTY2hhZGVuIChhdXMgUF9EQU1fVFlQRSBkZXIgTXVuaXRpb24pCisgICAgKiBLZXkgU0lfU0tJTExEQU1BR0VfTVNHLzI6IE11bml0aW9uc25hbWUKKworU0lFSEUgQVVDSDoKKyAgICBHZW5lcmVsbDogIFBfQU1NVU5JVElPTiwgUF9TSE9PVElOR19XQywgUF9TVFJFVENIX1RJTUUKKyAgICBNZXRob2RlbjogIEZpbmRSYW5nZWRUYXJnZXQoTCksIGNtZF9zaG9vdChMKQorICAgIFNraWxsczogICAgVXNlU2tpbGwoTCksIFNraWxsUmVzVHJhbnNmZXIoTCkKKyAgICBBdHRyaWJ1dGU6IFF1ZXJ5QXR0cmlidXRlCisgICAgU29uc3RpZ2VzOiBmZXJud2FmZmVuLCBIaXRGdW5jCisKKzI4Lkp1bCAyMDE0IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vc2hvcnQgYi9kb2MvbGZ1bi9zaG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTczNGMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vc2hvcnQKQEAgLTAsMCArMSwzMSBAQAorc2hvcnQoKQorRlVOS1RJT046CisgICAgIHB1YmxpYyB2YXJhcmdzIHN0cmluZyBzaG9ydCgpOworCitERUZJTklFUlQgSU46CisgICAgIC9zdGQvdGhpbmcvZGVzY3JpcHRpb24uYworCitBUkdVTUVOVEU6CisgICAgIGtlaW5lCisKK0JFU0NIUkVJQlVORzoKKyAgICAgRGVyIEluaGFsdCBkZXIgUHJvcGVydHkgUF9TSE9SVCB3aXJkIGF1c2dld2VydGV0LCBtaXQgIi5cbiIKKyAgICAgYWJnZXNjaGxvc3NlbiB1bmQgenVydWVja2dlZ2ViZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIERpZSBLdXJ6YmVzY2hyZWlidW5nIGFscyBTdHJpbmcgb2RlciAwLCBmYWxscyBkYXMgT2JqZWt0IHVuc2ljaHRiYXIKKyAgICAgaXN0LgorCitCRU1FUktVTkdFTjoKKyAgICAgRHVyY2ggVWViZXJsYWRlbiB2b24gc2hvcnQoKSBsYXNzZW4gc2ljaCBub2NoIHdlaXRlcmUgRWlnZW5zY2hhZnRlbiBkZXMKKyAgICAgT2JqZWt0ZXMgemVpZ2VuLiBGYWNrZWxuIHplaWdlbiB6dW0gQmVpc3BpZWwgYW4sIG9iIHNpZSBicmVubmVuLAorICAgICBSdWVzdHVuZ2VuLCBvYiBzaWUgYW5nZXpvZ2VuIHNpbmQgdW5kIFdhZmZlbiwgb2Igc2llIGdlenVlY2t0IHNpbmQuCisKK1NJRUhFIEFVQ0g6CisgICAgIEFlaG5saWNoZXM6CWxvbmcoKQorICAgICBQcm9wZXJ0aWVzOglQX1NIT1JULCBQX0lOVklTCisgICAgIFNvbnN0aWdlczoJCW1ha2VfaW52bGlzdCgpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIwLjAxLjIwMTUsIFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vc2hvd19ub3RpZnkgYi9kb2MvbGZ1bi9zaG93X25vdGlmeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA5YWRjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vc2hvd19ub3RpZnkKQEAgLTAsMCArMSw0NCBAQAorZ2l2ZV9ub3RpZnkoKQorRlVOS1RJT046CisgICAgIHZvaWQgc2hvd19ub3RpZnkob2JqZWN0IG9iaikKKworREVGSU5JRVJUIElOOgorICAgICAvc3RkL2xpdmluZy9wdXRfYW5kX2dldC5jCisKK0FSR1VNRU5URToKKyAgICAgb2JqIC0gZGVtIExlYmV3ZXNlbiBnZXplaWd0ZXMgT2JqZWt0CisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitCRVNDSFJFSUJVTkc6CisgICAgIERpZXNlIEZ1bmt0aW9uIHdpcmQgYXV0b21hdGlzY2ggaW1tZXIgZGFubiBhdWZnZXJ1ZmVuLCB3ZW5uIGVpbmVtCisgICAgIExlYmV3ZXNlbiAod2VsY2hlcyBrZWluIFNwaWVsZXJjaGFyYWt0ZXIgaXN0KSBlaW4gT2JqZWt0IGdlemVpZ3Qgd2lyZC4KKyAgICAgRGllcyBmdW5rdGlvbmllcnQgbnVyIGRhbm4sIHdlbm4gZGVyIFN0YW5kYXJkYmVmZWhsIGRlciBTcGllbGVyc2hlbGwKKyAgICAgdmVyd2VuZGV0IHdpcmQgKCJ6ZWlnZSA8bmFtZT4gPGdlZ2Vuc3RhbmQ+IikuIFNlbGJzdGdlYmF1dGVzICJ6ZWlnZSIKKyAgICAgZnVua3Rpb25pZXJ0IG5pY2h0LgorCitCRUlTUElFTDoKKyAgICAgT2Z0bWFscyB3aWxsIG1hbiBpbiBRdWVzdHMgZXJyZWljaGVuLCBkYXNzIGVpbmVtIE5QQyBlaW4gYmVzdGltbXRlcworICAgICBJdGVtIGFscyBCZXdlaXMgZGVyIEVyZnVlbGx1bmcgZWluZXIgYmVzdGltbXRlbiBBdWZnYWJlIHZvcmdlemVpZ3QKKyAgICAgd2lyZC4gRm9sZ2VuZGVybWFzc2VuIGthbm4gZGllcyByZWFsaXNpZXJ0IHdlcmRlbjoKKworICAgICB2b2lkIHF1ZXN0X29rKG9iamVjdCBvYmopIHsgLi4uCisgICAgICAgLy8gei5CLiBWZXJuaWNodHVuZyBkZXMgUXVlc3RvYmpla3RlcyB1bmQgUXVlc3R0ZXh0ZQorICAgICAgIC8vIFF1ZXN0YmVsb2hudW5nIHVuZCBRdWVzdGFuZXJrZW5udW5nLCBldGMuCisgICAgIH0KKworICAgICB2b2lkIHNob3dfbm90aWZ5KG9iamVjdCBvYmopIHsKKyAgICAgICBpZihvYmotPmlkKCJcbnF1ZXN0aXRlbSIpKSAvLyBJc3QgZGFzIGRhcyBnZWZvcmRlcnRlIFF1ZXN0b2JqZWt0PworICAgICAgICAgcXVlc3Rfb2sob2JqKTsKKyAgICAgfQorCitCRU1FUktVTkdFTjoKKyAgICAgRGEgZXMgbnVyIHVtIGRhcyBWb3J6ZWlnZW4gdm9uIEdlZ2Vuc3RhZW5kZW4gZ2VodCwgZGllIG5pY2h0IGRlbiAKKyAgICAgQmVzaXR6ZXIgd2VjaHNlbG4sIHNpbmQgTWVjaGFuaXNtZW4gd2llIFBfUkVKRUNUIGluIGRpZXNlbSBGYWxsIAorICAgICBuaWNodCBlcmZvcmRlcmxpY2guCisKK1NJRUhFIEFVQ0g6CisgICAgIGdpdmVfbm90aWZ5KCksIC9zdGQvbnBjL3B1dF9hbmRfZ2V0LmMsIC9zdGQvbGl2aW5nL3B1dF9hbmRfZ2V0LmMKKworMjIuIE9rdG9iZXIgMjAxMyBBcmF0aG9ybgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vc3BlbGxib29rL0FkZFNwZWxsIGIvZG9jL2xmdW4vc3BlbGxib29rL0FkZFNwZWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Njg2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9zcGVsbGJvb2svQWRkU3BlbGwKQEAgLTAsMCArMSw1NCBAQAorQWRkU3BlbGwoKQorRlVOS1RJT046CisgICAgdmFyYXJncyBpbnQgQWRkU3BlbGwoc3RyaW5nIHZlcmIsIGludCBrb3N0ZW4sIG1peGVkIHNraSkgCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3NwZWxsYm9vay5jCisKK0FSR1VNRU5URToKKyAgICBzdHJpbmcgdmVyYiAgICAgTmFtZSBkZXMgU3BlbGxzCisgICAgaW50IGtvc3RlbiAgICAgIG5vcm1hbGUgS29zdGVuIChHcnVuZGtvc3RlbikKKyAgICBtaXhlZCBza2kgICAgICAgU2tpbGxtYXBwaW5nIG1pdCBhbGxlbiBFaW50cmFlZ2VuIHp1bSBTcGVsbAorCitCRVNDSFJFSUJVTkc6CisgICAgQWRkaWVydCBlaW5lbiBFaW50cmFnIGZ1ZXIgZGVuIFNwZWxsIGltIFNwZWxsYm9vay4gV2VubiBkaWVzZXIKKyAgICBTcGVsbCBkaXJla3Qgdm9tIFNwaWVsZXIgKFNJX1NQRUxMQk9PSykgb2RlciAobm9ybWFsZXJ3ZWlzZSkKKyAgICB1ZWJlciBlaW4gR2lsZGVub2JqZWt0IGF1ZmdlcnVmZW4gd2lyZCwgd2lyZCBkYXMgTWFwcGluZyBhdWYKKyAgICBkaWUgU2tpbGxpbmZvcm1hdGlvbmVuIGF1cyBTcGllbGVyIHVuZCBHaWxkZSBhZGRpZXJ0IHVuZAorICAgIGJlZWluZmx1c3N0IGRhbWl0IGRlbiBBdWZydWYgZGVyIGxldHp0bGljaGVuIFNwZWxsZnVua3Rpb24uCisKK0JFTUVSS1VOR0VOOgorICAgIFNpZWhlIGRhcyBWZXJoYWx0ZW4gdm9uIFF1ZXJ5U3BlbGwgKGdpbGRlKSB6dW0gWnVzYW1tZW5mdWVnZW4KKyAgICBkZXIgQWRkU3BlbGwtSW5mb3JtYXRpb25lbiBhdXMgR2lsZGUgdW5kIFNwZWxsYm9vay4gUmVsZXZhbnQKKyAgICB6QiBmdWVyIExlcm5yZXN0cmlrdGlvbmVuLgorCitCRUlTUElFTDoKKyAgICBBZGRTcGVsbCgia2FtcGZzY2hyZWkiLCAzMCwKKyAgICAgICAgIChbU0lfU0tJTExSRVNUUl9MRUFSTjooW1BfTEVWRUw6MTNdKSwKKyAgICAgICAgICAgU0lfTUFHSUNfVFlQRTogKHtNVF9QU1lDSE99KSwKKyAgICAgICAgICAgU0lfU1BFTEw6ICAgICAgKFsKKyAgICAgICAgICAgICBTUF9OQU1FOiAiS2FtcGZzY2hyZWkiLAorICAgICAgICAgICAgIFNQX1NIT1dfREFNQUdFOgorICAgICAgICAgICAgICAgKHsoeyAtMSwgIkRpciBnZXNjaGllaHQgamVkb2NoIG5pY2h0cy4iLAorICAgICAgICAgICAgICAgICAgICJAV0VNMSBnZXNjaGllaHQgamVkb2NoIG5pY2h0cy4iLAorICAgICAgICAgICAgICAgICAgICJAV0VNMSBnZXNjaGllaHQgamVkb2NoIG5pY2h0cy4iIH0pLAorICAgICAgICAgICAgICAgICAoeyAgMCwgIkR1IGthbm5zdCBkYXJ1ZWJlciBhYmVyIG51ciBsYWNoZW4uIiwKKyAgICAgICAgICAgICAgICAgICAiQFdFUjEga2FubiBkYXJ1ZWJlciBhYmVyIG51ciBsYWNoZW4uIiwKKyAgICAgICAgICAgICAgICAgICAiQFdFUjEga2FubiBkYXJ1ZWJlciBhYmVyIG51ciBsYWNoZW4uIiB9KSwKKyAgICAgICAgICAgICAgICAgKHsgMTAsICJEaXIgZHJvZWhuZW4gZGllIE9ocmVuLiIsCisgICAgICAgICAgICAgICAgICAgIkBXRU0xIGRyb2VobmVuIGRpZSBPaHJlbi4iLAorICAgICAgICAgICAgICAgICAgICJAV0VNMSBkcm9laG5lbiBkaWUgT2hyZW4uIiB9KQorICAgICAgICAgICAgICAgfSldKQorICAgICAgICAgXSkpOworCitTSUVIRSBBVUNIOgorICAgIFNwZWxsYm9vayBMZXJuZW46IExlYXJuLCBTcGVsbFN1Y2Nlc3MsIEVyZm9sZywgTWlzc2VyZm9sZworICAgICogVmVyd2FsdGVuOiAgICAgIFF1ZXJ5U3BlbGwKKyAgICAqIEFuZ3JpZmY6ICAgICAgICBUcnlBdHRhY2tTcGVsbCwgVHJ5RGVmYXVsdEF0dGFja1NwZWxsLAorICAgICAgICAgICAgICAgICAgICAgIFRyeUdsb2JhbEF0dGFja1NwZWxsCisgICAgKiBQcm9wZXJ0aWVzOiAgICAgUF9HTE9CQUxfU0tJTExQUk9QUywgUF9TQl9TUEVMTFMKKyAgICBTa2lsbHMgTGVybmVuOiAgICBMZWFyblNraWxsLCBNb2RpZnlTa2lsbCwgTGltaXRBYmlsaXR5CisgICAgKiBOdXR6dW5nOiAgICAgICAgVXNlU3BlbGwsIFVzZVNraWxsCisgICAgKiBzb25zdGlnOiAgICAgICAgc3BydWNoZXJtdWVkdW5nLCBza2lsbF9pbmZvX2xpc3RlCisKKzUuIE9rdCAyMDExIEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9zcGVsbGJvb2svRXJmb2xnIGIvZG9jL2xmdW4vc3BlbGxib29rL0VyZm9sZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjViZjRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vc3BlbGxib29rL0VyZm9sZwpAQCAtMCwwICsxLDI4IEBACitFcmZvbGcoKQorRlVOS1RJT046CisgICAgdm9pZCBFcmZvbGcob2JqZWN0IGNhc3Rlciwgc3RyaW5nIHNwZWxsLCBtYXBwaW5nIHNpbmZvKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9zcGVsbGJvb2suYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IGNhc3RlciAgICBTcGVsbCBzcHJlY2hlbmRlciBTcGllbGVyCisgICAgc3RyaW5nIHNwZWxsICAgICBTcGVsbG5hbWUKKyAgICBtYXBwaW5nIHNpbmZvICAgIFNwZWxsLUluZm8tTWFwcGluZyBtaXQgYWxsZW4gSW5mb3JtYXRpb25lbgorCitCRVNDSFJFSUJVTkc6CisgICAgV2lyZCBiZWkgRXJmb2xnIGVpbmVzIFNwZWxscyBnZXJ1ZmVuLiBSdWZ0IFNwZWxsSW5mb3JtKCkgYW0KKyAgICBFbnZpcm9ubWVudC4KKworU0lFSEUgQVVDSDoKKyAgICBTb25zdGlnZXM6ICAgICAgICBTcGVsbEluZm9ybQorICAgIFNwZWxsYm9vayBMZXJuZW46IExlYXJuLCBTcGVsbFN1Y2Nlc3MsIE1pc3NlcmZvbGcKKyAgICAqIFZlcndhbHRlbjogICAgICBBZGRTcGVsbCwgUXVlcnlTcGVsbAorICAgICogQW5ncmlmZjogICAgICAgIFRyeUF0dGFja1NwZWxsLCBUcnlEZWZhdWx0QXR0YWNrU3BlbGwsCisgICAgICAgICAgICAgICAgICAgICAgVHJ5R2xvYmFsQXR0YWNrU3BlbGwKKyAgICAqIFByb3BlcnRpZXM6ICAgICBQX0dMT0JBTF9TS0lMTFBST1BTLCBQX1NCX1NQRUxMUworICAgIFNraWxscyBMZXJuZW46ICAgIExlYXJuU2tpbGwsIE1vZGlmeVNraWxsLCBMaW1pdEFiaWxpdHkKKyAgICAqIE51dHp1bmc6ICAgICAgICBVc2VTcGVsbCwgVXNlU2tpbGwKKyAgICAqIHNvbnN0aWc6ICAgICAgICBzcHJ1Y2hlcm11ZWR1bmcsIHNraWxsX2luZm9fbGlzdGUKKworNS4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9zcGVsbGJvb2svTGVhcm4gYi9kb2MvbGZ1bi9zcGVsbGJvb2svTGVhcm4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyNDMxYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3NwZWxsYm9vay9MZWFybgpAQCAtMCwwICsxLDMzIEBACitMZWFybigpCitGVU5LVElPTjoKKyAgICB2b2lkIExlYXJuKG9iamVjdCBjYXN0ZXIsIHN0cmluZyBzcGVsbCwgbWFwcGluZyBzaW5mbykKKworREVGSU5JRVJUIElOOgorICAgIC9zdGQvc3BlbGxib29rLmMKKworQVJHVU1FTlRFOgorICAgIG9iamVjdCBjYXN0ZXIgICBEZXJqZW5pZ2UsIGRlciBkZW4gU3BydWNoIHNwcmljaHQuCisgICAgc3RyaW5nIHNwZWxsICAgIERlciBnZXNwcm9jaGVuZSBTcGVsbAorICAgIG1hcHBpbmcgc2luZm8gICBNYXBwaW5nIG1pdCBhbGxlbiBtb2VnbGljaGVuIEluZm9ybWF0aW9uZW4genVtIFNwZWxsCisKK0JFU0NIUkVJQlVORzoKKyAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIHZvbiBkZXIgRnVua3Rpb24gIk1pc3NlcmZvbGciIGF1cyBkZW0gCisgICAgU3BlbGxib29rIGF1ZmdlcnVmZW4uIEhpZXIgbGVybnQgZGVyIFNwaWVsZXIgZGVuIFNwcnVjaCwgZGVyIAorICAgIG5pY2h0IGdlZ2x1ZWNrdCBpc3QuCisKK0JFTUVSS1VOR0VOOgorICAgIEthbm4gYXVjaCB1ZWJlcnNjaHJpZWJlbiB3ZXJkZW4sIHdlbm4gbWFuIGtvbXBsZXhlIExlcm4tQWVuZGVydW5nZW4KKyAgICB2b3JuZWhtZW4gd2lsbC4gQW5kZXJlIEF0dHJpYnV0ZSBzaW5kIHVlYmVyIFNJX0xFQVJOX0FUVFJJQlVURQorICAgIHNldHpiYXIuCisKK1NJRUhFIEFVQ0g6CisgICAgU3BlbGxib29rIExlcm5lbjogU3BlbGxTdWNjZXNzLCBFcmZvbGcsIE1pc3NlcmZvbGcKKyAgICAqIFZlcndhbHRlbjogICAgICBBZGRTcGVsbCwgUXVlcnlTcGVsbAorICAgICogQW5ncmlmZjogICAgICAgIFRyeUF0dGFja1NwZWxsLCBUcnlEZWZhdWx0QXR0YWNrU3BlbGwsCisgICAgICAgICAgICAgICAgICAgICAgVHJ5R2xvYmFsQXR0YWNrU3BlbGwKKyAgICAqIFByb3BlcnRpZXM6ICAgICBQX0dMT0JBTF9TS0lMTFBST1BTLCBQX1NCX1NQRUxMUworICAgIFNraWxscyBMZXJuZW46ICAgIExlYXJuU2tpbGwsIE1vZGlmeVNraWxsLCBMaW1pdEFiaWxpdHkKKyAgICAqIE51dHp1bmc6ICAgICAgICBVc2VTcGVsbCwgVXNlU2tpbGwKKyAgICAqIHNvbnN0aWc6ICAgICAgICBzcHJ1Y2hlcm11ZWR1bmcsIHNraWxsX2luZm9fbGlzdGUKKworNS4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9zcGVsbGJvb2svTWlzc2VyZm9sZyBiL2RvYy9sZnVuL3NwZWxsYm9vay9NaXNzZXJmb2xnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDUzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9zcGVsbGJvb2svTWlzc2VyZm9sZwpAQCAtMCwwICsxLDUzIEBACitNaXNzZXJmb2xnKCkKK0ZVTktUSU9OOgorICAgIHZvaWQgTWlzc2VyZm9sZyhvYmplY3QgY2FzdGVyLCBzdHJpbmcgc3BlbGwsIG1hcHBpbmcgc2luZm8pIAorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9zcGVsbGJvb2suYworCitBUkdVTUVOVEU6CisgICAgb2JqZWN0IGNhc3RlciAgICBTcGVsbCBzcHJlY2hlbmRlciBTcGllbGVyCisgICAgc3RyaW5nIHNwZWxsICAgICBTcGVsbG5hbWUKKyAgICBtYXBwaW5nIHNpbmZvICAgIFNwZWxsLUluZm8tTWFwcGluZyBtaXQgYWxsZW4gSW5mb3JtYXRpb25lbgorCitCRVNDSFJFSUJVTkc6CisgICAgV2lyZCBiZWkgTWlzc2VyZm9sZyBlaW5lcyBTcGVsbHMgaW0gU3BlbGxib29rIGF1ZmdlcnVmZW4gdW5kCisgICAgcnVmdCBkaWUgTGVybmZ1bmt0aW9uIExlYXJuKCkgbmFjaCBlaW5lciBGZWhsZXJtZWxkdW5nLgorICAgIAorICAgIEthbm4gdWViZXJzY2hyaWViZW4gd2VyZGVuLCB1bSBkaWUgTWVsZHVuZ2VuIGFuenVwYXNzZW4uCisKK0JFSVNQSUVMOgorICAgIC8vIE1pc3NlcmZvbGdlIGltIEtsZXJ1cyBtaXQgYW5nZXBhc3N0ZW4gTWVsZHVuZ2VuCisgICAgdm9pZCBNaXNzZXJmb2xnKG9iamVjdCBjYXN0ZXIsIHN0cmluZyBzcGVsbCwgbWFwcGluZyBzaW5mbykgeworICAgICAgc3dpdGNoKHNwZWxsKSB7CisgICAgICAgIGNhc2UgImJlZ3JhYmUiOgorICAgICAgICAgIHRlbGxfb2JqZWN0KGNhc3RlciwgQlMoCisgICAgICAgICAgICAiRHUgYmVncmFlYnN0IERlaW5lIEhvZmZudW5nZW4sIGRhc3MgRHUgZGllc2UgQW5ydWZ1bmcgamVtYWxzICIKKyAgICAgICAgICAgICJwZXJmZWt0IGJlaGVycnNjaGVuIHdpcnN0LiIpKTsKKyAgICAgICAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoY2FzdGVyKSwKKyAgICAgICAgICAgIGNhc3Rlci0+TmFtZShXRVIpKyIgdHJpdHQgZGllIExlaWNoZSBsdXN0bG9zLlxuIiwgKHtjYXN0ZXJ9KSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImJsaXR6IjoKKyAgICAgICAgWy4uLl0KKyAgICAgIH0KKyAgICAgICAgCisgICAgICBpbnQgb2xkX2FiaWwgPSBzaW5mb1tTSV9TS0lMTEFCSUxJVFldOworICAgICAgTGVhcm4oY2FzdGVyLCBzcGVsbCwgc2luZm8pOworICAgICAgaW50IG5ld19hYmlsID0gY2FzdGVyLT5RdWVyeVNraWxsQWJpbGl0eShzcGVsbCk7CisgICAgICBpZiAob2xkX2FiaWwgPCBuZXdfYWJpbCkKKyAgICAgICAgdGVsbF9vYmplY3QoY2FzdGVyLCAiRGllIEdvZXR0ZXIgc2NoZW5rZW4gRGlyIGVpbmUgRXJsZXVjaHR1bmcuXG4iKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGVsbF9vYmplY3QoY2FzdGVyLCAiTGVpZGVyIGxlcm5zdCBEdSBuaWNodCBhdXMgRGVpbmVtIEZlaGxlci5cbiIpOyAKKyAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgU3BlbGxib29rIExlcm5lbjogTGVhcm4sIFNwZWxsU3VjY2VzcywgRXJmb2xnCisgICAgKiBWZXJ3YWx0ZW46ICAgICAgQWRkU3BlbGwsIFF1ZXJ5U3BlbGwKKyAgICAqIEFuZ3JpZmY6ICAgICAgICBUcnlBdHRhY2tTcGVsbCwgVHJ5RGVmYXVsdEF0dGFja1NwZWxsLAorICAgICAgICAgICAgICAgICAgICAgIFRyeUdsb2JhbEF0dGFja1NwZWxsCisgICAgKiBQcm9wZXJ0aWVzOiAgICAgUF9HTE9CQUxfU0tJTExQUk9QUywgUF9TQl9TUEVMTFMKKyAgICBTa2lsbHMgTGVybmVuOiAgICBMZWFyblNraWxsLCBNb2RpZnlTa2lsbCwgTGltaXRBYmlsaXR5CisgICAgKiBOdXR6dW5nOiAgICAgICAgVXNlU3BlbGwsIFVzZVNraWxsCisgICAgKiBzb25zdGlnOiAgICAgICAgc3BydWNoZXJtdWVkdW5nLCBza2lsbF9pbmZvX2xpc3RlCisKKzUuIE9rdCAyMDExIEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vc3BlbGxib29rL1F1ZXJ5U3BlbGwgYi9kb2MvbGZ1bi9zcGVsbGJvb2svUXVlcnlTcGVsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2FkZWMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vc3BlbGxib29rL1F1ZXJ5U3BlbGwKQEAgLTAsMCArMSwyNiBAQAorUXVlcnlTcGVsbCgpCitGVU5LVElPTjoKKyAgICBtYXBwaW5nIFF1ZXJ5U3BlbGwoc3RyaW5nIHNwZWxsKQorCitERUZJTklFUlQgSU46CisgICAgL3N0ZC9zcGVsbGJvb2suYworCitBUkdVTUVOVEU6CisgICAgc3RyaW5nIHNwZWxsICAgIE5hbWUgZGVzIFNwZWxscworCitCRVNDSFJFSUJVTkc6CisgICAgR2lidCBkYXMgU3BlbGxtYXBwaW5nIGF1cyBQX1NCX1NQRUxMUyBmdWVyIGRpZXNlbiBTcGVsbCB6dXJ1ZWNrLgorICAgIAorICAgIEhpZXIgZW50aGFlbHQgUXVlcnlTcGVsbCBudXIgZGllIFNwZWxsYm9vay1JbmZvcm1hdGlvbmVuLgorCitTSUVIRSBBVUNIOgorICAgIFNwZWxsYm9vayBMZXJuZW46IExlYXJuLCBTcGVsbFN1Y2Nlc3MsIEVyZm9sZywgTWlzc2VyZm9sZworICAgICogVmVyd2FsdGVuOiAgICAgIEFkZFNwZWxsCisgICAgKiBBbmdyaWZmOiAgICAgICAgVHJ5QXR0YWNrU3BlbGwsIFRyeURlZmF1bHRBdHRhY2tTcGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICBUcnlHbG9iYWxBdHRhY2tTcGVsbAorICAgICogUHJvcGVydGllczogICAgIFBfR0xPQkFMX1NLSUxMUFJPUFMsIFBfU0JfU1BFTExTCisgICAgU2tpbGxzIExlcm5lbjogICAgTGVhcm5Ta2lsbCwgTW9kaWZ5U2tpbGwsIExpbWl0QWJpbGl0eQorICAgICogTnV0enVuZzogICAgICAgIFVzZVNwZWxsLCBVc2VTa2lsbAorICAgICogc29uc3RpZzogICAgICAgIHNwcnVjaGVybXVlZHVuZywgc2tpbGxfaW5mb19saXN0ZQorCis1LiBPa3QgMjAxMSBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9sZnVuL3NwZWxsYm9vay9TcGVsbFN1Y2Nlc3MgYi9kb2MvbGZ1bi9zcGVsbGJvb2svU3BlbGxTdWNjZXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDQ4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGZ1bi9zcGVsbGJvb2svU3BlbGxTdWNjZXNzCkBAIC0wLDAgKzEsMzEgQEAKK1NwZWxsU3VjY2VzcygpCitGVU5LVElPTjoKKyAgICBpbnQgU3BlbGxTdWNjZXNzKG9iamVjdCBjYXN0ZXIsIG1hcHBpbmcgc2luZm8pCisKK0RFRklOSUVSVCBJTjoKKyAgICAvc3RkL3NwZWxsYm9vay5jCisKK0FSR1VNRU5URToKKyAgICBvYmplY3QgY2FzdGVyICAgIFNwZWxsIHNwcmVjaGVuZGVyIFNwaWVsZXIKKyAgICBtYXBwaW5nIHNpbmZvICAgIFNwZWxsLUluZm8tTWFwcGluZyBtaXQgYWxsZW4gSW5mb3JtYXRpb25lbgorCitCRVNDSFJFSUJVTkc6CisgICAgQmVyZWNobmV0IGRlbiBFcmZvbGcgZGVyIEFud2VuZHVuZyBlaW5lcyBTcGVsbHMgYXVzIHNlaW5lcgorICAgIFNJX1NLSUxMQUJJTElUWSB1bmQgZGVtIFNraWxsIFNLX0NBU1RJTkcgaW0gU3BpZWxlci4gTGFlc3N0CisgICAgZGVuIFNwaWVsZXIgYmVpIGJlc29uZGVycyBndXRlbSBHZWxpbmdlbiBTS19DQVNUSU5HIGxlcm5lbi4KKworQkVNRVJLVU5HRU46CisgICAgU0tfQ0FTVElORyBtdXNzIGZ1ZXIgZGllIFNLX0NBU1RJTkctQm9uaSBiZWhlcnJzY2h0IHdlcmRlbi4KKyAgICBEYXMgaXN0IHpCIGltIEtsZXJ1cyBhYiBiZXN0aW1tdGVtIExldmVsIGRlciBGYWxsLgorCitTSUVIRSBBVUNIOgorICAgIFNwZWxsYm9vayBMZXJuZW46IExlYXJuLCBFcmZvbGcsIE1pc3NlcmZvbGcKKyAgICAqIFZlcndhbHRlbjogICAgICBBZGRTcGVsbCwgUXVlcnlTcGVsbAorICAgICogQW5ncmlmZjogICAgICAgIFRyeUF0dGFja1NwZWxsLCBUcnlEZWZhdWx0QXR0YWNrU3BlbGwsCisgICAgICAgICAgICAgICAgICAgICAgVHJ5R2xvYmFsQXR0YWNrU3BlbGwKKyAgICAqIFByb3BlcnRpZXM6ICAgICBQX0dMT0JBTF9TS0lMTFBST1BTLCBQX1NCX1NQRUxMUworICAgIFNraWxscyBMZXJuZW46ICAgIExlYXJuU2tpbGwsIE1vZGlmeVNraWxsLCBMaW1pdEFiaWxpdHkKKyAgICAqIE51dHp1bmc6ICAgICAgICBVc2VTcGVsbCwgVXNlU2tpbGwKKyAgICAqIHNvbnN0aWc6ICAgICAgICBzcHJ1Y2hlcm11ZWR1bmcsIHNraWxsX2luZm9fbGlzdGUKKworNS4gT2t0IDIwMTEgR2xvaW5zb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi9zcGVsbGJvb2svVHJ5QXR0YWNrU3BlbGwgYi9kb2MvbGZ1bi9zcGVsbGJvb2svVHJ5QXR0YWNrU3BlbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkNzViOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3NwZWxsYm9vay9UcnlBdHRhY2tTcGVsbApAQCAtMCwwICsxLDQ4IEBACisqKiBnaWxkZW4tZG9rdQorIG8gVHJ5QXR0YWNrU3BlbGwob3BmZXIsc2NoYWRlbix0eXBlbixpc19zcGVsbCxjYXN0ZXIsaW5mbykKKyAgIFZlcnN1Y2h0IGRlbiBBbmdyaWZmcy1TcHJ1Y2ggYXVmIGRlbiBHZWduZXIgYW56dXdlbmRlbi4gRGllCisgICBtaXR0bGVyZW4gNCBXZXJ0ZSBzaW5kIGRpZSwgZGllIGF1Y2ggYmVpIERlZmVuZCB1ZWJlcmdlYmVuIHdlcmRlbi4KKyAgIERhYmVpIHdpcmQgZGllIEFid2VocmZhZWhpZ2tlaXQgZGVzIEdlZ25lcnMgZ2VnZW4gTWFnaWUgdW5kIGRhcworICAgU2tpbGwtQXR0cmlidXQgU0FfREFNQUdFIGF1dG9tYXRpc2NoIGJlcnVlY2tzaWNodGlndC4gCisKK0ZVTktUSU9OOgorCitpbnQgVHJ5QXR0YWNrU3BlbGwob2JqZWN0IHZpY3RpbSwgaW50IGRhbWFnZSwgbWl4ZWQgZHR5cGVzLAorICAgICAgICAgICAgICAgICAgIG1peGVkIGlzX3NwZWxsLCBvYmplY3QgY2FzdGVyLCBtYXBwaW5nIHNpbmZvKQorCisKK0FSR1VNRU5URToKKworICAgICAgICB2aWN0aW0gICA6IERhcyBhcm1lIE9wZmVyLgorICAgICAgICBkYW1hZ2UgICA6IERlciBTY2hhZGVuLgorICAgICAgICBkdHlwZXMgICA6IERpZSBTY2hhZGVuc2FydGVuLgorCSAgICAgIGlzX3NwZWxsIDogSXN0IGVzIGVpbiBTcGVsbD8gV2VyZGVuIG5vY2ggU3BlemllbGxlIFBhcmFtZXRlciAKKwkgICAgICAgICAgIHVlYmVyZ2ViZW4gKGFscyBtYXBwaW5nKSA/CisgICAgICAgIGNhc3RlciAgIDogRGVyamVuaWdlLCBkZXIgZGVuIFNwcnVjaCBzcHJpY2h0LgorICAgICAgICBzaW5mbyAgICA6IE1hcHBpbmcgbWl0IGFsbGVuIG1vZWdsaWNoZW4gSW5mb3JtYXRpb25lbiB6dW0gU3BlbGwKKworCitCRVNDSFJFSUJVTkc6CisKKwlEaWVzZSBGdW5rdGlvbiB3aXJkIHZvbSBTcGVsbGJvb2sgYXVmZ2VydWZlbiwgd2VubiBkZXIgU3BpZWxlcgorCWVpbmVuIEFuZ3JpZmZzc3BlbGwgZ2VtYWNodCBoYXQgdW5kIGRhbWl0IFNjaGFkZW4gYW5yaWNodGVuIHdpbGwuCisKKworUlVFQ0tHQUJFV0VSVDoKKworCURlciBXZXJ0LCBkZXIgdm9tIERlZmVuZCgpIGRlcyBHZWduZXJzIHp1cnVlY2tnZWxpZWZlcnQgd2lyZC4KKworCitCRU1FUktVTkdFTjoKKworCVp1IGVyc3Qgd2lyZCB1ZWJlcnBydWVmdCwgb2IgZGFzIFppZWwgdWViZXJoYXVwdCBhbmdyZWlmYmFyIGlzdC4gRGllcworCXZlcmhpbmRlcnQgZGFzIHVlYmVuIHZvbiBTcGVsbHMgYW4gdW5hbmdyZWlmYmFyZW4gTlBDcy4KKwlBbHMgbmFlY2hzdGVzIHdpcmQgZGllIEZhZWhpZ2tlaXQsIFNwZWxscyBhYnp1d2VocmVuIHVlYmVycHJ1ZWZ0LgorCUZhbGxzIGJlaWRlIEFiZnJhZ2VuIG9rIHNpbmQsIHdpcmQgRGVmZW5kIGF1ZmdlcnVmZW4uCisKKworU2llaGUgYXVjaDoKKworVHJ5RGVmYXVsdEF0dGFja1NwZWxsICh0byBiZSB3cml0dGVuKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNy4xMC4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi90cmlnZ2VyX3NlbnNpdGl2ZV9hdHRhY2sgYi9kb2MvbGZ1bi90cmlnZ2VyX3NlbnNpdGl2ZV9hdHRhY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5YjM4YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3RyaWdnZXJfc2Vuc2l0aXZlX2F0dGFjawpAQCAtMCwwICsxLDc1IEBACit0cmlnZ2VyX3NlbnNpdGl2ZV9hdHRhY2soKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyB2b2lkIHRyaWdnZXJfc2Vuc2l0aXZlX2F0dGFjayhvYmplY3QgZW5lbXksIHN0cmluZyBrZXksIGludAorICAgICBkYW0sIG1peGVkIHNwZWxsLCBtaXhlZCAqb3B0aW9ucyk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgZWlnZW5lbiBzZW5zaXRpdmVuIE9iamVrdGVuLCB3aXJkIGF1ZmdlcnVmZW4gdm9uCisgICAgIC9zdGQvbGl2aW5nL2ludmVudG9yeS5jCisKK0FSR1VNRU5URToKKyAgICAgZW5lbXkKKyAgICAgICAgICBEZXIgR2VnbmVyLCBkZXIgZGllIEFrdGlvbiBhdXNnZWxvZXN0IGhhdC4KKyAgICAga2V5CisgICAgICAgICAgRGVyIGF1c2xvZXNlbmRlIFNjaGFkZW5zdHlwLgorICAgICBkYW0KKyAgICAgICAgICBEZXIgYW5nZXJpY2h0ZXRlIFNjaGFkZW4uCisgICAgIHNwZWxsCisgICAgICAgICAgV2llIGJlaSBEZWZlbmQoKS4KKyAgICAgb3B0aW9ucworICAgICAgICAgIEFycmF5IG1pdCBkZW4gaW4gUF9TRU5TSVRJVkUgYW5nZWdlYmVuZW4gT3B0aW9uZW4gZnVlciBkaWVzZQorICAgICAgICAgIEFrdGlvbi4KKworQkVTQ0hSRUlCVU5HOgorICAgICBXZW5uIGRlciBiZWkgZWluZW0gQW5ncmlmZiB6dWdlZnVlZ3RlIFNjaGFkZW4gZGVuIGluIFBfU0VOU0lUSVZFCisgICAgIGFuZ2VnZWJlbmVuIEdyZW56d2VydCB1ZWJlcnN0ZWlndCBzb3dpZSBkZXIgYWxzIFNjaGx1ZXNzZWwgYW5nZWdlYmVuZQorICAgICBTY2hhZGVuc3R5cCBpbiBkZW4gU2NoYWVkZW5zdHlwZW4gZGVzIEFuZ3JpZmZlcyB2b3Jrb21tdCwgd2lyZCBkaWVzZQorICAgICBGdW5rdGlvbiBhdWZnZXJ1ZmVuIHVuZCBrYW5uIGVudHNwcmVjaGVuZCByZWFnaWVyZW4uCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIGtlaW5lcgorCitCRUlTUElFTEU6CisgICAgIEVpbmUgRmFja2VsLCBkaWUgc2ljaCBiZWkgRmV1ZXJhdHRhY2tlbiBzZWxic3QgZW50enVlbmRldCB1bmQgYmVpCisgICAgIFdhc3NlcmF0dGFja2VuIHZlcmxvZXNjaHQsIGtvZW5udGUgbWFuIHdpZSBmb2xndCBpbXBsZW1lbnRpZXJlbjoKKworICAgICBpbmhlcml0ICIvc3RkL2xpZ2h0c291cmNlLmMiCisKKyAgICAgI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyAgICAgI2luY2x1ZGUgPHNlbnNpdGl2ZS5oPgorICAgICAjaW5jbHVkZSA8Y29tYmF0Lmg+CisKKyAgICAgY3JlYXRlKCkKKyAgICAgeworICAgICAgIDo6Y3JlYXRlKCk7CisKKyAgICAgICBTZXRQcm9wKC4uLik7IC8vIGRpZSB1ZWJsaWNoZW4gRWlnZW5zY2hhZnRlbiBkZWZpbmllcmVuCisKKyAgICAgICBTZXRQcm9wKFBfU0VOU0lUSVZFLAorICAgICAgICAgICAvLyAgRXJlaWduaXMgICAgICAgICAgS2V5ICAgICAgIEdyZW56ZSAoa2VpbmUgT3B0aW9uZW4pCisgICAgICAgICAoeyAoeyBTRU5TSVRJVkVfQVRUQUNLLCBEVF9GSVJFLCAgMTAwIH0pLAorICAgICAgICAgICAgKHsgU0VOU0lUSVZFX0FUVEFDSywgRFRfV0FURVIsIDEwMCB9KSB9KSApOworICAgICB9CisKKyAgICAgdmFyYXJncyB2b2lkCisgICAgIHRyaWdnZXJfc2Vuc2l0aXZlX2F0dGFjayhvYmplY3QgZW5lbXksIHN0cmluZyBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGFtLCBtaXhlZCBzcGVsbCkKKyAgICAgeworICAgICAgIC8vIEVzIHNvbGwgbmljaHQgdmVyc2Nod2llZ2VuIHdlcmRlbiwgZGFzcyBkYXMgRW50enVlbmRlbiB1bmQKKyAgICAgICAvLyBMb2VzY2hlbiBlaW5lciBMaWNodHF1ZWxsZSBzbyBsZWlkZXIgbmljaHQgZnVua3Rpb25pZXJ0Li4uCisgICAgICAgaWYgKGtleSA9PSBEVF9GSVJFICYmICFRdWVyeVByb3AoUF9MSUdIVEVEKSkgeworICAgICAgICAgU2V0UHJvcChQX0xJR0hURUQsIDEpOworICAgICAgICAgdGVsbF9vYmplY3QoZW52aXJvbm1lbnQoKSwgIkRpZSBGYWNrZWwgZmFlbmd0IEZldWVyLlxuIik7CisgICAgICAgfQorICAgICAgIGVsc2UgaWYgKGtleSA9PSBEVF9XQVRFUiAmJiBRdWVyeVByb3AoUF9MSUdIVEVEKSkgeworICAgICAgICAgU2V0UHJvcChQX0xJR0hURUQsIDApOworICAgICAgICAgdGVsbF9vYmplY3QoZW52aXJvbm1lbnQoKSwgIkRpZSBGYWNrZWwgdmVybGlzY2h0LlxuIik7CisgICAgICAgfQorICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIHRyaWdnZXJfc2Vuc2l0aXZlX2ludigpLCBzZW5zaXRpdmUgT2JqZWt0ZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IG1vZGlmaWVkOiBTdW4gTWF5IDE5IDE1OjU2OjI1IDE5OTYgYnkgV2FyZ29uCmRpZmYgLS1naXQgYS9kb2MvbGZ1bi90cmlnZ2VyX3NlbnNpdGl2ZV9pbnYgYi9kb2MvbGZ1bi90cmlnZ2VyX3NlbnNpdGl2ZV9pbnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxN2ViZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZnVuL3RyaWdnZXJfc2Vuc2l0aXZlX2ludgpAQCAtMCwwICsxLDQwIEBACit0cmlnZ2VyX3NlbnNpdGl2ZV9pbnYoKQorCitGVU5LVElPTjoKKyAgICAgdmFyYXJncyB2b2lkIHRyaWdnZXJfc2Vuc2l0aXZlX2ludihvYmplY3Qgb2IsIHN0cmluZyBrZXksIGludCB3ZXJ0LAorICAgICBtaXhlZCAqb3B0aW9uZW4xLCBtaXhlZCAqb3B0aW9uZW4yKTsKKworREVGSU5JRVJUIElOOgorICAgICBlaWdlbmVuIE9iamVrdGVuLCB3aXJkIGF1ZmdlcnVmZW4gdm9uIC9zdGQvY29udGFpbmVyL2ludmVudG9yeS5jCisKK0FSR1VNRU5URToKKyAgICAgb2IKKyAgICAgICAgICBEYXMgYXVzbG9lc2VuZGUgT2JqZWt0CisgICAgIGtleQorICAgICAgICAgIERlciBTY2hsdWVzc2VsLCBkZXIgZGllIEFrdGlvbiBhdXNsb2VzdGUuCisgICAgIHdlcnQKKyAgICAgICAgICBEZXIgR3Jlbnp3ZXJ0IGRlcyBhdXNsb2VzZW5kZW4gT2JqZWt0ZXMuCisgICAgIG9wdGlvbmVuMQorICAgICAgICAgIERpZSBPcHRpb25lbiBkZXMgYXVzbG9lc2VuZGVuIE9iamVrdGVzLgorICAgICBvcHRpb25lbjIKKyAgICAgICAgICBEaWUgT3B0aW9uZW4gZGVzIHJlYWdpZXJlbmRlbiBPYmpla3Rlcy4KKworQkVTQ0hSRUlCVU5HOgorICAgICBEaWVzZSBGdW5rdGlvbiB3aXJkIGluIE9iamVrdGVuIGRlcyBzZW5zaXRpdmVuIFR5cHMgU0VOU0lUSVZFX0lOVkVOVE9SWQorICAgICBhdWZnZXJ1ZmVuLCB3ZW5uIHNpZSBpbiBLb250YWt0IG1pdCBPYmpla3RlbiBkZXMgVHlwcworICAgICBTRU5TSVRJVkVfSU5WRU5UT1JZX1RSSUdHRVIgdHJldGVuLCBkaWUgZGVuIGdsZWljaGVuIFNjaGx1ZXNzZWwKKyAgICAgYXVmd2Vpc2VuIHVuZCBlaW5lbiBob2VoZXJlbiBHcmVuendlcnQgaGFiZW4uCisKKyAgICAgQW5oYW5kIGRlciBQYXJhbWV0ZXIga29lbm5lbiBkYW5uIGRpZSBub2V0aWdlbiBBa3Rpb25lbiBhdXNnZWxvZXN0CisgICAgIHdlcmRlbi4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAga2VpbmVyCisKK0JFSVNQSUVMRToKKworU0lFSEUgQVVDSDoKKyAgICAgdHJpZ2dlcl9zZW5zaXRpdmVfYXR0YWNrKCksIHNlbnNpdGl2ZSBPYmpla3RlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXkgOCAxMDoyNjoxMCAxOTk2IGJ5IFdhcmdvbgpkaWZmIC0tZ2l0IGEvZG9jL2xmdW4vd2llbGRfbWUgYi9kb2MvbGZ1bi93aWVsZF9tZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjc1MDRlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vd2llbGRfbWUKQEAgLTAsMCArMSwxMCBAQAord2llbGRfbWUoKQorCitCRU1FUktVTkdFTjoKKyAgICAgd2llbGRfbWUgd3VyZGUgZHVyY2ggRG9XaWVsZCBlcnNldHp0LgorCitTSUVIRSBBVUNIOgorICAgICBEb1dpZWxkRnVuYygpLCAvc3RkL3dlYXBvbi5jCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgbW9kaWZpZWQ6IFdlZCBBcHIgMDggMTA6MjU6MDAgMjAwNCBieSBNdWFkaWIK