ZGlmZiAtLWdpdCBhL2RvYy9odG1sL2NhbGxiYWNrcy5odG1sIGIvZG9jL2h0bWwvY2FsbGJhY2tzLmh0bWwKaW5kZXggNzQwY2FmMi4uYjNmMjc4NyAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvY2FsbGJhY2tzLmh0bWwKKysrIGIvZG9jL2h0bWwvY2FsbGJhY2tzLmh0bWwKQEAgLTU1LDcgKzU1LDcgQEAKIFB5dGhvbiB0aHJlYWRzIHRvIGJlIGFibGUgdG8gZG8gb3RoZXIgdGhpbmdzLiBUaGUgcmVhbCB0cm91YmxlIGlzIGlmIHlvdSd2ZQogcmVsZWFzZWQgdGhlIHRocmVhZCBsb2NrIHRvIGRvIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcgb3BlcmF0aW9uLCBhbmQgdGhlCiBvcGVyYXRpb24gY2FsbHMgYSBjYWxsYmFjay4gVGhlbiB3ZSBtdXN0IHRha2UgdGhlIHRocmVhZCBsb2NrIGJhY2s8QSBOQU1FPSJ0ZXgyaHRtbDYiCi0gIEhSRUY9IiNmb290OTM0Ij48U1VQPjU8L1NVUD48L0E+LgorICBIUkVGPSIjZm9vdDkzNSI+PFNVUD41PC9TVVA+PC9BPi4KIDwvRU0+PC9FTT48L0VNPgogPFA+CiA8RU0+PEVNPjxFTT5UaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyB0byB0aGUgZmlyc3QgcHJvYmxlbSwgYm90aCBvZiB3aGljaCBhcmUgbmVjZXNzYXJ5LiBUaGUKQEAgLTgzLDcgKzgzLDcgQEAKIDxQPgogPEJSPjxIUj48SDQ+Rm9vdG5vdGVzPC9IND4KIDxETD4KLTxEVD48QSBOQU1FPSJmb290OTM0Ij4uLi4gYmFjazwvQT48QQorPERUPjxBIE5BTUU9ImZvb3Q5MzUiPi4uLiBiYWNrPC9BPjxBCiAgaHJlZj0iY2FsbGJhY2tzLmh0bWwjdGV4Mmh0bWw2Ij48U1VQPjU8L1NVUD48L0E+PC9EVD4KIDxERD5JJ20KIG5vdCBzdXJlIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeSwgYnV0IG90aGVyd2lzZSBJIGdldCBhIHNlZ21lbnRhdGlvbiB2aW9sYXRpb24gb24KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2ludHJvLmh0bWwgYi9kb2MvaHRtbC9pbnRyby5odG1sCmluZGV4IGU1N2Y2ZjIuLjJlMDY3NjMgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL2ludHJvLmh0bWwKKysrIGIvZG9jL2h0bWwvaW50cm8uaHRtbApAQCAtNjAsOSArNjAsOSBAQAogdW5mb3J0dW5hdGVseSBpdHMgZXJyb3IgaGFuZGxpbmcgc3lzdGVtIGRvZXMgbm90IHNlZW0gdG8gYmUgZmluaXNoZWQsCiBlc3BlY2lhbGx5IGZvciBub24tYmxvY2tpbmcgSS9PLiAgSSB0aGluayB0aGF0IG11Y2ggb2YgdGhlIHJlYXNvbiBmb3IgdGhpcwogaXMgdGhhdCBNMkNyeXB0bzxBIE5BTUU9InRleDJodG1sMSIKLSAgSFJFRj0iI2Zvb3Q4OTQiPjxTVVA+MTwvU1VQPjwvQT4gaXMKKyAgSFJFRj0iI2Zvb3Q4OTUiPjxTVVA+MTwvU1VQPjwvQT4gaXMKIGRldmVsb3BlZCB1c2luZyBTV0lHPEEgTkFNRT0idGV4Mmh0bWwyIgotICBIUkVGPSIjZm9vdDg5NSI+PFNVUD4yPC9TVVA+PC9BPi4gIFRoaXMKKyAgSFJFRj0iI2Zvb3Q4OTYiPjxTVVA+MjwvU1VQPjwvQT4uICBUaGlzCiBtYWtlcyBpdCBhd2t3YXJkIHRvIGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBlLmcuIGNhbiByZXR1cm4gYm90aCBhbiBpbnRlZ2VyIGFuZAogTlVMTCBzaW5jZSAoYXMgZmFyIGFzIEkga25vdykgeW91IGJhc2ljYWxseSB3cml0ZSBDIGZ1bmN0aW9ucyBhbmQgU1dJRyBtYWtlcwogd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBwYXJzZXMgdGhlIFB5dGhvbiBhcmd1bWVudCBsaXN0IGFuZCBjYWxscyB5b3VyIEMKQEAgLTcxLDEyICs3MSwxMiBAQAogPFA+CiA8QlI+PEhSPjxIND5Gb290bm90ZXM8L0g0PgogPERMPgotPERUPjxBIE5BTUU9ImZvb3Q4OTQiPi4uLiBNMkNyeXB0bzwvQT48QQorPERUPjxBIE5BTUU9ImZvb3Q4OTUiPi4uLiBNMkNyeXB0bzwvQT48QQogIGhyZWY9ImludHJvLmh0bWwjdGV4Mmh0bWwxIj48U1VQPjE8L1NVUD48L0E+PC9EVD4KIDxERD5TZWUgPGEgY2xhc3M9InVybCIgaHJlZj0iaHR0cDovL3d3dy5wb3N0MS5jb20vaG9tZS9uZ3BzL20yLyI+aHR0cDovL3d3dy5wb3N0MS5jb20vaG9tZS9uZ3BzL20yLzwvYT4KIAogPC9ERD4KLTxEVD48QSBOQU1FPSJmb290ODk1Ij4uLi4gU1dJRzwvQT48QQorPERUPjxBIE5BTUU9ImZvb3Q4OTYiPi4uLiBTV0lHPC9BPjxBCiAgaHJlZj0iaW50cm8uaHRtbCN0ZXgyaHRtbDIiPjxTVVA+MjwvU1VQPjwvQT48L0RUPgogPEREPlNlZSA8YSBjbGFzcz0idXJsIiBocmVmPSJodHRwOi8vc3dpZy5zb3VyY2Vmb3JnZS5uZXQvIj5odHRwOi8vc3dpZy5zb3VyY2Vmb3JnZS5uZXQvPC9hPgogCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9vcGVuc3NsLWNvbm5lY3Rpb24uaHRtbCBiL2RvYy9odG1sL29wZW5zc2wtY29ubmVjdGlvbi5odG1sCmluZGV4IGZlZDRkNTIuLmU4NTkyYjggMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL29wZW5zc2wtY29ubmVjdGlvbi5odG1sCisrKyBiL2RvYy9odG1sL29wZW5zc2wtY29ubmVjdGlvbi5odG1sCkBAIC0xNDEsNyArMTQxLDggQEAKIDxQPgogPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTUzJz48dHQgY2xhc3M9J21ldGhvZCc+cGVuZGluZzwvdHQ+PC9hPjwvYj4oKQogPGRkPgotUmV0cmlldmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVhZCBmcm9tIHRoZSBTU0wgYnVmZmVyLgorUmV0cmlldmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVhZCBmcm9tIHRoZSBTU0wgYnVmZmVyCisoPGk+bm90PC9pPiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgYnVmZmVyKS4KIDwvZGw+CiA8UD4KIDxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE1NCc+PHR0IGNsYXNzPSdtZXRob2QnPnJlY3Y8L3R0PjwvYT48L2I+KDx2YXI+YnVmc2l6ZTwvdmFyPikKZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wtcmFuZC5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC1yYW5kLmh0bWwKaW5kZXggODM5MDg4MC4uYTEyZmNmZiAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvb3BlbnNzbC1yYW5kLmh0bWwKKysrIGIvZG9jL2h0bWwvb3BlbnNzbC1yYW5kLmh0bWwKQEAgLTU5LDE0ICs1OSwxNCBAQAogPGRkPgogTWl4IGJ5dGVzIGZyb20gPHZhcj5zdHJpbmc8L3Zhcj4gaW50byB0aGUgUFJORyBzdGF0ZS4gVGhlIDx2YXI+ZW50cm9weTwvdmFyPiBhcmd1bWVudCBpcwogKHRoZSBsb3dlciBib3VuZCBvZikgYW4gZXN0aW1hdGUgb2YgaG93IG11Y2ggcmFuZG9tbmVzcyBpcyBjb250YWluZWQgaW4KLTx2YXI+c3RyaW5nPC92YXI+LCBtZWFzdXJlZCBpbiBieXRlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBlLmcuIDxhIGNsYXNzPSJyZmMiIG5hbWU9InJmY3JlZi0xODAxIgorPHZhcj5zdHJpbmc8L3Zhcj4sIG1lYXN1cmVkIGluIGJ5dGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGUuZy4gPGEgY2xhc3M9InJmYyIgbmFtZT0icmZjcmVmLTE4MDIiCiBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxNzUwLnR4dCI+UkZDIDE3NTA8L2E+LgogPC9kbD4KIDxQPgogPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtODMnPjx0dCBjbGFzcz0nZnVuY3Rpb24nPmVnZDwvdHQ+PC9hPjwvYj4oPHZhcj5wYXRoPC92YXI+PGJpZz5bPC9iaWc+PHZhcj4sIGJ5dGVzPC92YXI+PGJpZz5dPC9iaWc+KQogPGRkPgogUXVlcnkgdGhlIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbjxBIE5BTUU9InRleDJodG1sMyIKLSAgSFJFRj0iI2Zvb3Q5MTYiPjxTVVA+MzwvU1VQPjwvQT4gb24gc29ja2V0IDx2YXI+cGF0aDwvdmFyPiBmb3IgPHZhcj5ieXRlczwvdmFyPgorICBIUkVGPSIjZm9vdDkxNyI+PFNVUD4zPC9TVVA+PC9BPiBvbiBzb2NrZXQgPHZhcj5wYXRoPC92YXI+IGZvciA8dmFyPmJ5dGVzPC92YXI+CiBieXRlcyBvZiByYW5kb20gZGF0YSBhbmQgYW5kIHVzZXMgPHR0IGNsYXNzPSJmdW5jdGlvbiI+YWRkPC90dD4gdG8gc2VlZCB0aGUgUFJORy4gVGhlIGRlZmF1bHQKIHZhbHVlIG9mIDx2YXI+Ynl0ZXM8L3Zhcj4gaXMgMjU1LgogPC9kbD4KQEAgLTEwMiw3ICsxMDIsNyBAQAogPFA+CiA8QlI+PEhSPjxIND5Gb290bm90ZXM8L0g0PgogPERMPgotPERUPjxBIE5BTUU9ImZvb3Q5MTYiPi4uLiBEYWVtb248L0E+PEEKKzxEVD48QSBOQU1FPSJmb290OTE3Ij4uLi4gRGFlbW9uPC9BPjxBCiAgaHJlZj0ib3BlbnNzbC1yYW5kLmh0bWwjdGV4Mmh0bWwzIj48U1VQPjM8L1NVUD48L0E+PC9EVD4KIDxERD5TZWUKIDxhIGNsYXNzPSJ1cmwiIGhyZWY9Imh0dHA6Ly93d3cubG90aGFyLmNvbS90ZWNoL2NyeXB0by8iPmh0dHA6Ly93d3cubG90aGFyLmNvbS90ZWNoL2NyeXB0by88L2E+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9vcGVuc3NsLXNzbC5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC1zc2wuaHRtbAppbmRleCA2MmUzZjE2Li40ZDFhYmNjIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9vcGVuc3NsLXNzbC5odG1sCisrKyBiL2RvYy9odG1sL29wZW5zc2wtc3NsLmh0bWwKQEAgLTExMyw3ICsxMTMsNyBAQAogPGRkPgogRmFjdG9yeSBmdWNuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IENvbm5lY3Rpb24gb2JqZWN0IGdpdmVuIGFuIFNTTCBjb250ZXh0IGFuZAogYSBzb2NrZXQgPEEgTkFNRT0idGV4Mmh0bWw1IgotICBIUkVGPSIjZm9vdDkxOSI+PFNVUD40PC9TVVA+PC9BPiBvYmplY3QuCisgIEhSRUY9IiNmb290OTIwIj48U1VQPjQ8L1NVUD48L0E+IG9iamVjdC4KIDwvZGw+CiA8UD4KIDxkbD48ZHQ+PGI+ZXhjZXB0aW9uIDxhIG5hbWU9J2wyaC05OCc+PHR0IGNsYXNzPSdleGNlcHRpb24nPkVycm9yPC90dD48L2E+PC9iPgpAQCAtMTczLDcgKzE3Myw3IEBACiA8UD4KIDxCUj48SFI+PEg0PkZvb3Rub3RlczwvSDQ+CiA8REw+Ci08RFQ+PEEgTkFNRT0iZm9vdDkxOSI+Li4uIHNvY2tldDwvQT48QQorPERUPjxBIE5BTUU9ImZvb3Q5MjAiPi4uLiBzb2NrZXQ8L0E+PEEKICBocmVmPSJvcGVuc3NsLXNzbC5odG1sI3RleDJodG1sNSI+PFNVUD40PC9TVVA+PC9BPjwvRFQ+CiA8REQ+QWN0dWFsbHksIGFsbCB0aGF0IGlzIHJlcXVpcmVkIGlzIGFuIG9iamVjdCB0aGF0CiA8aT5iZWhhdmVzPC9pPiBsaWtlIGEgc29ja2V0LCB5b3UgY291bGQgZXZlbiB1c2UgZmlsZXMsIGV2ZW4gdGhvdWdoIGl0J2QgYmUKZGlmZiAtLWdpdCBhL2RvYy9weU9wZW5TU0wudGV4IGIvZG9jL3B5T3BlblNTTC50ZXgKaW5kZXggZGE0YzE5Yi4uNjc4ZmI3NCAxMDA2NDQKLS0tIGEvZG9jL3B5T3BlblNTTC50ZXgKKysrIGIvZG9jL3B5T3BlblNTTC50ZXgKQEAgLTg5NSw3ICs4OTUsOCBAQAogXGVuZHttZXRob2RkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17cGVuZGluZ317fQotUmV0cmlldmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVhZCBmcm9tIHRoZSBTU0wgYnVmZmVyLgorUmV0cmlldmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVhZCBmcm9tIHRoZSBTU0wgYnVmZmVyCisoXGVtcGh7bm90fSB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgYnVmZmVyKS4KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3JlY3Z9e2J1ZnNpemV9CmRpZmYgLS1naXQgYS9kb2MvcHlPcGVuU1NMLnR4dCBiL2RvYy9weU9wZW5TU0wudHh0CmluZGV4IDA2ZDBmZmEuLjE1MDE2ODIgMTAwNjQ0Ci0tLSBhL2RvYy9weU9wZW5TU0wudHh0CisrKyBiL2RvYy9weU9wZW5TU0wudHh0CkBAIC0xLDEyICsxLDExIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIE9wZW5TU0wgTWFudWFsCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gT3BlblNTTCBNYW51YWwKLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIE9wZW5TU0wgTWFudWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIE9wZW5TU0wgTWFudWFsCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJ0aW4gU2r2Z3JlbgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcnRpbkBzdHJha3QuY29tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJ0aW5Ac3RyYWt0LmNvbQogCiAgIEFic3RyYWN0OgogCkBAIC0xNywzNiArMTYsMzYgQEAKIAogQ29udGVudHMKIAotICAgICAqIDEgSW50cm9kdWN0aW9uIAotICAgICAqIDIgQnVpbGRpbmcgYW5kIEluc3RhbGxpbmcgCi0gICAgICAgICAgKyAyLjEgQnVpbGRpbmcgdGhlIE1vZHVsZSBvbiBhIFVuaXggU3lzdGVtIAotICAgICAgICAgICsgMi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBXaW5kb3dzIFN5c3RlbSAKLSAgICAgKiAzIE9wZW5TU0wgLS0gUHl0aG9uIGludGVyZmFjZSB0byBPcGVuU1NMIAotICAgICAgICAgICsgMy4xIGNyeXB0byAtLSBHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlIAorICAgICAqIDEgSW50cm9kdWN0aW9uCisgICAgICogMiBCdWlsZGluZyBhbmQgSW5zdGFsbGluZworICAgICAgICAgICsgMi4xIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBVbml4IFN5c3RlbQorICAgICAgICAgICsgMi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBXaW5kb3dzIFN5c3RlbQorICAgICAqIDMgT3BlblNTTCAtLSBQeXRob24gaW50ZXJmYWNlIHRvIE9wZW5TU0wKKyAgICAgICAgICArIDMuMSBjcnlwdG8gLS0gR2VuZXJpYyBjcnlwdG9ncmFwaGljIG1vZHVsZQogICAgICAgICAgICsgMy4yIHJhbmQgLS0gQW4gaW50ZXJmYWNlIHRvIHRoZSBPcGVuU1NMIHBzZXVkbyByYW5kb20gbnVtYmVyCi0gICAgICAgICAgICBnZW5lcmF0b3IgCi0gICAgICAgICAgKyAzLjMgU1NMIC0tIEFuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0wgCi0gICAgICogNCBJbnRlcm5hbHMgCi0gICAgICAgICAgKyA0LjEgRXhjZXB0aW9ucyAKLSAgICAgICAgICArIDQuMiBDYWxsYmFja3MgCi0gICAgICAgICAgKyA0LjMgQWNlc3NpbmcgU29ja2V0IE1ldGhvZHMgCisgICAgICAgICAgICBnZW5lcmF0b3IKKyAgICAgICAgICArIDMuMyBTU0wgLS0gQW4gaW50ZXJmYWNlIHRvIHRoZSBTU0wtc3BlY2lmaWMgcGFydHMgb2YgT3BlblNTTAorICAgICAqIDQgSW50ZXJuYWxzCisgICAgICAgICAgKyA0LjEgRXhjZXB0aW9ucworICAgICAgICAgICsgNC4yIENhbGxiYWNrcworICAgICAgICAgICsgNC4zIEFjZXNzaW5nIFNvY2tldCBNZXRob2RzCiAKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIEludHJvZHVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBJbnRyb2R1Y3Rpb24KIAogICAgVGhlIHJlYXNvbiB0aGlzIG1vZHVsZSBleGlzdHMgYXQgYWxsIGlzIHRoYXQgdGhlIFNTTCBzdXBwb3J0IGluIHRoZQotICAgc29ja2V0IG1vZHVsZSBpbiB0aGUgUHl0aG9uIDIuMSBkaXN0cmlidXRpb24gKHdoaWNoIGlzIHdoYXQgd2UgdXNlZCwKLSAgIG9mIGNvdXJzZSBJIGNhbm5vdCBzcGVhayBmb3IgbGF0ZXIgdmVyc2lvbnMpIGlzIHNldmVyZWx5IGxpbWl0ZWQuCisgICBzb2NrZXQgbW9kdWxlIGluIHRoZSBQeXRob24gMi4xIGRpc3RyaWJ1dGlvbiAod2hpY2ggaXMgd2hhdCB3ZSB1c2VkLCBvZgorICAgY291cnNlIEkgY2Fubm90IHNwZWFrIGZvciBsYXRlciB2ZXJzaW9ucykgaXMgc2V2ZXJlbHkgbGltaXRlZC4KIAogICAgV2hlbiBhc2tpbmcgYWJvdXQgU1NMIG9uIHRoZSBjb21wLmxhbmcucHl0aG9uIG5ld3Nncm91cCAob3Igb24KICAgIHB5dGhvbi1saXN0QHB5dGhvbi5vcmcpIHBlb3BsZSB1c3VhbGx5IHBvaW50ZWQgeW91IHRvIHRoZSBNMkNyeXB0bwogICAgcGFja2FnZS4gVGhlIE0yQ3J5cHRvLlNTTCBtb2R1bGUgZG9lcyBpbXBsZW1lbnQgYSBsb3Qgb2YgT3BlblNTTCdzCi0gICBmdW5jdGlvbmFsaXR5IGJ1dCB1bmZvcnR1bmF0ZWx5IGl0cyBlcnJvciBoYW5kbGluZyBzeXN0ZW0gZG9lcyBub3QKLSAgIHNlZW0gdG8gYmUgZmluaXNoZWQsIGVzcGVjaWFsbHkgZm9yIG5vbi1ibG9ja2luZyBJL08uIEkgdGhpbmsgdGhhdAotICAgbXVjaCBvZiB0aGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgTTJDcnlwdG9eMSBpcyBkZXZlbG9wZWQgdXNpbmcKLSAgIFNXSUdeMi4gVGhpcyBtYWtlcyBpdCBhd2t3YXJkIHRvIGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBlLmcuIGNhbiByZXR1cm4KLSAgIGJvdGggYW4gaW50ZWdlciBhbmQgTlVMTCBzaW5jZSAoYXMgZmFyIGFzIEkga25vdykgeW91IGJhc2ljYWxseSB3cml0ZQotICAgQyBmdW5jdGlvbnMgYW5kIFNXSUcgbWFrZXMgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBwYXJzZXMgdGhlIFB5dGhvbgorICAgZnVuY3Rpb25hbGl0eSBidXQgdW5mb3J0dW5hdGVseSBpdHMgZXJyb3IgaGFuZGxpbmcgc3lzdGVtIGRvZXMgbm90IHNlZW0KKyAgIHRvIGJlIGZpbmlzaGVkLCBlc3BlY2lhbGx5IGZvciBub24tYmxvY2tpbmcgSS9PLiBJIHRoaW5rIHRoYXQgbXVjaCBvZgorICAgdGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IE0yQ3J5cHRvXjEgaXMgZGV2ZWxvcGVkIHVzaW5nIFNXSUdeMi4gVGhpcworICAgbWFrZXMgaXQgYXdrd2FyZCB0byBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgZS5nLiBjYW4gcmV0dXJuIGJvdGggYW4KKyAgIGludGVnZXIgYW5kIE5VTEwgc2luY2UgKGFzIGZhciBhcyBJIGtub3cpIHlvdSBiYXNpY2FsbHkgd3JpdGUgQworICAgZnVuY3Rpb25zIGFuZCBTV0lHIG1ha2VzIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgcGFyc2VzIHRoZSBQeXRob24KICAgIGFyZ3VtZW50IGxpc3QgYW5kIGNhbGxzIHlvdXIgQyBmdW5jdGlvbiwgYW5kIGZpbmFsbHkgdHJhbnNmb3JtcyB5b3VyCiAgICByZXR1cm4gdmFsdWUgdG8gYSBQeXRob24gb2JqZWN0LgogCkBAIC01NSwyMiArNTQsMjIgQEAKIAogICAgVGhlc2UgaW5zdHJ1Y3Rpb25zIGNhbiBhbHNvIGJlIGZvdW5kIGluIHRoZSBmaWxlIElOU1RBTEwuCiAKLSAgIEkgaGF2ZSB0ZXN0ZWQgdGhpcyBvbiBEZWJpYW4gTGludXggc3lzdGVtcyAod29vZHkgYW5kIHNpZCksIFNvbGFyaXMKLSAgIDIuNiBhbmQgMi43LiBPdGhlcnMgaGF2ZSBzdWNjZXNzZnVsbHkgY29tcGlsZWQgaXQgb24gV2luZG93cyBhbmQgTlQuCisgICBJIGhhdmUgdGVzdGVkIHRoaXMgb24gRGViaWFuIExpbnV4IHN5c3RlbXMgKHdvb2R5IGFuZCBzaWQpLCBTb2xhcmlzIDIuNgorICAgYW5kIDIuNy4gT3RoZXJzIGhhdmUgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkIGl0IG9uIFdpbmRvd3MgYW5kIE5ULgogCiAKIDIuMSBCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgVW5peCBTeXN0ZW0KIAotICAgcHlPcGVuU1NMIHVzZXMgZGlzdHV0aWxzLCBzbyB0aGVyZSByZWFsbHkgc2hvdWxkbid0IGJlIGFueSBwcm9ibGVtcy4KLSAgIFRvIGJ1aWxkIHRoZSBsaWJyYXJ5OgorICAgcHlPcGVuU1NMIHVzZXMgZGlzdHV0aWxzLCBzbyB0aGVyZSByZWFsbHkgc2hvdWxkbid0IGJlIGFueSBwcm9ibGVtcy4gVG8KKyAgIGJ1aWxkIHRoZSBsaWJyYXJ5OgogCiBweXRob24gc2V0dXAucHkgYnVpbGQKIAogICAgSWYgeW91ciBPcGVuU1NMIGhlYWRlciBmaWxlcyBhcmVuJ3QgaW4gL3Vzci9pbmNsdWRlLCB5b3UgbWF5IG5lZWQgdG8KLSAgIHN1cHBseSB0aGUgLUkgZmxhZyB0byBsZXQgdGhlIHNldHVwIHNjcmlwdCBrbm93IHdoZXJlIHRvIGxvb2suIFRoZQotICAgc2FtZSBnb2VzIGZvciB0aGUgbGlicmFyaWVzIG9mIGNvdXJzZSwgdXNlIHRoZSAtTCBmbGFnLiBOb3RlIHRoYXQKLSAgIGJ1aWxkIHdvbid0IGFjY2VwdCB0aGVzZSBmbGFncywgc28geW91IGhhdmUgdG8gcnVuIGZpcnN0IGJ1aWxkX2V4dCBhbmQKLSAgIHRoZW4gYnVpbGQhIEV4YW1wbGU6CisgICBzdXBwbHkgdGhlIC1JIGZsYWcgdG8gbGV0IHRoZSBzZXR1cCBzY3JpcHQga25vdyB3aGVyZSB0byBsb29rLiBUaGUgc2FtZQorICAgZ29lcyBmb3IgdGhlIGxpYnJhcmllcyBvZiBjb3Vyc2UsIHVzZSB0aGUgLUwgZmxhZy4gTm90ZSB0aGF0IGJ1aWxkCisgICB3b24ndCBhY2NlcHQgdGhlc2UgZmxhZ3MsIHNvIHlvdSBoYXZlIHRvIHJ1biBmaXJzdCBidWlsZF9leHQgYW5kIHRoZW4KKyAgIGJ1aWxkISBFeGFtcGxlOgogCiBweXRob24gc2V0dXAucHkgYnVpbGRfZXh0IC1JL3Vzci9sb2NhbC9zc2wvaW5jbHVkZSAtTC91c3IvbG9jYWwvc3NsL2xpYgogcHl0aG9uIHNldHVwLnB5IGJ1aWxkCkBAIC05Miw4ICs5MSw4IEBACiAKIDIuMiBCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgV2luZG93cyBTeXN0ZW0KIAotICAgQmlnIHRoYW5rcyB0byBJdGFtYXIgU2h0dWxsLVRyYXVyaW5nIGFuZCBPbGVnIE9ybG92IGZvciB0aGVpciBoZWxwCi0gICB3aXRoIFdpbmRvd3MgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBTYW1lIGFzIGZvciBVbml4IHN5c3RlbXMsIHdlIGhhdmUgdG8KKyAgIEJpZyB0aGFua3MgdG8gSXRhbWFyIFNodHVsbC1UcmF1cmluZyBhbmQgT2xlZyBPcmxvdiBmb3IgdGhlaXIgaGVscCB3aXRoCisgICBXaW5kb3dzIGJ1aWxkIGluc3RydWN0aW9ucy4gU2FtZSBhcyBmb3IgVW5peCBzeXN0ZW1zLCB3ZSBoYXZlIHRvCiAgICBzZXBhcmF0ZSB0aGUgYnVpbGRfZXh0IGFuZCB0aGUgYnVpbGQuCiAKICAgIEJ1aWxkaW5nIHRoZSBsaWJyYXJ5OgpAQCAtMTE1LDcgKzExNCw3IEBACiAgICB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbi4KIAogCi0gICAgICAgICAgICAgICAgICAgMyBPcGVuU1NMIC0tIFB5dGhvbiBpbnRlcmZhY2UgdG8gT3BlblNTTAorICAgICAgICAgICAgICAgICAgICAzIE9wZW5TU0wgLS0gUHl0aG9uIGludGVyZmFjZSB0byBPcGVuU1NMCiAKICAgIFRoaXMgcGFja2FnZSBwcm92aWRlcyBhIGhpZ2gtbGV2ZWwgaW50ZXJmYWNlIHRvIHRoZSBmdW5jdGlvbnMgaW4gdGhlCiAgICBPcGVuU1NMIGxpYnJhcnkuIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyBhcmUgZGVmaW5lZDoKQEAgLTE2Nyw4ICsxNjYsNyBAQAogICAgICAgICAgIEEgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUEtDUzEyIG9iamVjdCB0eXBlLgogCiAgICBYNTA5RXh0ZW5zaW9uVHlwZQotICAgICAgICAgIEEgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgWDUwOUV4dGVuc2lvbiBvYmplY3QKLSAgICAgICAgICB0eXBlLgorICAgICAgICAgIEEgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgWDUwOUV4dGVuc2lvbiBvYmplY3QgdHlwZS4KIAogICAgWDUwOUV4dGVuc2lvbih0eXBlbmFtZSwgY3JpdGljYWwsIHZhbHVlKQogICAgICAgICAgIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgWDUwOUV4dGVuc2lvbiBvYmplY3QuCkBAIC0yMzEsOCArMjI5LDggQEAKICAgICAgICAgICB0eXBlLgogCiAgICBsb2FkX3BrY3MxMihidWZmZXJbLCBwYXNzcGhyYXNlXSkKLSAgICAgICAgICBMb2FkIHBrY3MxMiBkYXRhIGZyb20gdGhlIHN0cmluZyBidWZmZXIuIElmIHRoZSBwa2NzMTIKLSAgICAgICAgICBzdHJ1Y3R1cmUgaXMgZW5jcnlwdGVkLCBhIHBhc3NwaHJhc2UgbXVzdCBiZSBpbmNsdWRlZC4KKyAgICAgICAgICBMb2FkIHBrY3MxMiBkYXRhIGZyb20gdGhlIHN0cmluZyBidWZmZXIuIElmIHRoZSBwa2NzMTIgc3RydWN0dXJlCisgICAgICAgICAgaXMgZW5jcnlwdGVkLCBhIHBhc3NwaHJhc2UgbXVzdCBiZSBpbmNsdWRlZC4KIAogCiAgIDMuMS4xIFg1MDkgb2JqZWN0cwpAQCAtMjQyLDcgKzI0MCw3IEBACiAgICBnZXRfaXNzdWVyKCkKICAgICAgICAgICBSZXR1cm4gYSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gYSBYNTA5TmFtZSBvYmplY3QgcmVwcmVzZW50aW5nCiAgICAgICAgICAgdGhlIGlzc3VlciBvZiB0aGUgY2VydGlmaWNhdGUuIFdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgWDUwOSBvcgotICAgICAgICAgIFg1MDlSZXEgb2JqZWN0IGlzIGRlc3Ryb3llZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBpbnZhbGlkISAKKyAgICAgICAgICBYNTA5UmVxIG9iamVjdCBpcyBkZXN0cm95ZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgaW52YWxpZCEKIAogICAgZ2V0X3B1YmtleSgpCiAgICAgICAgICAgUmV0dXJuIGEgUEtleSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwdWJsaWMga2V5IG9mIHRoZQpAQCAtMjU0LDcgKzI1Miw3IEBACiAgICBnZXRfc3ViamVjdCgpCiAgICAgICAgICAgUmV0dXJuIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIGEgWDUwOU5hbWUgb2JqZWN0IHJlcHJlc2VudGluZwogICAgICAgICAgIHRoZSBzdWJqZWN0IG9mIHRoZSBjZXJ0aWZpY2F0ZS4gV2hlbiB0aGUgY29ycmVzcG9uZGluZyBYNTA5IG9yCi0gICAgICAgICAgWDUwOVJlcSBvYmplY3QgaXMgZGVzdHJveWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIGludmFsaWQhIAorICAgICAgICAgIFg1MDlSZXEgb2JqZWN0IGlzIGRlc3Ryb3llZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBpbnZhbGlkIQogCiAgICBnZXRfdmVyc2lvbigpCiAgICAgICAgICAgUmV0dXJuIHRoZSBjZXJ0aWZpY2F0ZSB2ZXJzaW9uLgpAQCAtMjY5LDggKzI2Nyw3IEBACiAKICAgIGhhc19leHBpcmVkKCkKICAgICAgICAgICBDaGVja3MgdGhlIGNlcnRpZmljYXRlJ3MgdGltZSBzdGFtcCBhZ2FpbnN0IGN1cnJlbnQgdGltZS4KLSAgICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIGNlcnRpZmljYXRlIGhhcyBleHBpcmVkIGFuZCBmYWxzZQotICAgICAgICAgIG90aGVyd2lzZS4KKyAgICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIGNlcnRpZmljYXRlIGhhcyBleHBpcmVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAKICAgIHNldF9pc3N1ZXIoaXNzdWVyKQogICAgICAgICAgIFNldCB0aGUgaXNzdWVyIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byBpc3N1ZXIuCkBAIC0zMDUsNyArMzAyLDcgQEAKIAogICAzLjEuMiBYNTA5TmFtZSBvYmplY3RzCiAKLSAgIFg1MDlOYW1lIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lbWJlcnM6IAorICAgWDUwOU5hbWUgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKIAogICAgY291bnRyeU5hbWUKICAgICAgICAgICBUaGUgY291bnRyeSBvZiB0aGUgZW50aXR5LiBDIG1heSBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvcgpAQCAtMzM3LDcgKzMzNCw3IEBACiAKICAgMy4xLjMgWDUwOVJlcSBvYmplY3RzCiAKLSAgIFg1MDlSZXEgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczogCisgICBYNTA5UmVxIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKICAgIGdldF9wdWJrZXkoKQogICAgICAgICAgIFJldHVybiBhIFBLZXkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcHVibGljIGtleSBvZiB0aGUKQEAgLTM0NiwxNCArMzQzLDE0IEBACiAgICBnZXRfc3ViamVjdCgpCiAgICAgICAgICAgUmV0dXJuIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIGEgWDUwOU5hbWUgb2JqZWN0IHJlcHJlc2VudGluZwogICAgICAgICAgIHRoZSBzdWJqZWN0IG9mIHRoZSBjZXJ0aWZpY2F0ZS4gV2hlbiB0aGUgY29ycmVzcG9uZGluZyBYNTA5IG9yCi0gICAgICAgICAgWDUwOVJlcSBvYmplY3QgaXMgZGVzdHJveWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIGludmFsaWQhIAorICAgICAgICAgIFg1MDlSZXEgb2JqZWN0IGlzIGRlc3Ryb3llZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBpbnZhbGlkIQogCiAgICBzZXRfcHVia2V5KHBrZXkpCiAgICAgICAgICAgU2V0IHRoZSBwdWJsaWMga2V5IG9mIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IHRvIHBrZXkuCiAKICAgIHNpZ24ocGtleSwgZGlnZXN0KQotICAgICAgICAgIFNpZ24gdGhlIGNlcnRpZmljYXRlIHJlcXVlc3QsIHVzaW5nIHRoZSBrZXkgcGtleSBhbmQgdGhlCi0gICAgICAgICAgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIGlkZW50aWZpZWQgYnkgdGhlIHN0cmluZyBkaWdlc3QuCisgICAgICAgICAgU2lnbiB0aGUgY2VydGlmaWNhdGUgcmVxdWVzdCwgdXNpbmcgdGhlIGtleSBwa2V5IGFuZCB0aGUgbWVzc2FnZQorICAgICAgICAgIGRpZ2VzdCBhbGdvcml0aG0gaWRlbnRpZmllZCBieSB0aGUgc3RyaW5nIGRpZ2VzdC4KIAogICAgdmVyaWZ5KHBrZXkpCiAgICAgICAgICAgVmVyaWZ5IGEgY2VydGlmaWNhdGUgcmVxdWVzdCB1c2luZyB0aGUgcHVibGljIGtleSBwa2V5LgpAQCAtMzYxLDcgKzM1OCw3IEBACiAKICAgMy4xLjQgWDUwOVN0b3JlIG9iamVjdHMKIAotICAgVGhlIFg1MDlTdG9yZSBvYmplY3QgaGFzIGN1cnJlbnRseSBqdXN0IG9uZSBtZXRob2Q6IAorICAgVGhlIFg1MDlTdG9yZSBvYmplY3QgaGFzIGN1cnJlbnRseSBqdXN0IG9uZSBtZXRob2Q6CiAKICAgIGFkZF9jZXJ0KGNlcnQpCiAgICAgICAgICAgQWRkIHRoZSBjZXJ0aWZpY2F0ZSBjZXJ0IHRvIHRoZSBjZXJ0aWZpY2F0ZSBzdG9yZS4KQEAgLTM2OSw3ICszNjYsNyBAQAogCiAgIDMuMS41IFBLZXkgb2JqZWN0cwogCi0gICBUaGUgUEtleSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczogCisgICBUaGUgUEtleSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogICAgYml0cygpCiAgICAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyBvZiB0aGUga2V5LgpAQCAtMzg0LDcgKzM4MSw3IEBACiAKICAgMy4xLjYgUEtDUzcgb2JqZWN0cwogCi0gICBQS0NTNyBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOiAKKyAgIFBLQ1M3IG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKICAgIHR5cGVfaXNfc2lnbmVkKCkKICAgICAgICAgICBGSVhNRQpAQCAtNDA0LDcgKzQwMSw3IEBACiAKICAgMy4xLjcgUEtDUzEyIG9iamVjdHMKIAotICAgUEtDUzEyIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6IAorICAgUEtDUzEyIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKICAgIGdldF9jZXJ0aWZpY2F0ZSgpCiAgICAgICAgICAgUmV0dXJuIGNlcnRpZmljYXRlIHBvcnRpb24gb2YgdGhlIFBLQ1MxMiBzdHJ1Y3R1cmUuCkBAIC00MTksNyArNDE2LDcgQEAKIAogICAzLjEuOCBYNTA5RXh0ZW5zaW9uIG9iamVjdHMKIAotICAgWDUwOUV4dGVuc2lvbiBvYmplY3RzIGN1cnJlbnRseSBvbmx5IGhhdmUgb25lIG1ldGhvZDogCisgICBYNTA5RXh0ZW5zaW9uIG9iamVjdHMgY3VycmVudGx5IG9ubHkgaGF2ZSBvbmUgbWV0aG9kOgogCiAgICBnZXRfY3JpdGljYWwoKQogICAgICAgICAgIFJldHVybiB0aGUgY3JpdGljYWwgZmllbGQgb2YgdGhlIGV4dGVuc2lvbiBvYmplY3QuCkBAIC00MjcsNyArNDI0LDcgQEAKIAogICAzLjEuOSBOZXRzY2FwZVNQS0kgb2JqZWN0cwogCi0gICBOZXRzY2FwZVNQS0kgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczogCisgICBOZXRzY2FwZVNQS0kgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogICAgYjY0X2VuY29kZSgpCiAgICAgICAgICAgUmV0dXJuIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QuCkBAIC00NDksNyArNDQ2LDcgQEAKIDMuMiByYW5kIC0tIEFuIGludGVyZmFjZSB0byB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKIAogICAgVGhpcyBtb2R1bGUgaGFuZGxlcyB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFBSTkcpCi0gICBhbmQgZGVjbGFyZXMgdGhlIGZvbGxvd2luZzogCisgICBhbmQgZGVjbGFyZXMgdGhlIGZvbGxvd2luZzoKIAogICAgYWRkKHN0cmluZywgZW50cm9weSkKICAgICAgICAgICBNaXggYnl0ZXMgZnJvbSBzdHJpbmcgaW50byB0aGUgUFJORyBzdGF0ZS4gVGhlIGVudHJvcHkgYXJndW1lbnQKQEAgLTQ4MSwxNCArNDc4LDE0IEBACiAKICAgIHdyaXRlX2ZpbGUocGF0aCkKICAgICAgICAgICBXcml0ZSBhIG51bWJlciBvZiByYW5kb20gYnl0ZXMgKGN1cnJlbnRseSAxMDI0KSB0byB0aGUgZmlsZQotICAgICAgICAgIHBhdGguIFRoaXMgZmlsZSBjYW4gdGhlbiBiZSB1c2VkIHdpdGggbG9hZF9maWxlIHRvIHNlZWQgdGhlCi0gICAgICAgICAgUFJORyBhZ2Fpbi4KKyAgICAgICAgICBwYXRoLiBUaGlzIGZpbGUgY2FuIHRoZW4gYmUgdXNlZCB3aXRoIGxvYWRfZmlsZSB0byBzZWVkIHRoZSBQUk5HCisgICAgICAgICAgYWdhaW4uCiAKIAogMy4zIFNTTCAtLSBBbiBpbnRlcmZhY2UgdG8gdGhlIFNTTC1zcGVjaWZpYyBwYXJ0cyBvZiBPcGVuU1NMCiAKICAgIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGhpbmdzIHNwZWNpZmljIHRvIFNTTC4gVGhlcmUgYXJlIHR3byBvYmplY3RzCi0gICBkZWZpbmVkOiBDb250ZXh0LCBDb25uZWN0aW9uLiAKKyAgIGRlZmluZWQ6IENvbnRleHQsIENvbm5lY3Rpb24uCiAKICAgIFNTTHYyX01FVEhPRAogCkBAIC01NDgsMjUgKzU0NSwyNSBAQAogICAgICAgICAgIFNTTCBjb250ZXh0IGFuZCBhIHNvY2tldCBeNCBvYmplY3QuCiAKICAgIGV4Y2VwdGlvbiBFcnJvcgotICAgICAgICAgIFRoaXMgZXhjZXB0aW9uIGlzIHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciB0aGUgb3RoZXIKLSAgICAgICAgICBTU0wtcmVsYXRlZCBleGNlcHRpb25zLCBidXQgbWF5IGFsc28gYmUgcmFpc2VkIGRpcmVjdGx5LgorICAgICAgICAgIFRoaXMgZXhjZXB0aW9uIGlzIHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciB0aGUgb3RoZXIgU1NMLXJlbGF0ZWQKKyAgICAgICAgICBleGNlcHRpb25zLCBidXQgbWF5IGFsc28gYmUgcmFpc2VkIGRpcmVjdGx5LgogCiAgICAgICAgICAgV2hlbmV2ZXIgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGRpcmVjdGx5LCBpdCBoYXMgYSBsaXN0IG9mCiAgICAgICAgICAgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgT3BlblNTTCBlcnJvciBxdWV1ZSwgd2hlcmUgZWFjaCBpdGVtIGlzCiAgICAgICAgICAgYSB0dXBsZSAobGliLCBmdW5jdGlvbiwgcmVhc29uKS4gSGVyZSBsaWIsIGZ1bmN0aW9uIGFuZCByZWFzb24KICAgICAgICAgICBhcmUgYWxsIHN0cmluZ3MsIGRlc2NyaWJpbmcgd2hlcmUgYW5kIHdoYXQgdGhlIHByb2JsZW0gaXMuIFNlZQotICAgICAgICAgIGVycigzKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gCisgICAgICAgICAgZXJyKDMpIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAgICBleGNlcHRpb24gWmVyb1JldHVybkVycm9yCiAgICAgICAgICAgVGhpcyBleGNlcHRpb24gbWF0Y2hlcyB0aGUgZXJyb3IgcmV0dXJuIGNvZGUKLSAgICAgICAgICBTU0xfRVJST1JfWkVST19SRVRVUk4sIGFuZCBpcyByYWlzZWQgd2hlbiB0aGUgU1NMIENvbm5lY3Rpb24KLSAgICAgICAgICBoYXMgYmVlbiBjbG9zZWQuIEluIFNTTCAzLjAgYW5kIFRMUyAxLjAsIHRoaXMgb25seSBvY2N1cnMgaWYgYQorICAgICAgICAgIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiwgYW5kIGlzIHJhaXNlZCB3aGVuIHRoZSBTU0wgQ29ubmVjdGlvbiBoYXMKKyAgICAgICAgICBiZWVuIGNsb3NlZC4gSW4gU1NMIDMuMCBhbmQgVExTIDEuMCwgdGhpcyBvbmx5IG9jY3VycyBpZiBhCiAgICAgICAgICAgY2xvc3VyZSBhbGVydCBoYXMgb2NjdXJyZWQgaW4gdGhlIHByb3RvY29sLCBpLmUuIHRoZSBjb25uZWN0aW9uCiAgICAgICAgICAgaGFzIGJlZW4gY2xvc2VkIGNsZWFubHkuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5CiAgICAgICAgICAgbWVhbiB0aGF0IHRoZSB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gYSBzb2NrZXQpIGhhcyBiZWVuIGNsb3NlZC4KIAogICAgICAgICAgIEl0IG1heSBzZWVtIGEgbGl0dGxlIHN0cmFuZ2UgdGhhdCB0aGlzIGlzIGFuIGV4Y2VwdGlvbiwgYnV0IGl0Ci0gICAgICAgICAgZG9lcyBtYXRjaCBhbiBTU0xfRVJST1IgY29kZSwgYW5kIGlzIHZlcnkgY29udmVuaWVudC4gCisgICAgICAgICAgZG9lcyBtYXRjaCBhbiBTU0xfRVJST1IgY29kZSwgYW5kIGlzIHZlcnkgY29udmVuaWVudC4KIAogICAgZXhjZXB0aW9uIFdhbnRSZWFkRXJyb3IKICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGU7IHRoZSBzYW1lIEkvTyBtZXRob2Qgc2hvdWxkIGJlCkBAIC01OTIsNyArNTg5LDcgQEAKIAogICAzLjMuMSBDb250ZXh0IG9iamVjdHMKIAotICAgQ29udGV4dCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOiAKKyAgIENvbnRleHQgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogICAgY2hlY2tfcHJpdmF0ZWtleSgpCiAgICAgICAgICAgQ2hlY2sgaWYgdGhlIHByaXZhdGUga2V5IChsb2FkZWQgd2l0aCB1c2VfcHJpdmF0ZWtleVtfZmlsZV0pCkBAIC02MjAsOCArNjE3LDggQEAKICAgICAgICAgICBzZXRfdmVyaWZ5X21vZGUuCiAKICAgIGxvYWRfY2xpZW50X2NhKHBlbWZpbGUpCi0gICAgICAgICAgUmVhZCBhIGZpbGUgd2l0aCBQRU0tZm9ybWF0dGVkIGNlcnRpZmljYXRlcyB0aGF0IHdpbGwgYmUgc2VudAotICAgICAgICAgIHRvIHRoZSBjbGllbnQgd2hlbiByZXF1ZXN0aW5nIGEgY2xpZW50IGNlcnRpZmljYXRlLgorICAgICAgICAgIFJlYWQgYSBmaWxlIHdpdGggUEVNLWZvcm1hdHRlZCBjZXJ0aWZpY2F0ZXMgdGhhdCB3aWxsIGJlIHNlbnQgdG8KKyAgICAgICAgICB0aGUgY2xpZW50IHdoZW4gcmVxdWVzdGluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZS4KIAogICAgbG9hZF92ZXJpZnlfbG9jYXRpb25zKHBlbWZpbGUpCiAgICAgICAgICAgU3BlY2lmeSB3aGVyZSBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3NlcyBhcmUKQEAgLTY0MSw1NSArNjM4LDUxIEBACiAKICAgIHNldF9pbmZvX2NhbGxiYWNrKGNhbGxiYWNrKQogICAgICAgICAgIFNldCB0aGUgaW5mb3JtYXRpb24gY2FsbGJhY2sgdG8gY2FsbGJhY2suIFRoaXMgZnVuY3Rpb24gd2lsbCBiZQotICAgICAgICAgIGNhbGxlZCBmcm9tIHRpbWUgdG8gdGltZSBkdXJpbmcgU1NMIGhhbmRzaGFrZXMuCi0KLSAgICAgICAgICBjYWxsYmFjayBzaG91bGQgdGFrZSB0aHJlZSBhcmd1bWVudHM6IGEgQ29ubmVjdGlvbiBvYmplY3QgYW5kCi0gICAgICAgICAgdHdvIGludGVnZXJzLiBUaGUgZmlyc3QgaW50ZWdlciBzcGVjaWZpZXMgd2hlcmUgaW4gdGhlIFNTTAotICAgICAgICAgIGhhbmRzaGFrZSB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCwgYW5kIHRoZSBvdGhlciB0aGUgcmV0dXJuCi0gICAgICAgICAgY29kZSBmcm9tIGEgKHBvc3NpYmx5IGZhaWxlZCkgaW50ZXJuYWwgZnVuY3Rpb24gY2FsbC4gCisgICAgICAgICAgY2FsbGVkIGZyb20gdGltZSB0byB0aW1lIGR1cmluZyBTU0wgaGFuZHNoYWtlcy4gY2FsbGJhY2sgc2hvdWxkCisgICAgICAgICAgdGFrZSB0aHJlZSBhcmd1bWVudHM6IGEgQ29ubmVjdGlvbiBvYmplY3QgYW5kIHR3byBpbnRlZ2Vycy4gVGhlCisgICAgICAgICAgZmlyc3QgaW50ZWdlciBzcGVjaWZpZXMgd2hlcmUgaW4gdGhlIFNTTCBoYW5kc2hha2UgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgd2FzIGNhbGxlZCwgYW5kIHRoZSBvdGhlciB0aGUgcmV0dXJuIGNvZGUgZnJvbSBhIChwb3NzaWJseQorICAgICAgICAgIGZhaWxlZCkgaW50ZXJuYWwgZnVuY3Rpb24gY2FsbC4KIAogICAgc2V0X29wdGlvbnMob3B0aW9ucykKICAgICAgICAgICBBZGQgU1NMIG9wdGlvbnMuIE9wdGlvbnMgeW91IGhhdmUgc2V0IGJlZm9yZSBhcmUgbm90IGNsZWFyZWQhCi0KLSAgICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSBPUF8qIGNvbnN0YW50cy4gCisgICAgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUgT1BfKiBjb25zdGFudHMuCiAKICAgIHNldF9wYXNzd2RfY2IoY2FsbGJhY2tbLCB1c2VyZGF0YV0pCiAgICAgICAgICAgU2V0IHRoZSBwYXNzcGhyYXNlIGNhbGxiYWNrIHRvIGNhbGxiYWNrLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUKLSAgICAgICAgICBjYWxsZWQgd2hlbiBhIHByaXZhdGUga2V5IHdpdGggYSBwYXNzcGhyYXNlIGlzIGxvYWRlZC4KLQotICAgICAgICAgIGNhbGxiYWNrIHNob3VsZCB0YWtlIGEgYm9vbGVhbiBhcmd1bWVudCByZXBlYXQgYW5kIGFuIGFyYml0cmFyeQotICAgICAgICAgIGFyZ3VtZW50IGRhdGEgYW5kIHJldHVybiB0aGUgcGFzc3BocmFzZSBlbnRlcmVkIGJ5IHRoZSB1c2VyLiBJZgotICAgICAgICAgIHJlcGVhdCBpcyB0cnVlIHRoZW4gY2FsbGJhY2sgc2hvdWxkIGFzayBmb3IgdGhlIHBhc3NwaHJhc2UKLSAgICAgICAgICB0d2ljZSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIHR3byBlbnRyaWVzIGFyZSBlcXVhbC4gVGhlIGRhdGEKLSAgICAgICAgICBhcmd1bWVudCBpcyB0aGUgdXNlcmRhdGEgdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBzZXRfcGFzc3dkX2NiCi0gICAgICAgICAgbWV0aG9kLiBJZiBhbiBlcnJvciBvY2N1cnMsIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYSBmYWxzZQotICAgICAgICAgIHZhbHVlIChlLmcuIGFuIGVtcHR5IHN0cmluZykuIAorICAgICAgICAgIGNhbGxlZCB3aGVuIGEgcHJpdmF0ZSBrZXkgd2l0aCBhIHBhc3NwaHJhc2UgaXMgbG9hZGVkLiBjYWxsYmFjaworICAgICAgICAgIHNob3VsZCB0YWtlIGEgYm9vbGVhbiBhcmd1bWVudCByZXBlYXQgYW5kIGFuIGFyYml0cmFyeSBhcmd1bWVudAorICAgICAgICAgIGRhdGEgYW5kIHJldHVybiB0aGUgcGFzc3BocmFzZSBlbnRlcmVkIGJ5IHRoZSB1c2VyLiBJZiByZXBlYXQgaXMKKyAgICAgICAgICB0cnVlIHRoZW4gY2FsbGJhY2sgc2hvdWxkIGFzayBmb3IgdGhlIHBhc3NwaHJhc2UgdHdpY2UgYW5kIG1ha2UKKyAgICAgICAgICBzdXJlIHRoYXQgdGhlIHR3byBlbnRyaWVzIGFyZSBlcXVhbC4gVGhlIGRhdGEgYXJndW1lbnQgaXMgdGhlCisgICAgICAgICAgdXNlcmRhdGEgdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBzZXRfcGFzc3dkX2NiIG1ldGhvZC4gSWYgYW4KKyAgICAgICAgICBlcnJvciBvY2N1cnMsIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYSBmYWxzZSB2YWx1ZSAoZS5nLiBhbgorICAgICAgICAgIGVtcHR5IHN0cmluZykuCiAKICAgIHNldF9zZXNzaW9uX2lkKG5hbWUpCiAgICAgICAgICAgU2V0IHRoZSBjb250ZXh0IG5hbWUgd2l0aGluIHdoaWNoIGEgc2Vzc2lvbiBjYW4gYmUgcmV1c2VkIGZvcgogICAgICAgICAgIHRoaXMgQ29udGV4dCBvYmplY3QuIFRoaXMgaXMgbmVlZGVkIHdoZW4gZG9pbmcgc2Vzc2lvbgotICAgICAgICAgIHJlc3VtcHRpb24sIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IGZvciBhIHN0b3JlZCBzZXNzaW9uIHRvCi0gICAgICAgICAga25vdyB3aGljaCBDb250ZXh0IG9iamVjdCBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIG5hbWUgbWF5IGJlCi0gICAgICAgICAgYW55IGJpbmFyeSBkYXRhLgorICAgICAgICAgIHJlc3VtcHRpb24sIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IGZvciBhIHN0b3JlZCBzZXNzaW9uIHRvIGtub3cKKyAgICAgICAgICB3aGljaCBDb250ZXh0IG9iamVjdCBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIG5hbWUgbWF5IGJlIGFueQorICAgICAgICAgIGJpbmFyeSBkYXRhLgogCiAgICBzZXRfdGltZW91dCh0aW1lb3V0KQogICAgICAgICAgIFNldCB0aGUgdGltZW91dCBmb3IgbmV3bHkgY3JlYXRlZCBzZXNzaW9ucyBmb3IgdGhpcyBDb250ZXh0Ci0gICAgICAgICAgb2JqZWN0IHRvIHRpbWVvdXQuIHRpbWVvdXQgbXVzdCBiZSBnaXZlbiBpbiAod2hvbGUpIHNlY29uZHMuCi0gICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAwIHNlY29uZHMuIFNlZSB0aGUgT3BlblNTTCBtYW51YWwgZm9yCi0gICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbiAoZS5nLiBTU0xfQ1RYX3NldF90aW1lb3V0KDMpKS4KKyAgICAgICAgICBvYmplY3QgdG8gdGltZW91dC4gdGltZW91dCBtdXN0IGJlIGdpdmVuIGluICh3aG9sZSkgc2Vjb25kcy4gVGhlCisgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBpcyAzMDAgc2Vjb25kcy4gU2VlIHRoZSBPcGVuU1NMIG1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgIGluZm9ybWF0aW9uIChlLmcuIFNTTF9DVFhfc2V0X3RpbWVvdXQoMykpLgogCiAgICBzZXRfdmVyaWZ5KG1vZGUsIGNhbGxiYWNrKQogICAgICAgICAgIFNldCB0aGUgdmVyaWZpY2F0aW9uIGZsYWdzIGZvciB0aGlzIENvbnRleHQgb2JqZWN0IHRvIG1vZGUgYW5kCi0gICAgICAgICAgc3BlY2lmeSB0aGF0IGNhbGxiYWNrIHNob3VsZCBiZSB1c2VkIGZvciB2ZXJpZmljYXRpb24KLSAgICAgICAgICBjYWxsYmFja3MuIG1vZGUgc2hvdWxkIGJlIG9uZSBvZiBWRVJJRllfTk9ORSBhbmQgVkVSSUZZX1BFRVIuCi0gICAgICAgICAgSWYgVkVSSUZZX1BFRVIgaXMgdXNlZCwgbW9kZSBjYW4gYmUgT1I6ZWQgd2l0aAorICAgICAgICAgIHNwZWNpZnkgdGhhdCBjYWxsYmFjayBzaG91bGQgYmUgdXNlZCBmb3IgdmVyaWZpY2F0aW9uIGNhbGxiYWNrcy4KKyAgICAgICAgICBtb2RlIHNob3VsZCBiZSBvbmUgb2YgVkVSSUZZX05PTkUgYW5kIFZFUklGWV9QRUVSLiBJZgorICAgICAgICAgIFZFUklGWV9QRUVSIGlzIHVzZWQsIG1vZGUgY2FuIGJlIE9SOmVkIHdpdGgKICAgICAgICAgICBWRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQgYW5kIFZFUklGWV9DTElFTlRfT05DRSB0byBmdXJ0aGVyCi0gICAgICAgICAgY29udHJvbCB0aGUgYmVoYXZpb3VyLgotCi0gICAgICAgICAgY2FsbGJhY2sgc2hvdWxkIHRha2UgZml2ZSBhcmd1bWVudHM6IEEgQ29ubmVjdGlvbiBvYmplY3QsIGFuCi0gICAgICAgICAgWDUwOSBvYmplY3QsIGFuZCB0aHJlZSBpbnRlZ2VyIHZhcmlhYmxlcywgd2hpY2ggYXJlIGluIHR1cm4KLSAgICAgICAgICBwb3RlbnRpYWwgZXJyb3IgbnVtYmVyLCBlcnJvciBkZXB0aCBhbmQgcmV0dXJuIGNvZGUuIGNhbGxiYWNrCi0gICAgICAgICAgc2hvdWxkIHJldHVybiB0cnVlIGlmIHZlcmlmaWNhdGlvbiBwYXNzZXMgYW5kIGZhbHNlIG90aGVyd2lzZS4gCisgICAgICAgICAgY29udHJvbCB0aGUgYmVoYXZpb3VyLiBjYWxsYmFjayBzaG91bGQgdGFrZSBmaXZlIGFyZ3VtZW50czogQQorICAgICAgICAgIENvbm5lY3Rpb24gb2JqZWN0LCBhbiBYNTA5IG9iamVjdCwgYW5kIHRocmVlIGludGVnZXIgdmFyaWFibGVzLAorICAgICAgICAgIHdoaWNoIGFyZSBpbiB0dXJuIHBvdGVudGlhbCBlcnJvciBudW1iZXIsIGVycm9yIGRlcHRoIGFuZCByZXR1cm4KKyAgICAgICAgICBjb2RlLiBjYWxsYmFjayBzaG91bGQgcmV0dXJuIHRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3NlcyBhbmQKKyAgICAgICAgICBmYWxzZSBvdGhlcndpc2UuCiAKICAgIHNldF92ZXJpZnlfZGVwdGgoZGVwdGgpCiAgICAgICAgICAgU2V0IHRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgY2VydGlmaWNhdGUgY2hhaW4gdmVyaWZpY2F0aW9uCkBAIC02OTgsNiArNjkxLDEwIEBACiAgICB1c2VfY2VydGlmaWNhdGUoY2VydCkKICAgICAgICAgICBVc2UgdGhlIGNlcnRpZmljYXRlIGNlcnQgd2hpY2ggaGFzIHRvIGJlIGEgWDUwOSBvYmplY3QuCiAKKyAgIGFkZF9leHRyYV9jaGFpbl9jZXJ0KGNlcnQpCisgICAgICAgICAgQWRkcyB0aGUgY2VydGlmaWNhdGUgY2VydCwgd2hpY2ggaGFzIHRvIGJlIGEgWDUwOSBvYmplY3QsIHRvIHRoZQorICAgICAgICAgIGNlcnRpZmljYXRlIGNoYWluIHByZXNlbnRlZCB0b2dldGhlciB3aXRoIHRoZSBjZXJ0aWZpY2F0ZS4KKwogICAgdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoZmlsZSkKICAgICAgICAgICBMb2FkIGEgY2VydGlmaWNhdGUgY2hhaW4gZnJvbSBmaWxlIHdoaWNoIG11c3QgYmUgUEVNIGVuY29kZWQuCiAKQEAgLTcxNyw3ICs3MTQsNyBAQAogCiAgIDMuMy4yIENvbm5lY3Rpb24gb2JqZWN0cwogCi0gICBDb25uZWN0aW9uIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6IAorICAgQ29ubmVjdGlvbiBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAgICBhY2NlcHQoKQogICAgICAgICAgIENhbGwgdGhlIGFjY2VwdCBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0IGFuZCBzZXQgdXAgU1NMCkBAIC03NDMsMTMgKzc0MCwxMiBAQAogICAgICAgICAgIENhbGwgdGhlIGNvbm5lY3RfZXggbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBhbmQgc2V0IHVwCiAgICAgICAgICAgU1NMIG9uIHRoZSBzb2NrZXQsIHVzaW5nIHRoZSBDb250ZXh0IG9iamVjdCBzdXBwbGllZCB0byB0aGlzCiAgICAgICAgICAgQ29ubmVjdGlvbiBvYmplY3QgYXQgY3JlYXRpb24uIE5vdGUgdGhhdCBpZiB0aGUgY29ubmVjdF9leAotICAgICAgICAgIG1ldGhvZCBvZiB0aGUgc29ja2V0IGRvZXNuJ3QgcmV0dXJuIDAsIFNTTCB3b24ndCBiZQotICAgICAgICAgIGluaXRpYWxpemVkLgorICAgICAgICAgIG1ldGhvZCBvZiB0aGUgc29ja2V0IGRvZXNuJ3QgcmV0dXJuIDAsIFNTTCB3b24ndCBiZSBpbml0aWFsaXplZC4KIAogICAgZG9faGFuZHNoYWtlKCkKICAgICAgICAgICBQZXJmb3JtIGFuIFNTTCBoYW5kc2hha2UgKHVzdWFsbHkgY2FsbGVkIGFmdGVyIHJlbmVnb3RpYXRlIG9yCi0gICAgICAgICAgb25lIG9mIHNldF9hY2NlcHRfc3RhdGUgb3Igc2V0X2FjY2VwdF9zdGF0ZSkuIFRoaXMgY2FuIHJhaXNlCi0gICAgICAgICAgdGhlIHNhbWUgZXhjZXB0aW9ucyBhcyBzZW5kIGFuZCByZWN2LgorICAgICAgICAgIG9uZSBvZiBzZXRfYWNjZXB0X3N0YXRlIG9yIHNldF9hY2NlcHRfc3RhdGUpLiBUaGlzIGNhbiByYWlzZSB0aGUKKyAgICAgICAgICBzYW1lIGV4Y2VwdGlvbnMgYXMgc2VuZCBhbmQgcmVjdi4KIAogICAgZmlsZW5vKCkKICAgICAgICAgICBSZXRyaWV2ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBmb3IgdGhlIHVuZGVybHlpbmcgc29ja2V0LgpAQCAtNzgzLDEyICs3NzksMTIgQEAKIAogICAgcGVuZGluZygpCiAgICAgICAgICAgUmV0cmlldmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVhZCBmcm9tIHRoZQotICAgICAgICAgIFNTTCBidWZmZXIuCisgICAgICAgICAgU1NMIGJ1ZmZlciAobm90IHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBidWZmZXIpLgogCiAgICByZWN2KGJ1ZnNpemUpCiAgICAgICAgICAgUmVjZWl2ZSBkYXRhIGZyb20gdGhlIENvbm5lY3Rpb24uIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJpbmcKLSAgICAgICAgICByZXByZXNlbnRpbmcgdGhlIGRhdGEgcmVjZWl2ZWQuIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvCi0gICAgICAgICAgYmUgcmVjZWl2ZWQgYXQgb25jZSwgaXMgc3BlY2lmaWVkIGJ5IGJ1ZnNpemUuCisgICAgICAgICAgcmVwcmVzZW50aW5nIHRoZSBkYXRhIHJlY2VpdmVkLiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBiZQorICAgICAgICAgIHJlY2VpdmVkIGF0IG9uY2UsIGlzIHNwZWNpZmllZCBieSBidWZzaXplLgogCiAgICByZW5lZ290aWF0ZSgpCiAgICAgICAgICAgUmVuZWdvdGlhdGUgdGhlIFNTTCBzZXNzaW9uLiBDYWxsIHRoaXMgaWYgeW91IHdpc2ggdG8gY2hhbmdlCkBAIC04MDMsMTYgKzc5OSwxNiBAQAogICAgICAgICAgIGltcG9zc2libGUgdG8gdGVsbCBob3cgbXVjaCBkYXRhIGhhcyBiZWVuIHNlbnQuCiAKICAgIHNldF9hY2NlcHRfc3RhdGUoKQotICAgICAgICAgIFNldCB0aGUgY29ubmVjdGlvbiB0byB3b3JrIGluIHNlcnZlciBtb2RlLiBUaGUgaGFuZHNoYWtlIHdpbGwKLSAgICAgICAgICBiZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgcmVhZC93cml0ZS4KKyAgICAgICAgICBTZXQgdGhlIGNvbm5lY3Rpb24gdG8gd29yayBpbiBzZXJ2ZXIgbW9kZS4gVGhlIGhhbmRzaGFrZSB3aWxsIGJlCisgICAgICAgICAgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHJlYWQvd3JpdGUuCiAKICAgIHNldF9hcHBfZGF0YShkYXRhKQogICAgICAgICAgIEFzc29jaWF0ZSBkYXRhIHdpdGggdGhpcyBDb25uZWN0aW9uIG9iamVjdC4gZGF0YSBjYW4gYmUKICAgICAgICAgICByZXRyaWV2ZWQgbGF0ZXIgdXNpbmcgdGhlIGdldF9hcHBfZGF0YSBtZXRob2QuCiAKICAgIHNldF9jb25uZWN0X3N0YXRlKCkKLSAgICAgICAgICBTZXQgdGhlIGNvbm5lY3Rpb24gdG8gd29yayBpbiBjbGllbnQgbW9kZS4gVGhlIGhhbmRzaGFrZSB3aWxsCi0gICAgICAgICAgYmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHJlYWQvd3JpdGUuCisgICAgICAgICAgU2V0IHRoZSBjb25uZWN0aW9uIHRvIHdvcmsgaW4gY2xpZW50IG1vZGUuIFRoZSBoYW5kc2hha2Ugd2lsbCBiZQorICAgICAgICAgIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSByZWFkL3dyaXRlLgogCiAgICBzZXRibG9ja2luZyhmbGFnKQogICAgICAgICAgIENhbGwgdGhlIHNldGJsb2NraW5nIG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCkBAIC04MjEsMTcgKzgxNywyNCBAQAogICAgICAgICAgIENhbGwgdGhlIHNldHNvY2tvcHQgbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KIAogICAgc2h1dGRvd24oKQotICAgICAgICAgIFNlbmQgdGhlIHNodXRkb3duIG1lc3NhZ2UgdG8gdGhlIENvbm5lY3Rpb24uIFJldHVybnMgdHJ1ZSBpZgotICAgICAgICAgIHRoZSBzaHV0ZG93biBtZXNzYWdlIGV4Y2hhbmdlIGlzIGNvbXBsZXRlZCBhbmQgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICAgICAgKGluIHdoaWNoIGNhc2UgeW91IGNhbGwgcmVjdigpIG9yIHNlbmQoKSB3aGVuIHRoZSBjb25uZWN0aW9uCi0gICAgICAgICAgYmVjb21lcyByZWFkYWJsZS93cml0ZWFibGUuCisgICAgICAgICAgU2VuZCB0aGUgc2h1dGRvd24gbWVzc2FnZSB0byB0aGUgQ29ubmVjdGlvbi4gUmV0dXJucyB0cnVlIGlmIHRoZQorICAgICAgICAgIHNodXRkb3duIG1lc3NhZ2UgZXhjaGFuZ2UgaXMgY29tcGxldGVkIGFuZCBmYWxzZSBvdGhlcndpc2UgKGluCisgICAgICAgICAgd2hpY2ggY2FzZSB5b3UgY2FsbCByZWN2KCkgb3Igc2VuZCgpIHdoZW4gdGhlIGNvbm5lY3Rpb24gYmVjb21lcworICAgICAgICAgIHJlYWRhYmxlL3dyaXRlYWJsZS4KKworICAgZ2V0X3NodXRkb3duKCkKKyAgICAgICAgICBHZXQgdGhlIHNodXRkb3duIHN0YXRlIG9mIHRoZSBDb25uZWN0aW9uLiBSZXR1cm5zIGEgYml0dmVjdG9yIG9mCisgICAgICAgICAgZWl0aGVyIG9yIGJvdGggb2YgU0VOVF9TSFVURE9XTiBhbmQgUkVDRUlWRURfU0hVVERPV04uCisKKyAgIHNldF9zaHV0ZG93bihzdGF0ZSkKKyAgICAgICAgICBTZXQgdGhlIHNodXRkb3duIHN0YXRlIG9mIHRoZSBDb25uZWN0aW9uLiBzdGF0ZSBpcyBhIGJpdHZlY3RvcgorICAgICAgICAgIG9mIGVpdGhlciBvciBib3RoIG9mIFNFTlRfU0hVVERPV04gYW5kIFJFQ0VJVkVEX1NIVVRET1dOLgogCiAgICBzb2NrX3NodXRkb3duKGhvdykKICAgICAgICAgICBDYWxsIHRoZSBzaHV0ZG93biBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgogCiAgICBzdGF0ZV9zdHJpbmcoKQotICAgICAgICAgIFJldHJpZXZlIGEgdmVyYm9zZSBzdHJpbmcgZGV0YWlsaW5nIHRoZSBzdGF0ZSBvZiB0aGUKLSAgICAgICAgICBDb25uZWN0aW9uLgorICAgICAgICAgIFJldHJpZXZlIGEgdmVyYm9zZSBzdHJpbmcgZGV0YWlsaW5nIHRoZSBzdGF0ZSBvZiB0aGUgQ29ubmVjdGlvbi4KIAogICAgd2FudF9yZWFkKCkKICAgICAgICAgICBDaGVja3MgaWYgbW9yZSBkYXRhIGhhcyB0byBiZSByZWFkIGZyb20gdGhlIHRyYW5zcG9ydCBsYXllciB0bwpAQCAtODQ1LDcgKzg0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCBJbnRlcm5hbHMKIAogICAgV2UgcmFuIGludG8gdGhyZWUgbWFpbiBwcm9ibGVtcyBkZXZlbG9waW5nIHRoaXM6IEV4Y2VwdGlvbnMsIGNhbGxiYWNrcwotICAgYW5kIGFjY2Vzc2luZyBzb2NrZXQgbWV0aG9kcy4gVGhpcyBpcyB3aGF0IHRoaXMgY2hhcHRlciBpcyBhYm91dC4gCisgICBhbmQgYWNjZXNzaW5nIHNvY2tldCBtZXRob2RzLiBUaGlzIGlzIHdoYXQgdGhpcyBjaGFwdGVyIGlzIGFib3V0LgogCiAKIDQuMSBFeGNlcHRpb25zCkBAIC04NTQsMzMgKzg1NywzMyBAQAogICAgSS9PIGZ1bmN0aW9ucyBvZiBPcGVuU1NMLCBzbyBpdCBmZWx0IG5hdHVyYWwgdG8gbWltaWMgT3BlblNTTCdzIGVycm9yCiAgICBjb2RlIHN5c3RlbSwgdHJhbnNsYXRpbmcgdGhlbSBpbnRvIFB5dGhvbiBleGNlcHRpb25zLiBUaGlzIG5hdHVyYWxseQogICAgZ2l2ZXMgdXMgdGhlIGV4Y2VwdGlvbnMgU1NMLlplcm9SZXR1cm5FcnJvciwgU1NMLldhbnRSZWFkRXJyb3IsCi0gICBTU0wuV2FudFdyaXRlRXJyb3IsIFNTTC5XYW50WDUwOUxvb2t1cEVycm9yIGFuZCBTU0wuU3lzQ2FsbEVycm9yLiAKKyAgIFNTTC5XYW50V3JpdGVFcnJvciwgU1NMLldhbnRYNTA5TG9va3VwRXJyb3IgYW5kIFNTTC5TeXNDYWxsRXJyb3IuCiAKLSAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMsIHNlZSBzZWN0aW9uIDMuMy4gCisgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzLCBzZWUgc2VjdGlvbiAzLjMuCiAKIAogNC4yIENhbGxiYWNrcwogCi0gICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcHJvYmxlbXMgd2l0aCBjYWxsYmFja3MuIEZpcnN0IG9mIGFsbCwgT3BlblNTTAotICAgaXMgd3JpdHRlbiBhcyBhIEMgbGlicmFyeSwgaXQncyBub3QgbWVhbnQgdG8gaGF2ZSBQeXRob24gY2FsbGJhY2tzLCBzbwotICAgYSB3YXkgYXJvdW5kIHRoYXQgaXMgbmVlZGVkLiBBbm90aGVyIHByb2JsZW0gaXMgdGhyZWFkIHN1cHBvcnQuIEEgbG90Ci0gICBvZiB0aGUgT3BlblNTTCBJL08gZnVuY3Rpb25zIGNhbiBibG9jayBpZiB0aGUgc29ja2V0IGlzIGluIGJsb2NraW5nCi0gICBtb2RlLCBhbmQgdGhlbiB5b3Ugd2FudCBvdGhlciBQeXRob24gdGhyZWFkcyB0byBiZSBhYmxlIHRvIGRvIG90aGVyCi0gICB0aGluZ3MuIFRoZSByZWFsIHRyb3VibGUgaXMgaWYgeW91J3ZlIHJlbGVhc2VkIHRoZSB0aHJlYWQgbG9jayB0byBkbyBhCisgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcHJvYmxlbXMgd2l0aCBjYWxsYmFja3MuIEZpcnN0IG9mIGFsbCwgT3BlblNTTCBpcworICAgd3JpdHRlbiBhcyBhIEMgbGlicmFyeSwgaXQncyBub3QgbWVhbnQgdG8gaGF2ZSBQeXRob24gY2FsbGJhY2tzLCBzbyBhCisgICB3YXkgYXJvdW5kIHRoYXQgaXMgbmVlZGVkLiBBbm90aGVyIHByb2JsZW0gaXMgdGhyZWFkIHN1cHBvcnQuIEEgbG90IG9mCisgICB0aGUgT3BlblNTTCBJL08gZnVuY3Rpb25zIGNhbiBibG9jayBpZiB0aGUgc29ja2V0IGlzIGluIGJsb2NraW5nIG1vZGUsCisgICBhbmQgdGhlbiB5b3Ugd2FudCBvdGhlciBQeXRob24gdGhyZWFkcyB0byBiZSBhYmxlIHRvIGRvIG90aGVyIHRoaW5ncy4KKyAgIFRoZSByZWFsIHRyb3VibGUgaXMgaWYgeW91J3ZlIHJlbGVhc2VkIHRoZSB0aHJlYWQgbG9jayB0byBkbyBhCiAgICBwb3RlbnRpYWxseSBibG9ja2luZyBvcGVyYXRpb24sIGFuZCB0aGUgb3BlcmF0aW9uIGNhbGxzIGEgY2FsbGJhY2suCi0gICBUaGVuIHdlIG11c3QgdGFrZSB0aGUgdGhyZWFkIGxvY2sgYmFja141LiAKKyAgIFRoZW4gd2UgbXVzdCB0YWtlIHRoZSB0aHJlYWQgbG9jayBiYWNrXjUuCiAKICAgIFRoZXJlIGFyZSB0d28gc29sdXRpb25zIHRvIHRoZSBmaXJzdCBwcm9ibGVtLCBib3RoIG9mIHdoaWNoIGFyZQogICAgbmVjZXNzYXJ5LiBUaGUgZmlyc3Qgc29sdXRpb24gdG8gdXNlIGlzIGlmIHRoZSBDIGNhbGxiYWNrIGFsbG93cwogICAgJyd1c2VyZGF0YScnIHRvIGJlIHBhc3NlZCB0byBpdCAoYW4gYXJiaXRyYXJ5IHBvaW50ZXIgbm9ybWFsbHkpLiBUaGlzCiAgICBpcyBncmVhdCEgV2UgY2FuIHNldCBvdXIgUHl0aG9uIGZ1bmN0aW9uIG9iamVjdCBhcyB0aGUgcmVhbCB1c2VyZGF0YQogICAgYW5kIGVtdWxhdGUgdXNlcmRhdGEgZm9yIHRoZSBQeXRob24gZnVuY3Rpb24gaW4gYW5vdGhlciB3YXkuIFRoZSBvdGhlcgotICAgc29sdXRpb24gY2FuIGJlIHVzZWQgaWYgYW4gb2JqZWN0IHdpdGggYW4gJydhcHBfZGF0YScnIHN5c3RlbSBhbHdheXMKLSAgIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIEZvciBleGFtcGxlLCB0aGUgU1NMIG9iamVjdCBpbiBPcGVuU1NMIGhhcworICAgc29sdXRpb24gY2FuIGJlIHVzZWQgaWYgYW4gb2JqZWN0IHdpdGggYW4gJydhcHBfZGF0YScnIHN5c3RlbSBhbHdheXMgaXMKKyAgIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIEZvciBleGFtcGxlLCB0aGUgU1NMIG9iamVjdCBpbiBPcGVuU1NMIGhhcwogICAgYXBwX2RhdGEgZnVuY3Rpb25zIGFuZCBpbiBlLmcuIHRoZSB2ZXJpZmljYXRpb24gY2FsbGJhY2tzLCB5b3UgY2FuCiAgICByZXRyaWV2ZSB0aGUgcmVsYXRlZCBTU0wgb2JqZWN0LiBXaGF0IHdlIGRvIGlzIHRvIHNldCBvdXIgd3JhcHBlcgogICAgQ29ubmVjdGlvbiBvYmplY3QgYXMgYXBwX2RhdGEgZm9yIHRoZSBTU0wgb2JqZWN0LCBhbmQgd2UgY2FuIGVhc2lseQotICAgZmluZCB0aGUgUHl0aG9uIGNhbGxiYWNrLiAKKyAgIGZpbmQgdGhlIFB5dGhvbiBjYWxsYmFjay4KIAogICAgVGhlIG90aGVyIHByb2JsZW0gaXMgYWxzbyBwYXJ0aWFsbHkgc29sdmVkIGJ5IGFwcF9kYXRhLiBTaW5jZSB3ZSdyZQogICAgYXNzb2NpYXRpbmcgb3VyIHdyYXBwZXIgb2JqZWN0cyB3aXRoIHRoZSAnJ3JlYWwnJyBvYmplY3RzLCB3ZSBjYW4KQEAgLTg5MCw3ICs4OTMsNyBAQAogICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMgdGhhdCBhbGxvd3Mgc3BlY2lmeWluZyBvZiB0aGUgUHlUaHJlYWRTdGF0ZQogICAgdmFyaWFibGUgdG8gdXNlLiBOb3cgd2UgY2FuIHNpbXBseSAnJ2JlZ2luIGFsbG93IHRocmVhZHMnJyBiZWZvcmUgYQogICAgcG90ZW50aWFsbHkgYmxvY2tpbmcgb3BlcmF0aW9uLCBhbmQgJydlbmQgYWxsb3cgdGhyZWFkcycnIGJlZm9yZQotICAgY2FsbGluZyBhIGNhbGxiYWNrLiAKKyAgIGNhbGxpbmcgYSBjYWxsYmFjay4KIAogCiA0LjMgQWNlc3NpbmcgU29ja2V0IE1ldGhvZHMKQEAgLTg5OCwzNCArOTAxLDMzIEBACiAgICBXZSBxdWlja2x5IHNhdyB0aGUgYmVuZWZpdCBvZiB3cmFwcGluZyBzb2NrZXQgbWV0aG9kcyBpbiB0aGUKICAgIFNTTC5Db25uZWN0aW9uIGNsYXNzLCBmb3IgYW4gZWFzeSB0cmFuc2l0aW9uIGludG8gdXNpbmcgU1NMLiBUaGUKICAgIHByb2JsZW0gaGVyZSBpcyB0aGF0IHRoZSBzb2NrZXQgbW9kdWxlIGxhY2tzIGEgQyBBUEksIGFuZCBhbGwgdGhlCi0gICBtZXRob2RzIGFyZSBkZWNsYXJlZCBzdGF0aWMuIE9uZSBhcHByb2FjaCB3b3VsZCBiZSB0byBoYXZlIE9wZW5TU0wgYXMKLSAgIGEgc3VibW9kdWxlIHRvIHRoZSBzb2NrZXQgbW9kdWxlLCBwbGFjaW5nIGFsbCB0aGUgY29kZSBpbgotICAgc29ja2V0bW9kdWxlLmMsIGJ1dCB0aGlzIGlzIG9idmlvdXNseSBub3QgYSBnb29kIHNvbHV0aW9uLCBzaW5jZSB5b3UKLSAgIG1pZ2h0IG5vdCB3YW50IHRvIGltcG9ydCB0b25uZXMgb2YgZXh0cmEgc3R1ZmYgeW91J3JlIG5vdCBnb2luZyB0byB1c2UKLSAgIHdoZW4gaW1wb3J0aW5nIHRoZSBzb2NrZXQgbW9kdWxlLiBUaGUgb3RoZXIgYXBwcm9hY2ggaXMgdG8gc29tZWhvdyBnZXQKLSAgIGEgcG9pbnRlciB0byB0aGUgbWV0aG9kIHRvIGJlIGNhbGxlZCwgZWl0aGVyIHRoZSBDIGZ1bmN0aW9uLCBvciBhCi0gICBjYWxsYWJsZSBQeXRob24gb2JqZWN0LiBUaGlzIGlzIG5vdCByZWFsbHkgYSBnb29kIHNvbHV0aW9uIGVpdGhlciwKLSAgIHNpbmNlIHRoZXJlJ3MgYSBsb3Qgb2YgbG9va3VwcyBpbnZvbHZlZC4gCisgICBtZXRob2RzIGFyZSBkZWNsYXJlZCBzdGF0aWMuIE9uZSBhcHByb2FjaCB3b3VsZCBiZSB0byBoYXZlIE9wZW5TU0wgYXMgYQorICAgc3VibW9kdWxlIHRvIHRoZSBzb2NrZXQgbW9kdWxlLCBwbGFjaW5nIGFsbCB0aGUgY29kZSBpbiBzb2NrZXRtb2R1bGUuYywKKyAgIGJ1dCB0aGlzIGlzIG9idmlvdXNseSBub3QgYSBnb29kIHNvbHV0aW9uLCBzaW5jZSB5b3UgbWlnaHQgbm90IHdhbnQgdG8KKyAgIGltcG9ydCB0b25uZXMgb2YgZXh0cmEgc3R1ZmYgeW91J3JlIG5vdCBnb2luZyB0byB1c2Ugd2hlbiBpbXBvcnRpbmcgdGhlCisgICBzb2NrZXQgbW9kdWxlLiBUaGUgb3RoZXIgYXBwcm9hY2ggaXMgdG8gc29tZWhvdyBnZXQgYSBwb2ludGVyIHRvIHRoZQorICAgbWV0aG9kIHRvIGJlIGNhbGxlZCwgZWl0aGVyIHRoZSBDIGZ1bmN0aW9uLCBvciBhIGNhbGxhYmxlIFB5dGhvbgorICAgb2JqZWN0LiBUaGlzIGlzIG5vdCByZWFsbHkgYSBnb29kIHNvbHV0aW9uIGVpdGhlciwgc2luY2UgdGhlcmUncyBhIGxvdAorICAgb2YgbG9va3VwcyBpbnZvbHZlZC4KIAotICAgVGhlIHdheSBpdCB3b3JrcyBpcyB0aGF0IHlvdSBoYXZlIHRvIHN1cHBseSBhIGBgc29ja2V0LWxpa2UnJwotICAgdHJhbnNwb3J0IG9iamVjdCB0byB0aGUgU1NMLkNvbm5lY3Rpb24uIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHRoaXMKLSAgIG9iamVjdCBpcyB0aGF0IGl0IGhhcyBhIGZpbGVubygpIG1ldGhvZCB0aGF0IHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IKLSAgIHRoYXQncyB2YWxpZCBhdCB0aGUgQyBsZXZlbCAoaS5lLiB5b3UgY2FuIHVzZSB0aGUgc3lzdGVtIGNhbGxzIHJlYWQKLSAgIGFuZCB3cml0ZSkuIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgY29ubmVjdCgpIG9yIGFjY2VwdCgpIG1ldGhvZHMgb2YKLSAgIHRoZSBTU0wuQ29ubmVjdGlvbiBvYmplY3QsIHRoZSB0cmFuc3BvcnQgb2JqZWN0IGhhcyB0byBzdXBwbHkgc3VjaAotICAgbWV0aG9kcyB0b28uIEFwYXJ0IGZyb20gdGhlbSwgYW55IG1ldGhvZCBsb29rdXBzIGluIHRoZSBTU0wuQ29ubmVjdGlvbgotICAgb2JqZWN0IHRoYXQgZmFpbCBhcmUgcGFzc2VkIG9uIHRvIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBvYmplY3QuIAorICAgVGhlIHdheSBpdCB3b3JrcyBpcyB0aGF0IHlvdSBoYXZlIHRvIHN1cHBseSBhIGBgc29ja2V0LWxpa2UnJyB0cmFuc3BvcnQKKyAgIG9iamVjdCB0byB0aGUgU1NMLkNvbm5lY3Rpb24uIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHRoaXMgb2JqZWN0IGlzCisgICB0aGF0IGl0IGhhcyBhIGZpbGVubygpIG1ldGhvZCB0aGF0IHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCdzCisgICB2YWxpZCBhdCB0aGUgQyBsZXZlbCAoaS5lLiB5b3UgY2FuIHVzZSB0aGUgc3lzdGVtIGNhbGxzIHJlYWQgYW5kCisgICB3cml0ZSkuIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgY29ubmVjdCgpIG9yIGFjY2VwdCgpIG1ldGhvZHMgb2YgdGhlCisgICBTU0wuQ29ubmVjdGlvbiBvYmplY3QsIHRoZSB0cmFuc3BvcnQgb2JqZWN0IGhhcyB0byBzdXBwbHkgc3VjaCBtZXRob2RzCisgICB0b28uIEFwYXJ0IGZyb20gdGhlbSwgYW55IG1ldGhvZCBsb29rdXBzIGluIHRoZSBTU0wuQ29ubmVjdGlvbiBvYmplY3QKKyAgIHRoYXQgZmFpbCBhcmUgcGFzc2VkIG9uIHRvIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBvYmplY3QuCiAKICAgIEZ1dHVyZSBjaGFuZ2VzIG1pZ2h0IGJlIHRvIGFsbG93IFB5dGhvbi1sZXZlbCB0cmFuc3BvcnQgb2JqZWN0cywgdGhhdAotICAgaW5zdGVhZCBvZiBoYXZpbmcgZmlsZW5vKCkgbWV0aG9kcywgaGF2ZSByZWFkKCkgYW5kIHdyaXRlKCkgbWV0aG9kcywKLSAgIHNvIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgb2YgUHl0aG9uIGNhbiBiZSB1c2VkLiBUaGlzIHdvdWxkIHByb2JhYmx5CisgICBpbnN0ZWFkIG9mIGhhdmluZyBmaWxlbm8oKSBtZXRob2RzLCBoYXZlIHJlYWQoKSBhbmQgd3JpdGUoKSBtZXRob2RzLCBzbworICAgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBvZiBQeXRob24gY2FuIGJlIHVzZWQuIFRoaXMgd291bGQgcHJvYmFibHkKICAgIGVudGFpbCBzb21lIHNvcnQgb2YgT3BlblNTTCBgYEJJT3MnJywgYnV0IGNvbnZlcnRpbmcgUHl0aG9uIHN0cmluZ3MKICAgIGJhY2sgYW5kIGZvcnRoIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyBzaG91bGRuJ3QgYmUgdXNlZCB1bmxlc3MKICAgIG5lY2Vzc2FyeS4gT3RoZXIgbmljZSB0aGluZ3Mgd291bGQgYmUgdG8gYmUgYWJsZSB0byBwYXNzIGluIGRpZmZlcmVudAotICAgdHJhbnNwb3J0IG9iamVjdHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcsIGJ1dCB0aGVuIHRoZSBmaWxlbm8oKQotICAgbWV0aG9kIG9mIFNTTC5Db25uZWN0aW9uIGJlY29tZXMgdmlydHVhbGx5IHVzZWxlc3MuIEFsc28sIHNob3VsZCB0aGUKLSAgIG1ldGhvZCByZXNvbHV0aW9uIGJlIHVzZWQgb24gdGhlIHJlYWQtdHJhbnNwb3J0IG9yIHRoZQotICAgd3JpdGUtdHJhbnNwb3J0PyAKKyAgIHRyYW5zcG9ydCBvYmplY3RzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLCBidXQgdGhlbiB0aGUgZmlsZW5vKCkgbWV0aG9kCisgICBvZiBTU0wuQ29ubmVjdGlvbiBiZWNvbWVzIHZpcnR1YWxseSB1c2VsZXNzLiBBbHNvLCBzaG91bGQgdGhlIG1ldGhvZAorICAgcmVzb2x1dGlvbiBiZSB1c2VkIG9uIHRoZSByZWFkLXRyYW5zcG9ydCBvciB0aGUgd3JpdGUtdHJhbnNwb3J0PwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJvdXQgdGhpcyBkb2N1bWVudCAuLi4KIApAQCAtOTQxLDcgKzk0Myw3IEBACiAgICBUaGUgYXBwbGljYXRpb24gb2YgTGFUZVgySFRNTCB0byB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gaGFzIGJlZW4KICAgIGhlYXZpbHkgdGFpbG9yZWQgYnkgRnJlZCBMLiBEcmFrZSwgSnIuIE9yaWdpbmFsIG5hdmlnYXRpb24gaWNvbnMgd2VyZQogICAgY29udHJpYnV0ZWQgYnkgQ2hyaXN0b3BoZXIgUGV0cmlsbGkuCi0gICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogCiAgICAgRm9vdG5vdGVzCiAKQEAgLTk2Miw5ICs5NjQsOSBAQAogICAgLi4uIGJhY2teNQogICAgICAgICAgIEknbSBub3Qgc3VyZSB3aHkgdGhpcyBpcyBuZWNlc3NhcnksIGJ1dCBvdGhlcndpc2UgSSBnZXQgYQogICAgICAgICAgIHNlZ21lbnRhdGlvbiB2aW9sYXRpb24gb24gUHlFdmFsX0NhbGxPYmplY3QKLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBPcGVuU1NMIE1hbnVhbAotICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBPcGVuU1NMIE1hbnVhbAorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIAogICAgUmVsZWFzZSAwLjYuCg==