ZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL3VucGFyc2UucHkgYi9EZW1vL3BhcnNlci91bnBhcnNlLnB5CmluZGV4IGYzYTVmZmUuLjMyYWNiZWQgMTAwNjQ0Ci0tLSBhL0RlbW8vcGFyc2VyL3VucGFyc2UucHkKKysrIGIvRGVtby9wYXJzZXIvdW5wYXJzZS5weQpAQCAtMjEzLDYgKzIxMyw5IEBACiAKICAgICBkZWYgX0Z1bmN0aW9uRGVmKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCJcbiIpCisgICAgICAgIGZvciBkZWNvIGluIHQuZGVjb3JhdG9yczoKKyAgICAgICAgICAgIHNlbGYuZmlsbCgiQCIpCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGRlY28pCiAgICAgICAgIHNlbGYuZmlsbCgiZGVmICIrdC5uYW1lICsgIigiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYXJncykKICAgICAgICAgc2VsZi53cml0ZSgiKSIpCmRpZmYgLS1naXQgYS9Eb2MvTWFrZWZpbGUgYi9Eb2MvTWFrZWZpbGUKaW5kZXggYTQzNWYxMS4uYmRhMjQ0YSAxMDA2NDQKLS0tIGEvRG9jL01ha2VmaWxlCisrKyBiL0RvYy9NYWtlZmlsZQpAQCAtMTIyLDcgKzEyMiw3IEBACiAKICMgVGhlIGVuZCBvZiB0aGlzIHNob3VsZCByZWZsZWN0IHRoZSBtYWpvci9taW5vciB2ZXJzaW9uIG51bWJlcnMgb2YKICMgdGhlIHJlbGVhc2U6Ci1XSEFUU05FVz13aGF0c25ldzI1CitXSEFUU05FVz13aGF0c25ldzI2CiAKICMgd2hhdCdzIHdoYXQKIE1BTkRWSUZJTEVTPQlwYXBlci0kKFBBUEVSKS9hcGkuZHZpIHBhcGVyLSQoUEFQRVIpL2V4dC5kdmkgXApkaWZmIC0tZ2l0IGEvRG9jL2FwaS9jb25jcmV0ZS50ZXggYi9Eb2MvYXBpL2NvbmNyZXRlLnRleAppbmRleCAzNDIyMWFkLi4zM2IwNGQ0IDEwMDY0NAotLS0gYS9Eb2MvYXBpL2NvbmNyZXRlLnRleAorKysgYi9Eb2MvYXBpL2NvbmNyZXRlLnRleApAQCAtNjAyLDE1ICs2MDIsMTUgQEAKIFxlbmR7Y2Z1bmNkZXNjfQogCiBcYmVnaW57Y2Z1bmNkZXNjfXtQeU9iamVjdCp9e1B5U3RyaW5nX0Zyb21TdHJpbmd9e2NvbnN0IGNoYXIgKnZ9Ci0gIFJldHVybiBhIG5ldyBzdHJpbmcgb2JqZWN0IHdpdGggdGhlIHZhbHVlIFx2YXJ7dn0gb24gc3VjY2VzcywgYW5kCi0gIFxOVUxMe30gb24gZmFpbHVyZS4gIFRoZSBwYXJhbWV0ZXIgXHZhcnt2fSBtdXN0IG5vdCBiZSBcTlVMTHt9OyBpdAotICB3aWxsIG5vdCBiZSBjaGVja2VkLgorICBSZXR1cm4gYSBuZXcgc3RyaW5nIG9iamVjdCB3aXRoIGEgY29weSBvZiB0aGUgc3RyaW5nIFx2YXJ7dn0gYXMgdmFsdWUKKyAgb24gc3VjY2VzcywgYW5kIFxOVUxMe30gb24gZmFpbHVyZS4gIFRoZSBwYXJhbWV0ZXIgXHZhcnt2fSBtdXN0IG5vdCBiZQorICBcTlVMTHt9OyBpdCB3aWxsIG5vdCBiZSBjaGVja2VkLgogXGVuZHtjZnVuY2Rlc2N9CiAKIFxiZWdpbntjZnVuY2Rlc2N9e1B5T2JqZWN0Kn17UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemV9e2NvbnN0IGNoYXIgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbn0KLSAgUmV0dXJuIGEgbmV3IHN0cmluZyBvYmplY3Qgd2l0aCB0aGUgdmFsdWUgXHZhcnt2fSBhbmQgbGVuZ3RoCi0gIFx2YXJ7bGVufSBvbiBzdWNjZXNzLCBhbmQgXE5VTEx7fSBvbiBmYWlsdXJlLiAgSWYgXHZhcnt2fSBpcworICBSZXR1cm4gYSBuZXcgc3RyaW5nIG9iamVjdCB3aXRoIGEgY29weSBvZiB0aGUgc3RyaW5nIFx2YXJ7dn0gYXMgdmFsdWUKKyAgYW5kIGxlbmd0aCBcdmFye2xlbn0gb24gc3VjY2VzcywgYW5kIFxOVUxMe30gb24gZmFpbHVyZS4gIElmIFx2YXJ7dn0gaXMKICAgXE5VTEx7fSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgYXJlIHVuaW5pdGlhbGl6ZWQuCiBcZW5ke2NmdW5jZGVzY30KIApAQCAtMjg3OSwxMCArMjg3OSwxMCBAQAogVmFyaW91cyBkYXRlIGFuZCB0aW1lIG9iamVjdHMgYXJlIHN1cHBsaWVkIGJ5IHRoZSBcbW9kdWxle2RhdGV0aW1lfQogbW9kdWxlLiAgQmVmb3JlIHVzaW5nIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoZSBoZWFkZXIgZmlsZQogXGZpbGV7ZGF0ZXRpbWUuaH0gbXVzdCBiZSBpbmNsdWRlZCBpbiB5b3VyIHNvdXJjZSAobm90ZSB0aGF0IHRoaXMgaXMKLW5vdCBpbmNsdWRlIGJ5IFxmaWxle1B5dGhvbi5ofSksIGFuZCBtYWNybyBcY2Z1bmN0aW9ue1B5RGF0ZVRpbWVfSU1QT1JUKCl9Ci1tdXN0IGJlIGludm9rZWQuICBUaGUgbWFjcm8gYXJyYW5nZXMgdG8gcHV0IGEgcG9pbnRlciB0byBhIEMgc3RydWN0dXJlCi1pbiBhIHN0YXRpYyB2YXJpYWJsZSBcY29kZXtQeURhdGVUaW1lQVBJfSwgd2hpY2ggaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nCi1tYWNyb3MuCitub3QgaW5jbHVkZWQgYnkgXGZpbGV7UHl0aG9uLmh9KSwgYW5kIHRoZSBtYWNybworXGNmdW5jdGlvbntQeURhdGVUaW1lX0lNUE9SVH0gbXVzdCBiZSBpbnZva2VkLiAgVGhlIG1hY3JvIHB1dHMgYQorcG9pbnRlciB0byBhIEMgc3RydWN0dXJlIGludG8gYSBzdGF0aWMgdmFyaWFibGUsIAorXGNvZGV7UHlEYXRlVGltZUFQSX0sIHRoYXQgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIG1hY3Jvcy4KIAogVHlwZS1jaGVjayBtYWNyb3M6CiAKQEAgLTMwODAsOSArMzA4MCw5IEBACiBcY2Z1bmN0aW9ue1B5T2JqZWN0X0lzVHJ1ZSgpfSwgXGNmdW5jdGlvbntQeU9iamVjdF9QcmludCgpfSwgYW5kCiBcY2Z1bmN0aW9ue1B5T2JqZWN0X0dldEl0ZXIoKX0pCiBvciB0aGUgYWJzdHJhY3QgbnVtYmVyIHByb3RvY29sIChpbmNsdWRpbmcKLVxjZnVuY3Rpb257UHlOdW1iZXJfQWRkKCl9LCBcY2Z1bmN0aW9ue1B5TnVtYmVyX1N1YnRyYWN0KCl9LAorXGNmdW5jdGlvbntQeU51bWJlcl9BbmQoKX0sIFxjZnVuY3Rpb257UHlOdW1iZXJfU3VidHJhY3QoKX0sCiBcY2Z1bmN0aW9ue1B5TnVtYmVyX09yKCl9LCBcY2Z1bmN0aW9ue1B5TnVtYmVyX1hvcigpfSwKLVxjZnVuY3Rpb257UHlOdW1iZXJfSW5QbGFjZUFkZCgpfSwgXGNmdW5jdGlvbntQeU51bWJlcl9JblBsYWNlU3VidHJhY3QoKX0sCitcY2Z1bmN0aW9ue1B5TnVtYmVyX0luUGxhY2VBbmQoKX0sIFxjZnVuY3Rpb257UHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0KCl9LAogXGNmdW5jdGlvbntQeU51bWJlcl9JblBsYWNlT3IoKX0sIGFuZCBcY2Z1bmN0aW9ue1B5TnVtYmVyX0luUGxhY2VYb3IoKX0pLgogCiBcYmVnaW57Y3R5cGVkZXNjfXtQeVNldE9iamVjdH0KZGlmZiAtLWdpdCBhL0RvYy9hcGkvZXhjZXB0aW9ucy50ZXggYi9Eb2MvYXBpL2V4Y2VwdGlvbnMudGV4CmluZGV4IGQ3YTQ5MGUuLjQ2YWRlNDkgMTAwNjQ0Ci0tLSBhL0RvYy9hcGkvZXhjZXB0aW9ucy50ZXgKKysrIGIvRG9jL2FwaS9leGNlcHRpb25zLnRleApAQCAtMzI1LDcgKzMyNSw3IEBACiAgIGRlZmF1bHQgZWZmZWN0IGZvciBcY29uc3RhbnR7U0lHSU5UfVx0dGluZGV4e1NJR0lOVH0gaXMgdG8gcmFpc2UgdGhlCiAgIFx3aXRoc3ViaXRlbXsoYnVpbHQtaW4gZXhjZXB0aW9uKX17XHR0aW5kZXh7S2V5Ym9hcmRJbnRlcnJ1cHR9fQogICBcZXhjZXB0aW9ue0tleWJvYXJkSW50ZXJydXB0fSBleGNlcHRpb24uICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkCi0gIHRoZSBlcnJvciBpbmRpY2F0b3IgaXMgc2V0IGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBcY29kZXsxfTsKKyAgdGhlIGVycm9yIGluZGljYXRvciBpcyBzZXQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIFxjb2Rley0xfTsKICAgb3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIFxjb2RlezB9LiAgVGhlIGVycm9yIGluZGljYXRvciBtYXkgb3IKICAgbWF5IG5vdCBiZSBjbGVhcmVkIGlmIGl0IHdhcyBwcmV2aW91c2x5IHNldC4KIFxlbmR7Y2Z1bmNkZXNjfQpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3QvZGlzdC50ZXggYi9Eb2MvZGlzdC9kaXN0LnRleAppbmRleCBlOGFlOTZmLi5iYTkwNzYzIDEwMDY0NAotLS0gYS9Eb2MvZGlzdC9kaXN0LnRleAorKysgYi9Eb2MvZGlzdC9kaXN0LnRleApAQCAtMzYwNyw2ICszNjA3LDExIEBACiAKICUgdG9kbwogCitcc2VjdGlvbntcbW9kdWxle2Rpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaX0gLS0tIEJ1aWxkIGEgTWljcm9zb2Z0IEluc3RhbGxlciBiaW5hcnkgcGFja2FnZX0KK1xkZWNsYXJlbW9kdWxlW2Rpc3R1dGlscy5jb21tYW5kLmJkaXN0bXNpXXtzdGFuZGFyZH17ZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfbXNpfQorXG1vZHVsZXN5bm9wc2lze0J1aWxkIGEgYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcyBhIFdpbmRvd3MgTVNJIGZpbGV9CisKKyUgdG9kbwogCiBcc2VjdGlvbntcbW9kdWxle2Rpc3R1dGlscy5jb21tYW5kLmJkaXN0X3JwbX0gLS0tIEJ1aWxkIGEgYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcyBhIFJlZGhhdCBSUE0gYW5kIFNSUE19CiBcZGVjbGFyZW1vZHVsZVtkaXN0dXRpbHMuY29tbWFuZC5iZGlzdHJwbV17c3RhbmRhcmR9e2Rpc3R1dGlscy5jb21tYW5kLmJkaXN0X3JwbX0KZGlmZiAtLWdpdCBhL0RvYy9leHQvZXh0ZW5kaW5nLnRleCBiL0RvYy9leHQvZXh0ZW5kaW5nLnRleAppbmRleCAwZTJmZDE0Li4yYWY4OGI1IDEwMDY0NAotLS0gYS9Eb2MvZXh0L2V4dGVuZGluZy50ZXgKKysrIGIvRG9jL2V4dC9leHRlbmRpbmcudGV4CkBAIC0yMjAsNiArMjIwLDggQEAKICAgICBQeU9iamVjdCAqbTsKIAogICAgIG0gPSBQeV9Jbml0TW9kdWxlKCJzcGFtIiwgU3BhbU1ldGhvZHMpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybjsKIAogICAgIFNwYW1FcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigic3BhbS5lcnJvciIsIE5VTEwsIE5VTEwpOwogICAgIFB5X0lOQ1JFRihTcGFtRXJyb3IpOwpAQCAtMzY0LDkgKzM2Niw5IEBACiBjcmVhdGVkIG1vZHVsZSBiYXNlZCB1cG9uIHRoZSB0YWJsZSAoYW4gYXJyYXkgb2YgXGN0eXBle1B5TWV0aG9kRGVmfQogc3RydWN0dXJlcykgdGhhdCB3YXMgcGFzc2VkIGFzIGl0cyBzZWNvbmQgYXJndW1lbnQuCiBcY2Z1bmN0aW9ue1B5X0luaXRNb2R1bGUoKX0gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1vZHVsZSBvYmplY3QKLXRoYXQgaXQgY3JlYXRlcyAod2hpY2ggaXMgdW51c2VkIGhlcmUpLiAgSXQgYWJvcnRzIHdpdGggYSBmYXRhbCBlcnJvcgotaWYgdGhlIG1vZHVsZSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQgc2F0aXNmYWN0b3JpbHksIHNvIHRoZSBjYWxsZXIKLWRvZXNuJ3QgbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzLgordGhhdCBpdCBjcmVhdGVzICh3aGljaCBpcyB1bnVzZWQgaGVyZSkuICBJdCBtYXkgYWJvcnQgd2l0aCBhIGZhdGFsIGVycm9yCitmb3IgY2VydGFpbiBlcnJvcnMsIG9yIHJldHVybiBcTlVMTHt9IGlmIHRoZSBtb2R1bGUgY291bGQgbm90IGJlCitpbml0aWFsaXplZCBzYXRpc2ZhY3RvcmlseS4KIAogV2hlbiBlbWJlZGRpbmcgUHl0aG9uLCB0aGUgXGNmdW5jdGlvbntpbml0c3BhbSgpfSBmdW5jdGlvbiBpcyBub3QKIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHVubGVzcyB0aGVyZSdzIGFuIGVudHJ5IGluIHRoZQpAQCAtMTI3NSw2ICsxMjc3LDggQEAKICAgICBQeU9iamVjdCAqY19hcGlfb2JqZWN0OwogCiAgICAgbSA9IFB5X0luaXRNb2R1bGUoInNwYW0iLCBTcGFtTWV0aG9kcyk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgQyBBUEkgcG9pbnRlciBhcnJheSAqLwogICAgIFB5U3BhbV9BUElbUHlTcGFtX1N5c3RlbV9OVU1dID0gKHZvaWQgKilQeVNwYW1fU3lzdGVtOwpAQCAtMTM2MSw3ICsxMzY1LDkgQEAKIHsKICAgICBQeU9iamVjdCAqbTsKIAotICAgIFB5X0luaXRNb2R1bGUoImNsaWVudCIsIENsaWVudE1ldGhvZHMpOworICAgIG0gPSBQeV9Jbml0TW9kdWxlKCJjbGllbnQiLCBDbGllbnRNZXRob2RzKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGltcG9ydF9zcGFtKCkgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgLyogYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBjYW4gaGFwcGVuIGhlcmUgKi8KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdCBiL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTVhNmE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CkBAIC0wLDAgKzEsMTQ3MiBAQAorRnVuY3Rpb25hbCBQcm9ncmFtbWluZyBIT1dUTworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKipWZXJzaW9uIDAuMzAqKgorCisoVGhpcyBpcyBhIGZpcnN0IGRyYWZ0LiAgUGxlYXNlIHNlbmQgY29tbWVudHMvZXJyb3IKK3JlcG9ydHMvc3VnZ2VzdGlvbnMgdG8gYW1rQGFtay5jYS4gIFRoaXMgVVJMIGlzIHByb2JhYmx5IG5vdCBnb2luZyB0bworYmUgdGhlIGZpbmFsIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudCwgc28gYmUgY2FyZWZ1bCBhYm91dCBsaW5raW5nIHRvCitpdCAtLSB5b3UgbWF5IHdhbnQgdG8gYWRkIGEgZGlzY2xhaW1lci4pCisKK0luIHRoaXMgZG9jdW1lbnQsIHdlJ2xsIHRha2UgYSB0b3VyIG9mIFB5dGhvbidzIGZlYXR1cmVzIHN1aXRhYmxlIGZvcgoraW1wbGVtZW50aW5nIHByb2dyYW1zIGluIGEgZnVuY3Rpb25hbCBzdHlsZS4gIEFmdGVyIGFuIGludHJvZHVjdGlvbiB0bwordGhlIGNvbmNlcHRzIG9mIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcsIHdlJ2xsIGxvb2sgYXQgbGFuZ3VhZ2UKK2ZlYXR1cmVzIHN1Y2ggYXMgaXRlcmF0b3JzIGFuZCBnZW5lcmF0b3JzIGFuZCByZWxldmFudCBsaWJyYXJ5IG1vZHVsZXMKK3N1Y2ggYXMgYGBpdGVydG9vbHNgYCBhbmQgYGBmdW5jdG9vbHNgYC4KKworCisuLiBjb250ZW50czo6CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYKK3lvdSdyZSBqdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLAorc2tpcCB0byB0aGUgbmV4dCBzZWN0aW9uLgorCitQcm9ncmFtbWluZyBsYW5ndWFnZXMgc3VwcG9ydCBkZWNvbXBvc2luZyBwcm9ibGVtcyBpbiBzZXZlcmFsIGRpZmZlcmVudCAKK3dheXM6CisKKyogTW9zdCBwcm9ncmFtbWluZyBsYW5ndWFnZXMgYXJlICoqcHJvY2VkdXJhbCoqOiAKKyAgcHJvZ3JhbXMgYXJlIGxpc3RzIG9mIGluc3RydWN0aW9ucyB0aGF0IHRlbGwgdGhlIGNvbXB1dGVyIHdoYXQgdG8KKyAgZG8gd2l0aCB0aGUgcHJvZ3JhbSdzIGlucHV0LgorICBDLCBQYXNjYWwsIGFuZCBldmVuIFVuaXggc2hlbGxzIGFyZSBwcm9jZWR1cmFsIGxhbmd1YWdlcy4KKworKiBJbiAqKmRlY2xhcmF0aXZlKiogbGFuZ3VhZ2VzLCB5b3Ugd3JpdGUgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIAorICB0aGUgcHJvYmxlbSB0byBiZSBzb2x2ZWQsIGFuZCB0aGUgbGFuZ3VhZ2UgaW1wbGVtZW50YXRpb24gZmlndXJlcyBvdXQgCisgIGhvdyB0byBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiBlZmZpY2llbnRseS4gIFNRTCBpcyB0aGUgZGVjbGFyYXRpdmUgCisgIGxhbmd1YWdlIHlvdSdyZSBtb3N0IGxpa2VseSB0byBiZSBmYW1pbGlhciB3aXRoOyBhIFNRTCBxdWVyeSBkZXNjcmliZXMKKyAgdGhlIGRhdGEgc2V0IHlvdSB3YW50IHRvIHJldHJpZXZlLCBhbmQgdGhlIFNRTCBlbmdpbmUgZGVjaWRlcyB3aGV0aGVyIHRvIAorICBzY2FuIHRhYmxlcyBvciB1c2UgaW5kZXhlcywgd2hpY2ggc3ViY2xhdXNlcyBzaG91bGQgYmUgcGVyZm9ybWVkIGZpcnN0LAorICBldGMuCisKKyogKipPYmplY3Qtb3JpZW50ZWQqKiBwcm9ncmFtcyBtYW5pcHVsYXRlICBjb2xsZWN0aW9ucyBvZiBvYmplY3RzLgorICBPYmplY3RzIGhhdmUgaW50ZXJuYWwgc3RhdGUgYW5kIHN1cHBvcnQgbWV0aG9kcyB0aGF0IHF1ZXJ5IG9yIG1vZGlmeQorICB0aGlzIGludGVybmFsIHN0YXRlIGluIHNvbWUgd2F5LiBTbWFsbHRhbGsgYW5kIEphdmEgYXJlCisgIG9iamVjdC1vcmllbnRlZCBsYW5ndWFnZXMuICBDKysgYW5kIFB5dGhvbiBhcmUgbGFuZ3VhZ2VzIHRoYXQKKyAgc3VwcG9ydCBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcsIGJ1dCBkb24ndCBmb3JjZSB0aGUgdXNlIAorICBvZiBvYmplY3Qtb3JpZW50ZWQgZmVhdHVyZXMuCisKKyogKipGdW5jdGlvbmFsKiogcHJvZ3JhbW1pbmcgZGVjb21wb3NlcyBhIHByb2JsZW0gaW50byBhIHNldCBvZiBmdW5jdGlvbnMuCisgIElkZWFsbHksIGZ1bmN0aW9ucyBvbmx5IHRha2UgaW5wdXRzIGFuZCBwcm9kdWNlIG91dHB1dHMsIGFuZCBkb24ndCBoYXZlIGFueSAKKyAgaW50ZXJuYWwgc3RhdGUgdGhhdCBhZmZlY3RzIHRoZSBvdXRwdXQgcHJvZHVjZWQgZm9yIGEgZ2l2ZW4gaW5wdXQuCisgIFdlbGwta25vd24gZnVuY3Rpb25hbCBsYW5ndWFnZXMgaW5jbHVkZSB0aGUgTUwgZmFtaWx5IChTdGFuZGFyZCBNTCwKKyAgT0NhbWwsIGFuZCBvdGhlciB2YXJpYW50cykgYW5kIEhhc2tlbGwuCisKK1RoZSBkZXNpZ25lcnMgb2Ygc29tZSBjb21wdXRlciBsYW5ndWFnZXMgaGF2ZSBjaG9zZW4gb25lIGFwcHJvYWNoIHRvIAorcHJvZ3JhbW1pbmcgdGhhdCdzIGVtcGhhc2l6ZWQuICBUaGlzIG9mdGVuIG1ha2VzIGl0IGRpZmZpY3VsdCB0bword3JpdGUgcHJvZ3JhbXMgdGhhdCB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guICBPdGhlciBsYW5ndWFnZXMgYXJlCittdWx0aS1wYXJhZGlnbSBsYW5ndWFnZXMgdGhhdCBzdXBwb3J0IHNldmVyYWwgZGlmZmVyZW50IGFwcHJvYWNoZXMuICBMaXNwLAorQysrLCBhbmQgUHl0aG9uIGFyZSBtdWx0aS1wYXJhZGlnbTsgeW91IGNhbiB3cml0ZSBwcm9ncmFtcyBvcgorbGlicmFyaWVzIHRoYXQgYXJlIGxhcmdlbHkgcHJvY2VkdXJhbCwgb2JqZWN0LW9yaWVudGVkLCBvciBmdW5jdGlvbmFsCitpbiBhbGwgb2YgdGhlc2UgbGFuZ3VhZ2VzLiAgSW4gYSBsYXJnZSBwcm9ncmFtLCBkaWZmZXJlbnQgc2VjdGlvbnMKK21pZ2h0IGJlIHdyaXR0ZW4gdXNpbmcgZGlmZmVyZW50IGFwcHJvYWNoZXM7IHRoZSBHVUkgbWlnaHQgYmUgb2JqZWN0LW9yaWVudGVkCit3aGlsZSB0aGUgcHJvY2Vzc2luZyBsb2dpYyBpcyBwcm9jZWR1cmFsIG9yIGZ1bmN0aW9uYWwsIGZvciBleGFtcGxlLgorCitJbiBhIGZ1bmN0aW9uYWwgcHJvZ3JhbSwgaW5wdXQgZmxvd3MgdGhyb3VnaCBhIHNldCBvZiBmdW5jdGlvbnMuIEVhY2gKK2Z1bmN0aW9uIG9wZXJhdGVzIG9uIGl0cyBpbnB1dCBhbmQgcHJvZHVjZXMgc29tZSBvdXRwdXQuICBGdW5jdGlvbmFsCitzdHlsZSBmcm93bnMgdXBvbiBmdW5jdGlvbnMgd2l0aCBzaWRlIGVmZmVjdHMgdGhhdCBtb2RpZnkgaW50ZXJuYWwKK3N0YXRlIG9yIG1ha2Ugb3RoZXIgY2hhbmdlcyB0aGF0IGFyZW4ndCB2aXNpYmxlIGluIHRoZSBmdW5jdGlvbidzCityZXR1cm4gdmFsdWUuICBGdW5jdGlvbnMgdGhhdCBoYXZlIG5vIHNpZGUgZWZmZWN0cyBhdCBhbGwgYXJlIAorY2FsbGVkICoqcHVyZWx5IGZ1bmN0aW9uYWwqKi4KK0F2b2lkaW5nIHNpZGUgZWZmZWN0cyBtZWFucyBub3QgdXNpbmcgZGF0YSBzdHJ1Y3R1cmVzCit0aGF0IGdldCB1cGRhdGVkIGFzIGEgcHJvZ3JhbSBydW5zOyBldmVyeSBmdW5jdGlvbidzIG91dHB1dCAKK211c3Qgb25seSBkZXBlbmQgb24gaXRzIGlucHV0LgorCitTb21lIGxhbmd1YWdlcyBhcmUgdmVyeSBzdHJpY3QgYWJvdXQgcHVyaXR5IGFuZCBkb24ndCBldmVuIGhhdmUKK2Fzc2lnbm1lbnQgc3RhdGVtZW50cyBzdWNoIGFzIGBgYT0zYGAgb3IgYGBjID0gYSArIGJgYCwgYnV0IGl0J3MKK2RpZmZpY3VsdCB0byBhdm9pZCBhbGwgc2lkZSBlZmZlY3RzLiAgUHJpbnRpbmcgdG8gdGhlIHNjcmVlbiBvcgord3JpdGluZyB0byBhIGRpc2sgZmlsZSBhcmUgc2lkZSBlZmZlY3RzLCBmb3IgZXhhbXBsZS4gIEZvciBleGFtcGxlLCBpbgorUHl0aG9uIGEgYGBwcmludGBgIHN0YXRlbWVudCBvciBhIGBgdGltZS5zbGVlcCgxKWBgIGJvdGggcmV0dXJuIG5vCit1c2VmdWwgdmFsdWU7IHRoZXkncmUgb25seSBjYWxsZWQgZm9yIHRoZWlyIHNpZGUgZWZmZWN0cyBvZiBzZW5kaW5nCitzb21lIHRleHQgdG8gdGhlIHNjcmVlbiBvciBwYXVzaW5nIGV4ZWN1dGlvbiBmb3IgYSBzZWNvbmQuCisKK1B5dGhvbiBwcm9ncmFtcyB3cml0dGVuIGluIGZ1bmN0aW9uYWwgc3R5bGUgdXN1YWxseSB3b24ndCBnbyB0byB0aGUKK2V4dHJlbWUgb2YgYXZvaWRpbmcgYWxsIEkvTyBvciBhbGwgYXNzaWdubWVudHM7IGluc3RlYWQsIHRoZXknbGwKK3Byb3ZpZGUgYSBmdW5jdGlvbmFsLWFwcGVhcmluZyBpbnRlcmZhY2UgYnV0IHdpbGwgdXNlIG5vbi1mdW5jdGlvbmFsCitmZWF0dXJlcyBpbnRlcm5hbGx5LiAgRm9yIGV4YW1wbGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGZ1bmN0aW9uCit3aWxsIHN0aWxsIHVzZSBhc3NpZ25tZW50cyB0byBsb2NhbCB2YXJpYWJsZXMsIGJ1dCB3b24ndCBtb2RpZnkgZ2xvYmFsCit2YXJpYWJsZXMgb3IgaGF2ZSBvdGhlciBzaWRlIGVmZmVjdHMuCisKK0Z1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgY2FuIGJlIGNvbnNpZGVyZWQgdGhlIG9wcG9zaXRlIG9mCitvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcuICBPYmplY3RzIGFyZSBsaXR0bGUgY2Fwc3VsZXMgY29udGFpbmluZworc29tZSBpbnRlcm5hbCBzdGF0ZSBhbG9uZyB3aXRoIGEgY29sbGVjdGlvbiBvZiBtZXRob2QgY2FsbHMgdGhhdCBsZXQKK3lvdSBtb2RpZnkgdGhpcyBzdGF0ZSwgYW5kIHByb2dyYW1zIGNvbnNpc3Qgb2YgbWFraW5nIHRoZSByaWdodCBzZXQgb2YKK3N0YXRlIGNoYW5nZXMuICBGdW5jdGlvbmFsIHByb2dyYW1taW5nIHdhbnRzIHRvIGF2b2lkIHN0YXRlIGNoYW5nZXMgYXMKK211Y2ggYXMgcG9zc2libGUgYW5kIHdvcmtzIHdpdGggZGF0YSBmbG93aW5nIGJldHdlZW4gZnVuY3Rpb25zLiAgSW4KK1B5dGhvbiB5b3UgbWlnaHQgY29tYmluZSB0aGUgdHdvIGFwcHJvYWNoZXMgYnkgd3JpdGluZyBmdW5jdGlvbnMgdGhhdAordGFrZSBhbmQgcmV0dXJuIGluc3RhbmNlcyByZXByZXNlbnRpbmcgb2JqZWN0cyBpbiB5b3VyIGFwcGxpY2F0aW9uCisoZS1tYWlsIG1lc3NhZ2VzLCB0cmFuc2FjdGlvbnMsIGV0Yy4pLgorCitGdW5jdGlvbmFsIGRlc2lnbiBtYXkgc2VlbSBsaWtlIGFuIG9kZCBjb25zdHJhaW50IHRvIHdvcmsgdW5kZXIuICBXaHkKK3Nob3VsZCB5b3UgYXZvaWQgb2JqZWN0cyBhbmQgc2lkZSBlZmZlY3RzPyAgVGhlcmUgYXJlIHRoZW9yZXRpY2FsIGFuZAorcHJhY3RpY2FsIGFkdmFudGFnZXMgdG8gdGhlIGZ1bmN0aW9uYWwgc3R5bGU6CisKKyogRm9ybWFsIHByb3ZhYmlsaXR5LgorKiBNb2R1bGFyaXR5LgorKiBDb21wb3NhYmlsaXR5LgorKiBFYXNlIG9mIGRlYnVnZ2luZyBhbmQgdGVzdGluZy4KKworRm9ybWFsIHByb3ZhYmlsaXR5CisnJycnJycnJycnJycnJycnJycnJycnCisKK0EgdGhlb3JldGljYWwgYmVuZWZpdCBpcyB0aGF0IGl0J3MgZWFzaWVyIHRvIGNvbnN0cnVjdCBhIG1hdGhlbWF0aWNhbCBwcm9vZgordGhhdCBhIGZ1bmN0aW9uYWwgcHJvZ3JhbSBpcyBjb3JyZWN0LgorCitGb3IgYSBsb25nIHRpbWUgcmVzZWFyY2hlcnMgaGF2ZSBiZWVuIGludGVyZXN0ZWQgaW4gZmluZGluZyB3YXlzIHRvCittYXRoZW1hdGljYWxseSBwcm92ZSBwcm9ncmFtcyBjb3JyZWN0LiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0ZXN0aW5nCithIHByb2dyYW0gb24gbnVtZXJvdXMgaW5wdXRzIGFuZCBjb25jbHVkaW5nIHRoYXQgaXRzIG91dHB1dCBpcyB1c3VhbGx5Citjb3JyZWN0LCBvciByZWFkaW5nIGEgcHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFuZCBjb25jbHVkaW5nIHRoYXQgdGhlCitjb2RlIGxvb2tzIHJpZ2h0OyB0aGUgZ29hbCBpcyBpbnN0ZWFkIGEgcmlnb3JvdXMgcHJvb2YgdGhhdCBhIHByb2dyYW0KK3Byb2R1Y2VzIHRoZSByaWdodCByZXN1bHQgZm9yIGFsbCBwb3NzaWJsZSBpbnB1dHMuCisKK1RoZSB0ZWNobmlxdWUgdXNlZCB0byBwcm92ZSBwcm9ncmFtcyBjb3JyZWN0IGlzIHRvIHdyaXRlIGRvd24gCisqKmludmFyaWFudHMqKiwgcHJvcGVydGllcyBvZiB0aGUgaW5wdXQgZGF0YSBhbmQgb2YgdGhlIHByb2dyYW0ncyAKK3ZhcmlhYmxlcyB0aGF0IGFyZSBhbHdheXMgdHJ1ZS4gIEZvciBlYWNoIGxpbmUgb2YgY29kZSwgeW91IHRoZW4gc2hvdyAKK3RoYXQgaWYgaW52YXJpYW50cyBYIGFuZCBZIGFyZSB0cnVlICoqYmVmb3JlKiogdGhlIGxpbmUgaXMgZXhlY3V0ZWQsIAordGhlIHNsaWdodGx5IGRpZmZlcmVudCBpbnZhcmlhbnRzIFgnIGFuZCBZJyBhcmUgdHJ1ZSAqKmFmdGVyKioKK3RoZSBsaW5lIGlzIGV4ZWN1dGVkLiAgVGhpcyBjb250aW51ZXMgdW50aWwgeW91IHJlYWNoIHRoZSBlbmQgb2YgdGhlCitwcm9ncmFtLCBhdCB3aGljaCBwb2ludCB0aGUgaW52YXJpYW50cyBzaG91bGQgbWF0Y2ggdGhlIGRlc2lyZWQgCitjb25kaXRpb25zIG9uIHRoZSBwcm9ncmFtJ3Mgb3V0cHV0LgorCitGdW5jdGlvbmFsIHByb2dyYW1taW5nJ3MgYXZvaWRhbmNlIG9mIGFzc2lnbm1lbnRzIGFyb3NlIGJlY2F1c2UgCithc3NpZ25tZW50cyBhcmUgZGlmZmljdWx0IHRvIGhhbmRsZSB3aXRoIHRoaXMgdGVjaG5pcXVlOyAKK2Fzc2lnbm1lbnRzIGNhbiBicmVhayBpbnZhcmlhbnRzIHRoYXQgd2VyZSB0cnVlIGJlZm9yZSB0aGUgYXNzaWdubWVudAord2l0aG91dCBwcm9kdWNpbmcgYW55IG5ldyBpbnZhcmlhbnRzIHRoYXQgY2FuIGJlIHByb3BhZ2F0ZWQgb253YXJkLgorCitVbmZvcnR1bmF0ZWx5LCBwcm92aW5nIHByb2dyYW1zIGNvcnJlY3QgaXMgbGFyZ2VseSBpbXByYWN0aWNhbCBhbmQgbm90CityZWxldmFudCB0byBQeXRob24gc29mdHdhcmUuIEV2ZW4gdHJpdmlhbCBwcm9ncmFtcyByZXF1aXJlIHByb29mcyB0aGF0CithcmUgc2V2ZXJhbCBwYWdlcyBsb25nOyB0aGUgcHJvb2Ygb2YgY29ycmVjdG5lc3MgZm9yIGEgbW9kZXJhdGVseQorY29tcGxpY2F0ZWQgcHJvZ3JhbSB3b3VsZCBiZSBlbm9ybW91cywgYW5kIGZldyBvciBub25lIG9mIHRoZSBwcm9ncmFtcworeW91IHVzZSBkYWlseSAodGhlIFB5dGhvbiBpbnRlcnByZXRlciwgeW91ciBYTUwgcGFyc2VyLCB5b3VyIHdlYgorYnJvd3NlcikgY291bGQgYmUgcHJvdmVuIGNvcnJlY3QuICBFdmVuIGlmIHlvdSB3cm90ZSBkb3duIG9yIGdlbmVyYXRlZAorYSBwcm9vZiwgdGhlcmUgd291bGQgdGhlbiBiZSB0aGUgcXVlc3Rpb24gb2YgdmVyaWZ5aW5nIHRoZSBwcm9vZjsKK21heWJlIHRoZXJlJ3MgYW4gZXJyb3IgaW4gaXQsIGFuZCB5b3Ugd3JvbmdseSBiZWxpZXZlIHlvdSd2ZSBwcm92ZWQKK3RoZSBwcm9ncmFtIGNvcnJlY3QuCisKK01vZHVsYXJpdHkKKycnJycnJycnJycnJycnJycnJycnJycKKworQSBtb3JlIHByYWN0aWNhbCBiZW5lZml0IG9mIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgaXMgdGhhdCBpdCBmb3JjZXMKK3lvdSB0byBicmVhayBhcGFydCB5b3VyIHByb2JsZW0gaW50byBzbWFsbCBwaWVjZXMuICBQcm9ncmFtcyBhcmUgbW9yZQorbW9kdWxhciBhcyBhIHJlc3VsdC4gIEl0J3MgZWFzaWVyIHRvIHNwZWNpZnkgYW5kIHdyaXRlIGEgc21hbGwKK2Z1bmN0aW9uIHRoYXQgZG9lcyBvbmUgdGhpbmcgdGhhbiBhIGxhcmdlIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYQorY29tcGxpY2F0ZWQgdHJhbnNmb3JtYXRpb24uICBTbWFsbCBmdW5jdGlvbnMgYXJlIGFsc28gZWFzaWVyIHRvIHJlYWQKK2FuZCB0byBjaGVjayBmb3IgZXJyb3JzLgorCisKK0Vhc2Ugb2YgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIAorJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJworCitUZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgYSBmdW5jdGlvbmFsLXN0eWxlIHByb2dyYW0gaXMgZWFzaWVyLgorCitEZWJ1Z2dpbmcgaXMgc2ltcGxpZmllZCBiZWNhdXNlIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IHNtYWxsIGFuZAorY2xlYXJseSBzcGVjaWZpZWQuICBXaGVuIGEgcHJvZ3JhbSBkb2Vzbid0IHdvcmssIGVhY2ggZnVuY3Rpb24gaXMgYW4KK2ludGVyZmFjZSBwb2ludCB3aGVyZSB5b3UgY2FuIGNoZWNrIHRoYXQgdGhlIGRhdGEgYXJlIGNvcnJlY3QuICBZb3UKK2NhbiBsb29rIGF0IHRoZSBpbnRlcm1lZGlhdGUgaW5wdXRzIGFuZCBvdXRwdXRzIHRvIHF1aWNrbHkgaXNvbGF0ZSB0aGUKK2Z1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgYSBidWcuCisKK1Rlc3RpbmcgaXMgZWFzaWVyIGJlY2F1c2UgZWFjaCBmdW5jdGlvbiBpcyBhIHBvdGVudGlhbCBzdWJqZWN0IGZvciBhCit1bml0IHRlc3QuICBGdW5jdGlvbnMgZG9uJ3QgZGVwZW5kIG9uIHN5c3RlbSBzdGF0ZSB0aGF0IG5lZWRzIHRvIGJlCityZXBsaWNhdGVkIGJlZm9yZSBydW5uaW5nIGEgdGVzdDsgaW5zdGVhZCB5b3Ugb25seSBoYXZlIHRvIHN5bnRoZXNpemUKK3RoZSByaWdodCBpbnB1dCBhbmQgdGhlbiBjaGVjayB0aGF0IHRoZSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RhdGlvbnMuCisKKworCitDb21wb3NhYmlsaXR5CisnJycnJycnJycnJycnJycnJycnJycnCisKK0FzIHlvdSB3b3JrIG9uIGEgZnVuY3Rpb25hbC1zdHlsZSBwcm9ncmFtLCB5b3UnbGwgd3JpdGUgYSBudW1iZXIgb2YKK2Z1bmN0aW9ucyB3aXRoIHZhcnlpbmcgaW5wdXRzIGFuZCBvdXRwdXRzLiAgU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMKK3dpbGwgYmUgdW5hdm9pZGFibHkgc3BlY2lhbGl6ZWQgdG8gYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLCBidXQKK290aGVycyB3aWxsIGJlIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBwcm9ncmFtcy4gIEZvciBleGFtcGxlLCBhCitmdW5jdGlvbiB0aGF0IHRha2VzIGEgZGlyZWN0b3J5IHBhdGggYW5kIHJldHVybnMgYWxsIHRoZSBYTUwgZmlsZXMgaW4KK3RoZSBkaXJlY3RvcnksIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGZpbGVuYW1lIGFuZCByZXR1cm5zIGl0cworY29udGVudHMsIGNhbiBiZSBhcHBsaWVkIHRvIG1hbnkgZGlmZmVyZW50IHNpdHVhdGlvbnMuCisKK092ZXIgdGltZSB5b3UnbGwgZm9ybSBhIHBlcnNvbmFsIGxpYnJhcnkgb2YgdXRpbGl0aWVzLiAgT2Z0ZW4geW91J2xsCithc3NlbWJsZSBuZXcgcHJvZ3JhbXMgYnkgYXJyYW5naW5nIGV4aXN0aW5nIGZ1bmN0aW9ucyBpbiBhIG5ldworY29uZmlndXJhdGlvbiBhbmQgd3JpdGluZyBhIGZldyBmdW5jdGlvbnMgc3BlY2lhbGl6ZWQgZm9yIHRoZSBjdXJyZW50Cit0YXNrLgorCisKKworSXRlcmF0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYSBQeXRob24gbGFuZ3VhZ2UgZmVhdHVyZSB0aGF0J3MgYW4gaW1wb3J0YW50Citmb3VuZGF0aW9uIGZvciB3cml0aW5nIGZ1bmN0aW9uYWwtc3R5bGUgcHJvZ3JhbXM6IGl0ZXJhdG9ycy4KKworQW4gaXRlcmF0b3IgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHN0cmVhbSBvZiBkYXRhOyB0aGlzIG9iamVjdAorcmV0dXJucyB0aGUgZGF0YSBvbmUgZWxlbWVudCBhdCBhIHRpbWUuICBBIFB5dGhvbiBpdGVyYXRvciBtdXN0CitzdXBwb3J0IGEgbWV0aG9kIGNhbGxlZCBgYG5leHQoKWBgIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCBhbHdheXMKK3JldHVybnMgdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgc3RyZWFtLiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgZWxlbWVudHMKK2luIHRoZSBzdHJlYW0sIGBgbmV4dCgpYGAgbXVzdCByYWlzZSB0aGUgYGBTdG9wSXRlcmF0aW9uYGAgZXhjZXB0aW9uLgorSXRlcmF0b3JzIGRvbid0IGhhdmUgdG8gYmUgZmluaXRlLCB0aG91Z2g7IGl0J3MgcGVyZmVjdGx5IHJlYXNvbmFibGUKK3RvIHdyaXRlIGFuIGl0ZXJhdG9yIHRoYXQgcHJvZHVjZXMgYW4gaW5maW5pdGUgc3RyZWFtIG9mIGRhdGEuCisKK1RoZSBidWlsdC1pbiBgYGl0ZXIoKWBgIGZ1bmN0aW9uIHRha2VzIGFuIGFyYml0cmFyeSBvYmplY3QgYW5kIHRyaWVzCit0byByZXR1cm4gYW4gaXRlcmF0b3IgdGhhdCB3aWxsIHJldHVybiB0aGUgb2JqZWN0J3MgY29udGVudHMgb3IKK2VsZW1lbnRzLCByYWlzaW5nIGBgVHlwZUVycm9yYGAgaWYgdGhlIG9iamVjdCBkb2Vzbid0IHN1cHBvcnQKK2l0ZXJhdGlvbi4gIFNldmVyYWwgb2YgUHl0aG9uJ3MgYnVpbHQtaW4gZGF0YSB0eXBlcyBzdXBwb3J0IGl0ZXJhdGlvbiwKK3RoZSBtb3N0IGNvbW1vbiBiZWluZyBsaXN0cyBhbmQgZGljdGlvbmFyaWVzLiAgQW4gb2JqZWN0IGlzIGNhbGxlZCAKK2FuICoqaXRlcmFibGUqKiBvYmplY3QgaWYgeW91IGNhbiBnZXQgYW4gaXRlcmF0b3IgZm9yIGl0LgorCitZb3UgY2FuIGV4cGVyaW1lbnQgd2l0aCB0aGUgaXRlcmF0aW9uIGludGVyZmFjZSBtYW51YWxseTo6CisKKyAgICA+Pj4gTCA9IFsxLDIsM10KKyAgICA+Pj4gaXQgPSBpdGVyKEwpCisgICAgPj4+IHByaW50IGl0CisgICAgPGl0ZXJhdG9yIG9iamVjdCBhdCAweDgxMTY4NzA+CisgICAgPj4+IGl0Lm5leHQoKQorICAgIDEKKyAgICA+Pj4gaXQubmV4dCgpCisgICAgMgorICAgID4+PiBpdC5uZXh0KCkKKyAgICAzCisgICAgPj4+IGl0Lm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KKyAgICBTdG9wSXRlcmF0aW9uCisgICAgPj4+ICAgICAgCisKK1B5dGhvbiBleHBlY3RzIGl0ZXJhYmxlIG9iamVjdHMgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgY29udGV4dHMsIHRoZSAKK21vc3QgaW1wb3J0YW50IGJlaW5nIHRoZSBgYGZvcmBgIHN0YXRlbWVudC4gIEluIHRoZSBzdGF0ZW1lbnQgYGBmb3IgWCBpbiBZYGAsCitZIG11c3QgYmUgYW4gaXRlcmF0b3Igb3Igc29tZSBvYmplY3QgZm9yIHdoaWNoIGBgaXRlcigpYGAgY2FuIGNyZWF0ZSAKK2FuIGl0ZXJhdG9yLiAgVGhlc2UgdHdvIHN0YXRlbWVudHMgYXJlIGVxdWl2YWxlbnQ6OgorCisgICAgICAgIGZvciBpIGluIGl0ZXIob2JqKToKKyAgICAgICAgICAgIHByaW50IGkKKworICAgICAgICBmb3IgaSBpbiBvYmo6CisgICAgICAgICAgICBwcmludCBpCisKK0l0ZXJhdG9ycyBjYW4gYmUgbWF0ZXJpYWxpemVkIGFzIGxpc3RzIG9yIHR1cGxlcyBieSB1c2luZyB0aGUKK2BgbGlzdCgpYGAgb3IgYGB0dXBsZSgpYGAgY29uc3RydWN0b3IgZnVuY3Rpb25zOjoKKworICAgID4+PiBMID0gWzEsMiwzXQorICAgID4+PiBpdGVyYXRvciA9IGl0ZXIoTCkKKyAgICA+Pj4gdCA9IHR1cGxlKGl0ZXJhdG9yKQorICAgID4+PiB0CisgICAgKDEsIDIsIDMpCisKK1NlcXVlbmNlIHVucGFja2luZyBhbHNvIHN1cHBvcnRzIGl0ZXJhdG9yczogaWYgeW91IGtub3cgYW4gaXRlcmF0b3IgCit3aWxsIHJldHVybiBOIGVsZW1lbnRzLCB5b3UgY2FuIHVucGFjayB0aGVtIGludG8gYW4gTi10dXBsZTo6CisKKyAgICA+Pj4gTCA9IFsxLDIsM10KKyAgICA+Pj4gaXRlcmF0b3IgPSBpdGVyKEwpCisgICAgPj4+IGEsYixjID0gaXRlcmF0b3IKKyAgICA+Pj4gYSxiLGMKKyAgICAoMSwgMiwgMykKKworQnVpbHQtaW4gZnVuY3Rpb25zIHN1Y2ggYXMgYGBtYXgoKWBgIGFuZCBgYG1pbigpYGAgY2FuIHRha2UgYSBzaW5nbGUKK2l0ZXJhdG9yIGFyZ3VtZW50IGFuZCB3aWxsIHJldHVybiB0aGUgbGFyZ2VzdCBvciBzbWFsbGVzdCBlbGVtZW50LgorVGhlIGBgImluImBgIGFuZCBgYCJub3QgaW4iYGAgb3BlcmF0b3JzIGFsc28gc3VwcG9ydCBpdGVyYXRvcnM6IGBgWCBpbgoraXRlcmF0b3JgYCBpcyB0cnVlIGlmIFggaXMgZm91bmQgaW4gdGhlIHN0cmVhbSByZXR1cm5lZCBieSB0aGUKK2l0ZXJhdG9yLiAgWW91J2xsIHJ1biBpbnRvIG9idmlvdXMgcHJvYmxlbXMgaWYgdGhlIGl0ZXJhdG9yIGlzCitpbmZpbml0ZTsgYGBtYXgoKWBgLCBgYG1pbigpYGAsIGFuZCBgYCJub3QgaW4iYGAgd2lsbCBuZXZlciByZXR1cm4sIGFuZAoraWYgdGhlIGVsZW1lbnQgWCBuZXZlciBhcHBlYXJzIGluIHRoZSBzdHJlYW0sIHRoZSBgYCJpbiJgYCBvcGVyYXRvcgord29uJ3QgcmV0dXJuIGVpdGhlci4KKworTm90ZSB0aGF0IHlvdSBjYW4gb25seSBnbyBmb3J3YXJkIGluIGFuIGl0ZXJhdG9yOyB0aGVyZSdzIG5vIHdheSB0bworZ2V0IHRoZSBwcmV2aW91cyBlbGVtZW50LCByZXNldCB0aGUgaXRlcmF0b3IsIG9yIG1ha2UgYSBjb3B5IG9mIGl0LgorSXRlcmF0b3Igb2JqZWN0cyBjYW4gb3B0aW9uYWxseSBwcm92aWRlIHRoZXNlIGFkZGl0aW9uYWwgY2FwYWJpbGl0aWVzLAorYnV0IHRoZSBpdGVyYXRvciBwcm90b2NvbCBvbmx5IHNwZWNpZmllcyB0aGUgYGBuZXh0KClgYCBtZXRob2QuCitGdW5jdGlvbnMgbWF5IHRoZXJlZm9yZSBjb25zdW1lIGFsbCBvZiB0aGUgaXRlcmF0b3IncyBvdXRwdXQsIGFuZCBpZgoreW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZlcmVudCB3aXRoIHRoZSBzYW1lIHN0cmVhbSwgeW91J2xsIGhhdmUKK3RvIGNyZWF0ZSBhIG5ldyBpdGVyYXRvci4KKworCisKK0RhdGEgVHlwZXMgVGhhdCBTdXBwb3J0IEl0ZXJhdG9ycworJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKKworV2UndmUgYWxyZWFkeSBzZWVuIGhvdyBsaXN0cyBhbmQgdHVwbGVzIHN1cHBvcnQgaXRlcmF0b3JzLiAgSW4gZmFjdCwKK2FueSBQeXRob24gc2VxdWVuY2UgdHlwZSwgc3VjaCBhcyBzdHJpbmdzLCB3aWxsIGF1dG9tYXRpY2FsbHkgc3VwcG9ydAorY3JlYXRpb24gb2YgYW4gaXRlcmF0b3IuCisKK0NhbGxpbmcgYGBpdGVyKClgYCBvbiBhIGRpY3Rpb25hcnkgcmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHdpbGwgbG9vcAorb3ZlciB0aGUgZGljdGlvbmFyeSdzIGtleXM6OgorCisgICAgPj4+IG0gPSB7J0phbic6IDEsICdGZWInOiAyLCAnTWFyJzogMywgJ0Fwcic6IDQsICdNYXknOiA1LCAnSnVuJzogNiwKKyAgICAuLi4gICAgICAnSnVsJzogNywgJ0F1Zyc6IDgsICdTZXAnOiA5LCAnT2N0JzogMTAsICdOb3YnOiAxMSwgJ0RlYyc6IDEyfQorICAgID4+PiBmb3Iga2V5IGluIG06CisgICAgLi4uICAgICBwcmludCBrZXksIG1ba2V5XQorICAgIE1hciAzCisgICAgRmViIDIKKyAgICBBdWcgOAorICAgIFNlcCA5CisgICAgTWF5IDUKKyAgICBKdW4gNgorICAgIEp1bCA3CisgICAgSmFuIDEKKyAgICBBcHIgNAorICAgIE5vdiAxMQorICAgIERlYyAxMgorICAgIE9jdCAxMAorCitOb3RlIHRoYXQgdGhlIG9yZGVyIGlzIGVzc2VudGlhbGx5IHJhbmRvbSwgYmVjYXVzZSBpdCdzIGJhc2VkIG9uIHRoZQoraGFzaCBvcmRlcmluZyBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGljdGlvbmFyeS4KKworQXBwbHlpbmcgYGBpdGVyKClgYCB0byBhIGRpY3Rpb25hcnkgYWx3YXlzIGxvb3BzIG92ZXIgdGhlIGtleXMsIGJ1dAorZGljdGlvbmFyaWVzIGhhdmUgbWV0aG9kcyB0aGF0IHJldHVybiBvdGhlciBpdGVyYXRvcnMuICBJZiB5b3Ugd2FudCB0bworaXRlcmF0ZSBvdmVyIGtleXMsIHZhbHVlcywgb3Iga2V5L3ZhbHVlIHBhaXJzLCB5b3UgY2FuIGV4cGxpY2l0bHkgY2FsbAordGhlIGBgaXRlcmtleXMoKWBgLCBgYGl0ZXJ2YWx1ZXMoKWBgLCBvciBgYGl0ZXJpdGVtcygpYGAgbWV0aG9kcyB0bworZ2V0IGFuIGFwcHJvcHJpYXRlIGl0ZXJhdG9yLgorCitUaGUgYGBkaWN0KClgYCBjb25zdHJ1Y3RvciBjYW4gYWNjZXB0IGFuIGl0ZXJhdG9yIHRoYXQgcmV0dXJucyBhCitmaW5pdGUgc3RyZWFtIG9mIGBgKGtleSwgdmFsdWUpYGAgdHVwbGVzOjoKKworICAgID4+PiBMID0gWygnSXRhbHknLCAnUm9tZScpLCAoJ0ZyYW5jZScsICdQYXJpcycpLCAoJ1VTJywgJ1dhc2hpbmd0b24gREMnKV0KKyAgICA+Pj4gZGljdChpdGVyKEwpKQorICAgIHsnSXRhbHknOiAnUm9tZScsICdVUyc6ICdXYXNoaW5ndG9uIERDJywgJ0ZyYW5jZSc6ICdQYXJpcyd9CisKK0ZpbGVzIGFsc28gc3VwcG9ydCBpdGVyYXRpb24gYnkgY2FsbGluZyB0aGUgYGByZWFkbGluZSgpYGAKK21ldGhvZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBsaW5lcyBpbiB0aGUgZmlsZS4gIFRoaXMgbWVhbnMgeW91IGNhbgorcmVhZCBlYWNoIGxpbmUgb2YgYSBmaWxlIGxpa2UgdGhpczo6CisKKyAgICBmb3IgbGluZSBpbiBmaWxlOgorICAgICAgICAjIGRvIHNvbWV0aGluZyBmb3IgZWFjaCBsaW5lCisgICAgICAgIC4uLgorCitTZXRzIGNhbiB0YWtlIHRoZWlyIGNvbnRlbnRzIGZyb20gYW4gaXRlcmFibGUgYW5kIGxldCB5b3UgaXRlcmF0ZSBvdmVyCit0aGUgc2V0J3MgZWxlbWVudHM6OgorCisgICAgUyA9IHNldCgoMiwgMywgNSwgNywgMTEsIDEzKSkKKyAgICBmb3IgaSBpbiBTOgorICAgICAgICBwcmludCBpCisKKworCitHZW5lcmF0b3IgZXhwcmVzc2lvbnMgYW5kIGxpc3QgY29tcHJlaGVuc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVHdvIGNvbW1vbiBvcGVyYXRpb25zIG9uIGFuIGl0ZXJhdG9yJ3Mgb3V0cHV0IGFyZSAxKSBwZXJmb3JtaW5nIHNvbWUKK29wZXJhdGlvbiBmb3IgZXZlcnkgZWxlbWVudCwgMikgc2VsZWN0aW5nIGEgc3Vic2V0IG9mIGVsZW1lbnRzIHRoYXQKK21lZXQgc29tZSBjb25kaXRpb24uICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBsaXN0IG9mIHN0cmluZ3MsIHlvdSBtaWdodAord2FudCB0byBzdHJpcCBvZmYgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIGVhY2ggbGluZSBvciBleHRyYWN0IGFsbAordGhlIHN0cmluZ3MgY29udGFpbmluZyBhIGdpdmVuIHN1YnN0cmluZy4KKworTGlzdCBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIChzaG9ydCBmb3JtOiAibGlzdGNvbXBzIgorYW5kICJnZW5leHBzIikgYXJlIGEgY29uY2lzZSBub3RhdGlvbiBmb3Igc3VjaCBvcGVyYXRpb25zLCBib3Jyb3dlZAorZnJvbSB0aGUgZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBsYW5ndWFnZSBIYXNrZWxsCisoaHR0cDovL3d3dy5oYXNrZWxsLm9yZykuICBZb3UgY2FuIHN0cmlwIGFsbCB0aGUgd2hpdGVzcGFjZSBmcm9tIGEKK3N0cmVhbSBvZiBzdHJpbmdzIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOjoKKworICAgICAgICBsaW5lX2xpc3QgPSBbJyAgbGluZSAxXG4nLCAnbGluZSAyICBcbicsIC4uLl0KKworICAgICAgICAjIEdlbmVyYXRvciBleHByZXNzaW9uIC0tIHJldHVybnMgaXRlcmF0b3IKKyAgICAgICAgc3RyaXBwZWRfaXRlciA9IChsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gbGluZV9saXN0KQorCisgICAgICAgICMgTGlzdCBjb21wcmVoZW5zaW9uIC0tIHJldHVybnMgbGlzdAorICAgICAgICBzdHJpcHBlZF9saXN0ID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBsaW5lX2xpc3RdCisKK1lvdSBjYW4gc2VsZWN0IG9ubHkgY2VydGFpbiBlbGVtZW50cyBieSBhZGRpbmcgYW4gYGAiaWYiYGAgY29uZGl0aW9uOjoKKworICAgICAgICBzdHJpcHBlZF9saXN0ID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBsaW5lX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICIiXQorCitXaXRoIGEgbGlzdCBjb21wcmVoZW5zaW9uLCB5b3UgZ2V0IGJhY2sgYSBQeXRob24gbGlzdDsKK2Bgc3RyaXBwZWRfbGlzdGBgIGlzIGEgbGlzdCBjb250YWluaW5nIHRoZSByZXN1bHRpbmcgbGluZXMsIG5vdCBhbgoraXRlcmF0b3IuICBHZW5lcmF0b3IgZXhwcmVzc2lvbnMgcmV0dXJuIGFuIGl0ZXJhdG9yIHRoYXQgY29tcHV0ZXMgdGhlCit2YWx1ZXMgYXMgbmVjZXNzYXJ5LCBub3QgbmVlZGluZyB0byBtYXRlcmlhbGl6ZSBhbGwgdGhlIHZhbHVlcyBhdAorb25jZS4gIFRoaXMgbWVhbnMgdGhhdCBsaXN0IGNvbXByZWhlbnNpb25zIGFyZW4ndCB1c2VmdWwgaWYgeW91J3JlCit3b3JraW5nIHdpdGggaXRlcmF0b3JzIHRoYXQgcmV0dXJuIGFuIGluZmluaXRlIHN0cmVhbSBvciBhIHZlcnkgbGFyZ2UKK2Ftb3VudCBvZiBkYXRhLiAgR2VuZXJhdG9yIGV4cHJlc3Npb25zIGFyZSBwcmVmZXJhYmxlIGluIHRoZXNlCitzaXR1YXRpb25zLgorCitHZW5lcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgKCIoKSIpIGFuZCBsaXN0Citjb21wcmVoZW5zaW9ucyBhcmUgc3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgKCJbXSIpLiAgR2VuZXJhdG9yCitleHByZXNzaW9ucyBoYXZlIHRoZSBmb3JtOjoKKworICAgICggZXhwcmVzc2lvbiBmb3IgZXhwciBpbiBzZXF1ZW5jZTEgCisgICAgICAgICAgICAgICAgIGlmIGNvbmRpdGlvbjEKKyAgICAgICAgICAgICAgICAgZm9yIGV4cHIyIGluIHNlcXVlbmNlMgorICAgICAgICAgICAgICAgICBpZiBjb25kaXRpb24yCisgICAgICAgICAgICAgICAgIGZvciBleHByMyBpbiBzZXF1ZW5jZTMgLi4uCisgICAgICAgICAgICAgICAgIGlmIGNvbmRpdGlvbjMKKyAgICAgICAgICAgICAgICAgZm9yIGV4cHJOIGluIHNlcXVlbmNlTgorICAgICAgICAgICAgICAgICBpZiBjb25kaXRpb25OICkKKworQWdhaW4sIGZvciBhIGxpc3QgY29tcHJlaGVuc2lvbiBvbmx5IHRoZSBvdXRzaWRlIGJyYWNrZXRzIGFyZQorZGlmZmVyZW50IChzcXVhcmUgYnJhY2tldHMgaW5zdGVhZCBvZiBwYXJlbnRoZXNlcykuCisKK1RoZSBlbGVtZW50cyBvZiB0aGUgZ2VuZXJhdGVkIG91dHB1dCB3aWxsIGJlIHRoZSBzdWNjZXNzaXZlIHZhbHVlcyBvZgorYGBleHByZXNzaW9uYGAuICBUaGUgYGBpZmBgIGNsYXVzZXMgYXJlIGFsbCBvcHRpb25hbDsgaWYgcHJlc2VudCwKK2BgZXhwcmVzc2lvbmBgIGlzIG9ubHkgZXZhbHVhdGVkIGFuZCBhZGRlZCB0byB0aGUgcmVzdWx0IHdoZW4KK2BgY29uZGl0aW9uYGAgaXMgdHJ1ZS4KKworR2VuZXJhdG9yIGV4cHJlc3Npb25zIGFsd2F5cyBoYXZlIHRvIGJlIHdyaXR0ZW4gaW5zaWRlIHBhcmVudGhlc2VzLAorYnV0IHRoZSBwYXJlbnRoZXNlcyBzaWduYWxsaW5nIGEgZnVuY3Rpb24gY2FsbCBhbHNvIGNvdW50LiAgSWYgeW91Cit3YW50IHRvIGNyZWF0ZSBhbiBpdGVyYXRvciB0aGF0IHdpbGwgYmUgaW1tZWRpYXRlbHkgcGFzc2VkIHRvIGEKK2Z1bmN0aW9uIHlvdSBjYW4gd3JpdGU6OgorCisgICAgICAgIG9ial90b3RhbCA9IHN1bShvYmouY291bnQgZm9yIG9iaiBpbiBsaXN0X2FsbF9vYmplY3RzKCkpCisKK1RoZSBgYGZvci4uLmluYGAgY2xhdXNlcyBjb250YWluIHRoZSBzZXF1ZW5jZXMgdG8gYmUgaXRlcmF0ZWQgb3Zlci4KK1RoZSBzZXF1ZW5jZXMgZG8gbm90IGhhdmUgdG8gYmUgdGhlIHNhbWUgbGVuZ3RoLCBiZWNhdXNlIHRoZXkgYXJlCitpdGVyYXRlZCBvdmVyIGZyb20gbGVmdCB0byByaWdodCwgKipub3QqKiBpbiBwYXJhbGxlbC4gIEZvciBlYWNoCitlbGVtZW50IGluIGBgc2VxdWVuY2UxYGAsIGBgc2VxdWVuY2UyYGAgaXMgbG9vcGVkIG92ZXIgZnJvbSB0aGUKK2JlZ2lubmluZy4gIGBgc2VxdWVuY2UzYGAgIGlzIHRoZW4gbG9vcGVkIG92ZXIgZm9yIGVhY2ggCityZXN1bHRpbmcgcGFpciBvZiBlbGVtZW50cyBmcm9tIGBgc2VxdWVuY2UxYGAgYW5kIGBgc2VxdWVuY2UyYGAuCisKK1RvIHB1dCBpdCBhbm90aGVyIHdheSwgYSBsaXN0IGNvbXByZWhlbnNpb24gb3IgZ2VuZXJhdG9yIGV4cHJlc3Npb24gaXMKK2VxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBQeXRob24gY29kZTo6CisKKyAgICBmb3IgZXhwcjEgaW4gc2VxdWVuY2UxOgorICAgICAgICBpZiBub3QgKGNvbmRpdGlvbjEpOgorICAgICAgICAgICAgY29udGludWUgICAjIFNraXAgdGhpcyBlbGVtZW50CisgICAgICAgIGZvciBleHByMiBpbiBzZXF1ZW5jZTI6CisgICAgICAgICAgICBpZiBub3QgKGNvbmRpdGlvbjIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlICAgICMgU2tpcCB0aGlzIGVsZW1lbnQKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgZm9yIGV4cHJOIGluIHNlcXVlbmNlTjoKKyAgICAgICAgICAgICAgICAgaWYgbm90IChjb25kaXRpb25OKToKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICAgIyBTa2lwIHRoaXMgZWxlbWVudAorCisgICAgICAgICAgICAgICAgICMgT3V0cHV0IHRoZSB2YWx1ZSBvZiAKKyAgICAgICAgICAgICAgICAgIyB0aGUgZXhwcmVzc2lvbi4KKworVGhpcyBtZWFucyB0aGF0IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGBgZm9yLi4uaW5gYCBjbGF1c2VzIGJ1dCBubworYGBpZmBgIGNsYXVzZXMsIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBvdXRwdXQgd2lsbCBiZSBlcXVhbCB0bwordGhlIHByb2R1Y3Qgb2YgdGhlIGxlbmd0aHMgb2YgYWxsIHRoZSBzZXF1ZW5jZXMuICBJZiB5b3UgaGF2ZSB0d28KK2xpc3RzIG9mIGxlbmd0aCAzLCB0aGUgb3V0cHV0IGxpc3QgaXMgOSBlbGVtZW50cyBsb25nOjoKKworICAgIHNlcTEgPSAnYWJjJworICAgIHNlcTIgPSAoMSwyLDMpCisgICAgPj4+IFsgKHgseSkgZm9yIHggaW4gc2VxMSBmb3IgeSBpbiBzZXEyXQorICAgIFsoJ2EnLCAxKSwgKCdhJywgMiksICgnYScsIDMpLCAKKyAgICAgKCdiJywgMSksICgnYicsIDIpLCAoJ2InLCAzKSwgCisgICAgICgnYycsIDEpLCAoJ2MnLCAyKSwgKCdjJywgMyldCisKK1RvIGF2b2lkIGludHJvZHVjaW5nIGFuIGFtYmlndWl0eSBpbnRvIFB5dGhvbidzIGdyYW1tYXIsIGlmCitgYGV4cHJlc3Npb25gYCBpcyBjcmVhdGluZyBhIHR1cGxlLCBpdCBtdXN0IGJlIHN1cnJvdW5kZWQgd2l0aAorcGFyZW50aGVzZXMuICBUaGUgZmlyc3QgbGlzdCBjb21wcmVoZW5zaW9uIGJlbG93IGlzIGEgc3ludGF4IGVycm9yLAord2hpbGUgdGhlIHNlY29uZCBvbmUgaXMgY29ycmVjdDo6CisKKyAgICAjIFN5bnRheCBlcnJvcgorICAgIFsgeCx5IGZvciB4IGluIHNlcTEgZm9yIHkgaW4gc2VxMl0KKyAgICAjIENvcnJlY3QKKyAgICBbICh4LHkpIGZvciB4IGluIHNlcTEgZm9yIHkgaW4gc2VxMl0KKworCitHZW5lcmF0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHZW5lcmF0b3JzIGFyZSBhIHNwZWNpYWwgY2xhc3Mgb2YgZnVuY3Rpb25zIHRoYXQgc2ltcGxpZnkgdGhlIHRhc2sgb2YKK3dyaXRpbmcgaXRlcmF0b3JzLiAgUmVndWxhciBmdW5jdGlvbnMgY29tcHV0ZSBhIHZhbHVlIGFuZCByZXR1cm4gaXQsCitidXQgZ2VuZXJhdG9ycyByZXR1cm4gYW4gaXRlcmF0b3IgdGhhdCByZXR1cm5zIGEgc3RyZWFtIG9mIHZhbHVlcy4KKworWW91J3JlIGRvdWJ0bGVzcyBmYW1pbGlhciB3aXRoIGhvdyByZWd1bGFyIGZ1bmN0aW9uIGNhbGxzIHdvcmsgaW4KK1B5dGhvbiBvciBDLiAgV2hlbiB5b3UgY2FsbCBhIGZ1bmN0aW9uLCBpdCBnZXRzIGEgcHJpdmF0ZSBuYW1lc3BhY2UKK3doZXJlIGl0cyBsb2NhbCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQuICBXaGVuIHRoZSBmdW5jdGlvbiByZWFjaGVzIGEKK2BgcmV0dXJuYGAgc3RhdGVtZW50LCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBkZXN0cm95ZWQgYW5kIHRoZQordmFsdWUgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gIEEgbGF0ZXIgY2FsbCB0byB0aGUgc2FtZSBmdW5jdGlvbgorY3JlYXRlcyBhIG5ldyBwcml2YXRlIG5hbWVzcGFjZSBhbmQgYSBmcmVzaCBzZXQgb2YgbG9jYWwKK3ZhcmlhYmxlcy4gQnV0LCB3aGF0IGlmIHRoZSBsb2NhbCB2YXJpYWJsZXMgd2VyZW4ndCB0aHJvd24gYXdheSBvbgorZXhpdGluZyBhIGZ1bmN0aW9uPyAgV2hhdCBpZiB5b3UgY291bGQgbGF0ZXIgcmVzdW1lIHRoZSBmdW5jdGlvbiB3aGVyZQoraXQgbGVmdCBvZmY/ICBUaGlzIGlzIHdoYXQgZ2VuZXJhdG9ycyBwcm92aWRlOyB0aGV5IGNhbiBiZSB0aG91Z2h0IG9mCithcyByZXN1bWFibGUgZnVuY3Rpb25zLgorCitIZXJlJ3MgdGhlIHNpbXBsZXN0IGV4YW1wbGUgb2YgYSBnZW5lcmF0b3IgZnVuY3Rpb246OgorCisgICAgZGVmIGdlbmVyYXRlX2ludHMoTik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgeWllbGQgaQorCitBbnkgZnVuY3Rpb24gY29udGFpbmluZyBhIGBgeWllbGRgYCBrZXl3b3JkIGlzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uOwordGhpcyBpcyBkZXRlY3RlZCBieSBQeXRob24ncyBieXRlY29kZSBjb21waWxlciB3aGljaCBjb21waWxlcyB0aGUKK2Z1bmN0aW9uIHNwZWNpYWxseSBhcyBhIHJlc3VsdC4KKworV2hlbiB5b3UgY2FsbCBhIGdlbmVyYXRvciBmdW5jdGlvbiwgaXQgZG9lc24ndCByZXR1cm4gYSBzaW5nbGUgdmFsdWU7CitpbnN0ZWFkIGl0IHJldHVybnMgYSBnZW5lcmF0b3Igb2JqZWN0IHRoYXQgc3VwcG9ydHMgdGhlIGl0ZXJhdG9yCitwcm90b2NvbC4gIE9uIGV4ZWN1dGluZyB0aGUgYGB5aWVsZGBgIGV4cHJlc3Npb24sIHRoZSBnZW5lcmF0b3IKK291dHB1dHMgdGhlIHZhbHVlIG9mIGBgaWBgLCBzaW1pbGFyIHRvIGEgYGByZXR1cm5gYAorc3RhdGVtZW50LiAgVGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW4gYGB5aWVsZGBgIGFuZCBhCitgYHJldHVybmBgIHN0YXRlbWVudCBpcyB0aGF0IG9uIHJlYWNoaW5nIGEgYGB5aWVsZGBgIHRoZQorZ2VuZXJhdG9yJ3Mgc3RhdGUgb2YgZXhlY3V0aW9uIGlzIHN1c3BlbmRlZCBhbmQgbG9jYWwgdmFyaWFibGVzIGFyZQorcHJlc2VydmVkLiAgT24gdGhlIG5leHQgY2FsbCB0byB0aGUgZ2VuZXJhdG9yJ3MgYGAubmV4dCgpYGAgbWV0aG9kLAordGhlIGZ1bmN0aW9uIHdpbGwgcmVzdW1lIGV4ZWN1dGluZy4gIAorCitIZXJlJ3MgYSBzYW1wbGUgdXNhZ2Ugb2YgdGhlIGBgZ2VuZXJhdGVfaW50cygpYGAgZ2VuZXJhdG9yOjoKKworICAgID4+PiBnZW4gPSBnZW5lcmF0ZV9pbnRzKDMpCisgICAgPj4+IGdlbgorICAgIDxnZW5lcmF0b3Igb2JqZWN0IGF0IDB4ODExN2Y5MD4KKyAgICA+Pj4gZ2VuLm5leHQoKQorICAgIDAKKyAgICA+Pj4gZ2VuLm5leHQoKQorICAgIDEKKyAgICA+Pj4gZ2VuLm5leHQoKQorICAgIDIKKyAgICA+Pj4gZ2VuLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgInN0ZGluIiwgbGluZSAxLCBpbiA/CisgICAgICBGaWxlICJzdGRpbiIsIGxpbmUgMiwgaW4gZ2VuZXJhdGVfaW50cworICAgIFN0b3BJdGVyYXRpb24KKworWW91IGNvdWxkIGVxdWFsbHkgd3JpdGUgYGBmb3IgaSBpbiBnZW5lcmF0ZV9pbnRzKDUpYGAsIG9yCitgYGEsYixjID0gZ2VuZXJhdGVfaW50cygzKWBgLgorCitJbnNpZGUgYSBnZW5lcmF0b3IgZnVuY3Rpb24sIHRoZSBgYHJldHVybmBgIHN0YXRlbWVudCBjYW4gb25seSBiZSB1c2VkCit3aXRob3V0IGEgdmFsdWUsIGFuZCBzaWduYWxzIHRoZSBlbmQgb2YgdGhlIHByb2Nlc3Npb24gb2YgdmFsdWVzOworYWZ0ZXIgZXhlY3V0aW5nIGEgYGByZXR1cm5gYCB0aGUgZ2VuZXJhdG9yIGNhbm5vdCByZXR1cm4gYW55IGZ1cnRoZXIKK3ZhbHVlcy4gIGBgcmV0dXJuYGAgd2l0aCBhIHZhbHVlLCBzdWNoIGFzIGBgcmV0dXJuIDVgYCwgaXMgYSBzeW50YXgKK2Vycm9yIGluc2lkZSBhIGdlbmVyYXRvciBmdW5jdGlvbi4gIFRoZSBlbmQgb2YgdGhlIGdlbmVyYXRvcidzIHJlc3VsdHMKK2NhbiBhbHNvIGJlIGluZGljYXRlZCBieSByYWlzaW5nIGBgU3RvcEl0ZXJhdGlvbmBgIG1hbnVhbGx5LCBvciBieQoranVzdCBsZXR0aW5nIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBmYWxsIG9mZiB0aGUgYm90dG9tIG9mIHRoZQorZnVuY3Rpb24uCisKK1lvdSBjb3VsZCBhY2hpZXZlIHRoZSBlZmZlY3Qgb2YgZ2VuZXJhdG9ycyBtYW51YWxseSBieSB3cml0aW5nIHlvdXIKK293biBjbGFzcyBhbmQgc3RvcmluZyBhbGwgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZ2VuZXJhdG9yIGFzCitpbnN0YW5jZSB2YXJpYWJsZXMuICBGb3IgZXhhbXBsZSwgcmV0dXJuaW5nIGEgbGlzdCBvZiBpbnRlZ2VycyBjb3VsZAorYmUgZG9uZSBieSBzZXR0aW5nIGBgc2VsZi5jb3VudGBgIHRvIDAsIGFuZCBoYXZpbmcgdGhlCitgYG5leHQoKWBgIG1ldGhvZCBpbmNyZW1lbnQgYGBzZWxmLmNvdW50YGAgYW5kIHJldHVybiBpdC4KK0hvd2V2ZXIsIGZvciBhIG1vZGVyYXRlbHkgY29tcGxpY2F0ZWQgZ2VuZXJhdG9yLCB3cml0aW5nIGEKK2NvcnJlc3BvbmRpbmcgY2xhc3MgY2FuIGJlIG11Y2ggbWVzc2llci4KKworVGhlIHRlc3Qgc3VpdGUgaW5jbHVkZWQgd2l0aCBQeXRob24ncyBsaWJyYXJ5LCBgYHRlc3RfZ2VuZXJhdG9ycy5weWBgLAorY29udGFpbnMgYSBudW1iZXIgb2YgbW9yZSBpbnRlcmVzdGluZyBleGFtcGxlcy4gIEhlcmUncyBvbmUgZ2VuZXJhdG9yCit0aGF0IGltcGxlbWVudHMgYW4gaW4tb3JkZXIgdHJhdmVyc2FsIG9mIGEgdHJlZSB1c2luZyBnZW5lcmF0b3JzCityZWN1cnNpdmVseS4KKworOjoKKworICAgICMgQSByZWN1cnNpdmUgZ2VuZXJhdG9yIHRoYXQgZ2VuZXJhdGVzIFRyZWUgbGVhdmVzIGluIGluLW9yZGVyLgorICAgIGRlZiBpbm9yZGVyKHQpOgorICAgICAgICBpZiB0OgorICAgICAgICAgICAgZm9yIHggaW4gaW5vcmRlcih0LmxlZnQpOgorICAgICAgICAgICAgICAgIHlpZWxkIHgKKworICAgICAgICAgICAgeWllbGQgdC5sYWJlbAorCisgICAgICAgICAgICBmb3IgeCBpbiBpbm9yZGVyKHQucmlnaHQpOgorICAgICAgICAgICAgICAgIHlpZWxkIHgKKworVHdvIG90aGVyIGV4YW1wbGVzIGluIGBgdGVzdF9nZW5lcmF0b3JzLnB5YGAgcHJvZHVjZQorc29sdXRpb25zIGZvciB0aGUgTi1RdWVlbnMgcHJvYmxlbSAocGxhY2luZyBOIHF1ZWVucyBvbiBhbiBOeE4KK2NoZXNzIGJvYXJkIHNvIHRoYXQgbm8gcXVlZW4gdGhyZWF0ZW5zIGFub3RoZXIpIGFuZCB0aGUgS25pZ2h0J3MgVG91cgorKGZpbmRpbmcgYSByb3V0ZSB0aGF0IHRha2VzIGEga25pZ2h0IHRvIGV2ZXJ5IHNxdWFyZSBvZiBhbiBOeE4gY2hlc3Nib2FyZAord2l0aG91dCB2aXNpdGluZyBhbnkgc3F1YXJlIHR3aWNlKS4KKworCisKK1Bhc3NpbmcgdmFsdWVzIGludG8gYSBnZW5lcmF0b3IKKycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKKworSW4gUHl0aG9uIDIuNCBhbmQgZWFybGllciwgZ2VuZXJhdG9ycyBvbmx5IHByb2R1Y2VkIG91dHB1dC4gIE9uY2UgYQorZ2VuZXJhdG9yJ3MgY29kZSB3YXMgaW52b2tlZCB0byBjcmVhdGUgYW4gaXRlcmF0b3IsIHRoZXJlIHdhcyBubyB3YXkgdG8KK3Bhc3MgYW55IG5ldyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBmdW5jdGlvbiB3aGVuIGl0cyBleGVjdXRpb24gaXMKK3Jlc3VtZWQuICBZb3UgY291bGQgaGFjayB0b2dldGhlciB0aGlzIGFiaWxpdHkgYnkgbWFraW5nIHRoZQorZ2VuZXJhdG9yIGxvb2sgYXQgYSBnbG9iYWwgdmFyaWFibGUgb3IgYnkgcGFzc2luZyBpbiBzb21lIG11dGFibGUgb2JqZWN0Cit0aGF0IGNhbGxlcnMgdGhlbiBtb2RpZnksIGJ1dCB0aGVzZSBhcHByb2FjaGVzIGFyZSBtZXNzeS4KKworSW4gUHl0aG9uIDIuNSB0aGVyZSdzIGEgc2ltcGxlIHdheSB0byBwYXNzIHZhbHVlcyBpbnRvIGEgZ2VuZXJhdG9yLgorYGB5aWVsZGBgIGJlY2FtZSBhbiBleHByZXNzaW9uLCByZXR1cm5pbmcgYSB2YWx1ZSB0aGF0IGNhbiBiZSBhc3NpZ25lZAordG8gYSB2YXJpYWJsZSBvciBvdGhlcndpc2Ugb3BlcmF0ZWQgb246OgorCisgICAgdmFsID0gKHlpZWxkIGkpCisKK0kgcmVjb21tZW5kIHRoYXQgeW91ICoqYWx3YXlzKiogcHV0IHBhcmVudGhlc2VzIGFyb3VuZCBhIGBgeWllbGRgYAorZXhwcmVzc2lvbiB3aGVuIHlvdSdyZSBkb2luZyBzb21ldGhpbmcgd2l0aCB0aGUgcmV0dXJuZWQgdmFsdWUsIGFzIGluCit0aGUgYWJvdmUgZXhhbXBsZS4gIFRoZSBwYXJlbnRoZXNlcyBhcmVuJ3QgYWx3YXlzIG5lY2Vzc2FyeSwgYnV0IGl0J3MKK2Vhc2llciB0byBhbHdheXMgYWRkIHRoZW0gaW5zdGVhZCBvZiBoYXZpbmcgdG8gcmVtZW1iZXIgd2hlbiB0aGV5J3JlCituZWVkZWQuCisKKyhQRVAgMzQyIGV4cGxhaW5zIHRoZSBleGFjdCBydWxlcywgd2hpY2ggYXJlIHRoYXQgYQorYGB5aWVsZGBgLWV4cHJlc3Npb24gbXVzdCBhbHdheXMgYmUgcGFyZW50aGVzaXplZCBleGNlcHQgd2hlbiBpdAorb2NjdXJzIGF0IHRoZSB0b3AtbGV2ZWwgZXhwcmVzc2lvbiBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIGFuCithc3NpZ25tZW50LiAgVGhpcyBtZWFucyB5b3UgY2FuIHdyaXRlIGBgdmFsID0geWllbGQgaWBgIGJ1dCBoYXZlIHRvCit1c2UgcGFyZW50aGVzZXMgd2hlbiB0aGVyZSdzIGFuIG9wZXJhdGlvbiwgYXMgaW4gYGB2YWwgPSAoeWllbGQgaSkKKysgMTJgYC4pCisKK1ZhbHVlcyBhcmUgc2VudCBpbnRvIGEgZ2VuZXJhdG9yIGJ5IGNhbGxpbmcgaXRzCitgYHNlbmQodmFsdWUpYGAgbWV0aG9kLiAgVGhpcyBtZXRob2QgcmVzdW1lcyB0aGUgCitnZW5lcmF0b3IncyBjb2RlIGFuZCB0aGUgYGB5aWVsZGBgIGV4cHJlc3Npb24gcmV0dXJucyB0aGUgc3BlY2lmaWVkCit2YWx1ZS4gIElmIHRoZSByZWd1bGFyIGBgbmV4dCgpYGAgbWV0aG9kIGlzIGNhbGxlZCwgdGhlCitgYHlpZWxkYGAgcmV0dXJucyBgYE5vbmVgYC4KKworSGVyZSdzIGEgc2ltcGxlIGNvdW50ZXIgdGhhdCBpbmNyZW1lbnRzIGJ5IDEgYW5kIGFsbG93cyBjaGFuZ2luZyB0aGUKK3ZhbHVlIG9mIHRoZSBpbnRlcm5hbCBjb3VudGVyLgorCis6OgorCisgICAgZGVmIGNvdW50ZXIgKG1heGltdW0pOgorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBpIDwgbWF4aW11bToKKyAgICAgICAgICAgIHZhbCA9ICh5aWVsZCBpKQorICAgICAgICAgICAgIyBJZiB2YWx1ZSBwcm92aWRlZCwgY2hhbmdlIGNvdW50ZXIKKyAgICAgICAgICAgIGlmIHZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpID0gdmFsCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGkgKz0gMQorCitBbmQgaGVyZSdzIGFuIGV4YW1wbGUgb2YgY2hhbmdpbmcgdGhlIGNvdW50ZXI6CisKKyAgICA+Pj4gaXQgPSBjb3VudGVyKDEwKQorICAgID4+PiBwcmludCBpdC5uZXh0KCkKKyAgICAwCisgICAgPj4+IHByaW50IGl0Lm5leHQoKQorICAgIDEKKyAgICA+Pj4gcHJpbnQgaXQuc2VuZCg4KQorICAgIDgKKyAgICA+Pj4gcHJpbnQgaXQubmV4dCgpCisgICAgOQorICAgID4+PiBwcmludCBpdC5uZXh0KCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlIGBgdC5weScnLCBsaW5lIDE1LCBpbiA/CisgICAgICAgIHByaW50IGl0Lm5leHQoKQorICAgIFN0b3BJdGVyYXRpb24KKworQmVjYXVzZSBgYHlpZWxkYGAgd2lsbCBvZnRlbiBiZSByZXR1cm5pbmcgYGBOb25lYGAsIHlvdQorc2hvdWxkIGFsd2F5cyBjaGVjayBmb3IgdGhpcyBjYXNlLiAgRG9uJ3QganVzdCB1c2UgaXRzIHZhbHVlIGluCitleHByZXNzaW9ucyB1bmxlc3MgeW91J3JlIHN1cmUgdGhhdCB0aGUgYGBzZW5kKClgYCBtZXRob2QKK3dpbGwgYmUgdGhlIG9ubHkgbWV0aG9kIHVzZWQgcmVzdW1lIHlvdXIgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorCitJbiBhZGRpdGlvbiB0byBgYHNlbmQoKWBgLCB0aGVyZSBhcmUgdHdvIG90aGVyIG5ldyBtZXRob2RzIG9uCitnZW5lcmF0b3JzOgorCisqIGBgdGhyb3codHlwZSwgdmFsdWU9Tm9uZSwgdHJhY2ViYWNrPU5vbmUpYGAgaXMgdXNlZCB0byByYWlzZSBhbiBleGNlcHRpb24gaW5zaWRlIHRoZQorICBnZW5lcmF0b3I7IHRoZSBleGNlcHRpb24gaXMgcmFpc2VkIGJ5IHRoZSBgYHlpZWxkYGAgZXhwcmVzc2lvbgorICB3aGVyZSB0aGUgZ2VuZXJhdG9yJ3MgZXhlY3V0aW9uIGlzIHBhdXNlZC4KKworKiBgYGNsb3NlKClgYCByYWlzZXMgYSBgYEdlbmVyYXRvckV4aXRgYAorICBleGNlcHRpb24gaW5zaWRlIHRoZSBnZW5lcmF0b3IgdG8gdGVybWluYXRlIHRoZSBpdGVyYXRpb24uICAKKyAgT24gcmVjZWl2aW5nIHRoaXMKKyAgZXhjZXB0aW9uLCB0aGUgZ2VuZXJhdG9yJ3MgY29kZSBtdXN0IGVpdGhlciByYWlzZQorICBgYEdlbmVyYXRvckV4aXRgYCBvciBgYFN0b3BJdGVyYXRpb25gYDsgY2F0Y2hpbmcgdGhlIAorICBleGNlcHRpb24gYW5kIGRvaW5nIGFueXRoaW5nIGVsc2UgaXMgaWxsZWdhbCBhbmQgd2lsbCB0cmlnZ2VyCisgIGEgYGBSdW50aW1lRXJyb3JgYC4gIGBgY2xvc2UoKWBgIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgCisgIFB5dGhvbidzIGdhcmJhZ2UgY29sbGVjdG9yIHdoZW4gdGhlIGdlbmVyYXRvciBpcyBnYXJiYWdlLWNvbGxlY3RlZC4KKworICBJZiB5b3UgbmVlZCB0byBydW4gY2xlYW51cCBjb2RlIHdoZW4gYSBgYEdlbmVyYXRvckV4aXRgYCBvY2N1cnMsCisgIEkgc3VnZ2VzdCB1c2luZyBhIGBgdHJ5OiAuLi4gZmluYWxseTpgYCBzdWl0ZSBpbnN0ZWFkIG9mIAorICBjYXRjaGluZyBgYEdlbmVyYXRvckV4aXRgYC4KKworVGhlIGN1bXVsYXRpdmUgZWZmZWN0IG9mIHRoZXNlIGNoYW5nZXMgaXMgdG8gdHVybiBnZW5lcmF0b3JzIGZyb20KK29uZS13YXkgcHJvZHVjZXJzIG9mIGluZm9ybWF0aW9uIGludG8gYm90aCBwcm9kdWNlcnMgYW5kIGNvbnN1bWVycy4KKworR2VuZXJhdG9ycyBhbHNvIGJlY29tZSAqKmNvcm91dGluZXMqKiwgYSBtb3JlIGdlbmVyYWxpemVkIGZvcm0gb2YKK3N1YnJvdXRpbmVzLiAgU3Vicm91dGluZXMgYXJlIGVudGVyZWQgYXQgb25lIHBvaW50IGFuZCBleGl0ZWQgYXQKK2Fub3RoZXIgcG9pbnQgKHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uLCBhbmQgYSBgYHJldHVybmBgCitzdGF0ZW1lbnQpLCBidXQgY29yb3V0aW5lcyBjYW4gYmUgZW50ZXJlZCwgZXhpdGVkLCBhbmQgcmVzdW1lZCBhdAorbWFueSBkaWZmZXJlbnQgcG9pbnRzICh0aGUgYGB5aWVsZGBgIHN0YXRlbWVudHMpLiAgCisKKworQnVpbHQtaW4gZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xldCdzIGxvb2sgaW4gbW9yZSBkZXRhaWwgYXQgYnVpbHQtaW4gZnVuY3Rpb25zIG9mdGVuIHVzZWQgd2l0aCBpdGVyYXRvcnMuCisKK1R3byBQeXRob24ncyBidWlsdC1pbiBmdW5jdGlvbnMsIGBgbWFwKClgYCBhbmQgYGBmaWx0ZXIoKWBgLCBhcmUKK3NvbWV3aGF0IG9ic29sZXRlOyB0aGV5IGR1cGxpY2F0ZSB0aGUgZmVhdHVyZXMgb2YgbGlzdCBjb21wcmVoZW5zaW9ucworYnV0IHJldHVybiBhY3R1YWwgbGlzdHMgaW5zdGVhZCBvZiBpdGVyYXRvcnMuICAKKworYGBtYXAoZiwgaXRlckEsIGl0ZXJCLCAuLi4pYGAgcmV0dXJucyBhIGxpc3QgY29udGFpbmluZyBgYGYoaXRlckFbMF0sCitpdGVyQlswXSksIGYoaXRlckFbMV0sIGl0ZXJCWzFdKSwgZihpdGVyQVsyXSwgaXRlckJbMl0pLCAuLi5gYC4gIAorCis6OgorCisgICAgZGVmIHVwcGVyKHMpOgorICAgICAgICByZXR1cm4gcy51cHBlcigpCisgICAgbWFwKHVwcGVyLCBbJ3NlbnRlbmNlJywgJ2ZyYWdtZW50J10pID0+CisgICAgICBbJ1NFTlRFTkNFJywgJ0ZSQUdNRU5UJ10KKworICAgIFt1cHBlcihzKSBmb3IgcyBpbiBbJ3NlbnRlbmNlJywgJ2ZyYWdtZW50J11dID0+CisgICAgICBbJ1NFTlRFTkNFJywgJ0ZSQUdNRU5UJ10KKworQXMgc2hvd24gYWJvdmUsIHlvdSBjYW4gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3Qgd2l0aCBhIGxpc3QKK2NvbXByZWhlbnNpb24uICBUaGUgYGBpdGVydG9vbHMuaW1hcCgpYGAgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSB0aGluZworYnV0IGNhbiBoYW5kbGUgaW5maW5pdGUgaXRlcmF0b3JzOyBpdCdsbCBiZSBkaXNjdXNzZWQgbGF0ZXIsIGluIHRoZSBzZWN0aW9uIG9uIAordGhlIGBgaXRlcnRvb2xzYGAgbW9kdWxlLgorCitgYGZpbHRlcihwcmVkaWNhdGUsIGl0ZXIpYGAgcmV0dXJucyBhIGxpc3QgCit0aGF0IGNvbnRhaW5zIGFsbCB0aGUgc2VxdWVuY2UgZWxlbWVudHMgdGhhdCBtZWV0IGEgY2VydGFpbiBjb25kaXRpb24sCithbmQgaXMgc2ltaWxhcmx5IGR1cGxpY2F0ZWQgYnkgbGlzdCBjb21wcmVoZW5zaW9ucy4KK0EgKipwcmVkaWNhdGUqKiBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJ1dGggdmFsdWUgb2YKK3NvbWUgY29uZGl0aW9uOyBmb3IgdXNlIHdpdGggYGBmaWx0ZXIoKWBgLCB0aGUgcHJlZGljYXRlIG11c3QgdGFrZSBhIAorc2luZ2xlIHZhbHVlLiAgCisKKzo6CisKKyAgICBkZWYgaXNfZXZlbih4KToKKyAgICAgICAgcmV0dXJuICh4ICUgMikgPT0gMAorCisgICAgZmlsdGVyKGlzX2V2ZW4sIHJhbmdlKDEwKSkgPT4KKyAgICAgIFswLCAyLCA0LCA2LCA4XQorCitUaGlzIGNhbiBhbHNvIGJlIHdyaXR0ZW4gYXMgYSBsaXN0IGNvbXByZWhlbnNpb246OgorCisgICAgPj4+IFt4IGZvciB4IGluIHJhbmdlKDEwKSBpZiBpc19ldmVuKHgpXQorICAgIFswLCAyLCA0LCA2LCA4XQorCitgYGZpbHRlcigpYGAgYWxzbyBoYXMgYSBjb3VudGVycGFydCBpbiB0aGUgYGBpdGVydG9vbHNgYCBtb2R1bGUsCitgYGl0ZXJ0b29scy5pZmlsdGVyKClgYCwgdGhhdCByZXR1cm5zIGFuIGl0ZXJhdG9yIGFuZCAKK2NhbiB0aGVyZWZvcmUgaGFuZGxlIGluZmluaXRlIHNlcXVlbmNlcyBqdXN0IGFzIGBgaXRlcnRvb2xzLmltYXAoKWBgIGNhbi4KKworYGByZWR1Y2UoZnVuYywgaXRlciwgW2luaXRpYWxfdmFsdWVdKWBgIGRvZXNuJ3QgaGF2ZSBhIGNvdW50ZXJwYXJ0IGluCit0aGUgYGBpdGVydG9vbHNgYCBtb2R1bGUgYmVjYXVzZSBpdCBjdW11bGF0aXZlbHkgcGVyZm9ybXMgYW4gb3BlcmF0aW9uCitvbiBhbGwgdGhlIGl0ZXJhYmxlJ3MgZWxlbWVudHMgYW5kIHRoZXJlZm9yZSBjYW4ndCBiZSBhcHBsaWVkIHRvCitpbmZpbml0ZSBpdGVyYWJsZXMuICBgYGZ1bmNgYCBtdXN0IGJlIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0d28gZWxlbWVudHMKK2FuZCByZXR1cm5zIGEgc2luZ2xlIHZhbHVlLiAgYGByZWR1Y2UoKWBgIHRha2VzIHRoZSBmaXJzdCB0d28gZWxlbWVudHMKK0EgYW5kIEIgcmV0dXJuZWQgYnkgdGhlIGl0ZXJhdG9yIGFuZCBjYWxjdWxhdGVzIGBgZnVuYyhBLCBCKWBgLiAgSXQKK3RoZW4gcmVxdWVzdHMgdGhlIHRoaXJkIGVsZW1lbnQsIEMsIGNhbGN1bGF0ZXMgYGBmdW5jKGZ1bmMoQSwgQiksCitDKWBgLCBjb21iaW5lcyB0aGlzIHJlc3VsdCB3aXRoIHRoZSBmb3VydGggZWxlbWVudCByZXR1cm5lZCwgYW5kCitjb250aW51ZXMgdW50aWwgdGhlIGl0ZXJhYmxlIGlzIGV4aGF1c3RlZC4gIElmIHRoZSBpdGVyYWJsZSByZXR1cm5zIG5vCit2YWx1ZXMgYXQgYWxsLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIElmIHRoZSBpbml0aWFsCit2YWx1ZSBpcyBzdXBwbGllZCwgaXQncyB1c2VkIGFzIGEgc3RhcnRpbmcgcG9pbnQgYW5kCitgYGZ1bmMoaW5pdGlhbF92YWx1ZSwgQSlgYCBpcyB0aGUgZmlyc3QgY2FsY3VsYXRpb24uCisKKzo6CisKKyAgICBpbXBvcnQgb3BlcmF0b3IKKyAgICByZWR1Y2Uob3BlcmF0b3IuY29uY2F0LCBbJ0EnLCAnQkInLCAnQyddKSA9PgorICAgICAgJ0FCQkMnCisgICAgcmVkdWNlKG9wZXJhdG9yLmNvbmNhdCwgW10pID0+CisgICAgICBUeXBlRXJyb3I6IHJlZHVjZSgpIG9mIGVtcHR5IHNlcXVlbmNlIHdpdGggbm8gaW5pdGlhbCB2YWx1ZQorICAgIHJlZHVjZShvcGVyYXRvci5tdWwsIFsxLDIsM10sIDEpID0+CisgICAgICA2CisgICAgcmVkdWNlKG9wZXJhdG9yLm11bCwgW10sIDEpID0+CisgICAgICAxCisKK0lmIHlvdSB1c2UgYGBvcGVyYXRvci5hZGRgYCB3aXRoIGBgcmVkdWNlKClgYCwgeW91J2xsIGFkZCB1cCBhbGwgdGhlIAorZWxlbWVudHMgb2YgdGhlIGl0ZXJhYmxlLiAgVGhpcyBjYXNlIGlzIHNvIGNvbW1vbiB0aGF0IHRoZXJlJ3MgYSBzcGVjaWFsCitidWlsdC1pbiBjYWxsZWQgYGBzdW0oKWBgIHRvIGNvbXB1dGUgaXQ6OgorCisgICAgcmVkdWNlKG9wZXJhdG9yLmFkZCwgWzEsMiwzLDRdLCAwKSA9PgorICAgICAgMTAKKyAgICBzdW0oWzEsMiwzLDRdKSA9PgorICAgICAgMTAKKyAgICBzdW0oW10pID0+CisgICAgICAwCisKK0ZvciBtYW55IHVzZXMgb2YgYGByZWR1Y2UoKWBgLCB0aG91Z2gsIGl0IGNhbiBiZSBjbGVhcmVyIHRvIGp1c3Qgd3JpdGUKK3RoZSBvYnZpb3VzIGBgZm9yYGAgbG9vcDo6CisKKyAgICAjIEluc3RlYWQgb2Y6CisgICAgcHJvZHVjdCA9IHJlZHVjZShvcGVyYXRvci5tdWwsIFsxLDIsM10sIDEpCisKKyAgICAjIFlvdSBjYW4gd3JpdGU6CisgICAgcHJvZHVjdCA9IDEKKyAgICBmb3IgaSBpbiBbMSwyLDNdOgorICAgICAgICBwcm9kdWN0ICo9IGkKKworCitgYGVudW1lcmF0ZShpdGVyKWBgIGNvdW50cyBvZmYgdGhlIGVsZW1lbnRzIGluIHRoZSBpdGVyYWJsZSwgcmV0dXJuaW5nCisyLXR1cGxlcyBjb250YWluaW5nIHRoZSBjb3VudCBhbmQgZWFjaCBlbGVtZW50LgorCis6OgorCisgICAgZW51bWVyYXRlKFsnc3ViamVjdCcsICd2ZXJiJywgJ29iamVjdCddKSA9PgorICAgICAgKDAsICdzdWJqZWN0JyksICgxLCAndmVyYicpLCAoMiwgJ29iamVjdCcpCisKK2BgZW51bWVyYXRlKClgYCBpcyBvZnRlbiB1c2VkIHdoZW4gbG9vcGluZyB0aHJvdWdoIGEgbGlzdCAKK2FuZCByZWNvcmRpbmcgdGhlIGluZGV4ZXMgYXQgd2hpY2ggY2VydGFpbiBjb25kaXRpb25zIGFyZSBtZXQ6OgorCisgICAgZiA9IG9wZW4oJ2RhdGEudHh0JywgJ3InKQorICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShmKToKKyAgICAgICAgaWYgbGluZS5zdHJpcCgpID09ICcnOgorICAgICAgICAgICAgcHJpbnQgJ0JsYW5rIGxpbmUgYXQgbGluZSAjJWknICUgaQorCitgYHNvcnRlZChpdGVyYWJsZSwgW2NtcD1Ob25lXSwgW2tleT1Ob25lXSwgW3JldmVyc2U9RmFsc2UpYGAgCitjb2xsZWN0cyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBpdGVyYWJsZSBpbnRvIGEgbGlzdCwgc29ydHMgCit0aGUgbGlzdCwgYW5kIHJldHVybnMgdGhlIHNvcnRlZCByZXN1bHQuICBUaGUgYGBjbXBgYCwgYGBrZXlgYCwgCithbmQgYGByZXZlcnNlYGAgYXJndW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgCitjb25zdHJ1Y3RlZCBsaXN0J3MgYGAuc29ydCgpYGAgbWV0aG9kLgorCis6OgorCisgICAgaW1wb3J0IHJhbmRvbQorICAgICMgR2VuZXJhdGUgOCByYW5kb20gbnVtYmVycyBiZXR3ZWVuIFswLCAxMDAwMCkKKyAgICByYW5kX2xpc3QgPSByYW5kb20uc2FtcGxlKHJhbmdlKDEwMDAwKSwgOCkKKyAgICByYW5kX2xpc3QgPT4KKyAgICAgIFs3NjksIDc5NTMsIDk4MjgsIDY0MzEsIDg0NDIsIDk4NzgsIDYyMTMsIDIyMDddCisgICAgc29ydGVkKHJhbmRfbGlzdCkgPT4KKyAgICAgIFs3NjksIDIyMDcsIDYyMTMsIDY0MzEsIDc5NTMsIDg0NDIsIDk4MjgsIDk4NzhdCisgICAgc29ydGVkKHJhbmRfbGlzdCwgcmV2ZXJzZT1UcnVlKSA9PgorICAgICAgWzk4NzgsIDk4MjgsIDg0NDIsIDc5NTMsIDY0MzEsIDYyMTMsIDIyMDcsIDc2OV0KKworKEZvciBhIG1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbiBvZiBzb3J0aW5nLCBzZWUgdGhlIFNvcnRpbmcgbWluaS1IT1dUTworaW4gdGhlIFB5dGhvbiB3aWtpIGF0IGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Ib3dUby9Tb3J0aW5nLikKKworVGhlIGBgYW55KGl0ZXIpYGAgYW5kIGBgYWxsKGl0ZXIpYGAgYnVpbHQtaW5zIGxvb2sgYXQgCit0aGUgdHJ1dGggdmFsdWVzIG9mIGFuIGl0ZXJhYmxlJ3MgY29udGVudHMuICBgYGFueSgpYGAgcmV0dXJucyAKK1RydWUgaWYgYW55IGVsZW1lbnQgaW4gdGhlIGl0ZXJhYmxlIGlzIGEgdHJ1ZSB2YWx1ZSwgYW5kIGBgYWxsKClgYCAKK3JldHVybnMgVHJ1ZSBpZiBhbGwgb2YgdGhlIGVsZW1lbnRzIGFyZSB0cnVlIHZhbHVlczo6CisKKyAgICBhbnkoWzAsMSwwXSkgPT4KKyAgICAgIFRydWUKKyAgICBhbnkoWzAsMCwwXSkgPT4KKyAgICAgIEZhbHNlCisgICAgYW55KFsxLDEsMV0pID0+CisgICAgICBUcnVlCisgICAgYWxsKFswLDEsMF0pID0+CisgICAgICBGYWxzZQorICAgIGFsbChbMCwwLDBdKSA9PiAKKyAgICAgIEZhbHNlCisgICAgYWxsKFsxLDEsMV0pID0+CisgICAgICBUcnVlCisKKworU21hbGwgZnVuY3Rpb25zIGFuZCB0aGUgbGFtYmRhIHN0YXRlbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHdyaXRpbmcgZnVuY3Rpb25hbC1zdHlsZSBwcm9ncmFtcywgeW91J2xsIG9mdGVuIG5lZWQgbGl0dGxlCitmdW5jdGlvbnMgdGhhdCBhY3QgYXMgcHJlZGljYXRlcyBvciB0aGF0IGNvbWJpbmUgZWxlbWVudHMgaW4gc29tZSB3YXkuCisKK0lmIHRoZXJlJ3MgYSBQeXRob24gYnVpbHQtaW4gb3IgYSBtb2R1bGUgZnVuY3Rpb24gdGhhdCdzIHN1aXRhYmxlLCB5b3UKK2Rvbid0IG5lZWQgdG8gZGVmaW5lIGEgbmV3IGZ1bmN0aW9uIGF0IGFsbDo6CisKKyAgICAgICAgc3RyaXBwZWRfbGluZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGxpbmVzXQorICAgICAgICBleGlzdGluZ19maWxlcyA9IGZpbHRlcihvcy5wYXRoLmV4aXN0cywgZmlsZV9saXN0KQorCitJZiB0aGUgZnVuY3Rpb24geW91IG5lZWQgZG9lc24ndCBleGlzdCwgeW91IG5lZWQgdG8gd3JpdGUgaXQuICBPbmUgd2F5Cit0byB3cml0ZSBzbWFsbCBmdW5jdGlvbnMgaXMgdG8gdXNlIHRoZSBgYGxhbWJkYWBgIHN0YXRlbWVudC4gIGBgbGFtYmRhYGAKK3Rha2VzIGEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYW5kIGFuIGV4cHJlc3Npb24gY29tYmluaW5nIHRoZXNlIHBhcmFtZXRlcnMsCithbmQgY3JlYXRlcyBhIHNtYWxsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb246OgorCisgICAgICAgIGxvd2VyY2FzZSA9IGxhbWJkYSB4OiB4Lmxvd2VyKCkKKworICAgICAgICBwcmludF9hc3NpZ24gPSBsYW1iZGEgbmFtZSwgdmFsdWU6IG5hbWUgKyAnPScgKyBzdHIodmFsdWUpCisKKyAgICAgICAgYWRkZXIgPSBsYW1iZGEgeCwgeTogeCt5CisKK0FuIGFsdGVybmF0aXZlIGlzIHRvIGp1c3QgdXNlIHRoZSBgYGRlZmBgIHN0YXRlbWVudCBhbmQgZGVmaW5lIGEKK2Z1bmN0aW9uIGluIHRoZSB1c3VhbCB3YXk6OgorCisgICAgICAgIGRlZiBsb3dlcmNhc2UoeCk6CisgICAgICAgICAgICByZXR1cm4geC5sb3dlcigpCisKKyAgICAgICAgZGVmIHByaW50X2Fzc2lnbihuYW1lLCB2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gbmFtZSArICc9JyArIHN0cih2YWx1ZSkKKworICAgICAgICBkZWYgYWRkZXIoeCx5KToKKyAgICAgICAgICAgIHJldHVybiB4ICsgeQorCitXaGljaCBhbHRlcm5hdGl2ZSBpcyBwcmVmZXJhYmxlPyAgVGhhdCdzIGEgc3R5bGUgcXVlc3Rpb247IG15IHVzdWFsCitjb3Vyc2UgaXMgdG8gYXZvaWQgdXNpbmcgYGBsYW1iZGFgYC4KKworT25lIHJlYXNvbiBmb3IgbXkgcHJlZmVyZW5jZSBpcyB0aGF0IGBgbGFtYmRhYGAgaXMgcXVpdGUgbGltaXRlZCBpbgordGhlIGZ1bmN0aW9ucyBpdCBjYW4gZGVmaW5lLiAgVGhlIHJlc3VsdCBoYXMgdG8gYmUgY29tcHV0YWJsZSBhcyBhCitzaW5nbGUgZXhwcmVzc2lvbiwgd2hpY2ggbWVhbnMgeW91IGNhbid0IGhhdmUgbXVsdGl3YXkKK2BgaWYuLi4gZWxpZi4uLiBlbHNlYGAgY29tcGFyaXNvbnMgb3IgYGB0cnkuLi4gZXhjZXB0YGAgc3RhdGVtZW50cy4KK0lmIHlvdSB0cnkgdG8gZG8gdG9vIG11Y2ggaW4gYSBgYGxhbWJkYWBgIHN0YXRlbWVudCwgeW91J2xsIGVuZCB1cAord2l0aCBhbiBvdmVybHkgY29tcGxpY2F0ZWQgZXhwcmVzc2lvbiB0aGF0J3MgaGFyZCB0byByZWFkLiAgUXVpY2ssCit3aGF0J3MgdGhlIGZvbGxvd2luZyBjb2RlIGRvaW5nPworCis6OgorCisgICAgdG90YWwgPSByZWR1Y2UobGFtYmRhIGEsIGI6ICgwLCBhWzFdICsgYlsxXSksIGl0ZW1zKVsxXQorCitZb3UgY2FuIGZpZ3VyZSBpdCBvdXQsIGJ1dCBpdCB0YWtlcyB0aW1lIHRvIGRpc2VudGFuZ2xlIHRoZSBleHByZXNzaW9uCit0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gIFVzaW5nIGEgc2hvcnQgbmVzdGVkCitgYGRlZmBgIHN0YXRlbWVudHMgbWFrZXMgdGhpbmdzIGEgbGl0dGxlIGJpdCBiZXR0ZXI6OgorCisgICAgZGVmIGNvbWJpbmUgKGEsIGIpOgorICAgICAgICByZXR1cm4gMCwgYVsxXSArIGJbMV0KKworICAgIHRvdGFsID0gcmVkdWNlKGNvbWJpbmUsIGl0ZW1zKVsxXQorCitCdXQgaXQgd291bGQgYmUgYmVzdCBvZiBhbGwgaWYgSSBoYWQgc2ltcGx5IHVzZWQgYSBgYGZvcmBgIGxvb3A6OgorCisgICAgIHRvdGFsID0gMAorICAgICBmb3IgYSwgYiBpbiBpdGVtczoKKyAgICAgICAgIHRvdGFsICs9IGIKKworT3IgdGhlIGBgc3VtKClgYCBidWlsdC1pbiBhbmQgYSBnZW5lcmF0b3IgZXhwcmVzc2lvbjo6CisKKyAgICAgdG90YWwgPSBzdW0oYiBmb3IgYSxiIGluIGl0ZW1zKQorCitNYW55IHVzZXMgb2YgYGByZWR1Y2UoKWBgIGFyZSBjbGVhcmVyIHdoZW4gd3JpdHRlbiBhcyBgYGZvcmBgIGxvb3BzLgorCitGcmVkcmlrIEx1bmRoIG9uY2Ugc3VnZ2VzdGVkIHRoZSBmb2xsb3dpbmcgc2V0IG9mIHJ1bGVzIGZvciByZWZhY3RvcmluZyAKK3VzZXMgb2YgYGBsYW1iZGFgYDoKKworMSkgV3JpdGUgYSBsYW1iZGEgZnVuY3Rpb24uCisyKSBXcml0ZSBhIGNvbW1lbnQgZXhwbGFpbmluZyB3aGF0IHRoZSBoZWNrIHRoYXQgbGFtYmRhIGRvZXMuCiszKSBTdHVkeSB0aGUgY29tbWVudCBmb3IgYSB3aGlsZSwgYW5kIHRoaW5rIG9mIGEgbmFtZSB0aGF0IGNhcHR1cmVzCisgICB0aGUgZXNzZW5jZSBvZiB0aGUgY29tbWVudC4KKzQpIENvbnZlcnQgdGhlIGxhbWJkYSB0byBhIGRlZiBzdGF0ZW1lbnQsIHVzaW5nIHRoYXQgbmFtZS4KKzUpIFJlbW92ZSB0aGUgY29tbWVudC4KKworSSByZWFsbHkgbGlrZSB0aGVzZSBydWxlcywgYnV0IHlvdSdyZSBmcmVlIHRvIGRpc2FncmVlIHRoYXQgdGhpcyAKK2xhbWJkYS1mcmVlIHN0eWxlIGlzIGJldHRlci4KKworCitUaGUgaXRlcnRvb2xzIG1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGBgaXRlcnRvb2xzYGAgbW9kdWxlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIGNvbW1vbmx5LXVzZWQgaXRlcmF0b3JzCithcyB3ZWxsIGFzIGZ1bmN0aW9ucyBmb3IgY29tYmluaW5nIHNldmVyYWwgaXRlcmF0b3JzLiAgVGhpcyBzZWN0aW9uCit3aWxsIGludHJvZHVjZSB0aGUgbW9kdWxlJ3MgY29udGVudHMgYnkgc2hvd2luZyBzbWFsbCBleGFtcGxlcy4KKworVGhlIG1vZHVsZSdzIGZ1bmN0aW9ucyBmYWxsIGludG8gYSBmZXcgYnJvYWQgY2xhc3NlczoKKworKiBGdW5jdGlvbnMgdGhhdCBjcmVhdGUgYSBuZXcgaXRlcmF0b3IgYmFzZWQgb24gYW4gZXhpc3RpbmcgaXRlcmF0b3IuCisqIEZ1bmN0aW9ucyBmb3IgdHJlYXRpbmcgYW4gaXRlcmF0b3IncyBlbGVtZW50cyBhcyBmdW5jdGlvbiBhcmd1bWVudHMuCisqIEZ1bmN0aW9ucyBmb3Igc2VsZWN0aW5nIHBvcnRpb25zIG9mIGFuIGl0ZXJhdG9yJ3Mgb3V0cHV0LgorKiBBIGZ1bmN0aW9uIGZvciBncm91cGluZyBhbiBpdGVyYXRvcidzIG91dHB1dC4KKworQ3JlYXRpbmcgbmV3IGl0ZXJhdG9ycworJycnJycnJycnJycnJycnJycnJycnJworCitgYGl0ZXJ0b29scy5jb3VudChuKWBgIHJldHVybnMgYW4gaW5maW5pdGUgc3RyZWFtIG9mCitpbnRlZ2VycywgaW5jcmVhc2luZyBieSAxIGVhY2ggdGltZS4gIFlvdSBjYW4gb3B0aW9uYWxseSBzdXBwbHkgdGhlCitzdGFydGluZyBudW1iZXIsIHdoaWNoIGRlZmF1bHRzIHRvIDA6OgorCisgICAgICAgIGl0ZXJ0b29scy5jb3VudCgpID0+CisgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLi4uCisgICAgICAgIGl0ZXJ0b29scy5jb3VudCgxMCkgPT4KKyAgICAgICAgICAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgLi4uCisKK2BgaXRlcnRvb2xzLmN5Y2xlKGl0ZXIpYGAgc2F2ZXMgYSBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiBhIHByb3ZpZGVkCitpdGVyYWJsZSBhbmQgcmV0dXJucyBhIG5ldyBpdGVyYXRvciB0aGF0IHJldHVybnMgaXRzIGVsZW1lbnRzIGZyb20KK2ZpcnN0IHRvIGxhc3QuICBUaGUgbmV3IGl0ZXJhdG9yIHdpbGwgcmVwZWF0IHRoZXNlIGVsZW1lbnRzIGluZmluaXRlbHkuCisKKzo6CisKKyAgICAgICAgaXRlcnRvb2xzLmN5Y2xlKFsxLDIsMyw0LDVdKSA9PgorICAgICAgICAgIDEsIDIsIDMsIDQsIDUsIDEsIDIsIDMsIDQsIDUsIC4uLgorCitgYGl0ZXJ0b29scy5yZXBlYXQoZWxlbSwgW25dKWBgIHJldHVybnMgdGhlIHByb3ZpZGVkIGVsZW1lbnQgYGBuYGAKK3RpbWVzLCBvciByZXR1cm5zIHRoZSBlbGVtZW50IGVuZGxlc3NseSBpZiBgYG5gYCBpcyBub3QgcHJvdmlkZWQuCisKKzo6CisKKyAgICBpdGVydG9vbHMucmVwZWF0KCdhYmMnKSA9PgorICAgICAgYWJjLCBhYmMsIGFiYywgYWJjLCBhYmMsIGFiYywgYWJjLCBhYmMsIGFiYywgYWJjLCAuLi4KKyAgICBpdGVydG9vbHMucmVwZWF0KCdhYmMnLCA1KSA9PgorICAgICAgYWJjLCBhYmMsIGFiYywgYWJjLCBhYmMKKworYGBpdGVydG9vbHMuY2hhaW4oaXRlckEsIGl0ZXJCLCAuLi4pYGAgdGFrZXMgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgoraXRlcmFibGVzIGFzIGlucHV0LCBhbmQgcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBmaXJzdAoraXRlcmF0b3IsIHRoZW4gYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgc2Vjb25kLCBhbmQgc28gb24sIHVudGlsIGFsbCBvZgordGhlIGl0ZXJhYmxlcyBoYXZlIGJlZW4gZXhoYXVzdGVkLgorCis6OgorCisgICAgaXRlcnRvb2xzLmNoYWluKFsnYScsICdiJywgJ2MnXSwgKDEsIDIsIDMpKSA9PgorICAgICAgYSwgYiwgYywgMSwgMiwgMworCitgYGl0ZXJ0b29scy5pemlwKGl0ZXJBLCBpdGVyQiwgLi4uKWBgIHRha2VzIG9uZSBlbGVtZW50IGZyb20gZWFjaCBpdGVyYWJsZQorYW5kIHJldHVybnMgdGhlbSBpbiBhIHR1cGxlOjoKKworICAgIGl0ZXJ0b29scy5pemlwKFsnYScsICdiJywgJ2MnXSwgKDEsIDIsIDMpKSA9PgorICAgICAgKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKQorCitJdCdzIHNpbWlsaWFyIHRvIHRoZSBidWlsdC1pbiBgYHppcCgpYGAgZnVuY3Rpb24sIGJ1dCBkb2Vzbid0Citjb25zdHJ1Y3QgYW4gaW4tbWVtb3J5IGxpc3QgYW5kIGV4aGF1c3QgYWxsIHRoZSBpbnB1dCBpdGVyYXRvcnMgYmVmb3JlCityZXR1cm5pbmc7IGluc3RlYWQgdHVwbGVzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgcmV0dXJuZWQgb25seSBpZiB0aGV5J3JlCityZXF1ZXN0ZWQuICAoVGhlIHRlY2huaWNhbCB0ZXJtIGZvciB0aGlzIGJlaGF2aW91ciBpcyAKK2BsYXp5IGV2YWx1YXRpb24gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF6eV9ldmFsdWF0aW9uPmBfXy4pCisKK1RoaXMgaXRlcmF0b3IgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIGl0ZXJhYmxlcyB0aGF0IGFyZSBhbGwgb2YKK3RoZSBzYW1lIGxlbmd0aC4gIElmIHRoZSBpdGVyYWJsZXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLCB0aGUKK3Jlc3VsdGluZyBzdHJlYW0gd2lsbCBiZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNob3J0ZXN0IGl0ZXJhYmxlLgorCis6OgorCisgICAgaXRlcnRvb2xzLml6aXAoWydhJywgJ2InXSwgKDEsIDIsIDMpKSA9PgorICAgICAgKCdhJywgMSksICgnYicsIDIpCisKK1lvdSBzaG91bGQgYXZvaWQgZG9pbmcgdGhpcywgdGhvdWdoLCBiZWNhdXNlIGFuIGVsZW1lbnQgbWF5IGJlIHRha2VuCitmcm9tIHRoZSBsb25nZXIgaXRlcmF0b3JzIGFuZCBkaXNjYXJkZWQuICBUaGlzIG1lYW5zIHlvdSBjYW4ndCBnbyBvbgordG8gdXNlIHRoZSBpdGVyYXRvcnMgZnVydGhlciBiZWNhdXNlIHlvdSByaXNrIHNraXBwaW5nIGEgZGlzY2FyZGVkCitlbGVtZW50LgorCitgYGl0ZXJ0b29scy5pc2xpY2UoaXRlciwgW3N0YXJ0XSwgc3RvcCwgW3N0ZXBdKWBgIHJldHVybnMgYSBzdHJlYW0KK3RoYXQncyBhIHNsaWNlIG9mIHRoZSBpdGVyYXRvci4gIFdpdGggYSBzaW5nbGUgYGBzdG9wYGAgYXJndW1lbnQsIAoraXQgd2lsbCByZXR1cm4gdGhlIGZpcnN0IGBgc3RvcGBgCitlbGVtZW50cy4gIElmIHlvdSBzdXBwbHkgYSBzdGFydGluZyBpbmRleCwgeW91J2xsIGdldCBgYHN0b3Atc3RhcnRgYAorZWxlbWVudHMsIGFuZCBpZiB5b3Ugc3VwcGx5IGEgdmFsdWUgZm9yIGBgc3RlcGAsIGVsZW1lbnRzIHdpbGwgYmUKK3NraXBwZWQgYWNjb3JkaW5nbHkuICBVbmxpa2UgUHl0aG9uJ3Mgc3RyaW5nIGFuZCBsaXN0IHNsaWNpbmcsIHlvdQorY2FuJ3QgdXNlIG5lZ2F0aXZlIHZhbHVlcyBmb3IgYGBzdGFydGBgLCBgYHN0b3BgYCwgb3IgYGBzdGVwYGAuCisKKzo6CisKKyAgICBpdGVydG9vbHMuaXNsaWNlKHJhbmdlKDEwKSwgOCkgPT4KKyAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcKKyAgICBpdGVydG9vbHMuaXNsaWNlKHJhbmdlKDEwKSwgMiwgOCkgPT4KKyAgICAgIDIsIDMsIDQsIDUsIDYsIDcKKyAgICBpdGVydG9vbHMuaXNsaWNlKHJhbmdlKDEwKSwgMiwgOCwgMikgPT4KKyAgICAgIDIsIDQsIDYKKworYGBpdGVydG9vbHMudGVlKGl0ZXIsIFtuXSlgYCByZXBsaWNhdGVzIGFuIGl0ZXJhdG9yOyBpdCByZXR1cm5zIGBgbmBgCitpbmRlcGVuZGVudCBpdGVyYXRvcnMgdGhhdCB3aWxsIGFsbCByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UKK2l0ZXJhdG9yLiAgSWYgeW91IGRvbid0IHN1cHBseSBhIHZhbHVlIGZvciBgYG5gYCwgdGhlIGRlZmF1bHQgaXMgMi4KK1JlcGxpY2F0aW5nIGl0ZXJhdG9ycyByZXF1aXJlcyBzYXZpbmcgc29tZSBvZiB0aGUgY29udGVudHMgb2YgdGhlIHNvdXJjZQoraXRlcmF0b3IsIHNvIHRoaXMgY2FuIGNvbnN1bWUgc2lnbmlmaWNhbnQgbWVtb3J5IGlmIHRoZSBpdGVyYXRvciBpcyBsYXJnZQorYW5kIG9uZSBvZiB0aGUgbmV3IGl0ZXJhdG9ycyBpcyBjb25zdW1lZCBtb3JlIHRoYW4gdGhlIG90aGVycy4KKworOjoKKworICAgICAgICBpdGVydG9vbHMudGVlKCBpdGVydG9vbHMuY291bnQoKSApID0+CisgICAgICAgICAgIGl0ZXJBLCBpdGVyQgorCisgICAgICAgIHdoZXJlIGl0ZXJBIC0+CisgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC4uLgorCisgICAgICAgIGFuZCAgIGl0ZXJCIC0+CisgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC4uLgorCisKK0NhbGxpbmcgZnVuY3Rpb25zIG9uIGVsZW1lbnRzCisnJycnJycnJycnJycnJycnJycnJycnJycnJycnJworCitUd28gZnVuY3Rpb25zIGFyZSB1c2VkIGZvciBjYWxsaW5nIG90aGVyIGZ1bmN0aW9ucyBvbiB0aGUgY29udGVudHMgb2YgYW4KK2l0ZXJhYmxlLgorCitgYGl0ZXJ0b29scy5pbWFwKGYsIGl0ZXJBLCBpdGVyQiwgLi4uKWBgIHJldHVybnMgCithIHN0cmVhbSBjb250YWluaW5nIGBgZihpdGVyQVswXSwgaXRlckJbMF0pLCBmKGl0ZXJBWzFdLCBpdGVyQlsxXSksCitmKGl0ZXJBWzJdLCBpdGVyQlsyXSksIC4uLmBgOjoKKworICAgIGl0ZXJ0b29scy5pbWFwKG9wZXJhdG9yLmFkZCwgWzUsIDYsIDVdLCBbMSwgMiwgM10pID0+CisgICAgICA2LCA4LCA4CisKK1RoZSBgYG9wZXJhdG9yYGAgbW9kdWxlIGNvbnRhaW5zIGEgc2V0IG9mIGZ1bmN0aW9ucyAKK2NvcnJlc3BvbmRpbmcgdG8gUHl0aG9uJ3Mgb3BlcmF0b3JzLiAgU29tZSBleGFtcGxlcyBhcmUgCitgYG9wZXJhdG9yLmFkZChhLCBiKWBgIChhZGRzIHR3byB2YWx1ZXMpLCAKK2Bgb3BlcmF0b3IubmUoYSwgYilgYCAoc2FtZSBhcyBgYGEhPWJgYCksCithbmQgCitgYG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ2lkJylgYCAocmV0dXJucyBhIGNhbGxhYmxlIHRoYXQKK2ZldGNoZXMgdGhlIGBgImlkImBgIGF0dHJpYnV0ZSkuCisKK2BgaXRlcnRvb2xzLnN0YXJtYXAoZnVuYywgaXRlcilgYCBhc3N1bWVzIHRoYXQgdGhlIGl0ZXJhYmxlIHdpbGwgCityZXR1cm4gYSBzdHJlYW0gb2YgdHVwbGVzLCBhbmQgY2FsbHMgYGBmKClgYCB1c2luZyB0aGVzZSB0dXBsZXMgYXMgdGhlIAorYXJndW1lbnRzOjoKKworICAgIGl0ZXJ0b29scy5zdGFybWFwKG9zLnBhdGguam9pbiwgCisgICAgICAgICAgICAgICAgICAgICAgWygnL3VzcicsICdiaW4nLCAnamF2YScpLCAoJy9iaW4nLCAncHl0aG9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnL3VzcicsICdiaW4nLCAncGVybCcpLCgnL3VzcicsICdiaW4nLCAncnVieScpXSkKKyAgICA9PgorICAgICAgL3Vzci9iaW4vamF2YSwgL2Jpbi9weXRob24sIC91c3IvYmluL3BlcmwsIC91c3IvYmluL3J1YnkKKworCitTZWxlY3RpbmcgZWxlbWVudHMKKycnJycnJycnJycnJycnJycnJworCitBbm90aGVyIGdyb3VwIG9mIGZ1bmN0aW9ucyBjaG9vc2VzIGEgc3Vic2V0IG9mIGFuIGl0ZXJhdG9yJ3MgZWxlbWVudHMKK2Jhc2VkIG9uIGEgcHJlZGljYXRlLgorCitgYGl0ZXJ0b29scy5pZmlsdGVyKHByZWRpY2F0ZSwgaXRlcilgYCByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgZm9yCit3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgdHJ1ZTo6CisKKyAgICBkZWYgaXNfZXZlbih4KToKKyAgICAgICAgcmV0dXJuICh4ICUgMikgPT0gMAorCisgICAgaXRlcnRvb2xzLmlmaWx0ZXIoaXNfZXZlbiwgaXRlcnRvb2xzLmNvdW50KCkpID0+CisgICAgICAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAuLi4KKworYGBpdGVydG9vbHMuaWZpbHRlcmZhbHNlKHByZWRpY2F0ZSwgaXRlcilgYCBpcyB0aGUgb3Bwb3NpdGUsIAorcmV0dXJuaW5nIGFsbCBlbGVtZW50cyBmb3Igd2hpY2ggdGhlIHByZWRpY2F0ZSByZXR1cm5zIGZhbHNlOjoKKworICAgIGl0ZXJ0b29scy5pZmlsdGVyZmFsc2UoaXNfZXZlbiwgaXRlcnRvb2xzLmNvdW50KCkpID0+CisgICAgICAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAuLi4KKworYGBpdGVydG9vbHMudGFrZXdoaWxlKHByZWRpY2F0ZSwgaXRlcilgYCByZXR1cm5zIGVsZW1lbnRzIGZvciBhcyBsb25nCithcyB0aGUgcHJlZGljYXRlIHJldHVybnMgdHJ1ZS4gIE9uY2UgdGhlIHByZWRpY2F0ZSByZXR1cm5zIGZhbHNlLCAKK3RoZSBpdGVyYXRvciB3aWxsIHNpZ25hbCB0aGUgZW5kIG9mIGl0cyByZXN1bHRzLgorCis6OgorCisgICAgZGVmIGxlc3NfdGhhbl8xMCh4KToKKyAgICAgICAgcmV0dXJuICh4IDwgMTApCisKKyAgICBpdGVydG9vbHMudGFrZXdoaWxlKGxlc3NfdGhhbl8xMCwgaXRlcnRvb2xzLmNvdW50KCkpID0+CisgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5CisKKyAgICBpdGVydG9vbHMudGFrZXdoaWxlKGlzX2V2ZW4sIGl0ZXJ0b29scy5jb3VudCgpKSA9PgorICAgICAgMAorCitgYGl0ZXJ0b29scy5kcm9wd2hpbGUocHJlZGljYXRlLCBpdGVyKWBgIGRpc2NhcmRzIGVsZW1lbnRzIHdoaWxlIHRoZQorcHJlZGljYXRlIHJldHVybnMgdHJ1ZSwgYW5kIHRoZW4gcmV0dXJucyB0aGUgcmVzdCBvZiB0aGUgaXRlcmFibGUncworcmVzdWx0cy4KKworOjoKKworICAgIGl0ZXJ0b29scy5kcm9wd2hpbGUobGVzc190aGFuXzEwLCBpdGVydG9vbHMuY291bnQoKSkgPT4KKyAgICAgIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAuLi4KKworICAgIGl0ZXJ0b29scy5kcm9wd2hpbGUoaXNfZXZlbiwgaXRlcnRvb2xzLmNvdW50KCkpID0+CisgICAgICAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgLi4uCisKKworR3JvdXBpbmcgZWxlbWVudHMKKycnJycnJycnJycnJycnJycnCisKK1RoZSBsYXN0IGZ1bmN0aW9uIEknbGwgZGlzY3VzcywgYGBpdGVydG9vbHMuZ3JvdXBieShpdGVyLAora2V5X2Z1bmM9Tm9uZSlgYCwgaXMgdGhlIG1vc3QgY29tcGxpY2F0ZWQuICBgYGtleV9mdW5jKGVsZW0pYGAgaXMgYQorZnVuY3Rpb24gdGhhdCBjYW4gY29tcHV0ZSBhIGtleSB2YWx1ZSBmb3IgZWFjaCBlbGVtZW50IHJldHVybmVkIGJ5IHRoZQoraXRlcmFibGUuICBJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEga2V5IGZ1bmN0aW9uLCB0aGUga2V5IGlzIHNpbXBseSBlYWNoCitlbGVtZW50IGl0c2VsZi4KKworYGBncm91cGJ5KClgYCBjb2xsZWN0cyBhbGwgdGhlIGNvbnNlY3V0aXZlIGVsZW1lbnRzIGZyb20gdGhlCit1bmRlcmx5aW5nIGl0ZXJhYmxlIHRoYXQgaGF2ZSB0aGUgc2FtZSBrZXkgdmFsdWUsIGFuZCByZXR1cm5zIGEgc3RyZWFtCitvZiAyLXR1cGxlcyBjb250YWluaW5nIGEga2V5IHZhbHVlIGFuZCBhbiBpdGVyYXRvciBmb3IgdGhlIGVsZW1lbnRzCit3aXRoIHRoYXQga2V5LiAgCisKKzo6CisKKyAgICBjaXR5X2xpc3QgPSBbKCdEZWNhdHVyJywgJ0FMJyksICgnSHVudHN2aWxsZScsICdBTCcpLCAoJ1NlbG1hJywgJ0FMJyksIAorICAgICAgICAgICAgICAgICAoJ0FuY2hvcmFnZScsICdBSycpLCAoJ05vbWUnLCAnQUsnKSwKKyAgICAgICAgICAgICAgICAgKCdGbGFnc3RhZmYnLCAnQVonKSwgKCdQaG9lbml4JywgJ0FaJyksICgnVHVjc29uJywgJ0FaJyksIAorICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICBdCisKKyAgICBkZWYgZ2V0X3N0YXRlICgoY2l0eSwgc3RhdGUpKToKKyAgICAgICAgcmV0dXJuIHN0YXRlCisKKyAgICBpdGVydG9vbHMuZ3JvdXBieShjaXR5X2xpc3QsIGdldF9zdGF0ZSkgPT4KKyAgICAgICgnQUwnLCBpdGVyYXRvci0xKSwKKyAgICAgICgnQUsnLCBpdGVyYXRvci0yKSwKKyAgICAgICgnQVonLCBpdGVyYXRvci0zKSwgLi4uCisKKyAgICB3aGVyZQorICAgIGl0ZXJhdG9yLTEgPT4KKyAgICAgICgnRGVjYXR1cicsICdBTCcpLCAoJ0h1bnRzdmlsbGUnLCAnQUwnKSwgKCdTZWxtYScsICdBTCcpCisgICAgaXRlcmF0b3ItMiA9PiAKKyAgICAgICgnQW5jaG9yYWdlJywgJ0FLJyksICgnTm9tZScsICdBSycpCisgICAgaXRlcmF0b3ItMyA9PgorICAgICAgKCdGbGFnc3RhZmYnLCAnQVonKSwgKCdQaG9lbml4JywgJ0FaJyksICgnVHVjc29uJywgJ0FaJykKKworYGBncm91cGJ5KClgYCBhc3N1bWVzIHRoYXQgdGhlIHVuZGVybHlpbmcgaXRlcmFibGUncyBjb250ZW50cyB3aWxsCithbHJlYWR5IGJlIHNvcnRlZCBiYXNlZCBvbiB0aGUga2V5LiAgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBpdGVyYXRvcnMKK2Fsc28gdXNlIHRoZSB1bmRlcmx5aW5nIGl0ZXJhYmxlLCBzbyB5b3UgaGF2ZSB0byBjb25zdW1lIHRoZSByZXN1bHRzCitvZiBpdGVyYXRvci0xIGJlZm9yZSByZXF1ZXN0aW5nIGl0ZXJhdG9yLTIgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGtleS4KKworCitUaGUgZnVuY3Rvb2xzIG1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYGBmdW5jdG9vbHNgYCBtb2R1bGUgaW4gUHl0aG9uIDIuNSBjb250YWlucyBzb21lIGhpZ2hlci1vcmRlcgorZnVuY3Rpb25zLiAgQSAqKmhpZ2hlci1vcmRlciBmdW5jdGlvbioqIHRha2VzIG9uZSBvciBtb3JlIGZ1bmN0aW9ucyBhcworaW5wdXQgYW5kIHJldHVybnMgYSBuZXcgZnVuY3Rpb24uICBUaGUgbW9zdCB1c2VmdWwgdG9vbCBpbiB0aGlzIG1vZHVsZQoraXMgdGhlIGBgcGFydGlhbCgpYGAgZnVuY3Rpb24uCisKK0ZvciBwcm9ncmFtcyB3cml0dGVuIGluIGEgZnVuY3Rpb25hbCBzdHlsZSwgeW91J2xsIHNvbWV0aW1lcyB3YW50IHRvCitjb25zdHJ1Y3QgdmFyaWFudHMgb2YgZXhpc3RpbmcgZnVuY3Rpb25zIHRoYXQgaGF2ZSBzb21lIG9mIHRoZQorcGFyYW1ldGVycyBmaWxsZWQgaW4uICBDb25zaWRlciBhIFB5dGhvbiBmdW5jdGlvbiBgYGYoYSwgYiwgYylgYDsgeW91CittYXkgd2lzaCB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gYGBnKGIsIGMpYGAgdGhhdCdzIGVxdWl2YWxlbnQgdG8KK2BgZigxLCBiLCBjKWBgOyB5b3UncmUgZmlsbGluZyBpbiBhIHZhbHVlIGZvciBvbmUgb2YgYGBmKClgYCdzIHBhcmFtZXRlcnMuICAKK1RoaXMgaXMgY2FsbGVkICJwYXJ0aWFsIGZ1bmN0aW9uIGFwcGxpY2F0aW9uIi4KKworVGhlIGNvbnN0cnVjdG9yIGZvciBgYHBhcnRpYWxgYCB0YWtlcyB0aGUgYXJndW1lbnRzIGBgKGZ1bmN0aW9uLCBhcmcxLAorYXJnMiwgLi4uIGt3YXJnMT12YWx1ZTEsIGt3YXJnMj12YWx1ZTIpYGAuICBUaGUgcmVzdWx0aW5nIG9iamVjdCBpcworY2FsbGFibGUsIHNvIHlvdSBjYW4ganVzdCBjYWxsIGl0IHRvIGludm9rZSBgYGZ1bmN0aW9uYGAgd2l0aCB0aGUKK2ZpbGxlZC1pbiBhcmd1bWVudHMuCisKK0hlcmUncyBhIHNtYWxsIGJ1dCByZWFsaXN0aWMgZXhhbXBsZTo6CisKKyAgICBpbXBvcnQgZnVuY3Rvb2xzCisKKyAgICBkZWYgbG9nIChtZXNzYWdlLCBzdWJzeXN0ZW0pOgorICAgICAgICAiV3JpdGUgdGhlIGNvbnRlbnRzIG9mICdtZXNzYWdlJyB0byB0aGUgc3BlY2lmaWVkIHN1YnN5c3RlbS4iCisgICAgICAgIHByaW50ICclczogJXMnICUgKHN1YnN5c3RlbSwgbWVzc2FnZSkKKyAgICAgICAgLi4uCisKKyAgICBzZXJ2ZXJfbG9nID0gZnVuY3Rvb2xzLnBhcnRpYWwobG9nLCBzdWJzeXN0ZW09J3NlcnZlcicpCisgICAgc2VydmVyX2xvZygnVW5hYmxlIHRvIG9wZW4gc29ja2V0JykKKworCitUaGUgb3BlcmF0b3IgbW9kdWxlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgYG9wZXJhdG9yYGAgbW9kdWxlIHdhcyBtZW50aW9uZWQgZWFybGllci4gIEl0IGNvbnRhaW5zIGEgc2V0IG9mCitmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0byBQeXRob24ncyBvcGVyYXRvcnMuICBUaGVzZSBmdW5jdGlvbnMgCithcmUgb2Z0ZW4gdXNlZnVsIGluIGZ1bmN0aW9uYWwtc3R5bGUgY29kZSBiZWNhdXNlIHRoZXkgc2F2ZSB5b3UgCitmcm9tIHdyaXRpbmcgdHJpdmlhbCBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGEgc2luZ2xlIG9wZXJhdGlvbi4KKworU29tZSBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIGFyZToKKworKiBNYXRoIG9wZXJhdGlvbnM6IGBgYWRkKClgYCwgYGBzdWIoKWBgLCBgYG11bCgpYGAsIGBgZGl2KClgYCwgYGBmbG9vcmRpdigpYGAsCisgIGBgYWJzKClgYCwgLi4uCisqIExvZ2ljYWwgb3BlcmF0aW9uczogYGBub3RfKClgYCwgYGB0cnV0aCgpYGAuCisqIEJpdHdpc2Ugb3BlcmF0aW9uczogYGBhbmRfKClgYCwgYGBvcl8oKWBgLCBgYGludmVydCgpYGAuCisqIENvbXBhcmlzb25zOiBgYGVxKClgYCwgYGBuZSgpYGAsIGBgbHQoKWBgLCBgYGxlKClgYCwgYGBndCgpYGAsIGFuZCBgYGdlKClgYC4KKyogT2JqZWN0IGlkZW50aXR5OiBgYGlzXygpYGAsIGBgaXNfbm90KClgYC4KKworQ29uc3VsdCBgdGhlIG9wZXJhdG9yIG1vZHVsZSdzIGRvY3VtZW50YXRpb24gPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGliL21vZHVsZS1vcGVyYXRvci5odG1sPmBfXyBmb3IgYSBjb21wbGV0ZQorbGlzdC4KKworCisKK1RoZSBmdW5jdGlvbmFsIG1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbGxpbiBXaW50ZXIncyBgZnVuY3Rpb25hbCBtb2R1bGUgPGh0dHA6Ly9vYWt3aW50ZXIuY29tL2NvZGUvZnVuY3Rpb25hbC8+YF9fIAorcHJvdmlkZXMgYSBudW1iZXIgb2YgbW9yZQorYWR2YW5jZWQgdG9vbHMgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuIEl0IGFsc28gcmVpbXBsZW1lbnRzCitzZXZlcmFsIFB5dGhvbiBidWlsdC1pbnMsIHRyeWluZyB0byBtYWtlIHRoZW0gbW9yZSBpbnR1aXRpdmUgdG8gdGhvc2UKK3VzZWQgdG8gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbiBvdGhlciBsYW5ndWFnZXMuCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBhbiBpbnRyb2R1Y3Rpb24gdG8gc29tZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQKK2Z1bmN0aW9ucyBpbiBgYGZ1bmN0aW9uYWxgYDsgZnVsbCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBhdCBgdGhlCitwcm9qZWN0J3Mgd2Vic2l0ZSA8aHR0cDovL29ha3dpbnRlci5jb20vY29kZS9mdW5jdGlvbmFsL2RvY3VtZW50YXRpb24vPmBfXy4KKworYGBjb21wb3NlKG91dGVyLCBpbm5lciwgdW5wYWNrPUZhbHNlKWBgCisKK1RoZSBgYGNvbXBvc2UoKWBgIGZ1bmN0aW9uIGltcGxlbWVudHMgZnVuY3Rpb24gY29tcG9zaXRpb24uCitJbiBvdGhlciB3b3JkcywgaXQgcmV0dXJucyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBgYG91dGVyYGAgYW5kIGBgaW5uZXJgYCBjYWxsYWJsZXMsIHN1Y2gKK3RoYXQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGBgaW5uZXJgYCBpcyBmZWQgZGlyZWN0bHkgdG8gYGBvdXRlcmBgLiAgVGhhdCBpcywKKworOjoKKworICAgICAgICA+Pj4gZGVmIGFkZChhLCBiKToKKyAgICAgICAgLi4uICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgLi4uCisgICAgICAgID4+PiBkZWYgZG91YmxlKGEpOgorICAgICAgICAuLi4gICAgIHJldHVybiAyICogYQorICAgICAgICAuLi4KKyAgICAgICAgPj4+IGNvbXBvc2UoZG91YmxlLCBhZGQpKDUsIDYpCisgICAgICAgIDIyCisKK2lzIGVxdWl2YWxlbnQgdG8KKworOjoKKworICAgICAgICA+Pj4gZG91YmxlKGFkZCg1LCA2KSkKKyAgICAgICAgMjIKKyAgICAgICAgICAgICAgICAgICAgCitUaGUgYGB1bnBhY2tgYCBrZXl3b3JkIGlzIHByb3ZpZGVkIHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgUHl0aG9uIGZ1bmN0aW9ucyBhcmUgbm90IGFsd2F5cworYGZ1bGx5IGN1cnJpZWQgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Vycnlpbmc+YF9fLgorQnkgZGVmYXVsdCwgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgYGBpbm5lcmBgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgc2luZ2xlIG9iamVjdCBhbmQgdGhhdCB0aGUgYGBvdXRlcmBgCitmdW5jdGlvbiB3aWxsIHRha2UgYSBzaW5nbGUgYXJndW1lbnQuIFNldHRpbmcgdGhlIGBgdW5wYWNrYGAgYXJndW1lbnQgY2F1c2VzIGBgY29tcG9zZWBgIHRvIGV4cGVjdCBhCit0dXBsZSBmcm9tIGBgaW5uZXJgYCB3aGljaCB3aWxsIGJlIGV4cGFuZGVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGBvdXRlcmBgLiBQdXQgc2ltcGx5LAorCis6OgorCisgICAgICAgIGNvbXBvc2UoZiwgZykoNSwgNikKKyAgICAgICAgICAgICAgICAgICAgCitpcyBlcXVpdmFsZW50IHRvOjoKKworICAgICAgICBmKGcoNSwgNikpCisgICAgICAgICAgICAgICAgICAgIAord2hpbGUKKworOjoKKworICAgICAgICBjb21wb3NlKGYsIGcsIHVucGFjaz1UcnVlKSg1LCA2KQorICAgICAgICAgICAgICAgICAgICAKK2lzIGVxdWl2YWxlbnQgdG86OgorCisgICAgICAgIGYoKmcoNSwgNikpCisKK0V2ZW4gdGhvdWdoIGBgY29tcG9zZSgpYGAgb25seSBhY2NlcHRzIHR3byBmdW5jdGlvbnMsIGl0J3MgdHJpdmlhbCB0bworYnVpbGQgdXAgYSB2ZXJzaW9uIHRoYXQgd2lsbCBjb21wb3NlIGFueSBudW1iZXIgb2YgZnVuY3Rpb25zLiBXZSdsbAordXNlIGBgcmVkdWNlKClgYCwgYGBjb21wb3NlKClgYCBhbmQgYGBwYXJ0aWFsKClgYCAodGhlIGxhc3Qgb2Ygd2hpY2gKK2lzIHByb3ZpZGVkIGJ5IGJvdGggYGBmdW5jdGlvbmFsYGAgYW5kIGBgZnVuY3Rvb2xzYGApLgorCis6OgorCisgICAgICAgIGZyb20gZnVuY3Rpb25hbCBpbXBvcnQgY29tcG9zZSwgcGFydGlhbAorICAgICAgICAKKyAgICAgICAgbXVsdGlfY29tcG9zZSA9IHBhcnRpYWwocmVkdWNlLCBjb21wb3NlKQorICAgICAgICAKKyAgICAKK1dlIGNhbiBhbHNvIHVzZSBgYG1hcCgpYGAsIGBgY29tcG9zZSgpYGAgYW5kIGBgcGFydGlhbCgpYGAgdG8gY3JhZnQgYQordmVyc2lvbiBvZiBgYCIiLmpvaW4oLi4uKWBgIHRoYXQgY29udmVydHMgaXRzIGFyZ3VtZW50cyB0byBzdHJpbmc6OgorCisgICAgICAgIGZyb20gZnVuY3Rpb25hbCBpbXBvcnQgY29tcG9zZSwgcGFydGlhbAorICAgICAgICAKKyAgICAgICAgam9pbiA9IGNvbXBvc2UoIiIuam9pbiwgcGFydGlhbChtYXAsIHN0cikpCisKKworYGBmbGlwKGZ1bmMpYGAKKyAgICAgICAgICAgICAgICAgICAgCitgYGZsaXAoKWBgIHdyYXBzIHRoZSBjYWxsYWJsZSBpbiBgYGZ1bmNgYCBhbmQgIAorY2F1c2VzIGl0IHRvIHJlY2VpdmUgaXRzIG5vbi1rZXl3b3JkIGFyZ3VtZW50cyBpbiByZXZlcnNlIG9yZGVyLgorCis6OgorCisgICAgICAgID4+PiBkZWYgdHJpcGxlKGEsIGIsIGMpOgorICAgICAgICAuLi4gICAgIHJldHVybiAoYSwgYiwgYykKKyAgICAgICAgLi4uCisgICAgICAgID4+PiB0cmlwbGUoNSwgNiwgNykKKyAgICAgICAgKDUsIDYsIDcpCisgICAgICAgID4+PgorICAgICAgICA+Pj4gZmxpcHBlZF90cmlwbGUgPSBmbGlwKHRyaXBsZSkKKyAgICAgICAgPj4+IGZsaXBwZWRfdHJpcGxlKDUsIDYsIDcpCisgICAgICAgICg3LCA2LCA1KQorCitgYGZvbGRsKGZ1bmMsIHN0YXJ0LCBpdGVyYWJsZSlgYAorICAgICAgICAgICAgICAgICAgICAKK2BgZm9sZGwoKWBgIHRha2VzIGEgYmluYXJ5IGZ1bmN0aW9uLCBhIHN0YXJ0aW5nIHZhbHVlICh1c3VhbGx5IHNvbWUga2luZCBvZiAnemVybycpLCBhbmQgYW4gaXRlcmFibGUuCitUaGUgZnVuY3Rpb24gaXMgYXBwbGllZCB0byB0aGUgc3RhcnRpbmcgdmFsdWUgYW5kIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBsaXN0LCB0aGVuIHRoZSByZXN1bHQgb2YKK3RoYXQgYW5kIHRoZSBzZWNvbmQgZWxlbWVudCBvZiB0aGUgbGlzdCwgdGhlbiB0aGUgcmVzdWx0IG9mIHRoYXQgYW5kIHRoZSB0aGlyZCBlbGVtZW50IG9mIHRoZSBsaXN0LAorYW5kIHNvIG9uLgorCitUaGlzIG1lYW5zIHRoYXQgYSBjYWxsIHN1Y2ggYXM6OgorCisgICAgICAgIGZvbGRsKGYsIDAsIFsxLCAyLCAzXSkKKworaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgICAgZihmKGYoMCwgMSksIDIpLCAzKQorCisgICAgCitgYGZvbGRsKClgYCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyByZWN1cnNpdmUgZnVuY3Rpb246OgorCisgICAgICAgIGRlZiBmb2xkbChmdW5jLCBzdGFydCwgc2VxKToKKyAgICAgICAgICAgIGlmIGxlbihzZXEpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0CisKKyAgICAgICAgICAgIHJldHVybiBmb2xkbChmdW5jLCBmdW5jKHN0YXJ0LCBzZXFbMF0pLCBzZXFbMTpdKQorCitTcGVha2luZyBvZiBlcXVpdmFsZW5jZSwgdGhlIGFib3ZlIGBgZm9sZGxgYCBjYWxsIGNhbiBiZSBleHByZXNzZWQgaW4gdGVybXMgb2YgdGhlIGJ1aWx0LWluIGBgcmVkdWNlYGAgbGlrZQorc286OgorCisgICAgICAgIHJlZHVjZShmLCBbMSwgMiwgM10sIDApCisKKworV2UgY2FuIHVzZSBgYGZvbGRsKClgYCwgYGBvcGVyYXRvci5jb25jYXQoKWBgIGFuZCBgYHBhcnRpYWwoKWBgIHRvCit3cml0ZSBhIGNsZWFuZXIsIG1vcmUgYWVzdGhldGljYWxseS1wbGVhc2luZyB2ZXJzaW9uIG9mIFB5dGhvbidzCitgYCIiLmpvaW4oLi4uKWBgIGlkaW9tOjoKKworICAgICAgICBmcm9tIGZ1bmN0aW9uYWwgaW1wb3J0IGZvbGRsLCBwYXJ0aWFsCisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGNvbmNhdAorICAgICAgICAKKyAgICAgICAgam9pbiA9IHBhcnRpYWwoZm9sZGwsIGNvbmNhdCwgIiIpCisKKworUmV2aXNpb24gSGlzdG9yeSBhbmQgQWNrbm93bGVkZ2VtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhdXRob3Igd291bGQgbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3Igb2ZmZXJpbmcKK3N1Z2dlc3Rpb25zLCBjb3JyZWN0aW9ucyBhbmQgYXNzaXN0YW5jZSB3aXRoIHZhcmlvdXMgZHJhZnRzIG9mIHRoaXMKK2FydGljbGU6IElhbiBCaWNraW5nLCBOaWNrIENvZ2hsYW4sIE5pY2sgRWZmb3JkLCBSYXltb25kIEhldHRpbmdlciwKK0ppbSBKZXdldHQsIE1pa2UgS3JlbGwsIExlYW5kcm8gTGFtZWlybywgSnVzc2kgU2FsbWVsYSwgCitDb2xsaW4gV2ludGVyLCBCbGFrZSBXaW50b24uCisKK1ZlcnNpb24gMC4xOiBwb3N0ZWQgSnVuZSAzMCAyMDA2LgorCitWZXJzaW9uIDAuMTE6IHBvc3RlZCBKdWx5IDEgMjAwNi4gIFR5cG8gZml4ZXMuCisKK1ZlcnNpb24gMC4yOiBwb3N0ZWQgSnVseSAxMCAyMDA2LiAgTWVyZ2VkIGdlbmV4cCBhbmQgbGlzdGNvbXAKK3NlY3Rpb25zIGludG8gb25lLiAgVHlwbyBmaXhlcy4KKworVmVyc2lvbiAwLjIxOiBBZGRlZCBtb3JlIHJlZmVyZW5jZXMgc3VnZ2VzdGVkIG9uIHRoZSB0dXRvciBtYWlsaW5nIGxpc3QuCisKK1ZlcnNpb24gMC4zMDogQWRkcyBhIHNlY3Rpb24gb24gdGhlIGBgZnVuY3Rpb25hbGBgIG1vZHVsZSB3cml0dGVuIGJ5CitDb2xsaW4gV2ludGVyOyBhZGRzIHNob3J0IHNlY3Rpb24gb24gdGhlIG9wZXJhdG9yIG1vZHVsZTsgYSBmZXcgb3RoZXIKK2VkaXRzLgorCisKK1JlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlbmVyYWwKKycnJycnJycnJycnJycnJworCisqKlN0cnVjdHVyZSBhbmQgSW50ZXJwcmV0YXRpb24gb2YgQ29tcHV0ZXIgUHJvZ3JhbXMqKiwgYnkgCitIYXJvbGQgQWJlbHNvbiBhbmQgR2VyYWxkIEpheSBTdXNzbWFuIHdpdGggSnVsaWUgU3Vzc21hbi4KK0Z1bGwgdGV4dCBhdCBodHRwOi8vbWl0cHJlc3MubWl0LmVkdS9zaWNwLy4KK0luIHRoaXMgY2xhc3NpYyB0ZXh0Ym9vayBvZiBjb21wdXRlciBzY2llbmNlLCAgY2hhcHRlcnMgMiBhbmQgMyBkaXNjdXNzIHRoZQordXNlIG9mIHNlcXVlbmNlcyBhbmQgc3RyZWFtcyB0byBvcmdhbml6ZSB0aGUgZGF0YSBmbG93IGluc2lkZSBhCitwcm9ncmFtLiAgVGhlIGJvb2sgdXNlcyBTY2hlbWUgZm9yIGl0cyBleGFtcGxlcywgYnV0IG1hbnkgb2YgdGhlCitkZXNpZ24gYXBwcm9hY2hlcyBkZXNjcmliZWQgaW4gdGhlc2UgY2hhcHRlcnMgYXJlIGFwcGxpY2FibGUgdG8KK2Z1bmN0aW9uYWwtc3R5bGUgUHl0aG9uIGNvZGUuCisKK2h0dHA6Ly93d3cuZGVmbWFjcm8ub3JnL3JhbWJsaW5ncy9mcC5odG1sOiBBIGdlbmVyYWwgCitpbnRyb2R1Y3Rpb24gdG8gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyB0aGF0IHVzZXMgSmF2YSBleGFtcGxlcworYW5kIGhhcyBhIGxlbmd0aHkgaGlzdG9yaWNhbCBpbnRyb2R1Y3Rpb24uCisKK2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnVuY3Rpb25hbF9wcm9ncmFtbWluZzoKK0dlbmVyYWwgV2lraXBlZGlhIGVudHJ5IGRlc2NyaWJpbmcgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KKworaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db3JvdXRpbmU6CitFbnRyeSBmb3IgY29yb3V0aW5lcy4KKworaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdXJyeWluZzoKK0VudHJ5IGZvciB0aGUgY29uY2VwdCBvZiBjdXJyeWluZy4KKworUHl0aG9uLXNwZWNpZmljCisnJycnJycnJycnJycnJycnJycnJycnJycnJycKKworaHR0cDovL2dub3Npcy5jeC9UUGlQLzoKK1RoZSBmaXJzdCBjaGFwdGVyIG9mIERhdmlkIE1lcnR6J3MgYm9vayA6dGl0bGUtcmVmZXJlbmNlOmBUZXh0IFByb2Nlc3NpbmcgaW4gUHl0aG9uYCAKK2Rpc2N1c3NlcyBmdW5jdGlvbmFsIHByb2dyYW1taW5nIGZvciB0ZXh0IHByb2Nlc3NpbmcsIGluIHRoZSBzZWN0aW9uIHRpdGxlZAorIlV0aWxpemluZyBIaWdoZXItT3JkZXIgRnVuY3Rpb25zIGluIFRleHQgUHJvY2Vzc2luZyIuCisKK01lcnR6IGFsc28gd3JvdGUgYSAzLXBhcnQgc2VyaWVzIG9mIGFydGljbGVzIG9uIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcKK2ZvciBJQk0ncyBEZXZlbG9wZXJXb3JrcyBzaXRlOyBzZWUgCitgcGFydCAxIDxodHRwOi8vd3d3LTEyOC5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpYnJhcnkvbC1wcm9nLmh0bWw+YF9fLAorYHBhcnQgMiA8aHR0cDovL3d3dy0xMjguaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saWJyYXJ5L2wtcHJvZzIuaHRtbD5gX18sIGFuZAorYHBhcnQgMyA8aHR0cDovL3d3dy0xMjguaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtcHJvZzMuaHRtbD5gX18sCisKKworUHl0aG9uIGRvY3VtZW50YXRpb24KKycnJycnJycnJycnJycnJycnJycnJycnJycnJworCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYi9tb2R1bGUtaXRlcnRvb2xzLmh0bWw6CitEb2N1bWVudGF0aW9uIGBgZm9yIHRoZSBpdGVydG9vbHNgYCBtb2R1bGUuCisKK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGliL21vZHVsZS1vcGVyYXRvci5odG1sOgorRG9jdW1lbnRhdGlvbiBgYGZvciB0aGUgb3BlcmF0b3JgYCBtb2R1bGUuCisKK2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDI4OS86CitQRVAgMjg5OiAiR2VuZXJhdG9yIEV4cHJlc3Npb25zIgorCitodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAzNDIvCitQRVAgMzQyOiAiQ29yb3V0aW5lcyB2aWEgRW5oYW5jZWQgR2VuZXJhdG9ycyIgZGVzY3JpYmVzIHRoZSBuZXcgZ2VuZXJhdG9yCitmZWF0dXJlcyBpbiBQeXRob24gMi41LgorCisuLiBjb21tZW50CisKKyAgICBUb3BpY3MgdG8gcGxhY2UKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgWFhYIG9zLndhbGsoKQorCisgICAgWFhYIE5lZWQgYSBsYXJnZSBleGFtcGxlLgorCisgICAgQnV0IHdpbGwgYW4gZXhhbXBsZSBhZGQgbXVjaD8gIEknbGwgcG9zdCBhIGZpcnN0IGRyYWZ0IGFuZCBzZWUKKyAgICB3aGF0IHRoZSBjb21tZW50cyBzYXkuCisKKy4uIGNvbW1lbnQKKworICAgIE9yaWdpbmFsIG91dGxpbmU6CisgICAgSW50cm9kdWN0aW9uCisgICAgICAgICAgICBJZGVhIG9mIEZQCisgICAgICAgICAgICAgICAgICAgIFByb2dyYW1zIGJ1aWx0IG91dCBvZiBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIGFyZSBzdHJpY3RseSBpbnB1dC1vdXRwdXQsIG5vIGludGVybmFsIHN0YXRlCisgICAgICAgICAgICBPcHBvc2VkIHRvIE9PIHByb2dyYW1taW5nLCB3aGVyZSBvYmplY3RzIGhhdmUgc3RhdGUKKworICAgICAgICAgICAgV2h5IEZQPworICAgICAgICAgICAgICAgICAgICBGb3JtYWwgcHJvdmFiaWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25tZW50IGlzIGRpZmZpY3VsdCB0byByZWFzb24gYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgdmVyeSByZWxldmFudCB0byBQeXRob24KKyAgICAgICAgICAgICAgICAgICAgTW9kdWxhcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNtYWxsIGZ1bmN0aW9ucyB0aGF0IGRvIG9uZSB0aGluZworICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dhYmlsaXR5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhc3kgdG8gdGVzdCBkdWUgdG8gbGFjayBvZiBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhc3kgdG8gdmVyaWZ5IG91dHB1dCBmcm9tIGludGVybWVkaWF0ZSBzdGVwcworICAgICAgICAgICAgICAgICAgICBDb21wb3NhYmlsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFzc2VtYmxlIGEgdG9vbGJveCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgbWl4ZWQKKworICAgIFRhY2tsaW5nIGEgcHJvYmxlbQorICAgICAgICAgICAgTmVlZCBhIHNpZ25pZmljYW50IGV4YW1wbGUKKworICAgIEl0ZXJhdG9ycworICAgIEdlbmVyYXRvcnMKKyAgICBUaGUgaXRlcnRvb2xzIG1vZHVsZQorICAgIExpc3QgY29tcHJlaGVuc2lvbnMKKyAgICBTbWFsbCBmdW5jdGlvbnMgYW5kIHRoZSBsYW1iZGEgc3RhdGVtZW50CisgICAgQnVpbHQtaW4gZnVuY3Rpb25zCisgICAgICAgICAgICBtYXAKKyAgICAgICAgICAgIGZpbHRlcgorICAgICAgICAgICAgcmVkdWNlCisKKy4uIGNvbW1lbnQKKworICAgIEhhbmR5IGxpdHRsZSBmdW5jdGlvbiBmb3IgcHJpbnRpbmcgcGFydCBvZiBhbiBpdGVyYXRvciAtLSB1c2VkCisgICAgd2hpbGUgd3JpdGluZyB0aGlzIGRvY3VtZW50LgorCisgICAgaW1wb3J0IGl0ZXJ0b29scworICAgIGRlZiBwcmludF9pdGVyKGl0KToKKyAgICAgICAgIHNsaWNlID0gaXRlcnRvb2xzLmlzbGljZShpdCwgMTApCisgICAgICAgICBmb3IgZWxlbSBpbiBzbGljZVs6LTFdOgorICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKGVsZW0pKQorICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJywgJykKKyAgICAgICAgcHJpbnQgZWxlbVstMV0KKworCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vcmVnZXgudGV4IGIvRG9jL2hvd3RvL3JlZ2V4LnRleAppbmRleCBmOTg2N2FlLi4zYzYzYjNhIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vcmVnZXgudGV4CisrKyBiL0RvYy9ob3d0by9yZWdleC50ZXgKQEAgLTM2Nyw3ICszNjcsNyBAQAogc3RyaW5ncywgYW5kIGRpc3BsYXlzIHdoZXRoZXIgdGhlIFJFIG1hdGNoZXMgb3IgZmFpbHMuCiBcZmlsZXtyZWRlbW8ucHl9IGNhbiBiZSBxdWl0ZSB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gZGVidWcgYQogY29tcGxpY2F0ZWQgUkUuICBQaGlsIFNjaHdhcnR6J3MKLVx1bGlua3tLb2Rvc317aHR0cDovL2tvZG9zLnNvdXJjZWZvcmdlLm5ldH0gaXMgYWxzbyBhbiBpbnRlcmFjdGl2ZQorXHVsaW5re0tvZG9zfXtodHRwOi8vd3d3LnBoaWwtc2Nod2FydHouY29tL2tvZG9zLnNweX0gaXMgYWxzbyBhbiBpbnRlcmFjdGl2ZQogdG9vbCBmb3IgZGV2ZWxvcGluZyBhbmQgdGVzdGluZyBSRSBwYXR0ZXJucy4gIFRoaXMgSE9XVE8gd2lsbCB1c2UgdGhlCiBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIgZm9yIGl0cyBleGFtcGxlcy4KIApkaWZmIC0tZ2l0IGEvRG9jL2luc3QvaW5zdC50ZXggYi9Eb2MvaW5zdC9pbnN0LnRleAppbmRleCBkZjdjNjU2Li42ZGIyMmFjIDEwMDY0NAotLS0gYS9Eb2MvaW5zdC9pbnN0LnRleAorKysgYi9Eb2MvaW5zdC9pbnN0LnRleApAQCAtNjMyLDcgKzYzMiw3IEBACiBpbnN0YWxsYXRpb24gYmFzZSBkaXJlY3Rvcnkgd2hlbiB5b3UgcnVuIHRoZSBzZXR1cCBzY3JpcHQuICBGb3IgZXhhbXBsZSwKIAogXGJlZ2lue3ZlcmJhdGltfQotcHl0aG9uIHNldHVwLnB5IC0taW5zdGFsbC1iYXNlPS90bXAKK3B5dGhvbiBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1iYXNlPS90bXAKIFxlbmR7dmVyYmF0aW19CiAKIHdvdWxkIGluc3RhbGwgcHVyZSBtb2R1bGVzIHRvIFxmaWxldmFyey90bXAvcHl0aG9uL2xpYn0gaW4gdGhlIGZpcnN0CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmFzeW5jb3JlLnRleCBiL0RvYy9saWIvbGliYXN5bmNvcmUudGV4CmluZGV4IDQ0MjVkYTcuLjIwNjc4MzkgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGliYXN5bmNvcmUudGV4CisrKyBiL0RvYy9saWIvbGliYXN5bmNvcmUudGV4CkBAIC0xOTgsOSArMTk4LDExIEBACiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfXtiaW5kfXthZGRyZXNzfQotICBCaW5kIHRoZSBzb2NrZXQgdG8gXHZhcnthZGRyZXNzfS4gIFRoZSBzb2NrZXQgbXVzdCBub3QgYWxyZWFkeQotICBiZSBib3VuZC4gIChUaGUgZm9ybWF0IG9mIFx2YXJ7YWRkcmVzc30gZGVwZW5kcyBvbiB0aGUgYWRkcmVzcwotICBmYW1pbHkgLS0tIHNlZSBhYm92ZS4pCisgIEJpbmQgdGhlIHNvY2tldCB0byBcdmFye2FkZHJlc3N9LiAgVGhlIHNvY2tldCBtdXN0IG5vdCBhbHJlYWR5IGJlCisgIGJvdW5kLiAgKFRoZSBmb3JtYXQgb2YgXHZhcnthZGRyZXNzfSBkZXBlbmRzIG9uIHRoZSBhZGRyZXNzIGZhbWlseQorICAtLS0gc2VlIGFib3ZlLikgIFRvIG1hcmsgdGhlIHNvY2tldCBhcyByZS11c2FibGUgKHNldHRpbmcgdGhlCisgIFxjb25zdGFudHtTT19SRVVTRUFERFJ9IG9wdGlvbiksIGNhbGwgdGhlIFxjbGFzc3tkaXNwYXRjaGVyfQorICBvYmplY3QncyBcbWV0aG9ke3NldF9yZXVzZV9hZGRyKCl9IG1ldGhvZC4KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9e2FjY2VwdH17fQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJhdGV4aXQudGV4IGIvRG9jL2xpYi9saWJhdGV4aXQudGV4CmluZGV4IDMzZGM3ZGQuLjk3OThiNTcgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGliYXRleGl0LnRleAorKysgYi9Eb2MvbGliL2xpYmF0ZXhpdC50ZXgKQEAgLTQ0LDYgKzQ0LDEwIEBACiB0cmFjZWJhY2sgaXMgcHJpbnRlZCAodW5sZXNzIFxleGNlcHRpb257U3lzdGVtRXhpdH0gaXMgcmFpc2VkKSBhbmQgdGhlCiBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgc2F2ZWQuICBBZnRlciBhbGwgZXhpdCBoYW5kbGVycyBoYXZlIGhhZCBhCiBjaGFuY2UgdG8gcnVuIHRoZSBsYXN0IGV4Y2VwdGlvbiB0byBiZSByYWlzZWQgaXMgcmUtcmFpc2VkLgorCitcdmVyc2lvbmNoYW5nZWRbVGhpcyBmdW5jdGlvbiBub3cgcmV0dXJucyBcdmFye2Z1bmN9IHdoaWNoIG1ha2VzIGl0CisgICAgICAgICAgICAgICAgcG9zc2libGUgdG8gdXNlIGl0IGFzIGEgZGVjb3JhdG9yIHdpdGhvdXQgYmluZGluZyB0aGUKKwkJb3JpZ2luYWwgbmFtZSB0byBcY29kZXtOb25lfV17Mi42fQogXGVuZHtmdW5jZGVzY30KIAogCkBAIC05MiwzICs5NiwxNSBAQAogIyBvcjoKIGF0ZXhpdC5yZWdpc3Rlcihnb29kYnllLCBhZGplY3RpdmU9J25pY2UnLCBuYW1lPSdEb25ueScpCiBcZW5ke3ZlcmJhdGltfQorCitVc2FnZSBhcyBhIGRlY29yYXRvcjoKKworXGJlZ2lue3ZlcmJhdGltfQoraW1wb3J0IGF0ZXhpdAorCitAYXRleGl0LnJlZ2lzdGVyCitkZWYgZ29vZGJ5ZSgpOgorICAgIHByaW50ICJZb3UgYXJlIG5vdyBsZWF2aW5nIHRoZSBQeXRob24gc2VjdG9yLiIKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgb2J2aW91c2x5IG9ubHkgd29ya3Mgd2l0aCBmdW5jdGlvbnMgdGhhdCBkb24ndCB0YWtlIGFyZ3VtZW50cy4KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliYmFzZTY0LnRleCBiL0RvYy9saWIvbGliYmFzZTY0LnRleAppbmRleCAwMDM5Yzg0Li5kN2VjY2JkIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmJhc2U2NC50ZXgKKysrIGIvRG9jL2xpYi9saWJiYXNlNjQudGV4CkBAIC0yMSw3ICsyMSw3IEBACiBkZWNvZGluZyB0byBhbmQgZnJvbSBmaWxlLWxpa2Ugb2JqZWN0cyBhcyB3ZWxsIGFzIHN0cmluZ3MsIGJ1dCBvbmx5CiB1c2luZyB0aGUgQmFzZTY0IHN0YW5kYXJkIGFscGhhYmV0LgogCi1UaGUgbW9kZXJuIGludGVyZmFjZSBwcm92aWRlczoKK1RoZSBtb2Rlcm4gaW50ZXJmYWNlLCB3aGljaCB3YXMgaW50cm9kdWNlZCBpbiBQeXRob24gMi40LCBwcm92aWRlczoKIAogXGJlZ2lue2Z1bmNkZXNjfXtiNjRlbmNvZGV9e3Ncb3B0aW9uYWx7LCBhbHRjaGFyc319CiBFbmNvZGUgYSBzdHJpbmcgdXNlIEJhc2U2NC4KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliYnNkZGIudGV4IGIvRG9jL2xpYi9saWJic2RkYi50ZXgKaW5kZXggNDRiOTE2OC4uODVlYTgyNCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJic2RkYi50ZXgKKysrIGIvRG9jL2xpYi9saWJic2RkYi50ZXgKQEAgLTE5LDIxICsxOSwyMyBAQAogMy4zIHRocnUgNC40LgogCiBcYmVnaW57c2VlYWxzb30KLSAgXHNlZXVybHtodHRwOi8vcHlic2RkYi5zb3VyY2Vmb3JnZS5uZXQvfXtUaGUgd2Vic2l0ZSB3aXRoIGRvY3VtZW50YXRpb24KLSAgZm9yIHRoZSBcbW9kdWxle2JzZGRiLmRifSBweXRob24gQmVya2VsZXkgREIgaW50ZXJmYWNlIHRoYXQgY2xvc2VseSBtaXJyb3JzCi0gIHRoZSBTbGVlcHljYXQgb2JqZWN0IG9yaWVudGVkIGludGVyZmFjZSBwcm92aWRlZCBpbiBCZXJrZWxleSBEQiAzIGFuZCA0Ln0KLSAgXHNlZXVybHtodHRwOi8vd3d3LnNsZWVweWNhdC5jb20vfXtTbGVlcHljYXQgU29mdHdhcmUgcHJvZHVjZXMgdGhlCi0gIEJlcmtlbGV5IERCIGxpYnJhcnkufQorICBcc2VldXJse2h0dHA6Ly9weWJzZGRiLnNvdXJjZWZvcmdlLm5ldC99CisgICAgICAgICB7VGhlIHdlYnNpdGUgd2l0aCBkb2N1bWVudGF0aW9uIGZvciB0aGUgXG1vZHVsZXtic2RkYi5kYn0KKyAgICAgICAgICBQeXRob24gQmVya2VsZXkgREIgaW50ZXJmYWNlIHRoYXQgY2xvc2VseSBtaXJyb3JzIHRoZSBvYmplY3QKKyAgICAgICAgICBvcmllbnRlZCBpbnRlcmZhY2UgcHJvdmlkZWQgaW4gQmVya2VsZXkgREIgMyBhbmQgNC59CisKKyAgXHNlZXVybHtodHRwOi8vd3d3Lm9yYWNsZS5jb20vZGF0YWJhc2UvYmVya2VsZXktZGIvfQorICAgICAgICAge1RoZSBCZXJrZWxleSBEQiBsaWJyYXJ5Ln0KIFxlbmR7c2VlYWxzb30KIAogQSBtb3JlIG1vZGVybiBEQiwgREJFbnYgYW5kIERCU2VxdWVuY2Ugb2JqZWN0IGludGVyZmFjZSBpcyBhdmFpbGFibGUgaW4gdGhlCi1cbW9kdWxle2JzZGRiLmRifSBtb2R1bGUgd2hpY2ggY2xvc2VseSBtYXRjaGVzIHRoZSBTbGVlcHljYXQgQmVya2VsZXkgREIgQyBBUEkKK1xtb2R1bGV7YnNkZGIuZGJ9IG1vZHVsZSB3aGljaCBjbG9zZWx5IG1hdGNoZXMgdGhlIEJlcmtlbGV5IERCIEMgQVBJCiBkb2N1bWVudGVkIGF0IHRoZSBhYm92ZSBVUkxzLiAgQWRkaXRpb25hbCBmZWF0dXJlcyBwcm92aWRlZCBieSB0aGUKIFxtb2R1bGV7YnNkZGIuZGJ9IEFQSSBpbmNsdWRlIGZpbmUgdHVuaW5nLCB0cmFuc2FjdGlvbnMsIGxvZ2dpbmcsIGFuZAogbXVsdGlwcm9jZXNzIGNvbmN1cnJlbnQgZGF0YWJhc2UgYWNjZXNzLgogCiBUaGUgZm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGxlZ2FjeSBcbW9kdWxle2JzZGRifSBpbnRlcmZhY2UKLWNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHB5dGhvbiBic2RkYiBtb2R1bGUuICBTdGFydGluZyBpbiBQeXRob24gMi41IHRoaXMKK2NvbXBhdGlibGUgd2l0aCB0aGUgb2xkIFB5dGhvbiBic2RkYiBtb2R1bGUuICBTdGFydGluZyBpbiBQeXRob24gMi41IHRoaXMKIGludGVyZmFjZSBzaG91bGQgYmUgc2FmZSBmb3IgbXVsdGl0aHJlYWRlZCBhY2Nlc3MuICBUaGUgXG1vZHVsZXtic2RkYi5kYn0KIEFQSSBpcyByZWNvbW1lbmRlZCBmb3IgdGhyZWFkaW5nIHVzZXJzIGFzIGl0IHByb3ZpZGVzIGJldHRlciBjb250cm9sLgogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmNmZ3BhcnNlci50ZXggYi9Eb2MvbGliL2xpYmNmZ3BhcnNlci50ZXgKaW5kZXggNDJhMzYyZS4uMmMwOGVjNCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJjZmdwYXJzZXIudGV4CisrKyBiL0RvYy9saWIvbGliY2ZncGFyc2VyLnRleApAQCAtNDgsMTEgKzQ4LDIwIEBACiBtYXkgYmUgcGFzc2VkIGludG8gdGhlIFxtZXRob2R7Z2V0KCl9IG1ldGhvZCB3aGljaCB3aWxsIG92ZXJyaWRlIGFsbAogb3RoZXJzLgogCi1cYmVnaW57Y2xhc3NkZXNjfXtSYXdDb25maWdQYXJzZXJ9e1xvcHRpb25hbHtkZWZhdWx0c319CitTZWN0aW9ucyBhcmUgbm9ybWFsbHkgc3RvcmVkIGluIGEgYnVpbHRpbiBkaWN0aW9uYXJ5LiBBbiBhbHRlcm5hdGl2ZQorZGljdGlvbmFyeSB0eXBlIGNhbiBiZSBwYXNzZWQgdG8gdGhlIFxjbGFzc3tDb25maWdQYXJzZXJ9IGNvbnN0cnVjdG9yLgorRm9yIGV4YW1wbGUsIGlmIGEgZGljdGlvbmFyeSB0eXBlIGlzIHBhc3NlZCB0aGF0IHNvcnRzIGl0cyBrZXlzLAordGhlIHNlY3Rpb25zIHdpbGwgYmUgc29ydGVkIG9uIHdyaXRlLWJhY2ssIGFzIHdpbGwgYmUgdGhlIGtleXMgd2l0aGluCitlYWNoIHNlY3Rpb24uCisKK1xiZWdpbntjbGFzc2Rlc2N9e1Jhd0NvbmZpZ1BhcnNlcn17XG9wdGlvbmFse2RlZmF1bHRzXG9wdGlvbmFseywgZGljdF90eXBlfX19CiBUaGUgYmFzaWMgY29uZmlndXJhdGlvbiBvYmplY3QuICBXaGVuIFx2YXJ7ZGVmYXVsdHN9IGlzIGdpdmVuLCBpdCBpcwotaW5pdGlhbGl6ZWQgaW50byB0aGUgZGljdGlvbmFyeSBvZiBpbnRyaW5zaWMgZGVmYXVsdHMuICBUaGlzIGNsYXNzCi1kb2VzIG5vdCBzdXBwb3J0IHRoZSBtYWdpY2FsIGludGVycG9sYXRpb24gYmVoYXZpb3IuCitpbml0aWFsaXplZCBpbnRvIHRoZSBkaWN0aW9uYXJ5IG9mIGludHJpbnNpYyBkZWZhdWx0cy4gIFdoZW4gXHZhcntkaWN0X3R5cGV9CitpcyBnaXZlbiwgaXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgZGljdGlvbmFyeSBvYmplY3RzIGZvciB0aGUgbGlzdAorb2Ygc2VjdGlvbnMsIGZvciB0aGUgb3B0aW9ucyB3aXRoaW4gYSBzZWN0aW9uLCBhbmQgZm9yIHRoZSBkZWZhdWx0IHZhbHVlcy4KK1RoaXMgY2xhc3MgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbWFnaWNhbCBpbnRlcnBvbGF0aW9uIGJlaGF2aW9yLgogXHZlcnNpb25hZGRlZHsyLjN9CitcdmVyc2lvbmNoYW5nZWRbXHZhcntkaWN0X3R5cGV9IHdhcyBhZGRlZF17Mi42fQogXGVuZHtjbGFzc2Rlc2N9CiAKIFxiZWdpbntjbGFzc2Rlc2N9e0NvbmZpZ1BhcnNlcn17XG9wdGlvbmFse2RlZmF1bHRzfX0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliY29tbWFuZHMudGV4IGIvRG9jL2xpYi9saWJjb21tYW5kcy50ZXgKaW5kZXggNzRlNzAyMy4uNTNiOGEyMCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJjb21tYW5kcy50ZXgKKysrIGIvRG9jL2xpYi9saWJjb21tYW5kcy50ZXgKQEAgLTEyLDYgKzEyLDExIEBACiByZXR1cm4gYW55IG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhlIGNvbW1hbmQgYW5kLCBvcHRpb25hbGx5LCB0aGUgZXhpdAogc3RhdHVzLgogCitUaGUgXG1vZHVsZXtzdWJwcm9jZXNzfSBtb2R1bGUgcHJvdmlkZXMgbW9yZSBwb3dlcmZ1bCBmYWNpbGl0aWVzIGZvcgorc3Bhd25pbmcgbmV3IHByb2Nlc3NlcyBhbmQgcmV0cmlldmluZyB0aGVpciByZXN1bHRzLiAgVXNpbmcgdGhlCitcbW9kdWxle3N1YnByb2Nlc3N9IG1vZHVsZSBpcyBwcmVmZXJhYmxlIHRvIHVzaW5nIHRoZSBcbW9kdWxle2NvbW1hbmRzfQorbW9kdWxlLgorCiBUaGUgXG1vZHVsZXtjb21tYW5kc30gbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIApAQCAtNTEsMyArNTYsNyBAQAogPj4+IGNvbW1hbmRzLmdldHN0YXR1cygnL2Jpbi9scycpCiAnLXJ3eHIteHIteCAgMSByb290ICAgICAgICAxMzM1MiBPY3QgMTQgIDE5OTQgL2Jpbi9scycKIFxlbmR7dmVyYmF0aW19CisKK1xiZWdpbntzZWVhbHNvfQorICBcc2VlbW9kdWxle3N1YnByb2Nlc3N9e01vZHVsZSBmb3Igc3Bhd25pbmcgYW5kIG1hbmFnaW5nIHN1YnByb2Nlc3Nlcy59CitcZW5ke3NlZWFsc299CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmNzdi50ZXggYi9Eb2MvbGliL2xpYmNzdi50ZXgKaW5kZXggOGUxMGNjZi4uZTk2NWUzMSAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJjc3YudGV4CisrKyBiL0RvYy9saWIvbGliY3N2LnRleApAQCAtNjQsOSArNjQsOSBAQAogY2xhc3Mgb3Igb25lIG9mIHRoZSBzdHJpbmdzIHJldHVybmVkIGJ5IHRoZSBcZnVuY3Rpb257bGlzdF9kaWFsZWN0c30KIGZ1bmN0aW9uLiAgVGhlIG90aGVyIG9wdGlvbmFsIHt9XHZhcntmbXRwYXJhbX0ga2V5d29yZCBhcmd1bWVudHMgY2FuIGJlCiBnaXZlbiB0byBvdmVycmlkZSBpbmRpdmlkdWFsIGZvcm1hdHRpbmcgcGFyYW1ldGVycyBpbiB0aGUgY3VycmVudAotZGlhbGVjdC4gIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWFsZWN0IGFuZCBmb3JtYXR0aW5nCitkaWFsZWN0LiAgRm9yIGZ1bGwgZGV0YWlscyBhYm91dCB0aGUgZGlhbGVjdCBhbmQgZm9ybWF0dGluZwogcGFyYW1ldGVycywgc2VlIHNlY3Rpb25+XHJlZntjc3YtZm10LXBhcmFtc30sIGBgRGlhbGVjdHMgYW5kIEZvcm1hdHRpbmcKLVBhcmFtZXRlcnMnJyBmb3IgZGV0YWlscyBvZiB0aGVzZSBwYXJhbWV0ZXJzLgorUGFyYW1ldGVycycnLgogCiBBbGwgZGF0YSByZWFkIGFyZSByZXR1cm5lZCBhcyBzdHJpbmdzLiAgTm8gYXV0b21hdGljIGRhdGEgdHlwZQogY29udmVyc2lvbiBpcyBwZXJmb3JtZWQuCkBAIC05NiwxMCArOTYsMTAgQEAKIG9mIGEgc3ViY2xhc3Mgb2YgdGhlIFxjbGFzc3tEaWFsZWN0fSBjbGFzcyBvciBvbmUgb2YgdGhlIHN0cmluZ3MKIHJldHVybmVkIGJ5IHRoZSBcZnVuY3Rpb257bGlzdF9kaWFsZWN0c30gZnVuY3Rpb24uICBUaGUgb3RoZXIgb3B0aW9uYWwKIHt9XHZhcntmbXRwYXJhbX0ga2V5d29yZCBhcmd1bWVudHMgY2FuIGJlIGdpdmVuIHRvIG92ZXJyaWRlIGluZGl2aWR1YWwKLWZvcm1hdHRpbmcgcGFyYW1ldGVycyBpbiB0aGUgY3VycmVudCBkaWFsZWN0LiAgRm9yIG1vcmUgaW5mb3JtYXRpb24KK2Zvcm1hdHRpbmcgcGFyYW1ldGVycyBpbiB0aGUgY3VycmVudCBkaWFsZWN0LiAgRm9yIGZ1bGwgZGV0YWlscwogYWJvdXQgdGhlIGRpYWxlY3QgYW5kIGZvcm1hdHRpbmcgcGFyYW1ldGVycywgc2VlCi1zZWN0aW9uflxyZWZ7Y3N2LWZtdC1wYXJhbXN9LCBgYERpYWxlY3RzIGFuZCBGb3JtYXR0aW5nIFBhcmFtZXRlcnMnJyBmb3IKLWRldGFpbHMgb2YgdGhlc2UgcGFyYW1ldGVycy4gIFRvIG1ha2UgaXQgYXMgZWFzeSBhcyBwb3NzaWJsZSB0bworc2VjdGlvbn5ccmVme2Nzdi1mbXQtcGFyYW1zfSwgYGBEaWFsZWN0cyBhbmQgRm9ybWF0dGluZyBQYXJhbWV0ZXJzJycuCitUbyBtYWtlIGl0IGFzIGVhc3kgYXMgcG9zc2libGUgdG8KIGludGVyZmFjZSB3aXRoIG1vZHVsZXMgd2hpY2ggaW1wbGVtZW50IHRoZSBEQiBBUEksIHRoZSB2YWx1ZQogXGNvbnN0YW50e05vbmV9IGlzIHdyaXR0ZW4gYXMgdGhlIGVtcHR5IHN0cmluZy4gIFdoaWxlIHRoaXMgaXNuJ3QgYQogcmV2ZXJzaWJsZSB0cmFuc2Zvcm1hdGlvbiwgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIGR1bXAgU1FMIE5VTEwgZGF0YSB2YWx1ZXMKQEAgLTExMyw5ICsxMTMsOCBAQAogb3IgVW5pY29kZSBvYmplY3QuIFRoZSBkaWFsZWN0IGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIGJ5IHBhc3NpbmcgYQogc3ViLWNsYXNzIG9mIFxjbGFzc3tEaWFsZWN0fSwgb3IgYnkgXHZhcntmbXRwYXJhbX0ga2V5d29yZCBhcmd1bWVudHMsCiBvciBib3RoLCB3aXRoIGtleXdvcmQgYXJndW1lbnRzIG92ZXJyaWRpbmcgcGFyYW1ldGVycyBvZiB0aGUgZGlhbGVjdC4KLUZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWFsZWN0IGFuZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMsIHNlZQotc2VjdGlvbn5ccmVme2Nzdi1mbXQtcGFyYW1zfSwgYGBEaWFsZWN0cyBhbmQgRm9ybWF0dGluZyBQYXJhbWV0ZXJzJycKLWZvciBkZXRhaWxzIG9mIHRoZXNlIHBhcmFtZXRlcnMuCitGb3IgZnVsbCBkZXRhaWxzIGFib3V0IHRoZSBkaWFsZWN0IGFuZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMsIHNlZQorc2VjdGlvbn5ccmVme2Nzdi1mbXQtcGFyYW1zfSwgYGBEaWFsZWN0cyBhbmQgRm9ybWF0dGluZyBQYXJhbWV0ZXJzJycuCiBcZW5ke2Z1bmNkZXNjfQogCiBcYmVnaW57ZnVuY2Rlc2N9e3VucmVnaXN0ZXJfZGlhbGVjdH17bmFtZX0KQEAgLTE5NywxMiArMTk2LDEzIEBACiAKIFxiZWdpbntjbGFzc2Rlc2N9e2V4Y2VsfXt9CiBUaGUgXGNsYXNze2V4Y2VsfSBjbGFzcyBkZWZpbmVzIHRoZSB1c3VhbCBwcm9wZXJ0aWVzIG9mIGFuIEV4Y2VsLWdlbmVyYXRlZAotQ1NWIGZpbGUuCitDU1YgZmlsZS4gIEl0IGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGlhbGVjdCBuYW1lIFxjb2RleydleGNlbCd9LgogXGVuZHtjbGFzc2Rlc2N9CiAKIFxiZWdpbntjbGFzc2Rlc2N9e2V4Y2VsX3RhYn17fQogVGhlIFxjbGFzc3tleGNlbF90YWJ9IGNsYXNzIGRlZmluZXMgdGhlIHVzdWFsIHByb3BlcnRpZXMgb2YgYW4KLUV4Y2VsLWdlbmVyYXRlZCBUQUItZGVsaW1pdGVkIGZpbGUuCitFeGNlbC1nZW5lcmF0ZWQgVEFCLWRlbGltaXRlZCBmaWxlLiAgSXQgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkaWFsZWN0IG5hbWUKK1xjb2RleydleGNlbC10YWInfS4KIFxlbmR7Y2xhc3NkZXNjfQogCiBcYmVnaW57Y2xhc3NkZXNjfXtTbmlmZmVyfXt9CkBAIC0zNDUsNiArMzQ1LDcgQEAKIFxiZWdpbnttZW1iZXJkZXNjfVtjc3YgcmVhZGVyXXtsaW5lX251bX0KICBUaGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQgZnJvbSB0aGUgc291cmNlIGl0ZXJhdG9yLiBUaGlzIGlzIG5vdCB0aGUgc2FtZQogIGFzIHRoZSBudW1iZXIgb2YgcmVjb3JkcyByZXR1cm5lZCwgYXMgcmVjb3JkcyBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcy4KKyBcdmVyc2lvbmFkZGVkezIuNX0KIFxlbmR7bWVtYmVyZGVzY30KIAogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmN0eXBlcy50ZXggYi9Eb2MvbGliL2xpYmN0eXBlcy50ZXgKaW5kZXggYjJlNDg4YS4uYzBlMjMxMCAxMDA3NTUKLS0tIGEvRG9jL2xpYi9saWJjdHlwZXMudGV4CisrKyBiL0RvYy9saWIvbGliY3R5cGVzLnRleApAQCAtMTgyMSw3ICsxODIxLDcgQEAKIFxiZWdpbntxdW90ZX0KIFxiZWdpbnt2ZXJiYXRpbX0+Pj4gZnJvbSBjdHlwZXMgaW1wb3J0IGNfaW50LCBXSU5GVU5DVFlQRSwgd2luZGxsCiA+Pj4gZnJvbSBjdHlwZXMud2ludHlwZXMgaW1wb3J0IEhXTkQsIExQQ1NUUiwgVUlOVAotPj4+IHByb3RvdHlwZSA9IFdJTkZVTkNUWVBFKGNfaW50LCBIV05ELCBMUENTVFIsIExQQ1NUUiwgY191aW50KQorPj4+IHByb3RvdHlwZSA9IFdJTkZVTkNUWVBFKGNfaW50LCBIV05ELCBMUENTVFIsIExQQ1NUUiwgVUlOVCkKID4+PiBwYXJhbWZsYWdzID0gKDEsICJod25kIiwgMCksICgxLCAidGV4dCIsICJIaSIpLCAoMSwgImNhcHRpb24iLCBOb25lKSwgKDEsICJmbGFncyIsIDApCiA+Pj4gTWVzc2FnZUJveCA9IHByb3RvdHlwZSgoIk1lc3NhZ2VCb3hBIiwgd2luZGxsLnVzZXIzMiksIHBhcmFtZmxhZ3MpCiA+Pj5cZW5ke3ZlcmJhdGltfQpAQCAtMTg0OCw3ICsxODQ4LDcgQEAKIAogSGVyZSBpcyB0aGUgd3JhcHBpbmcgd2l0aCBcY29kZXtjdHlwZXN9OgogXGJlZ2lue3F1b3RlfQotXGJlZ2lue3ZlcmJhdGltfT4+PiBmcm9tIGN0eXBlcyBpbXBvcnQgUE9JTlRFUiwgV0lORlVOQ1RZUEUsIHdpbmRsbAorXGJlZ2lue3ZlcmJhdGltfT4+PiBmcm9tIGN0eXBlcyBpbXBvcnQgUE9JTlRFUiwgV0lORlVOQ1RZUEUsIHdpbmRsbCwgV2luRXJyb3IKID4+PiBmcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgQk9PTCwgSFdORCwgUkVDVAogPj4+IHByb3RvdHlwZSA9IFdJTkZVTkNUWVBFKEJPT0wsIEhXTkQsIFBPSU5URVIoUkVDVCkpCiA+Pj4gcGFyYW1mbGFncyA9ICgxLCAiaHduZCIpLCAoMiwgImxwcmVjdCIpCkBAIC0yMjk5LDEyICsyMjk5LDEwIEBACiBvciBlcnJvciBpbmZvcm1hdGlvbiBmb3IgYSBmdW5jdGlvbiBvciBtZXRob2QgY2FsbC4KIFxlbmR7Y2xhc3NkZXNjKn0KIAotXGNvZGV7cHl7XF99b2JqZWN0fSA6IGNsYXNzZGVzYyoKLVxiZWdpbntxdW90ZX0KLQotUmVwcmVzZW50cyB0aGUgQyBcY29kZXtQeU9iamVjdCAqfSBkYXRhdHlwZS4gIENhbGxpbmcgdGhpcyB3aXRoIGFuCi13aXRob3V0IGFuIGFyZ3VtZW50IGNyZWF0ZXMgYSBcY29kZXtOVUxMfSBcY29kZXtQeU9iamVjdCAqfSBwb2ludGVyLgotXGVuZHtxdW90ZX0KK1xiZWdpbntjbGFzc2Rlc2MqfXtweV9vYmplY3R9CitSZXByZXNlbnRzIHRoZSBDIFxjb2Rle1B5T2JqZWN0ICp9IGRhdGF0eXBlLiAgQ2FsbGluZyB0aGlzIHdpdGhvdXQgYW4KK2FyZ3VtZW50IGNyZWF0ZXMgYSBcY29kZXtOVUxMfSBcY29kZXtQeU9iamVjdCAqfSBwb2ludGVyLgorXGVuZHtjbGFzc2Rlc2MqfQogCiBUaGUgXGNvZGV7Y3R5cGVzLndpbnR5cGVzfSBtb2R1bGUgcHJvdmlkZXMgcXVpdGUgc29tZSBvdGhlciBXaW5kb3dzCiBzcGVjaWZpYyBkYXRhIHR5cGVzLCBmb3IgZXhhbXBsZSBcY29kZXtIV05EfSwgXGNvZGV7V1BBUkFNfSwgb3IgXGNvZGV7RFdPUkR9LgpAQCAtMjQ0MCw1ICsyNDM4LDYgQEAKIAogXHN1YnN1YnNlY3Rpb257QXJyYXlzIGFuZCBwb2ludGVyc1xsYWJlbHtjdHlwZXMtYXJyYXlzLXBvaW50ZXJzfX0KIAotWFhYCitOb3QgeWV0IHdyaXR0ZW4gLSBwbGVhc2Ugc2VlIHNlY3Rpb25+XHJlZntjdHlwZXMtcG9pbnRlcnN9LCBwb2ludGVycyBhbmQKK3NlY3Rpb25+XHJlZntjdHlwZXMtYXJyYXlzfSwgYXJyYXlzIGluIHRoZSB0dXRvcmlhbC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJkYXRldGltZS50ZXggYi9Eb2MvbGliL2xpYmRhdGV0aW1lLnRleAppbmRleCBjYWU1ZDYwLi4wZDJiNWJiIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmRhdGV0aW1lLnRleAorKysgYi9Eb2MvbGliL2xpYmRhdGV0aW1lLnRleApAQCAtMTQyMSwxOSArMTQyMSwyMSBAQAogdmFyaWVzIGFjcm9zcyBwbGF0Zm9ybXMuICBSZWdhcmRsZXNzIG9mIHBsYXRmb3JtLCB5ZWFycyBiZWZvcmUgMTkwMAogY2Fubm90IGJlIHVzZWQuCiAKLVxzdWJzZWN0aW9ue0V4YW1wbGVzfQotCi1cc3Vic3Vic2VjdGlvbntDcmVhdGluZyBEYXRldGltZSBPYmplY3RzIGZyb20gRm9ybWF0dGVkIFN0cmluZ3N9Ci0KLVRoZSBcY2xhc3N7ZGF0ZXRpbWV9IGNsYXNzIGRvZXMgbm90IGRpcmVjdGx5IHN1cHBvcnQgcGFyc2luZyBmb3JtYXR0ZWQgdGltZQotc3RyaW5ncy4gIFlvdSBjYW4gdXNlIFxmdW5jdGlvbnt0aW1lLnN0cnB0aW1lfSB0byBkbyB0aGUgcGFyc2luZyBhbmQgY3JlYXRlCi1hIFxjbGFzc3tkYXRldGltZX0gb2JqZWN0IGZyb20gdGhlIHR1cGxlIGl0IHJldHVybnM6Ci0KLVxiZWdpbnt2ZXJiYXRpbX0KLT4+PiBzID0gIjIwMDUtMTItMDZUMTI6MTM6MTQiCi0+Pj4gZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKLT4+PiBmcm9tIHRpbWUgaW1wb3J0IHN0cnB0aW1lCi0+Pj4gZGF0ZXRpbWUoKnN0cnB0aW1lKHMsICIlWS0lbS0lZFQlSDolTTolUyIpWzA6Nl0pCi1kYXRldGltZS5kYXRldGltZSgyMDA1LCAxMiwgNiwgMTIsIDEzLCAxNCkKLVxlbmR7dmVyYmF0aW19Ci0KKyUlJSBUaGlzIGV4YW1wbGUgaXMgb2Jzb2xldGUsIHNpbmNlIHN0cnB0aW1lIGlzIG5vdyBzdXBwb3J0ZWQgYnkgZGF0ZXRpbWUuCislIAorJSBcc3Vic2VjdGlvbntFeGFtcGxlc30KKyUgCislIFxzdWJzdWJzZWN0aW9ue0NyZWF0aW5nIERhdGV0aW1lIE9iamVjdHMgZnJvbSBGb3JtYXR0ZWQgU3RyaW5nc30KKyUgCislIFRoZSBcY2xhc3N7ZGF0ZXRpbWV9IGNsYXNzIGRvZXMgbm90IGRpcmVjdGx5IHN1cHBvcnQgcGFyc2luZyBmb3JtYXR0ZWQgdGltZQorJSBzdHJpbmdzLiAgWW91IGNhbiB1c2UgXGZ1bmN0aW9ue3RpbWUuc3RycHRpbWV9IHRvIGRvIHRoZSBwYXJzaW5nIGFuZCBjcmVhdGUKKyUgYSBcY2xhc3N7ZGF0ZXRpbWV9IG9iamVjdCBmcm9tIHRoZSB0dXBsZSBpdCByZXR1cm5zOgorJSAKKyUgXGJlZ2lue3ZlcmJhdGltfQorJSA+Pj4gcyA9ICIyMDA1LTEyLTA2VDEyOjEzOjE0IgorJSA+Pj4gZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKyUgPj4+IGZyb20gdGltZSBpbXBvcnQgc3RycHRpbWUKKyUgPj4+IGRhdGV0aW1lKCpzdHJwdGltZShzLCAiJVktJW0tJWRUJUg6JU06JVMiKVswOjZdKQorJSBkYXRldGltZS5kYXRldGltZSgyMDA1LCAxMiwgNiwgMTIsIDEzLCAxNCkKKyUgXGVuZHt2ZXJiYXRpbX0KKyUgCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmRlY2ltYWwudGV4IGIvRG9jL2xpYi9saWJkZWNpbWFsLnRleAppbmRleCBhMGM3YmRlLi4xMjdlYjFkIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmRlY2ltYWwudGV4CisrKyBiL0RvYy9saWIvbGliZGVjaW1hbC50ZXgKQEAgLTQzNSwzNiArNDM1LDM3IEBACiB0aGUgXGZ1bmN0aW9ue2dldGNvbnRleHQoKX0gYW5kIFxmdW5jdGlvbntzZXRjb250ZXh0KCl9IGZ1bmN0aW9uczoKIAogXGJlZ2lue2Z1bmNkZXNjfXtnZXRjb250ZXh0fXt9Ci0gIFJldHVybiB0aGUgY3VycmVudCBjb250ZXh0IGZvciB0aGUgYWN0aXZlIHRocmVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRleHQgZm9yIHRoZSBhY3RpdmUgdGhyZWFkLgogXGVuZHtmdW5jZGVzY30gICAgICAgICAgICAKIAogXGJlZ2lue2Z1bmNkZXNjfXtzZXRjb250ZXh0fXtjfQotICBTZXQgdGhlIGN1cnJlbnQgY29udGV4dCBmb3IgdGhlIGFjdGl2ZSB0aHJlYWQgdG8gXHZhcntjfS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgZm9yIHRoZSBhY3RpdmUgdGhyZWFkIHRvIFx2YXJ7Y30uCiBcZW5ke2Z1bmNkZXNjfSAgCiAKIEJlZ2lubmluZyB3aXRoIFB5dGhvbiAyLjUsIHlvdSBjYW4gYWxzbyB1c2UgdGhlIFxrZXl3b3Jke3dpdGh9IHN0YXRlbWVudAotdG8gdGVtcG9yYXJpbHkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dC4gRm9yIGV4YW1wbGUgdGhlIGZvbGxvd2luZyBjb2RlCi1pbmNyZWFzZXMgdGhlIGN1cnJlbnQgZGVjaW1hbCBwcmVjaXNpb24gYnkgMiBwbGFjZXMsIHBlcmZvcm1zIGEKLWNhbGN1bGF0aW9uLCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RvcmVzIHRoZSBwcmV2aW91cyBjb250ZXh0OgorYW5kIHRoZSBcZnVuY3Rpb257bG9jYWxjb250ZXh0KCl9IGZ1bmN0aW9uIHRvIHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUKK2FjdGl2ZSBjb250ZXh0LgogCitcYmVnaW57ZnVuY2Rlc2N9e2xvY2FsY29udGV4dH17XG9wdGlvbmFse2N9fQorICBSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB3aWxsIHNldCB0aGUgY3VycmVudCBjb250ZXh0IGZvcgorICB0aGUgYWN0aXZlIHRocmVhZCB0byBhIGNvcHkgb2YgXHZhcntjfSBvbiBlbnRyeSB0byB0aGUgd2l0aC1zdGF0ZW1lbnQKKyAgYW5kIHJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbnRleHQgd2hlbiBleGl0aW5nIHRoZSB3aXRoLXN0YXRlbWVudC4gSWYKKyAgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQsIGEgY29weSBvZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIHVzZWQuCisgIFx2ZXJzaW9uYWRkZWR7Mi41fQorCisgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgc2V0cyB0aGUgY3VycmVudCBkZWNpbWFsIHByZWNpc2lvbgorICB0byA0MiBwbGFjZXMsIHBlcmZvcm1zIGEgY2FsY3VsYXRpb24sIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgcmVzdG9yZXMKKyAgdGhlIHByZXZpb3VzIGNvbnRleHQ6CiBcYmVnaW57dmVyYmF0aW19Ci1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50Ci1pbXBvcnQgZGVjaW1hbAorICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKyAgICBmcm9tIGRlY2ltYWwgaW1wb3J0IGxvY2FsY29udGV4dAogCi13aXRoIGRlY2ltYWwuZ2V0Y29udGV4dCgpIGFzIGN0eDoKLSAgICBjdHgucHJlYyArPSAyICAgIyBhZGQgMiBtb3JlIGRpZ2l0cyBvZiBwcmVjaXNpb24KLSAgICBjYWxjdWxhdGVfc29tZXRoaW5nKCkKKyAgICB3aXRoIGxvY2FsY29udGV4dCgpIGFzIGN0eDoKKyAgICAgICAgY3R4LnByZWMgPSA0MiAgICMgUGVyZm9ybSBhIGhpZ2ggcHJlY2lzaW9uIGNhbGN1bGF0aW9uCisgICAgICAgIHMgPSBjYWxjdWxhdGVfc29tZXRoaW5nKCkKKyAgICBzID0gK3MgICMgUm91bmQgdGhlIGZpbmFsIHJlc3VsdCBiYWNrIHRvIHRoZSBkZWZhdWx0IHByZWNpc2lvbgogXGVuZHt2ZXJiYXRpbX0KLQotVGhlIGNvbnRleHQgdGhhdCdzIGFjdGl2ZSBpbiB0aGUgYm9keSBvZiB0aGUgXGtleXdvcmR7d2l0aH0gc3RhdGVtZW50IGlzCi1hIFxlbXBoe2NvcHl9IG9mIHRoZSBjb250ZXh0IHlvdSBwcm92aWRlZCB0byB0aGUgXGtleXdvcmR7d2l0aH0KLXN0YXRlbWVudCwgc28gbW9kaWZ5aW5nIGl0cyBhdHRyaWJ1dGVzIGRvZXNuJ3QgYWZmZWN0IGFueXRoaW5nIGV4Y2VwdAotdGhhdCB0ZW1wb3JhcnkgY29weS4KLQotWW91IGNhbiB1c2UgYW55IGRlY2ltYWwgY29udGV4dCBpbiBhIFxrZXl3b3Jke3dpdGh9IHN0YXRlbWVudCwgYnV0IGlmCi15b3UganVzdCB3YW50IHRvIG1ha2UgYSB0ZW1wb3JhcnkgY2hhbmdlIHRvIHNvbWUgYXNwZWN0IG9mIHRoZSBjdXJyZW50Ci1jb250ZXh0LCBpdCdzIGVhc2llc3QgdG8ganVzdCB1c2UgXGZ1bmN0aW9ue2dldGNvbnRleHQoKX0gYXMgc2hvd24KLWFib3ZlLgorXGVuZHtmdW5jZGVzY30KIAogTmV3IGNvbnRleHRzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIFxjbGFzc3tDb250ZXh0fSBjb25zdHJ1Y3RvcgogZGVzY3JpYmVkIGJlbG93LiBJbiBhZGRpdGlvbiwgdGhlIG1vZHVsZSBwcm92aWRlcyB0aHJlZSBwcmUtbWFkZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJldHJlZS50ZXggYi9Eb2MvbGliL2xpYmV0cmVlLnRleAppbmRleCAxZjI5ODg3Li5mZmExOTQzIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmV0cmVlLnRleAorKysgYi9Eb2MvbGliL2xpYmV0cmVlLnRleApAQCAtMSw0NSArMSwzNCBAQAotXHNlY3Rpb257XG1vZHVsZXtlbGVtZW50dHJlZX0gLS0tIFRoZSB4bWwuZXRyZWUuRWxlbWVudFRyZWUgTW9kdWxlfQotXGRlY2xhcmVtb2R1bGV7c3RhbmRhcmR9e2VsZW1lbnR0cmVlfQorXHNlY3Rpb257XG1vZHVsZXt4bWwuZXRyZWUuRWxlbWVudFRyZWV9IC0tLSBUaGUgRWxlbWVudFRyZWUgWE1MIEFQSX0KK1xkZWNsYXJlbW9kdWxle3N0YW5kYXJkfXt4bWwuZXRyZWUuRWxlbWVudFRyZWV9CiBcbW9kdWxlYXV0aG9ye0ZyZWRyaWsgTHVuZGh9e2ZyZWRyaWtAcHl0aG9ud2FyZS5jb219Ci1cbW9kdWxlc3lub3BzaXN7VGhpcyBtb2R1bGUgcHJvdmlkZXMgaW1wbGVtZW50YXRpb25zCi1vZiB0aGUgRWxlbWVudCBhbmQgRWxlbWVudFRyZWUgdHlwZXMsIHBsdXMgc3VwcG9ydCBjbGFzc2VzLgorXG1vZHVsZXN5bm9wc2lze0ltcGxlbWVudGF0aW9uIG9mIHRoZSBFbGVtZW50VHJlZSBBUEkufQogCi1BIEMgdmVyc2lvbiBvZiB0aGlzIEFQSSBpcyBhdmFpbGFibGUgYXMgeG1sLmV0cmVlLmNFbGVtZW50VHJlZS59CiBcdmVyc2lvbmFkZGVkezIuNX0KIAotCi1cc3Vic2VjdGlvbntPdmVydmlld1xsYWJlbHtlbGVtZW50dHJlZS1vdmVydmlld319Ci0KIFRoZSBFbGVtZW50IHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0byBzdG9yZQogaGllcmFyY2hpY2FsIGRhdGEgc3RydWN0dXJlcyBpbiBtZW1vcnkuIFRoZSB0eXBlIGNhbiBiZSBkZXNjcmliZWQgYXMgYQogY3Jvc3MgYmV0d2VlbiBhIGxpc3QgYW5kIGEgZGljdGlvbmFyeS4KIAogRWFjaCBlbGVtZW50IGhhcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdDoKKwogXGJlZ2lue2l0ZW1pemV9Ci1caXRlbSB7fSAKLWEgdGFnIHdoaWNoIGlzIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHdoYXQga2luZCBvZiBkYXRhCi10aGlzIGVsZW1lbnQgcmVwcmVzZW50cyAodGhlIGVsZW1lbnQgdHlwZSwgaW4gb3RoZXIgd29yZHMpLgotCi1caXRlbSB7fSAKLWEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMsIHN0b3JlZCBpbiBhIFB5dGhvbiBkaWN0aW9uYXJ5LgotCi1caXRlbSB7fSAKLWEgdGV4dCBzdHJpbmcuCi0KLVxpdGVtIHt9IAotYW4gb3B0aW9uYWwgdGFpbCBzdHJpbmcuCi0KLVxpdGVtIHt9IAotYSBudW1iZXIgb2YgY2hpbGQgZWxlbWVudHMsIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZQotCisgIFxpdGVtIGEgdGFnIHdoaWNoIGlzIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHdoYXQga2luZCBvZiBkYXRhCisgICAgICAgIHRoaXMgZWxlbWVudCByZXByZXNlbnRzICh0aGUgZWxlbWVudCB0eXBlLCBpbiBvdGhlciB3b3JkcykuCisgIFxpdGVtIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMsIHN0b3JlZCBpbiBhIFB5dGhvbiBkaWN0aW9uYXJ5LgorICBcaXRlbSBhIHRleHQgc3RyaW5nLgorICBcaXRlbSBhbiBvcHRpb25hbCB0YWlsIHN0cmluZy4KKyAgXGl0ZW0gYSBudW1iZXIgb2YgY2hpbGQgZWxlbWVudHMsIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZQogXGVuZHtpdGVtaXplfQogCiBUbyBjcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSwgdXNlIHRoZSBFbGVtZW50IG9yIFN1YkVsZW1lbnQgZmFjdG9yeQogZnVuY3Rpb25zLgogCi1UaGUgRWxlbWVudFRyZWUgY2xhc3MgY2FuIGJlIHVzZWQgdG8gd3JhcCBhbiBlbGVtZW50CitUaGUgXGNsYXNze0VsZW1lbnRUcmVlfSBjbGFzcyBjYW4gYmUgdXNlZCB0byB3cmFwIGFuIGVsZW1lbnQKIHN0cnVjdHVyZSwgYW5kIGNvbnZlcnQgaXQgZnJvbSBhbmQgdG8gWE1MLgogCitBIEMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBBUEkgaXMgYXZhaWxhYmxlIGFzCitcbW9kdWxle3htbC5ldHJlZS5jRWxlbWVudFRyZWV9LgorCiAKIFxzdWJzZWN0aW9ue0Z1bmN0aW9uc1xsYWJlbHtlbGVtZW50dHJlZS1mdW5jdGlvbnN9fQogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmZwZWN0bC50ZXggYi9Eb2MvbGliL2xpYmZwZWN0bC50ZXgKaW5kZXggODE0ZTIyNi4uY2NhMjMxNCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJmcGVjdGwudGV4CisrKyBiL0RvYy9saWIvbGliZnBlY3RsLnRleApAQCAtNyw2ICs3LDExIEBACiBcc2VjdGlvbmF1dGhvcntMZWUgQnVzYnl9e2J1c2J5MUBsbG5sLmdvdn0KIFxtb2R1bGVzeW5vcHNpc3tQcm92aWRlIGNvbnRyb2wgZm9yIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiBoYW5kbGluZy59CiAKK1xub3Rle1RoZSBcbW9kdWxle2ZwZWN0bH0gbW9kdWxlIGlzIG5vdCBidWlsdCBieSBkZWZhdWx0LCBhbmQgaXRzIHVzYWdlCisgICAgICBpcyBkaXNjb3VyYWdlZCBhbmQgbWF5IGJlIGRhbmdlcm91cyBleGNlcHQgaW4gdGhlIGhhbmRzIG9mCisgICAgICBleHBlcnRzLiAgU2VlIGFsc28gdGhlIHNlY3Rpb24gXHJlZntmcGVjdGwtbGltaXRhdGlvbnN9IG9uCisgICAgICBsaW1pdGF0aW9ucyBmb3IgbW9yZSBkZXRhaWxzLn0KKwogTW9zdCBjb21wdXRlcnMgY2Fycnkgb3V0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnNcaW5kZXh7SUVFRS03NTR9CiBpbiBjb25mb3JtYW5jZSB3aXRoIHRoZSBzby1jYWxsZWQgSUVFRS03NTQgc3RhbmRhcmQuCiBPbiBhbnkgcmVhbCBjb21wdXRlciwKQEAgLTk1LDcgKzEwMCw3IEBACiBcZW5ke3ZlcmJhdGltfQogCiAKLVxzdWJzZWN0aW9ue0xpbWl0YXRpb25zIGFuZCBvdGhlciBjb25zaWRlcmF0aW9uc30KK1xzdWJzZWN0aW9ue0xpbWl0YXRpb25zIGFuZCBvdGhlciBjb25zaWRlcmF0aW9ucyBcbGFiZWx7ZnBlY3RsLWxpbWl0YXRpb25zfX0KIAogU2V0dGluZyB1cCBhIGdpdmVuIHByb2Nlc3NvciB0byB0cmFwIElFRUUtNzU0IGZsb2F0aW5nIHBvaW50CiBlcnJvcnMgY3VycmVudGx5IHJlcXVpcmVzIGN1c3RvbSBjb2RlIG9uIGEgcGVyLWFyY2hpdGVjdHVyZSBiYXNpcy4KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliZnVuY3MudGV4IGIvRG9jL2xpYi9saWJmdW5jcy50ZXgKaW5kZXggNGRkZTA2NS4uYThjMDZiYiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJmdW5jcy50ZXgKKysrIGIvRG9jL2xpYi9saWJmdW5jcy50ZXgKQEAgLTgwOCw3ICs4MDgsNyBAQAogCiBcYmVnaW57dmVyYmF0aW19CiBjbGFzcyBDKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLl9feCA9IE5vbmUKKyAgICBkZWYgX19pbml0X18oc2VsZik6IHNlbGYuX3ggPSBOb25lCiAgICAgZGVmIGdldHgoc2VsZik6IHJldHVybiBzZWxmLl94CiAgICAgZGVmIHNldHgoc2VsZiwgdmFsdWUpOiBzZWxmLl94ID0gdmFsdWUKICAgICBkZWYgZGVseChzZWxmKTogZGVsIHNlbGYuX3gKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliZ2V0b3B0LnRleCBiL0RvYy9saWIvbGliZ2V0b3B0LnRleAppbmRleCBlOGIxNmEzLi5iMzhmY2Q4IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmdldG9wdC50ZXgKKysrIGIvRG9jL2xpYi9saWJnZXRvcHQudGV4CkBAIC0xMjYsOCArMTI2LDkgQEAKIGRlZiBtYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJobzp2IiwgWyJoZWxwIiwgIm91dHB1dD0iXSkKLSAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgorICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IsIGVycjoKICAgICAgICAgIyBwcmludCBoZWxwIGluZm9ybWF0aW9uIGFuZCBleGl0OgorICAgICAgICBwcmludCBzdHIoZXJyKSAjIHdpbGwgcHJpbnQgc29tZXRoaW5nIGxpa2UgIm9wdGlvbiAtYSBub3QgcmVjb2duaXplZCIKICAgICAgICAgdXNhZ2UoKQogICAgICAgICBzeXMuZXhpdCgyKQogICAgIG91dHB1dCA9IE5vbmUKQEAgLTEzNSwxMSArMTM2LDEzIEBACiAgICAgZm9yIG8sIGEgaW4gb3B0czoKICAgICAgICAgaWYgbyA9PSAiLXYiOgogICAgICAgICAgICAgdmVyYm9zZSA9IFRydWUKLSAgICAgICAgaWYgbyBpbiAoIi1oIiwgIi0taGVscCIpOgorICAgICAgICBlbGlmIG8gaW4gKCItaCIsICItLWhlbHAiKToKICAgICAgICAgICAgIHVzYWdlKCkKICAgICAgICAgICAgIHN5cy5leGl0KCkKLSAgICAgICAgaWYgbyBpbiAoIi1vIiwgIi0tb3V0cHV0Iik6CisgICAgICAgIGVsaWYgbyBpbiAoIi1vIiwgIi0tb3V0cHV0Iik6CiAgICAgICAgICAgICBvdXRwdXQgPSBhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJ1bmhhbmRsZWQgb3B0aW9uIgogICAgICMgLi4uCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmhhc2hsaWIudGV4IGIvRG9jL2xpYi9saWJoYXNobGliLnRleAppbmRleCA2MmUzZmM0Li4xN2Y1MTc5IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmhhc2hsaWIudGV4CisrKyBiL0RvYy9saWIvbGliaGFzaGxpYi50ZXgKQEAgLTg2LDggKzg2LDggQEAKIAogXGJlZ2lue21ldGhvZGRlc2N9W2hhc2hde2RpZ2VzdH17fQogUmV0dXJuIHRoZSBkaWdlc3Qgb2YgdGhlIHN0cmluZ3MgcGFzc2VkIHRvIHRoZSBcbWV0aG9ke3VwZGF0ZSgpfQotbWV0aG9kIHNvIGZhci4gIFRoaXMgaXMgYSAxNi1ieXRlIHN0cmluZyB3aGljaCBtYXkgY29udGFpbgotbm9uLVxBU0NJSXt9IGNoYXJhY3RlcnMsIGluY2x1ZGluZyBudWxsIGJ5dGVzLgorbWV0aG9kIHNvIGZhci4gIFRoaXMgaXMgYSBzdHJpbmcgb2YgXG1lbWJlcntkaWdlc3Rfc2l6ZX0gYnl0ZXMgd2hpY2ggbWF5Citjb250YWluIG5vbi1cQVNDSUl7fSBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgbnVsbCBieXRlcy4KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W2hhc2hde2hleGRpZ2VzdH17fQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJoZWFwcS50ZXggYi9Eb2MvbGliL2xpYmhlYXBxLnRleAppbmRleCBlYWY3MDUxLi41ZjNkOGM1IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmhlYXBxLnRleAorKysgYi9Eb2MvbGliL2xpYmhlYXBxLnRleApAQCAtNzYsMTQgKzc2LDE0IEBACiA+Pj4gZm9yIGl0ZW0gaW4gZGF0YToKIC4uLiAgICAgaGVhcHB1c2goaGVhcCwgaXRlbSkKIC4uLgotPj4+IHNvcnRlZCA9IFtdCis+Pj4gb3JkZXJlZCA9IFtdCiA+Pj4gd2hpbGUgaGVhcDoKLS4uLiAgICAgc29ydGVkLmFwcGVuZChoZWFwcG9wKGhlYXApKQorLi4uICAgICBvcmRlcmVkLmFwcGVuZChoZWFwcG9wKGhlYXApKQogLi4uCi0+Pj4gcHJpbnQgc29ydGVkCis+Pj4gcHJpbnQgb3JkZXJlZAogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCiA+Pj4gZGF0YS5zb3J0KCkKLT4+PiBwcmludCBkYXRhID09IHNvcnRlZAorPj4+IHByaW50IGRhdGEgPT0gb3JkZXJlZAogVHJ1ZQogPj4+CiBcZW5ke3ZlcmJhdGltfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJodHRwbGliLnRleCBiL0RvYy9saWIvbGliaHR0cGxpYi50ZXgKaW5kZXggMDQ5ZjZjNC4uNTU3ZWUzZCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJodHRwbGliLnRleAorKysgYi9Eb2MvbGliL2xpYmh0dHBsaWIudGV4CkBAIC0zMDQsOSArMzA0LDE0IEBACiBUaGlzIHdpbGwgc2VuZCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZAogXHZhcnttZXRob2R9IGFuZCB0aGUgc2VsZWN0b3IgXHZhcnt1cmx9LiAgSWYgdGhlIFx2YXJ7Ym9keX0gYXJndW1lbnQgaXMKIHByZXNlbnQsIGl0IHNob3VsZCBiZSBhIHN0cmluZyBvZiBkYXRhIHRvIHNlbmQgYWZ0ZXIgdGhlIGhlYWRlcnMgYXJlIGZpbmlzaGVkLgorQWx0ZXJuYXRpdmVseSwgaXQgbWF5IGJlIGFuIG9wZW4gZmlsZSBvYmplY3QsIGluIHdoaWNoIGNhc2UgdGhlCitjb250ZW50cyBvZiB0aGUgZmlsZSBpcyBzZW50OyB0aGlzIGZpbGUgb2JqZWN0IHNob3VsZCBzdXBwb3J0CitcY29kZXtmaWxlbm8oKX0gYW5kIFxjb2Rle3JlYWQoKX0gbWV0aG9kcy4KIFRoZSBoZWFkZXIgQ29udGVudC1MZW5ndGggaXMgYXV0b21hdGljYWxseSBzZXQgdG8gdGhlIGNvcnJlY3QgdmFsdWUuCiBUaGUgXHZhcntoZWFkZXJzfSBhcmd1bWVudCBzaG91bGQgYmUgYSBtYXBwaW5nIG9mIGV4dHJhIEhUVFAgaGVhZGVycyB0byBzZW5kCiB3aXRoIHRoZSByZXF1ZXN0LgorCitcdmVyc2lvbmNoYW5nZWRbXHZhcntib2R5fSBjYW4gYmUgYSBmaWxlIG9iamVjdF17Mi42fQogXGVuZHttZXRob2RkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY317Z2V0cmVzcG9uc2V9e30KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliaW1wLnRleCBiL0RvYy9saWIvbGliaW1wLnRleAppbmRleCA1OThkMzUxLi41Mzc5MzA5IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmltcC50ZXgKKysrIGIvRG9jL2xpYi9saWJpbXAudGV4CkBAIC0xNjEsMTAgKzE2MSwxMCBAQAogCiBcYmVnaW57ZnVuY2Rlc2N9e2luaXRfYnVpbHRpbn17bmFtZX0KIEluaXRpYWxpemUgdGhlIGJ1aWx0LWluIG1vZHVsZSBjYWxsZWQgXHZhcntuYW1lfSBhbmQgcmV0dXJuIGl0cyBtb2R1bGUKLW9iamVjdC4gIElmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGl0IHdpbGwgYmUgaW5pdGlhbGl6ZWQKLVxlbXBoe2FnYWlufS4gIEEgZmV3IG1vZHVsZXMgY2Fubm90IGJlIGluaXRpYWxpemVkIHR3aWNlIC0tLSBhdHRlbXB0aW5nCi10byBpbml0aWFsaXplIHRoZXNlIGFnYWluIHdpbGwgcmFpc2UgYW4gXGV4Y2VwdGlvbntJbXBvcnRFcnJvcn0KLWV4Y2VwdGlvbi4gIElmIHRoZXJlIGlzIG5vCitvYmplY3QgYWxvbmcgd2l0aCBzdG9yaW5nIGl0IGluIFxjb2Rle3N5cy5tb2R1bGVzfS4gIElmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkKK2luaXRpYWxpemVkLCBpdCB3aWxsIGJlIGluaXRpYWxpemVkIFxlbXBoe2FnYWlufS4gIFJlLWluaXRpYWxpemF0aW9uIGludm9sdmVzCit0aGUgY29weWluZyBvZiB0aGUgYnVpbHQtaW4gbW9kdWxlJ3MgXGNvZGV7X19kaWN0X199IGZyb20gdGhlIGNhY2hlZAorbW9kdWxlIG92ZXIgdGhlIG1vZHVsZSdzIGVudHJ5IGluIFxjb2Rle3N5cy5tb2R1bGVzfS4gIElmIHRoZXJlIGlzIG5vCiBidWlsdC1pbiBtb2R1bGUgY2FsbGVkIFx2YXJ7bmFtZX0sIFxjb2Rle05vbmV9IGlzIHJldHVybmVkLgogXGVuZHtmdW5jZGVzY30KIApAQCAtMjA4LDE0ICsyMDgsMTUgQEAKIFxiZWdpbntmdW5jZGVzY317bG9hZF9keW5hbWljfXtuYW1lLCBwYXRobmFtZVxvcHRpb25hbHssIGZpbGV9fQogTG9hZCBhbmQgaW5pdGlhbGl6ZSBhIG1vZHVsZSBpbXBsZW1lbnRlZCBhcyBhIGR5bmFtaWNhbGx5IGxvYWRhYmxlCiBzaGFyZWQgbGlicmFyeSBhbmQgcmV0dXJuIGl0cyBtb2R1bGUgb2JqZWN0LiAgSWYgdGhlIG1vZHVsZSB3YXMKLWFscmVhZHkgaW5pdGlhbGl6ZWQsIGl0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgXGVtcGh7YWdhaW59LiAgU29tZSBtb2R1bGVzCi1kb24ndCBsaWtlIHRoYXQgYW5kIG1heSByYWlzZSBhbiBleGNlcHRpb24uICBUaGUgXHZhcntwYXRobmFtZX0KLWFyZ3VtZW50IG11c3QgcG9pbnQgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5LiAgVGhlIFx2YXJ7bmFtZX0gYXJndW1lbnQgaXMKLXVzZWQgdG8gY29uc3RydWN0IHRoZSBuYW1lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjogYW4gZXh0ZXJuYWwKLUMgZnVuY3Rpb24gY2FsbGVkIFxzYW1we2luaXRcdmFye25hbWV9KCl9IGluIHRoZSBzaGFyZWQgbGlicmFyeSBpcwotY2FsbGVkLiAgVGhlIG9wdGlvbmFsIFx2YXJ7ZmlsZX0gYXJndW1lbnQgaXMgaWdub3JlZC4gIChOb3RlOiB1c2luZwotc2hhcmVkIGxpYnJhcmllcyBpcyBoaWdobHkgc3lzdGVtIGRlcGVuZGVudCwgYW5kIG5vdCBhbGwgc3lzdGVtcwotc3VwcG9ydCBpdC4pCithbHJlYWR5IGluaXRpYWxpemVkLCBpdCB3aWxsIGJlIGluaXRpYWxpemVkIFxlbXBoe2FnYWlufS4KK1JlLWluaXRpYWxpemF0aW9uIGludm9sdmVzIGNvcHlpbmcgdGhlIFxjb2Rle19fZGljdF9ffSBhdHRyaWJ1dGUgb2YgdGhlIGNhY2hlZAoraW5zdGFuY2Ugb2YgdGhlIG1vZHVsZSBvdmVyIHRoZSB2YWx1ZSB1c2VkIGluIHRoZSBtb2R1bGUgY2FjaGVkIGluCitcY29kZXtzeXMubW9kdWxlc30uICBUaGUgXHZhcntwYXRobmFtZX0gYXJndW1lbnQgbXVzdCBwb2ludCB0byB0aGUgc2hhcmVkCitsaWJyYXJ5LiAgVGhlIFx2YXJ7bmFtZX0gYXJndW1lbnQgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIG5hbWUgb2YgdGhlCitpbml0aWFsaXphdGlvbiBmdW5jdGlvbjogYW4gZXh0ZXJuYWwgQyBmdW5jdGlvbiBjYWxsZWQKK1xzYW1we2luaXRcdmFye25hbWV9KCl9IGluIHRoZSBzaGFyZWQgbGlicmFyeSBpcyBjYWxsZWQuICBUaGUgb3B0aW9uYWwKK1x2YXJ7ZmlsZX0gYXJndW1lbnQgaXMgaWdub3JlZC4gIChOb3RlOiB1c2luZyBzaGFyZWQgbGlicmFyaWVzIGlzIGhpZ2hseQorc3lzdGVtIGRlcGVuZGVudCwgYW5kIG5vdCBhbGwgc3lzdGVtcyBzdXBwb3J0IGl0LikKIFxlbmR7ZnVuY2Rlc2N9CiAKIFxiZWdpbntmdW5jZGVzY317bG9hZF9zb3VyY2V9e25hbWUsIHBhdGhuYW1lXG9wdGlvbmFseywgZmlsZX19CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYml0ZXJ0b29scy50ZXggYi9Eb2MvbGliL2xpYml0ZXJ0b29scy50ZXgKaW5kZXggMjBiYmM4ZC4uNTlmYmQ5OCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJpdGVydG9vbHMudGV4CisrKyBiL0RvYy9saWIvbGliaXRlcnRvb2xzLnRleApAQCAtNDc0LDggKzQ3NCw4IEBACiAgICAgcmV0dXJuIGl6aXAobWFwcGluZy5pdGVya2V5cygpLCBtYXBwaW5nLml0ZXJ2YWx1ZXMoKSkKIAogZGVmIG50aChpdGVyYWJsZSwgbik6Ci0gICAgIlJldHVybnMgdGhlIG50aCBpdGVtIgotICAgIHJldHVybiBsaXN0KGlzbGljZShpdGVyYWJsZSwgbiwgbisxKSkKKyAgICAiUmV0dXJucyB0aGUgbnRoIGl0ZW0gb3IgcmFpc2UgSW5kZXhFcnJvciIKKyAgICByZXR1cm4gbGlzdChpc2xpY2UoaXRlcmFibGUsIG4sIG4rMSkpWzBdCiAKIGRlZiBhbGwoc2VxLCBwcmVkPU5vbmUpOgogICAgICJSZXR1cm5zIFRydWUgaWYgcHJlZCh4KSBpcyB0cnVlIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBpdGVyYWJsZSIKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlibG9nZ2luZy50ZXggYi9Eb2MvbGliL2xpYmxvZ2dpbmcudGV4CmluZGV4IGNjNDQyOTQuLmUwMWZlMGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlibG9nZ2luZy50ZXgKKysrIGIvRG9jL2xpYi9saWJsb2dnaW5nLnRleApAQCAtNTI4LDggKzUyOCw4IEBACiBcbWV0aG9ke2ZpbHRlcigpfS4KIFxlbmR7bWV0aG9kZGVzY30KIAotXGJlZ2lue21ldGhvZGRlc2N9e21ha2VSZWNvcmR9e25hbWUsIGx2bCwgZm4sIGxubywgbXNnLCBhcmdzLCBleGNfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLCBleHRyYX0KK1xiZWdpbnttZXRob2RkZXNjfXttYWtlUmVjb3JkfXtuYW1lLCBsdmwsIGZuLCBsbm8sIG1zZywgYXJncywgZXhjX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcb3B0aW9uYWx7LCBmdW5jLCBleHRyYX19CiBUaGlzIGlzIGEgZmFjdG9yeSBtZXRob2Qgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3NlcyB0byBjcmVhdGUKIHNwZWNpYWxpemVkIFxjbGFzc3tMb2dSZWNvcmR9IGluc3RhbmNlcy4KIFx2ZXJzaW9uY2hhbmdlZFtcdmFye2Z1bmN9IGFuZCBcdmFye2V4dHJhfSB3ZXJlIGFkZGVkXXsyLjV9CkBAIC0xMzk3LDYgKzEzOTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKGlmIGF2YWlsYWJsZSkufQogXGxpbmVpaXtcJShjcmVhdGVkKWZ9ICB7VGltZSB3aGVuIHRoZSBcY2xhc3N7TG9nUmVjb3JkfSB3YXMgY3JlYXRlZCAoYXMKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGJ5IFxmdW5jdGlvbnt0aW1lLnRpbWUoKX0pLn0KK1xsaW5laWl7XCUocmVsYXRpdmVDcmVhdGVkKWR9ICB7VGltZSBpbiBtaWxsaXNlY29uZHMgd2hlbiB0aGUgTG9nUmVjb3JkIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCwgcmVsYXRpdmUgdG8gdGhlIHRpbWUgdGhlIGxvZ2dpbmcgbW9kdWxlIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkLn0KIFxsaW5laWl7XCUoYXNjdGltZSlzfSAge0h1bWFuLXJlYWRhYmxlIHRpbWUgd2hlbiB0aGUgXGNsYXNze0xvZ1JlY29yZH0KICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBjcmVhdGVkLiAgQnkgZGVmYXVsdCB0aGlzIGlzIG9mIHRoZSBmb3JtCiAgICAgICAgICAgICAgICAgICAgICAgICBgYDIwMDMtMDctMDggMTY6NDk6NDUsODk2JycgKHRoZSBudW1iZXJzIGFmdGVyIHRoZQpAQCAtMTQ3OSw3ICsxNDgyLDcgQEAKIGluZm9ybWF0aW9uIHRvIGJlIGxvZ2dlZC4KIAogXGJlZ2lue2NsYXNzZGVzY317TG9nUmVjb3JkfXtuYW1lLCBsdmwsIHBhdGhuYW1lLCBsaW5lbm8sIG1zZywgYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm99CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvIFxvcHRpb25hbHssIGZ1bmN9fQogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBcY2xhc3N7TG9nUmVjb3JkfSBpbml0aWFsaXplZCB3aXRoIGludGVyZXN0aW5nCiBpbmZvcm1hdGlvbi4gVGhlIFx2YXJ7bmFtZX0gaXMgdGhlIGxvZ2dlciBuYW1lOyBcdmFye2x2bH0gaXMgdGhlCiBudW1lcmljIGxldmVsOyBcdmFye3BhdGhuYW1lfSBpcyB0aGUgYWJzb2x1dGUgcGF0aG5hbWUgb2YgdGhlIHNvdXJjZQpAQCAtMTQ4OSw3ICsxNDkyLDkgQEAKIHdoaWNoLCB0b2dldGhlciB3aXRoIFx2YXJ7bXNnfSwgbWFrZXMgdXAgdGhlIHVzZXIgbWVzc2FnZTsgYW5kCiBcdmFye2V4Y19pbmZvfSBpcyB0aGUgZXhjZXB0aW9uIHR1cGxlIG9idGFpbmVkIGJ5IGNhbGxpbmcKIFxmdW5jdGlvbntzeXMuZXhjX2luZm8oKSB9KG9yIFxjb25zdGFudHtOb25lfSwgaWYgbm8gZXhjZXB0aW9uIGluZm9ybWF0aW9uCi1pcyBhdmFpbGFibGUpLgoraXMgYXZhaWxhYmxlKS4gVGhlIFx2YXJ7ZnVuY30gaXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGZyb20gd2hpY2ggdGhlCitsb2dnaW5nIGNhbGwgd2FzIG1hZGUuIElmIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIFx2YXJ7Tm9uZX0uCitcdmVyc2lvbmNoYW5nZWRbXHZhcntmdW5jfSB3YXMgYWRkZWRdezIuNX0KIFxlbmR7Y2xhc3NkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY317Z2V0TWVzc2FnZX17fQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJtc2lsaWIudGV4IGIvRG9jL2xpYi9saWJtc2lsaWIudGV4CmluZGV4IDFlMDQ0ZjQuLjEzZDU1NTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlibXNpbGliLnRleAorKysgYi9Eb2MvbGliL2xpYm1zaWxpYi50ZXgKQEAgLTM0NCw4ICszNDQsOCBAQAogXHN1YnNlY3Rpb257RmVhdHVyZXNcbGFiZWx7ZmVhdHVyZXN9fQogCiBcYmVnaW57Y2xhc3NkZXNjfXtGZWF0dXJlfXtkYXRhYmFzZSwgaWQsIHRpdGxlLCBkZXNjLCBkaXNwbGF5XG9wdGlvbmFseywKLSAgICBsZXZlbD0xXG9wdGlvbmFseywgcGFyZW50XG9wdGlvbmFsXHssIGRpcmVjdG9yeVxvcHRpb25hbHssIAotICAgIGF0dHJpYnV0ZXM9MH19fX0KKyAgICBsZXZlbD0xXG9wdGlvbmFseywgcGFyZW50XG9wdGlvbmFseywgZGlyZWN0b3J5XG9wdGlvbmFseywgCisgICAgYXR0cmlidXRlcz0wfX19fX0KIAogICBBZGQgYSBuZXcgcmVjb3JkIHRvIHRoZSBcY29kZXtGZWF0dXJlfSB0YWJsZSwgdXNpbmcgdGhlIHZhbHVlcwogICBcdmFye2lkfSwgXHZhcntwYXJlbnQuaWR9LCBcdmFye3RpdGxlfSwgXHZhcntkZXNjfSwgXHZhcntkaXNwbGF5fSwKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlib3MudGV4IGIvRG9jL2xpYi9saWJvcy50ZXgKaW5kZXggOWRlZDNhZS4uMzU1ZDhmYSAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJvcy50ZXgKKysrIGIvRG9jL2xpYi9saWJvcy50ZXgKQEAgLTM2MSw2ICszNjEsMTAgQEAKIGVycm9ycyksIFxjb2Rle05vbmV9IGlzIHJldHVybmVkLgogQXZhaWxhYmlsaXR5OiBNYWNpbnRvc2gsIFxVTklYLCBXaW5kb3dzLgogCitUaGUgXG1vZHVsZXtzdWJwcm9jZXNzfSBtb2R1bGUgcHJvdmlkZXMgbW9yZSBwb3dlcmZ1bCBmYWNpbGl0aWVzIGZvcgorc3Bhd25pbmcgbmV3IHByb2Nlc3NlcyBhbmQgcmV0cmlldmluZyB0aGVpciByZXN1bHRzOyB1c2luZyB0aGF0IG1vZHVsZQoraXMgcHJlZmVyYWJsZSB0byB1c2luZyB0aGlzIGZ1bmN0aW9uLgorCiBcdmVyc2lvbmNoYW5nZWRbVGhpcyBmdW5jdGlvbiB3b3JrZWQgdW5yZWxpYWJseSB1bmRlciBXaW5kb3dzIGluCiAgIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLiAgVGhpcyB3YXMgZHVlIHRvIHRoZSB1c2Ugb2YgdGhlCiAgIFxjZnVuY3Rpb257X3BvcGVuKCl9IGZ1bmN0aW9uIGZyb20gdGhlIGxpYnJhcmllcyBwcm92aWRlZCB3aXRoCkBAIC0zNzUsOCArMzc5LDEzIEBACiBBdmFpbGFiaWxpdHk6IE1hY2ludG9zaCwgXFVOSVgsIFdpbmRvd3MuCiBcZW5ke2Z1bmNkZXNjfQogCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IFxmdW5jdGlvbntwb3BlbiooKX0gZnVuY3Rpb25zIHRoYXQKK3Byb3ZpZGUgc2xpZ2h0bHkgZGlmZmVyZW50IHdheXMgdG8gY3JlYXRlIHN1YnByb2Nlc3Nlcy4gIE5vdGUgdGhhdCB0aGUKK1xtb2R1bGV7c3VicHJvY2Vzc30gbW9kdWxlIGlzIGVhc2llciB0byB1c2UgYW5kIG1vcmUgcG93ZXJmdWw7Citjb25zaWRlciB1c2luZyB0aGF0IG1vZHVsZSBiZWZvcmUgd3JpdGluZyBjb2RlIHVzaW5nIHRoZQorbG93ZXItbGV2ZWwgXGZ1bmN0aW9ue3BvcGVuKigpfSBmdW5jdGlvbnMuCiAKLUZvciBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgXGZ1bmN0aW9ue3BvcGVuKCl9IHZhcmlhbnRzLCBpZiBcdmFye2J1ZnNpemV9IGlzCitGb3IgZWFjaCBvZiB0aGUgXGZ1bmN0aW9ue3BvcGVuKigpfSB2YXJpYW50cywgaWYgXHZhcntidWZzaXplfSBpcwogc3BlY2lmaWVkLCBpdCBzcGVjaWZpZXMgdGhlIGJ1ZmZlciBzaXplIGZvciB0aGUgSS9PIHBpcGVzLgogXHZhcnttb2RlfSwgaWYgcHJvdmlkZWQsIHNob3VsZCBiZSB0aGUgc3RyaW5nIFxjb2RleydiJ30gb3IKIFxjb2Rleyd0J307IG9uIFdpbmRvd3MgdGhpcyBpcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZpbGUKQEAgLTkyMCw2ICs5MjksOCBAQAogcG9pbnRzLiAgVGhlIHJlc3VsdCBtYXkgYmUgZWl0aGVyIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGhuYW1lOyBpZgogaXQgaXMgcmVsYXRpdmUsIGl0IG1heSBiZSBjb252ZXJ0ZWQgdG8gYW4gYWJzb2x1dGUgcGF0aG5hbWUgdXNpbmcKIFxjb2Rle29zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoXHZhcntwYXRofSksIFx2YXJ7cmVzdWx0fSl9LgorXHZlcnNpb25jaGFuZ2VkIFtJZiB0aGUgXHZhcntwYXRofSBpcyBhIFVuaWNvZGUgb2JqZWN0IHRoZSByZXN1bHQgd2lsbCBhbHNvCitiZSBhIFVuaWNvZGUgb2JqZWN0XXsyLjZ9CiBBdmFpbGFiaWxpdHk6IE1hY2ludG9zaCwgXFVOSVguCiBcZW5ke2Z1bmNkZXNjfQogCkBAIC0xNTQ1LDcgKzE1NTYsMTMgQEAKIFxmdW5jbGluZXtzcGF3bnZlfXttb2RlLCBwYXRoLCBhcmdzLCBlbnZ9CiBcZnVuY2xpbmV7c3Bhd252cH17bW9kZSwgZmlsZSwgYXJnc30KIFxmdW5jbGluZXtzcGF3bnZwZX17bW9kZSwgZmlsZSwgYXJncywgZW52fQotRXhlY3V0ZSB0aGUgcHJvZ3JhbSBcdmFye3BhdGh9IGluIGEgbmV3IHByb2Nlc3MuICBJZiBcdmFye21vZGV9IGlzCitFeGVjdXRlIHRoZSBwcm9ncmFtIFx2YXJ7cGF0aH0gaW4gYSBuZXcgcHJvY2Vzcy4gIAorCisoTm90ZSB0aGF0IHRoZSBcbW9kdWxle3N1YnByb2Nlc3N9IG1vZHVsZSBwcm92aWRlcyBtb3JlIHBvd2VyZnVsCitmYWNpbGl0aWVzIGZvciBzcGF3bmluZyBuZXcgcHJvY2Vzc2VzIGFuZCByZXRyaWV2aW5nIHRoZWlyIHJlc3VsdHM7Cit1c2luZyB0aGF0IG1vZHVsZSBpcyBwcmVmZXJhYmxlIHRvIHVzaW5nIHRoZXNlIGZ1bmN0aW9ucy4pCisKK0lmIFx2YXJ7bW9kZX0gaXMKIFxjb25zdGFudHtQX05PV0FJVH0sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJvY2VzcyBJRCBvZiB0aGUgbmV3CiBwcm9jZXNzOyBpZiBcdmFye21vZGV9IGlzIFxjb25zdGFudHtQX1dBSVR9LCByZXR1cm5zIHRoZSBwcm9jZXNzJ3MKIGV4aXQgY29kZSBpZiBpdCBleGl0cyBub3JtYWxseSwgb3IgXGNvZGV7LVx2YXJ7c2lnbmFsfX0sIHdoZXJlCkBAIC0xNjgyLDYgKzE2OTksMTAgQEAKIGEgbm9uLW5hdGl2ZSBzaGVsbCwgY29uc3VsdCB5b3VyIHNoZWxsIGRvY3VtZW50YXRpb24uCiAKIEF2YWlsYWJpbGl0eTogTWFjaW50b3NoLCBcVU5JWCwgV2luZG93cy4KKworVGhlIFxtb2R1bGV7c3VicHJvY2Vzc30gbW9kdWxlIHByb3ZpZGVzIG1vcmUgcG93ZXJmdWwgZmFjaWxpdGllcyBmb3IKK3NwYXduaW5nIG5ldyBwcm9jZXNzZXMgYW5kIHJldHJpZXZpbmcgdGhlaXIgcmVzdWx0czsgdXNpbmcgdGhhdCBtb2R1bGUKK2lzIHByZWZlcmFibGUgdG8gdXNpbmcgdGhpcyBmdW5jdGlvbi4KIFxlbmR7ZnVuY2Rlc2N9CiAKIFxiZWdpbntmdW5jZGVzY317dGltZXN9e30KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlicGlja2xlLnRleCBiL0RvYy9saWIvbGlicGlja2xlLnRleAppbmRleCBhOGFiMzllLi4zMjkwNjQxIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnBpY2tsZS50ZXgKKysrIGIvRG9jL2xpYi9saWJwaWNrbGUudGV4CkBAIC01MTksNyArNTE5LDcgQEAKIHZlcnNpb24gb2YgdGhlIG9iamVjdC4gIFRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIHR1cGxlIHdpbGwgcHJvdmlkZQogYXJndW1lbnRzIGZvciB0aGlzIGNhbGxhYmxlLCBhbmQgbGF0ZXIgZWxlbWVudHMgcHJvdmlkZSBhZGRpdGlvbmFsCiBzdGF0ZSBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGJlIHVzZWQgdG8gZnVsbHkgcmVjb25zdHJ1Y3QKLXRoZSBwaWNrbGVkIGRhdGUuCit0aGUgcGlja2xlZCBkYXRhLgogCiBJbiB0aGUgdW5waWNrbGluZyBlbnZpcm9ubWVudCB0aGlzIG9iamVjdCBtdXN0IGJlIGVpdGhlciBhIGNsYXNzLCBhCiBjYWxsYWJsZSByZWdpc3RlcmVkIGFzIGEgYGBzYWZlIGNvbnN0cnVjdG9yJycgKHNlZSBiZWxvdyksIG9yIGl0IG11c3QKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlicG9wZW4yLnRleCBiL0RvYy9saWIvbGlicG9wZW4yLnRleAppbmRleCA5ODVmNTgwLi5mYTBjMWE2IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnBvcGVuMi50ZXgKKysrIGIvRG9jL2xpYi9saWJwb3BlbjIudGV4CkBAIC0xMSwxMCArMTEsMTAgQEAKIGlucHV0L291dHB1dC9lcnJvciBwaXBlcyBhbmQgb2J0YWluIHRoZWlyIHJldHVybiBjb2RlcyB1bmRlcgogXFVOSVh7fSBhbmQgV2luZG93cy4KIAotTm90ZSB0aGF0IHN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMCwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZQotdXNpbmcgZnVuY3Rpb25zIGZyb20gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZSB3aGljaCBoYXZlIHRoZSBzYW1lCi1uYW1lcyBhcyB0aGUgZmFjdG9yeSBmdW5jdGlvbnMgaGVyZSwgYnV0IHRoZSBvcmRlciBvZiB0aGUgcmV0dXJuCi12YWx1ZXMgaXMgbW9yZSBpbnR1aXRpdmUgaW4gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZSB2YXJpYW50cy4KK1RoZSBcbW9kdWxle3N1YnByb2Nlc3N9IG1vZHVsZSBwcm92aWRlcyBtb3JlIHBvd2VyZnVsIGZhY2lsaXRpZXMgZm9yCitzcGF3bmluZyBuZXcgcHJvY2Vzc2VzIGFuZCByZXRyaWV2aW5nIHRoZWlyIHJlc3VsdHMuICBVc2luZyB0aGUKK1xtb2R1bGV7c3VicHJvY2Vzc30gbW9kdWxlIGlzIHByZWZlcmFibGUgdG8gdXNpbmcgdGhlIFxtb2R1bGV7cG9wZW4yfQorbW9kdWxlLgogCiBUaGUgcHJpbWFyeSBpbnRlcmZhY2Ugb2ZmZXJlZCBieSB0aGlzIG1vZHVsZSBpcyBhIHRyaW8gb2YgZmFjdG9yeQogZnVuY3Rpb25zLiAgRm9yIGVhY2ggb2YgdGhlc2UsIGlmIFx2YXJ7YnVmc2l6ZX0gaXMgc3BlY2lmaWVkLCAKQEAgLTE4NCwzICsxODQsNyBAQAogc2VwYXJhdGUgdGhyZWFkcyB0byByZWFkIGVhY2ggb2YgdGhlIGluZGl2aWR1YWwgZmlsZXMgcHJvdmlkZWQgYnkKIHdoaWNoZXZlciBcZnVuY3Rpb257cG9wZW4qKCl9IGZ1bmN0aW9uIG9yIFxjbGFzc3tQb3Blbip9IGNsYXNzIHdhcwogdXNlZC4KKworXGJlZ2lue3NlZWFsc299CisgIFxzZWVtb2R1bGV7c3VicHJvY2Vzc317TW9kdWxlIGZvciBzcGF3bmluZyBhbmQgbWFuYWdpbmcgc3VicHJvY2Vzc2VzLn0KK1xlbmR7c2VlYWxzb30KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlicHlleHBhdC50ZXggYi9Eb2MvbGliL2xpYnB5ZXhwYXQudGV4CmluZGV4IDgzNTgxZWMuLmEwZWE4YTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlicHlleHBhdC50ZXgKKysrIGIvRG9jL2xpYi9saWJweWV4cGF0LnRleApAQCAtMjE2LDkgKzIxNiwxMCBAQAogCiBcYmVnaW57bWVtYmVyZGVzY31beG1scGFyc2VyXXtyZXR1cm5zX3VuaWNvZGV9IAogSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvIGEgbm9uLXplcm8gaW50ZWdlciwgdGhlIGhhbmRsZXIgZnVuY3Rpb25zCi13aWxsIGJlIHBhc3NlZCBVbmljb2RlIHN0cmluZ3MuICBJZiBcbWVtYmVye3JldHVybnNfdW5pY29kZX0gaXMgMCwKLTgtYml0IHN0cmluZ3MgY29udGFpbmluZyBVVEYtOCBlbmNvZGVkIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCi1oYW5kbGVycy4KK3dpbGwgYmUgcGFzc2VkIFVuaWNvZGUgc3RyaW5ncy4gIElmIFxtZW1iZXJ7cmV0dXJuc191bmljb2RlfSBpcworXGNvbnN0YW50e0ZhbHNlfSwgOC1iaXQgc3RyaW5ncyBjb250YWluaW5nIFVURi04IGVuY29kZWQgZGF0YSB3aWxsIGJlCitwYXNzZWQgdG8gdGhlIGhhbmRsZXJzLiAgVGhpcyBpcyBcY29uc3RhbnR7VHJ1ZX0gYnkgZGVmYXVsdCB3aGVuCitQeXRob24gaXMgYnVpbHQgd2l0aCBVbmljb2RlIHN1cHBvcnQuCiBcdmVyc2lvbmNoYW5nZWRbQ2FuIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgdG8gYWZmZWN0IHRoZSByZXN1bHQKICAgdHlwZV17MS42fQogXGVuZHttZW1iZXJkZXNjfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJzbXRwbGliLnRleCBiL0RvYy9saWIvbGlic210cGxpYi50ZXgKaW5kZXggZGRmMTc2NC4uOTYyMzgzZiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJzbXRwbGliLnRleAorKysgYi9Eb2MvbGliL2xpYnNtdHBsaWIudGV4CkBAIC0yOCw2ICsyOCwxOCBAQAogaW5jbHVkZWQgYmVsb3cuCiBcZW5ke2NsYXNzZGVzY30KIAorXGJlZ2lue2NsYXNzZGVzY317U01UUF9TU0x9e1xvcHRpb25hbHtob3N0XG9wdGlvbmFseywgcG9ydFxvcHRpb25hbHssCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9ob3N0bmFtZVxvcHRpb25hbHssCisgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlXG9wdGlvbmFseywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlfX19fX19CitBIFxjbGFzc3tTTVRQX1NTTH0gaW5zdGFuY2UgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIGluc3RhbmNlcyBvZiBcY2xhc3N7U01UUH0uCitcY2xhc3N7U01UUF9TU0x9IHNob3VsZCBiZSB1c2VkIGZvciBzaXR1YXRpb25zIHdoZXJlIFNTTCBpcyByZXF1aXJlZCBmcm9tIAordGhlIGJlZ2lubmluZyBvZiB0aGUgY29ubmVjdGlvbiBhbmQgdXNpbmcgXG1ldGhvZHtzdGFydHRscygpfSBpcyBub3QgYXBwcm9wcmlhdGUuCitJZiBcdmFye2hvc3R9IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsb2NhbCBob3N0IGlzIHVzZWQuIElmIFx2YXJ7cG9ydH0gaXMKK29taXR0ZWQsIHRoZSBzdGFuZGFyZCBTTVRQLW92ZXItU1NMIHBvcnQgKDQ2NSkgaXMgdXNlZC4gXHZhcntrZXlmaWxlfSBhbmQgXHZhcntjZXJ0ZmlsZX0KK2FyZSBhbHNvIG9wdGlvbmFsLCBhbmQgY2FuIGNvbnRhaW4gYSBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZAorY2VydGlmaWNhdGUgY2hhaW4gZmlsZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLgorXGVuZHtjbGFzc2Rlc2N9CiAKIEEgbmljZSBzZWxlY3Rpb24gb2YgZXhjZXB0aW9ucyBpcyBkZWZpbmVkIGFzIHdlbGw6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic29ja2V0LnRleCBiL0RvYy9saWIvbGlic29ja2V0LnRleAppbmRleCBhYTc1ZWM5Li5mNTEwZmQ0IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnNvY2tldC50ZXgKKysrIGIvRG9jL2xpYi9saWJzb2NrZXQudGV4CkBAIC0yNDEsOCArMjQxLDggQEAKIFRoaXMgb3BlcmF0aW9uIGFzc3VtZXMgdGhhdCB0aGVyZSBpcyBhIHZhbGlkIGFkZHJlc3MtdG8taG9zdCBtYXBwaW5nIGZvcgogdGhlIGhvc3QsIGFuZCB0aGUgYXNzdW1wdGlvbiBkb2VzIG5vdCBhbHdheXMgaG9sZC4KIE5vdGU6IFxmdW5jdGlvbntnZXRob3N0bmFtZSgpfSBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlIGZ1bGx5IHF1YWxpZmllZAotZG9tYWluIG5hbWU7IHVzZSBcY29kZXtnZXRob3N0YnlhZGRyKGdldGhvc3RuYW1lKCkpfQotKHNlZSBiZWxvdykuCitkb21haW4gbmFtZTsgdXNlIFxjb2Rle2dldGZxZG4oKX0KKyhzZWUgYWJvdmUpLgogXGVuZHtmdW5jZGVzY30KIAogXGJlZ2lue2Z1bmNkZXNjfXtnZXRob3N0YnlhZGRyfXtpcF9hZGRyZXNzfQpAQCAtNzEyLDE0ICs3MTIsMTUgQEAKIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9e3NlcnZlcn17fQotUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBBU04uMSBkaXN0aW5ndWlzaGVkIG5hbWUgaWRlbnRpZnlpbmcgdGhlIAotc2VydmVyJ3MgY2VydGlmaWNhdGUuICAoU2VlIGJlbG93IGZvciBhbiBleGFtcGxlCi1zaG93aW5nIHdoYXQgZGlzdGluZ3Vpc2hlZCBuYW1lcyBsb29rIGxpa2UuKQorUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4KK1VzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzOyBkbyBub3QgcGFyc2UgdGhlIGNvbnRlbnQgb2YgdGhpcyBzdHJpbmcKK2JlY2F1c2UgaXRzIGZvcm1hdCBjYW4ndCBiZSBwYXJzZWQgdW5hbWJpZ3VvdXNseS4KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9e2lzc3Vlcn17fQotUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBBU04uMSBkaXN0aW5ndWlzaGVkIG5hbWUgaWRlbnRpZnlpbmcgdGhlCi1pc3N1ZXIgb2YgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLgorUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBpc3N1ZXIgb2YgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLgorVXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM7IGRvIG5vdCBwYXJzZSB0aGUgY29udGVudCBvZiB0aGlzIHN0cmluZworYmVjYXVzZSBpdHMgZm9ybWF0IGNhbid0IGJlIHBhcnNlZCB1bmFtYmlndW91c2x5LgogXGVuZHttZXRob2RkZXNjfQogCiBcc3Vic2VjdGlvbntFeGFtcGxlIFxsYWJlbHtzb2NrZXQtZXhhbXBsZX19CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnNxbGl0ZTMudGV4IGIvRG9jL2xpYi9saWJzcWxpdGUzLnRleAppbmRleCBkODdlMDY0Li44MjQxNmZhIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnNxbGl0ZTMudGV4CisrKyBiL0RvYy9saWIvbGlic3FsaXRlMy50ZXgKQEAgLTYsMTQgKzYsMTYgQEAKIFxzZWN0aW9uYXV0aG9ye0dlcmhhcmQgSMOkcmluZ317Z2hAZ2hhZXJpbmcuZGV9CiBcdmVyc2lvbmFkZGVkezIuNX0KIAotU1FMaXRlIGlzIGEgQyBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgYSBTUUwtbGFuZ3VhZ2UgZGF0YWJhc2UgdGhhdAotc3RvcmVzIGRhdGEgaW4gZGlzayBmaWxlcyB3aXRob3V0IHJlcXVpcmluZyBhIHNlcGFyYXRlIHNlcnZlciBwcm9jZXNzLgorU1FMaXRlIGlzIGEgQyBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgYSBsaWdodHdlaWdodCBkaXNrLWJhc2VkIGRhdGFiYXNlCit0aGF0IGRvZXNuJ3QgcmVxdWlyZSBhIHNlcGFyYXRlIHNlcnZlciBwcm9jZXNzIGFuZCBhbGxvd3MgYWNjZXNzaW5nCit0aGUgZGF0YWJhc2UgdXNpbmcgYSBub25zdGFuZGFyZCB2YXJpYW50IG9mIHRoZSBTUUwgcXVlcnkgbGFuZ3VhZ2UuCitTb21lIGFwcGxpY2F0aW9ucyBjYW4gdXNlIFNRTGl0ZSBmb3IgaW50ZXJuYWwgZGF0YSBzdG9yYWdlLiAgSXQncyBhbHNvCitwb3NzaWJsZSB0byBwcm90b3R5cGUgYW4gYXBwbGljYXRpb24gdXNpbmcgU1FMaXRlIGFuZCB0aGVuIHBvcnQgdGhlCitjb2RlIHRvIGEgbGFyZ2VyIGRhdGFiYXNlIHN1Y2ggYXMgUG9zdGdyZVNRTCBvciBPcmFjbGUuCisgCiBweXNxbGl0ZSB3YXMgd3JpdHRlbiBieSBHZXJoYXJkIEhcImFyaW5nIGFuZCBwcm92aWRlcyBhIFNRTCBpbnRlcmZhY2UKIGNvbXBsaWFudCB3aXRoIHRoZSBEQi1BUEkgMi4wIHNwZWNpZmljYXRpb24gZGVzY3JpYmVkIGJ5Ci1ccGVwezI0OX0uIFRoaXMgbWVhbnMgdGhhdCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gd3JpdGUgdGhlIGZpcnN0Ci12ZXJzaW9uIG9mIHlvdXIgYXBwbGljYXRpb25zIHVzaW5nIFNRTGl0ZSBmb3IgZGF0YSBzdG9yYWdlLiAgSWYKLXN3aXRjaGluZyB0byBhIGxhcmdlciBkYXRhYmFzZSBzdWNoIGFzIFBvc3RncmVTUUwgb3IgT3JhY2xlIGlzCi1sYXRlciBuZWNlc3NhcnksIHRoZSBzd2l0Y2ggc2hvdWxkIGJlIHJlbGF0aXZlbHkgZWFzeS4KK1xwZXB7MjQ5fS4gCiAKIFRvIHVzZSB0aGUgbW9kdWxlLCB5b3UgbXVzdCBmaXJzdCBjcmVhdGUgYSBcY2xhc3N7Q29ubmVjdGlvbn0gb2JqZWN0CiB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGFiYXNlLiAgSGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgCkBAIC0zNCw4ICszNiw4IEBACiAKICMgQ3JlYXRlIHRhYmxlCiBjLmV4ZWN1dGUoJycnY3JlYXRlIHRhYmxlIHN0b2NrcwotKGRhdGUgdGltZXN0YW1wLCB0cmFucyB2YXJjaGFyLCBzeW1ib2wgdmFyY2hhciwKLSBxdHkgZGVjaW1hbCwgcHJpY2UgZGVjaW1hbCknJycpCisoZGF0ZSB0ZXh0LCB0cmFucyB0ZXh0LCBzeW1ib2wgdGV4dCwKKyBxdHkgcmVhbCwgcHJpY2UgcmVhbCknJycpCiAKICMgSW5zZXJ0IGEgcm93IG9mIGRhdGEKIGMuZXhlY3V0ZSgiIiJpbnNlcnQgaW50byBzdG9ja3MKQEAgLTE0NCwxMSArMTQ2LDExIEBACiB3YWl0IGZvciB0aGUgbG9jayB0byBnbyBhd2F5IHVudGlsIHJhaXNpbmcgYW4gZXhjZXB0aW9uLiBUaGUgZGVmYXVsdCBmb3IgdGhlCiB0aW1lb3V0IHBhcmFtZXRlciBpcyA1LjAgKGZpdmUgc2Vjb25kcykuIAogCi1Gb3IgdGhlIFx2YXJ7aXNvbGF0aW9uX2xldmVsfSBwYXJhbWV0ZXIsIHBsZWFzZSBzZWUgXG1lbWJlcntpc29sYXRpb25fbGV2ZWx9Ci1ccmVme3NxbGl0ZTMtQ29ubmVjdGlvbi1Jc29sYXRpb25MZXZlbH0gcHJvcGVydHkgb2YgXGNsYXNze0Nvbm5lY3Rpb259IG9iamVjdHMuCitGb3IgdGhlIFx2YXJ7aXNvbGF0aW9uX2xldmVsfSBwYXJhbWV0ZXIsIHBsZWFzZSBzZWUgdGhlIFxtZW1iZXJ7aXNvbGF0aW9uX2xldmVsfQorcHJvcGVydHkgb2YgXGNsYXNze0Nvbm5lY3Rpb259IG9iamVjdHMgaW4gc2VjdGlvbn5ccmVme3NxbGl0ZTMtQ29ubmVjdGlvbi1Jc29sYXRpb25MZXZlbH0uCiAKIFNRTGl0ZSBuYXRpdmVseSBzdXBwb3J0cyBvbmx5IHRoZSB0eXBlcyBURVhULCBJTlRFR0VSLCBGTE9BVCwgQkxPQiBhbmQgTlVMTC4gSWYKLXlvdSB3YW50IHRvIHVzZSBvdGhlciB0eXBlcywgbGlrZSB5b3UgaGF2ZSB0byBhZGQgc3VwcG9ydCBmb3IgdGhlbSB5b3Vyc2VsZi4KK3lvdSB3YW50IHRvIHVzZSBvdGhlciB0eXBlcyB5b3UgbXVzdCBhZGQgc3VwcG9ydCBmb3IgdGhlbSB5b3Vyc2VsZi4KIFRoZSBcdmFye2RldGVjdF90eXBlc30gcGFyYW1ldGVyIGFuZCB0aGUgdXNpbmcgY3VzdG9tIFxzdHJvbmd7Y29udmVydGVyc30gcmVnaXN0ZXJlZCB3aXRoCiB0aGUgbW9kdWxlLWxldmVsIFxmdW5jdGlvbntyZWdpc3Rlcl9jb252ZXJ0ZXJ9IGZ1bmN0aW9uIGFsbG93IHlvdSB0byBlYXNpbHkgZG8gdGhhdC4KIApAQCAtMTk1LDcgKzE5Nyw3IEBACiAgICAgXHZlcmJhdGltaW5wdXR7c3FsaXRlMy9jb21wbGV0ZV9zdGF0ZW1lbnQucHl9CiBcZW5ke2Z1bmNkZXNjfQogCi1cYmVnaW57ZnVuY2Rlc2N9e31lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrc3tmbGFnfQorXGJlZ2lue2Z1bmNkZXNjfXtlbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrc317ZmxhZ30KIEJ5IGRlZmF1bHQgeW91IHdpbGwgbm90IGdldCBhbnkgdHJhY2ViYWNrcyBpbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLAogYWdncmVnYXRlcywgY29udmVydGVycywgYXV0aG9yaXplciBjYWxsYmFja3MgZXRjLiBJZiB5b3Ugd2FudCB0byBkZWJ1ZyB0aGVtLAogeW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBcdmFye2ZsYWd9IGFzIFRydWUuIEFmdGVyd2FyZHMsIHlvdSB3aWxsIGdldApAQCAtMjEwLDEzICsyMTIsMTQgQEAKIFxsYWJlbHtzcWxpdGUzLUNvbm5lY3Rpb24tSXNvbGF0aW9uTGV2ZWx9CiBcYmVnaW57bWVtYmVyZGVzY317aXNvbGF0aW9uX2xldmVsfQogICBHZXQgb3Igc2V0IHRoZSBjdXJyZW50IGlzb2xhdGlvbiBsZXZlbC4gTm9uZSBmb3IgYXV0b2NvbW1pdCBtb2RlIG9yIG9uZSBvZgotICAiREVGRVJSRUQiLCAiSU1NRURJQVRFIiBvciAiRVhMVVNJVkUiLiBTZWUgIENvbnRyb2xsaW5nIFRyYW5zYWN0aW9ucwotICBccmVme3NxbGl0ZTMtQ29udHJvbGxpbmctVHJhbnNhY3Rpb25zfSBmb3IgYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uLgorICAiREVGRVJSRUQiLCAiSU1NRURJQVRFIiBvciAiRVhMVVNJVkUiLiBTZWUgYGBDb250cm9sbGluZyBUcmFuc2FjdGlvbnMnJywgCisgIHNlY3Rpb25+XHJlZntzcWxpdGUzLUNvbnRyb2xsaW5nLVRyYW5zYWN0aW9uc30sIGZvciBhIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24uCiBcZW5ke21lbWJlcmRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfXtjdXJzb3J9e1xvcHRpb25hbHtjdXJzb3JDbGFzc319CiAgIFRoZSBjdXJzb3IgbWV0aG9kIGFjY2VwdHMgYSBzaW5nbGUgb3B0aW9uYWwgcGFyYW1ldGVyIFx2YXJ7Y3Vyc29yQ2xhc3N9LgotICBUaGlzIGlzIGEgY3VzdG9tIGN1cnNvciBjbGFzcyB3aGljaCBtdXN0IGV4dGVuZCBcY2xhc3N7c3FsaXRlMy5DdXJzb3J9LgorICBJZiBzdXBwbGllZCwgdGhpcyBtdXN0IGJlIGEgY3VzdG9tIGN1cnNvciBjbGFzcyB0aGF0IGV4dGVuZHMgCisgIFxjbGFzc3tzcWxpdGUzLkN1cnNvcn0uCiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfXtleGVjdXRlfXtzcWwsIFxvcHRpb25hbHtwYXJhbWV0ZXJzfX0KQEAgLTI0Miw3ICsyNDUsNyBAQAogQ3JlYXRlcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiB0aGF0IHlvdSBjYW4gbGF0ZXIgdXNlIGZyb20gd2l0aGluIFNRTAogc3RhdGVtZW50cyB1bmRlciB0aGUgZnVuY3Rpb24gbmFtZSBcdmFye25hbWV9LiBcdmFye251bV9wYXJhbXN9IGlzIHRoZSBudW1iZXIKIG9mIHBhcmFtZXRlcnMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMsIGFuZCBcdmFye2Z1bmN9IGlzIGEgUHl0aG9uIGNhbGxhYmxlIHRoYXQgaXMKLWNhbGxlZCBhcyBTUUwgZnVuY3Rpb24uCitjYWxsZWQgYXMgdGhlIFNRTCBmdW5jdGlvbi4KIAogVGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW55IG9mIHRoZSB0eXBlcyBzdXBwb3J0ZWQgYnkgU1FMaXRlOiB1bmljb2RlLCBzdHIsCiBpbnQsIGxvbmcsIGZsb2F0LCBidWZmZXIgYW5kIE5vbmUuCkBAIC0yNzIsNyArMjc1LDcgQEAKIAogQ3JlYXRlcyBhIGNvbGxhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgXHZhcntuYW1lfSBhbmQgXHZhcntjYWxsYWJsZX0uIFRoZQogY2FsbGFibGUgd2lsbCBiZSBwYXNzZWQgdHdvIHN0cmluZyBhcmd1bWVudHMuIEl0IHNob3VsZCByZXR1cm4gLTEgaWYgdGhlIGZpcnN0Ci1pcyBvcmRlcmVkIGxvd2VyIHRoYW4gdGhlIHNlY29uZCwgMCBpZiB0aGV5IGFyZSBvcmRlcmVkIGVxdWFsIGFuZCAxIGFuZCBpZiB0aGUKK2lzIG9yZGVyZWQgbG93ZXIgdGhhbiB0aGUgc2Vjb25kLCAwIGlmIHRoZXkgYXJlIG9yZGVyZWQgZXF1YWwgYW5kIDEgaWYgdGhlCiBmaXJzdCBpcyBvcmRlcmVkIGhpZ2hlciB0aGFuIHRoZSBzZWNvbmQuICBOb3RlIHRoYXQgdGhpcyBjb250cm9scyBzb3J0aW5nCiAoT1JERVIgQlkgaW4gU1FMKSBzbyB5b3VyIGNvbXBhcmlzb25zIGRvbid0IGFmZmVjdCBvdGhlciBTUUwgb3BlcmF0aW9ucy4KIApAQCAtMzIxLDIwICszMjQsMjEgQEAKIAogXGJlZ2lue21lbWJlcmRlc2N9e3Jvd19mYWN0b3J5fQogICBZb3UgY2FuIGNoYW5nZSB0aGlzIGF0dHJpYnV0ZSB0byBhIGNhbGxhYmxlIHRoYXQgYWNjZXB0cyB0aGUgY3Vyc29yIGFuZAotICB0aGUgb3JpZ2luYWwgcm93IGFzIHR1cGxlIGFuZCB3aWxsIHJldHVybiB0aGUgcmVhbCByZXN1bHQgcm93LiAgVGhpcwotICB3YXksIHlvdSBjYW4gaW1wbGVtZW50IG1vcmUgYWR2YW5jZWQgd2F5cyBvZiByZXR1cm5pbmcgcmVzdWx0cywgbGlrZQotICBvbmVzIHRoYXQgY2FuIGFsc28gYWNjZXNzIGNvbHVtbnMgYnkgbmFtZS4KKyAgdGhlIG9yaWdpbmFsIHJvdyBhcyBhIHR1cGxlIGFuZCB3aWxsIHJldHVybiB0aGUgcmVhbCByZXN1bHQgcm93LiAgVGhpcworICB3YXksIHlvdSBjYW4gaW1wbGVtZW50IG1vcmUgYWR2YW5jZWQgd2F5cyBvZiByZXR1cm5pbmcgcmVzdWx0cywgc3VjaCAKKyAgYXMgcmV0dXJuaW5nIGFuIG9iamVjdCB0aGF0IGNhbiBhbHNvIGFjY2VzcyBjb2x1bW5zIGJ5IG5hbWUuCiAKICAgRXhhbXBsZToKIAogICBcdmVyYmF0aW1pbnB1dHtzcWxpdGUzL3Jvd19mYWN0b3J5LnB5fQogCi0gIElmIHRoZSBzdGFuZGFyZCB0dXBsZSB0eXBlcyBkb24ndCBzdWZmaWNlIGZvciB5b3UsIGFuZCB5b3Ugd2FudCBuYW1lLWJhc2VkCisgIElmIHJldHVybmluZyBhIHR1cGxlIGRvZXNuJ3Qgc3VmZmljZSBhbmQgeW91IHdhbnQgbmFtZS1iYXNlZAogICBhY2Nlc3MgdG8gY29sdW1ucywgeW91IHNob3VsZCBjb25zaWRlciBzZXR0aW5nIFxtZW1iZXJ7cm93X2ZhY3Rvcnl9IHRvIHRoZQotICBoaWdobHktb3B0aW1pemVkIHNxbGl0ZTMuUm93IHR5cGUuIEl0IHByb3ZpZGVzIGJvdGgKKyAgaGlnaGx5LW9wdGltaXplZCBcY2xhc3N7c3FsaXRlMy5Sb3d9IHR5cGUuIFxjbGFzc3tSb3d9IHByb3ZpZGVzIGJvdGgKICAgaW5kZXgtYmFzZWQgYW5kIGNhc2UtaW5zZW5zaXRpdmUgbmFtZS1iYXNlZCBhY2Nlc3MgdG8gY29sdW1ucyB3aXRoIGFsbW9zdAotICBubyBtZW1vcnkgb3ZlcmhlYWQuIE11Y2ggYmV0dGVyIHRoYW4geW91ciBvd24gY3VzdG9tIGRpY3Rpb25hcnktYmFzZWQKLSAgYXBwcm9hY2ggb3IgZXZlbiBhIGRiX3JvdyBiYXNlZCBzb2x1dGlvbi4KKyAgbm8gbWVtb3J5IG92ZXJoZWFkLiBJdCB3aWxsIHByb2JhYmx5IGJlIGJldHRlciB0aGFuIHlvdXIgb3duIGN1c3RvbSAKKyAgZGljdGlvbmFyeS1iYXNlZCBhcHByb2FjaCBvciBldmVuIGEgZGJfcm93IGJhc2VkIHNvbHV0aW9uLgorICAlIFhYWCB3aGF0J3MgYSBkYl9yb3ctYmFzZWQgc29sdXRpb24/CiBcZW5ke21lbWJlcmRlc2N9CiAKIFxiZWdpbnttZW1iZXJkZXNjfXt0ZXh0X2ZhY3Rvcnl9CkBAIC0zNDgsNyArMzUyLDcgQEAKICAgYXR0cmlidXRlIHRvIFxjb25zdGFudHtzcWxpdGUzLk9wdGltaXplZFVuaWNvZGV9LgogCiAgIFlvdSBjYW4gYWxzbyBzZXQgaXQgdG8gYW55IG90aGVyIGNhbGxhYmxlIHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBieXRlc3RyaW5nCi0gIHBhcmFtZXRlciBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9iamVjdC4KKyAgcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2JqZWN0LgogCiAgIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBmb3IgaWxsdXN0cmF0aW9uOgogCkBAIC0zNTYsNyArMzYwLDcgQEAKIFxlbmR7bWVtYmVyZGVzY30KIAogXGJlZ2lue21lbWJlcmRlc2N9e3RvdGFsX2NoYW5nZXN9Ci0gIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBkYXRhYmFzZSByb3dzIHRoYXQgaGF2ZSBiZSBtb2RpZmllZCwgaW5zZXJ0ZWQsCisgIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBkYXRhYmFzZSByb3dzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLCBpbnNlcnRlZCwKICAgb3IgZGVsZXRlZCBzaW5jZSB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiB3YXMgb3BlbmVkLgogXGVuZHttZW1iZXJkZXNjfQogCkBAIC0zODMsOSArMzg3LDkgQEAKIAogICAgIFx2ZXJiYXRpbWlucHV0e3NxbGl0ZTMvZXhlY3V0ZV8yLnB5fQogCi0gICAgXG1ldGhvZHtleGVjdXRlfSB3aWxsIG9ubHkgZXhlY3V0ZSBhIHNpbmdsZSBTUUwgc3RhdGVtZW50LiBJZiB5b3UgdHJ5IHRvCisgICAgXG1ldGhvZHtleGVjdXRlKCl9IHdpbGwgb25seSBleGVjdXRlIGEgc2luZ2xlIFNRTCBzdGF0ZW1lbnQuIElmIHlvdSB0cnkgdG8KICAgICBleGVjdXRlIG1vcmUgdGhhbiBvbmUgc3RhdGVtZW50IHdpdGggaXQsIGl0IHdpbGwgcmFpc2UgYSBXYXJuaW5nLiBVc2UKLSAgICBcbWV0aG9ke2V4ZWN1dGVzY3JpcHR9IGlmIHdhbnQgdG8gZXhlY3V0ZSBtdWx0aXBsZSBTUUwgc3RhdGVtZW50cyB3aXRoIG9uZQorICAgIFxtZXRob2R7ZXhlY3V0ZXNjcmlwdCgpfSBpZiB5b3Ugd2FudCB0byBleGVjdXRlIG11bHRpcGxlIFNRTCBzdGF0ZW1lbnRzIHdpdGggb25lCiAgICAgY2FsbC4KIFxlbmR7bWV0aG9kZGVzY30KIApAQCAtMzkzLDcgKzM5Nyw3IEBACiBcYmVnaW57bWV0aG9kZGVzY317ZXhlY3V0ZW1hbnl9e3NxbCwgc2VxX29mX3BhcmFtZXRlcnN9CiBFeGVjdXRlcyBhIFNRTCBjb21tYW5kIGFnYWluc3QgYWxsIHBhcmFtZXRlciBzZXF1ZW5jZXMgb3IgbWFwcGluZ3MgZm91bmQgaW4gdGhlCiBzZXF1ZW5jZSBcdmFye3NxbH0uIFRoZSBcbW9kdWxle3NxbGl0ZTN9IG1vZHVsZSBhbHNvIGFsbG93cwotdG8gdXNlIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIHBhcmFtZXRlcnMgaW5zdGVhZCBvZiBhIHNlcXVlbmNlLgordXNpbmcgYW4gaXRlcmF0b3IgeWllbGRpbmcgcGFyYW1ldGVycyBpbnN0ZWFkIG9mIGEgc2VxdWVuY2UuCiAKIFx2ZXJiYXRpbWlucHV0e3NxbGl0ZTMvZXhlY3V0ZW1hbnlfMS5weX0KIApAQCAtNDA1LDcgKzQwOSw3IEBACiBcYmVnaW57bWV0aG9kZGVzY317ZXhlY3V0ZXNjcmlwdH17c3FsX3NjcmlwdH0KIAogVGhpcyBpcyBhIG5vbnN0YW5kYXJkIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgZXhlY3V0aW5nIG11bHRpcGxlIFNRTCBzdGF0ZW1lbnRzCi1hdCBvbmNlLiBJdCBpc3N1ZXMgYSBDT01NSVQgc3RhdGVtZW50IGJlZm9yZSwgdGhlbiBleGVjdXRlcyB0aGUgU1FMIHNjcmlwdCBpdAorYXQgb25jZS4gSXQgaXNzdWVzIGEgQ09NTUlUIHN0YXRlbWVudCBmaXJzdCwgdGhlbiBleGVjdXRlcyB0aGUgU1FMIHNjcmlwdCBpdAogZ2V0cyBhcyBhIHBhcmFtZXRlci4KIAogXHZhcntzcWxfc2NyaXB0fSBjYW4gYmUgYSBieXRlc3RyaW5nIG9yIGEgVW5pY29kZSBzdHJpbmcuCkBAIC00NjIsMjAgKzQ2NiwxOSBAQAogXGxpbmVpaXtCTE9CfXtidWZmZXJ9CiBcZW5ke3RhYmxlaWl9CiAKLVRoZSB0eXBlIHN5c3RlbSBvZiB0aGUgXG1vZHVsZXtzcWxpdGUzfSBtb2R1bGUgaXMgZXh0ZW5zaWJsZSBpbiBib3RoIHdheXM6IHlvdSBjYW4gc3RvcmUKK1RoZSB0eXBlIHN5c3RlbSBvZiB0aGUgXG1vZHVsZXtzcWxpdGUzfSBtb2R1bGUgaXMgZXh0ZW5zaWJsZSBpbiB0d28gd2F5czogeW91IGNhbiBzdG9yZQogYWRkaXRpb25hbCBQeXRob24gdHlwZXMgaW4gYSBTUUxpdGUgZGF0YWJhc2UgdmlhIG9iamVjdCBhZGFwdGF0aW9uLCBhbmQgeW91IGNhbgogbGV0IHRoZSBcbW9kdWxle3NxbGl0ZTN9IG1vZHVsZSBjb252ZXJ0IFNRTGl0ZSB0eXBlcyB0byBkaWZmZXJlbnQgUHl0aG9uIHR5cGVzIHZpYQogY29udmVydGVycy4KIAogXHN1YnN1YnNlY3Rpb257VXNpbmcgYWRhcHRlcnMgdG8gc3RvcmUgYWRkaXRpb25hbCBQeXRob24gdHlwZXMgaW4gU1FMaXRlIGRhdGFiYXNlc30KIAotTGlrZSBkZXNjcmliZWQgYmVmb3JlLCBTUUxpdGUgc3VwcG9ydHMgb25seSBhIGxpbWl0ZWQgc2V0IG9mIHR5cGVzIG5hdGl2ZWx5LiBUbworQXMgZGVzY3JpYmVkIGJlZm9yZSwgU1FMaXRlIHN1cHBvcnRzIG9ubHkgYSBsaW1pdGVkIHNldCBvZiB0eXBlcyBuYXRpdmVseS4gVG8KIHVzZSBvdGhlciBQeXRob24gdHlwZXMgd2l0aCBTUUxpdGUsIHlvdSBtdXN0IFxzdHJvbmd7YWRhcHR9IHRoZW0gdG8gb25lIG9mIHRoZSBzcWxpdGUzCi1tb2R1bGUncyBzdXBwb3J0ZWQgdHlwZXMgZm9yIFNRTGl0ZS4gU28sIG9uZSBvZiBOb25lVHlwZSwgaW50LCBsb25nLCBmbG9hdCwKK21vZHVsZSdzIHN1cHBvcnRlZCB0eXBlcyBmb3IgU1FMaXRlOiBvbmUgb2YgTm9uZVR5cGUsIGludCwgbG9uZywgZmxvYXQsCiBzdHIsIHVuaWNvZGUsIGJ1ZmZlci4KIAotVGhlIFxtb2R1bGV7c3FsaXRlM30gbW9kdWxlIHVzZXMgdGhlIFB5dGhvbiBvYmplY3QgYWRhcHRhdGlvbiwgbGlrZSBkZXNjcmliZWQgaW4gUEVQIDI0NgotZm9yIHRoaXMuICBUaGUgcHJvdG9jb2wgdG8gdXNlIGlzIFxjbGFzc3tQcmVwYXJlUHJvdG9jb2x9LgorVGhlIFxtb2R1bGV7c3FsaXRlM30gbW9kdWxlIHVzZXMgUHl0aG9uIG9iamVjdCBhZGFwdGF0aW9uLCBhcyBkZXNjcmliZWQgaW4gXHBlcHsyNDZ9IGZvciB0aGlzLiAgVGhlIHByb3RvY29sIHRvIHVzZSBpcyBcY2xhc3N7UHJlcGFyZVByb3RvY29sfS4KIAogVGhlcmUgYXJlIHR3byB3YXlzIHRvIGVuYWJsZSB0aGUgXG1vZHVsZXtzcWxpdGUzfSBtb2R1bGUgdG8gYWRhcHQgYSBjdXN0b20gUHl0aG9uIHR5cGUKIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG9uZXMuCkBAIC00OTEsOCArNDk0LDggQEAKICAgICAgICAgc2VsZi54LCBzZWxmLnkgPSB4LCB5CiBcZW5ke3ZlcmJhdGltfQogCi1Ob3cgeW91IHdhbnQgdG8gc3RvcmUgdGhlIHBvaW50IGluIGEgc2luZ2xlIFNRTGl0ZSBjb2x1bW4uIFlvdSdsbCBoYXZlIHRvCi1jaG9vc2Ugb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHlwZXMgZmlyc3QgdGhhdCB5b3UgdXNlIHRvIHJlcHJlc2VudCB0aGUgcG9pbnQgaW4uCitOb3cgeW91IHdhbnQgdG8gc3RvcmUgdGhlIHBvaW50IGluIGEgc2luZ2xlIFNRTGl0ZSBjb2x1bW4uICBGaXJzdCB5b3UnbGwgaGF2ZSB0bworY2hvb3NlIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHR5cGVzIGZpcnN0IHRvIGJlIHVzZWQgZm9yIHJlcHJlc2VudGluZyB0aGUgcG9pbnQuCiBMZXQncyBqdXN0IHVzZSBzdHIgYW5kIHNlcGFyYXRlIHRoZSBjb29yZGluYXRlcyB1c2luZyBhIHNlbWljb2xvbi4gVGhlbiB5b3UKIG5lZWQgdG8gZ2l2ZSB5b3VyIGNsYXNzIGEgbWV0aG9kIFxjb2Rle19fY29uZm9ybV9fKHNlbGYsIHByb3RvY29sKX0gd2hpY2ggbXVzdAogcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUuIFRoZSBwYXJhbWV0ZXIgXHZhcntwcm90b2NvbH0gd2lsbCBiZQpAQCAtNTA1LDEzICs1MDgsMTMgQEAKIFRoZSBvdGhlciBwb3NzaWJpbGl0eSBpcyB0byBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIHRoZSB0eXBlIHRvIHRoZQogc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFuZCByZWdpc3RlciB0aGUgZnVuY3Rpb24gd2l0aCBcbWV0aG9ke3JlZ2lzdGVyX2FkYXB0ZXJ9LgogCi0gICAgXHZlcmJhdGltaW5wdXR7c3FsaXRlMy9hZGFwdGVyX3BvaW50XzIucHl9Ci0KIFxiZWdpbntub3RpY2V9CiBUaGUgdHlwZS9jbGFzcyB0byBhZGFwdCBtdXN0IGJlIGEgbmV3LXN0eWxlIGNsYXNzLCBpLiBlLiBpdCBtdXN0IGhhdmUKIFxjbGFzc3tvYmplY3R9IGFzIG9uZSBvZiBpdHMgYmFzZXMuCiBcZW5ke25vdGljZX0KIAorICAgIFx2ZXJiYXRpbWlucHV0e3NxbGl0ZTMvYWRhcHRlcl9wb2ludF8yLnB5fQorCiBUaGUgXG1vZHVsZXtzcWxpdGUzfSBtb2R1bGUgaGFzIHR3byBkZWZhdWx0IGFkYXB0ZXJzIGZvciBQeXRob24ncyBidWlsdC1pbgogXGNsYXNze2RhdGV0aW1lLmRhdGV9IGFuZCBcY2xhc3N7ZGF0ZXRpbWUuZGF0ZXRpbWV9IHR5cGVzLiAgTm93IGxldCdzIHN1cHBvc2UKIHdlIHdhbnQgdG8gc3RvcmUgXGNsYXNze2RhdGV0aW1lLmRhdGV0aW1lfSBvYmplY3RzIG5vdCBpbiBJU08gcmVwcmVzZW50YXRpb24sCkBAIC01MjEsMTYgKzUyNCwxNyBAQAogCiBcc3Vic3Vic2VjdGlvbntDb252ZXJ0aW5nIFNRTGl0ZSB2YWx1ZXMgdG8gY3VzdG9tIFB5dGhvbiB0eXBlc30KIAotTm93IHRoYXQncyBhbGwgbmljZSBhbmQgZGFuZHkgdGhhdCB5b3UgY2FuIHNlbmQgY3VzdG9tIFB5dGhvbiB0eXBlcyB0byBTUUxpdGUuCitXcml0aW5nIGFuIGFkYXB0ZXIgbGV0cyB5b3Ugc2VuZCBjdXN0b20gUHl0aG9uIHR5cGVzIHRvIFNRTGl0ZS4KIEJ1dCB0byBtYWtlIGl0IHJlYWxseSB1c2VmdWwgd2UgbmVlZCB0byBtYWtlIHRoZSBQeXRob24gdG8gU1FMaXRlIHRvIFB5dGhvbgotcm91bmR0cmlwIHdvcmsuCityb3VuZHRyaXAgd29yay4gIAogCiBFbnRlciBjb252ZXJ0ZXJzLgogCi1MZXQncyBnbyBiYWNrIHRvIHRoZSBQb2ludCBjbGFzcy4gV2Ugc3RvcmVkIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHNlcGFyYXRlZAotdmlhIHNlbWljb2xvbnMgYXMgc3RyaW5ncyBpbiBTUUxpdGUuCitMZXQncyBnbyBiYWNrIHRvIHRoZSBcY2xhc3N7UG9pbnR9IGNsYXNzLiBXZSBzdG9yZWQgdGhlIHggYW5kIHkKK2Nvb3JkaW5hdGVzIHNlcGFyYXRlZCB2aWEgc2VtaWNvbG9ucyBhcyBzdHJpbmdzIGluIFNRTGl0ZS4KIAotTGV0J3MgZmlyc3QgZGVmaW5lIGEgY29udmVydGVyIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgc3RyaW5nIGFzIGEgcGFyYW1ldGVyIGFuZCBjb25zdHJ1Y3RzIGEgUG9pbnQgb2JqZWN0IGZyb20gaXQuCitGaXJzdCwgd2UnbGwgZGVmaW5lIGEgY29udmVydGVyIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgc3RyaW5nIGFzIGEKK3BhcmFtZXRlciBhbmQgY29uc3RydWN0cyBhIFxjbGFzc3tQb2ludH0gb2JqZWN0IGZyb20gaXQuCiAKIFxiZWdpbntub3RpY2V9CiBDb252ZXJ0ZXIgZnVuY3Rpb25zIFxzdHJvbmd7YWx3YXlzfSBnZXQgY2FsbGVkIHdpdGggYSBzdHJpbmcsIG5vIG1hdHRlcgpAQCAtNTU2LDExICs1NjAsMTIgQEAKICBcaXRlbSBFeHBsaWNpdGx5IHZpYSB0aGUgY29sdW1uIG5hbWUKIFxlbmR7aXRlbWl6ZX0KIAotQm90aCB3YXlzIGFyZSBkZXNjcmliZWQgYXQgXHJlZntzcWxpdGUzLU1vZHVsZS1Db250ZW50c30gaW4gdGhlIHRleHQgZXhwbGFpbmluZwotdGhlIGNvbnN0YW50cyBcY29uc3RhbnR7UEFSU0VfREVDTFRZUEVTfSBhbmQgXGNvbnN0YW50e1BBUlNFX0NPbE5BTUVTfS4KK0JvdGggd2F5cyBhcmUgZGVzY3JpYmVkIGluIGBgTW9kdWxlIENvbnN0YW50cycnLCBzZWN0aW9uflxyZWZ7c3FsaXRlMy1Nb2R1bGUtQ29udGVudHN9LCBpbgordGhlIGVudHJpZXMgZm9yIHRoZSBjb25zdGFudHMgXGNvbnN0YW50e1BBUlNFX0RFQ0xUWVBFU30gYW5kCitcY29uc3RhbnR7UEFSU0VfQ09MTkFNRVN9LgogCiAKLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbGx1c3RyYXRlcyBib3RoIHdheXMuCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgaWxsdXN0cmF0ZXMgYm90aCBhcHByb2FjaGVzLgogCiAgICAgXHZlcmJhdGltaW5wdXR7c3FsaXRlMy9jb252ZXJ0ZXJfcG9pbnQucHl9CiAKQEAgLTU2OSw4ICs1NzQsOCBAQAogVGhlcmUgYXJlIGRlZmF1bHQgYWRhcHRlcnMgZm9yIHRoZSBkYXRlIGFuZCBkYXRldGltZSB0eXBlcyBpbiB0aGUgZGF0ZXRpbWUKIG1vZHVsZS4gVGhleSB3aWxsIGJlIHNlbnQgYXMgSVNPIGRhdGVzL0lTTyB0aW1lc3RhbXBzIHRvIFNRTGl0ZS4KIAotVGhlIGRlZmF1bHQgY29udmVydGVycyBhcmUgcmVnaXN0ZXJlZCB1bmRlciB0aGUgbmFtZSAiZGF0ZSIgZm9yIGRhdGV0aW1lLmRhdGUKLWFuZCB1bmRlciB0aGUgbmFtZSAidGltZXN0YW1wIiBmb3IgZGF0ZXRpbWUuZGF0ZXRpbWUuCitUaGUgZGVmYXVsdCBjb252ZXJ0ZXJzIGFyZSByZWdpc3RlcmVkIHVuZGVyIHRoZSBuYW1lICJkYXRlIiBmb3IgXGNsYXNze2RhdGV0aW1lLmRhdGV9CithbmQgdW5kZXIgdGhlIG5hbWUgInRpbWVzdGFtcCIgZm9yIFxjbGFzc3tkYXRldGltZS5kYXRldGltZX0uCiAKIFRoaXMgd2F5LCB5b3UgY2FuIHVzZSBkYXRlL3RpbWVzdGFtcHMgZnJvbSBQeXRob24gd2l0aG91dCBhbnkgYWRkaXRpb25hbAogZmlkZGxpbmcgaW4gbW9zdCBjYXNlcy4gVGhlIGZvcm1hdCBvZiB0aGUgYWRhcHRlcnMgaXMgYWxzbyBjb21wYXRpYmxlIHdpdGggdGhlCkBAIC01ODIsMTIgKzU4NywxMiBAQAogCiBcc3Vic2VjdGlvbntDb250cm9sbGluZyBUcmFuc2FjdGlvbnMgXGxhYmVse3NxbGl0ZTMtQ29udHJvbGxpbmctVHJhbnNhY3Rpb25zfX0KIAotQnkgZGVmYXVsdCwgdGhlIFxtb2R1bGV7c3FsaXRlM30gbW9kdWxlIG9wZW5zIHRyYW5zYWN0aW9ucyBpbXBsaWNpdGx5IGJlZm9yZSBhIERNTAotc3RhdGVtZW50IChJTlNFUlQvVVBEQVRFL0RFTEVURS9SRVBMQUNFKSwgYW5kIGNvbW1pdHMgdHJhbnNhY3Rpb25zIGltcGxpY2l0bHkKLWJlZm9yZSBhIG5vbi1ETUwsIG5vbi1EUUwgc3RhdGVtZW50IChpLiBlLiBhbnl0aGluZyBvdGhlciB0aGFuCitCeSBkZWZhdWx0LCB0aGUgXG1vZHVsZXtzcWxpdGUzfSBtb2R1bGUgb3BlbnMgdHJhbnNhY3Rpb25zIGltcGxpY2l0bHkgYmVmb3JlIGEgRGF0YSBNb2RpZmljYXRpb24gTGFuZ3VhZ2UgKERNTCkgCitzdGF0ZW1lbnQgKGkuZS4gSU5TRVJUL1VQREFURS9ERUxFVEUvUkVQTEFDRSksIGFuZCBjb21taXRzIHRyYW5zYWN0aW9ucyBpbXBsaWNpdGx5CitiZWZvcmUgYSBub24tRE1MLCBub24tcXVlcnkgc3RhdGVtZW50IChpLiBlLiBhbnl0aGluZyBvdGhlciB0aGFuCiBTRUxFQ1QvSU5TRVJUL1VQREFURS9ERUxFVEUvUkVQTEFDRSkuCiAKLVNvIGlmIHlvdSBhcmUgd2l0aGluIGEgdHJhbnNhY3Rpb24sIGFuZCBpc3N1ZSBhIGNvbW1hbmQgbGlrZSBcY29kZXtDUkVBVEUgVEFCTEUKK1NvIGlmIHlvdSBhcmUgd2l0aGluIGEgdHJhbnNhY3Rpb24gYW5kIGlzc3VlIGEgY29tbWFuZCBsaWtlIFxjb2Rle0NSRUFURSBUQUJMRQogLi4ufSwgXGNvZGV7VkFDVVVNfSwgXGNvZGV7UFJBR01BfSwgdGhlIFxtb2R1bGV7c3FsaXRlM30gbW9kdWxlIHdpbGwgY29tbWl0IGltcGxpY2l0bHkKIGJlZm9yZSBleGVjdXRpbmcgdGhhdCBjb21tYW5kLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgZm9yIGRvaW5nIHRoYXQuIFRoZSBmaXJzdAogaXMgdGhhdCBzb21lIG9mIHRoZXNlIGNvbW1hbmRzIGRvbid0IHdvcmsgd2l0aGluIHRyYW5zYWN0aW9ucy4gVGhlIG90aGVyIHJlYXNvbgpAQCAtNjE2LDE3ICs2MjEsMTcgQEAKIAogVXNpbmcgdGhlIG5vbnN0YW5kYXJkIFxtZXRob2R7ZXhlY3V0ZX0sIFxtZXRob2R7ZXhlY3V0ZW1hbnl9IGFuZAogXG1ldGhvZHtleGVjdXRlc2NyaXB0fSBtZXRob2RzIG9mIHRoZSBcY2xhc3N7Q29ubmVjdGlvbn0gb2JqZWN0LCB5b3VyIGNvZGUgY2FuCi1iZSB3cml0dGVuIG1vcmUgY29uY2lzZWx5LCBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGNyZWF0ZSB0aGUgLSBvZnRlbgotc3VwZXJmbHVvdXMgXGNsYXNze0N1cnNvcn0gb2JqZWN0cyBleHBsaWNpdGx5LiBJbnN0ZWFkLCB0aGUgXGNsYXNze0N1cnNvcn0KK2JlIHdyaXR0ZW4gbW9yZSBjb25jaXNlbHkgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBjcmVhdGUgdGhlIChvZnRlbgorc3VwZXJmbHVvdXMpIFxjbGFzc3tDdXJzb3J9IG9iamVjdHMgZXhwbGljaXRseS4gSW5zdGVhZCwgdGhlIFxjbGFzc3tDdXJzb3J9CiBvYmplY3RzIGFyZSBjcmVhdGVkIGltcGxpY2l0bHkgYW5kIHRoZXNlIHNob3J0Y3V0IG1ldGhvZHMgcmV0dXJuIHRoZSBjdXJzb3IKLW9iamVjdHMuIFRoaXMgd2F5LCB5b3UgY2FuIGZvciBleGFtcGxlIGV4ZWN1dGUgYSBTRUxFQ1Qgc3RhdGVtZW50IGFuZCBpdGVyYXRlCitvYmplY3RzLiBUaGlzIHdheSwgeW91IGNhbiBleGVjdXRlIGEgU0VMRUNUIHN0YXRlbWVudCBhbmQgaXRlcmF0ZQogb3ZlciBpdCBkaXJlY3RseSB1c2luZyBvbmx5IGEgc2luZ2xlIGNhbGwgb24gdGhlIFxjbGFzc3tDb25uZWN0aW9ufSBvYmplY3QuCiAKICAgICBcdmVyYmF0aW1pbnB1dHtzcWxpdGUzL3Nob3J0Y3V0X21ldGhvZHMucHl9CiAKIFxzdWJzdWJzZWN0aW9ue0FjY2Vzc2luZyBjb2x1bW5zIGJ5IG5hbWUgaW5zdGVhZCBvZiBieSBpbmRleH0KIAotT25lIGNvb2wgZmVhdHVyZSBvZiB0aGUgXG1vZHVsZXtzcWxpdGUzfSBtb2R1bGUgaXMgdGhlIGJ1aWx0aW4gXGNsYXNze3NxbGl0ZTMuUm93fSBjbGFzcworT25lIHVzZWZ1bCBmZWF0dXJlIG9mIHRoZSBcbW9kdWxle3NxbGl0ZTN9IG1vZHVsZSBpcyB0aGUgYnVpbHRpbiBcY2xhc3N7c3FsaXRlMy5Sb3d9IGNsYXNzCiBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgcm93IGZhY3RvcnkuCiAKIFJvd3Mgd3JhcHBlZCB3aXRoIHRoaXMgY2xhc3MgY2FuIGJlIGFjY2Vzc2VkIGJvdGggYnkgaW5kZXggKGxpa2UgdHVwbGVzKSBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic3RkdHlwZXMudGV4IGIvRG9jL2xpYi9saWJzdGR0eXBlcy50ZXgKaW5kZXggMTdlMzc3Yi4uYjQzM2JjNCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJzdGR0eXBlcy50ZXgKKysrIGIvRG9jL2xpYi9saWJzdGR0eXBlcy50ZXgKQEAgLTc1OSw4ICs3NTksOCBAQAogU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIFx2YXJ7c2VwfSwgYW5kIHJldHVybgogYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3IKIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdAotZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnkKLXR3byBlbXB0eSBzdHJpbmdzLgorZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnkKK3RoZSBzdHJpbmcgaXRzZWxmLgogXHZlcnNpb25hZGRlZHsyLjV9CiBcZW5ke21ldGhvZGRlc2N9CiAKQEAgLTgyMiw3ICs4MjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRcb3B0aW9uYWx7LCBlbmR9fX0KIFJldHVybiBcY29kZXtUcnVlfSBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIFx2YXJ7cHJlZml4fSwgb3RoZXJ3aXNlCiByZXR1cm4gXGNvZGV7RmFsc2V9LiAgXHZhcntwcmVmaXh9IGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YKLXN1ZmZpeGVzIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCBcdmFye3N0YXJ0fSwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0CitwcmVmaXhlcyB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgXHZhcntzdGFydH0sIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdAogdGhhdCBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgXHZhcntlbmR9LCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdAogcG9zaXRpb24uCiAKQEAgLTg2NCw2ICs4NjQsOSBAQAogY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLCB3aGljaAogbXVzdCBiZSBhIHN0cmluZyBvZiBsZW5ndGggMjU2LgogCitZb3UgY2FuIHVzZSB0aGUgXGZ1bmN0aW9ue21ha2V0cmFucygpfSBoZWxwZXIgZnVuY3Rpb24gaW4gdGhlCitccmVmbW9kdWxle3N0cmluZ30gbW9kdWxlIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIHRhYmxlLgorCiBGb3IgVW5pY29kZSBvYmplY3RzLCB0aGUgXG1ldGhvZHt0cmFuc2xhdGUoKX0gbWV0aG9kIGRvZXMgbm90CiBhY2NlcHQgdGhlIG9wdGlvbmFsIFx2YXJ7ZGVsZXRlY2hhcnN9IGFyZ3VtZW50LiAgSW5zdGVhZCwgaXQKIHJldHVybnMgYSBjb3B5IG9mIHRoZSBcdmFye3N9IHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWQKQEAgLTEzOTgsMjEgKzE0MDEsMjIgQEAKICAgICAgICAgICB7KDEpfQogICBcbGluZWlpaXtcdmFye2F9LmNsZWFyKCl9e3JlbW92ZSBhbGwgaXRlbXMgZnJvbSBcY29kZXthfX17fQogICBcbGluZWlpaXtcdmFye2F9LmNvcHkoKX17YSAoc2hhbGxvdykgY29weSBvZiBcY29kZXthfX17fQotICBcbGluZWlpaXtcdmFye2F9Lmhhc19rZXkoXHZhcntrfSl9CisgIFxsaW5laWlpe1x2YXJ7a30gaW4gXHZhcnthfX0KICAgICAgICAgICB7XGNvZGV7VHJ1ZX0gaWYgXHZhcnthfSBoYXMgYSBrZXkgXHZhcntrfSwgZWxzZSBcY29kZXtGYWxzZX19Ci0gICAgICAgICAge30KLSAgXGxpbmVpaWl7XHZhcntrfSBcY29kZXtpbn0gXHZhcnthfX0KLSAgICAgICAgICB7RXF1aXZhbGVudCB0byBcdmFye2F9Lmhhc19rZXkoXHZhcntrfSl9CiAgICAgICAgICAgeygyKX0KICAgXGxpbmVpaWl7XHZhcntrfSBub3QgaW4gXHZhcnthfX0KLSAgICAgICAgICB7RXF1aXZhbGVudCB0byBcY29kZXtub3R9IFx2YXJ7YX0uaGFzX2tleShcdmFye2t9KX0KKyAgICAgICAgICB7RXF1aXZhbGVudCB0byBcY29kZXtub3R9IFx2YXJ7a30gaW4gXHZhcnthfX0KICAgICAgICAgICB7KDIpfQorICBcbGluZWlpaXtcdmFye2F9Lmhhc19rZXkoXHZhcntrfSl9CisgICAgICAgICAge0VxdWl2YWxlbnQgdG8gXHZhcntrfSBcY29kZXtpbn0gXHZhcnthfSwgdXNlIHRoYXQgZm9ybSBpbiBuZXcgY29kZX0KKyAgICAgICAgICB7fQogICBcbGluZWlpaXtcdmFye2F9Lml0ZW1zKCl9CiAgICAgICAgICAge2EgY29weSBvZiBcdmFye2F9J3MgbGlzdCBvZiAoXHZhcntrZXl9LCBcdmFye3ZhbHVlfSkgcGFpcnN9CiAgICAgICAgICAgeygzKX0KICAgXGxpbmVpaWl7XHZhcnthfS5rZXlzKCl9e2EgY29weSBvZiBcdmFye2F9J3MgbGlzdCBvZiBrZXlzfXsoMyl9CiAgIFxsaW5laWlpe1x2YXJ7YX0udXBkYXRlKFxvcHRpb25hbHtcdmFye2J9fSl9Ci0gICAgICAgICAge3VwZGF0ZXMgKGFuZCBvdmVyd3JpdGVzKSBrZXkvdmFsdWUgcGFpcnMgZnJvbSBcdmFye2J9fQorICAgICAgICAgIHt1cGRhdGVzIFx2YXJ7YX0gd2l0aCBrZXkvdmFsdWUgcGFpcnMgZnJvbSBcdmFye2J9LCBvdmVyd3JpdGluZworCSAgIGV4aXN0aW5nIGtleXMsIHJldHVybnMgXGNvZGV7Tm9uZX19CiAgICAgICAgICAgeyg5KX0KICAgXGxpbmVpaWl7XHZhcnthfS5mcm9ta2V5cyhcdmFye3NlcX1cb3B0aW9uYWx7LCBcdmFye3ZhbHVlfX0pfQogICAgICAgICAgIHtDcmVhdGVzIGEgbmV3IGRpY3Rpb25hcnkgd2l0aCBrZXlzIGZyb20gXHZhcntzZXF9IGFuZCB2YWx1ZXMgc2V0IHRvIFx2YXJ7dmFsdWV9fQpAQCAtMTY3MCw2ICsxNjc0LDcgQEAKICAgYmVoYXZpb3IuCiAKICAgTm90ZSB0aGF0IG5vdCBhbGwgZmlsZSBvYmplY3RzIGFyZSBzZWVrYWJsZS4KKyAgXHZlcnNpb25jaGFuZ2Vke1Bhc3NpbmcgZmxvYXQgdmFsdWVzIGFzIG9mZnNldCBoYXMgYmVlbiBkZXByZWNhdGVkfVsyLjZdCiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfVtmaWxlXXt0ZWxsfXt9CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnN0cmluZy50ZXggYi9Eb2MvbGliL2xpYnN0cmluZy50ZXgKaW5kZXggMTgyOGIyZS4uYmMxNjQ5ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJzdHJpbmcudGV4CisrKyBiL0RvYy9saWIvbGlic3RyaW5nLnRleApAQCAtMjIwLDcgKzIyMCw3IEBACiAKIFxiZWdpbntmdW5jZGVzY317bWFrZXRyYW5zfXtmcm9tLCB0b30KICAgUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8KLSAgXGZ1bmN0aW9ue3RyYW5zbGF0ZSgpfSBvciBcZnVuY3Rpb257cmVnZXguY29tcGlsZSgpfSwgdGhhdCB3aWxsIG1hcAorICBcZnVuY3Rpb257dHJhbnNsYXRlKCl9LCB0aGF0IHdpbGwgbWFwCiAgIGVhY2ggY2hhcmFjdGVyIGluIFx2YXJ7ZnJvbX0gaW50byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uCiAgIGluIFx2YXJ7dG99OyBcdmFye2Zyb219IGFuZCBcdmFye3RvfSBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnN1YnByb2Nlc3MudGV4IGIvRG9jL2xpYi9saWJzdWJwcm9jZXNzLnRleAppbmRleCAwMzA3MmY3Li5mNjM5NzEwIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnN1YnByb2Nlc3MudGV4CisrKyBiL0RvYy9saWIvbGlic3VicHJvY2Vzcy50ZXgKQEAgLTEyLDkgKzEyLDYgQEAKIGNvZGVzLiAgVGhpcyBtb2R1bGUgaW50ZW5kcyB0byByZXBsYWNlIHNldmVyYWwgb3RoZXIsIG9sZGVyIG1vZHVsZXMKIGFuZCBmdW5jdGlvbnMsIHN1Y2ggYXM6CiAKLSUgWFhYIFNob3VsZCBhZGQgcG9pbnRlcnMgdG8gdGhpcyBtb2R1bGUgdG8gYXQgbGVhc3QgdGhlIHBvcGVuMgotJSBhbmQgY29tbWFuZHMgc2VjdGlvbnMuCi0KIFxiZWdpbnt2ZXJiYXRpbX0KIG9zLnN5c3RlbQogb3Muc3Bhd24qCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnRlbXBmaWxlLnRleCBiL0RvYy9saWIvbGlidGVtcGZpbGUudGV4CmluZGV4IDlkYTg2NjMuLjliNGQ4NDggMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlidGVtcGZpbGUudGV4CisrKyBiL0RvYy9saWIvbGlidGVtcGZpbGUudGV4CkBAIC04Niw3ICs4NiwxMiBAQAogcHJlZml4OyBvdGhlcndpc2UsIGEgZGVmYXVsdCBwcmVmaXggaXMgdXNlZC4KIAogSWYgXHZhcntkaXJ9IGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoYXQgZGlyZWN0b3J5Owotb3RoZXJ3aXNlLCBhIGRlZmF1bHQgZGlyZWN0b3J5IGlzIHVzZWQuCitvdGhlcndpc2UsIGEgZGVmYXVsdCBkaXJlY3RvcnkgaXMgdXNlZC4gIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcyBjaG9zZW4KK2Zyb20gYSBwbGF0Zm9ybS1kZXBlbmRlbnQgbGlzdCwgYnV0IHRoZSB1c2VyIG9mIHRoZSBhcHBsaWNhdGlvbiBjYW4gY29udHJvbAordGhlIGRpcmVjdG9yeSBsb2NhdGlvbiBieSBzZXR0aW5nIHRoZSBcdmFye1RNUERJUn0sIFx2YXJ7VEVNUH0gb3IgXHZhcntUTVB9CitlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUaGVyZSBpcyB0aHVzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBnZW5lcmF0ZWQKK2ZpbGVuYW1lIHdpbGwgaGF2ZSBhbnkgbmljZSBwcm9wZXJ0aWVzLCBzdWNoIGFzIG5vdCByZXF1aXJpbmcgcXVvdGluZyB3aGVuCitwYXNzZWQgdG8gZXh0ZXJuYWwgY29tbWFuZHMgdmlhIFxjb2Rle29zLnBvcGVuKCl9LgogCiBJZiBcdmFye3RleHR9IGlzIHNwZWNpZmllZCwgaXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gb3BlbiB0aGUgZmlsZSBpbgogYmluYXJ5IG1vZGUgKHRoZSBkZWZhdWx0KSBvciB0ZXh0IG1vZGUuICBPbiBzb21lIHBsYXRmb3JtcywgdGhpcyBtYWtlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJ1bml0dGVzdC50ZXggYi9Eb2MvbGliL2xpYnVuaXR0ZXN0LnRleAppbmRleCBmNDA0OTNkLi4zNTBhYmFlIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnVuaXR0ZXN0LnRleAorKysgYi9Eb2MvbGliL2xpYnVuaXR0ZXN0LnRleApAQCAtMjEyLDggKzIxMiw4IEBACiAKIGNsYXNzIERlZmF1bHRXaWRnZXRTaXplVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICB3aWRnZXQgPSBXaWRnZXQoIlRoZSB3aWRnZXQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mod2lkZ2V0LnNpemUoKSA9PSAoNTAsNTApLCAnaW5jb3JyZWN0IGRlZmF1bHQgc2l6ZScpCisgICAgICAgIHdpZGdldCA9IFdpZGdldCgnVGhlIHdpZGdldCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0LnNpemUoKSwgKDUwLCA1MCksICdpbmNvcnJlY3QgZGVmYXVsdCBzaXplJykKIFxlbmR7dmVyYmF0aW19CiAKIE5vdGUgdGhhdCBpbiBvcmRlciB0byB0ZXN0IHNvbWV0aGluZywgd2UgdXNlIHRoZSBvbmUgb2YgdGhlCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogY2xhc3MgU2ltcGxlV2lkZ2V0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi53aWRnZXQgPSBXaWRnZXQoIlRoZSB3aWRnZXQiKQorICAgICAgICBzZWxmLndpZGdldCA9IFdpZGdldCgnVGhlIHdpZGdldCcpCiAKIGNsYXNzIERlZmF1bHRXaWRnZXRTaXplVGVzdENhc2UoU2ltcGxlV2lkZ2V0VGVzdENhc2UpOgogICAgIGRlZiBydW5UZXN0KHNlbGYpOgpAQCAtMjczLDcgKzI3Myw3IEBACiAKIGNsYXNzIFNpbXBsZVdpZGdldFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYud2lkZ2V0ID0gV2lkZ2V0KCJUaGUgd2lkZ2V0IikKKyAgICAgICAgc2VsZi53aWRnZXQgPSBXaWRnZXQoJ1RoZSB3aWRnZXQnKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLndpZGdldC5kaXNwb3NlKCkKQEAgLTI5OCw3ICsyOTgsNyBAQAogCiBjbGFzcyBXaWRnZXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLndpZGdldCA9IFdpZGdldCgiVGhlIHdpZGdldCIpCisgICAgICAgIHNlbGYud2lkZ2V0ID0gV2lkZ2V0KCdUaGUgd2lkZ2V0JykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi53aWRnZXQuZGlzcG9zZSgpCkBAIC0zMjIsOCArMzIyLDggQEAKIHBhc3NpbmcgdGhlIG1ldGhvZCBuYW1lIGluIHRoZSBjb25zdHJ1Y3RvcjoKIAogXGJlZ2lue3ZlcmJhdGltfQotZGVmYXVsdFNpemVUZXN0Q2FzZSA9IFdpZGdldFRlc3RDYXNlKCJ0ZXN0RGVmYXVsdFNpemUiKQotcmVzaXplVGVzdENhc2UgPSBXaWRnZXRUZXN0Q2FzZSgidGVzdFJlc2l6ZSIpCitkZWZhdWx0U2l6ZVRlc3RDYXNlID0gV2lkZ2V0VGVzdENhc2UoJ3Rlc3REZWZhdWx0U2l6ZScpCityZXNpemVUZXN0Q2FzZSA9IFdpZGdldFRlc3RDYXNlKCd0ZXN0UmVzaXplJykKIFxlbmR7dmVyYmF0aW19CiAKIFRlc3QgY2FzZSBpbnN0YW5jZXMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYWNjb3JkaW5nIHRvIHRoZSBmZWF0dXJlcwpAQCAtMzMzLDggKzMzMyw4IEBACiAKIFxiZWdpbnt2ZXJiYXRpbX0KIHdpZGdldFRlc3RTdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi13aWRnZXRUZXN0U3VpdGUuYWRkVGVzdChXaWRnZXRUZXN0Q2FzZSgidGVzdERlZmF1bHRTaXplIikpCi13aWRnZXRUZXN0U3VpdGUuYWRkVGVzdChXaWRnZXRUZXN0Q2FzZSgidGVzdFJlc2l6ZSIpKQord2lkZ2V0VGVzdFN1aXRlLmFkZFRlc3QoV2lkZ2V0VGVzdENhc2UoJ3Rlc3REZWZhdWx0U2l6ZScpKQord2lkZ2V0VGVzdFN1aXRlLmFkZFRlc3QoV2lkZ2V0VGVzdENhc2UoJ3Rlc3RSZXNpemUnKSkKIFxlbmR7dmVyYmF0aW19CiAKIEZvciB0aGUgZWFzZSBvZiBydW5uaW5nIHRlc3RzLCBhcyB3ZSB3aWxsIHNlZSBsYXRlciwgaXQgaXMgYSBnb29kCkBAIC0zNDQsOCArMzQ0LDggQEAKIFxiZWdpbnt2ZXJiYXRpbX0KIGRlZiBzdWl0ZSgpOgogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICBzdWl0ZS5hZGRUZXN0KFdpZGdldFRlc3RDYXNlKCJ0ZXN0RGVmYXVsdFNpemUiKSkKLSAgICBzdWl0ZS5hZGRUZXN0KFdpZGdldFRlc3RDYXNlKCJ0ZXN0UmVzaXplIikpCisgICAgc3VpdGUuYWRkVGVzdChXaWRnZXRUZXN0Q2FzZSgndGVzdERlZmF1bHRTaXplJykpCisgICAgc3VpdGUuYWRkVGVzdChXaWRnZXRUZXN0Q2FzZSgndGVzdFJlc2l6ZScpKQogICAgIHJldHVybiBzdWl0ZQogXGVuZHt2ZXJiYXRpbX0KIApAQCAtMzUzLDcgKzM1Myw3IEBACiAKIFxiZWdpbnt2ZXJiYXRpbX0KIGRlZiBzdWl0ZSgpOgotICAgIHRlc3RzID0gWyJ0ZXN0RGVmYXVsdFNpemUiLCAidGVzdFJlc2l6ZSJdCisgICAgdGVzdHMgPSBbJ3Rlc3REZWZhdWx0U2l6ZScsICd0ZXN0UmVzaXplJ10KIAogICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUobWFwKFdpZGdldFRlc3RDYXNlLCB0ZXN0cykpCiBcZW5ke3ZlcmJhdGltfQpAQCAtNDYyLDcgKzQ2Miw3IEBACiBcc3Vic2VjdGlvbntDbGFzc2VzIGFuZCBmdW5jdGlvbnMKICAgICAgICAgICAgIFxsYWJlbHt1bml0dGVzdC1jb250ZW50c319CiAKLVxiZWdpbntjbGFzc2Rlc2N9e1Rlc3RDYXNlfXt9CitcYmVnaW57Y2xhc3NkZXNjfXtUZXN0Q2FzZX17XG9wdGlvbmFse21ldGhvZE5hbWV9fQogICBJbnN0YW5jZXMgb2YgdGhlIFxjbGFzc3tUZXN0Q2FzZX0gY2xhc3MgcmVwcmVzZW50IHRoZSBzbWFsbGVzdAogICB0ZXN0YWJsZSB1bml0cyBpbiB0aGUgXG1vZHVsZXt1bml0dGVzdH0gdW5pdmVyc2UuICBUaGlzIGNsYXNzIGlzCiAgIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBiYXNlIGNsYXNzLCB3aXRoIHNwZWNpZmljIHRlc3RzIGJlaW5nCkBAIC00NzAsNiArNDcwLDIzIEBACiAgIGludGVyZmFjZSBuZWVkZWQgYnkgdGhlIHRlc3QgcnVubmVyIHRvIGFsbG93IGl0IHRvIGRyaXZlIHRoZQogICB0ZXN0LCBhbmQgbWV0aG9kcyB0aGF0IHRoZSB0ZXN0IGNvZGUgY2FuIHVzZSB0byBjaGVjayBmb3IgYW5kCiAgIHJlcG9ydCB2YXJpb3VzIGtpbmRzIG9mIGZhaWx1cmUuCisgIAorICBFYWNoIGluc3RhbmNlIG9mIFxjbGFzc3tUZXN0Q2FzZX0gd2lsbCBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2Q6CisgIHRoZSBtZXRob2QgbmFtZWQgXHZhcnttZXRob2ROYW1lfS4gIElmIHlvdSByZW1lbWJlciwgd2UgaGFkIGFuCisgIGVhcmxpZXIgZXhhbXBsZSB0aGF0IHdlbnQgc29tZXRoaW5nIGxpa2UgdGhpczoKKyAgCisgIFxiZWdpbnt2ZXJiYXRpbX0KKyAgZGVmIHN1aXRlKCk6CisgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICBzdWl0ZS5hZGRUZXN0KFdpZGdldFRlc3RDYXNlKCd0ZXN0RGVmYXVsdFNpemUnKSkKKyAgICAgIHN1aXRlLmFkZFRlc3QoV2lkZ2V0VGVzdENhc2UoJ3Rlc3RSZXNpemUnKSkKKyAgICAgIHJldHVybiBzdWl0ZQorICBcZW5ke3ZlcmJhdGltfQorICAKKyAgSGVyZSwgd2UgY3JlYXRlIHR3byBpbnN0YW5jZXMgb2YgXGNsYXNze1dpZGdldFRlc3RDYXNlfSwgZWFjaCBvZgorICB3aGljaCBydW5zIGEgc2luZ2xlIHRlc3QuCisgIAorICBcdmFye21ldGhvZE5hbWV9IGRlZmF1bHRzIHRvIFxjb2RleydydW5UZXN0J30uCiBcZW5ke2NsYXNzZGVzY30KIAogXGJlZ2lue2NsYXNzZGVzY317RnVuY3Rpb25UZXN0Q2FzZX17dGVzdEZ1bmNcb3B0aW9uYWx7LApAQCAtNTAyLDYgKzUxOSwxMSBAQAogICBzdWJjbGFzcy4KIFxlbmR7Y2xhc3NkZXNjfQogCitcYmVnaW57Y2xhc3NkZXNjfXtUZXN0UmVzdWx0fXt9CisgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjb21waWxlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHRlc3RzIGhhdmUgc3VjY2VlZGVkCisgIGFuZCB3aGljaCBoYXZlIGZhaWxlZC4KK1xlbmR7Y2xhc3NkZXNjfQorCiBcYmVnaW57ZGF0YWRlc2N9e2RlZmF1bHRUZXN0TG9hZGVyfQogICBJbnN0YW5jZSBvZiB0aGUgXGNsYXNze1Rlc3RMb2FkZXJ9IGNsYXNzIGludGVuZGVkIHRvIGJlIHNoYXJlZC4gIElmIG5vCiAgIGN1c3RvbWl6YXRpb24gb2YgdGhlIFxjbGFzc3tUZXN0TG9hZGVyfSBpcyBuZWVkZWQsIHRoaXMgaW5zdGFuY2UgY2FuCkBAIC01NzQsOCArNTk2LDkgQEAKIFxiZWdpbnttZXRob2RkZXNjfVtUZXN0Q2FzZV17cnVufXtcb3B0aW9uYWx7cmVzdWx0fX0KICAgUnVuIHRoZSB0ZXN0LCBjb2xsZWN0aW5nIHRoZSByZXN1bHQgaW50byB0aGUgdGVzdCByZXN1bHQgb2JqZWN0CiAgIHBhc3NlZCBhcyBcdmFye3Jlc3VsdH0uICBJZiBcdmFye3Jlc3VsdH0gaXMgb21pdHRlZCBvciBcY29uc3RhbnR7Tm9uZX0sCi0gIGEgdGVtcG9yYXJ5IHJlc3VsdCBvYmplY3QgaXMgY3JlYXRlZCBhbmQgdXNlZCwgYnV0IGlzIG5vdCBtYWRlCi0gIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLgorICBhIHRlbXBvcmFyeSByZXN1bHQgb2JqZWN0IGlzIGNyZWF0ZWQgKGJ5IGNhbGxpbmcgdGhlCisgIFxtZXRob2R7ZGVmYXVsdFRlc3RDYXNlKCl9IG1ldGhvZCkgYW5kIHVzZWQ7IHRoaXMgcmVzdWx0IG9iamVjdCBpcyBub3QKKyAgcmV0dXJuZWQgdG8gXG1ldGhvZHtydW4oKX0ncyBjYWxsZXIuCiAgIAogICBUaGUgc2FtZSBlZmZlY3QgbWF5IGJlIGhhZCBieSBzaW1wbHkgY2FsbGluZyB0aGUgXGNsYXNze1Rlc3RDYXNlfQogICBpbnN0YW5jZS4KQEAgLTY4NCw4ICs3MDcsMTMgQEAKIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RDYXNlXXtkZWZhdWx0VGVzdFJlc3VsdH17fQotICBSZXR1cm4gdGhlIGRlZmF1bHQgdHlwZSBvZiB0ZXN0IHJlc3VsdCBvYmplY3QgdG8gYmUgdXNlZCB0byBydW4gdGhpcwotICB0ZXN0LgorICBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhlIHRlc3QgcmVzdWx0IGNsYXNzIHRoYXQgc2hvdWxkIGJlIHVzZWQKKyAgZm9yIHRoaXMgdGVzdCBjYXNlIGNsYXNzIChpZiBubyBvdGhlciByZXN1bHQgaW5zdGFuY2UgaXMgcHJvdmlkZWQKKyAgdG8gdGhlIFxtZXRob2R7cnVuKCl9IG1ldGhvZCkuCisgIAorICBGb3IgXGNsYXNze1Rlc3RDYXNlfSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgYW4gaW5zdGFuY2Ugb2YKKyAgXGNsYXNze1Rlc3RSZXN1bHR9OyAgc3ViY2xhc3NlcyBvZiBcY2xhc3N7VGVzdENhc2V9IHNob3VsZAorICBvdmVycmlkZSB0aGlzIGFzIG5lY2Vzc2FyeS4KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RDYXNlXXtpZH17fQpAQCAtNzYxLDI2ICs3ODksMjAgQEAKIHRlc3RzIGZvciByZXBvcnRpbmcgcHVycG9zZXM7IGEgXGNsYXNze1Rlc3RSZXN1bHR9IGluc3RhbmNlIGlzCiByZXR1cm5lZCBieSB0aGUgXG1ldGhvZHtUZXN0UnVubmVyLnJ1bigpfSBtZXRob2QgZm9yIHRoaXMgcHVycG9zZS4KIAotRWFjaCBpbnN0YW5jZSBob2xkcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biwgYW5kIGNvbGxlY3Rpb25zIG9mCi1mYWlsdXJlcyBhbmQgZXJyb3JzIHRoYXQgb2NjdXJyZWQgYW1vbmcgdGhvc2UgdGVzdCBydW5zLiAgVGhlCi1jb2xsZWN0aW9ucyBjb250YWluIHR1cGxlcyBvZiBcY29kZXsoXHZhcnt0ZXN0Y2FzZX0sCi1cdmFye3RyYWNlYmFja30pfSwgd2hlcmUgXHZhcnt0cmFjZWJhY2t9IGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYQotZm9ybWF0dGVkIHZlcnNpb24gb2YgdGhlIHRyYWNlYmFjayBmb3IgdGhlIGV4Y2VwdGlvbi4KLQogXGNsYXNze1Rlc3RSZXN1bHR9IGluc3RhbmNlcyBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyB0aGF0IHdpbGwKIGJlIG9mIGludGVyZXN0IHdoZW4gaW5zcGVjdGluZyB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGEgc2V0IG9mIHRlc3RzOgogCiBcYmVnaW57bWVtYmVyZGVzY31bVGVzdFJlc3VsdF17ZXJyb3JzfQogICBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBcY2xhc3N7VGVzdENhc2V9IGluc3RhbmNlcyBhbmQKLSAgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCi0gIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgorICBzdHJpbmdzIGhvbGRpbmcgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2gKKyAgcmFpc2VkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgogICBcdmVyc2lvbmNoYW5nZWRbQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZCBvZgogICAgICAgICAgICAgICAgICAgXGZ1bmN0aW9ue3N5cy5leGNfaW5mbygpfSByZXN1bHRzXXsyLjJ9CiBcZW5ke21lbWJlcmRlc2N9CiAKIFxiZWdpbnttZW1iZXJkZXNjfVtUZXN0UmVzdWx0XXtmYWlsdXJlc30KLSAgQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgXGNsYXNze1Rlc3RDYXNlfSBpbnN0YW5jZXMgYW5kCi0gIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZQorICBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBcY2xhc3N7VGVzdENhc2V9IGluc3RhbmNlcyBhbmQgc3RyaW5ncworICBob2xkaW5nIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZQogICB3YXMgZXhwbGljaXRseSBzaWduYWxsZWQgdXNpbmcgdGhlIFxtZXRob2R7VGVzdENhc2UuZmFpbCooKX0gb3IKICAgXG1ldGhvZHtUZXN0Q2FzZS5hc3NlcnQqKCl9IG1ldGhvZHMuCiAgIFx2ZXJzaW9uY2hhbmdlZFtDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mCkBAIC04MTcsMTcgKzgzOSwyNSBAQAogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdFJlc3VsdF17c3RhcnRUZXN0fXt0ZXN0fQogICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIFx2YXJ7dGVzdH0gaXMgYWJvdXQgdG8gYmUgcnVuLgorICAKKyAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IGluY3JlbWVudHMgdGhlIGluc3RhbmNlJ3MKKyAgXGNvZGV7dGVzdHNSdW59IGNvdW50ZXIuCiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfVtUZXN0UmVzdWx0XXtzdG9wVGVzdH17dGVzdH0KLSAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSBcdmFye3Rlc3R9IGhhcyBiZWVuIGV4ZWN1dGVkLCByZWdhcmRsZXNzCisgIENhbGxlZCBhZnRlciB0aGUgdGVzdCBjYXNlIFx2YXJ7dGVzdH0gaGFzIGJlZW4gZXhlY3V0ZWQsIHJlZ2FyZGxlc3MKICAgb2YgdGhlIG91dGNvbWUuCisgIAorICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfVtUZXN0UmVzdWx0XXthZGRFcnJvcn17dGVzdCwgZXJyfQogICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIFx2YXJ7dGVzdH0gcmFpc2VzIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uCiAgIFx2YXJ7ZXJyfSBpcyBhIHR1cGxlIG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5IFxmdW5jdGlvbntzeXMuZXhjX2luZm8oKX06CiAgIFxjb2RleyhcdmFye3R5cGV9LCBcdmFye3ZhbHVlfSwgXHZhcnt0cmFjZWJhY2t9KX0uCisgIAorICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhcHBlbmRzIFxjb2RleyhcdmFye3Rlc3R9LCBcdmFye2Vycn0pfSB0bworICB0aGUgaW5zdGFuY2UncyBcY29kZXtlcnJvcnN9IGF0dHJpYnV0ZS4KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RSZXN1bHRde2FkZEZhaWx1cmV9e3Rlc3QsIGVycn0KQEAgLTgzNSwxMCArODY1LDE1IEBACiAgIFx2YXJ7ZXJyfSBpcyBhIHR1cGxlIG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5CiAgIFxmdW5jdGlvbntzeXMuZXhjX2luZm8oKX06ICBcY29kZXsoXHZhcnt0eXBlfSwgXHZhcnt2YWx1ZX0sCiAgIFx2YXJ7dHJhY2ViYWNrfSl9LgorICAKKyAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYXBwZW5kcyBcY29kZXsoXHZhcnt0ZXN0fSwgXHZhcntlcnJ9KX0gdG8KKyAgdGhlIGluc3RhbmNlJ3MgXGNvZGV7ZmFpbHVyZXN9IGF0dHJpYnV0ZS4KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RSZXN1bHRde2FkZFN1Y2Nlc3N9e3Rlc3R9CiAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgXHZhcnt0ZXN0fSBzdWNjZWVkcy4KKyAgCisgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KIFxlbmR7bWV0aG9kZGVzY30KIAogCkBAIC04NzgsOSArOTEzLDEyIEBACiAgIFJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBnaXZlbiBhIHN0cmluZyBzcGVjaWZpZXIuCiAKICAgVGhlIHNwZWNpZmllciBcdmFye25hbWV9IGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUKLSAgZWl0aGVyIHRvIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBcY2xhc3N7VGVzdFN1aXRlfSBpbnN0YW5jZSwKLSAgYSB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoCi0gIHJldHVybnMgYSBcY2xhc3N7VGVzdENhc2V9IG9yIFxjbGFzc3tUZXN0U3VpdGV9IGluc3RhbmNlLgorICBlaXRoZXIgdG8gYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QKKyAgY2FzZSBjbGFzcywgYSBcY2xhc3N7VGVzdFN1aXRlfSBpbnN0YW5jZSwgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2gKKyAgcmV0dXJucyBhIFxjbGFzc3tUZXN0Q2FzZX0gb3IgXGNsYXNze1Rlc3RTdWl0ZX0gaW5zdGFuY2UuICBUaGVzZSBjaGVja3MKKyAgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIGxpc3RlZCBoZXJlOyB0aGF0IGlzLCBhIG1ldGhvZCBvbiBhIHBvc3NpYmxlCisgIHRlc3QgY2FzZSBjbGFzcyB3aWxsIGJlIHBpY2tlZCB1cCBhcyBgYGEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdAorICBjYXNlIGNsYXNzJycsIHJhdGhlciB0aGFuIGBgYSBjYWxsYWJsZSBvYmplY3QnJy4KIAogICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBtb2R1bGUgXG1vZHVsZXtTYW1wbGVUZXN0c30gY29udGFpbmluZyBhCiAgIFxjbGFzc3tUZXN0Q2FzZX0tZGVyaXZlZCBjbGFzcyBcY2xhc3N7U2FtcGxlVGVzdENhc2V9IHdpdGggdGhyZWUgdGVzdApAQCAtOTA1LDcgKzk0Myw3IEBACiAKIFxiZWdpbnttZXRob2RkZXNjfVtUZXN0TG9hZGVyXXtnZXRUZXN0Q2FzZU5hbWVzfXt0ZXN0Q2FzZUNsYXNzfQogICBSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbgotICBcdmFye3Rlc3RDYXNlQ2xhc3N9LgorICBcdmFye3Rlc3RDYXNlQ2xhc3N9OyB0aGlzIHNob3VsZCBiZSBhIHN1YmNsYXNzIG9mIFxjbGFzc3tUZXN0Q2FzZX0uCiBcZW5ke21ldGhvZGRlc2N9CiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJ1cmxwYXJzZS50ZXggYi9Eb2MvbGliL2xpYnVybHBhcnNlLnRleAppbmRleCBmMThlZmU5Li44NjAzNjA1IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnVybHBhcnNlLnRleAorKysgYi9Eb2MvbGliL2xpYnVybHBhcnNlLnRleApAQCAtMTQyLDcgKzE0Miw3IEBACiAKIFxiZWdpbntmdW5jZGVzY317dXJsam9pbn17YmFzZSwgdXJsXG9wdGlvbmFseywgYWxsb3dfZnJhZ21lbnRzfX0KIENvbnN0cnVjdCBhIGZ1bGwgKGBgYWJzb2x1dGUnJykgVVJMIGJ5IGNvbWJpbmluZyBhIGBgYmFzZSBVUkwnJwotKFx2YXJ7YmFzZX0pIHdpdGggYSBgYHJlbGF0aXZlIFVSTCcnIChcdmFye3VybH0pLiAgSW5mb3JtYWxseSwgdGhpcworKFx2YXJ7YmFzZX0pIHdpdGggYW5vdGhlciBVUkwgKFx2YXJ7dXJsfSkuICBJbmZvcm1hbGx5LCB0aGlzCiB1c2VzIGNvbXBvbmVudHMgb2YgdGhlIGJhc2UgVVJMLCBpbiBwYXJ0aWN1bGFyIHRoZSBhZGRyZXNzaW5nIHNjaGVtZSwKIHRoZSBuZXR3b3JrIGxvY2F0aW9uIGFuZCAocGFydCBvZikgdGhlIHBhdGgsIHRvIHByb3ZpZGUgbWlzc2luZwogY29tcG9uZW50cyBpbiB0aGUgcmVsYXRpdmUgVVJMLiAgRm9yIGV4YW1wbGU6CkBAIC0xNTUsNiArMTU1LDIwIEBACiAKIFRoZSBcdmFye2FsbG93X2ZyYWdtZW50c30gYXJndW1lbnQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYW5kIGRlZmF1bHQgYXMKIGZvciBcZnVuY3Rpb257dXJscGFyc2UoKX0uCisKK1xub3Rle0lmIFx2YXJ7dXJsfSBpcyBhbiBhYnNvbHV0ZSBVUkwgKHRoYXQgaXMsIHN0YXJ0aW5nIHdpdGggXGNvZGV7Ly99CisgICAgICBvciBcY29kZXtzY2hlbWU6Ly99LCB0aGUgXHZhcnt1cmx9J3MgaG9zdCBuYW1lIGFuZC9vciBzY2hlbWUKKyAgICAgIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgcmVzdWx0LiAgRm9yIGV4YW1wbGU6fQorCitcYmVnaW57dmVyYmF0aW19Cis+Pj4gdXJsam9pbignaHR0cDovL3d3dy5jd2kubmwvJTdFZ3VpZG8vUHl0aG9uLmh0bWwnLAorLi4uICAgICAgICAgJy8vd3d3LnB5dGhvbi5vcmcvJTdFZ3VpZG8nKQorJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8lN0VndWlkbycKK1xlbmR7dmVyYmF0aW19CisgICAgICAKK0lmIHlvdSBkbyBub3Qgd2FudCB0aGF0IGJlaGF2aW9yLCBwcmVwcm9jZXNzCit0aGUgXHZhcnt1cmx9IHdpdGggXGZ1bmN0aW9ue3VybHNwbGl0KCl9IGFuZCBcZnVuY3Rpb257dXJsdW5zcGxpdCgpfSwKK3JlbW92aW5nIHBvc3NpYmxlIFxlbXtzY2hlbWV9IGFuZCBcZW17bmV0bG9jfSBwYXJ0cy4KIFxlbmR7ZnVuY2Rlc2N9CiAKIFxiZWdpbntmdW5jZGVzY317dXJsZGVmcmFnfXt1cmx9CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnV1aWQudGV4IGIvRG9jL2xpYi9saWJ1dWlkLnRleAppbmRleCBhOWQ1Mjk1Li41YWE5ZDhjIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnV1aWQudGV4CisrKyBiL0RvYy9saWIvbGlidXVpZC50ZXgKQEAgLTE4LDIwICsxOCwxMSBAQAogbmV0d29yayBhZGRyZXNzLiAgXGZ1bmN0aW9ue3V1aWQ0KCl9IGNyZWF0ZXMgYSByYW5kb20gVVVJRC4KIAogXGJlZ2lue2NsYXNzZGVzY317VVVJRH17XG9wdGlvbmFse2hleFxvcHRpb25hbHssIGJ5dGVzXG9wdGlvbmFseywKLWZpZWxkc1xvcHRpb25hbHssIGludFxvcHRpb25hbHssIHZlcnNpb259fX19fX0KLQotJUluc3RhbmNlcyBvZiB0aGUgVVVJRCBjbGFzcyByZXByZXNlbnQgVVVJRHMgYXMgc3BlY2lmaWVkIGluIFJGQyA0MTIyLgotJVVVSUQgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLCBoYXNoYWJsZSwgYW5kIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuCi0lQ29udmVydGluZyBhIFVVSUQgdG8gYSBzdHJpbmcgd2l0aCBzdHIoKSB5aWVsZHMgc29tZXRoaW5nIGluIHRoZSBmb3JtCi0lJzEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OWFiYycuICBUaGUgVVVJRCBjb25zdHJ1Y3RvciBhY2NlcHRzCi0lZm91ciBwb3NzaWJsZSBmb3JtczogYSBzaW1pbGFyIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMsIG9yIGEKLSVzdHJpbmcgb2YgMTYgcmF3IGJ5dGVzIGFzIGFuIGFyZ3VtZW50IG5hbWVkICdieXRlcycsIG9yIGEgdHVwbGUgb2YKLSVzaXggaW50ZWdlciBmaWVsZHMgKHdpdGggMzItYml0LCAxNi1iaXQsIDE2LWJpdCwgOC1iaXQsIDgtYml0LCBhbmQKLSU0OC1iaXQgdmFsdWVzIHJlc3BlY3RpdmVseSkgYXMgYW4gYXJndW1lbnQgbmFtZWQgJ2ZpZWxkcycsIG9yIGEgc2luZ2xlCi0lMTI4LWJpdCBpbnRlZ2VyIGFzIGFuIGFyZ3VtZW50IG5hbWVkICdpbnQnLgorYnl0ZXNfbGVcb3B0aW9uYWx7LCBmaWVsZHNcb3B0aW9uYWx7LCBpbnRcb3B0aW9uYWx7LCB2ZXJzaW9ufX19fX19fQogCiBDcmVhdGUgYSBVVUlEIGZyb20gZWl0aGVyIGEgc3RyaW5nIG9mIDMyIGhleGFkZWNpbWFsIGRpZ2l0cywKLWEgc3RyaW5nIG9mIDE2IGJ5dGVzIGFzIHRoZSBcdmFye2J5dGVzfSBhcmd1bWVudCwgYSB0dXBsZSBvZiBzaXgKK2Egc3RyaW5nIG9mIDE2IGJ5dGVzIGFzIHRoZSBcdmFye2J5dGVzfSBhcmd1bWVudCwgYSBzdHJpbmcgb2YgMTYgYnl0ZXMKK2luIGxpdHRsZS1lbmRpYW4gb3JkZXIgYXMgdGhlIFx2YXJ7Ynl0ZXNfbGV9IGFyZ3VtZW50LCBhIHR1cGxlIG9mIHNpeAogaW50ZWdlcnMgKDMyLWJpdCBcdmFye3RpbWVfbG93fSwgMTYtYml0IFx2YXJ7dGltZV9taWR9LAogMTYtYml0IFx2YXJ7dGltZV9oaV92ZXJzaW9ufSwKIDgtYml0IFx2YXJ7Y2xvY2tfc2VxX2hpX3ZhcmlhbnR9LCA4LWJpdCBcdmFye2Nsb2NrX3NlcV9sb3d9LCA0OC1iaXQgXHZhcntub2RlfSkKQEAgLTQ1LDIyICszNiwzMSBAQAogVVVJRCgnMTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2NzgnKQogVVVJRCgndXJuOnV1aWQ6MTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4JykKIFVVSUQoYnl0ZXM9J1x4MTJceDM0XHg1Nlx4NzgnKjQpCitVVUlEKGJ5dGVzX2xlPSdceDc4XHg1Nlx4MzRceDEyXHgzNFx4MTJceDc4XHg1NicgKworICAgICAgICAgICAgICAnXHgxMlx4MzRceDU2XHg3OFx4MTJceDM0XHg1Nlx4NzgnKQogVVVJRChmaWVsZHM9KDB4MTIzNDU2NzgsIDB4MTIzNCwgMHg1Njc4LCAweDEyLCAweDM0LCAweDU2NzgxMjM0NTY3OCkpCiBVVUlEKGludD0weDEyMzQ1Njc4MTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4KQogXGVuZHt2ZXJiYXRpbX0KIAotRXhhY3RseSBvbmUgb2YgXHZhcntoZXh9LCBcdmFye2J5dGVzfSwgXHZhcntmaWVsZHN9LCBvciBcdmFye2ludH0gbXVzdAorRXhhY3RseSBvbmUgb2YgXHZhcntoZXh9LCBcdmFye2J5dGVzfSwgXHZhcntieXRlc19sZX0sIFx2YXJ7ZmllbGRzfSwKK29yIFx2YXJ7aW50fSBtdXN0CiBiZSBnaXZlbi4gIFRoZSBcdmFye3ZlcnNpb259IGFyZ3VtZW50IGlzIG9wdGlvbmFsOyBpZiBnaXZlbiwgdGhlCiByZXN1bHRpbmcgVVVJRCB3aWxsIGhhdmUgaXRzIHZhcmlhbnQgYW5kIHZlcnNpb24gbnVtYmVyIHNldCBhY2NvcmRpbmcgdG8KIFJGQyA0MTIyLCBvdmVycmlkaW5nIGJpdHMgaW4gdGhlIGdpdmVuIFx2YXJ7aGV4fSwgXHZhcntieXRlc30sCi1cdmFye2ZpZWxkc30sIG9yIFx2YXJ7aW50fS4KK1x2YXJ7Ynl0ZXNfbGV9LCBcdmFye2ZpZWxkc30sIG9yIFx2YXJ7aW50fS4KIAogXGVuZHtjbGFzc2Rlc2N9CiAKIFxjbGFzc3tVVUlEfSBpbnN0YW5jZXMgaGF2ZSB0aGVzZSByZWFkLW9ubHkgYXR0cmlidXRlczoKIAogXGJlZ2lue21lbWJlcmRlc2N9e2J5dGVzfQotVGhlIFVVSUQgYXMgYSAxNi1ieXRlIHN0cmluZy4KK1RoZSBVVUlEIGFzIGEgMTYtYnl0ZSBzdHJpbmcgKGNvbnRhaW5pbmcgdGhlIHNpeAoraW50ZWdlciBmaWVsZHMgaW4gYmlnLWVuZGlhbiBieXRlIG9yZGVyKS4KK1xlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9e2J5dGVzX2xlfQorVGhlIFVVSUQgYXMgYSAxNi1ieXRlIHN0cmluZyAod2l0aCBcdmFye3RpbWVfbG93fSwgXHZhcnt0aW1lX21pZH0sCithbmQgXHZhcnt0aW1lX2hpX3ZlcnNpb259IGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlcikuCiBcZW5ke21lbWJlcmRlc2N9CiAKIFxiZWdpbnttZW1iZXJkZXNjfXtmaWVsZHN9CkBAIC05NSwxMCArOTUsMTAgQEAKIAogXGJlZ2lue21lbWJlcmRlc2N9e3ZhcmlhbnR9CiBUaGUgVVVJRCB2YXJpYW50LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBpbnRlcm5hbCBsYXlvdXQgb2YgdGhlIFVVSUQuCi1UaGlzIHdpbGwgYmUgYW4gaW50ZWdlciBlcXVhbCB0byBvbmUgb2YgdGhlIGNvbnN0YW50cworVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgaW50ZWdlciBjb25zdGFudHMKIFxjb25zdGFudHtSRVNFUlZFRF9OQ1N9LAogXGNvbnN0YW50e1JGQ180MTIyfSwgXGNvbnN0YW50e1JFU0VSVkVEX01JQ1JPU09GVH0sIG9yCi1cY29uc3RhbnR7UkVTRVJWRURfRlVUVVJFfSkuCitcY29uc3RhbnR7UkVTRVJWRURfRlVUVVJFfS4KIFxlbmR7bWVtYmVyZGVzY30KIAogXGJlZ2lue21lbWJlcmRlc2N9e3ZlcnNpb259CkBAIC0xMDYsNyArMTA2LDcgQEAKIHdoZW4gdGhlIHZhcmlhbnQgaXMgXGNvbnN0YW50e1JGQ180MTIyfSkuCiBcZW5ke21lbWJlcmRlc2N9CiAKLVRoZSBcbW9kdWxle3V1aWR9IG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zCitUaGUgXG1vZHVsZXt1dWlkfSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogXGJlZ2lue2Z1bmNkZXNjfXtnZXRub2RlfXt9CiBHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgYXMgYSA0OC1iaXQgcG9zaXRpdmUgaW50ZWdlci4gIFRoZSBmaXJzdCB0aW1lIHRoaXMKQEAgLTEyOSwxMSArMTI5LDggQEAKIFxpbmRleHt1dWlkMX0KIAogXGJlZ2lue2Z1bmNkZXNjfXt1dWlkM317bmFtZXNwYWNlLCBuYW1lfQotR2VuZXJhdGUgYSBVVUlEIGJhc2VkIHVwb24gYSBNRDUgaGFzaCBvZiB0aGUgXHZhcntuYW1lfSBzdHJpbmcgdmFsdWUKLWRyYXduIGZyb20gYSBzcGVjaWZpZWQgbmFtZXNwYWNlLiAgIFx2YXJ7bmFtZXNwYWNlfQotbXVzdCBiZSBvbmUgb2YgXGNvbnN0YW50e05BTUVTUEFDRV9ETlN9LAotXGNvbnN0YW50e05BTUVTUEFDRV9VUkx9LCBcY29uc3RhbnR7TkFNRVNQQUNFX09JRH0sCi1vciBcY29uc3RhbnR7TkFNRVNQQUNFX1g1MDB9LgorR2VuZXJhdGUgYSBVVUlEIGJhc2VkIG9uIHRoZSBNRDUgaGFzaAorb2YgYSBuYW1lc3BhY2UgaWRlbnRpZmllciAod2hpY2ggaXMgYSBVVUlEKSBhbmQgYSBuYW1lICh3aGljaCBpcyBhIHN0cmluZykuCiBcZW5ke2Z1bmNkZXNjfQogXGluZGV4e3V1aWQzfQogCkBAIC0xNDMsMzEgKzE0MCwzMiBAQAogXGluZGV4e3V1aWQ0fQogCiBcYmVnaW57ZnVuY2Rlc2N9e3V1aWQ1fXtuYW1lc3BhY2UsIG5hbWV9Ci1HZW5lcmF0ZSBhIFVVSUQgYmFzZWQgdXBvbiBhIFNIQS0xIGhhc2ggb2YgdGhlIFx2YXJ7bmFtZX0gc3RyaW5nIHZhbHVlCi1kcmF3biBmcm9tIGEgc3BlY2lmaWVkIG5hbWVzcGFjZS4gICBcdmFye25hbWVzcGFjZX0KLW11c3QgYmUgb25lIG9mIFxjb25zdGFudHtOQU1FU1BBQ0VfRE5TfSwKLVxjb25zdGFudHtOQU1FU1BBQ0VfVVJMfSwgXGNvbnN0YW50e05BTUVTUEFDRV9PSUR9LAotb3IgXGNvbnN0YW50e05BTUVTUEFDRV9YNTAwfS4KK0dlbmVyYXRlIGEgVVVJRCBiYXNlZCBvbiB0aGUgU0hBLTEgaGFzaAorb2YgYSBuYW1lc3BhY2UgaWRlbnRpZmllciAod2hpY2ggaXMgYSBVVUlEKSBhbmQgYSBuYW1lICh3aGljaCBpcyBhIHN0cmluZykuCiBcZW5ke2Z1bmNkZXNjfQogXGluZGV4e3V1aWQ1fQogCi1UaGUgXG1vZHVsZXt1dWlkfSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIG5hbWVzcGFjZSBjb25zdGFudHMKK1RoZSBcbW9kdWxle3V1aWR9IG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbmFtZXNwYWNlIGlkZW50aWZpZXJzCiBmb3IgdXNlIHdpdGggXGZ1bmN0aW9ue3V1aWQzKCl9IG9yIFxmdW5jdGlvbnt1dWlkNSgpfS4KIAogXGJlZ2lue2RhdGFkZXNjfXtOQU1FU1BBQ0VfRE5TfQotRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIG5hbWVzcGFjZSBVVUlELgorV2hlbiB0aGlzIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsCit0aGUgXHZhcntuYW1lfSBzdHJpbmcgaXMgYSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUuCiBcZW5ke2RhdGFkZXNjfQogCiBcYmVnaW57ZGF0YWRlc2N9e05BTUVTUEFDRV9VUkx9Ci1VUkwgbmFtZXNwYWNlIFVVSUQuCitXaGVuIHRoaXMgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwKK3RoZSBcdmFye25hbWV9IHN0cmluZyBpcyBhIFVSTC4KIFxlbmR7ZGF0YWRlc2N9CiAKIFxiZWdpbntkYXRhZGVzY317TkFNRVNQQUNFX09JRH0KLUlTTyBPSUQgbmFtZXNwYWNlIFVVSUQuCitXaGVuIHRoaXMgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwKK3RoZSBcdmFye25hbWV9IHN0cmluZyBpcyBhbiBJU08gT0lELgogXGVuZHtkYXRhZGVzY30KIAogXGJlZ2lue2RhdGFkZXNjfXtOQU1FU1BBQ0VfWDUwMH0KLVguNTAwIEROIG5hbWVzcGFjZSBVVUlELgorV2hlbiB0aGlzIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsCit0aGUgXHZhcntuYW1lfSBzdHJpbmcgaXMgYW4gWC41MDAgRE4gaW4gREVSIG9yIGEgdGV4dCBvdXRwdXQgZm9ybWF0LgogXGVuZHtkYXRhZGVzY30KIAogVGhlIFxtb2R1bGV7dXVpZH0gbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudHMKQEAgLTE3OCwxMSArMTc2LDExIEBACiBcZW5ke2RhdGFkZXNjfQogCiBcYmVnaW57ZGF0YWRlc2N9e1JGQ180MTIyfQotVXNlcyBVVUlEIGxheW91dCBzcGVjaWZpZWQgaW4gXHJmY3s0MTIyfS4KK1NwZWNpZmllcyB0aGUgVVVJRCBsYXlvdXQgZ2l2ZW4gaW4gXHJmY3s0MTIyfS4KIFxlbmR7ZGF0YWRlc2N9CiAKIFxiZWdpbntkYXRhZGVzY317UkVTRVJWRURfTUlDUk9TT0ZUfQotUmVzZXJ2ZWQgZm9yIE1pY3Jvc29mdCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorUmVzZXJ2ZWQgZm9yIE1pY3Jvc29mdCBjb21wYXRpYmlsaXR5LgogXGVuZHtkYXRhZGVzY30KIAogXGJlZ2lue2RhdGFkZXNjfXtSRVNFUlZFRF9GVVRVUkV9CkBAIC0xOTIsMTIgKzE5MCwxMyBAQAogCiBcYmVnaW57c2VlYWxzb30KICAgXHNlZXJmY3s0MTIyfXtBIFVuaXZlcnNhbGx5IFVuaXF1ZSBJRGVudGlmaWVyIChVVUlEKSBVUk4gTmFtZXNwYWNlfXsKLSAgICAgICAgICBUaGlzIHNwZWNpZmllcyBhIFVuaWZvcm0gUmVzb3VyY2UgTmFtZSBuYW1lc3BhY2UgZm9yIFVVSURzLn0KK1RoaXMgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgVW5pZm9ybSBSZXNvdXJjZSBOYW1lIG5hbWVzcGFjZSBmb3IgVVVJRHMsCit0aGUgaW50ZXJuYWwgZm9ybWF0IG9mIFVVSURzLCBhbmQgbWV0aG9kcyBvZiBnZW5lcmF0aW5nIFVVSURzLn0KIFxlbmR7c2VlYWxzb30KIAogXHN1YnNlY3Rpb257RXhhbXBsZSBcbGFiZWx7dXVpZC1leGFtcGxlfX0KIAotSGVyZSBpcyBhIHR5cGljYWwgdXNhZ2U6CitIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHR5cGljYWwgdXNhZ2Ugb2YgdGhlIFxtb2R1bGV7dXVpZH0gbW9kdWxlOgogXGJlZ2lue3ZlcmJhdGltfQogPj4+IGltcG9ydCB1dWlkCiAKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlid3NnaXJlZi50ZXggYi9Eb2MvbGliL2xpYndzZ2lyZWYudGV4CmluZGV4IDRiMTJlOWQuLjM3ZGVkOWYgMTAwNzU1Ci0tLSBhL0RvYy9saWIvbGlid3NnaXJlZi50ZXgKKysrIGIvRG9jL2xpYi9saWJ3c2dpcmVmLnRleApAQCAtMjYsOCArMjYsOSBAQAogV1NHSSBzcGVjaWZpY2F0aW9uIChccGVwezMzM30pLgogCiAlIFhYWCBJZiB5b3UncmUganVzdCB0cnlpbmcgdG8gd3JpdGUgYSB3ZWIgYXBwbGljYXRpb24uLi4KLSUgWFhYIHNob3VsZCBjcmVhdGUgYSBVUkwgb24gcHl0aG9uLm9yZyB0byBwb2ludCBwZW9wbGUgdG8uCiAKK1NlZSBcdXJse2h0dHA6Ly93d3cud3NnaS5vcmd9IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFdTR0ksCithbmQgbGlua3MgdG8gdHV0b3JpYWxzIGFuZCBvdGhlciByZXNvdXJjZXMuCiAKIAogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnhtbHJwY2xpYi50ZXggYi9Eb2MvbGliL2xpYnhtbHJwY2xpYi50ZXgKaW5kZXggYjA4OTIwYy4uYzg3MGQyNiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ4bWxycGNsaWIudGV4CisrKyBiL0RvYy9saWIvbGlieG1scnBjbGliLnRleApAQCAtNjgsNyArNjgsMTAgQEAKICAgXGxpbmVpaXthcnJheXN9e0FueSBQeXRob24gc2VxdWVuY2UgdHlwZSBjb250YWluaW5nIGNvbmZvcm1hYmxlCiAgICAgICAgICAgICAgICAgICBlbGVtZW50cy4gQXJyYXlzIGFyZSByZXR1cm5lZCBhcyBsaXN0c30KICAgXGxpbmVpaXtzdHJ1Y3R1cmVzfXtBIFB5dGhvbiBkaWN0aW9uYXJ5LiBLZXlzIG11c3QgYmUgc3RyaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgbWF5IGJlIGFueSBjb25mb3JtYWJsZSB0eXBlLn0KKyAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgbWF5IGJlIGFueSBjb25mb3JtYWJsZSB0eXBlLiBPYmplY3RzCisgICAgICAgICAgICAgICAgICAgICAgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMgY2FuIGJlIHBhc3NlZCBpbjsKKyAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRoZWlyIFx2YXJ7X19kaWN0X199IGF0dHJpYnV0ZSBpcyAKKyAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZC59CiAgIFxsaW5laWl7ZGF0ZXN9e2luIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChwYXNzIGluIGFuIGluc3RhbmNlIG9mIHRoZQogICAgICAgICAgICAgICAgICBcY2xhc3N7RGF0ZVRpbWV9IGNsYXNzKSBvciBhCiAgICAgICAgICAgICAgICAgIFxjbGFzc3tccmVmbW9kdWxle2RhdGV0aW1lfS5kYXRldGltZX0sCkBAIC0xMDAsNiArMTAzLDEwIEBACiBjb21wYXRpYmlsaXR5LiAgTmV3IGNvZGUgc2hvdWxkIHVzZSBcY2xhc3N7U2VydmVyUHJveHl9LgogCiBcdmVyc2lvbmNoYW5nZWRbVGhlIFx2YXJ7dXNlX2RhdGV0aW1lfSBmbGFnIHdhcyBhZGRlZF17Mi41fQorCitcdmVyc2lvbmNoYW5nZWRbSW5zdGFuY2VzIG9mIG5ldy1zdHlsZSBjbGFzc2VzIGNhbiBiZSBwYXNzZWQgaW4KK2lmIHRoZXkgaGF2ZSBhbiBcdmFye19fZGljdF9ffSBhdHRyaWJ1dGUgYW5kIGRvbid0IGhhdmUgYSBiYXNlIGNsYXNzCit0aGF0IGlzIG1hcnNoYWxsZWQgaW4gYSBzcGVjaWFsIHdheV17Mi42fQogXGVuZHtjbGFzc2Rlc2N9CiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9zcWxpdGUzL2V4ZWN1dGVzY3JpcHQucHkgYi9Eb2MvbGliL3NxbGl0ZTMvZXhlY3V0ZXNjcmlwdC5weQppbmRleCAwNzk1YjQ3Li43ZTUzNTgxIDEwMDY0NAotLS0gYS9Eb2MvbGliL3NxbGl0ZTMvZXhlY3V0ZXNjcmlwdC5weQorKysgYi9Eb2MvbGliL3NxbGl0ZTMvZXhlY3V0ZXNjcmlwdC5weQpAQCAtMTcsNyArMTcsNyBAQAogCiAgICAgaW5zZXJ0IGludG8gYm9vayh0aXRsZSwgYXV0aG9yLCBwdWJsaXNoZWQpCiAgICAgdmFsdWVzICgKLSAgICAgICAgJ0RpcmsgR2VudGx5JydzIEhvbGlzdGljIERldGVjdGl2ZSBBZ2VuY3kKKyAgICAgICAgJ0RpcmsgR2VudGx5JydzIEhvbGlzdGljIERldGVjdGl2ZSBBZ2VuY3knLAogICAgICAgICAnRG91Z2xhcyBBZGFtcycsCiAgICAgICAgIDE5ODcKICAgICApOwpkaWZmIC0tZ2l0IGEvRG9jL2xpYi90a2ludGVyLnRleCBiL0RvYy9saWIvdGtpbnRlci50ZXgKaW5kZXggZGI1MmNiZC4uMjBiMjM3MyAxMDA2NDQKLS0tIGEvRG9jL2xpYi90a2ludGVyLnRleAorKysgYi9Eb2MvbGliL3RraW50ZXIudGV4CkBAIC0zMTgsNyArMzE4LDcgQEAKIFxpdGVtW1x2YXJ7b3B0aW9uc31dCiBjb25maWd1cmUgdGhlIHdpZGdldCdzIGFwcGVhcmFuY2UgYW5kIGluIHNvbWUgY2FzZXMsIGl0cwogYmVoYXZpb3IuICBUaGUgb3B0aW9ucyBjb21lIGluIHRoZSBmb3JtIG9mIGEgbGlzdCBvZiBmbGFncyBhbmQgdmFsdWVzLgotRmxhZ3MgYXJlIHByb2NlZWRlZCBieSBhIGAtJywgbGlrZSBcVU5JWHt9IHNoZWxsIGNvbW1hbmQgZmxhZ3MsIGFuZAorRmxhZ3MgYXJlIHByZWNlZGVkIGJ5IGEgYC0nLCBsaWtlIFxVTklYe30gc2hlbGwgY29tbWFuZCBmbGFncywgYW5kCiB2YWx1ZXMgYXJlIHB1dCBpbiBxdW90ZXMgaWYgdGhleSBhcmUgbW9yZSB0aGFuIG9uZSB3b3JkLgogXGVuZHtkZXNjcmlwdGlvbn0KIApkaWZmIC0tZ2l0IGEvRG9jL3BlcmwvcHl0aG9uLnBlcmwgYi9Eb2MvcGVybC9weXRob24ucGVybAppbmRleCBhYjkzYzdjLi5jZjAzMDFlIDEwMDY0NAotLS0gYS9Eb2MvcGVybC9weXRob24ucGVybAorKysgYi9Eb2MvcGVybC9weXRob24ucGVybApAQCAtODgzLDYgKzg4MywxMiBAQAogICAgICAgICAgICAgJGZpbGVuYW1lID0gJ2dyYW1tYXIudHh0JzsKICAgICAgICAgfQogICAgICAgICBvcGVuKEdSQU1NQVIsICI+JGZpbGVuYW1lIikgfHwgZGllICJcbiQhXG4iOworICAgICAgICBwcmludCBHUkFNTUFSICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIjsKKyAgICAgICAgcHJpbnQgR1JBTU1BUiAiIyAgICAgVGhpcyBmaWxlIGlzIG9ubHkgbWVhbnQgdG8gYmUgYSBndWlkZSwgICAgICNcbiI7CisgICAgICAgIHByaW50IEdSQU1NQVIgIiMgICAgYW5kIGRpZmZlcnMgaW4gc21hbGwgd2F5cyBmcm9tIHRoZSByZWFsICAgICAjXG4iOworICAgICAgICBwcmludCBHUkFNTUFSICIjICAgZ3JhbW1hci4gIFRoZSBleGFjdCByZWZlcmVuY2UgaXMgdGhlIGZpbGUgICAgI1xuIjsKKyAgICAgICAgcHJpbnQgR1JBTU1BUiAiIyAgR3JhbW1hci9HcmFtbWFyIGRpc3RyaWJ1dGVkIHdpdGggdGhlIHNvdXJjZS4gICNcbiI7CisgICAgICAgIHByaW50IEdSQU1NQVIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOwogICAgICAgICBwcmludCBHUkFNTUFSIHN0cmlwX2dyYW1tYXJfbWFya3VwKCREZWZpbmVkR3JhbW1hcnN7JGxhbmd9KTsKICAgICAgICAgY2xvc2UoR1JBTU1BUik7CiAgICAgICAgIHByaW50ICJXcm90ZSBncmFtbWFyIGZpbGUgJGZpbGVuYW1lXG4iOwpkaWZmIC0tZ2l0IGEvRG9jL3JlZi9yZWYzLnRleCBiL0RvYy9yZWYvcmVmMy50ZXgKaW5kZXggN2VkZGZjZC4uZmI1N2ViMCAxMDA2NDQKLS0tIGEvRG9jL3JlZi9yZWYzLnRleAorKysgYi9Eb2MvcmVmL3JlZjMudGV4CkBAIC0zNzgsNiArMzc4LDQxIEBACiAKIFxlbmR7ZGVzY3JpcHRpb259ICUgU2VxdWVuY2VzCiAKKworXGl0ZW1bU2V0IHR5cGVzXQorVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGUgb2JqZWN0cy4KK0FzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlciwgdGhleSBjYW4gYmUKK2l0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gXGZ1bmN0aW9ue2xlbigpfSByZXR1cm5zIHRoZQorbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUKK2Zhc3QgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kCitjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLCBkaWZmZXJlbmNlLAorYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLgorXGJpZnVuY2luZGV4e2xlbn0KK1xvYmluZGV4e3NldCB0eXBlfQorCitGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yIGRpY3Rpb25hcnkKK2tleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpYworY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgXGNvZGV7MX0gYW5kCitcY29kZXsxLjB9KSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LgorCitUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOgorCitcYmVnaW57ZGVzY3JpcHRpb259CisKK1xpdGVtW1NldHNdCitUaGVzZVxvYmluZGV4e3NldH0gcmVwcmVzZW50IGEgbXV0YWJsZSBzZXQuIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlCitidWlsdC1pbiBcZnVuY3Rpb257c2V0KCl9IGNvbnN0cnVjdG9yIGFuZCBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcworYnkgc2V2ZXJhbCBtZXRob2RzLCBzdWNoIGFzIFxtZXRob2R7YWRkKCl9LgorCitcaXRlbVtGcm96ZW4gc2V0c10KK1RoZXNlXG9iaW5kZXh7ZnJvemVuc2V0fSByZXByZXNlbnQgYW4gaW1tdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieQordGhlIGJ1aWx0LWluIFxmdW5jdGlvbntmcm96ZW5zZXQoKX0gY29uc3RydWN0b3IuIEFzIGEgZnJvemVuc2V0IGlzCitpbW11dGFibGUgYW5kIGhhc2hhYmxlLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mIGFub3RoZXIgc2V0LAorb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS4KKworXGVuZHtkZXNjcmlwdGlvbn0gJSBTZXQgdHlwZXMKKworCiBcaXRlbVtNYXBwaW5nc10KIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4IHNldHMuCiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uIFxjb2Rle2Fba119IHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZApAQCAtNzYxLDcgKzc5Niw3IEBACiAoY2FsbCBpdH5cY2xhc3N7Q30pIG9mIHRoZSBpbnN0YW5jZSBmb3Igd2hpY2ggdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2UKIHdhcyBpbml0aWF0ZWQgb3Igb25lIG9mIGl0cyBiYXNlcywKIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYSBib3VuZCB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCB3aG9zZQotXG1lbWJlcntpbV9jbGFzc30gYXR0cmlidXRlIGlzflxjbGFzc3tDfSB3aG9zZSBcbWVtYmVye2ltX3NlbGZ9IGF0dHJpYnV0ZQorXG1lbWJlcntpbV9jbGFzc30gYXR0cmlidXRlIGlzflxjbGFzc3tDfSBhbmQgd2hvc2UgXG1lbWJlcntpbV9zZWxmfSBhdHRyaWJ1dGUKIGlzIHRoZSBpbnN0YW5jZS4gU3RhdGljIG1ldGhvZCBhbmQgY2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGFsc28KIHRyYW5zZm9ybWVkLCBhcyBpZiB0aGV5IGhhZCBiZWVuIHJldHJpZXZlZCBmcm9tIGNsYXNzflxjbGFzc3tDfTsKIHNlZSBhYm92ZSB1bmRlciBgYENsYXNzZXMnJy4gU2VlIHNlY3Rpb25+XHJlZntkZXNjcmlwdG9yc30gZm9yCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvcHkydGV4aS5lbCBiL0RvYy90b29scy9weTJ0ZXhpLmVsCmluZGV4IGMzZDhkZjAuLjQwNDIzNGYgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9weTJ0ZXhpLmVsCisrKyBiL0RvYy90b29scy9weTJ0ZXhpLmVsCkBAIC0xLDUgKzEsNiBAQAogOzs7IHB5MnRleGkuZWwgLS0gQ29udmVyc2lvbiBvZiBQeXRob24gTGFUZVggZG9jdW1lbnRhdGlvbiB0byBUZXhpbmZvCiAKKzs7IENvcHlyaWdodCAoQykgMjAwNiAgSmVyb2VuIERla2tlcnMgPGplcm9lbkBkZWtrZXJzLmN4PgogOzsgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAxLCAyMDAyIE1pbGFuIFphbWF6YWwKIAogOzsgQXV0aG9yOiBNaWxhbiBaYW1hemFsIDxwZG1AemFtYXphbC5vcmc+CkBAIC0xNjgsNiArMTY5LDcgQEAKICAgICAgIkBlbmQgdGFibGVcbiIpCiAgICAgKCJwcm9kdWN0aW9ubGlzdCIgMCAiXG5AdGFibGUgQGNvZGVcbiIgIkBlbmQgdGFibGVcbiIpCiAgICAgKCJxdW90YXRpb24iIDAgIkBxdW90YXRpb24iICJAZW5kIHF1b3RhdGlvbiIpCisgICAgKCJxdW90ZSIgMCAiQHF1b3RhdGlvbiIgIkBlbmQgcXVvdGF0aW9uIikKICAgICAoInNlZWFsc28iIDAgIlNlZSBhbHNvOlxuQHRhYmxlIEBlbXBoXG4iICJAZW5kIHRhYmxlXG4iKQogICAgICgic2VlYWxzbyoiIDAgIkB0YWJsZSBAZW1waFxuIiAiQGVuZCB0YWJsZVxuIikKICAgICAoInNsb3BweXBhciIgMCAiIiAiIikKQEAgLTI0NiwxMSArMjQ4LDEyIEBACiAgICAgKCJlbnYiIDEgIkBjb2Rle1xcMX0iKQogICAgICgiRU9GIiAwICJAY29kZXtFT0Z9IikKICAgICAoImVtYWlsIiAxICJAZW1haWx7XFwxfSIpCisgICAgKCJlbSIgMSAiQGVtcGh7XFwxfSIpCiAgICAgKCJlbXBoIiAxICJAZW1waHtcXDF9IikKICAgICAoImVudnZhciIgMSAiQGVudntcXDF9IikKICAgICAoImV4Y2VwdGlvbiIgMSAiQGNvZGV7XFwxfSIpCiAgICAgKCJleGluZGV4IiAxIChwcm9nbiAoc2V0cSBvYmluZGV4IHQpICJAb2JpbmRleHtcXDF9ASIpKQotICAgICgiZmkiIDAgKGNvbmNhdCAiQGVuZCAiIGxhc3QtaWYpKQorICAgICgiZmkiIDAgKGlmIChlcXVhbCBsYXN0LWlmICJpZngiKSAiIiAoY29uY2F0ICJAZW5kICIgbGFzdC1pZikpKQogICAgICgiZmlsZSIgMSAiQGZpbGV7XFwxfSIpCiAgICAgKCJmaWxlbnEiIDEgIkBmaWxle1xcMX0iKQogICAgICgiZmlsZXZhciIgMSAiQGZpbGV7QHZhcntcXDF9fSIpCkBAIC0yNjIsNiArMjY1LDcgQEAKICAgICAoImdyYW1tYXJ0b2tlbiIgMSAiQGNvZGV7XFwxfSIpCiAgICAgKCJndWlsYWJlbCIgMSAiQHN0cm9uZ3tcXDF9IikKICAgICAoImhsaW5lIiAwICIiKQorICAgICgiaWZ4IiAwIChwcm9nbiAoc2V0cSBsYXN0LWlmICJpZngiKSAiIikpCiAgICAgKCJpZmh0bWwiIDAgKGNvbmNhdCAiQCIgKHNldHEgbGFzdC1pZiAiaWZpbmZvIikpKQogICAgICgiaWZ0ZXhpIiAwIChjb25jYXQgIkAiIChzZXRxIGxhc3QtaWYgImlmaW5mbyIpKSkKICAgICAoImluZGV4IiAxIChwcm9nbiAoc2V0cSBjaW5kZXggdCkgIkBjaW5kZXh7XFwxfQEiKSkKQEAgLTI4NCw2ICsyODgsNyBAQAogICAgICgibGluZWlpaSIgMyAiQGl0ZW0gXFwxIEB0YWIgXFwyIEB0YWIgXFwzIikKICAgICAoImxpbmVpdiIgNCAiQGl0ZW0gXFwxIEB0YWIgXFwyIEB0YWIgXFwzIEB0YWIgXFw0IikKICAgICAoImxpbmV2IiA1ICJAaXRlbSBcXDEgQHRhYiBcXDIgQHRhYiBcXDMgQHRhYiBcXDQgQHRhYiBcXDUiKQorICAgICgibG9jYWxsaW5ld2lkdGgiIDAgIiIpCiAgICAgKCJsb2NhbG1vZHVsZXRhYmxlIiAwICIiKQogICAgICgibG9uZ3Byb2dyYW1vcHQiIDEgIkBvcHRpb257LS1cXDF9IikKICAgICAoIm1hY3JvIiAxICJAY29kZXtAYmFja3NsYXNoe31cXDF9IikKQEAgLTMwNyw2ICszMTIsNyBAQAogICAgICgibW9yZWFyZ3MiIDAgIkBkb3Rze30iKQogICAgICgibiIgMCAiQGJhY2tzbGFzaHt9biIpCiAgICAgKCJuZXdjb21tYW5kIiAyICIiKQorICAgICgibmV3bGVuZ3RoIiAxICIiKQogICAgICgibmV3c2dyb3VwIiAxICJAc2FtcHtcXDF9IikKICAgICAoIm5vZGVuYW1lIiAxCiAgICAgIChzYXZlLWV4Y3Vyc2lvbgpAQCAtMzIyLDYgKzMyOCw3IEBACiAgICAgKCJvcGluZGV4IiAxIChwcm9nbiAoc2V0cSBjaW5kZXggdCkgIkBjaW5kZXh7XFwxfQEiKSkKICAgICAoIm9wdGlvbiIgMSAiQG9wdGlvbntcXDF9IikKICAgICAoIm9wdGlvbmFsIiAxICJbXFwxXSIpCisgICAgKCJwYXJhZ3JhcGgiIDEgIkBzdWJzdWJoZWFkaW5nIFxcMSIpCiAgICAgKCJwZXAiIDEgKHByb2duIChzZXRxIGNpbmRleCB0KSAiUEVQQCBcXDFAY2luZGV4IFBFUCBcXDFcbiIpKQogICAgICgicGkiIDAgInBpIikKICAgICAoInBsYXRmb3JtIiAxICIiKQpAQCAtMzYzLDYgKzM3MCw3IEBACiAgICAgKCJzZWV0aXRsZSIgMSAiQGNpdGV7XFwxfSIpCiAgICAgKCJzZWV1cmwiIDIgIlxuQHRhYmxlIEB1cmxcbkBpdGVtIFxcMVxuXFwyXG5AZW5kIHRhYmxlXG4iKQogICAgICgic2V0aW5kZXhzdWJpdGVtIiAxIChwcm9nbiAoc2V0cSBjaW5kZXggdCkgIkBjaW5kZXggXFwxASIpKQorICAgICgic2V0bGVuZ3RoIiAyICIiKQogICAgICgic2V0cmVsZWFzZWluZm8iIDEgKHByb2duIChzZXRxIHB5MnRleGktcmVsZWFzZWluZm8gIiIpKSkKICAgICAoInNldHNob3J0dmVyc2lvbiIgMQogICAgICAocHJvZ24gKHNldHEgcHkydGV4aS1weXRob24tc2hvcnQtdmVyc2lvbiAobWF0Y2gtc3RyaW5nIDEgc3RyaW5nKSkgIiIpKQpAQCAtMzgyLDggKzM5MCw4IEBACiAgICAgKCJ0ZXh0YXNjaWljaXJjdW0iIDAgIl4iKQogICAgICgidGV4dGJhY2tzbGFzaCIgMCAiQGJhY2tzbGFzaHt9IikKICAgICAoInRleHRiYXIiIDAgInwiKQotICAgIDsgU29tZSBjb21tb24gdmVyc2lvbnMgb2YgVGV4aW5mbyBkb24ndCBzdXBwb3J0IEBldXJvIHlldDoKLSAgICA7ICgidGV4dGV1cm8iIDAgIkBldXJve30iKQorICAgICgidGV4dGJmIiAxICJAc3Ryb25ne1xcMX0iKQorICAgICgidGV4dGV1cm8iIDAgIkBldXJve30iKQogICAgIDsgVW5mb3J0dW5hdGVseSwgdGhpcyBhbHRlcm5hdGUgc3BlbGxpbmcgZG9lc24ndCBhY3R1YWxseSBhcHBseSB0bwogICAgIDsgdGhlIHVzYWdlIGZvdW5kIGluIFB5dGhvbiBUdXRvcmlhbCwgd2hpY2ggYWN0dWFsbHkgcmVxdWlyZXMgYQogICAgIDsgRXVybyBzeW1ib2wgdG8gbWFrZSBzZW5zZSwgc28gdGhpcyBpcyBjb21tZW50ZWQgb3V0IGFzIHdlbGwuCkBAIC0zOTQsNiArNDAyLDcgQEAKICAgICAoInRleHRybSIgMSAiXFwxIikKICAgICAoInRleHR0dCIgMSAiQGNvZGV7XFwxfSIpCiAgICAgKCJ0ZXh0dW5kZXJzY29yZSIgMCAiXyIpCisgICAgKCJ0aWxkZSIgMCAifiIpCiAgICAgKCJ0aXRsZSIgMSAocHJvZ24gKHNldHEgdGl0bGUgKG1hdGNoLXN0cmluZyAxIHN0cmluZykpICJAc2V0dGl0bGUgXFwxIikpCiAgICAgKCJ0b2RheSIgMCAiQHRvZGF5e30iKQogICAgICgidG9rZW4iIDEgIkBjb2Rle1xcMX0iKQpAQCAtNDAyLDYgKzQxMSw3IEBACiAgICAgKCJ1IiAwICJAYmFja3NsYXNoe311IikKICAgICAoInVsaW5rIiAyICJcXDEiKQogICAgICgiVU5JWCIgMCAiVU5JWCIpCisgICAgKCJ1bmRlZmluZWQiIDAgIiIpCiAgICAgKCJ1bnNwZWNpZmllZCIgMCAiQGRvdHN7fSIpCiAgICAgKCJ1cmwiIDEgIkB1cmx7XFwxfSIpCiAgICAgKCJ1c2VwYWNrYWdlIiAxICIiKQpAQCAtNTM0LDE1ICs1NDQsMjAgQEAKIAliZWcKIAllbmQpCiAgICAgKHB5MnRleGktc2VhcmNoLXNhZmUgIlxcXFxiZWdpbntcXCh2ZXJiYXRpbVxcfGRpc3BsYXltYXRoXFwpfSIKLSAgICAgIChyZXBsYWNlLW1hdGNoICJAZXhhbXBsZSIpCi0gICAgICAoc2V0cSBiZWcgKGNvcHktbWFya2VyIChwb2ludCkgbmlsKSkKLSAgICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiXFxcXGVuZHtcXCh2ZXJiYXRpbVxcfGRpc3BsYXltYXRoXFwpfSIpCi0gICAgICAoc2V0cSBlbmQgKGNvcHktbWFya2VyIChtYXRjaC1iZWdpbm5pbmcgMCkgbmlsKSkKLSAgICAgIChyZXBsYWNlLW1hdGNoICJAZW5kIGV4YW1wbGUiKQotICAgICAgKHB5MnRleGktdGV4aW5mby1lc2NhcGUgYmVnIGVuZCkKLSAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAoLSBiZWcgKGxlbmd0aCAiQGV4YW1wbGUiKSkKLQkJCSAoKyBlbmQgKGxlbmd0aCAiQGVuZCBleGFtcGxlIikpCi0JCQkgJ3B5MnRleGktcHJvdGVjdGVkIHQpKQorICAgICAgKHdoZW4gKHNhdmUtZXhjdXJzaW9uCisJICAgICAgOyBNYWtlIHN1cmUgd2UgYXJlbid0IGxvb2tpbmcgYXQgYSBjb21tZW50ZWQgb3V0IHZlcnNpb24KKwkgICAgICA7IG9mIGEgdmVyYmF0aW0gZW52aXJvbm1lbnQKKwkgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCisJICAgICAgKG5vdCAobG9va2luZy1hdCAiJSIpKSkKKwkocmVwbGFjZS1tYXRjaCAiQGV4YW1wbGUgIikKKwkoc2V0cSBiZWcgKGNvcHktbWFya2VyIChwb2ludCkgbmlsKSkKKwkocmUtc2VhcmNoLWZvcndhcmQgIlxcXFxlbmR7XFwodmVyYmF0aW1cXHxkaXNwbGF5bWF0aFxcKX0iKQorCShzZXRxIGVuZCAoY29weS1tYXJrZXIgKG1hdGNoLWJlZ2lubmluZyAwKSBuaWwpKQorCShyZXBsYWNlLW1hdGNoICJAZW5kIGV4YW1wbGUiKQorCShweTJ0ZXhpLXRleGluZm8tZXNjYXBlIGJlZyBlbmQpCisJKHB1dC10ZXh0LXByb3BlcnR5ICgtIGJlZyAobGVuZ3RoICJAZXhhbXBsZSAiKSkKKwkJCSAgICgrIGVuZCAobGVuZ3RoICJAZW5kIGV4YW1wbGUiKSkKKwkJCSAgICdweTJ0ZXhpLXByb3RlY3RlZCB0KSkpCiAgICAgKHB5MnRleGktc2VhcmNoLXNhZmUgIlxcXFx2ZXJiXFwoW15hLXpdXFwpIgogICAgICAgKHNldHEgZGVsaW1pdGVyIChtYXRjaC1zdHJpbmcgMSkpCiAgICAgICAocmVwbGFjZS1tYXRjaCAiQGNvZGV7IikKQEAgLTg4Myw2ICs4OTgsMTAgQEAKIAogKGRlZnVuIHB5MnRleGktZml4LWJyYWNlcyAoKQogICAiRXNjYXBlIGJyYWNlcyBmb3IgVGV4aW5mby4iCisgIChweTJ0ZXhpLXNlYXJjaCAie0B7fSIKKyAgICAocmVwbGFjZS1tYXRjaCAiQHsiKSkKKyAgKHB5MnRleGktc2VhcmNoICJ7QH19IgorICAgIChyZXBsYWNlLW1hdGNoICJAfSIpKQogICAobGV0IChzdHJpbmcpCiAgICAgKHB5MnRleGktc2VhcmNoICJ7IgogICAgICAgICh1bmxlc3MgKG9yIChweTJ0ZXhpLXByb3RlY3RlZCkKZGlmZiAtLWdpdCBhL0RvYy90dXQvdHV0LnRleCBiL0RvYy90dXQvdHV0LnRleAppbmRleCAyZGFmODEyLi5jNzZjNTE4IDEwMDY0NAotLS0gYS9Eb2MvdHV0L3R1dC50ZXgKKysrIGIvRG9jL3R1dC90dXQudGV4CkBAIC0yODMxLDcgKzI4MzEsNyBAQAogKn0/ICBJZGVhbGx5LCBvbmUgd291bGQgaG9wZSB0aGF0IHRoaXMgc29tZWhvdyBnb2VzIG91dCB0byB0aGUKIGZpbGVzeXN0ZW0sIGZpbmRzIHdoaWNoIHN1Ym1vZHVsZXMgYXJlIHByZXNlbnQgaW4gdGhlIHBhY2thZ2UsIGFuZAogaW1wb3J0cyB0aGVtIGFsbC4gIFVuZm9ydHVuYXRlbHksIHRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IHdvcmsgdmVyeQotd2VsbCBvbiBNYWMgYW5kIFdpbmRvd3MgcGxhdGZvcm1zLCB3aGVyZSB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdAord2VsbCBvbiBXaW5kb3dzIHBsYXRmb3Jtcywgd2hlcmUgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QKIGFsd2F5cyBoYXZlIGFjY3VyYXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXNlIG9mIGEgZmlsZW5hbWUhICBPbgogdGhlc2UgcGxhdGZvcm1zLCB0aGVyZSBpcyBubyBndWFyYW50ZWVkIHdheSB0byBrbm93IHdoZXRoZXIgYSBmaWxlCiBcZmlsZXtFQ0hPLlBZfSBzaG91bGQgYmUgaW1wb3J0ZWQgYXMgYSBtb2R1bGUgXG1vZHVsZXtlY2hvfSwKQEAgLTMwMzYsNiArMzAzNiw3IEBACiAgOCAgNjQgIDUxMgogIDkgIDgxICA3MjkKIDEwIDEwMCAxMDAwCisKID4+PiBmb3IgeCBpbiByYW5nZSgxLDExKToKIC4uLiAgICAgcHJpbnQgJyUyZCAlM2QgJTRkJyAlICh4LCB4KngsIHgqeCp4KQogLi4uIApAQCAtMzA1MSw4ICszMDUyLDkgQEAKIDEwIDEwMCAxMDAwCiBcZW5ke3ZlcmJhdGltfQogCi0oTm90ZSB0aGF0IG9uZSBzcGFjZSBiZXR3ZWVuIGVhY2ggY29sdW1uIHdhcyBhZGRlZCBieSB0aGUgd2F5Ci1ca2V5d29yZHtwcmludH0gd29ya3M6IGl0IGFsd2F5cyBhZGRzIHNwYWNlcyBiZXR3ZWVuIGl0cyBhcmd1bWVudHMuKQorKE5vdGUgdGhhdCBpbiB0aGUgZmlyc3QgZXhhbXBsZSwgb25lIHNwYWNlIGJldHdlZW4gZWFjaCBjb2x1bW4gd2FzCithZGRlZCBieSB0aGUgd2F5IFxrZXl3b3Jke3ByaW50fSB3b3JrczogaXQgYWx3YXlzIGFkZHMgc3BhY2VzIGJldHdlZW4KK2l0cyBhcmd1bWVudHMuKQogCiBUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSBcbWV0aG9ke3JqdXN0KCl9IG1ldGhvZCBvZiBzdHJpbmcgb2JqZWN0cywKIHdoaWNoIHJpZ2h0LWp1c3RpZmllcyBhIHN0cmluZyBpbiBhIGZpZWxkIG9mIGEgZ2l2ZW4gd2lkdGggYnkgcGFkZGluZwpAQCAtMzUyMSw3ICszNTIzLDcgQEAKIAogQnV0IHVzZSBvZiBcY29kZXsuYXJnc30gaXMgZGlzY291cmFnZWQuICBJbnN0ZWFkLCB0aGUgcHJlZmVycmVkIHVzZSBpcyB0byBwYXNzCiBhIHNpbmdsZSBhcmd1bWVudCB0byBhbiBleGNlcHRpb24gKHdoaWNoIGNhbiBiZSBhIHR1cGxlIGlmIG11bHRpcGxlIGFyZ3VtZW50cwotYXJlIG5lZWRlZCkgYW5kIGhhdmUgaXQgYm91bmQgdG8gdGhlIFxjb2Rle21lc3NhZ2V9IGF0dHJpYnV0ZS4gIE9uZSBteSBhbHNvCithcmUgbmVlZGVkKSBhbmQgaGF2ZSBpdCBib3VuZCB0byB0aGUgXGNvZGV7bWVzc2FnZX0gYXR0cmlidXRlLiAgT25lIG1heSBhbHNvCiBpbnN0YW50aWF0ZSBhbiBleGNlcHRpb24gZmlyc3QgYmVmb3JlIHJhaXNpbmcgaXQgYW5kIGFkZCBhbnkgYXR0cmlidXRlcyB0byBpdAogYXMgZGVzaXJlZC4KIApkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3L3doYXRzbmV3MjUudGV4IGIvRG9jL3doYXRzbmV3L3doYXRzbmV3MjUudGV4CmluZGV4IGJmOTM5YzAuLmZiNjhhY2MgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy93aGF0c25ldzI1LnRleAorKysgYi9Eb2Mvd2hhdHNuZXcvd2hhdHNuZXcyNS50ZXgKQEAgLTQwOSw3ICs0MDksNyBAQAogc3BlY2lmaWMgZXhjZXB0aW9ucy4gIFlvdSBjb3VsZG4ndCBjb21iaW5lIGJvdGggXGtleXdvcmR7ZXhjZXB0fSBibG9ja3MgYW5kIGEKIFxrZXl3b3Jke2ZpbmFsbHl9IGJsb2NrLCBiZWNhdXNlIGdlbmVyYXRpbmcgdGhlIHJpZ2h0IGJ5dGVjb2RlIGZvciB0aGUKIGNvbWJpbmVkIHZlcnNpb24gd2FzIGNvbXBsaWNhdGVkIGFuZCBpdCB3YXNuJ3QgY2xlYXIgd2hhdCB0aGUKLXNlbWFudGljcyBvZiB0aGUgY29tYmluZWQgc2hvdWxkIGJlLiAgCitzZW1hbnRpY3Mgb2YgdGhlIGNvbWJpbmVkIHN0YXRlbWVudCBzaG91bGQgYmUuICAKIAogR3VpZG8gdmFuflJvc3N1bSBzcGVudCBzb21lIHRpbWUgd29ya2luZyB3aXRoIEphdmEsIHdoaWNoIGRvZXMgc3VwcG9ydCB0aGUKIGVxdWl2YWxlbnQgb2YgY29tYmluaW5nIFxrZXl3b3Jke2V4Y2VwdH0gYmxvY2tzIGFuZCBhCkBAIC01NDAsMTAgKzU0MCwxMCBAQAogU3RvcEl0ZXJhdGlvbgogXGVuZHt2ZXJiYXRpbX0KIAotQmVjYXVzZSBca2V5d29yZHt5aWVsZH0gd2lsbCBvZnRlbiBiZSByZXR1cm5pbmcgXGNvbnN0YW50e05vbmV9LCB5b3UKK1xrZXl3b3Jke3lpZWxkfSB3aWxsIHVzdWFsbHkgcmV0dXJuIFxjb25zdGFudHtOb25lfSwgc28geW91CiBzaG91bGQgYWx3YXlzIGNoZWNrIGZvciB0aGlzIGNhc2UuICBEb24ndCBqdXN0IHVzZSBpdHMgdmFsdWUgaW4KIGV4cHJlc3Npb25zIHVubGVzcyB5b3UncmUgc3VyZSB0aGF0IHRoZSBcbWV0aG9ke3NlbmQoKX0gbWV0aG9kCi13aWxsIGJlIHRoZSBvbmx5IG1ldGhvZCB1c2VkIHJlc3VtZSB5b3VyIGdlbmVyYXRvciBmdW5jdGlvbi4KK3dpbGwgYmUgdGhlIG9ubHkgbWV0aG9kIHVzZWQgdG8gcmVzdW1lIHlvdXIgZ2VuZXJhdG9yIGZ1bmN0aW9uLgogCiBJbiBhZGRpdGlvbiB0byBcbWV0aG9ke3NlbmQoKX0sIHRoZXJlIGFyZSB0d28gb3RoZXIgbmV3IG1ldGhvZHMgb24KIGdlbmVyYXRvcnM6CkBAIC02ODMsMjIgKzY4MywyMiBAQAogVGhlIGxvY2sgaXMgYWNxdWlyZWQgYmVmb3JlIHRoZSBibG9jayBpcyBleGVjdXRlZCBhbmQgYWx3YXlzIHJlbGVhc2VkIG9uY2UgCiB0aGUgYmxvY2sgaXMgY29tcGxldGUuCiAKLVRoZSBcbW9kdWxle2RlY2ltYWx9IG1vZHVsZSdzIGNvbnRleHRzLCB3aGljaCBlbmNhcHN1bGF0ZSB0aGUgZGVzaXJlZAotcHJlY2lzaW9uIGFuZCByb3VuZGluZyBjaGFyYWN0ZXJpc3RpY3MgZm9yIGNvbXB1dGF0aW9ucywgcHJvdmlkZSBhIAotXG1ldGhvZHtjb250ZXh0X21hbmFnZXIoKX0gbWV0aG9kIGZvciBnZXR0aW5nIGEgY29udGV4dCBtYW5hZ2VyOgorVGhlIG5ldyBcZnVuY3Rpb257bG9jYWxjb250ZXh0KCl9IGZ1bmN0aW9uIGluIHRoZSBcbW9kdWxle2RlY2ltYWx9IG1vZHVsZQorbWFrZXMgaXQgZWFzeSB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IGRlY2ltYWwgY29udGV4dCwgd2hpY2gKK2VuY2Fwc3VsYXRlcyB0aGUgZGVzaXJlZCBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIGNoYXJhY3RlcmlzdGljcyBmb3IKK2NvbXB1dGF0aW9uczoKIAogXGJlZ2lue3ZlcmJhdGltfQotaW1wb3J0IGRlY2ltYWwKK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCwgQ29udGV4dCwgbG9jYWxjb250ZXh0CiAKICMgRGlzcGxheXMgd2l0aCBkZWZhdWx0IHByZWNpc2lvbiBvZiAyOCBkaWdpdHMKLXYxID0gZGVjaW1hbC5EZWNpbWFsKCc1NzgnKQotcHJpbnQgdjEuc3FydCgpCit2ID0gRGVjaW1hbCgnNTc4JykKK3ByaW50IHYuc3FydCgpCiAKLWN0eCA9IGRlY2ltYWwuQ29udGV4dChwcmVjPTE2KSAKLXdpdGggY3R4LmNvbnRleHRfbWFuYWdlcigpOgord2l0aCBsb2NhbGNvbnRleHQoQ29udGV4dChwcmVjPTE2KSk6CiAgICAgIyBBbGwgY29kZSBpbiB0aGlzIGJsb2NrIHVzZXMgYSBwcmVjaXNpb24gb2YgMTYgZGlnaXRzLgogICAgICMgVGhlIG9yaWdpbmFsIGNvbnRleHQgaXMgcmVzdG9yZWQgb24gZXhpdGluZyB0aGUgYmxvY2suCi0gICAgcHJpbnQgdjEuc3FydCgpCisgICAgcHJpbnQgdi5zcXJ0KCkKIFxlbmR7dmVyYmF0aW19CiAKIFxzdWJzZWN0aW9ue1dyaXRpbmcgQ29udGV4dCBNYW5hZ2Vyc1xsYWJlbHtjb250ZXh0LW1hbmFnZXJzfX0KQEAgLTExMTUsMTIgKzExMTUsMTQgQEAKIFxiZWdpbnt2ZXJiYXRpbX0KID4+PiAoJ2h0dHA6Ly93d3cucHl0aG9uLm9yZycpLnBhcnRpdGlvbignOi8vJykKICgnaHR0cCcsICc6Ly8nLCAnd3d3LnB5dGhvbi5vcmcnKQotPj4+ICh1J1N1YmplY3Q6IGEgcXVpY2sgcXVlc3Rpb24nKS5wYXJ0aXRpb24oJzonKQotKHUnU3ViamVjdCcsIHUnOicsIHUnIGEgcXVpY2sgcXVlc3Rpb24nKQogPj4+ICgnZmlsZTovdXNyL3NoYXJlL2RvYy9pbmRleC5odG1sJykucGFydGl0aW9uKCc6Ly8nKQogKCdmaWxlOi91c3Ivc2hhcmUvZG9jL2luZGV4Lmh0bWwnLCAnJywgJycpCis+Pj4gKHUnU3ViamVjdDogYSBxdWljayBxdWVzdGlvbicpLnBhcnRpdGlvbignOicpCisodSdTdWJqZWN0JywgdSc6JywgdScgYSBxdWljayBxdWVzdGlvbicpCiA+Pj4gJ3d3dy5weXRob24ub3JnJy5ycGFydGl0aW9uKCcuJykKICgnd3d3LnB5dGhvbicsICcuJywgJ29yZycpCis+Pj4gJ3d3dy5weXRob24ub3JnJy5ycGFydGl0aW9uKCc6JykKKygnJywgJycsICd3d3cucHl0aG9uLm9yZycpCiBcZW5ke3ZlcmJhdGltfQogCiAoSW1wbGVtZW50ZWQgYnkgRnJlZHJpayBMdW5kaCBmb2xsb3dpbmcgYSBzdWdnZXN0aW9uIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKQEAgLTIxMTQsMTQgKzIxMTYsMTYgQEAKIFNRTGl0ZSBlbWJlZGRlZCBkYXRhYmFzZSwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgdW5kZXIKIHRoZSBwYWNrYWdlIG5hbWUgXG1vZHVsZXtzcWxpdGUzfS4gIAogCi1TUUxpdGUgaXMgYSBDIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBhIFNRTC1sYW5ndWFnZSBkYXRhYmFzZSB0aGF0Ci1zdG9yZXMgZGF0YSBpbiBkaXNrIGZpbGVzIHdpdGhvdXQgcmVxdWlyaW5nIGEgc2VwYXJhdGUgc2VydmVyIHByb2Nlc3MuCitTUUxpdGUgaXMgYSBDIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBhIGxpZ2h0d2VpZ2h0IGRpc2stYmFzZWQgZGF0YWJhc2UKK3RoYXQgZG9lc24ndCByZXF1aXJlIGEgc2VwYXJhdGUgc2VydmVyIHByb2Nlc3MgYW5kIGFsbG93cyBhY2Nlc3NpbmcKK3RoZSBkYXRhYmFzZSB1c2luZyBhIG5vbnN0YW5kYXJkIHZhcmlhbnQgb2YgdGhlIFNRTCBxdWVyeSBsYW5ndWFnZS4KK1NvbWUgYXBwbGljYXRpb25zIGNhbiB1c2UgU1FMaXRlIGZvciBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UuICBJdCdzIGFsc28KK3Bvc3NpYmxlIHRvIHByb3RvdHlwZSBhbiBhcHBsaWNhdGlvbiB1c2luZyBTUUxpdGUgYW5kIHRoZW4gcG9ydCB0aGUKK2NvZGUgdG8gYSBsYXJnZXIgZGF0YWJhc2Ugc3VjaCBhcyBQb3N0Z3JlU1FMIG9yIE9yYWNsZS4KKyAKIHB5c3FsaXRlIHdhcyB3cml0dGVuIGJ5IEdlcmhhcmQgSFwiYXJpbmcgYW5kIHByb3ZpZGVzIGEgU1FMIGludGVyZmFjZQogY29tcGxpYW50IHdpdGggdGhlIERCLUFQSSAyLjAgc3BlY2lmaWNhdGlvbiBkZXNjcmliZWQgYnkKLVxwZXB7MjQ5fS4gVGhpcyBtZWFucyB0aGF0IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB3cml0ZSB0aGUgZmlyc3QKLXZlcnNpb24gb2YgeW91ciBhcHBsaWNhdGlvbnMgdXNpbmcgU1FMaXRlIGZvciBkYXRhIHN0b3JhZ2UuICBJZgotc3dpdGNoaW5nIHRvIGEgbGFyZ2VyIGRhdGFiYXNlIHN1Y2ggYXMgUG9zdGdyZVNRTCBvciBPcmFjbGUgaXMKLWxhdGVyIG5lY2Vzc2FyeSwgdGhlIHN3aXRjaCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5LgorXHBlcHsyNDl9LiAKIAogSWYgeW91J3JlIGNvbXBpbGluZyB0aGUgUHl0aG9uIHNvdXJjZSB5b3Vyc2VsZiwgbm90ZSB0aGF0IHRoZSBzb3VyY2UKIHRyZWUgZG9lc24ndCBpbmNsdWRlIHRoZSBTUUxpdGUgY29kZSwgb25seSB0aGUgd3JhcHBlciBtb2R1bGUuCkBAIC0yMTQ4LDggKzIxNTIsOCBAQAogCiAjIENyZWF0ZSB0YWJsZQogYy5leGVjdXRlKCcnJ2NyZWF0ZSB0YWJsZSBzdG9ja3MKLShkYXRlIHRpbWVzdGFtcCwgdHJhbnMgdmFyY2hhciwgc3ltYm9sIHZhcmNoYXIsCi0gcXR5IGRlY2ltYWwsIHByaWNlIGRlY2ltYWwpJycnKQorKGRhdGUgdGV4dCwgdHJhbnMgdGV4dCwgc3ltYm9sIHRleHQsCisgcXR5IHJlYWwsIHByaWNlIHJlYWwpJycnKQogCiAjIEluc2VydCBhIHJvdyBvZiBkYXRhCiBjLmV4ZWN1dGUoIiIiaW5zZXJ0IGludG8gc3RvY2tzCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvd2hhdHNuZXcyNi50ZXggYi9Eb2Mvd2hhdHNuZXcvd2hhdHNuZXcyNi50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlMDY3ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy93aGF0c25ldy93aGF0c25ldzI2LnRleApAQCAtMCwwICsxLDEzNyBAQAorXGRvY3VtZW50Y2xhc3N7aG93dG99CitcdXNlcGFja2FnZXtkaXN0dXRpbHN9CislICRJZCQKKworCitcdGl0bGV7V2hhdCdzIE5ldyBpbiBQeXRob24gMi42fQorXHJlbGVhc2V7MC4wfQorXGF1dGhvcntBLk0uIEt1Y2hsaW5nfQorXGF1dGhvcmFkZHJlc3N7XGVtYWlse2Fta0BhbWsuY2F9fQorCitcYmVnaW57ZG9jdW1lbnR9CitcbWFrZXRpdGxlCitcdGFibGVvZmNvbnRlbnRzCisKK1RoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAyLjYuICBObyByZWxlYXNlIGRhdGUKK2ZvciBQeXRob24gMi42IGhhcyBiZWVuIHNldDsgaXQgd2lsbCBwcm9iYWJseSBiZSByZWxlYXNlZCBpbiBsYXRlIDIwMDcuCisKKyUgQ29tcGFyZSB3aXRoIHByZXZpb3VzIHJlbGVhc2UgaW4gMiAtIDMgc2VudGVuY2VzIGhlcmUuCisKK1RoaXMgYXJ0aWNsZSBkb2Vzbid0IGF0dGVtcHQgdG8gcHJvdmlkZSBhIGNvbXBsZXRlIHNwZWNpZmljYXRpb24gb2YKK3RoZSBuZXcgZmVhdHVyZXMsIGJ1dCBpbnN0ZWFkIHByb3ZpZGVzIGEgY29udmVuaWVudCBvdmVydmlldy4gIEZvcgorZnVsbCBkZXRhaWxzLCB5b3Ugc2hvdWxkIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBQeXRob24gMi42LgorJSBhZGQgaHlwZXJsaW5rIHdoZW4gdGhlIGRvY3VtZW50YXRpb24gYmVjb21lcyBhdmFpbGFibGUgb25saW5lLgorSWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gYW5kIGRlc2lnbgorcmF0aW9uYWxlLCByZWZlciB0byB0aGUgUEVQIGZvciBhIHBhcnRpY3VsYXIgbmV3IGZlYXR1cmUuCisKKworJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworJSBMYXJnZSwgUEVQLWxldmVsIGZlYXR1cmVzIGFuZCBjaGFuZ2VzIHNob3VsZCBiZSBkZXNjcmliZWQgaGVyZS4KKworCislPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorXHNlY3Rpb257T3RoZXIgTGFuZ3VhZ2UgQ2hhbmdlc30KKworSGVyZSBhcmUgYWxsIG9mIHRoZSBjaGFuZ2VzIHRoYXQgUHl0aG9uIDIuNiBtYWtlcyB0byB0aGUgY29yZSBQeXRob24KK2xhbmd1YWdlLgorCitcYmVnaW57aXRlbWl6ZX0KK1xpdGVtIFRCRAorCitcZW5ke2l0ZW1pemV9CisKKworJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1xzdWJzZWN0aW9ue09wdGltaXphdGlvbnN9CisKK1xiZWdpbntpdGVtaXplfQorCitcaXRlbSBPcHRpbWl6YXRpb25zIHNob3VsZCBiZSBkZXNjcmliZWQgaGVyZS4KKworXGVuZHtpdGVtaXplfQorCitUaGUgbmV0IHJlc3VsdCBvZiB0aGUgMi42IG9wdGltaXphdGlvbnMgaXMgdGhhdCBQeXRob24gMi42IHJ1bnMgdGhlCitweXN0b25lIGJlbmNobWFyayBhcm91bmQgWFhcJSBmYXN0ZXIgdGhhbiBQeXRob24gMi41LgorCisKKyU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citcc2VjdGlvbntOZXcsIEltcHJvdmVkLCBhbmQgRGVwcmVjYXRlZCBNb2R1bGVzfQorCitBcyB1c3VhbCwgUHl0aG9uJ3Mgc3RhbmRhcmQgbGlicmFyeSByZWNlaXZlZCBhIG51bWJlciBvZiBlbmhhbmNlbWVudHMgYW5kCitidWcgZml4ZXMuICBIZXJlJ3MgYSBwYXJ0aWFsIGxpc3Qgb2YgdGhlIG1vc3Qgbm90YWJsZSBjaGFuZ2VzLCBzb3J0ZWQKK2FscGhhYmV0aWNhbGx5IGJ5IG1vZHVsZSBuYW1lLiBDb25zdWx0IHRoZQorXGZpbGV7TWlzYy9ORVdTfSBmaWxlIGluIHRoZSBzb3VyY2UgdHJlZSBmb3IgYSBtb3JlCitjb21wbGV0ZSBsaXN0IG9mIGNoYW5nZXMsIG9yIGxvb2sgdGhyb3VnaCB0aGUgQ1ZTIGxvZ3MgZm9yIGFsbCB0aGUKK2RldGFpbHMuCisKK1xiZWdpbntpdGVtaXplfQorCitcaXRlbSBUaGUgXG1vZHVsZXtzbXRwbGlifSBtb2R1bGUgbm93IHN1cHBvcnRzIFNNVFAgb3ZlciAKK1NTTCB0aGFua3MgdG8gdGhlIGFkZGl0aW9uIG9mIHRoZSBcY2xhc3N7U01UUF9TU0x9IGNsYXNzLgorVGhpcyBjbGFzcyBzdXBwb3J0cyBhbiBpbnRlcmZhY2UgaWRlbnRpY2FsIHRvIHRoZSBleGlzdGluZyBcY2xhc3N7U01UUH0gCitjbGFzcy4gKENvbnRyaWJ1dGVkIGJ5IE1vbnR5IFRheWxvci4pCisKK1xlbmR7aXRlbWl6ZX0KKworCislPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSB3aG9sZSBuZXcgbW9kdWxlcyBnZXQgZGVzY3JpYmVkIGluIFxzdWJzZWN0aW9ucyBoZXJlCisKKworJSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citcc2VjdGlvbntCdWlsZCBhbmQgQyBBUEkgQ2hhbmdlc30KKworQ2hhbmdlcyB0byBQeXRob24ncyBidWlsZCBwcm9jZXNzIGFuZCB0byB0aGUgQyBBUEkgaW5jbHVkZToKKworXGJlZ2lue2l0ZW1pemV9CisKK1xpdGVtIERldGFpbGVkIGNoYW5nZXMgYXJlIGxpc3RlZCBoZXJlLgorCitcZW5ke2l0ZW1pemV9CisKKworJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1xzdWJzZWN0aW9ue1BvcnQtU3BlY2lmaWMgQ2hhbmdlc30KKworUGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcyBnbyBoZXJlLgorCisKKyU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citcc2VjdGlvbntPdGhlciBDaGFuZ2VzIGFuZCBGaXhlcyBcbGFiZWx7c2VjdGlvbi1vdGhlcn19CisKK0FzIHVzdWFsLCB0aGVyZSB3ZXJlIGEgYnVuY2ggb2Ygb3RoZXIgaW1wcm92ZW1lbnRzIGFuZCBidWdmaXhlcworc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIHNvdXJjZSB0cmVlLiAgQSBzZWFyY2ggdGhyb3VnaCB0aGUgY2hhbmdlCitsb2dzIGZpbmRzIHRoZXJlIHdlcmUgWFhYIHBhdGNoZXMgYXBwbGllZCBhbmQgWVlZIGJ1Z3MgZml4ZWQgYmV0d2VlbgorUHl0aG9uIDIuNSBhbmQgMi42LiAgQm90aCBmaWd1cmVzIGFyZSBsaWtlbHkgdG8gYmUgdW5kZXJlc3RpbWF0ZXMuCisKK1NvbWUgb2YgdGhlIG1vcmUgbm90YWJsZSBjaGFuZ2VzIGFyZToKKworXGJlZ2lue2l0ZW1pemV9CisKK1xpdGVtIERldGFpbHMgZ28gaGVyZS4KKworXGVuZHtpdGVtaXplfQorCisKKyU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citcc2VjdGlvbntQb3J0aW5nIHRvIFB5dGhvbiAyLjZ9CisKK1RoaXMgc2VjdGlvbiBsaXN0cyBwcmV2aW91c2x5IGRlc2NyaWJlZCBjaGFuZ2VzIHRoYXQgbWF5IHJlcXVpcmUKK2NoYW5nZXMgdG8geW91ciBjb2RlOgorCitcYmVnaW57aXRlbWl6ZX0KKworXGl0ZW0gRXZlcnl0aGluZyBpcyBhbGwgaW4gdGhlIGRldGFpbHMhCisKK1xlbmR7aXRlbWl6ZX0KKworCislPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorXHNlY3Rpb257QWNrbm93bGVkZ2VtZW50cyBcbGFiZWx7YWNrc319CisKK1RoZSBhdXRob3Igd291bGQgbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3Igb2ZmZXJpbmcKK3N1Z2dlc3Rpb25zLCBjb3JyZWN0aW9ucyBhbmQgYXNzaXN0YW5jZSB3aXRoIHZhcmlvdXMgZHJhZnRzIG9mIHRoaXMKK2FydGljbGU6IC4KKworXGVuZHtkb2N1bWVudH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvYWJzdHJhY3QuaCBiL0luY2x1ZGUvYWJzdHJhY3QuaAppbmRleCAzNTdhZmUxLi44N2I5NzVkIDEwMDY0NAotLS0gYS9JbmNsdWRlL2Fic3RyYWN0LmgKKysrIGIvSW5jbHVkZS9hYnN0cmFjdC5oCkBAIC0yODgsOSArMjg4LDEwIEBACiAKICAgICAgICAqLwogCisgICAgICAgLyogRGVjbGFyZWQgZWxzZXdoZXJlCisKICAgICAgUHlBUElfRlVOQyhpbnQpIFB5Q2FsbGFibGVfQ2hlY2soUHlPYmplY3QgKm8pOwogCi0gICAgICAgLyoKIAkgRGV0ZXJtaW5lIGlmIHRoZSBvYmplY3QsIG8sIGlzIGNhbGxhYmxlLiAgUmV0dXJuIDEgaWYgdGhlCiAJIG9iamVjdCBpcyBjYWxsYWJsZSBhbmQgMCBvdGhlcndpc2UuCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbW9kc3VwcG9ydC5oIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKaW5kZXggMjNkNWQzYS4uNzYxZDk2MCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2RzdXBwb3J0LmgKKysrIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKQEAgLTI0LDcgKzI0LDcgQEAKICNlbmRpZgogCiBQeUFQSV9GVU5DKGludCkgUHlBcmdfUGFyc2UoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOworUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pIFB5X0ZPUk1BVF9QQVJTRVRVUExFKFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNoYXIgKiosIC4uLik7CiBQeUFQSV9GVU5DKGludCkgUHlBcmdfVW5wYWNrVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCBQeV9zc2l6ZV90LCBQeV9zc2l6ZV90LCAuLi4pOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXBvcnQuaCBiL0luY2x1ZGUvcHlwb3J0LmgKaW5kZXggYmU2YzUxZi4uMzZkNTE3YyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXBvcnQuaAorKysgYi9JbmNsdWRlL3B5cG9ydC5oCkBAIC0zLDYgKzMsMTAgQEAKIAogI2luY2x1ZGUgInB5Y29uZmlnLmgiIC8qIGluY2x1ZGUgZm9yIGRlZmluZXMgKi8KIAorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIFN5bWJvbHMgYW5kIG1hY3JvcyB0byBzdXBwbHkgcGxhdGZvcm0taW5kZXBlbmRlbnQgaW50ZXJmYWNlcyB0byBiYXNpYwogQyBsYW5ndWFnZSAmIGxpYnJhcnkgb3BlcmF0aW9ucyB3aG9zZSBzcGVsbGluZ3MgdmFyeSBhY3Jvc3MgcGxhdGZvcm1zLgpAQCAtMTI2LDcgKzEzMCw3IEBACiAgKiBQeV9zc2l6ZV90IG9uIHRoZSBwbGF0Zm9ybS4KICAqLwogI2lmbmRlZiBQWV9GT1JNQVRfU0laRV9UCi0jICAgaWYgU0laRU9GX1NJWkVfVCA9PSBTSVpFT0ZfSU5UCisjICAgaWYgU0laRU9GX1NJWkVfVCA9PSBTSVpFT0ZfSU5UICYmICFkZWZpbmVkKF9fQVBQTEVfXykKICMgICAgICAgZGVmaW5lIFBZX0ZPUk1BVF9TSVpFX1QgIiIKICMgICBlbGlmIFNJWkVPRl9TSVpFX1QgPT0gU0laRU9GX0xPTkcKICMgICAgICAgZGVmaW5lIFBZX0ZPUk1BVF9TSVpFX1QgImwiCkBAIC03NDUsNiArNzQ5LDE1IEBACiAjZGVmaW5lIFB5X0dDQ19BVFRSSUJVVEUoeCkgX19hdHRyaWJ1dGVfXyh4KQogI2VuZGlmCiAKKy8qCisgKiBBZGQgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQgd2hlcmUgYXZhaWxhYmxlLgorICovCisjaWZkZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKKyNkZWZpbmUgUHlfRk9STUFUX1BBUlNFVFVQTEUoZnVuYyxwMSxwMikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KGZ1bmMscDEscDIpKSkKKyNlbHNlCisjZGVmaW5lIFB5X0ZPUk1BVF9QQVJTRVRVUExFKGZ1bmMscDEscDIpCisjZW5kaWYKKwogLyogRWxpbWluYXRlIGVuZC1vZi1sb29wIGNvZGUgbm90IHJlYWNoZWQgd2FybmluZ3MgZnJvbSBTdW5Qcm8gQwogICogd2hlbiB1c2luZyBkb3suLi59d2hpbGUoMCkgbWFjcm9zCiAgKi8KZGlmZiAtLWdpdCBhL0xpYi9Db25maWdQYXJzZXIucHkgYi9MaWIvQ29uZmlnUGFyc2VyLnB5CmluZGV4IDZkYzUzYjkuLjY1YzhjZTUgMTAwNjQ0Ci0tLSBhL0xpYi9Db25maWdQYXJzZXIucHkKKysrIGIvTGliL0NvbmZpZ1BhcnNlci5weQpAQCAtMTk5LDExICsxOTksMTEgQEAKICAgICAgICAgc2VsZi5saW5lID0gbGluZQogCiAKLQogY2xhc3MgUmF3Q29uZmlnUGFyc2VyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0cz1Ob25lKToKLSAgICAgICAgc2VsZi5fc2VjdGlvbnMgPSB7fQotICAgICAgICBzZWxmLl9kZWZhdWx0cyA9IHt9CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHRzPU5vbmUsIGRpY3RfdHlwZT1kaWN0KToKKyAgICAgICAgc2VsZi5fZGljdCA9IGRpY3RfdHlwZQorICAgICAgICBzZWxmLl9zZWN0aW9ucyA9IHNlbGYuX2RpY3QoKQorICAgICAgICBzZWxmLl9kZWZhdWx0cyA9IHNlbGYuX2RpY3QoKQogICAgICAgICBpZiBkZWZhdWx0czoKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRlZmF1bHRzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdHNbc2VsZi5vcHRpb254Zm9ybShrZXkpXSA9IHZhbHVlCkBAIC0yMjQsNyArMjI0LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlY3Rpb24gaW4gc2VsZi5fc2VjdGlvbnM6CiAgICAgICAgICAgICByYWlzZSBEdXBsaWNhdGVTZWN0aW9uRXJyb3Ioc2VjdGlvbikKLSAgICAgICAgc2VsZi5fc2VjdGlvbnNbc2VjdGlvbl0gPSB7fQorICAgICAgICBzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXSA9IHNlbGYuX2RpY3QoKQogCiAgICAgZGVmIGhhc19zZWN0aW9uKHNlbGYsIHNlY3Rpb24pOgogICAgICAgICAiIiJJbmRpY2F0ZSB3aGV0aGVyIHRoZSBuYW1lZCBzZWN0aW9uIGlzIHByZXNlbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uCkBAIC0zMDcsNyArMzA3LDcgQEAKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgaWYgc2VjdGlvbiAhPSBERUZBVUxUU0VDVDoKICAgICAgICAgICAgICAgICByYWlzZSBOb1NlY3Rpb25FcnJvcihzZWN0aW9uKQotICAgICAgICAgICAgZDIgPSB7fQorICAgICAgICAgICAgZDIgPSBzZWxmLl9kaWN0KCkKICAgICAgICAgZCA9IHNlbGYuX2RlZmF1bHRzLmNvcHkoKQogICAgICAgICBkLnVwZGF0ZShkMikKICAgICAgICAgaWYgIl9fbmFtZV9fIiBpbiBkOgpAQCAtNDUzLDcgKzQ1Myw4IEBACiAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VjdG5hbWUgPT0gREVGQVVMVFNFQ1Q6CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzZWN0ID0gc2VsZi5fZGVmYXVsdHMKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlY3QgPSB7J19fbmFtZV9fJzogc2VjdG5hbWV9CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJzZWN0ID0gc2VsZi5fZGljdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJzZWN0WydfX25hbWVfXyddID0gc2VjdG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlY3Rpb25zW3NlY3RuYW1lXSA9IGN1cnNlY3QKICAgICAgICAgICAgICAgICAgICAgIyBTbyBzZWN0aW9ucyBjYW4ndCBzdGFydCB3aXRoIGEgY29udGludWF0aW9uIGxpbmUKICAgICAgICAgICAgICAgICAgICAgb3B0bmFtZSA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9RdWV1ZS5weSBiL0xpYi9RdWV1ZS5weQppbmRleCAwZjgwNTg0Li43OWIwYWJmIDEwMDY0NAotLS0gYS9MaWIvUXVldWUucHkKKysrIGIvTGliL1F1ZXVlLnB5CkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgIHNlbGYuX2luaXQobWF4c2l6ZSkKICAgICAgICAgIyBtdXRleCBtdXN0IGJlIGhlbGQgd2hlbmV2ZXIgdGhlIHF1ZXVlIGlzIG11dGF0aW5nLiAgQWxsIG1ldGhvZHMKICAgICAgICAgIyB0aGF0IGFjcXVpcmUgbXV0ZXggbXVzdCByZWxlYXNlIGl0IGJlZm9yZSByZXR1cm5pbmcuICBtdXRleAotICAgICAgICAjIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gY29uZGl0aW9ucywgc28gYWNxdWlyaW5nIGFuZAorICAgICAgICAjIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0aHJlZSBjb25kaXRpb25zLCBzbyBhY3F1aXJpbmcgYW5kCiAgICAgICAgICMgcmVsZWFzaW5nIHRoZSBjb25kaXRpb25zIGFsc28gYWNxdWlyZXMgYW5kIHJlbGVhc2VzIG11dGV4LgogICAgICAgICBzZWxmLm11dGV4ID0gdGhyZWFkaW5nLkxvY2soKQogICAgICAgICAjIE5vdGlmeSBub3RfZW1wdHkgd2hlbmV2ZXIgYW4gaXRlbSBpcyBhZGRlZCB0byB0aGUgcXVldWU7IGEKZGlmZiAtLWdpdCBhL0xpYi9TaW1wbGVYTUxSUENTZXJ2ZXIucHkgYi9MaWIvU2ltcGxlWE1MUlBDU2VydmVyLnB5CmluZGV4IDNiMGE2YTUuLmM2ZjY5NTggMTAwNjQ0Ci0tLSBhL0xpYi9TaW1wbGVYTUxSUENTZXJ2ZXIucHkKKysrIGIvTGliL1NpbXBsZVhNTFJQQ1NlcnZlci5weQpAQCAtMjY0LDggKzI2NCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAjIHJlcG9ydCBleGNlcHRpb24gYmFjayB0byBzZXJ2ZXIKKyAgICAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190YiA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICByZXNwb25zZSA9IHhtbHJwY2xpYi5kdW1wcygKLSAgICAgICAgICAgICAgICB4bWxycGNsaWIuRmF1bHQoMSwgIiVzOiVzIiAlIHN5cy5leGNfaW5mbygpWzoyXSksCisgICAgICAgICAgICAgICAgeG1scnBjbGliLkZhdWx0KDEsICIlczolcyIgJSAoZXhjX3R5cGUsIGV4Y192YWx1ZSkpLAogICAgICAgICAgICAgICAgIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcsIGFsbG93X25vbmU9c2VsZi5hbGxvd19ub25lLAogICAgICAgICAgICAgICAgICkKIApAQCAtMzY0LDkgKzM2NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgJ2ZhdWx0U3RyaW5nJyA6IGZhdWx0LmZhdWx0U3RyaW5nfQogICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZXhjX3R5cGUsIGV4Y192YWx1ZSwgZXhjX3RiID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgeydmYXVsdENvZGUnIDogMSwKLSAgICAgICAgICAgICAgICAgICAgICdmYXVsdFN0cmluZycgOiAiJXM6JXMiICUgc3lzLmV4Y19pbmZvKClbOjJdfQorICAgICAgICAgICAgICAgICAgICAgJ2ZhdWx0U3RyaW5nJyA6ICIlczolcyIgJSAoZXhjX3R5cGUsIGV4Y192YWx1ZSl9CiAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHJlc3VsdHMKIApkaWZmIC0tZ2l0IGEvTGliL19zdHJwdGltZS5weSBiL0xpYi9fc3RycHRpbWUucHkKaW5kZXggY2U4NTI1Yi4uM2ZiNTYwMiAxMDA2NDQKLS0tIGEvTGliL19zdHJwdGltZS5weQorKysgYi9MaWIvX3N0cnB0aW1lLnB5CkBAIC0zMDYsNyArMzA2LDcgQEAKICAgICAgICAgX2NhY2hlX2xvY2sucmVsZWFzZSgpCiAgICAgZm91bmQgPSBmb3JtYXRfcmVnZXgubWF0Y2goZGF0YV9zdHJpbmcpCiAgICAgaWYgbm90IGZvdW5kOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0aW1lIGRhdGEgZGlkIG5vdCBtYXRjaCBmb3JtYXQ6ICBkYXRhPSVzICBmbXQ9JXMiICUKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGltZSBkYXRhICVyIGRvZXMgbm90IG1hdGNoIGZvcm1hdCAlciIgJQogICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhX3N0cmluZywgZm9ybWF0KSkKICAgICBpZiBsZW4oZGF0YV9zdHJpbmcpICE9IGZvdW5kLmVuZCgpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmNvbnZlcnRlZCBkYXRhIHJlbWFpbnM6ICVzIiAlCmRpZmYgLS1naXQgYS9MaWIvYXRleGl0LnB5IGIvTGliL2F0ZXhpdC5weQppbmRleCBjOWY0Y2M2Li45M2ZkZGY3IDEwMDY0NAotLS0gYS9MaWIvYXRleGl0LnB5CisrKyBiL0xpYi9hdGV4aXQucHkKQEAgLTQwLDggKzQwLDExIEBACiAgICAgZnVuYyAtIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCBleGl0CiAgICAgdGFyZ3MgLSBvcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBmdW5jCiAgICAga2FyZ3MgLSBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyB0byBwYXNzIHRvIGZ1bmMKKworICAgIGZ1bmMgaXMgcmV0dXJuZWQgdG8gZmFjaWxpdGF0ZSB1c2FnZSBhcyBhIGRlY29yYXRvci4KICAgICAiIiIKICAgICBfZXhpdGhhbmRsZXJzLmFwcGVuZCgoZnVuYywgdGFyZ3MsIGthcmdzKSkKKyAgICByZXR1cm4gZnVuYwogCiBpZiBoYXNhdHRyKHN5cywgImV4aXRmdW5jIik6CiAgICAgIyBBc3N1bWUgaXQncyBhbm90aGVyIHJlZ2lzdGVyZWQgZXhpdCBmdW5jdGlvbiAtIGFwcGVuZCBpdCB0byBvdXIgbGlzdApkaWZmIC0tZ2l0IGEvTGliL2Jhc2U2NC5weSBiL0xpYi9iYXNlNjQucHkKaW5kZXggYzE5NmNkOC4uNDFhNWUxNCAxMDA3NTUKLS0tIGEvTGliL2Jhc2U2NC5weQorKysgYi9MaWIvYmFzZTY0LnB5CkBAIC0zMDgsNyArMzA4LDcgQEAKIAogCiBkZWYgZW5jb2Rlc3RyaW5nKHMpOgotICAgICIiIkVuY29kZSBhIHN0cmluZy4iIiIKKyAgICAiIiJFbmNvZGUgYSBzdHJpbmcgaW50byBtdWx0aXBsZSBsaW5lcyBvZiBiYXNlLTY0IGRhdGEuIiIiCiAgICAgcGllY2VzID0gW10KICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIE1BWEJJTlNJWkUpOgogICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBNQVhCSU5TSVpFXQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYm9iai5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGJvYmoucHkKaW5kZXggMTMwNTg4My4uYmJhNmE1YiAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYm9iai5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Rib2JqLnB5CkBAIC02OSw2ICs2OSwxMCBAQAogICAgICAgICBzZWxmLmRiLmNsb3NlKCkKICAgICAgICAgc2VsZi5lbnYuY2xvc2UoKQogCisgICAgZGVmIHRlc3QwM19kYm9ial90eXBlX2JlZm9yZV9vcGVuKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGlzIGRvZXNuJ3QgY2F1c2UgYSBzZWdmYXVsdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsIGRiLkRCKCkudHlwZSkKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9jZ2kucHkgYi9MaWIvY2dpLnB5CmluZGV4IGZhOGZkMTMuLjgwYjNiN2EgMTAwNzU1Ci0tLSBhL0xpYi9jZ2kucHkKKysrIGIvTGliL2NnaS5weQpAQCAtNzk5LDggKzc5OSwxMCBAQAogICAgIGZvcm0uZGljdCA9PSB7a2V5OiBbdmFsLCB2YWwsIC4uLl0sIC4uLn0KIAogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9uPW9zLmVudmlyb24pOgotICAgICAgICBzZWxmLmRpY3QgPSBzZWxmLmRhdGEgPSBwYXJzZShlbnZpcm9uPWVudmlyb24pCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb249b3MuZW52aXJvbiwga2VlcF9ibGFua192YWx1ZXM9MCwgc3RyaWN0X3BhcnNpbmc9MCk6CisgICAgICAgIHNlbGYuZGljdCA9IHNlbGYuZGF0YSA9IHBhcnNlKGVudmlyb249ZW52aXJvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcF9ibGFua192YWx1ZXM9a2VlcF9ibGFua192YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdF9wYXJzaW5nPXN0cmljdF9wYXJzaW5nKQogICAgICAgICBzZWxmLnF1ZXJ5X3N0cmluZyA9IGVudmlyb25bJ1FVRVJZX1NUUklORyddCiAKIApkaWZmIC0tZ2l0IGEvTGliL2NvZGVjcy5weSBiL0xpYi9jb2RlY3MucHkKaW5kZXggMTUxOGQ3NS4uZjgzNGI4ZCAxMDA2NDQKLS0tIGEvTGliL2NvZGVjcy5weQorKysgYi9MaWIvY29kZWNzLnB5CkBAIC0zMjksNiArMzI5LDEyIEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnN0cmVhbSwgbmFtZSkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRiKToKKyAgICAgICAgc2VsZi5zdHJlYW0uY2xvc2UoKQorCiAjIyMKIAogY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjKToKQEAgLTU2OCw2ICs1NzQsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuc3RyZWFtLCBuYW1lKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdGIpOgorICAgICAgICBzZWxmLnN0cmVhbS5jbG9zZSgpCisKICMjIwogCiBjbGFzcyBTdHJlYW1SZWFkZXJXcml0ZXI6CkBAIC02NDEsNiArNjUzLDE0IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnN0cmVhbSwgbmFtZSkKIAorICAgICMgdGhlc2UgYXJlIG5lZWRlZCB0byBtYWtlICJ3aXRoIGNvZGVjcy5vcGVuKC4uLikiIHdvcmsgcHJvcGVybHkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRiKToKKyAgICAgICAgc2VsZi5zdHJlYW0uY2xvc2UoKQorCiAjIyMKIAogY2xhc3MgU3RyZWFtUmVjb2RlcjoKQEAgLTc1MSw2ICs3NzEsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuc3RyZWFtLCBuYW1lKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdGIpOgorICAgICAgICBzZWxmLnN0cmVhbS5jbG9zZSgpCisKICMjIyBTaG9ydGN1dHMKIAogZGVmIG9wZW4oZmlsZW5hbWUsIG1vZGU9J3JiJywgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPSdzdHJpY3QnLCBidWZmZXJpbmc9MSk6CkBAIC04MjQsOSArODUwLDEwIEBACiAgICAgIiIiCiAgICAgaWYgZmlsZV9lbmNvZGluZyBpcyBOb25lOgogICAgICAgICBmaWxlX2VuY29kaW5nID0gZGF0YV9lbmNvZGluZwotICAgIGluZm8gPSBsb29rdXAoZGF0YV9lbmNvZGluZykKLSAgICBzciA9IFN0cmVhbVJlY29kZXIoZmlsZSwgaW5mby5lbmNvZGUsIGluZm8uZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnN0cmVhbXJlYWRlciwgaW5mby5zdHJlYW13cml0ZXIsIGVycm9ycykKKyAgICBkYXRhX2luZm8gPSBsb29rdXAoZGF0YV9lbmNvZGluZykKKyAgICBmaWxlX2luZm8gPSBsb29rdXAoZmlsZV9lbmNvZGluZykKKyAgICBzciA9IFN0cmVhbVJlY29kZXIoZmlsZSwgZGF0YV9pbmZvLmVuY29kZSwgZGF0YV9pbmZvLmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9pbmZvLnN0cmVhbXJlYWRlciwgZmlsZV9pbmZvLnN0cmVhbXdyaXRlciwgZXJyb3JzKQogICAgICMgQWRkIGF0dHJpYnV0ZXMgdG8gc2ltcGxpZnkgaW50cm9zcGVjdGlvbgogICAgIHNyLmRhdGFfZW5jb2RpbmcgPSBkYXRhX2VuY29kaW5nCiAgICAgc3IuZmlsZV9lbmNvZGluZyA9IGZpbGVfZW5jb2RpbmcKZGlmZiAtLWdpdCBhL0xpYi9jb2xvcnN5cy5weSBiL0xpYi9jb2xvcnN5cy5weQppbmRleCAzOWI0YjE2Li44NTE0MTdiIDEwMDY0NAotLS0gYS9MaWIvY29sb3JzeXMucHkKKysrIGIvTGliL2NvbG9yc3lzLnB5CkBAIC0xMTcsNyArMTE3LDggQEAKICAgICBwID0gdiooMS4wIC0gcykKICAgICBxID0gdiooMS4wIC0gcypmKQogICAgIHQgPSB2KigxLjAgLSBzKigxLjAtZikpCi0gICAgaWYgaSU2ID09IDA6IHJldHVybiB2LCB0LCBwCisgICAgaSA9IGklNgorICAgIGlmIGkgPT0gMDogcmV0dXJuIHYsIHQsIHAKICAgICBpZiBpID09IDE6IHJldHVybiBxLCB2LCBwCiAgICAgaWYgaSA9PSAyOiByZXR1cm4gcCwgdiwgdAogICAgIGlmIGkgPT0gMzogcmV0dXJuIHAsIHEsIHYKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlci9weWNvZGVnZW4ucHkgYi9MaWIvY29tcGlsZXIvcHljb2RlZ2VuLnB5CmluZGV4IGIwOGEzMDcuLjM1M2MyYzkgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlci9weWNvZGVnZW4ucHkKKysrIGIvTGliL2NvbXBpbGVyL3B5Y29kZWdlbi5weQpAQCAtNTc3LDEyICs1NzcsMTEgQEAKICAgICBkZWYgdmlzaXRMaXN0Q29tcChzZWxmLCBub2RlKToKICAgICAgICAgc2VsZi5zZXRfbGluZW5vKG5vZGUpCiAgICAgICAgICMgc2V0dXAgbGlzdAotICAgICAgICBhcHBlbmQgPSAiJGFwcGVuZCVkIiAlIHNlbGYuX19saXN0X2NvdW50CisgICAgICAgIHRtcG5hbWUgPSAiJGxpc3QlZCIgJSBzZWxmLl9fbGlzdF9jb3VudAogICAgICAgICBzZWxmLl9fbGlzdF9jb3VudCA9IHNlbGYuX19saXN0X2NvdW50ICsgMQogICAgICAgICBzZWxmLmVtaXQoJ0JVSUxEX0xJU1QnLCAwKQogICAgICAgICBzZWxmLmVtaXQoJ0RVUF9UT1AnKQotICAgICAgICBzZWxmLmVtaXQoJ0xPQURfQVRUUicsICdhcHBlbmQnKQotICAgICAgICBzZWxmLl9pbXBsaWNpdE5hbWVPcCgnU1RPUkUnLCBhcHBlbmQpCisgICAgICAgIHNlbGYuX2ltcGxpY2l0TmFtZU9wKCdTVE9SRScsIHRtcG5hbWUpCiAKICAgICAgICAgc3RhY2sgPSBbXQogICAgICAgICBmb3IgaSwgZm9yXyBpbiB6aXAocmFuZ2UobGVuKG5vZGUucXVhbHMpKSwgbm9kZS5xdWFscyk6CkBAIC01OTQsMTAgKzU5Myw5IEBACiAgICAgICAgICAgICAgICAgc2VsZi52aXNpdChpZl8sIGNvbnQpCiAgICAgICAgICAgICBzdGFjay5pbnNlcnQoMCwgKHN0YXJ0LCBjb250LCBhbmNob3IpKQogCi0gICAgICAgIHNlbGYuX2ltcGxpY2l0TmFtZU9wKCdMT0FEJywgYXBwZW5kKQorICAgICAgICBzZWxmLl9pbXBsaWNpdE5hbWVPcCgnTE9BRCcsIHRtcG5hbWUpCiAgICAgICAgIHNlbGYudmlzaXQobm9kZS5leHByKQotICAgICAgICBzZWxmLmVtaXQoJ0NBTExfRlVOQ1RJT04nLCAxKQotICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQorICAgICAgICBzZWxmLmVtaXQoJ0xJU1RfQVBQRU5EJykKIAogICAgICAgICBmb3Igc3RhcnQsIGNvbnQsIGFuY2hvciBpbiBzdGFjazoKICAgICAgICAgICAgIGlmIGNvbnQ6CkBAIC02MDgsNyArNjA2LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLm5leHRCbG9jayhza2lwX29uZSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9BQlNPTFVURScsIHN0YXJ0KQogICAgICAgICAgICAgc2VsZi5zdGFydEJsb2NrKGFuY2hvcikKLSAgICAgICAgc2VsZi5faW1wbGljaXROYW1lT3AoJ0RFTEVURScsIGFwcGVuZCkKKyAgICAgICAgc2VsZi5faW1wbGljaXROYW1lT3AoJ0RFTEVURScsIHRtcG5hbWUpCiAKICAgICAgICAgc2VsZi5fX2xpc3RfY291bnQgPSBzZWxmLl9fbGlzdF9jb3VudCAtIDEKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy9fX2luaXRfXy5weSBiL0xpYi9jdHlwZXMvX19pbml0X18ucHkKaW5kZXggNzhhMmFiOC4uZWI1ZDk3ZSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CkBAIC00MjcsNiArNDI3LDggQEAKICAgICBjX3NpemVfdCA9IGNfdWludAogZWxpZiBzaXplb2YoY191bG9uZykgPT0gc2l6ZW9mKGNfdm9pZF9wKToKICAgICBjX3NpemVfdCA9IGNfdWxvbmcKK2VsaWYgc2l6ZW9mKGNfdWxvbmdsb25nKSA9PSBzaXplb2YoY192b2lkX3ApOgorICAgIGNfc2l6ZV90ID0gY191bG9uZ2xvbmcKIAogIyBmdW5jdGlvbnMKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CmluZGV4IDJhZTU0MDUuLjJiNzQ1YzIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKQEAgLTM3LDcgKzM3LDggQEAKIAogZGVmIGZpbmRfcGFja2FnZV9tb2R1bGVzKHBhY2thZ2UsIG1hc2spOgogICAgIGltcG9ydCBmbm1hdGNoCi0gICAgaWYgaGFzYXR0cihwYWNrYWdlLCAiX19sb2FkZXJfXyIpOgorICAgIGlmIChoYXNhdHRyKHBhY2thZ2UsICJfX2xvYWRlcl9fIikgYW5kCisgICAgICAgICAgICBoYXNhdHRyKHBhY2thZ2UuX19sb2FkZXJfXywgJ19maWxlcycpKToKICAgICAgICAgcGF0aCA9IHBhY2thZ2UuX19uYW1lX18ucmVwbGFjZSgiLiIsIG9zLnBhdGguc2VwKQogICAgICAgICBtYXNrID0gb3MucGF0aC5qb2luKHBhdGgsIG1hc2spCiAgICAgICAgIGZvciBmbm0gaW4gcGFja2FnZS5fX2xvYWRlcl9fLl9maWxlcy5pdGVya2V5cygpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CmluZGV4IDkyYzQ2NjkuLjI4NjdjYmYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkKQEAgLTIxNSw1ICsyMTUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfdWJ5dGUsIDQpXQogICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2J5dGUpKQogCisgICAgZGVmIHRlc3RfYW5vbl9iaXRmaWVsZHMoc2VsZik6CisgICAgICAgICMgYW5vbnltb3VzIGJpdC1maWVsZHMgZ2F2ZSBhIHN0cmFuZ2UgZXJyb3IgbWVzc2FnZQorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2J5dGUsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY191Ynl0ZSwgNCldCisgICAgICAgIGNsYXNzIFkoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9hbm9ueW1vdXNfID0gWyJfIl0KKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiXyIsIFgpXQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FsbGJhY2tzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FsbGJhY2tzLnB5CmluZGV4IDlkOTZhNTQuLmY0N2ZjMzcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKQEAgLTEwMSw2ICsxMDEsMTkgQEAKICAgICAgICAgICAgIGFmdGVyID0gZ3JjKG8pCiAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoYWZ0ZXIsIG8pLCAoYmVmb3JlLCBvKSkKIAorICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX3Jlc3R5cGVfMShzZWxmKToKKyAgICAgICAgIyBPbmx5ICJmdW5kYW1lbnRhbCIgcmVzdWx0IHR5cGVzIGFyZSBzdXBwb3J0ZWQgZm9yIGNhbGxiYWNrCisgICAgICAgICMgZnVuY3Rpb25zLCB0aGUgdHlwZSBtdXN0IGhhdmUgYSBub24tTlVMTCBzdGdkaWN0LT5zZXRmdW5jLgorICAgICAgICAjIFBPSU5URVIoY19kb3VibGUpLCBmb3IgZXhhbXBsZSwgaXMgbm90IHN1cHBvcnRlZC4KKworICAgICAgICBwcm90b3R5cGUgPSBzZWxmLmZ1bmN0eXBlLmltX2Z1bmMoUE9JTlRFUihjX2RvdWJsZSkpCisgICAgICAgICMgVGhlIHR5cGUgaXMgY2hlY2tlZCB3aGVuIHRoZSBwcm90b3R5cGUgaXMgY2FsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJvdG90eXBlLCBsYW1iZGE6IE5vbmUpCisKKyAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9yZXN0eXBlXzIoc2VsZik6CisgICAgICAgIHByb3RvdHlwZSA9IHNlbGYuZnVuY3R5cGUuaW1fZnVuYyhvYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJvdG90eXBlLCBsYW1iZGE6IE5vbmUpCisKIHRyeToKICAgICBXSU5GVU5DVFlQRQogZXhjZXB0IE5hbWVFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5CmluZGV4IDA5ZTkyOGYuLjczNzFiMGYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FzdC5weQpAQCAtNTcsNSArNTcsMjEgQEAKICAgICAgICAgY19pbnQoKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzo0XSwgWzEsIDIsIDk2LCA0XSkKIAorICAgIGRlZiB0ZXN0X2NoYXJfcChzZWxmKToKKyAgICAgICAgIyBUaGlzIGRpZG4ndCB3b3JrOiBiYWQgYXJndW1lbnQgdG8gaW50ZXJuYWwgZnVuY3Rpb24KKyAgICAgICAgcyA9IGNfY2hhcl9wKCJoaWhvIikKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY19jaGFyX3ApLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlobyIpCisKKyAgICB0cnk6CisgICAgICAgIGNfd2NoYXJfcAorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBkZWYgdGVzdF93Y2hhcl9wKHNlbGYpOgorICAgICAgICAgICAgcyA9IGNfd2NoYXJfcCgiaGlobyIpCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjYXN0KGNhc3QocywgY192b2lkX3ApLCBjX3djaGFyX3ApLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpaG8iKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKaW5kZXggOGE0NTMxZC4uNjEzMTYzZCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CkBAIC0zODEsNSArMzgxLDM1IEBACiAgICAgICAgIHMucCA9IE5vbmUKICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy54LCAxMjM0NTY3OCkKIAorY2xhc3MgVGVzdFJlY3Vyc2l2ZVN0cnVjdHVyZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29udGFpbnNfaXRzZWxmKHNlbGYpOgorICAgICAgICBjbGFzcyBSZWN1cnNpdmUoU3RydWN0dXJlKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBSZWN1cnNpdmUuX2ZpZWxkc18gPSBbKCJuZXh0IiwgUmVjdXJzaXZlKV0KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBkZXRhaWxzOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJTdHJ1Y3R1cmUgb3IgdW5pb24gY2Fubm90IGNvbnRhaW4gaXRzZWxmIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihkZXRhaWxzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU3RydWN0dXJlIG9yIHVuaW9uIGNhbm5vdCBjb250YWluIGl0c2VsZiIpCisKKworICAgIGRlZiB0ZXN0X3ZpY2VfdmVyc2Eoc2VsZik6CisgICAgICAgIGNsYXNzIEZpcnN0KFN0cnVjdHVyZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFNlY29uZChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEZpcnN0Ll9maWVsZHNfID0gWygic2Vjb25kIiwgU2Vjb25kKV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBTZWNvbmQuX2ZpZWxkc18gPSBbKCJmaXJzdCIsIEZpcnN0KV0KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBkZXRhaWxzOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJfZmllbGRzXyBpcyBmaW5hbCIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZGV0YWlscykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQppbmRleCBkYjUzMGQzLi4xMGRlYWNhIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQpAQCAtNiw3ICs2LDggQEAKIAogaW1wb3J0IF9jdHlwZXNfdGVzdAogCi1pZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKK2lmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBzaXplb2YoY192b2lkX3ApID09IHNpemVvZihjX2ludCk6CisgICAgIyBPbmx5IHdpbmRvd3MgMzItYml0IGhhcyBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucy4KIAogICAgIGNsYXNzIFdpbmRvd3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGRlZiB0ZXN0X2NhbGxjb252XzEoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvZGVjaW1hbC5weSBiL0xpYi9kZWNpbWFsLnB5CmluZGV4IDJmMmE2MTcuLjg2NDU1ZjMgMTAwNjQ0Ci0tLSBhL0xpYi9kZWNpbWFsLnB5CisrKyBiL0xpYi9kZWNpbWFsLnB5CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAnUk9VTkRfRkxPT1InLCAnUk9VTkRfVVAnLCAnUk9VTkRfSEFMRl9ET1dOJywKIAogICAgICMgRnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgY29udGV4dHMKLSAgICAnc2V0Y29udGV4dCcsICdnZXRjb250ZXh0JworICAgICdzZXRjb250ZXh0JywgJ2dldGNvbnRleHQnLCAnbG9jYWxjb250ZXh0JwogXQogCiBpbXBvcnQgY29weSBhcyBfY29weQpAQCAtNDU4LDYgKzQ1OCw0OSBAQAogCiAgICAgZGVsIHRocmVhZGluZywgbG9jYWwgICAgICAgICMgRG9uJ3QgY29udGFtaW5hdGUgdGhlIG5hbWVzcGFjZQogCitkZWYgbG9jYWxjb250ZXh0KGN0eD1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgZm9yIGEgY29weSBvZiB0aGUgc3VwcGxpZWQgY29udGV4dAorCisgICAgVXNlcyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBpZiBubyBjb250ZXh0IGlzIHNwZWNpZmllZAorICAgIFRoZSByZXR1cm5lZCBjb250ZXh0IG1hbmFnZXIgY3JlYXRlcyBhIGxvY2FsIGRlY2ltYWwgY29udGV4dAorICAgIGluIGEgd2l0aCBzdGF0ZW1lbnQ6CisgICAgICAgIGRlZiBzaW4oeCk6CisgICAgICAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQoKSBhcyBjdHg6CisgICAgICAgICAgICAgICAgIGN0eC5wcmVjICs9IDIKKyAgICAgICAgICAgICAgICAgIyBSZXN0IG9mIHNpbiBjYWxjdWxhdGlvbiBhbGdvcml0aG0KKyAgICAgICAgICAgICAgICAgIyB1c2VzIGEgcHJlY2lzaW9uIDIgZ3JlYXRlciB0aGFuIG5vcm1hbAorICAgICAgICAgICAgIHJldHVybiArcyAjIENvbnZlcnQgcmVzdWx0IHRvIG5vcm1hbCBwcmVjaXNpb24KKworICAgICAgICAgZGVmIHNpbih4KToKKyAgICAgICAgICAgICB3aXRoIGxvY2FsY29udGV4dChFeHRlbmRlZENvbnRleHQpOgorICAgICAgICAgICAgICAgICAjIFJlc3Qgb2Ygc2luIGNhbGN1bGF0aW9uIGFsZ29yaXRobQorICAgICAgICAgICAgICAgICAjIHVzZXMgdGhlIEV4dGVuZGVkIENvbnRleHQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgIyBHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBTcGVjaWZpY2F0aW9uCisgICAgICAgICAgICAgcmV0dXJuICtzICMgQ29udmVydCByZXN1bHQgdG8gbm9ybWFsIGNvbnRleHQKKworICAgICIiIgorICAgICMgVGhlIHN0cmluZyBiZWxvdyBjYW4ndCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jc3RyaW5nIHVudGlsIFB5dGhvbiAyLjYKKyAgICAjIGFzIHRoZSBkb2N0ZXN0IG1vZHVsZSBkb2Vzbid0IHVuZGVyc3RhbmQgX19mdXR1cmVfXyBzdGF0ZW1lbnRzCisgICAgIiIiCisgICAgPj4+IGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKyAgICA+Pj4gcHJpbnQgZ2V0Y29udGV4dCgpLnByZWMKKyAgICAyOAorICAgID4+PiB3aXRoIGxvY2FsY29udGV4dCgpOgorICAgIC4uLiAgICAgY3R4ID0gZ2V0Y29udGV4dCgpCisgICAgLi4uICAgICBjdHgucHJlYygpICs9IDIKKyAgICAuLi4gICAgIHByaW50IGN0eC5wcmVjCisgICAgLi4uCisgICAgMzAKKyAgICA+Pj4gd2l0aCBsb2NhbGNvbnRleHQoRXh0ZW5kZWRDb250ZXh0KToKKyAgICAuLi4gICAgIHByaW50IGdldGNvbnRleHQoKS5wcmVjCisgICAgLi4uCisgICAgOQorICAgID4+PiBwcmludCBnZXRjb250ZXh0KCkucHJlYworICAgIDI4CisgICAgIiIiCisgICAgaWYgY3R4IGlzIE5vbmU6IGN0eCA9IGdldGNvbnRleHQoKQorICAgIHJldHVybiBfQ29udGV4dE1hbmFnZXIoY3R4KQorCiAKICMjIyMjIERlY2ltYWwgY2xhc3MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yMTkyLDIzICsyMjM1LDE0IEBACiAKIGRlbCBuYW1lLCB2YWwsIGdsb2JhbG5hbWUsIHJvdW5kaW5nX2Z1bmN0aW9ucwogCi1jbGFzcyBDb250ZXh0TWFuYWdlcihvYmplY3QpOgotICAgICIiIkhlbHBlciBjbGFzcyB0byBzaW1wbGlmeSBDb250ZXh0IG1hbmFnZW1lbnQuCitjbGFzcyBfQ29udGV4dE1hbmFnZXIob2JqZWN0KToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgY2xhc3MgdG8gc3VwcG9ydCBsb2NhbGNvbnRleHQoKS4KIAotICAgIFNhbXBsZSB1c2FnZToKLQotICAgIHdpdGggZGVjaW1hbC5FeHRlbmRlZENvbnRleHQ6Ci0gICAgICAgIHMgPSAuLi4KLSAgICByZXR1cm4gK3MgIyBDb252ZXJ0IHJlc3VsdCB0byBub3JtYWwgcHJlY2lzaW9uCi0KLSAgICB3aXRoIGRlY2ltYWwuZ2V0Y29udGV4dCgpIGFzIGN0eDoKLSAgICAgICAgY3R4LnByZWMgKz0gMgotICAgICAgICBzID0gLi4uCi0gICAgcmV0dXJuICtzCi0KKyAgICAgIFNldHMgYSBjb3B5IG9mIHRoZSBzdXBwbGllZCBjb250ZXh0IGluIF9fZW50ZXJfXygpIGFuZCByZXN0b3JlcworICAgICAgdGhlIHByZXZpb3VzIGRlY2ltYWwgY29udGV4dCBpbiBfX2V4aXRfXygpCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld19jb250ZXh0KToKLSAgICAgICAgc2VsZi5uZXdfY29udGV4dCA9IG5ld19jb250ZXh0CisgICAgICAgIHNlbGYubmV3X2NvbnRleHQgPSBuZXdfY29udGV4dC5jb3B5KCkKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVkX2NvbnRleHQgPSBnZXRjb250ZXh0KCkKICAgICAgICAgc2V0Y29udGV4dChzZWxmLm5ld19jb250ZXh0KQpAQCAtMjI2Nyw5ICsyMzAxLDYgQEAKICAgICAgICAgcy5hcHBlbmQoJ3RyYXBzPVsnICsgJywgJy5qb2luKFt0Ll9fbmFtZV9fIGZvciB0LCB2IGluIHNlbGYudHJhcHMuaXRlbXMoKSBpZiB2XSkgKyAnXScpCiAgICAgICAgIHJldHVybiAnLCAnLmpvaW4ocykgKyAnKScKIAotICAgIGRlZiBnZXRfbWFuYWdlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIENvbnRleHRNYW5hZ2VyKHNlbGYuY29weSgpKQotCiAgICAgZGVmIGNsZWFyX2ZsYWdzKHNlbGYpOgogICAgICAgICAiIiJSZXNldCBhbGwgZmxhZ3MgdG8gemVybyIiIgogICAgICAgICBmb3IgZmxhZyBpbiBzZWxmLmZsYWdzOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X3JwbS5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9ycG0ucHkKaW5kZXggNWIwOTk2NS4uNmYwZTBkOCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X3JwbS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfcnBtLnB5CkBAIC0zMzcsMzcgKzMzNyw0NyBAQAogICAgICAgICBpZiBub3Qgc2VsZi5rZWVwX3RlbXA6CiAgICAgICAgICAgICBycG1fY21kLmFwcGVuZCgnLS1jbGVhbicpCiAgICAgICAgIHJwbV9jbWQuYXBwZW5kKHNwZWNfcGF0aCkKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGJpbmFyeSBycG0gbmFtZXMgdGhhdCBzaG91bGQgYmUgYnVpbHQgb3V0IG9mIHRoaXMgc3BlYworICAgICAgICAjIGZpbGUKKyAgICAgICAgIyBOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBtYXkgbm90IGJlIHJlYWxseSBidWlsdCAoaWYgdGhlIGZpbGUKKyAgICAgICAgIyBsaXN0IGlzIGVtcHR5KQorICAgICAgICBudnJfc3RyaW5nID0gIiV7bmFtZX0tJXt2ZXJzaW9ufS0le3JlbGVhc2V9IgorICAgICAgICBzcmNfcnBtID0gbnZyX3N0cmluZyArICIuc3JjLnJwbSIKKyAgICAgICAgbm9uX3NyY19ycG0gPSAiJXthcmNofS8iICsgbnZyX3N0cmluZyArICIuJXthcmNofS5ycG0iCisgICAgICAgIHFfY21kID0gciJycG0gLXEgLS1xZiAnJXMgJXNcbicgLS1zcGVjZmlsZSAnJXMnIiAlICgKKyAgICAgICAgICAgIHNyY19ycG0sIG5vbl9zcmNfcnBtLCBzcGVjX3BhdGgpCisKKyAgICAgICAgb3V0ID0gb3MucG9wZW4ocV9jbWQpCisgICAgICAgIGJpbmFyeV9ycG1zID0gW10KKyAgICAgICAgc291cmNlX3JwbSA9IE5vbmUKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGxpbmUgPSBvdXQucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGwgPSBzdHJpbmcuc3BsaXQoc3RyaW5nLnN0cmlwKGxpbmUpKQorICAgICAgICAgICAgYXNzZXJ0KGxlbihsKSA9PSAyKQorICAgICAgICAgICAgYmluYXJ5X3JwbXMuYXBwZW5kKGxbMV0pCisgICAgICAgICAgICAjIFRoZSBzb3VyY2UgcnBtIGlzIG5hbWVkIGFmdGVyIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgc3BlYyBmaWxlCisgICAgICAgICAgICBpZiBzb3VyY2VfcnBtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc291cmNlX3JwbSA9IGxbMF0KKworICAgICAgICBzdGF0dXMgPSBvdXQuY2xvc2UoKQorICAgICAgICBpZiBzdGF0dXM6CisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IoIkZhaWxlZCB0byBleGVjdXRlOiAlcyIgJSByZXByKHFfY21kKSkKKwogICAgICAgICBzZWxmLnNwYXduKHJwbV9jbWQpCiAKLSAgICAgICAgIyBYWFggdGhpcyBpcyBhIG5hc3R5IGhhY2sgLS0gd2UgcmVhbGx5IHNob3VsZCBoYXZlIGEgcHJvcGVyIHdheSB0bwotICAgICAgICAjIGZpbmQgb3V0IHRoZSBuYW1lcyBvZiB0aGUgUlBNIGZpbGVzIGNyZWF0ZWQ7IGFsc28sIHRoaXMgYXNzdW1lcwotICAgICAgICAjIHRoYXQgUlBNIGNyZWF0ZXMgZXhhY3RseSBvbmUgc291cmNlIGFuZCBvbmUgYmluYXJ5IFJQTS4KICAgICAgICAgaWYgbm90IHNlbGYuZHJ5X3J1bjoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJpbmFyeV9vbmx5OgotICAgICAgICAgICAgICAgIHNycG1zID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihycG1fZGlyWydTUlBNUyddLCAiKi5ycG0iKSkKLSAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKHNycG1zKSA9PSAxLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIG51bWJlciBvZiBTUlBNIGZpbGVzIGZvdW5kOiAlcyIgJSBzcnBtcwotICAgICAgICAgICAgICAgIGRpc3RfZmlsZSA9ICgnYmRpc3RfcnBtJywgJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Rpc3RfcGF0aChzcnBtc1swXSkpCi0gICAgICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24uZGlzdF9maWxlcy5hcHBlbmQoZGlzdF9maWxlKQotICAgICAgICAgICAgICAgIHNlbGYubW92ZV9maWxlKHNycG1zWzBdLCBzZWxmLmRpc3RfZGlyKQorICAgICAgICAgICAgICAgIHNycG0gPSBvcy5wYXRoLmpvaW4ocnBtX2RpclsnU1JQTVMnXSwgc291cmNlX3JwbSkKKyAgICAgICAgICAgICAgICBhc3NlcnQob3MucGF0aC5leGlzdHMoc3JwbSkpCisgICAgICAgICAgICAgICAgc2VsZi5tb3ZlX2ZpbGUoc3JwbSwgc2VsZi5kaXN0X2RpcikKIAogICAgICAgICAgICAgaWYgbm90IHNlbGYuc291cmNlX29ubHk6Ci0gICAgICAgICAgICAgICAgcnBtcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocnBtX2RpclsnUlBNUyddLCAiKi8qLnJwbSIpKQotICAgICAgICAgICAgICAgIGRlYnVnaW5mbyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocnBtX2RpclsnUlBNUyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiovKmRlYnVnaW5mbyoucnBtIikpCi0gICAgICAgICAgICAgICAgaWYgZGVidWdpbmZvOgotICAgICAgICAgICAgICAgICAgICBycG1zLnJlbW92ZShkZWJ1Z2luZm9bMF0pCi0gICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihycG1zKSA9PSAxLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIG51bWJlciBvZiBSUE0gZmlsZXMgZm91bmQ6ICVzIiAlIHJwbXMKLSAgICAgICAgICAgICAgICBkaXN0X2ZpbGUgPSAoJ2JkaXN0X3JwbScsIGdldF9weXRob25fdmVyc2lvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaXN0X3BhdGgocnBtc1swXSkpCi0gICAgICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24uZGlzdF9maWxlcy5hcHBlbmQoZGlzdF9maWxlKQotICAgICAgICAgICAgICAgIHNlbGYubW92ZV9maWxlKHJwbXNbMF0sIHNlbGYuZGlzdF9kaXIpCi0gICAgICAgICAgICAgICAgaWYgZGVidWdpbmZvOgotICAgICAgICAgICAgICAgICAgICBkaXN0X2ZpbGUgPSAoJ2JkaXN0X3JwbScsIGdldF9weXRob25fdmVyc2lvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGlzdF9wYXRoKGRlYnVnaW5mb1swXSkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYubW92ZV9maWxlKGRlYnVnaW5mb1swXSwgc2VsZi5kaXN0X2RpcikKKyAgICAgICAgICAgICAgICBmb3IgcnBtIGluIGJpbmFyeV9ycG1zOgorICAgICAgICAgICAgICAgICAgICBycG0gPSBvcy5wYXRoLmpvaW4ocnBtX2RpclsnUlBNUyddLCBycG0pCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJwbSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vdmVfZmlsZShycG0sIHNlbGYuZGlzdF9kaXIpCiAgICAgIyBydW4oKQogCiAgICAgZGVmIF9kaXN0X3BhdGgoc2VsZiwgcGF0aCk6CkBAIC0zODEsNiArMzkxLDcgQEAKICAgICAgICAgc3BlY19maWxlID0gWwogICAgICAgICAgICAgJyVkZWZpbmUgbmFtZSAnICsgc2VsZi5kaXN0cmlidXRpb24uZ2V0X25hbWUoKSwKICAgICAgICAgICAgICclZGVmaW5lIHZlcnNpb24gJyArIHNlbGYuZGlzdHJpYnV0aW9uLmdldF92ZXJzaW9uKCkucmVwbGFjZSgnLScsJ18nKSwKKyAgICAgICAgICAgICclZGVmaW5lIHVubWFuZ2xlZF92ZXJzaW9uICcgKyBzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfdmVyc2lvbigpLAogICAgICAgICAgICAgJyVkZWZpbmUgcmVsZWFzZSAnICsgc2VsZi5yZWxlYXNlLnJlcGxhY2UoJy0nLCdfJyksCiAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICdTdW1tYXJ5OiAnICsgc2VsZi5kaXN0cmlidXRpb24uZ2V0X2Rlc2NyaXB0aW9uKCksCkBAIC00MDIsOSArNDEzLDkgQEAKICAgICAgICAgIyBidXQgb25seSBhZnRlciBpdCBoYXMgcnVuOiBhbmQgd2UgY3JlYXRlIHRoZSBzcGVjIGZpbGUgYmVmb3JlCiAgICAgICAgICMgcnVubmluZyAic2Rpc3QiLCBpbiBjYXNlIG9mIC0tc3BlYy1vbmx5LgogICAgICAgICBpZiBzZWxmLnVzZV9iemlwMjoKLSAgICAgICAgICAgIHNwZWNfZmlsZS5hcHBlbmQoJ1NvdXJjZTA6ICV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuYnoyJykKKyAgICAgICAgICAgIHNwZWNfZmlsZS5hcHBlbmQoJ1NvdXJjZTA6ICV7bmFtZX0tJXt1bm1hbmdsZWRfdmVyc2lvbn0udGFyLmJ6MicpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzcGVjX2ZpbGUuYXBwZW5kKCdTb3VyY2UwOiAle25hbWV9LSV7dmVyc2lvbn0udGFyLmd6JykKKyAgICAgICAgICAgIHNwZWNfZmlsZS5hcHBlbmQoJ1NvdXJjZTA6ICV7bmFtZX0tJXt1bm1hbmdsZWRfdmVyc2lvbn0udGFyLmd6JykKIAogICAgICAgICBzcGVjX2ZpbGUuZXh0ZW5kKFsKICAgICAgICAgICAgICdMaWNlbnNlOiAnICsgc2VsZi5kaXN0cmlidXRpb24uZ2V0X2xpY2Vuc2UoKSwKQEAgLTQ3OSw3ICs0OTAsNyBAQAogICAgICAgICAjIGFyZSBqdXN0IHRleHQgdGhhdCB3ZSBkcm9wIGluIGFzLWlzLiAgSG1tbS4KIAogICAgICAgICBzY3JpcHRfb3B0aW9ucyA9IFsKLSAgICAgICAgICAgICgncHJlcCcsICdwcmVwX3NjcmlwdCcsICIlc2V0dXAiKSwKKyAgICAgICAgICAgICgncHJlcCcsICdwcmVwX3NjcmlwdCcsICIlc2V0dXAgLW4gJXtuYW1lfS0le3VubWFuZ2xlZF92ZXJzaW9ufSIpLAogICAgICAgICAgICAgKCdidWlsZCcsICdidWlsZF9zY3JpcHQnLCBkZWZfYnVpbGQpLAogICAgICAgICAgICAgKCdpbnN0YWxsJywgJ2luc3RhbGxfc2NyaXB0JywKICAgICAgICAgICAgICAoIiVzIGluc3RhbGwgIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKaW5kZXggY2Q2NzU0NC4uZjc5ZWVlMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgIyBmb3IgZXh0ZW5zaW9ucyB1bmRlciBDeWd3aW4gYW5kIEF0aGVPUyBQeXRob24ncyBsaWJyYXJ5IGRpcmVjdG9yeSBtdXN0IGJlCiAgICAgICAgICMgYXBwZW5kZWQgdG8gbGlicmFyeV9kaXJzCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gJ2N5Z3dpbicgb3Igc3lzLnBsYXRmb3JtWzo2XSA9PSAnYXRoZW9zJyBvciBcCi0gICAgICAgICAgICAgICAoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4JykgYW5kCisgICAgICAgICAgICAgICAoKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdnbnUnKSkgYW5kCiAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQeV9FTkFCTEVfU0hBUkVEJykpOgogICAgICAgICAgICAgaWYgc3RyaW5nLmZpbmQoc3lzLmV4ZWN1dGFibGUsIHN5cy5leGVjX3ByZWZpeCkgIT0gLTE6CiAgICAgICAgICAgICAgICAgIyBidWlsZGluZyB0aGlyZCBwYXJ0eSBleHRlbnNpb25zCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9lZ2dfaW5mby5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2VnZ19pbmZvLnB5CmluZGV4IGMzMWFjMjkuLmM4ODgwMzEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2VnZ19pbmZvLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2VnZ19pbmZvLnB5CkBAIC0zNSw2ICszNSw5IEBACiAgICAgICAgICAgICBkaXJfdXRpbC5yZW1vdmVfdHJlZSh0YXJnZXQsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQogICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHRhcmdldCk6CiAgICAgICAgICAgICBzZWxmLmV4ZWN1dGUob3MudW5saW5rLChzZWxmLnRhcmdldCwpLCJSZW1vdmluZyAiK3RhcmdldCkKKyAgICAgICAgZWxpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLmluc3RhbGxfZGlyKToKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0ZShvcy5tYWtlZGlycywgKHNlbGYuaW5zdGFsbF9kaXIsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ3JlYXRpbmcgIitzZWxmLmluc3RhbGxfZGlyKQogICAgICAgICBsb2cuaW5mbygiV3JpdGluZyAlcyIsIHRhcmdldCkKICAgICAgICAgaWYgbm90IHNlbGYuZHJ5X3J1bjoKICAgICAgICAgICAgIGYgPSBvcGVuKHRhcmdldCwgJ3cnKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3JlZ2lzdGVyLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3JlZ2lzdGVyLnB5CmluZGV4IGY4OTEyNjIuLjMxNzc0NzYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9yZWdpc3Rlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvcmVnaXN0ZXIucHkKQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICBib2R5ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkYXRhLml0ZW1zKCk6CiAgICAgICAgICAgICAjIGhhbmRsZSBtdWx0aXBsZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBuYW1lCi0gICAgICAgICAgICBpZiB0eXBlKHZhbHVlKSAhPSB0eXBlKFtdKToKKyAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpIG5vdCBpbiAodHlwZShbXSksIHR5cGUoICgpICkpOgogICAgICAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlXQogICAgICAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlOgogICAgICAgICAgICAgICAgIHZhbHVlID0gdW5pY29kZSh2YWx1ZSkuZW5jb2RlKCJ1dGYtOCIpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvd2luaW5zdC04LmV4ZSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC93aW5pbnN0LTguZXhlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MDNiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvd2luaW5zdC04LmV4ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CmluZGV4IDk2OTIzYmQuLjg5ODlkOTIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CkBAIC01MDksNyArNTA5LDEwIEBACiAgICAgICAgICAgICAgICAgIyBhcmUgaW4gQ0ZMQUdTIG9yIExERkxBR1MgYW5kIHJlbW92ZSB0aGVtIGlmIHRoZXkgYXJlLgogICAgICAgICAgICAgICAgICMgVGhpcyBpcyBuZWVkZWQgd2hlbiBidWlsZGluZyBleHRlbnNpb25zIG9uIGEgMTAuMyBzeXN0ZW0KICAgICAgICAgICAgICAgICAjIHVzaW5nIGEgdW5pdmVyc2FsIGJ1aWxkIG9mIHB5dGhvbi4KLSAgICAgICAgICAgICAgICBmb3Iga2V5IGluICgnTERGTEFHUycsICdCQVNFQ0ZMQUdTJyk6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiAoJ0xERkxBR1MnLCAnQkFTRUNGTEFHUycsCisgICAgICAgICAgICAgICAgICAgICAgICAjIGEgbnVtYmVyIG9mIGRlcml2ZWQgdmFyaWFibGVzLiBUaGVzZSBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHBhdGNoZWQgdXAgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICdDRkxBR1MnLCAnUFlfQ0ZMQUdTJywgJ0JMRFNIQVJFRCcpOgogICAgICAgICAgICAgICAgICAgICBmbGFncyA9IF9jb25maWdfdmFyc1trZXldCiAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gcmUuc3ViKCctYXJjaFxzK1x3K1xzJywgJyAnLCBmbGFncykKICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSByZS5zdWIoJy1pc3lzcm9vdCBbXiBcdF0qJywgJyAnLCBmbGFncykKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQppbmRleCA2Y2QxNGY3Li43NWU4YTUzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CkBAIC04Miw2ICs4MiwyMiBAQAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorICAgICMgQ2hlY2sgaWYgdGhlIFNESyB0aGF0IGlzIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIGFjdHVhbGx5IGV4aXN0cywKKyAgICAjIHRoZSB1bml2ZXJzYWwgYnVpbGQgcmVxdWlyZXMgdGhlIHVzYWdlIG9mIGEgdW5pdmVyc2FsIFNESyBhbmQgbm90IGFsbAorICAgICMgdXNlcnMgaGF2ZSB0aGF0IGluc3RhbGxlZCBieSBkZWZhdWx0LgorICAgIHN5c3Jvb3QgPSBOb25lCisgICAgaWYgJy1pc3lzcm9vdCcgaW4gY2NfYXJnczoKKyAgICAgICAgaWR4ID0gY2NfYXJncy5pbmRleCgnLWlzeXNyb290JykKKyAgICAgICAgc3lzcm9vdCA9IGNjX2FyZ3NbaWR4KzFdCisgICAgZWxpZiAnLWlzeXNyb290JyBpbiBjb21waWxlcl9zbzoKKyAgICAgICAgaWR4ID0gY29tcGlsZXJfc28uaW5kZXgoJy1pc3lzcm9vdCcpCisgICAgICAgIHN5c3Jvb3QgPSBjb21waWxlcl9zb1tpZHgrMV0KKworICAgIGlmIHN5c3Jvb3QgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHN5c3Jvb3QpOgorICAgICAgICBsb2cud2FybigiQ29tcGlsaW5nIHdpdGggYW4gU0RLIHRoYXQgZG9lc24ndCBzZWVtIHRvIGV4aXN0OiAlcyIsCisgICAgICAgICAgICAgICAgc3lzcm9vdCkKKyAgICAgICAgbG9nLndhcm4oIlBsZWFzZSBjaGVjayB5b3VyIFhjb2RlIGluc3RhbGxhdGlvbiIpCisKICAgICByZXR1cm4gY29tcGlsZXJfc28KIAogY2xhc3MgVW5peENDb21waWxlcihDQ29tcGlsZXIpOgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3V0aWxzLnB5IGIvTGliL2VtYWlsL3V0aWxzLnB5CmluZGV4IDI2ZWJiMGUuLmVlOTUyZDMgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC91dGlscy5weQorKysgYi9MaWIvZW1haWwvdXRpbHMucHkKQEAgLTIzNSwxMCArMjM1LDYgQEAKICAgICBwYXJ0cyA9IHMuc3BsaXQoVElDSywgMikKICAgICBpZiBsZW4ocGFydHMpIDw9IDI6CiAgICAgICAgIHJldHVybiBOb25lLCBOb25lLCBzCi0gICAgaWYgbGVuKHBhcnRzKSA+IDM6Ci0gICAgICAgIGNoYXJzZXQsIGxhbmd1YWdlID0gcGFydHNbOjJdCi0gICAgICAgIHMgPSBUSUNLLmpvaW4ocGFydHNbMjpdKQotICAgICAgICByZXR1cm4gY2hhcnNldCwgbGFuZ3VhZ2UsIHMKICAgICByZXR1cm4gcGFydHMKIAogCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL19faW5pdF9fLnB5IGIvTGliL2VuY29kaW5ncy9fX2luaXRfXy5weQppbmRleCBiMGNhMzY0Li5mMWU3ZWNjIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL19faW5pdF9fLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvX19pbml0X18ucHkKQEAgLTI4LDcgKzI4LDcgQEAKIAogIiIiIyIKIAotaW1wb3J0IGNvZGVjcywgdHlwZXMKK2ltcG9ydCBjb2RlY3MKIGZyb20gLiBpbXBvcnQgYWxpYXNlcwogCiBfY2FjaGUgPSB7fQpAQCAtNjAsNyArNjAsNyBAQAogICAgICIiIgogICAgICMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gOC1iaXQgc3RyaW5nLCBiZWNhdXNlIC50cmFuc2xhdGUoKSB3b3JrcwogICAgICMgZGlmZmVyZW50bHkgZm9yIFVuaWNvZGUgc3RyaW5ncy4KLSAgICBpZiB0eXBlKGVuY29kaW5nKSBpcyB0eXBlcy5Vbmljb2RlVHlwZToKKyAgICBpZiBpc2luc3RhbmNlKGVuY29kaW5nLCB1bmljb2RlKToKICAgICAgICAgIyBOb3RlIHRoYXQgLmVuY29kZSgnbGF0aW4tMScpIGRvZXMgKm5vdCogdXNlIHRoZSBjb2RlYwogICAgICAgICAjIHJlZ2lzdHJ5LCBzbyB0aGlzIGNhbGwgZG9lc24ndCByZWN1cnNlLiAoU2VlIHVuaWNvZGVvYmplY3QuYwogICAgICAgICAjIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoKSBmb3IgZGV0YWlscykKQEAgLTkwLDcgKzkwLDcgQEAKICAgICBlbHNlOgogICAgICAgICBtb2RuYW1lcyA9IFtub3JtX2VuY29kaW5nXQogICAgIGZvciBtb2RuYW1lIGluIG1vZG5hbWVzOgotICAgICAgICBpZiBub3QgbW9kbmFtZToKKyAgICAgICAgaWYgbm90IG1vZG5hbWUgb3IgJy4nIGluIG1vZG5hbWU6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKCdlbmNvZGluZ3MuJyArIG1vZG5hbWUsCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5CmluZGV4IDgxZTg0YjYuLjA1NGIzNmIgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5CkBAIC01MiwxNCArNTIsMzUgQEAKICAgICAgICAgcmV0dXJuIGJ6Ml9kZWNvZGUoaW5wdXQsIGVycm9ycykKIAogY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICBhc3NlcnQgZXJyb3JzID09ICdzdHJpY3QnCisgICAgICAgIHNlbGYuZXJyb3JzID0gZXJyb3JzCisgICAgICAgIHNlbGYuY29tcHJlc3NvYmogPSBiejIuQloyQ29tcHJlc3NvcigpCisKICAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6Ci0gICAgICAgIGFzc2VydCBzZWxmLmVycm9ycyA9PSAnc3RyaWN0JwotICAgICAgICByZXR1cm4gYnoyLmNvbXByZXNzKGlucHV0KQorICAgICAgICBpZiBmaW5hbDoKKyAgICAgICAgICAgIGMgPSBzZWxmLmNvbXByZXNzb2JqLmNvbXByZXNzKGlucHV0KQorICAgICAgICAgICAgcmV0dXJuIGMgKyBzZWxmLmNvbXByZXNzb2JqLmZsdXNoKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbXByZXNzb2JqLmNvbXByZXNzKGlucHV0KQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXByZXNzb2JqID0gYnoyLkJaMkNvbXByZXNzb3IoKQogCiBjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5kZWNvbXByZXNzb2JqID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCisKICAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6Ci0gICAgICAgIGFzc2VydCBzZWxmLmVycm9ycyA9PSAnc3RyaWN0JwotICAgICAgICByZXR1cm4gYnoyLmRlY29tcHJlc3MoaW5wdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY29tcHJlc3NvYmouZGVjb21wcmVzcyhpbnB1dCkKKyAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuZGVjb21wcmVzc29iaiA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKQogCiBjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CiAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy91dGZfOF9zaWcucHkgYi9MaWIvZW5jb2RpbmdzL3V0Zl84X3NpZy5weQppbmRleCBmMDVmNmI4Li5kNzUxZGE2IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3V0Zl84X3NpZy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3V0Zl84X3NpZy5weQpAQCAtMTYsNyArMTYsNyBAQAogCiBkZWYgZGVjb2RlKGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgogICAgIHByZWZpeCA9IDAKLSAgICBpZiBpbnB1dC5zdGFydHN3aXRoKGNvZGVjcy5CT01fVVRGOCk6CisgICAgaWYgaW5wdXRbOjNdID09IGNvZGVjcy5CT01fVVRGODoKICAgICAgICAgaW5wdXQgPSBpbnB1dFszOl0KICAgICAgICAgcHJlZml4ID0gMwogICAgIChvdXRwdXQsIGNvbnN1bWVkKSA9IGNvZGVjcy51dGZfOF9kZWNvZGUoaW5wdXQsIGVycm9ycywgVHJ1ZSkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvemxpYl9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvemxpYl9jb2RlYy5weQppbmRleCAyNjk0ZjE1Li4zNDE5ZjlmIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3psaWJfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy96bGliX2NvZGVjLnB5CkBAIC01MSwxNCArNTEsMzYgQEAKICAgICAgICAgcmV0dXJuIHpsaWJfZGVjb2RlKGlucHV0LCBlcnJvcnMpCiAKIGNsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgYXNzZXJ0IGVycm9ycyA9PSAnc3RyaWN0JworICAgICAgICBzZWxmLmVycm9ycyA9IGVycm9ycworICAgICAgICBzZWxmLmNvbXByZXNzb2JqID0gemxpYi5jb21wcmVzc29iaigpCisKICAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6Ci0gICAgICAgIGFzc2VydCBzZWxmLmVycm9ycyA9PSAnc3RyaWN0JwotICAgICAgICByZXR1cm4gemxpYi5jb21wcmVzcyhpbnB1dCkKKyAgICAgICAgaWYgZmluYWw6CisgICAgICAgICAgICBjID0gc2VsZi5jb21wcmVzc29iai5jb21wcmVzcyhpbnB1dCkKKyAgICAgICAgICAgIHJldHVybiBjICsgc2VsZi5jb21wcmVzc29iai5mbHVzaCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21wcmVzc29iai5jb21wcmVzcyhpbnB1dCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wcmVzc29iaiA9IHpsaWIuY29tcHJlc3NvYmooKQogCiBjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5kZWNvbXByZXNzb2JqID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKwogICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKLSAgICAgICAgYXNzZXJ0IHNlbGYuZXJyb3JzID09ICdzdHJpY3QnCi0gICAgICAgIHJldHVybiB6bGliLmRlY29tcHJlc3MoaW5wdXQpCisgICAgICAgIGlmIGZpbmFsOgorICAgICAgICAgICAgYyA9IHNlbGYuZGVjb21wcmVzc29iai5kZWNvbXByZXNzKGlucHV0KQorICAgICAgICAgICAgcmV0dXJuIGMgKyBzZWxmLmRlY29tcHJlc3NvYmouZmx1c2goKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVjb21wcmVzc29iai5kZWNvbXByZXNzKGlucHV0KQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmRlY29tcHJlc3NvYmogPSB6bGliLmRlY29tcHJlc3NvYmooKQogCiBjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CiAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL2Z0cGxpYi5weSBiL0xpYi9mdHBsaWIucHkKaW5kZXggOTM3ZWU0ZS4uOWNiNjdkZCAxMDA2NDQKLS0tIGEvTGliL2Z0cGxpYi5weQorKysgYi9MaWIvZnRwbGliLnB5CkBAIC0zMjUsNiArMzI1LDE0IEBACiAgICAgICAgICAgICBpZiByZXN0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHNlbGYuc2VuZGNtZCgiUkVTVCAlcyIgJSByZXN0KQogICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZChjbWQpCisgICAgICAgICAgICAjIFNvbWUgc2VydmVycyBhcHBhcmVudGx5IHNlbmQgYSAyMDAgcmVwbHkgdG8KKyAgICAgICAgICAgICMgYSBMSVNUIG9yIFNUT1IgY29tbWFuZCwgYmVmb3JlIHRoZSAxNTAgcmVwbHkKKyAgICAgICAgICAgICMgKGFuZCB3YXkgYmVmb3JlIHRoZSAyMjYgcmVwbHkpLiBUaGlzIHNlZW1zIHRvCisgICAgICAgICAgICAjIGJlIGluIHZpb2xhdGlvbiBvZiB0aGUgcHJvdG9jb2wgKHdoaWNoIG9ubHkgYWxsb3dzCisgICAgICAgICAgICAjIDF4eCBvciBlcnJvciBtZXNzYWdlcyBmb3IgTElTVCksIHNvIHdlIGp1c3QgZGlzY2FyZAorICAgICAgICAgICAgIyB0aGlzIHJlc3BvbnNlLgorICAgICAgICAgICAgaWYgcmVzcFswXSA9PSAnMic6CisgICAgICAgICAgICAgICByZXNwID0gc2VsZi5nZXRyZXNwKCkKICAgICAgICAgICAgIGlmIHJlc3BbMF0gIT0gJzEnOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yX3JlcGx5LCByZXNwCiAgICAgICAgIGVsc2U6CkBAIC0zMzIsNiArMzQwLDkgQEAKICAgICAgICAgICAgIGlmIHJlc3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kY21kKCJSRVNUICVzIiAlIHJlc3QpCiAgICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKGNtZCkKKyAgICAgICAgICAgICMgU2VlIGFib3ZlLgorICAgICAgICAgICAgaWYgcmVzcFswXSA9PSAnMic6CisgICAgICAgICAgICAgICByZXNwID0gc2VsZi5nZXRyZXNwKCkKICAgICAgICAgICAgIGlmIHJlc3BbMF0gIT0gJzEnOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yX3JlcGx5LCByZXNwCiAgICAgICAgICAgICBjb25uLCBzb2NrYWRkciA9IHNvY2suYWNjZXB0KCkKZGlmZiAtLWdpdCBhL0xpYi9mdW5jdG9vbHMucHkgYi9MaWIvZnVuY3Rvb2xzLnB5CmluZGV4IDEyYTUyN2UuLmE1NGYwMzAgMTAwNjQ0Ci0tLSBhL0xpYi9mdW5jdG9vbHMucHkKKysrIGIvTGliL2Z1bmN0b29scy5weQpAQCAtMjUsMTQgKzI1LDE0IEBACiAgICAgICAgYXNzaWduZWQgaXMgYSB0dXBsZSBuYW1pbmcgdGhlIGF0dHJpYnV0ZXMgYXNzaWduZWQgZGlyZWN0bHkKICAgICAgICBmcm9tIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHRvIHRoZSB3cmFwcGVyIGZ1bmN0aW9uIChkZWZhdWx0cyB0bwogICAgICAgIGZ1bmN0b29scy5XUkFQUEVSX0FTU0lHTk1FTlRTKQotICAgICAgIHVwZGF0ZWQgaXMgYSB0dXBsZSBuYW1pbmcgdGhlIGF0dHJpYnV0ZXMgb2ZmIHRoZSB3cmFwcGVyIHRoYXQKKyAgICAgICB1cGRhdGVkIGlzIGEgdHVwbGUgbmFtaW5nIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSB3cmFwcGVyIHRoYXQKICAgICAgICBhcmUgdXBkYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBmcm9tIHRoZSB3cmFwcGVkCiAgICAgICAgZnVuY3Rpb24gKGRlZmF1bHRzIHRvIGZ1bmN0b29scy5XUkFQUEVSX1VQREFURVMpCiAgICAgIiIiCiAgICAgZm9yIGF0dHIgaW4gYXNzaWduZWQ6CiAgICAgICAgIHNldGF0dHIod3JhcHBlciwgYXR0ciwgZ2V0YXR0cih3cmFwcGVkLCBhdHRyKSkKICAgICBmb3IgYXR0ciBpbiB1cGRhdGVkOgotICAgICAgICBnZXRhdHRyKHdyYXBwZXIsIGF0dHIpLnVwZGF0ZShnZXRhdHRyKHdyYXBwZWQsIGF0dHIpKQorICAgICAgICBnZXRhdHRyKHdyYXBwZXIsIGF0dHIpLnVwZGF0ZShnZXRhdHRyKHdyYXBwZWQsIGF0dHIsIHt9KSkKICAgICAjIFJldHVybiB0aGUgd3JhcHBlciBzbyB0aGlzIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHZpYSBwYXJ0aWFsKCkKICAgICByZXR1cm4gd3JhcHBlcgogCmRpZmYgLS1naXQgYS9MaWIvZ2VuZXJpY3BhdGgucHkgYi9MaWIvZ2VuZXJpY3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NGNlZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9nZW5lcmljcGF0aC5weQpAQCAtMCwwICsxLDc3IEBACisiIiIKK1BhdGggb3BlcmF0aW9ucyBjb21tb24gdG8gbW9yZSB0aGFuIG9uZSBPUworRG8gbm90IHVzZSBkaXJlY3RseS4gIFRoZSBPUyBzcGVjaWZpYyBtb2R1bGVzIGltcG9ydCB0aGUgYXBwcm9wcmlhdGUKK2Z1bmN0aW9ucyBmcm9tIHRoaXMgbW9kdWxlIHRoZW1zZWx2ZXMuCisiIiIKK2ltcG9ydCBvcworaW1wb3J0IHN0YXQKKworX19hbGxfXyA9IFsnY29tbW9ucHJlZml4JywgJ2V4aXN0cycsICdnZXRhdGltZScsICdnZXRjdGltZScsICdnZXRtdGltZScsCisgICAgICAgICAgICdnZXRzaXplJywgJ2lzZGlyJywgJ2lzZmlsZSddCisKKworIyBEb2VzIGEgcGF0aCBleGlzdD8KKyMgVGhpcyBpcyBmYWxzZSBmb3IgZGFuZ2xpbmcgc3ltYm9saWMgbGlua3Mgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlbS4KK2RlZiBleGlzdHMocGF0aCk6CisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIEZhbHNlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKKyAgICB0cnk6CisgICAgICAgIHN0ID0gb3Muc3RhdChwYXRoKQorICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworCisjIFRoaXMgZm9sbG93cyBzeW1ib2xpYyBsaW5rcywgc28gYm90aCBpc2xpbmsoKSBhbmQgaXNkaXIoKSBjYW4gYmUgdHJ1ZQorIyBmb3IgdGhlIHNhbWUgcGF0aCBvbm8gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3ltbGlua3MKK2RlZiBpc2ZpbGUocGF0aCk6CisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIiIgorICAgIHRyeToKKyAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gc3RhdC5TX0lTUkVHKHN0LnN0X21vZGUpCisKKworIyBJcyBhIHBhdGggYSBkaXJlY3Rvcnk/CisjIFRoaXMgZm9sbG93cyBzeW1ib2xpYyBsaW5rcywgc28gYm90aCBpc2xpbmsoKSBhbmQgaXNkaXIoKQorIyBjYW4gYmUgdHJ1ZSBmb3IgdGhlIHNhbWUgcGF0aCBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBzeW1saW5rcworZGVmIGlzZGlyKHMpOgorICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LiIiIgorICAgIHRyeToKKyAgICAgICAgc3QgPSBvcy5zdGF0KHMpCisgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gc3RhdC5TX0lTRElSKHN0LnN0X21vZGUpCisKKworZGVmIGdldHNpemUoZmlsZW5hbWUpOgorICAgICIiIlJldHVybiB0aGUgc2l6ZSBvZiBhIGZpbGUsIHJlcG9ydGVkIGJ5IG9zLnN0YXQoKS4iIiIKKyAgICByZXR1cm4gb3Muc3RhdChmaWxlbmFtZSkuc3Rfc2l6ZQorCisKK2RlZiBnZXRtdGltZShmaWxlbmFtZSk6CisgICAgIiIiUmV0dXJuIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgorICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9tdGltZQorCisKK2RlZiBnZXRhdGltZShmaWxlbmFtZSk6CisgICAgIiIiUmV0dXJuIHRoZSBsYXN0IGFjY2VzcyB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgorICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9hdGltZQorCisKK2RlZiBnZXRjdGltZShmaWxlbmFtZSk6CisgICAgIiIiUmV0dXJuIHRoZSBtZXRhZGF0YSBjaGFuZ2UgdGltZSBvZiBhIGZpbGUsIHJlcG9ydGVkIGJ5IG9zLnN0YXQoKS4iIiIKKyAgICByZXR1cm4gb3Muc3RhdChmaWxlbmFtZSkuc3RfY3RpbWUKKworCisjIFJldHVybiB0aGUgbG9uZ2VzdCBwcmVmaXggb2YgYWxsIGxpc3QgZWxlbWVudHMuCitkZWYgY29tbW9ucHJlZml4KG0pOgorICAgICJHaXZlbiBhIGxpc3Qgb2YgcGF0aG5hbWVzLCByZXR1cm5zIHRoZSBsb25nZXN0IGNvbW1vbiBsZWFkaW5nIGNvbXBvbmVudCIKKyAgICBpZiBub3QgbTogcmV0dXJuICcnCisgICAgczEgPSBtaW4obSkKKyAgICBzMiA9IG1heChtKQorICAgIG4gPSBtaW4obGVuKHMxKSwgbGVuKHMyKSkKKyAgICBmb3IgaSBpbiB4cmFuZ2Uobik6CisgICAgICAgIGlmIHMxW2ldICE9IHMyW2ldOgorICAgICAgICAgICAgcmV0dXJuIHMxWzppXQorICAgIHJldHVybiBzMVs6bl0KZGlmZiAtLWdpdCBhL0xpYi9nemlwLnB5IGIvTGliL2d6aXAucHkKaW5kZXggMGJmMjllOC4uYzM3ZDVhMSAxMDA2NDQKLS0tIGEvTGliL2d6aXAucHkKKysrIGIvTGliL2d6aXAucHkKQEAgLTM3MSw3ICszNzEsMTIgQEAKICAgICAgICAgc2VsZi5leHRyYXNpemUgPSAwCiAgICAgICAgIHNlbGYub2Zmc2V0ID0gMAogCi0gICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0KToKKyAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT0wKToKKyAgICAgICAgaWYgd2hlbmNlOgorICAgICAgICAgICAgaWYgd2hlbmNlID09IDE6CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgKyBvZmZzZXQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VlayBmcm9tIGVuZCBub3Qgc3VwcG9ydGVkJykKICAgICAgICAgaWYgc2VsZi5tb2RlID09IFdSSVRFOgogICAgICAgICAgICAgaWYgb2Zmc2V0IDwgc2VsZi5vZmZzZXQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignTmVnYXRpdmUgc2VlayBpbiB3cml0ZSBtb2RlJykKZGlmZiAtLWdpdCBhL0xpYi9oYXNobGliLnB5IGIvTGliL2hhc2hsaWIucHkKaW5kZXggNzg5ZTI0ZS4uNzhiNWMwZSAxMDA2NDQKLS0tIGEvTGliL2hhc2hsaWIucHkKKysrIGIvTGliL2hhc2hsaWIucHkKQEAgLTE4LDggKzE4LDM3IEBACiBNb3JlIGFsZ29yaXRobXMgbWF5IGJlIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtIGJ1dCB0aGUgYWJvdmUgYXJlCiBndWFyYW50ZWVkIHRvIGV4aXN0LgogCi1DaG9vc2UgeW91ciBoYXNoIGZ1bmN0aW9uIHdpc2VseS4gIFNvbWUgaGF2ZSBrbm93biB3ZWFrbmVzc2VzLgorQ2hvb3NlIHlvdXIgaGFzaCBmdW5jdGlvbiB3aXNlbHkuICBTb21lIGhhdmUga25vd24gY29sbGlzaW9uIHdlYWtuZXNzZXMuCiBzaGEzODQgYW5kIHNoYTUxMiB3aWxsIGJlIHNsb3cgb24gMzIgYml0IHBsYXRmb3Jtcy4KKworSGFzaCBvYmplY3RzIGhhdmUgdGhlc2UgbWV0aG9kczoKKyAtIHVwZGF0ZShhcmcpOiBVcGRhdGUgdGhlIGhhc2ggb2JqZWN0IHdpdGggdGhlIHN0cmluZyBhcmcuIFJlcGVhdGVkIGNhbGxzCisgICAgICAgICAgICAgICAgYXJlIGVxdWl2YWxlbnQgdG8gYSBzaW5nbGUgY2FsbCB3aXRoIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbAorICAgICAgICAgICAgICAgIHRoZSBhcmd1bWVudHMuCisgLSBkaWdlc3QoKTogICAgUmV0dXJuIHRoZSBkaWdlc3Qgb2YgdGhlIHN0cmluZ3MgcGFzc2VkIHRvIHRoZSB1cGRhdGUoKSBtZXRob2QKKyAgICAgICAgICAgICAgICBzbyBmYXIuIFRoaXMgbWF5IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGluY2x1ZGluZworICAgICAgICAgICAgICAgIE5VTCBieXRlcy4KKyAtIGhleGRpZ2VzdCgpOiBMaWtlIGRpZ2VzdCgpIGV4Y2VwdCB0aGUgZGlnZXN0IGlzIHJldHVybmVkIGFzIGEgc3RyaW5nIG9mCisgICAgICAgICAgICAgICAgZG91YmxlIGxlbmd0aCwgY29udGFpbmluZyBvbmx5IGhleGFkZWNpbWFsIGRpZ2l0cy4KKyAtIGNvcHkoKTogICAgICBSZXR1cm4gYSBjb3B5IChjbG9uZSkgb2YgdGhlIGhhc2ggb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VkIHRvCisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgY29tcHV0ZSB0aGUgZGlnZXN0cyBvZiBzdHJpbmdzIHRoYXQgc2hhcmUgYSBjb21tb24KKyAgICAgICAgICAgICAgICBpbml0aWFsIHN1YnN0cmluZy4KKworRm9yIGV4YW1wbGUsIHRvIG9idGFpbiB0aGUgZGlnZXN0IG9mIHRoZSBzdHJpbmcgJ05vYm9keSBpbnNwZWN0cyB0aGUKK3NwYW1taXNoIHJlcGV0aXRpb24nOgorCisgICAgPj4+IGltcG9ydCBoYXNobGliCisgICAgPj4+IG0gPSBoYXNobGliLm1kNSgpCisgICAgPj4+IG0udXBkYXRlKCJOb2JvZHkgaW5zcGVjdHMiKQorICAgID4+PiBtLnVwZGF0ZSgiIHRoZSBzcGFtbWlzaCByZXBldGl0aW9uIikKKyAgICA+Pj4gbS5kaWdlc3QoKQorICAgICdceGJiZFx4OWNceDgzXHhkZFx4MWVceGE1XHhjOVx4ZDlceGRlXHhjOVx4YTFceDhkXHhmMFx4ZmZceGU5JworCitNb3JlIGNvbmRlbnNlZDoKKworICAgID4+PiBoYXNobGliLnNoYTIyNCgiTm9ib2R5IGluc3BlY3RzIHRoZSBzcGFtbWlzaCByZXBldGl0aW9uIikuaGV4ZGlnZXN0KCkKKyAgICAnYTQzMzdiYzQ1YThmYzU0NGMwM2Y1MmRjNTUwY2Q2ZTFlODcwMjFiYzg5NjU4OGJkNzllOTAxZTInCisKICIiIgogCiAKZGlmZiAtLWdpdCBhL0xpYi9odHRwbGliLnB5IGIvTGliL2h0dHBsaWIucHkKaW5kZXggNWFlNWVmYy4uMWUwMDM3ZiAxMDA2NDQKLS0tIGEvTGliL2h0dHBsaWIucHkKKysrIGIvTGliL2h0dHBsaWIucHkKQEAgLTcwNCw3ICs3MDQsMTUgQEAKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKICAgICAgICAgICAgIHByaW50ICJzZW5kOiIsIHJlcHIoc3RyKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzdHIpCisgICAgICAgICAgICBibG9ja3NpemU9ODE5MgorICAgICAgICAgICAgaWYgaGFzYXR0cihzdHIsJ3JlYWQnKSA6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQgInNlbmRJbmcgYSByZWFkKClhYmxlIgorICAgICAgICAgICAgICAgIGRhdGE9c3RyLnJlYWQoYmxvY2tzaXplKQorICAgICAgICAgICAgICAgIHdoaWxlIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGRhdGE9c3RyLnJlYWQoYmxvY2tzaXplKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzdHIpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHY6CiAgICAgICAgICAgICBpZiB2WzBdID09IDMyOiAgICAgICMgQnJva2VuIHBpcGUKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTg3OSw3ICs4ODcsMjEgQEAKICAgICAgICAgc2VsZi5wdXRyZXF1ZXN0KG1ldGhvZCwgdXJsLCAqKnNraXBzKQogCiAgICAgICAgIGlmIGJvZHkgYW5kICgnY29udGVudC1sZW5ndGgnIG5vdCBpbiBoZWFkZXJfbmFtZXMpOgotICAgICAgICAgICAgc2VsZi5wdXRoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgc3RyKGxlbihib2R5KSkpCisgICAgICAgICAgICB0aGVsZW49Tm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRoZWxlbj1zdHIobGVuKGJvZHkpKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgdGU6CisgICAgICAgICAgICAgICAgIyBJZiB0aGlzIGlzIGEgZmlsZS1saWtlIG9iamVjdCwgdHJ5IHRvCisgICAgICAgICAgICAgICAgIyBmc3RhdCBpdHMgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0aGVsZW4gPSBzdHIob3MuZnN0YXQoYm9keS5maWxlbm8oKSkuc3Rfc2l6ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBzZW5kIGEgbGVuZ3RoIGlmIHRoaXMgZmFpbGVkCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50ICJDYW5ub3Qgc3RhdCEhIgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHRoZWxlbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignQ29udGVudC1MZW5ndGgnLHRoZWxlbikKICAgICAgICAgZm9yIGhkciwgdmFsdWUgaW4gaGVhZGVycy5pdGVyaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYucHV0aGVhZGVyKGhkciwgdmFsdWUpCiAgICAgICAgIHNlbGYuZW5kaGVhZGVycygpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9Db2RlQ29udGV4dC5weSBiL0xpYi9pZGxlbGliL0NvZGVDb250ZXh0LnB5CmluZGV4IDc0ZDViNzAuLjQzNjIwNmYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NvZGVDb250ZXh0LnB5CisrKyBiL0xpYi9pZGxlbGliL0NvZGVDb250ZXh0LnB5CkBAIC01NCwyNSArNTQsNjggQEAKIAogICAgIGRlZiB0b2dnbGVfY29kZV9jb250ZXh0X2V2ZW50KHNlbGYsIGV2ZW50PU5vbmUpOgogICAgICAgICBpZiBub3Qgc2VsZi5sYWJlbDoKLSAgICAgICAgICAgIHNlbGYucGFkX2ZyYW1lID0gVGtpbnRlci5GcmFtZShzZWxmLmVkaXR3aW4udG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPXNlbGYuYmdjb2xvciwgYm9yZGVyPTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPSJzdW5rZW4iKQotICAgICAgICAgICAgc2VsZi5sYWJlbCA9IFRraW50ZXIuTGFiZWwoc2VsZi5wYWRfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9IlxuIiAqIChzZWxmLmNvbnRleHRfZGVwdGggLSAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yPSJ3IiwganVzdGlmeT0ibGVmdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9c2VsZi50ZXh0Zm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmc9c2VsZi5iZ2NvbG9yLCBmZz1zZWxmLmZnY29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcj0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0xLCAjIERvbid0IHJlcXVlc3QgbW9yZSB0aGFuIHdlIGdldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBzZWxmLmxhYmVsLnBhY2soc2lkZT0idG9wIiwgZmlsbD0ieCIsIGV4cGFuZD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZHg9NCwgcGFkeT0wKQotICAgICAgICAgICAgc2VsZi5wYWRfZnJhbWUucGFjayhzaWRlPSJ0b3AiLCBmaWxsPSJ4IiwgZXhwYW5kPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWR4PTAsIHBhZHk9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXI9c2VsZi5lZGl0d2luLnN0YXR1c19iYXIpCisgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBhdHRlbXB0cyB0byBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCBib3JkZXIKKyAgICAgICAgICAgICMgd2lkdGggYW5kIHZlcnRpY2FsIHBhZGRpbmcgcmVxdWlyZWQgZm9yIHRoZSBDb2RlQ29udGV4dCB3aWRnZXQKKyAgICAgICAgICAgICMgdG8gYmUgcGVyZmVjdGx5IGFsaWduZWQgd2l0aCB0aGUgdGV4dCBpbiB0aGUgbWFpbiBUZXh0IHdpZGdldC4KKyAgICAgICAgICAgICMgVGhpcyBpcyBkb25lIGJ5IHJldHJpZXZpbmcgdGhlIGFwcHJvcHJpYXRlIGF0dHJpYnV0ZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICMgZWRpdHdpbi50ZXh0IGFuZCBlZGl0d2luLnRleHRfZnJhbWUgd2lkZ2V0cy4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgQWxsIHZhbHVlcyBhcmUgcGFzc2VkIHRocm91Z2ggaW50KHN0cig8dmFsdWU+KSksIHNpbmNlIHNvbWUKKyAgICAgICAgICAgICMgdmFsdWVzIG1heSBiZSBwaXhlbCBvYmplY3RzLCB3aGljaCBjYW4ndCBzaW1wbHkgYmUgYWRkZWQgYWRkZWQKKyAgICAgICAgICAgICMgdG8gaW50cy4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhpcyBjb2RlIGlzIGNvbnNpZGVyZWQgc29tZXdoYXQgdW5zdGFibGUgc2luY2UgaXQgcmVsaWVzIG9uCisgICAgICAgICAgICAjIHNvbWUgb2YgVGsncyBpbm5lciB3b3JraW5ncy4gSG93ZXZlciBpdHMgZWZmZWN0IGlzIG1lcmVseQorICAgICAgICAgICAgIyBjb3NtZXRpYzsgZmFpbHVyZSB3aWxsIG9ubHkgY2F1c2UgdGhlIENvZGVDb250ZXh0IHRleHQgdG8gYmUKKyAgICAgICAgICAgICMgc29tZXdoYXQgbWlzYWxpZ25lZCB3aXRoIHRoZSB0ZXh0IGluIHRoZSBtYWluIFRleHQgd2lkZ2V0LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUbyBhdm9pZCBwb3NzaWJsZSBlcnJvcnMsIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBpbm5lciB3b3JraW5ncworICAgICAgICAgICAgIyBvZiBUayBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRyeS9leGNlcHQgYmxvY2tzLgorICAgICAgICAgICAgCisgICAgICAgICAgICB3aWRnZXRzX2Zvcl93aWR0aF9jYWxjID0gc2VsZi5lZGl0d2luLnRleHQsIHNlbGYuZWRpdHdpbi50ZXh0X2ZyYW1lCisKKyAgICAgICAgICAgICMgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCB2ZXJ0aWNhbCBwYWRkaW5nCisgICAgICAgICAgICBwYWR4ID0gMAorICAgICAgICAgICAgZm9yIHdpZGdldCBpbiB3aWRnZXRzX2Zvcl93aWR0aF9jYWxjOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyByZXRyaWV2ZSB0aGUgInBhZHgiIGF0dHJpYnRlIGZyb20gd2lkZ2V0J3MgcGFjayBpbmZvCisgICAgICAgICAgICAgICAgICAgIHBhZHggKz0gaW50KHN0ciggd2lkZ2V0LnBhY2tfaW5mbygpWydwYWR4J10gKSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICMgcmV0cmlldmUgdGhlIHdpZGdldCdzICJwYWR4IiBhdHRyaWJ0ZQorICAgICAgICAgICAgICAgICAgICBwYWR4ICs9IGludChzdHIoIHdpZGdldC5jZ2V0KCdwYWR4JykgKSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBjYWxjdWxhdGUgdGhlIHJlcXVpcmVkIGJvcmRlciB3aWR0aAorICAgICAgICAgICAgYm9yZGVyX3dpZHRoID0gMAorICAgICAgICAgICAgZm9yIHdpZGdldCBpbiB3aWRnZXRzX2Zvcl93aWR0aF9jYWxjOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyByZXRyaWV2ZSB0aGUgd2lkZ2V0J3MgImJvcmRlciIgYXR0cmlidGUKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyX3dpZHRoICs9IGludChzdHIoIHdpZGdldC5jZ2V0KCdib3JkZXInKSApKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBzZWxmLmxhYmVsID0gVGtpbnRlci5MYWJlbChzZWxmLmVkaXR3aW4udG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0iXG4iICogKHNlbGYuY29udGV4dF9kZXB0aCAtIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yPSJ3IiwganVzdGlmeT0ibGVmdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PXNlbGYudGV4dGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZz1zZWxmLmJnY29sb3IsIGZnPXNlbGYuZmdjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTEsICNkb24ndCByZXF1ZXN0IG1vcmUgdGhhbiB3ZSBnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZHg9cGFkeCwgI2xpbmUgdXAgd2l0aCB0ZXh0IHdpZGdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyPWJvcmRlcl93aWR0aCwgI21hdGNoIGJvcmRlciB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPSJzdW5rZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIENvZGVDb250ZXh0J3MgbGFiZWwgd2lkZ2V0IGlzIHBhY2tlZCBiZWZvcmUgYW5kIGFib3ZlIHRoZQorICAgICAgICAgICAgIyB0ZXh0X2ZyYW1lIHdpZGdldCwgdGh1cyBlbnN1cmluZyB0aGF0IGl0IHdpbGwgYXBwZWFyIGRpcmVjdGx5CisgICAgICAgICAgICAjIGFib3ZlIGl0LgorICAgICAgICAgICAgc2VsZi5sYWJlbC5wYWNrKHNpZGU9InRvcCIsIGZpbGw9IngiLCBleHBhbmQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlPXNlbGYuZWRpdHdpbi50ZXh0X2ZyYW1lKQorICAgICAgICAgICAgCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmxhYmVsLmRlc3Ryb3koKQotICAgICAgICAgICAgc2VsZi5wYWRfZnJhbWUuZGVzdHJveSgpCiAgICAgICAgICAgICBzZWxmLmxhYmVsID0gTm9uZQogICAgICAgICBpZGxlQ29uZi5TZXRPcHRpb24oImV4dGVuc2lvbnMiLCAiQ29kZUNvbnRleHQiLCAidmlzaWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5sYWJlbCBpcyBub3QgTm9uZSkpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKaW5kZXggYmM2MWFmYi4uMTg0MWIxYyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CisrKyBiL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQpAQCAtMTAyLDggKzEwMiw4IEBACiAgICAgICAgICAgICBzZWxmLnRvcC5pbnN0YW5jZV9kaWN0ID0ge30KICAgICAgICAgc2VsZi5yZWNlbnRfZmlsZXNfcGF0aCA9IG9zLnBhdGguam9pbihpZGxlQ29uZi5HZXRVc2VyQ2ZnRGlyKCksCiAgICAgICAgICAgICAgICAgJ3JlY2VudC1maWxlcy5sc3QnKQotICAgICAgICBzZWxmLnZiYXIgPSB2YmFyID0gU2Nyb2xsYmFyKHRvcCwgbmFtZT0ndmJhcicpCiAgICAgICAgIHNlbGYudGV4dF9mcmFtZSA9IHRleHRfZnJhbWUgPSBGcmFtZSh0b3ApCisgICAgICAgIHNlbGYudmJhciA9IHZiYXIgPSBTY3JvbGxiYXIodGV4dF9mcmFtZSwgbmFtZT0ndmJhcicpCiAgICAgICAgIHNlbGYud2lkdGggPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCd3aWR0aCcpCiAgICAgICAgIHNlbGYudGV4dCA9IHRleHQgPSBNdWx0aUNhbGxDcmVhdG9yKFRleHQpKAogICAgICAgICAgICAgICAgIHRleHRfZnJhbWUsIG5hbWU9J3RleHQnLCBwYWR4PTUsIHdyYXA9J25vbmUnLApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTkVXUy50eHQgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dAppbmRleCAzYjNkNzlhLi40M2U1YjQ1IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ORVdTLnR4dAorKysgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dApAQCAtMyw2ICszLDEzIEBACiAKICpSZWxlYXNlIGRhdGU6IFhYLVhYWC0yMDBYKgogCistIFBhdGNoICMxMzYyOTc1OiBSZXdvcmsgQ29kZUNvbnRleHQgaW5kZW50YXRpb24gYWxnb3JpdGhtIHRvCisgIGF2b2lkIGhhcmQtY29kaW5nIHBpeGVsIHdpZHRocy4KKworLSBTb21lIHN5bnRheCBlcnJvcnMgd2VyZSBiZWluZyBjYXVnaHQgYnkgdG9rZW5pemUgZHVyaW5nIHRoZSB0YWJuYW5ueQorICBjaGVjaywgcmVzdWx0aW5nIGluIG9ic2N1cmUgZXJyb3IgbWVzc2FnZXMuICBEbyB0aGUgc3ludGF4IGNoZWNrCisgIGZpcnN0LiAgQnVnIDE1NjI3MTYsIDE1NjI3MTkKKwogLSBJRExFJ3MgdmVyc2lvbiBudW1iZXIgdGFrZXMgYSBiaWcganVtcCB0byBtYXRjaCB0aGUgdmVyc2lvbiBudW1iZXIgb2YKICAgdGhlIFB5dGhvbiByZWxlYXNlIG9mIHdoaWNoIGl0J3MgYSBwYXJ0LgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5IGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQppbmRleCA3MDliM2E3Li4yMGQwMGJlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CisrKyBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKQEAgLTM1MSw2ICszNTEsOCBAQAogCiAgICAgZGVmIGJ1aWxkX3N1YnByb2Nlc3NfYXJnbGlzdChzZWxmKToKICAgICAgICAgdyA9IFsnLVcnICsgcyBmb3IgcyBpbiBzeXMud2Fybm9wdGlvbnNdCisgICAgICAgIGlmIDEvMiA+IDA6ICMgYWNjb3VudCBmb3IgbmV3IGRpdmlzaW9uCisgICAgICAgICAgICB3LmFwcGVuZCgnLVFuZXcnKQogICAgICAgICAjIE1heWJlIElETEUgaXMgaW5zdGFsbGVkIGFuZCBpcyBiZWluZyBhY2Nlc3NlZCB2aWEgc3lzLnBhdGgsCiAgICAgICAgICMgb3IgbWF5YmUgaXQncyBub3QgaW5zdGFsbGVkIGFuZCB0aGUgaWRsZS5weSBzY3JpcHQgaXMgYmVpbmcKICAgICAgICAgIyBydW4gZnJvbSB0aGUgSURMRSBzb3VyY2UgZGlyZWN0b3J5LgpAQCAtNzI2LDYgKzcyOCw4IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgaWYgdXNlX3N1YnByb2Nlc3M6CisgICAgICAgICAgICAgICAgICAgICMgV2hlbiBydW4gdy9vIHN1YnByb2Nlc3MsIGJvdGggdXNlciBhbmQgSURMRSBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgIyBhcmUgcHJpbnRlZCBoZXJlOyBza2lwIG1lc3NhZ2UgaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAgICAgICAgICBwcmludCA+PiBzZWxmLnRrY29uc29sZS5zdGRlcnIsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklETEUgaW50ZXJuYWwgZXJyb3IgaW4gcnVuY29kZSgpIgogICAgICAgICAgICAgICAgIHNlbGYuc2hvd3RyYWNlYmFjaygpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TY3JpcHRCaW5kaW5nLnB5IGIvTGliL2lkbGVsaWIvU2NyaXB0QmluZGluZy5weQppbmRleCBmMzI1YWQxLi4zNzQ2ZWI4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9TY3JpcHRCaW5kaW5nLnB5CisrKyBiL0xpYi9pZGxlbGliL1NjcmlwdEJpbmRpbmcucHkKQEAgLTU3LDkgKzU3LDEwIEBACiAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5nZXRmaWxlbmFtZSgpCiAgICAgICAgIGlmIG5vdCBmaWxlbmFtZToKICAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3Qgc2VsZi5jaGVja3N5bnRheChmaWxlbmFtZSk6CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgbm90IHNlbGYudGFibmFubnkoZmlsZW5hbWUpOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuY2hlY2tzeW50YXgoZmlsZW5hbWUpCiAKICAgICBkZWYgdGFibmFubnkoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3InKQpAQCAtNzYsOSArNzcsNiBAQAogICAgICAgICAgICAgc2VsZi5lZGl0d2luLmdvdG9saW5lKG5hZy5nZXRfbGluZW5vKCkpCiAgICAgICAgICAgICBzZWxmLmVycm9yYm94KCJUYWIvc3BhY2UgZXJyb3IiLCBpbmRlbnRfbWVzc2FnZSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBleGNlcHQgSW5kZW50YXRpb25FcnJvcjoKLSAgICAgICAgICAgICMgRnJvbSB0b2tlbml6ZSgpLCBsZXQgY29tcGlsZSgpIGluIGNoZWNrc3ludGF4IGZpbmQgaXQgYWdhaW4uCi0gICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgY2hlY2tzeW50YXgoc2VsZiwgZmlsZW5hbWUpOgpAQCAtMTM5LDExICsxMzcsMTEgQEAKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmdldGZpbGVuYW1lKCkKICAgICAgICAgaWYgbm90IGZpbGVuYW1lOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBzZWxmLnRhYm5hbm55KGZpbGVuYW1lKToKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBjb2RlID0gc2VsZi5jaGVja3N5bnRheChmaWxlbmFtZSkKICAgICAgICAgaWYgbm90IGNvZGU6CiAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IHNlbGYudGFibmFubnkoZmlsZW5hbWUpOgorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNoZWxsID0gc2VsZi5zaGVsbAogICAgICAgICBpbnRlcnAgPSBzaGVsbC5pbnRlcnAKICAgICAgICAgaWYgUHlTaGVsbC51c2Vfc3VicHJvY2VzczoKZGlmZiAtLWdpdCBhL0xpYi9pbnNwZWN0LnB5IGIvTGliL2luc3BlY3QucHkKaW5kZXggMGI0OThiNS4uOTg2YTQxNSAxMDA2NDQKLS0tIGEvTGliL2luc3BlY3QucHkKKysrIGIvTGliL2luc3BlY3QucHkKQEAgLTQwMyw2ICs0MDMsNyBAQAogICAgIHJldHVybiBvcy5wYXRoLm5vcm1jYXNlKG9zLnBhdGguYWJzcGF0aChfZmlsZW5hbWUpKQogCiBtb2R1bGVzYnlmaWxlID0ge30KK19maWxlc2J5bW9kbmFtZSA9IHt9CiAKIGRlZiBnZXRtb2R1bGUob2JqZWN0LCBfZmlsZW5hbWU9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIHRoZSBtb2R1bGUgYW4gb2JqZWN0IHdhcyBkZWZpbmVkIGluLCBvciBOb25lIGlmIG5vdCBmb3VuZC4iIiIKQEAgLTQxMCwxOSArNDExLDMyIEBACiAgICAgICAgIHJldHVybiBvYmplY3QKICAgICBpZiBoYXNhdHRyKG9iamVjdCwgJ19fbW9kdWxlX18nKToKICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzLmdldChvYmplY3QuX19tb2R1bGVfXykKKyAgICAjIFRyeSB0aGUgZmlsZW5hbWUgdG8gbW9kdWxlbmFtZSBjYWNoZQorICAgIGlmIF9maWxlbmFtZSBpcyBub3QgTm9uZSBhbmQgX2ZpbGVuYW1lIGluIG1vZHVsZXNieWZpbGU6CisgICAgICAgIHJldHVybiBzeXMubW9kdWxlcy5nZXQobW9kdWxlc2J5ZmlsZVtfZmlsZW5hbWVdKQorICAgICMgVHJ5IHRoZSBjYWNoZSBhZ2FpbiB3aXRoIHRoZSBhYnNvbHV0ZSBmaWxlIG5hbWUKICAgICB0cnk6CiAgICAgICAgIGZpbGUgPSBnZXRhYnNmaWxlKG9iamVjdCwgX2ZpbGVuYW1lKQogICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgaWYgZmlsZSBpbiBtb2R1bGVzYnlmaWxlOgogICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXMuZ2V0KG1vZHVsZXNieWZpbGVbZmlsZV0pCi0gICAgZm9yIG1vZHVsZSBpbiBzeXMubW9kdWxlcy52YWx1ZXMoKToKKyAgICAjIFVwZGF0ZSB0aGUgZmlsZW5hbWUgdG8gbW9kdWxlIG5hbWUgY2FjaGUgYW5kIGNoZWNrIHlldCBhZ2FpbgorICAgICMgQ29weSBzeXMubW9kdWxlcyBpbiBvcmRlciB0byBjb3BlIHdpdGggY2hhbmdlcyB3aGlsZSBpdGVyYXRpbmcKKyAgICBmb3IgbW9kbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CiAgICAgICAgIGlmIGlzbW9kdWxlKG1vZHVsZSkgYW5kIGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKToKKyAgICAgICAgICAgIGYgPSBtb2R1bGUuX19maWxlX18KKyAgICAgICAgICAgIGlmIGYgPT0gX2ZpbGVzYnltb2RuYW1lLmdldChtb2RuYW1lLCBOb25lKToKKyAgICAgICAgICAgICAgICAjIEhhdmUgYWxyZWFkeSBtYXBwZWQgdGhpcyBtb2R1bGUsIHNvIHNraXAgaXQKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgX2ZpbGVzYnltb2RuYW1lW21vZG5hbWVdID0gZgogICAgICAgICAgICAgZiA9IGdldGFic2ZpbGUobW9kdWxlKQorICAgICAgICAgICAgIyBBbHdheXMgbWFwIHRvIHRoZSBuYW1lIHRoZSBtb2R1bGUga25vd3MgaXRzZWxmIGJ5CiAgICAgICAgICAgICBtb2R1bGVzYnlmaWxlW2ZdID0gbW9kdWxlc2J5ZmlsZVsKICAgICAgICAgICAgICAgICBvcy5wYXRoLnJlYWxwYXRoKGYpXSA9IG1vZHVsZS5fX25hbWVfXwogICAgIGlmIGZpbGUgaW4gbW9kdWxlc2J5ZmlsZToKICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzLmdldChtb2R1bGVzYnlmaWxlW2ZpbGVdKQorICAgICMgQ2hlY2sgdGhlIG1haW4gbW9kdWxlCiAgICAgbWFpbiA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCiAgICAgaWYgbm90IGhhc2F0dHIob2JqZWN0LCAnX19uYW1lX18nKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTQzMCw2ICs0NDQsNyBAQAogICAgICAgICBtYWlub2JqZWN0ID0gZ2V0YXR0cihtYWluLCBvYmplY3QuX19uYW1lX18pCiAgICAgICAgIGlmIG1haW5vYmplY3QgaXMgb2JqZWN0OgogICAgICAgICAgICAgcmV0dXJuIG1haW4KKyAgICAjIENoZWNrIGJ1aWx0aW5zCiAgICAgYnVpbHRpbiA9IHN5cy5tb2R1bGVzWydfX2J1aWx0aW5fXyddCiAgICAgaWYgaGFzYXR0cihidWlsdGluLCBvYmplY3QuX19uYW1lX18pOgogICAgICAgICBidWlsdGlub2JqZWN0ID0gZ2V0YXR0cihidWlsdGluLCBvYmplY3QuX19uYW1lX18pCkBAIC00NDQsNyArNDU5LDcgQEAKICAgICBpbiB0aGUgZmlsZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGV4ZXMgYSBsaW5lIGluIHRoYXQgbGlzdC4gIEFuIElPRXJyb3IKICAgICBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAgICAgZmlsZSA9IGdldHNvdXJjZWZpbGUob2JqZWN0KSBvciBnZXRmaWxlKG9iamVjdCkKLSAgICBtb2R1bGUgPSBnZXRtb2R1bGUob2JqZWN0KQorICAgIG1vZHVsZSA9IGdldG1vZHVsZShvYmplY3QsIGZpbGUpCiAgICAgaWYgbW9kdWxlOgogICAgICAgICBsaW5lcyA9IGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlLCBtb2R1bGUuX19kaWN0X18pCiAgICAgZWxzZToKQEAgLTQ1Nyw5ICs0NzIsMjQgQEAKIAogICAgIGlmIGlzY2xhc3Mob2JqZWN0KToKICAgICAgICAgbmFtZSA9IG9iamVjdC5fX25hbWVfXwotICAgICAgICBwYXQgPSByZS5jb21waWxlKHInXlxzKmNsYXNzXHMqJyArIG5hbWUgKyByJ1xiJykKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShyJ14oXHMqKWNsYXNzXHMqJyArIG5hbWUgKyByJ1xiJykKKyAgICAgICAgIyBtYWtlIHNvbWUgZWZmb3J0IHRvIGZpbmQgdGhlIGJlc3QgbWF0Y2hpbmcgY2xhc3MgZGVmaW5pdGlvbjoKKyAgICAgICAgIyB1c2UgdGhlIG9uZSB3aXRoIHRoZSBsZWFzdCBpbmRlbnRhdGlvbiwgd2hpY2ggaXMgdGhlIG9uZQorICAgICAgICAjIHRoYXQncyBtb3N0IHByb2JhYmx5IG5vdCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uLgorICAgICAgICBjYW5kaWRhdGVzID0gW10KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGxpbmVzKSk6Ci0gICAgICAgICAgICBpZiBwYXQubWF0Y2gobGluZXNbaV0pOiByZXR1cm4gbGluZXMsIGkKKyAgICAgICAgICAgIG1hdGNoID0gcGF0Lm1hdGNoKGxpbmVzW2ldKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgIyBpZiBpdCdzIGF0IHRvcGxldmVsLCBpdCdzIGFscmVhZHkgdGhlIGJlc3Qgb25lCisgICAgICAgICAgICAgICAgaWYgbGluZXNbaV1bMF0gPT0gJ2MnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZXMsIGkKKyAgICAgICAgICAgICAgICAjIGVsc2UgYWRkIHdoaXRlc3BhY2UgdG8gY2FuZGlkYXRlIGxpc3QKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZCgobWF0Y2guZ3JvdXAoMSksIGkpKQorICAgICAgICBpZiBjYW5kaWRhdGVzOgorICAgICAgICAgICAgIyB0aGlzIHdpbGwgc29ydCBieSB3aGl0ZXNwYWNlLCBhbmQgYnkgbGluZSBudW1iZXIsCisgICAgICAgICAgICAjIGxlc3Mgd2hpdGVzcGFjZSBmaXJzdAorICAgICAgICAgICAgY2FuZGlkYXRlcy5zb3J0KCkKKyAgICAgICAgICAgIHJldHVybiBsaW5lcywgY2FuZGlkYXRlc1swXVsxXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGZpbmQgY2xhc3MgZGVmaW5pdGlvbicpCiAKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvVGl4LnB5IGIvTGliL2xpYi10ay9UaXgucHkKaW5kZXggMWQyZmRhZC4uYWQ2MTI2YSAxMDA3NTUKLS0tIGEvTGliL2xpYi10ay9UaXgucHkKKysrIGIvTGliL2xpYi10ay9UaXgucHkKQEAgLTQyMSw3ICs0MjEsNyBAQAogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHBsaXN0ID0gW10KIAotICAgICAgICBpZiAobm90IGNoZWNrX2ludGVybWVkaWF0ZSkgb3IgbGVuKHBsaXN0KSA8IDI6CisgICAgICAgIGlmIG5vdCBjaGVja19pbnRlcm1lZGlhdGU6CiAgICAgICAgICAgICAjIGltbWVkaWF0ZSBkZXNjZW5kYW50CiAgICAgICAgICAgICBUaXhXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCBOb25lLCBOb25lLCB7J25hbWUnIDogbmFtZX0pCiAgICAgICAgIGVsc2U6CkBAIC00MzcsNiArNDM3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gVGl4U3ViV2lkZ2V0KHBhcmVudCwgcGxpc3RbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95X3BoeXNpY2FsbHk9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2ludGVybWVkaWF0ZT0wKQorICAgICAgICAgICAgIyBUaGUgVGsgd2lkZ2V0IG5hbWUgaXMgaW4gcGxpc3QsIG5vdCBpbiBuYW1lCisgICAgICAgICAgICBpZiBwbGlzdDoKKyAgICAgICAgICAgICAgICBuYW1lID0gcGxpc3RbLTFdCiAgICAgICAgICAgICBUaXhXaWRnZXQuX19pbml0X18oc2VsZiwgcGFyZW50LCBOb25lLCBOb25lLCB7J25hbWUnIDogbmFtZX0pCiAgICAgICAgIHNlbGYuZGVzdHJveV9waHlzaWNhbGx5ID0gZGVzdHJveV9waHlzaWNhbGx5CiAKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvVGtpbnRlci5weSBiL0xpYi9saWItdGsvVGtpbnRlci5weQppbmRleCBiZWExMzBjLi5mODUzOGVkIDEwMDY0NAotLS0gYS9MaWIvbGliLXRrL1RraW50ZXIucHkKKysrIGIvTGliL2xpYi10ay9Ua2ludGVyLnB5CkBAIC0zMDE3LDcgKzMwMTcsNyBAQAogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NjYW4nLCAnZHJhZ3RvJywgeCwgeSkKICAgICBkZWYgc2VhcmNoKHNlbGYsIHBhdHRlcm4sIGluZGV4LCBzdG9waW5kZXg9Tm9uZSwKICAgICAgICAgICAgZm9yd2FyZHM9Tm9uZSwgYmFja3dhcmRzPU5vbmUsIGV4YWN0PU5vbmUsCi0gICAgICAgICAgIHJlZ2V4cD1Ob25lLCBub2Nhc2U9Tm9uZSwgY291bnQ9Tm9uZSk6CisgICAgICAgICAgIHJlZ2V4cD1Ob25lLCBub2Nhc2U9Tm9uZSwgY291bnQ9Tm9uZSwgZWxpZGU9Tm9uZSk6CiAgICAgICAgICIiIlNlYXJjaCBQQVRURVJOIGJlZ2lubmluZyBmcm9tIElOREVYIHVudGlsIFNUT1BJTkRFWC4KICAgICAgICAgUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbWF0Y2ggb3IgYW4gZW1wdHkgc3RyaW5nLiIiIgogICAgICAgICBhcmdzID0gW3NlbGYuX3csICdzZWFyY2gnXQpAQCAtMzAyNiw2ICszMDI2LDcgQEAKICAgICAgICAgaWYgZXhhY3Q6IGFyZ3MuYXBwZW5kKCctZXhhY3QnKQogICAgICAgICBpZiByZWdleHA6IGFyZ3MuYXBwZW5kKCctcmVnZXhwJykKICAgICAgICAgaWYgbm9jYXNlOiBhcmdzLmFwcGVuZCgnLW5vY2FzZScpCisgICAgICAgIGlmIGVsaWRlOiBhcmdzLmFwcGVuZCgnLWVsaWRlJykKICAgICAgICAgaWYgY291bnQ6IGFyZ3MuYXBwZW5kKCctY291bnQnKTsgYXJncy5hcHBlbmQoY291bnQpCiAgICAgICAgIGlmIHBhdHRlcm5bMF0gPT0gJy0nOiBhcmdzLmFwcGVuZCgnLS0nKQogICAgICAgICBhcmdzLmFwcGVuZChwYXR0ZXJuKQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90a01lc3NhZ2VCb3gucHkgYi9MaWIvbGliLXRrL3RrTWVzc2FnZUJveC5weQppbmRleCBhZmYwNjliLi5kMTRjYTg2IDEwMDY0NAotLS0gYS9MaWIvbGliLXRrL3RrTWVzc2FnZUJveC5weQorKysgYi9MaWIvbGliLXRrL3RrTWVzc2FnZUJveC5weQpAQCAtMTAyLDYgKzEwMiwxNSBAQAogICAgIHMgPSBfc2hvdyh0aXRsZSwgbWVzc2FnZSwgUVVFU1RJT04sIFlFU05PLCAqKm9wdGlvbnMpCiAgICAgcmV0dXJuIHMgPT0gWUVTCiAKK2RlZiBhc2t5ZXNub2NhbmNlbCh0aXRsZT1Ob25lLCBtZXNzYWdlPU5vbmUsICoqb3B0aW9ucyk6CisgICAgIkFzayBhIHF1ZXN0aW9uOyByZXR1cm4gdHJ1ZSBpZiB0aGUgYW5zd2VyIGlzIHllcywgTm9uZSBpZiBjYW5jZWxsZWQuIgorICAgIHMgPSBfc2hvdyh0aXRsZSwgbWVzc2FnZSwgUVVFU1RJT04sIFlFU05PQ0FOQ0VMLCAqKm9wdGlvbnMpCisgICAgIyBzIG1pZ2h0IGJlIGEgVGNsIGluZGV4IG9iamVjdCwgc28gY29udmVydCBpdCB0byBhIHN0cmluZworICAgIHMgPSBzdHIocykKKyAgICBpZiBzID09IENBTkNFTDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gcyA9PSBZRVMKKwogZGVmIGFza3JldHJ5Y2FuY2VsKHRpdGxlPU5vbmUsIG1lc3NhZ2U9Tm9uZSwgKipvcHRpb25zKToKICAgICAiQXNrIGlmIG9wZXJhdGlvbiBzaG91bGQgYmUgcmV0cmllZDsgcmV0dXJuIHRydWUgaWYgdGhlIGFuc3dlciBpcyB5ZXMiCiAgICAgcyA9IF9zaG93KHRpdGxlLCBtZXNzYWdlLCBXQVJOSU5HLCBSRVRSWUNBTkNFTCwgKipvcHRpb25zKQpAQCAtMTE5LDQgKzEyOCw1IEBACiAgICAgcHJpbnQgInF1ZXN0aW9uIiwgYXNrcXVlc3Rpb24oIlNwYW0iLCAiUXVlc3Rpb24/IikKICAgICBwcmludCAicHJvY2VlZCIsIGFza29rY2FuY2VsKCJTcGFtIiwgIlByb2NlZWQ/IikKICAgICBwcmludCAieWVzL25vIiwgYXNreWVzbm8oIlNwYW0iLCAiR290IGl0PyIpCisgICAgcHJpbnQgInllcy9uby9jYW5jZWwiLCBhc2t5ZXNub2NhbmNlbCgiU3BhbSIsICJXYW50IGl0PyIpCiAgICAgcHJpbnQgInRyeSBhZ2FpbiIsIGFza3JldHJ5Y2FuY2VsKCJTcGFtIiwgIlRyeSBhZ2Fpbj8iKQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90a1NpbXBsZURpYWxvZy5weSBiL0xpYi9saWItdGsvdGtTaW1wbGVEaWFsb2cucHkKaW5kZXggN2I3MDQxMS4uMzQxMWQ5NCAxMDA2NDQKLS0tIGEvTGliL2xpYi10ay90a1NpbXBsZURpYWxvZy5weQorKysgYi9MaWIvbGliLXRrL3RrU2ltcGxlRGlhbG9nLnB5CkBAIC00Niw4ICs0NiwxMyBAQAogICAgICAgICAgICAgdGl0bGUgLS0gdGhlIGRpYWxvZyB0aXRsZQogICAgICAgICAnJycKICAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQotICAgICAgICBzZWxmLnRyYW5zaWVudChwYXJlbnQpCiAKKyAgICAgICAgIyBJZiB0aGUgbWFzdGVyIGlzIG5vdCB2aWV3YWJsZSwgZG9uJ3QKKyAgICAgICAgIyBtYWtlIHRoZSBjaGlsZCB0cmFuc2llbnQsIG9yIGVsc2UgaXQKKyAgICAgICAgIyB3b3VsZCBiZSBvcGVuZWQgd2l0aGRyYXduCisgICAgICAgIGlmIHBhcmVudC53aW5mb192aWV3YWJsZSgpOiAgCisgICAgICAgICAgICBzZWxmLnRyYW5zaWVudChwYXJlbnQpCisgCiAgICAgICAgIGlmIHRpdGxlOgogICAgICAgICAgICAgc2VsZi50aXRsZSh0aXRsZSkKIApAQCAtMTI0LDkgKzEyOSwxMCBAQAogICAgICAgICBzZWxmLndpdGhkcmF3KCkKICAgICAgICAgc2VsZi51cGRhdGVfaWRsZXRhc2tzKCkKIAotICAgICAgICBzZWxmLmFwcGx5KCkKLQotICAgICAgICBzZWxmLmNhbmNlbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXBwbHkoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jYW5jZWwoKQogCiAgICAgZGVmIGNhbmNlbChzZWxmLCBldmVudD1Ob25lKToKIApkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90dXJ0bGUucHkgYi9MaWIvbGliLXRrL3R1cnRsZS5weQppbmRleCAwMWE1NWIxLi5mY2RlOWFmIDEwMDY0NAotLS0gYS9MaWIvbGliLXRrL3R1cnRsZS5weQorKysgYi9MaWIvbGliLXRrL3R1cnRsZS5weQpAQCAtMTUsNiArMTUsNyBAQAogIiIiCiAKIGZyb20gbWF0aCBpbXBvcnQgKiAjIEFsc28gZm9yIGV4cG9ydAorZnJvbSB0aW1lIGltcG9ydCBzbGVlcAogaW1wb3J0IFRraW50ZXIKIAogc3BlZWRzID0gWydmYXN0ZXN0JywgJ2Zhc3QnLCAnbm9ybWFsJywgJ3Nsb3cnLCAnc2xvd2VzdCddCkBAIC05NDksNyArOTUwLDYgQEAKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGZyb20gdGltZSBpbXBvcnQgc2xlZXAKICAgICBkZW1vKCkKICAgICBzbGVlcCgzKQogICAgIGRlbW8yKCkKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5IGIvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKaW5kZXggOTUzYWZlOS4uYjU3YTlhZiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKKysrIGIvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKQEAgLTIxNCw3ICsyMTQsNyBAQAogICAgIGluZm9ybWF0aW9uIHRvIGJlIGxvZ2dlZC4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbGV2ZWwsIHBhdGhuYW1lLCBsaW5lbm8sCi0gICAgICAgICAgICAgICAgIG1zZywgYXJncywgZXhjX2luZm8sIGZ1bmMpOgorICAgICAgICAgICAgICAgICBtc2csIGFyZ3MsIGV4Y19pbmZvLCBmdW5jPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgSW5pdGlhbGl6ZSBhIGxvZ2dpbmcgcmVjb3JkIHdpdGggaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24uCiAgICAgICAgICIiIgpAQCAtOTEwLDEwICs5MTAsMTEgQEAKICAgICAgICAgRW5zdXJlIHRoYXQgY2hpbGRyZW4gb2YgdGhlIHBsYWNlaG9sZGVyIHBoIGFyZSBjb25uZWN0ZWQgdG8gdGhlCiAgICAgICAgIHNwZWNpZmllZCBsb2dnZXIuCiAgICAgICAgICIiIgotICAgICAgICAjZm9yIGMgaW4gcGgubG9nZ2VyczoKKyAgICAgICAgbmFtZSA9IGFsb2dnZXIubmFtZQorICAgICAgICBuYW1lbGVuID0gbGVuKG5hbWUpCiAgICAgICAgIGZvciBjIGluIHBoLmxvZ2dlck1hcC5rZXlzKCk6Ci0gICAgICAgICAgICAjIFhYWCBJcyB0aGUgZm9sbG93aW5nIGNvcnJlY3Q/ICBTaG91bGRuJ3QgaXQgYmUgPj0gMD8KLSAgICAgICAgICAgIGlmIHN0cmluZy5maW5kKGMucGFyZW50Lm5hbWUsIGFsb2dnZXIubmFtZSkgIT0gMDoKKyAgICAgICAgICAgICNUaGUgaWYgbWVhbnMgLi4uIGlmIG5vdCBjLnBhcmVudC5uYW1lLnN0YXJ0c3dpdGgobm0pCisgICAgICAgICAgICBpZiBjLnBhcmVudC5uYW1lWzpuYW1lbGVuXSAhPSBuYW1lOgogICAgICAgICAgICAgICAgIGFsb2dnZXIucGFyZW50ID0gYy5wYXJlbnQKICAgICAgICAgICAgICAgICBjLnBhcmVudCA9IGFsb2dnZXIKIApkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5IGIvTGliL2xvZ2dpbmcvY29uZmlnLnB5CmluZGV4IGEzMWU4ZDAuLmE5OTcwZDAgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL2NvbmZpZy5weQorKysgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKQEAgLTI3LDcgKzI3LDcgQEAKIFRvIHVzZSwgc2ltcGx5ICdpbXBvcnQgbG9nZ2luZycgYW5kIGxvZyBhd2F5IQogIiIiCiAKLWltcG9ydCBzeXMsIGxvZ2dpbmcsIGxvZ2dpbmcuaGFuZGxlcnMsIHN0cmluZywgc29ja2V0LCBzdHJ1Y3QsIG9zLCB0cmFjZWJhY2sKK2ltcG9ydCBzeXMsIGxvZ2dpbmcsIGxvZ2dpbmcuaGFuZGxlcnMsIHN0cmluZywgc29ja2V0LCBzdHJ1Y3QsIG9zLCB0cmFjZWJhY2ssIHR5cGVzCiAKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICBmbGlzdCA9IHN0cmluZy5zcGxpdChmbGlzdCwgIiwiKQogICAgIGZvcm1hdHRlcnMgPSB7fQogICAgIGZvciBmb3JtIGluIGZsaXN0OgotICAgICAgICBzZWN0bmFtZSA9ICJmb3JtYXR0ZXJfJXMiICUgZm9ybQorICAgICAgICBzZWN0bmFtZSA9ICJmb3JtYXR0ZXJfJXMiICUgc3RyaW5nLnN0cmlwKGZvcm0pCiAgICAgICAgIG9wdHMgPSBjcC5vcHRpb25zKHNlY3RuYW1lKQogICAgICAgICBpZiAiZm9ybWF0IiBpbiBvcHRzOgogICAgICAgICAgICAgZnMgPSBjcC5nZXQoc2VjdG5hbWUsICJmb3JtYXQiLCAxKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgaGFuZGxlcnMgPSB7fQogICAgIGZpeHVwcyA9IFtdICNmb3IgaW50ZXItaGFuZGxlciByZWZlcmVuY2VzCiAgICAgZm9yIGhhbmQgaW4gaGxpc3Q6Ci0gICAgICAgIHNlY3RuYW1lID0gImhhbmRsZXJfJXMiICUgaGFuZAorICAgICAgICBzZWN0bmFtZSA9ICJoYW5kbGVyXyVzIiAlIHN0cmluZy5zdHJpcChoYW5kKQogICAgICAgICBrbGFzcyA9IGNwLmdldChzZWN0bmFtZSwgImNsYXNzIikKICAgICAgICAgb3B0cyA9IGNwLm9wdGlvbnMoc2VjdG5hbWUpCiAgICAgICAgIGlmICJmb3JtYXR0ZXIiIGluIG9wdHM6CkBAIC0xNzYsNiArMTc2LDcgQEAKICAgICAjIGNvbmZpZ3VyZSB0aGUgcm9vdCBmaXJzdAogICAgIGxsaXN0ID0gY3AuZ2V0KCJsb2dnZXJzIiwgImtleXMiKQogICAgIGxsaXN0ID0gc3RyaW5nLnNwbGl0KGxsaXN0LCAiLCIpCisgICAgbGxpc3QgPSBtYXAobGFtYmRhIHg6IHN0cmluZy5zdHJpcCh4KSwgbGxpc3QpCiAgICAgbGxpc3QucmVtb3ZlKCJyb290IikKICAgICBzZWN0bmFtZSA9ICJsb2dnZXJfcm9vdCIKICAgICByb290ID0gbG9nZ2luZy5yb290CkBAIC0xOTAsNyArMTkxLDcgQEAKICAgICBpZiBsZW4oaGxpc3QpOgogICAgICAgICBobGlzdCA9IHN0cmluZy5zcGxpdChobGlzdCwgIiwiKQogICAgICAgICBmb3IgaGFuZCBpbiBobGlzdDoKLSAgICAgICAgICAgIGxvZy5hZGRIYW5kbGVyKGhhbmRsZXJzW2hhbmRdKQorICAgICAgICAgICAgbG9nLmFkZEhhbmRsZXIoaGFuZGxlcnNbc3RyaW5nLnN0cmlwKGhhbmQpXSkKIAogICAgICNhbmQgbm93IHRoZSBvdGhlcnMuLi4KICAgICAjd2UgZG9uJ3Qgd2FudCB0byBsb3NlIHRoZSBleGlzdGluZyBsb2dnZXJzLApAQCAtMjI1LDcgKzIyNiw3IEBACiAgICAgICAgIGlmIGxlbihobGlzdCk6CiAgICAgICAgICAgICBobGlzdCA9IHN0cmluZy5zcGxpdChobGlzdCwgIiwiKQogICAgICAgICAgICAgZm9yIGhhbmQgaW4gaGxpc3Q6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcnNbaGFuZF0pCisgICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcnNbc3RyaW5nLnN0cmlwKGhhbmQpXSkKIAogICAgICNEaXNhYmxlIGFueSBvbGQgbG9nZ2Vycy4gVGhlcmUncyBubyBwb2ludCBkZWxldGluZwogICAgICN0aGVtIGFzIG90aGVyIHRocmVhZHMgbWF5IGNvbnRpbnVlIHRvIGhvbGQgcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQppbmRleCBhMDI1NWNlLi4xN2VjYThhIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQorKysgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQpAQCAtNTkwLDExICs1OTAsMTEgQEAKICAgICAgICAgc2VsZi5hZGRyZXNzID0gYWRkcmVzcwogICAgICAgICBzZWxmLmZhY2lsaXR5ID0gZmFjaWxpdHkKICAgICAgICAgaWYgdHlwZShhZGRyZXNzKSA9PSB0eXBlcy5TdHJpbmdUeXBlOgotICAgICAgICAgICAgc2VsZi5fY29ubmVjdF91bml4c29ja2V0KGFkZHJlc3MpCiAgICAgICAgICAgICBzZWxmLnVuaXhzb2NrZXQgPSAxCisgICAgICAgICAgICBzZWxmLl9jb25uZWN0X3VuaXhzb2NrZXQoYWRkcmVzcykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCiAgICAgICAgICAgICBzZWxmLnVuaXhzb2NrZXQgPSAwCisgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQogCiAgICAgICAgIHNlbGYuZm9ybWF0dGVyID0gTm9uZQogCmRpZmYgLS1naXQgYS9MaWIvbWFjcGF0aC5weSBiL0xpYi9tYWNwYXRoLnB5CmluZGV4IGY5M2NlYjEuLmQzODlkNzAgMTAwNjQ0Ci0tLSBhL0xpYi9tYWNwYXRoLnB5CisrKyBiL0xpYi9tYWNwYXRoLnB5CkBAIC0yLDYgKzIsNyBAQAogCiBpbXBvcnQgb3MKIGZyb20gc3RhdCBpbXBvcnQgKgorZnJvbSBnZW5lcmljcGF0aCBpbXBvcnQgKgogCiBfX2FsbF9fID0gWyJub3JtY2FzZSIsImlzYWJzIiwiam9pbiIsInNwbGl0ZHJpdmUiLCJzcGxpdCIsInNwbGl0ZXh0IiwKICAgICAgICAgICAgImJhc2VuYW1lIiwiZGlybmFtZSIsImNvbW1vbnByZWZpeCIsImdldHNpemUiLCJnZXRtdGltZSIsCkBAIC0xMDEsMzEgKzEwMiw2IEBACiAgICAgY29tcG9uZW50cyA9IHNwbGl0KHMpCiAgICAgcmV0dXJuIGxlbihjb21wb25lbnRzKSA9PSAyIGFuZCBjb21wb25lbnRzWzFdID09ICcnCiAKLWRlZiBpc2RpcihzKToKLSAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKLQotICAgIHRyeToKLSAgICAgICAgc3QgPSBvcy5zdGF0KHMpCi0gICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICByZXR1cm4gMAotICAgIHJldHVybiBTX0lTRElSKHN0LnN0X21vZGUpCi0KLQotIyBHZXQgc2l6ZSwgbXRpbWUsIGF0aW1lIG9mIGZpbGVzLgotCi1kZWYgZ2V0c2l6ZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBzaXplIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgotICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9zaXplCi0KLWRlZiBnZXRtdGltZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgotICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9tdGltZQotCi1kZWYgZ2V0YXRpbWUoZmlsZW5hbWUpOgotICAgICIiIlJldHVybiB0aGUgbGFzdCBhY2Nlc3MgdGltZSBvZiBhIGZpbGUsIHJlcG9ydGVkIGJ5IG9zLnN0YXQoKS4iIiIKLSAgICByZXR1cm4gb3Muc3RhdChmaWxlbmFtZSkuc3RfYXRpbWUKLQotCiBkZWYgaXNsaW5rKHMpOgogICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYSBzeW1ib2xpYyBsaW5rLiIiIgogCkBAIC0xMzUsMjkgKzExMSw2IEBACiAgICAgZXhjZXB0OgogICAgICAgICByZXR1cm4gRmFsc2UKIAotCi1kZWYgaXNmaWxlKHMpOgotICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYW4gZXhpc3RpbmcgcmVndWxhciBmaWxlLiIiIgotCi0gICAgdHJ5OgotICAgICAgICBzdCA9IG9zLnN0YXQocykKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIHJldHVybiBTX0lTUkVHKHN0LnN0X21vZGUpCi0KLWRlZiBnZXRjdGltZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBjcmVhdGlvbiB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgotICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9jdGltZQotCi1kZWYgZXhpc3RzKHMpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCi0KLSAgICB0cnk6Ci0gICAgICAgIHN0ID0gb3Muc3RhdChzKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgcmV0dXJuIFRydWUKLQogIyBJcyBgc3RhdGAvYGxzdGF0YCBhIG1lYW5pbmdmdWwgZGlmZmVyZW5jZSBvbiB0aGUgTWFjPyAgVGhpcyBpcyBzYWZlIGluIGFueQogIyBjYXNlLgogCkBAIC0xNzAsMjAgKzEyMyw2IEBACiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKLSMgUmV0dXJuIHRoZSBsb25nZXN0IHByZWZpeCBvZiBhbGwgbGlzdCBlbGVtZW50cy4KLQotZGVmIGNvbW1vbnByZWZpeChtKToKLSAgICAiR2l2ZW4gYSBsaXN0IG9mIHBhdGhuYW1lcywgcmV0dXJucyB0aGUgbG9uZ2VzdCBjb21tb24gbGVhZGluZyBjb21wb25lbnQiCi0gICAgaWYgbm90IG06IHJldHVybiAnJwotICAgIHMxID0gbWluKG0pCi0gICAgczIgPSBtYXgobSkKLSAgICBuID0gbWluKGxlbihzMSksIGxlbihzMikpCi0gICAgZm9yIGkgaW4geHJhbmdlKG4pOgotICAgICAgICBpZiBzMVtpXSAhPSBzMltpXToKLSAgICAgICAgICAgIHJldHVybiBzMVs6aV0KLSAgICByZXR1cm4gczFbOm5dCi0KLQogZGVmIGV4cGFuZHZhcnMocGF0aCk6CiAgICAgIiIiRHVtbXkgdG8gcmV0YWluIGludGVyZmFjZS1jb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuIiIiCiAgICAgcmV0dXJuIHBhdGgKZGlmZiAtLWdpdCBhL0xpYi9tYWlsYm94LnB5IGIvTGliL21haWxib3gucHkKaW5kZXggZWQ3YzdkMS4uMDg0MzQzMCAxMDA3NTUKLS0tIGEvTGliL21haWxib3gucHkKKysrIGIvTGliL21haWxib3gucHkKQEAgLTIsNiArMiwxMiBAQAogCiAiIiJSZWFkL3dyaXRlIHN1cHBvcnQgZm9yIE1haWxkaXIsIG1ib3gsIE1ILCBCYWJ5bCwgYW5kIE1NREYgbWFpbGJveGVzLiIiIgogCisjIE5vdGVzIGZvciBhdXRob3JzIG9mIG5ldyBtYWlsYm94IHN1YmNsYXNzZXM6CisjCisjIFJlbWVtYmVyIHRvIGZzeW5jKCkgY2hhbmdlcyB0byBkaXNrIGJlZm9yZSBjbG9zaW5nIGEgbW9kaWZpZWQgZmlsZQorIyBvciByZXR1cm5pbmcgZnJvbSBhIGZsdXNoKCkgbWV0aG9kLiAgU2VlIGZ1bmN0aW9ucyBfc3luY19mbHVzaCgpIGFuZAorIyBfc3luY19jbG9zZSgpLgorCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCB0aW1lCkBAIC0yMzUsNyArMjQxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fZHVtcF9tZXNzYWdlKG1lc3NhZ2UsIHRtcF9maWxlKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgdG1wX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgX3N5bmNfY2xvc2UodG1wX2ZpbGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgTWFpbGRpck1lc3NhZ2UpOgogICAgICAgICAgICAgc3ViZGlyID0gbWVzc2FnZS5nZXRfc3ViZGlyKCkKICAgICAgICAgICAgIHN1ZmZpeCA9IHNlbGYuY29sb24gKyBtZXNzYWdlLmdldF9pbmZvKCkKQEAgLTI0Niw3ICsyNTIsMTkgQEAKICAgICAgICAgICAgIHN1ZmZpeCA9ICcnCiAgICAgICAgIHVuaXEgPSBvcy5wYXRoLmJhc2VuYW1lKHRtcF9maWxlLm5hbWUpLnNwbGl0KHNlbGYuY29sb24pWzBdCiAgICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3ViZGlyLCB1bmlxICsgc3VmZml4KQotICAgICAgICBvcy5yZW5hbWUodG1wX2ZpbGUubmFtZSwgZGVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgJ2xpbmsnKToKKyAgICAgICAgICAgICAgICBvcy5saW5rKHRtcF9maWxlLm5hbWUsIGRlc3QpCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRtcF9maWxlLm5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLnJlbmFtZSh0bXBfZmlsZS5uYW1lLCBkZXN0KQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0bXBfZmlsZS5uYW1lKQorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdOYW1lIGNsYXNoIHdpdGggZXhpc3RpbmcgbWVzc2FnZTogJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZGVzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBNYWlsZGlyTWVzc2FnZSk6CiAgICAgICAgICAgICBvcy51dGltZShkZXN0LCAob3MucGF0aC5nZXRhdGltZShkZXN0KSwgbWVzc2FnZS5nZXRfZGF0ZSgpKSkKICAgICAgICAgcmV0dXJuIHVuaXEKQEAgLTM2NCwxMiArMzgyLDE0IEBACiAKICAgICBkZWYgZ2V0X2ZvbGRlcihzZWxmLCBmb2xkZXIpOgogICAgICAgICAiIiJSZXR1cm4gYSBNYWlsZGlyIGluc3RhbmNlIGZvciB0aGUgbmFtZWQgZm9sZGVyLiIiIgotICAgICAgICByZXR1cm4gTWFpbGRpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJy4nICsgZm9sZGVyKSwgY3JlYXRlPUZhbHNlKQorICAgICAgICByZXR1cm4gTWFpbGRpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJy4nICsgZm9sZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeT1zZWxmLl9mYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGU9RmFsc2UpCiAKICAgICBkZWYgYWRkX2ZvbGRlcihzZWxmLCBmb2xkZXIpOgogICAgICAgICAiIiJDcmVhdGUgYSBmb2xkZXIgYW5kIHJldHVybiBhIE1haWxkaXIgaW5zdGFuY2UgcmVwcmVzZW50aW5nIGl0LiIiIgogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICcuJyArIGZvbGRlcikKLSAgICAgICAgcmVzdWx0ID0gTWFpbGRpcihwYXRoKQorICAgICAgICByZXN1bHQgPSBNYWlsZGlyKHBhdGgsIGZhY3Rvcnk9c2VsZi5fZmFjdG9yeSkKICAgICAgICAgbWFpbGRpcmZvbGRlcl9wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdtYWlsZGlyZm9sZGVyJykKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG1haWxkaXJmb2xkZXJfcGF0aCk6CiAgICAgICAgICAgICBvcy5jbG9zZShvcy5vcGVuKG1haWxkaXJmb2xkZXJfcGF0aCwgb3MuT19DUkVBVCB8IG9zLk9fV1JPTkxZKSkKQEAgLTQyMCwxMiArNDQwLDE3IEBACiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgTWFpbGRpci5fY291bnQgKz0gMQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVuKHBhdGgsICd3YisnKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVfY2FyZWZ1bGx5KHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignTmFtZSBjbGFzaCBwcmV2ZW50ZWQgZmlsZSBjcmVhdGlvbjogJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoKQorCisgICAgICAgICMgRmFsbCB0aHJvdWdoIHRvIGhlcmUgaWYgc3RhdCBzdWNjZWVkZWQgb3Igb3BlbiByYWlzZWQgRUVYSVNULgorICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ05hbWUgY2xhc2ggcHJldmVudGVkIGZpbGUgY3JlYXRpb246ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoKQogCiAgICAgZGVmIF9yZWZyZXNoKHNlbGYpOgogICAgICAgICAiIiJVcGRhdGUgdGFibGUgb2YgY29udGVudHMgbWFwcGluZy4iIiIKQEAgLTU2MCw3ICs1ODUsOCBAQAogICAgICAgICAgICAgbmV3X2ZpbGUuY2xvc2UoKQogICAgICAgICAgICAgb3MucmVtb3ZlKG5ld19maWxlLm5hbWUpCiAgICAgICAgICAgICByYWlzZQotICAgICAgICBuZXdfZmlsZS5jbG9zZSgpCisgICAgICAgIF9zeW5jX2Nsb3NlKG5ld19maWxlKQorICAgICAgICAjIHNlbGYuX2ZpbGUgaXMgYWJvdXQgdG8gZ2V0IHJlcGxhY2VkLCBzbyBubyBuZWVkIHRvIHN5bmMuCiAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUubmFtZSwgc2VsZi5fcGF0aCkKQEAgLTU3NSw3ICs2MDEsNyBAQAogICAgICAgICBzZWxmLl90b2MgPSBuZXdfdG9jCiAgICAgICAgIHNlbGYuX3BlbmRpbmcgPSBGYWxzZQogICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6Ci0gICAgICAgICAgICBfbG9ja19maWxlKG5ld19maWxlLCBkb3Rsb2NrPUZhbHNlKQorICAgICAgICAgICAgX2xvY2tfZmlsZShzZWxmLl9maWxlLCBkb3Rsb2NrPUZhbHNlKQogCiAgICAgZGVmIF9wcmVfbWFpbGJveF9ob29rKHNlbGYsIGYpOgogICAgICAgICAiIiJDYWxsZWQgYmVmb3JlIHdyaXRpbmcgdGhlIG1haWxib3ggdG8gZmlsZSBmLiIiIgpAQCAtNTk0LDcgKzYyMCw3IEBACiAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICBzZWxmLnVubG9jaygpCi0gICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkgICMgU3luYyBoYXMgYmVlbiBkb25lIGJ5IHNlbGYuZmx1c2goKSBhYm92ZS4KIAogICAgIGRlZiBfbG9va3VwKHNlbGYsIGtleT1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIChzdGFydCwgc3RvcCkgb3IgcmFpc2UgS2V5RXJyb3IuIiIiCkBAIC03ODQsNyArODEwLDcgQEAKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBfc3luY19jbG9zZShmKQogICAgICAgICByZXR1cm4gbmV3X2tleQogCiAgICAgZGVmIHJlbW92ZShzZWxmLCBrZXkpOgpAQCAtODMxLDcgKzg1Nyw3IEBACiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgX3N5bmNfY2xvc2UoZikKIAogICAgIGRlZiBnZXRfbWVzc2FnZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBNZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCkBAIC05MTgsNyArOTQ0LDcgQEAKICAgICAgICAgIiIiVW5sb2NrIHRoZSBtYWlsYm94IGlmIGl0IGlzIGxvY2tlZC4iIiIKICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgX3VubG9ja19maWxlKHNlbGYuX2ZpbGUpCi0gICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIF9zeW5jX2Nsb3NlKHNlbGYuX2ZpbGUpCiAgICAgICAgICAgICBkZWwgc2VsZi5fZmlsZQogICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gRmFsc2UKIApAQCAtOTQxLDExICs5NjcsMTMgQEAKIAogICAgIGRlZiBnZXRfZm9sZGVyKHNlbGYsIGZvbGRlcik6CiAgICAgICAgICIiIlJldHVybiBhbiBNSCBpbnN0YW5jZSBmb3IgdGhlIG5hbWVkIGZvbGRlci4iIiIKLSAgICAgICAgcmV0dXJuIE1IKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBmb2xkZXIpLCBjcmVhdGU9RmFsc2UpCisgICAgICAgIHJldHVybiBNSChvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgZm9sZGVyKSwKKyAgICAgICAgICAgICAgICAgIGZhY3Rvcnk9c2VsZi5fZmFjdG9yeSwgY3JlYXRlPUZhbHNlKQogCiAgICAgZGVmIGFkZF9mb2xkZXIoc2VsZiwgZm9sZGVyKToKICAgICAgICAgIiIiQ3JlYXRlIGEgZm9sZGVyIGFuZCByZXR1cm4gYW4gTUggaW5zdGFuY2UgcmVwcmVzZW50aW5nIGl0LiIiIgotICAgICAgICByZXR1cm4gTUgob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIGZvbGRlcikpCisgICAgICAgIHJldHVybiBNSChvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgZm9sZGVyKSwKKyAgICAgICAgICAgICAgICAgIGZhY3Rvcnk9c2VsZi5fZmFjdG9yeSkKIAogICAgIGRlZiByZW1vdmVfZm9sZGVyKHNlbGYsIGZvbGRlcik6CiAgICAgICAgICIiIkRlbGV0ZSB0aGUgbmFtZWQgZm9sZGVyLCB3aGljaCBtdXN0IGJlIGVtcHR5LiIiIgpAQCAtMTAxMyw3ICsxMDQxLDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcbicpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIF9zeW5jX2Nsb3NlKGYpCiAKICAgICBkZWYgcGFjayhzZWxmKToKICAgICAgICAgIiIiUmUtbmFtZSBtZXNzYWdlcyB0byBlbGltaW5hdGUgbnVtYmVyaW5nIGdhcHMuIEludmFsaWRhdGVzIGtleXMuIiIiCkBAIC0xMDIzLDI3ICsxMDUxLDEzIEBACiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5pdGVya2V5cygpOgogICAgICAgICAgICAgaWYga2V5IC0gMSAhPSBwcmV2OgogICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKChrZXksIHByZXYgKyAxKSkKLSAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncisnKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgotICAgICAgICAgICAgICAgICAgICAgICAgX2xvY2tfZmlsZShmKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAnbGluaycpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIocHJldiArIDEpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ29zMmVteCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2Fubm90IHVubGluayBhbiBvcGVuIGZpbGUgb24gT1MvMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIocHJldiArIDEpKSkKLSAgICAgICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAnbGluaycpOgorICAgICAgICAgICAgICAgICAgICBvcy5saW5rKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihwcmV2ICsgMSkpKQorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIocHJldiArIDEpKSkKICAgICAgICAgICAgIHByZXYgKz0gMQogICAgICAgICBzZWxmLl9uZXh0X2tleSA9IHByZXYgKyAxCiAgICAgICAgIGlmIGxlbihjaGFuZ2VzKSA9PSAwOgpAQCAtMTg2Nyw2ICsxODgxLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LmdldGhvc3RuYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZ2V0cGlkKCkpKQogCitkZWYgX3N5bmNfZmx1c2goZik6CisgICAgIiIiRW5zdXJlIGNoYW5nZXMgdG8gZmlsZSBmIGFyZSBwaHlzaWNhbGx5IG9uIGRpc2suIiIiCisgICAgZi5mbHVzaCgpCisgICAgb3MuZnN5bmMoZi5maWxlbm8oKSkKKworZGVmIF9zeW5jX2Nsb3NlKGYpOgorICAgICIiIkNsb3NlIGZpbGUgZiwgZW5zdXJpbmcgYWxsIGNoYW5nZXMgYXJlIHBoeXNpY2FsbHkgb24gZGlzay4iIiIKKyAgICBfc3luY19mbHVzaChmKQorICAgIGYuY2xvc2UoKQogCiAjIyBTdGFydDogY2xhc3NlcyBmcm9tIHRoZSBvcmlnaW5hbCBtb2R1bGUgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KIApkaWZmIC0tZ2l0IGEvTGliL250cGF0aC5weSBiL0xpYi9udHBhdGgucHkKaW5kZXggN2E3OWI1My4uYjMyZWMxNiAxMDA2NDQKLS0tIGEvTGliL250cGF0aC5weQorKysgYi9MaWIvbnRwYXRoLnB5CkBAIC04LDYgKzgsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3RhdAogaW1wb3J0IHN5cworZnJvbSBnZW5lcmljcGF0aCBpbXBvcnQgKgogCiBfX2FsbF9fID0gWyJub3JtY2FzZSIsImlzYWJzIiwiam9pbiIsInNwbGl0ZHJpdmUiLCJzcGxpdCIsInNwbGl0ZXh0IiwKICAgICAgICAgICAgImJhc2VuYW1lIiwiZGlybmFtZSIsImNvbW1vbnByZWZpeCIsImdldHNpemUiLCJnZXRtdGltZSIsCkBAIC0yMDYsODYgKzIwNywxOCBAQAogICAgICIiIlJldHVybnMgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgYSBwYXRobmFtZSIiIgogICAgIHJldHVybiBzcGxpdChwKVswXQogCi0KLSMgUmV0dXJuIHRoZSBsb25nZXN0IHByZWZpeCBvZiBhbGwgbGlzdCBlbGVtZW50cy4KLQotZGVmIGNvbW1vbnByZWZpeChtKToKLSAgICAiR2l2ZW4gYSBsaXN0IG9mIHBhdGhuYW1lcywgcmV0dXJucyB0aGUgbG9uZ2VzdCBjb21tb24gbGVhZGluZyBjb21wb25lbnQiCi0gICAgaWYgbm90IG06IHJldHVybiAnJwotICAgIHMxID0gbWluKG0pCi0gICAgczIgPSBtYXgobSkKLSAgICBuID0gbWluKGxlbihzMSksIGxlbihzMikpCi0gICAgZm9yIGkgaW4geHJhbmdlKG4pOgotICAgICAgICBpZiBzMVtpXSAhPSBzMltpXToKLSAgICAgICAgICAgIHJldHVybiBzMVs6aV0KLSAgICByZXR1cm4gczFbOm5dCi0KLQotIyBHZXQgc2l6ZSwgbXRpbWUsIGF0aW1lIG9mIGZpbGVzLgotCi1kZWYgZ2V0c2l6ZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBzaXplIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpIiIiCi0gICAgcmV0dXJuIG9zLnN0YXQoZmlsZW5hbWUpLnN0X3NpemUKLQotZGVmIGdldG10aW1lKGZpbGVuYW1lKToKLSAgICAiIiJSZXR1cm4gdGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgYSBmaWxlLCByZXBvcnRlZCBieSBvcy5zdGF0KCkiIiIKLSAgICByZXR1cm4gb3Muc3RhdChmaWxlbmFtZSkuc3RfbXRpbWUKLQotZGVmIGdldGF0aW1lKGZpbGVuYW1lKToKLSAgICAiIiJSZXR1cm4gdGhlIGxhc3QgYWNjZXNzIHRpbWUgb2YgYSBmaWxlLCByZXBvcnRlZCBieSBvcy5zdGF0KCkiIiIKLSAgICByZXR1cm4gb3Muc3RhdChmaWxlbmFtZSkuc3RfYXRpbWUKLQotZGVmIGdldGN0aW1lKGZpbGVuYW1lKToKLSAgICAiIiJSZXR1cm4gdGhlIGNyZWF0aW9uIHRpbWUgb2YgYSBmaWxlLCByZXBvcnRlZCBieSBvcy5zdGF0KCkuIiIiCi0gICAgcmV0dXJuIG9zLnN0YXQoZmlsZW5hbWUpLnN0X2N0aW1lCi0KICMgSXMgYSBwYXRoIGEgc3ltYm9saWMgbGluaz8KICMgVGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2Ugb24gc3lzdGVtcyB3aGVyZSBwb3NpeC5sc3RhdCBkb2Vzbid0IGV4aXN0LgogCiBkZWYgaXNsaW5rKHBhdGgpOgotICAgICIiIlRlc3QgZm9yIHN5bWJvbGljIGxpbmsuICBPbiBXaW5kb3dzTlQvOTUgYWx3YXlzIHJldHVybnMgZmFsc2UiIiIKKyAgICAiIiJUZXN0IGZvciBzeW1ib2xpYyBsaW5rLgorICAgIE9uIFdpbmRvd3NOVC85NSBhbmQgT1MvMiBhbHdheXMgcmV0dXJucyBmYWxzZQorICAgICIiIgogICAgIHJldHVybiBGYWxzZQogCi0KLSMgRG9lcyBhIHBhdGggZXhpc3Q/Ci0KLWRlZiBleGlzdHMocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMiIiIKLSAgICB0cnk6Ci0gICAgICAgIHN0ID0gb3Muc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgcmV0dXJuIFRydWUKLQorIyBhbGlhcyBleGlzdHMgdG8gbGV4aXN0cwogbGV4aXN0cyA9IGV4aXN0cwogCi0KLSMgSXMgYSBwYXRoIGEgZG9zIGRpcmVjdG9yeT8KLSMgVGhpcyBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLCBzbyBib3RoIGlzbGluaygpIGFuZCBpc2RpcigpIGNhbiBiZSB0cnVlCi0jIGZvciB0aGUgc2FtZSBwYXRoLgotCi1kZWYgaXNkaXIocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIGRpcmVjdG9yeSIiIgotICAgIHRyeToKLSAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICByZXR1cm4gc3RhdC5TX0lTRElSKHN0LnN0X21vZGUpCi0KLQotIyBJcyBhIHBhdGggYSByZWd1bGFyIGZpbGU/Ci0jIFRoaXMgZm9sbG93cyBzeW1ib2xpYyBsaW5rcywgc28gYm90aCBpc2xpbmsoKSBhbmQgaXNkaXIoKSBjYW4gYmUgdHJ1ZQotIyBmb3IgdGhlIHNhbWUgcGF0aC4KLQotZGVmIGlzZmlsZShwYXRoKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgcmVndWxhciBmaWxlIiIiCi0gICAgdHJ5OgotICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIHJldHVybiBzdGF0LlNfSVNSRUcoc3Quc3RfbW9kZSkKLQotCiAjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PyAgRWl0aGVyIGEgcm9vdCAod2l0aCBvciB3aXRob3V0IGRyaXZlIGxldHRlcikKICMgb3IgYW4gVU5DIHBhdGggd2l0aCBhdCBtb3N0IGEgLyBvciBcIGFmdGVyIHRoZSBtb3VudCBwb2ludC4KIApkaWZmIC0tZ2l0IGEvTGliL29zLnB5IGIvTGliL29zLnB5CmluZGV4IDVlZTNkNGIuLjM1Zjk3ZmIgMTAwNjQ0Ci0tLSBhL0xpYi9vcy5weQorKysgYi9MaWIvb3MucHkKQEAgLTE1NiwxMSArMTU2LDE3IEBACiAgICAgcmVjdXJzaXZlLgogCiAgICAgIiIiCisgICAgZnJvbSBlcnJubyBpbXBvcnQgRUVYSVNUCiAgICAgaGVhZCwgdGFpbCA9IHBhdGguc3BsaXQobmFtZSkKICAgICBpZiBub3QgdGFpbDoKICAgICAgICAgaGVhZCwgdGFpbCA9IHBhdGguc3BsaXQoaGVhZCkKICAgICBpZiBoZWFkIGFuZCB0YWlsIGFuZCBub3QgcGF0aC5leGlzdHMoaGVhZCk6Ci0gICAgICAgIG1ha2VkaXJzKGhlYWQsIG1vZGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1ha2VkaXJzKGhlYWQsIG1vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgIyBiZSBoYXBweSBpZiBzb21lb25lIGFscmVhZHkgY3JlYXRlZCB0aGUgcGF0aAorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgaWYgdGFpbCA9PSBjdXJkaXI6ICAgICAgICAgICAjIHh4eC9uZXdkaXIvLiBleGlzdHMgaWYgeHh4L25ld2RpciBleGlzdHMKICAgICAgICAgICAgIHJldHVybgogICAgIG1rZGlyKG5hbWUsIG1vZGUpCmRpZmYgLS1naXQgYS9MaWIvb3MyZW14cGF0aC5weSBiL0xpYi9vczJlbXhwYXRoLnB5CmluZGV4IGE4NDE0MjIuLjRlODVjNGQgMTAwNjQ0Ci0tLSBhL0xpYi9vczJlbXhwYXRoLnB5CisrKyBiL0xpYi9vczJlbXhwYXRoLnB5CkBAIC03LDYgKzcsOSBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzdGF0Citmcm9tIGdlbmVyaWNwYXRoIGltcG9ydCAqCitmcm9tIG50cGF0aCBpbXBvcnQgKGV4cGFuZHVzZXIsIGV4cGFuZHZhcnMsIGlzYWJzLCBpc2xpbmssIHNwbGl0ZHJpdmUsCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ZXh0LCBzcGxpdCwgd2FsaykKIAogX19hbGxfXyA9IFsibm9ybWNhc2UiLCJpc2FicyIsImpvaW4iLCJzcGxpdGRyaXZlIiwic3BsaXQiLCJzcGxpdGV4dCIsCiAgICAgICAgICAgICJiYXNlbmFtZSIsImRpcm5hbWUiLCJjb21tb25wcmVmaXgiLCJnZXRzaXplIiwiZ2V0bXRpbWUiLApAQCAtMzYsMTggKzM5LDYgQEAKICAgICByZXR1cm4gcy5yZXBsYWNlKCdcXCcsICcvJykubG93ZXIoKQogCiAKLSMgUmV0dXJuIHdoZXRoZXIgYSBwYXRoIGlzIGFic29sdXRlLgotIyBUcml2aWFsIGluIFBvc2l4LCBoYXJkZXIgb24gdGhlIE1hYyBvciBNUy1ET1MuCi0jIEZvciBET1MgaXQgaXMgYWJzb2x1dGUgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCBvciBiYWNrc2xhc2ggKGN1cnJlbnQKLSMgdm9sdW1lKSwgb3IgaWYgYSBwYXRobmFtZSBhZnRlciB0aGUgdm9sdW1lIGxldHRlciBhbmQgY29sb24gLyBVTkMgcmVzb3VyY2UKLSMgc3RhcnRzIHdpdGggYSBzbGFzaCBvciBiYWNrc2xhc2guCi0KLWRlZiBpc2FicyhzKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGFic29sdXRlIiIiCi0gICAgcyA9IHNwbGl0ZHJpdmUocylbMV0KLSAgICByZXR1cm4gcyAhPSAnJyBhbmQgc1s6MV0gaW4gJy9cXCcKLQotCiAjIEpvaW4gdHdvIChvciBtb3JlKSBwYXRocy4KIAogZGVmIGpvaW4oYSwgKnApOgpAQCAtNjMsMTcgKzU0LDYgQEAKICAgICByZXR1cm4gcGF0aAogCiAKLSMgU3BsaXQgYSBwYXRoIGluIGEgZHJpdmUgc3BlY2lmaWNhdGlvbiAoYSBkcml2ZSBsZXR0ZXIgZm9sbG93ZWQgYnkgYQotIyBjb2xvbikgYW5kIHRoZSBwYXRoIHNwZWNpZmljYXRpb24uCi0jIEl0IGlzIGFsd2F5cyB0cnVlIHRoYXQgZHJpdmVzcGVjICsgcGF0aHNwZWMgPT0gcAotZGVmIHNwbGl0ZHJpdmUocCk6Ci0gICAgIiIiU3BsaXQgYSBwYXRobmFtZSBpbnRvIGRyaXZlIGFuZCBwYXRoIHNwZWNpZmllcnMuIFJldHVybnMgYSAyLXR1cGxlCi0iKGRyaXZlLHBhdGgpIjsgIGVpdGhlciBwYXJ0IG1heSBiZSBlbXB0eSIiIgotICAgIGlmIHBbMToyXSA9PSAnOic6Ci0gICAgICAgIHJldHVybiBwWzA6Ml0sIHBbMjpdCi0gICAgcmV0dXJuICcnLCBwCi0KLQogIyBQYXJzZSBVTkMgcGF0aHMKIGRlZiBzcGxpdHVuYyhwKToKICAgICAiIiJTcGxpdCBhIHBhdGhuYW1lIGludG8gVU5DIG1vdW50IHBvaW50IGFuZCByZWxhdGl2ZSBwYXRoIHNwZWNpZmllcnMuCkBAIC0xMDMsNTcgKzgzLDYgQEAKICAgICByZXR1cm4gJycsIHAKIAogCi0jIFNwbGl0IGEgcGF0aCBpbiBoZWFkIChldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0ICcvJykgYW5kIHRhaWwgKHRoZQotIyByZXN0KS4gIEFmdGVyIHRoZSB0cmFpbGluZyAnLycgaXMgc3RyaXBwZWQsIHRoZSBpbnZhcmlhbnQKLSMgam9pbihoZWFkLCB0YWlsKSA9PSBwIGhvbGRzLgotIyBUaGUgcmVzdWx0aW5nIGhlYWQgd29uJ3QgZW5kIGluICcvJyB1bmxlc3MgaXQgaXMgdGhlIHJvb3QuCi0KLWRlZiBzcGxpdChwKToKLSAgICAiIiJTcGxpdCBhIHBhdGhuYW1lLgotCi0gICAgUmV0dXJuIHR1cGxlIChoZWFkLCB0YWlsKSB3aGVyZSB0YWlsIGlzIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpbmFsIHNsYXNoLgotICAgIEVpdGhlciBwYXJ0IG1heSBiZSBlbXB0eS4iIiIKLQotICAgIGQsIHAgPSBzcGxpdGRyaXZlKHApCi0gICAgIyBzZXQgaSB0byBpbmRleCBiZXlvbmQgcCdzIGxhc3Qgc2xhc2gKLSAgICBpID0gbGVuKHApCi0gICAgd2hpbGUgaSBhbmQgcFtpLTFdIG5vdCBpbiAnL1xcJzoKLSAgICAgICAgaSA9IGkgLSAxCi0gICAgaGVhZCwgdGFpbCA9IHBbOmldLCBwW2k6XSAgIyBub3cgdGFpbCBoYXMgbm8gc2xhc2hlcwotICAgICMgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBoZWFkLCB1bmxlc3MgaXQncyBhbGwgc2xhc2hlcwotICAgIGhlYWQyID0gaGVhZAotICAgIHdoaWxlIGhlYWQyIGFuZCBoZWFkMlstMV0gaW4gJy9cXCc6Ci0gICAgICAgIGhlYWQyID0gaGVhZDJbOi0xXQotICAgIGhlYWQgPSBoZWFkMiBvciBoZWFkCi0gICAgcmV0dXJuIGQgKyBoZWFkLCB0YWlsCi0KLQotIyBTcGxpdCBhIHBhdGggaW4gcm9vdCBhbmQgZXh0ZW5zaW9uLgotIyBUaGUgZXh0ZW5zaW9uIGlzIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgYXQgdGhlIGxhc3QgZG90IGluIHRoZSBsYXN0Ci0jIHBhdGhuYW1lIGNvbXBvbmVudDsgdGhlIHJvb3QgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhhdC4KLSMgSXQgaXMgYWx3YXlzIHRydWUgdGhhdCByb290ICsgZXh0ID09IHAuCi0KLWRlZiBzcGxpdGV4dChwKToKLSAgICAiIiJTcGxpdCB0aGUgZXh0ZW5zaW9uIGZyb20gYSBwYXRobmFtZS4KLQotICAgIEV4dGVuc2lvbiBpcyBldmVyeXRoaW5nIGZyb20gdGhlIGxhc3QgZG90IHRvIHRoZSBlbmQuCi0gICAgUmV0dXJuIChyb290LCBleHQpLCBlaXRoZXIgcGFydCBtYXkgYmUgZW1wdHkuIiIiCi0gICAgcm9vdCwgZXh0ID0gJycsICcnCi0gICAgZm9yIGMgaW4gcDoKLSAgICAgICAgaWYgYyBpbiBbJy8nLCdcXCddOgotICAgICAgICAgICAgcm9vdCwgZXh0ID0gcm9vdCArIGV4dCArIGMsICcnCi0gICAgICAgIGVsaWYgYyA9PSAnLic6Ci0gICAgICAgICAgICBpZiBleHQ6Ci0gICAgICAgICAgICAgICAgcm9vdCwgZXh0ID0gcm9vdCArIGV4dCwgYwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBleHQgPSBjCi0gICAgICAgIGVsaWYgZXh0OgotICAgICAgICAgICAgZXh0ID0gZXh0ICsgYwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcm9vdCA9IHJvb3QgKyBjCi0gICAgcmV0dXJuIHJvb3QsIGV4dAotCi0KICMgUmV0dXJuIHRoZSB0YWlsIChiYXNlbmFtZSkgcGFydCBvZiBhIHBhdGguCiAKIGRlZiBiYXNlbmFtZShwKToKQEAgLTE2OCw4NCArOTcsMTIgQEAKICAgICByZXR1cm4gc3BsaXQocClbMF0KIAogCi0jIFJldHVybiB0aGUgbG9uZ2VzdCBwcmVmaXggb2YgYWxsIGxpc3QgZWxlbWVudHMuCi0KLWRlZiBjb21tb25wcmVmaXgobSk6Ci0gICAgIkdpdmVuIGEgbGlzdCBvZiBwYXRobmFtZXMsIHJldHVybnMgdGhlIGxvbmdlc3QgY29tbW9uIGxlYWRpbmcgY29tcG9uZW50IgotICAgIGlmIG5vdCBtOiByZXR1cm4gJycKLSAgICBzMSA9IG1pbihtKQotICAgIHMyID0gbWF4KG0pCi0gICAgbiA9IG1pbihsZW4oczEpLCBsZW4oczIpKQotICAgIGZvciBpIGluIHhyYW5nZShuKToKLSAgICAgICAgaWYgczFbaV0gIT0gczJbaV06Ci0gICAgICAgICAgICByZXR1cm4gczFbOmldCi0gICAgcmV0dXJuIHMxWzpuXQotCi0KLSMgR2V0IHNpemUsIG10aW1lLCBhdGltZSBvZiBmaWxlcy4KLQotZGVmIGdldHNpemUoZmlsZW5hbWUpOgotICAgICIiIlJldHVybiB0aGUgc2l6ZSBvZiBhIGZpbGUsIHJlcG9ydGVkIGJ5IG9zLnN0YXQoKSIiIgotICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9zaXplCi0KLWRlZiBnZXRtdGltZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpIiIiCi0gICAgcmV0dXJuIG9zLnN0YXQoZmlsZW5hbWUpLnN0X210aW1lCi0KLWRlZiBnZXRhdGltZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBsYXN0IGFjY2VzcyB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpIiIiCi0gICAgcmV0dXJuIG9zLnN0YXQoZmlsZW5hbWUpLnN0X2F0aW1lCi0KLWRlZiBnZXRjdGltZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBjcmVhdGlvbiB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgotICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9jdGltZQotCi0jIElzIGEgcGF0aCBhIHN5bWJvbGljIGxpbms/Ci0jIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIG9uIHN5c3RlbXMgd2hlcmUgcG9zaXgubHN0YXQgZG9lc24ndCBleGlzdC4KLQotZGVmIGlzbGluayhwYXRoKToKLSAgICAiIiJUZXN0IGZvciBzeW1ib2xpYyBsaW5rLiAgT24gT1MvMiBhbHdheXMgcmV0dXJucyBmYWxzZSIiIgotICAgIHJldHVybiBGYWxzZQotCi0KLSMgRG9lcyBhIHBhdGggZXhpc3Q/Ci0jIFRoaXMgaXMgZmFsc2UgZm9yIGRhbmdsaW5nIHN5bWJvbGljIGxpbmtzLgotCi1kZWYgZXhpc3RzKHBhdGgpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzIiIiCi0gICAgdHJ5OgotICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIHJldHVybiBUcnVlCi0KKyMgYWxpYXMgZXhpc3RzIHRvIGxleGlzdHMKIGxleGlzdHMgPSBleGlzdHMKIAogCiAjIElzIGEgcGF0aCBhIGRpcmVjdG9yeT8KIAotZGVmIGlzZGlyKHBhdGgpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBkaXJlY3RvcnkiIiIKLSAgICB0cnk6Ci0gICAgICAgIHN0ID0gb3Muc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgcmV0dXJuIHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKQotCi0KLSMgSXMgYSBwYXRoIGEgcmVndWxhciBmaWxlPwotIyBUaGlzIGZvbGxvd3Mgc3ltYm9saWMgbGlua3MsIHNvIGJvdGggaXNsaW5rKCkgYW5kIGlzZGlyKCkgY2FuIGJlIHRydWUKLSMgZm9yIHRoZSBzYW1lIHBhdGguCi0KLWRlZiBpc2ZpbGUocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIiIgotICAgIHRyeToKLSAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICByZXR1cm4gc3RhdC5TX0lTUkVHKHN0LnN0X21vZGUpCi0KLQogIyBJcyBhIHBhdGggYSBtb3VudCBwb2ludD8gIEVpdGhlciBhIHJvb3QgKHdpdGggb3Igd2l0aG91dCBkcml2ZSBsZXR0ZXIpCiAjIG9yIGFuIFVOQyBwYXRoIHdpdGggYXQgbW9zdCBhIC8gb3IgXCBhZnRlciB0aGUgbW91bnQgcG9pbnQuCiAKQEAgLTI1OCwxMzEgKzExNSw2IEBACiAgICAgcmV0dXJuIGxlbihwKSA9PSAxIGFuZCBwWzBdIGluICcvXFwnCiAKIAotIyBEaXJlY3RvcnkgdHJlZSB3YWxrLgotIyBGb3IgZWFjaCBkaXJlY3RvcnkgdW5kZXIgdG9wIChpbmNsdWRpbmcgdG9wIGl0c2VsZiwgYnV0IGV4Y2x1ZGluZwotIyAnLicgYW5kICcuLicpLCBmdW5jKGFyZywgZGlybmFtZSwgZmlsZW5hbWVzKSBpcyBjYWxsZWQsIHdoZXJlCi0jIGRpcm5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBhbmQgZmlsZW5hbWVzIGlzIHRoZSBsaXN0Ci0jIG9mIGZpbGVzIChhbmQgc3ViZGlyZWN0b3JpZXMgZXRjLikgaW4gdGhlIGRpcmVjdG9yeS4KLSMgVGhlIGZ1bmMgbWF5IG1vZGlmeSB0aGUgZmlsZW5hbWVzIGxpc3QsIHRvIGltcGxlbWVudCBhIGZpbHRlciwKLSMgb3IgdG8gaW1wb3NlIGEgZGlmZmVyZW50IG9yZGVyIG9mIHZpc2l0aW5nLgotCi1kZWYgd2Fsayh0b3AsIGZ1bmMsIGFyZyk6Ci0gICAgIiIiRGlyZWN0b3J5IHRyZWUgd2FsayB3aHRoIGNhbGxiYWNrIGZ1bmN0aW9uLgotCi0gICAgd2Fsayh0b3AsIGZ1bmMsIGFyZykgY2FsbHMgZnVuYyhhcmcsIGQsIGZpbGVzKSBmb3IgZWFjaCBkaXJlY3RvcnkgZAotICAgIGluIHRoZSB0cmVlIHJvb3RlZCBhdCB0b3AgKGluY2x1ZGluZyB0b3AgaXRzZWxmKTsgZmlsZXMgaXMgYSBsaXN0Ci0gICAgb2YgYWxsIHRoZSBmaWxlcyBhbmQgc3ViZGlycyBpbiBkaXJlY3RvcnkgZC4iIiIKLSAgICB0cnk6Ci0gICAgICAgIG5hbWVzID0gb3MubGlzdGRpcih0b3ApCi0gICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICByZXR1cm4KLSAgICBmdW5jKGFyZywgdG9wLCBuYW1lcykKLSAgICBleGNlcHRpb25zID0gKCcuJywgJy4uJykKLSAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgaWYgbmFtZSBub3QgaW4gZXhjZXB0aW9uczoKLSAgICAgICAgICAgIG5hbWUgPSBqb2luKHRvcCwgbmFtZSkKLSAgICAgICAgICAgIGlmIGlzZGlyKG5hbWUpOgotICAgICAgICAgICAgICAgIHdhbGsobmFtZSwgZnVuYywgYXJnKQotCi0KLSMgRXhwYW5kIHBhdGhzIGJlZ2lubmluZyB3aXRoICd+JyBvciAnfnVzZXInLgotIyAnficgbWVhbnMgJEhPTUU7ICd+dXNlcicgbWVhbnMgdGhhdCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCi0jIElmIHRoZSBwYXRoIGRvZXNuJ3QgYmVnaW4gd2l0aCAnficsIG9yIGlmIHRoZSB1c2VyIG9yICRIT01FIGlzIHVua25vd24sCi0jIHRoZSBwYXRoIGlzIHJldHVybmVkIHVuY2hhbmdlZCAobGVhdmluZyBlcnJvciByZXBvcnRpbmcgdG8gd2hhdGV2ZXIKLSMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGV4cGFuZGVkIHBhdGggYXMgYXJndW1lbnQpLgotIyBTZWUgYWxzbyBtb2R1bGUgJ2dsb2InIGZvciBleHBhbnNpb24gb2YgKiwgPyBhbmQgWy4uLl0gaW4gcGF0aG5hbWVzLgotIyAoQSBmdW5jdGlvbiBzaG91bGQgYWxzbyBiZSBkZWZpbmVkIHRvIGRvIGZ1bGwgKnNoLXN0eWxlIGVudmlyb25tZW50Ci0jIHZhcmlhYmxlIGV4cGFuc2lvbi4pCi0KLWRlZiBleHBhbmR1c2VyKHBhdGgpOgotICAgICIiIkV4cGFuZCB+IGFuZCB+dXNlciBjb25zdHJ1Y3RzLgotCi0gICAgSWYgdXNlciBvciAkSE9NRSBpcyB1bmtub3duLCBkbyBub3RoaW5nLiIiIgotICAgIGlmIHBhdGhbOjFdICE9ICd+JzoKLSAgICAgICAgcmV0dXJuIHBhdGgKLSAgICBpLCBuID0gMSwgbGVuKHBhdGgpCi0gICAgd2hpbGUgaSA8IG4gYW5kIHBhdGhbaV0gbm90IGluICcvXFwnOgotICAgICAgICBpID0gaSArIDEKLSAgICBpZiBpID09IDE6Ci0gICAgICAgIGlmICdIT01FJyBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgdXNlcmhvbWUgPSBvcy5lbnZpcm9uWydIT01FJ10KLSAgICAgICAgZWxpZiBub3QgJ0hPTUVQQVRIJyBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBkcml2ZSA9IG9zLmVudmlyb25bJ0hPTUVEUklWRSddCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgZHJpdmUgPSAnJwotICAgICAgICAgICAgdXNlcmhvbWUgPSBqb2luKGRyaXZlLCBvcy5lbnZpcm9uWydIT01FUEFUSCddKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBwYXRoCi0gICAgcmV0dXJuIHVzZXJob21lICsgcGF0aFtpOl0KLQotCi0jIEV4cGFuZCBwYXRocyBjb250YWluaW5nIHNoZWxsIHZhcmlhYmxlIHN1YnN0aXR1dGlvbnMuCi0jIFRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6Ci0jICAgICAgIC0gbm8gZXhwYW5zaW9uIHdpdGhpbiBzaW5nbGUgcXVvdGVzCi0jICAgICAgIC0gbm8gZXNjYXBlIGNoYXJhY3RlciwgZXhjZXB0IGZvciAnJCQnIHdoaWNoIGlzIHRyYW5zbGF0ZWQgaW50byAnJCcKLSMgICAgICAgLSAke3Zhcm5hbWV9IGlzIGFjY2VwdGVkLgotIyAgICAgICAtIHZhcm5hbWVzIGNhbiBiZSBtYWRlIG91dCBvZiBsZXR0ZXJzLCBkaWdpdHMgYW5kIHRoZSBjaGFyYWN0ZXIgJ18nCi0jIFhYWCBXaXRoIENPTU1BTkQuQ09NIHlvdSBjYW4gdXNlIGFueSBjaGFyYWN0ZXJzIGluIGEgdmFyaWFibGUgbmFtZSwKLSMgWFhYIGV4Y2VwdCAnXnw8Pj0nLgotCi1kZWYgZXhwYW5kdmFycyhwYXRoKToKLSAgICAiIiJFeHBhbmQgc2hlbGwgdmFyaWFibGVzIG9mIGZvcm0gJHZhciBhbmQgJHt2YXJ9LgotCi0gICAgVW5rbm93biB2YXJpYWJsZXMgYXJlIGxlZnQgdW5jaGFuZ2VkLiIiIgotICAgIGlmICckJyBub3QgaW4gcGF0aDoKLSAgICAgICAgcmV0dXJuIHBhdGgKLSAgICBpbXBvcnQgc3RyaW5nCi0gICAgdmFyY2hhcnMgPSBzdHJpbmcubGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAnXy0nCi0gICAgcmVzID0gJycKLSAgICBpbmRleCA9IDAKLSAgICBwYXRobGVuID0gbGVuKHBhdGgpCi0gICAgd2hpbGUgaW5kZXggPCBwYXRobGVuOgotICAgICAgICBjID0gcGF0aFtpbmRleF0KLSAgICAgICAgaWYgYyA9PSAnXCcnOiAgICMgbm8gZXhwYW5zaW9uIHdpdGhpbiBzaW5nbGUgcXVvdGVzCi0gICAgICAgICAgICBwYXRoID0gcGF0aFtpbmRleCArIDE6XQotICAgICAgICAgICAgcGF0aGxlbiA9IGxlbihwYXRoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGluZGV4ID0gcGF0aC5pbmRleCgnXCcnKQotICAgICAgICAgICAgICAgIHJlcyA9IHJlcyArICdcJycgKyBwYXRoWzppbmRleCArIDFdCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICByZXMgPSByZXMgKyBwYXRoCi0gICAgICAgICAgICAgICAgaW5kZXggPSBwYXRobGVuIC0gMQotICAgICAgICBlbGlmIGMgPT0gJyQnOiAgIyB2YXJpYWJsZSBvciAnJCQnCi0gICAgICAgICAgICBpZiBwYXRoW2luZGV4ICsgMTppbmRleCArIDJdID09ICckJzoKLSAgICAgICAgICAgICAgICByZXMgPSByZXMgKyBjCi0gICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICAgIGVsaWYgcGF0aFtpbmRleCArIDE6aW5kZXggKyAyXSA9PSAneyc6Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbaW5kZXgrMjpdCi0gICAgICAgICAgICAgICAgcGF0aGxlbiA9IGxlbihwYXRoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXRoLmluZGV4KCd9JykKLSAgICAgICAgICAgICAgICAgICAgdmFyID0gcGF0aFs6aW5kZXhdCi0gICAgICAgICAgICAgICAgICAgIGlmIHZhciBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzICsgb3MuZW52aXJvblt2YXJdCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcyArIHBhdGgKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXRobGVuIC0gMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB2YXIgPSAnJwotICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0gICAgICAgICAgICAgICAgYyA9IHBhdGhbaW5kZXg6aW5kZXggKyAxXQotICAgICAgICAgICAgICAgIHdoaWxlIGMgIT0gJycgYW5kIGMgaW4gdmFyY2hhcnM6Ci0gICAgICAgICAgICAgICAgICAgIHZhciA9IHZhciArIGMKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICAgICAgICAgICAgYyA9IHBhdGhbaW5kZXg6aW5kZXggKyAxXQotICAgICAgICAgICAgICAgIGlmIHZhciBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgKyBvcy5lbnZpcm9uW3Zhcl0KLSAgICAgICAgICAgICAgICBpZiBjICE9ICcnOgotICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgKyBjCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXMgPSByZXMgKyBjCi0gICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0gICAgcmV0dXJuIHJlcwotCi0KICMgTm9ybWFsaXplIGEgcGF0aCwgZS5nLiBBLy9CLCBBLy4vQiBhbmQgQS9mb28vLi4vQiBhbGwgYmVjb21lIEEvQi4KIAogZGVmIG5vcm1wYXRoKHBhdGgpOgpkaWZmIC0tZ2l0IGEvTGliL3BkYi5weSBiL0xpYi9wZGIucHkKaW5kZXggMmJjODM2Zi4uODgzMDNkMCAxMDA3NTUKLS0tIGEvTGliL3BkYi5weQorKysgYi9MaWIvcGRiLnB5CkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcmV0dXJuIHN5cy5zdGRpbi5yZWFkbGluZSgpCiAKIGRlZiBmaW5kX2Z1bmN0aW9uKGZ1bmNuYW1lLCBmaWxlbmFtZSk6Ci0gICAgY3JlID0gcmUuY29tcGlsZShyJ2RlZlxzKyVzXHMqWyhdJyAlIGZ1bmNuYW1lKQorICAgIGNyZSA9IHJlLmNvbXBpbGUocidkZWZccyslc1xzKlsoXScgJSByZS5lc2NhcGUoZnVuY25hbWUpKQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lKQogICAgIGV4Y2VwdCBJT0Vycm9yOgpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2xpYi1zY3JpcHRwYWNrYWdlcy9TdGRTdWl0ZXMvQXBwbGVTY3JpcHRfU3VpdGUucHkgYi9MaWIvcGxhdC1tYWMvbGliLXNjcmlwdHBhY2thZ2VzL1N0ZFN1aXRlcy9BcHBsZVNjcmlwdF9TdWl0ZS5weQppbmRleCA1ZDAyZWEzLi43NzNkMWQ3IDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvbGliLXNjcmlwdHBhY2thZ2VzL1N0ZFN1aXRlcy9BcHBsZVNjcmlwdF9TdWl0ZS5weQorKysgYi9MaWIvcGxhdC1tYWMvbGliLXNjcmlwdHBhY2thZ2VzL1N0ZFN1aXRlcy9BcHBsZVNjcmlwdF9TdWl0ZS5weQpAQCAtMzAxLDcgKzMwMSw3IEBACiAgICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCiAKICAgICBkZWYgYXNfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJhc186IENvZXJjaW9uCisgICAgICAgICIiImFzOiBDb2VyY2lvbgogICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogYW4gQUUgb2JqZWN0IHJlZmVyZW5jZQogICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CiAgICAgICAgIFJldHVybnM6IGFueXRoaW5nCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1zdW5vczUvU1RST1BUUy5weSBiL0xpYi9wbGF0LXN1bm9zNS9TVFJPUFRTLnB5CmluZGV4IGU5NWRiOTMuLjQ5NzBiZDcgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LXN1bm9zNS9TVFJPUFRTLnB5CisrKyBiL0xpYi9wbGF0LXN1bm9zNS9TVFJPUFRTLnB5CkBAIC0xNTUwLDcgKzE1NTAsNyBAQAogQVNfUEFHTENLID0gMHg4MAogQVNfQ0xBSU1HQVAgPSAweDQwCiBBU19VTk1BUFdBSVQgPSAweDIwCi1kZWYgQVNfVFlQRV82NEJJVChhcyk6IHJldHVybiBcCitkZWYgQVNfVFlQRV82NEJJVChhc18pOiByZXR1cm4gXAogCiBBU19MUkVQX0xJTktFRExJU1QgPSAwCiBBU19MUkVQX1NLSVBMSVNUID0gMQpkaWZmIC0tZ2l0IGEvTGliL3Bvc2l4cGF0aC5weSBiL0xpYi9wb3NpeHBhdGgucHkKaW5kZXggOWVhYzZiYy4uMTUyMTIzNiAxMDA2NDQKLS0tIGEvTGliL3Bvc2l4cGF0aC5weQorKysgYi9MaWIvcG9zaXhwYXRoLnB5CkBAIC0xMiw2ICsxMiw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHN0YXQKK2Zyb20gZ2VuZXJpY3BhdGggaW1wb3J0ICoKIAogX19hbGxfXyA9IFsibm9ybWNhc2UiLCJpc2FicyIsImpvaW4iLCJzcGxpdGRyaXZlIiwic3BsaXQiLCJzcGxpdGV4dCIsCiAgICAgICAgICAgICJiYXNlbmFtZSIsImRpcm5hbWUiLCJjb21tb25wcmVmaXgiLCJnZXRzaXplIiwiZ2V0bXRpbWUiLApAQCAtMTA1LDUxICsxMDYsMjUgQEAKICAgICByZXR1cm4gJycsIHAKIAogCi0jIFJldHVybiB0aGUgdGFpbCAoYmFzZW5hbWUpIHBhcnQgb2YgYSBwYXRoLgorIyBSZXR1cm4gdGhlIHRhaWwgKGJhc2VuYW1lKSBwYXJ0IG9mIGEgcGF0aCwgc2FtZSBhcyBzcGxpdChwYXRoKVsxXS4KIAogZGVmIGJhc2VuYW1lKHApOgogICAgICIiIlJldHVybnMgdGhlIGZpbmFsIGNvbXBvbmVudCBvZiBhIHBhdGhuYW1lIiIiCi0gICAgcmV0dXJuIHNwbGl0KHApWzFdCisgICAgaSA9IHAucmZpbmQoJy8nKSArIDEKKyAgICByZXR1cm4gcFtpOl0KIAogCi0jIFJldHVybiB0aGUgaGVhZCAoZGlybmFtZSkgcGFydCBvZiBhIHBhdGguCisjIFJldHVybiB0aGUgaGVhZCAoZGlybmFtZSkgcGFydCBvZiBhIHBhdGgsIHNhbWUgYXMgc3BsaXQocGF0aClbMF0uCiAKIGRlZiBkaXJuYW1lKHApOgogICAgICIiIlJldHVybnMgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgYSBwYXRobmFtZSIiIgotICAgIHJldHVybiBzcGxpdChwKVswXQorICAgIGkgPSBwLnJmaW5kKCcvJykgKyAxCisgICAgaGVhZCA9IHBbOmldCisgICAgaWYgaGVhZCBhbmQgaGVhZCAhPSAnLycqbGVuKGhlYWQpOgorICAgICAgICBoZWFkID0gaGVhZC5yc3RyaXAoJy8nKQorICAgIHJldHVybiBoZWFkCiAKIAotIyBSZXR1cm4gdGhlIGxvbmdlc3QgcHJlZml4IG9mIGFsbCBsaXN0IGVsZW1lbnRzLgotCi1kZWYgY29tbW9ucHJlZml4KG0pOgotICAgICJHaXZlbiBhIGxpc3Qgb2YgcGF0aG5hbWVzLCByZXR1cm5zIHRoZSBsb25nZXN0IGNvbW1vbiBsZWFkaW5nIGNvbXBvbmVudCIKLSAgICBpZiBub3QgbTogcmV0dXJuICcnCi0gICAgczEgPSBtaW4obSkKLSAgICBzMiA9IG1heChtKQotICAgIG4gPSBtaW4obGVuKHMxKSwgbGVuKHMyKSkKLSAgICBmb3IgaSBpbiB4cmFuZ2Uobik6Ci0gICAgICAgIGlmIHMxW2ldICE9IHMyW2ldOgotICAgICAgICAgICAgcmV0dXJuIHMxWzppXQotICAgIHJldHVybiBzMVs6bl0KLQotIyBHZXQgc2l6ZSwgbXRpbWUsIGF0aW1lIG9mIGZpbGVzLgotCi1kZWYgZ2V0c2l6ZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBzaXplIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgotICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9zaXplCi0KLWRlZiBnZXRtdGltZShmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJuIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgotICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9tdGltZQotCi1kZWYgZ2V0YXRpbWUoZmlsZW5hbWUpOgotICAgICIiIlJldHVybiB0aGUgbGFzdCBhY2Nlc3MgdGltZSBvZiBhIGZpbGUsIHJlcG9ydGVkIGJ5IG9zLnN0YXQoKS4iIiIKLSAgICByZXR1cm4gb3Muc3RhdChmaWxlbmFtZSkuc3RfYXRpbWUKLQotZGVmIGdldGN0aW1lKGZpbGVuYW1lKToKLSAgICAiIiJSZXR1cm4gdGhlIG1ldGFkYXRhIGNoYW5nZSB0aW1lIG9mIGEgZmlsZSwgcmVwb3J0ZWQgYnkgb3Muc3RhdCgpLiIiIgotICAgIHJldHVybiBvcy5zdGF0KGZpbGVuYW1lKS5zdF9jdGltZQotCiAjIElzIGEgcGF0aCBhIHN5bWJvbGljIGxpbms/CiAjIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIG9uIHN5c3RlbXMgd2hlcmUgb3MubHN0YXQgZG9lc24ndCBleGlzdC4KIApAQCAtMTYxLDE5ICsxMzYsNiBAQAogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTTE5LKHN0LnN0X21vZGUpCiAKLQotIyBEb2VzIGEgcGF0aCBleGlzdD8KLSMgVGhpcyBpcyBmYWxzZSBmb3IgZGFuZ2xpbmcgc3ltYm9saWMgbGlua3MuCi0KLWRlZiBleGlzdHMocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIEZhbHNlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKLSAgICB0cnk6Ci0gICAgICAgIHN0ID0gb3Muc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgcmV0dXJuIFRydWUKLQotCiAjIEJlaW5nIHRydWUgZm9yIGRhbmdsaW5nIHN5bWJvbGljIGxpbmtzIGlzIGFsc28gdXNlZnVsLgogCiBkZWYgbGV4aXN0cyhwYXRoKToKQEAgLTE4NSwzMiArMTQ3LDYgQEAKICAgICByZXR1cm4gVHJ1ZQogCiAKLSMgSXMgYSBwYXRoIGEgZGlyZWN0b3J5PwotIyBUaGlzIGZvbGxvd3Mgc3ltYm9saWMgbGlua3MsIHNvIGJvdGggaXNsaW5rKCkgYW5kIGlzZGlyKCkgY2FuIGJlIHRydWUKLSMgZm9yIHRoZSBzYW1lIHBhdGguCi0KLWRlZiBpc2RpcihwYXRoKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgZGlyZWN0b3J5IiIiCi0gICAgdHJ5OgotICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIHJldHVybiBzdGF0LlNfSVNESVIoc3Quc3RfbW9kZSkKLQotCi0jIElzIGEgcGF0aCBhIHJlZ3VsYXIgZmlsZT8KLSMgVGhpcyBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLCBzbyBib3RoIGlzbGluaygpIGFuZCBpc2ZpbGUoKSBjYW4gYmUgdHJ1ZQotIyBmb3IgdGhlIHNhbWUgcGF0aC4KLQotZGVmIGlzZmlsZShwYXRoKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgcmVndWxhciBmaWxlIiIiCi0gICAgdHJ5OgotICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIHJldHVybiBzdGF0LlNfSVNSRUcoc3Quc3RfbW9kZSkKLQotCiAjIEFyZSB0d28gZmlsZW5hbWVzIHJlYWxseSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlPwogCiBkZWYgc2FtZWZpbGUoZjEsIGYyKToKQEAgLTMyOCw4ICsyNjQsNyBAQAogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gcGF0aAogICAgICAgICB1c2VyaG9tZSA9IHB3ZW50LnB3X2RpcgotICAgIGlmIHVzZXJob21lLmVuZHN3aXRoKCcvJyk6Ci0gICAgICAgIGkgKz0gMQorICAgIHVzZXJob21lID0gdXNlcmhvbWUucnN0cmlwKCcvJykKICAgICByZXR1cm4gdXNlcmhvbWUgKyBwYXRoW2k6XQogCiAKZGlmZiAtLWdpdCBhL0xpYi9wc3RhdHMucHkgYi9MaWIvcHN0YXRzLnB5CmluZGV4IDJhY2RhZGMuLmJhMGI4MDQgMTAwNjQ0Ci0tLSBhL0xpYi9wc3RhdHMucHkKKysrIGIvTGliL3BzdGF0cy5weQpAQCAtMTE2LDcgKzExNiw3IEBACiAKICAgICBkZWYgbG9hZF9zdGF0cyhzZWxmLCBhcmcpOgogICAgICAgICBpZiBub3QgYXJnOiAgc2VsZi5zdGF0cyA9IHt9Ci0gICAgICAgIGVsaWYgdHlwZShhcmcpID09IHR5cGUoIiIpOgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYXJnLCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgIGYgPSBvcGVuKGFyZywgJ3JiJykKICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBtYXJzaGFsLmxvYWQoZikKICAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL3B0eS5weSBiL0xpYi9wdHkucHkKaW5kZXggZmFlMTYyZC4uODg5MTEzYyAxMDA2NDQKLS0tIGEvTGliL3B0eS5weQorKysgYi9MaWIvcHR5LnB5CkBAIC0xMTgsNiArMTE4LDEwIEBACiAgICAgICAgIGlmIChzbGF2ZV9mZCA+IFNUREVSUl9GSUxFTk8pOgogICAgICAgICAgICAgb3MuY2xvc2UgKHNsYXZlX2ZkKQogCisgICAgICAgICMgRXhwbGljaXRseSBvcGVuIHRoZSB0dHkgdG8gbWFrZSBpdCBiZWNvbWUgYSBjb250cm9sbGluZyB0dHkuCisgICAgICAgIHRtcF9mZCA9IG9zLm9wZW4ob3MudHR5bmFtZShTVERPVVRfRklMRU5PKSwgb3MuT19SRFdSKQorICAgICAgICBvcy5jbG9zZSh0bXBfZmQpCisKICAgICAjIFBhcmVudCBhbmQgY2hpbGQgcHJvY2Vzcy4KICAgICByZXR1cm4gcGlkLCBtYXN0ZXJfZmQKIApkaWZmIC0tZ2l0IGEvTGliL3B5Y2xici5weSBiL0xpYi9weWNsYnIucHkKaW5kZXggMDczMTIyNC4uMDc5YjM4YyAxMDA2NDQKLS0tIGEvTGliL3B5Y2xici5weQorKysgYi9MaWIvcHljbGJyLnB5CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBlbHNlIGl0J3MgYSBuZXN0ZWQgZGVmCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgIyBpdCdzIGEgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgZGljdFttZXRoX25hbWVdID0gRnVuY3Rpb24obW9kdWxlLCBtZXRoX25hbWUsIGZpbGUsIGxpbmVubykKKyAgICAgICAgICAgICAgICAgICAgZGljdFttZXRoX25hbWVdID0gRnVuY3Rpb24oZnVsbG1vZHVsZSwgbWV0aF9uYW1lLCBmaWxlLCBsaW5lbm8pCiAgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKChOb25lLCB0aGlzaW5kZW50KSkgIyBNYXJrZXIgZm9yIG5lc3RlZCBmbnMKICAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gJ2NsYXNzJzoKICAgICAgICAgICAgICAgICBsaW5lbm8sIHRoaXNpbmRlbnQgPSBzdGFydApkaWZmIC0tZ2l0IGEvTGliL3NnbWxsaWIucHkgYi9MaWIvc2dtbGxpYi5weQppbmRleCAzMDIwZDExLi4zYWI1N2MyIDEwMDY0NAotLS0gYS9MaWIvc2dtbGxpYi5weQorKysgYi9MaWIvc2dtbGxpYi5weQpAQCAtMjksMTIgKzI5LDcgQEAKIHNob3J0dGFnb3BlbiA9IHJlLmNvbXBpbGUoJzxbYS16QS1aXVstLmEtekEtWjAtOV0qLycpCiBzaG9ydHRhZyA9IHJlLmNvbXBpbGUoJzwoW2EtekEtWl1bLS5hLXpBLVowLTldKikvKFteL10qKS8nKQogcGljbG9zZSA9IHJlLmNvbXBpbGUoJz4nKQotc3RhcnR0YWcgPSByZS5jb21waWxlKHInPFthLXpBLVpdWy1fLjphLXpBLVowLTldKlxzKignCi0gICAgICAgIHInXHMqKFthLXpBLVpfXVstOi5hLXpBLVpfMC05XSopKFxzKj1ccyonCi0gICAgICAgIHInKFwnW15cJ10qXCd8IlteIl0qInxbLWEtekEtWjAtOS4vLDo7KyolPyEmJFwoXClfIz1+QF0nCi0gICAgICAgIHInW11bXC1hLXpBLVowLTkuLyw6OysqJT8hJiRcKFwpXyM9flwnIkBdKig/PVtccz4vPF0pKSk/JwotICAgIHInKSpccyovP1xzKig/PVs8Pl0pJykKLWVuZHRhZyA9IHJlLmNvbXBpbGUocic8Lz9bYS16QS1aXVstXy46YS16QS1aMC05XSpccyovP1xzKig/PVs8Pl0pJykKK2VuZGJyYWNrZXQgPSByZS5jb21waWxlKCdbPD5dJykKIHRhZ2ZpbmQgPSByZS5jb21waWxlKCdbYS16QS1aXVstXy5hLXpBLVowLTldKicpCiBhdHRyZmluZCA9IHJlLmNvbXBpbGUoCiAgICAgcidccyooW2EtekEtWl9dWy06LmEtekEtWl8wLTldKikoXHMqPVxzKicKQEAgLTI1NCwxMCArMjQ5LDE0IEBACiAgICAgICAgICAgICBzZWxmLmZpbmlzaF9zaG9ydHRhZyh0YWcsIGRhdGEpCiAgICAgICAgICAgICBzZWxmLl9fc3RhcnR0YWdfdGV4dCA9IHJhd2RhdGFbc3RhcnRfcG9zOm1hdGNoLmVuZCgxKSArIDFdCiAgICAgICAgICAgICByZXR1cm4gawotICAgICAgICBtYXRjaCA9IHN0YXJ0dGFnLm1hdGNoKHJhd2RhdGEsIGkpCisgICAgICAgICMgWFhYIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHNraXAgbWF0Y2hpbmcgcXVvdGVzICgnIG9yICIpCisgICAgICAgICMgQXMgYSBzaG9ydGN1dCB3YXkgdG8gZXhpdCwgdGhpcyBpc24ndCBzbyBiYWQsIGJ1dCBzaG91bGRuJ3QKKyAgICAgICAgIyBiZSB1c2VkIHRvIGxvY2F0ZSB0aGUgYWN0dWFsIGVuZCBvZiB0aGUgc3RhcnQgdGFnIHNpbmNlIHRoZQorICAgICAgICAjIDwgb3IgPiBjaGFyYWN0ZXJzIG1heSBiZSBlbWJlZGRlZCBpbiBhbiBhdHRyaWJ1dGUgdmFsdWUuCisgICAgICAgIG1hdGNoID0gZW5kYnJhY2tldC5zZWFyY2gocmF3ZGF0YSwgaSsxKQogICAgICAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgaiA9IG1hdGNoLmVuZCgwKQorICAgICAgICBqID0gbWF0Y2guc3RhcnQoMCkKICAgICAgICAgIyBOb3cgcGFyc2UgdGhlIGRhdGEgYmV0d2VlbiBpKzEgYW5kIGogaW50byBhIHRhZyBhbmQgYXR0cnMKICAgICAgICAgYXR0cnMgPSBbXQogICAgICAgICBpZiByYXdkYXRhW2k6aSsyXSA9PSAnPD4nOgpAQCAtMzA2LDEwICszMDUsMTAgQEAKICAgICAjIEludGVybmFsIC0tIHBhcnNlIGVuZHRhZwogICAgIGRlZiBwYXJzZV9lbmR0YWcoc2VsZiwgaSk6CiAgICAgICAgIHJhd2RhdGEgPSBzZWxmLnJhd2RhdGEKLSAgICAgICAgbWF0Y2ggPSBlbmR0YWcubWF0Y2gocmF3ZGF0YSwgaSkKKyAgICAgICAgbWF0Y2ggPSBlbmRicmFja2V0LnNlYXJjaChyYXdkYXRhLCBpKzEpCiAgICAgICAgIGlmIG5vdCBtYXRjaDoKICAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBqID0gbWF0Y2guZW5kKDApCisgICAgICAgIGogPSBtYXRjaC5zdGFydCgwKQogICAgICAgICB0YWcgPSByYXdkYXRhW2krMjpqXS5zdHJpcCgpLmxvd2VyKCkKICAgICAgICAgaWYgcmF3ZGF0YVtqXSA9PSAnPic6CiAgICAgICAgICAgICBqID0gaisxCmRpZmYgLS1naXQgYS9MaWIvc210cGxpYi5weSBiL0xpYi9zbXRwbGliLnB5CmluZGV4IDljOGM0ZmEuLmE3MzA1Y2UgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwbGliLnB5CisrKyBiL0xpYi9zbXRwbGliLnB5CkBAIC01Miw5ICs1MiwxMCBAQAogX19hbGxfXyA9IFsiU01UUEV4Y2VwdGlvbiIsIlNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQiLCJTTVRQUmVzcG9uc2VFeGNlcHRpb24iLAogICAgICAgICAgICAiU01UUFNlbmRlclJlZnVzZWQiLCJTTVRQUmVjaXBpZW50c1JlZnVzZWQiLCJTTVRQRGF0YUVycm9yIiwKICAgICAgICAgICAgIlNNVFBDb25uZWN0RXJyb3IiLCJTTVRQSGVsb0Vycm9yIiwiU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IiLAotICAgICAgICAgICAicXVvdGVhZGRyIiwicXVvdGVkYXRhIiwiU01UUCJdCisgICAgICAgICAgICJxdW90ZWFkZHIiLCJxdW90ZWRhdGEiLCJTTVRQIiwiU01UUF9TU0wiXQogCiBTTVRQX1BPUlQgPSAyNQorU01UUF9TU0xfUE9SVCA9IDQ2NQogQ1JMRj0iXHJcbiIKIAogT0xEU1RZTEVfQVVUSCA9IHJlLmNvbXBpbGUociJhdXRoPSguKikiLCByZS5JKQpAQCAtMjQwLDYgKzI0MSw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXMgPSB7fQorICAgICAgICBzZWxmLmRlZmF1bHRfcG9ydCA9IFNNVFBfUE9SVAogICAgICAgICBpZiBob3N0OgogICAgICAgICAgICAgKGNvZGUsIG1zZykgPSBzZWxmLmNvbm5lY3QoaG9zdCwgcG9ydCkKICAgICAgICAgICAgIGlmIGNvZGUgIT0gMjIwOgpAQCAtMjcxLDYgKzI3MywxMyBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5kZWJ1Z2xldmVsID0gZGVidWdsZXZlbAogCisgICAgZGVmIF9nZXRfc29ja2V0KHNlbGYsYWYsIHNvY2t0eXBlLCBwcm90byxzYSk6CisgICAgICAgICMgVGhpcyBtYWtlcyBpdCBzaW1wbGVyIGZvciBTTVRQX1NTTCB0byB1c2UgdGhlIFNNVFAgY29ubmVjdCBjb2RlCisgICAgICAgICMgYW5kIGp1c3QgYWx0ZXIgdGhlIHNvY2tldCBjb25uZWN0aW9uIGJpdC4KKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludD4+c3RkZXJyLCAnY29ubmVjdDonLCAoaG9zdCwgcG9ydCkKKyAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3Qoc2EpCisKICAgICBkZWYgY29ubmVjdChzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0ID0gMCk6CiAgICAgICAgICIiIkNvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2ZW4gcG9ydC4KIApAQCAtMjg5LDE2ICsyOTgsMTQgQEAKICAgICAgICAgICAgICAgICB0cnk6IHBvcnQgPSBpbnQocG9ydCkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yLCAibm9ubnVtZXJpYyBwb3J0IgotICAgICAgICBpZiBub3QgcG9ydDogcG9ydCA9IFNNVFBfUE9SVAorICAgICAgICBpZiBub3QgcG9ydDogcG9ydCA9IHNlbGYuZGVmYXVsdF9wb3J0CiAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50Pj5zdGRlcnIsICdjb25uZWN0OicsIChob3N0LCBwb3J0KQogICAgICAgICBtc2cgPSAiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IgogICAgICAgICBzZWxmLnNvY2sgPSBOb25lCiAgICAgICAgIGZvciByZXMgaW4gc29ja2V0LmdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIDAsIHNvY2tldC5TT0NLX1NUUkVBTSk6CiAgICAgICAgICAgICBhZiwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNhID0gcmVzCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50Pj5zdGRlcnIsICdjb25uZWN0OicsIHNhCi0gICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3Qoc2EpCisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3NvY2tldChhZixzb2NrdHlwZSxwcm90byxzYSkKICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludD4+c3RkZXJyLCAnY29ubmVjdCBmYWlsOicsIG1zZwogICAgICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKQEAgLTcxNiw2ICs3MjMsMjggQEAKICAgICAgICAgc2VsZi5kb2NtZCgicXVpdCIpCiAgICAgICAgIHNlbGYuY2xvc2UoKQogCitjbGFzcyBTTVRQX1NTTChTTVRQKToKKyAgICAiIiIgVGhpcyBpcyBhIHN1YmNsYXNzIGRlcml2ZWQgZnJvbSBTTVRQIHRoYXQgY29ubmVjdHMgb3ZlciBhbiBTU0wgZW5jcnlwdGVkCisgICAgc29ja2V0ICh0byB1c2UgdGhpcyBjbGFzcyB5b3UgbmVlZCBhIHNvY2tldCBtb2R1bGUgdGhhdCB3YXMgY29tcGlsZWQgd2l0aCBTU0wKKyAgICBzdXBwb3J0KS4gSWYgaG9zdCBpcyBub3Qgc3BlY2lmaWVkLCAnJyAodGhlIGxvY2FsIGhvc3QpIGlzIHVzZWQuIElmIHBvcnQgaXMKKyAgICBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgU01UUC1vdmVyLVNTTCBwb3J0ICg0NjUpIGlzIHVzZWQuIGtleWZpbGUgYW5kIGNlcnRmaWxlCisgICAgYXJlIGFsc28gb3B0aW9uYWwgLSB0aGV5IGNhbiBjb250YWluIGEgUEVNIGZvcm1hdHRlZCBwcml2YXRlIGtleSBhbmQKKyAgICBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QgPSAnJywgcG9ydCA9IDAsIGxvY2FsX2hvc3RuYW1lID0gTm9uZSwKKyAgICAgICAgICAgICAgICAga2V5ZmlsZSA9IE5vbmUsIGNlcnRmaWxlID0gTm9uZSk6CisgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKKyAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgIFNNVFAuX19pbml0X18oc2VsZixob3N0LHBvcnQsbG9jYWxfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuZGVmYXVsdF9wb3J0ID0gU01UUF9TU0xfUE9SVAorCisgICAgZGVmIF9nZXRfc29ja2V0KHNlbGYsYWYsIHNvY2t0eXBlLCBwcm90byxzYSk6CisgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoYWYsIHNvY2t0eXBlLCBwcm90bykKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQ+PnN0ZGVyciwgJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQpCisgICAgICAgIHNlbGYuc29jay5jb25uZWN0KHNhKQorICAgICAgICBzc2xvYmogPSBzb2NrZXQuc3NsKHNlbGYuc29jaywgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlKQorICAgICAgICBzZWxmLnNvY2sgPSBTU0xGYWtlU29ja2V0KHNlbGYuc29jaywgc3Nsb2JqKQorICAgICAgICBzZWxmLmZpbGUgPSBTU0xGYWtlRmlsZShzc2xvYmopCiAKICMgVGVzdCB0aGUgc2VuZG1haWwgbWV0aG9kLCB3aGljaCB0ZXN0cyBtb3N0IG9mIHRoZSBvdGhlcnMuCiAjIE5vdGU6IFRoaXMgYWx3YXlzIHNlbmRzIHRvIGxvY2FsaG9zdC4KZGlmZiAtLWdpdCBhL0xpYi9zdWJwcm9jZXNzLnB5IGIvTGliL3N1YnByb2Nlc3MucHkKaW5kZXggNTVlMjY3Zi4uNjhhYjA1ZSAxMDA2NDQKLS0tIGEvTGliL3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3N1YnByb2Nlc3MucHkKQEAgLTk2Niw2ICs5NjYsOCBAQAogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZ3MsIHR5cGVzLlN0cmluZ1R5cGVzKToKICAgICAgICAgICAgICAgICBhcmdzID0gW2FyZ3NdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KGFyZ3MpCiAKICAgICAgICAgICAgIGlmIHNoZWxsOgogICAgICAgICAgICAgICAgIGFyZ3MgPSBbIi9iaW4vc2giLCAiLWMiXSArIGFyZ3MKQEAgLTEwMDEsMTQgKzEwMDMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZXJyd3JpdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKGVycndyaXRlLCAyKQogCi0gICAgICAgICAgICAgICAgICAgICMgQ2xvc2UgcGlwZSBmZHMuICBNYWtlIHN1cmUgd2UgZG9lc24ndCBjbG9zZSB0aGUgc2FtZQotICAgICAgICAgICAgICAgICAgICAjIGZkIG1vcmUgdGhhbiBvbmNlLgotICAgICAgICAgICAgICAgICAgICBpZiBwMmNyZWFkOgotICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UocDJjcmVhZCkKLSAgICAgICAgICAgICAgICAgICAgaWYgYzJwd3JpdGUgYW5kIGMycHdyaXRlIG5vdCBpbiAocDJjcmVhZCwpOgotICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoYzJwd3JpdGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGVycndyaXRlIGFuZCBlcnJ3cml0ZSBub3QgaW4gKHAyY3JlYWQsIGMycHdyaXRlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycndyaXRlKQorICAgICAgICAgICAgICAgICAgICAjIENsb3NlIHBpcGUgZmRzLiAgTWFrZSBzdXJlIHdlIGRvbid0IGNsb3NlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgICMgZmQgbW9yZSB0aGFuIG9uY2UsIG9yIHN0YW5kYXJkIGZkcy4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGZkIGluIHNldCgocDJjcmVhZCwgYzJwd3JpdGUsIGVycndyaXRlKSktc2V0KCgwLDEsMikpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmQ6IG9zLmNsb3NlKGZkKQogCiAgICAgICAgICAgICAgICAgICAgICMgQ2xvc2UgYWxsIG90aGVyIGZkcywgaWYgYXNrZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlX2ZkczoKZGlmZiAtLWdpdCBhL0xpYi90YXJmaWxlLnB5IGIvTGliL3RhcmZpbGUucHkKaW5kZXggZDIzODA2My4uMTQ1NTNhNyAxMDA2NDQKLS0tIGEvTGliL3RhcmZpbGUucHkKKysrIGIvTGliL3RhcmZpbGUucHkKQEAgLTQ5LDYgKzQ5LDcgQEAKIGltcG9ydCBlcnJubwogaW1wb3J0IHRpbWUKIGltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBjb3B5CiAKIGlmIHN5cy5wbGF0Zm9ybSA9PSAnbWFjJzoKICAgICAjIFRoaXMgbW9kdWxlIG5lZWRzIHdvcmsgZm9yIE1hY09TOSwgZXNwZWNpYWxseSBpbiB0aGUgYXJlYSBvZiBwYXRobmFtZQpAQCAtMTM4LDcgKzEzOSw3IEBACiBkZWYgc3RuKHMsIGxlbmd0aCk6CiAgICAgIiIiQ29udmVydCBhIHB5dGhvbiBzdHJpbmcgdG8gYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGJ1ZmZlci4KICAgICAiIiIKLSAgICByZXR1cm4gc1s6bGVuZ3RoLTFdICsgKGxlbmd0aCAtIGxlbihzKSAtIDEpICogTlVMICsgTlVMCisgICAgcmV0dXJuIHNbOmxlbmd0aF0gKyAobGVuZ3RoIC0gbGVuKHMpKSAqIE5VTAogCiBkZWYgbnRpKHMpOgogICAgICIiIkNvbnZlcnQgYSBudW1iZXIgZmllbGQgdG8gYSBweXRob24gbnVtYmVyLgpAQCAtMTQ2LDcgKzE0Nyw3IEBACiAgICAgIyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGVuY29kaW5ncyBmb3IgYSBudW1iZXIgZmllbGQsIHNlZQogICAgICMgaXRuKCkgYmVsb3cuCiAgICAgaWYgc1swXSAhPSBjaHIoMDIwMCk6Ci0gICAgICAgIG4gPSBpbnQocy5yc3RyaXAoTlVMKSBvciAiMCIsIDgpCisgICAgICAgIG4gPSBpbnQocy5yc3RyaXAoTlVMICsgIiAiKSBvciAiMCIsIDgpCiAgICAgZWxzZToKICAgICAgICAgbiA9IDBMCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4ocykgLSAxKToKQEAgLTc5NSw3ICs3OTYsNiBAQAogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUYXJJbmZvIG9iamVjdC4gbmFtZSBpcyB0aGUgb3B0aW9uYWwgbmFtZQogICAgICAgICAgICBvZiB0aGUgbWVtYmVyLgogICAgICAgICAiIiIKLQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lICAgICAgICAjIG1lbWJlciBuYW1lIChkaXJuYW1lcyBtdXN0IGVuZCB3aXRoICcvJykKICAgICAgICAgc2VsZi5tb2RlID0gMDY2NiAgICAgICAgIyBmaWxlIHBlcm1pc3Npb25zCiAgICAgICAgIHNlbGYudWlkID0gMCAgICAgICAgICAgICMgdXNlciBpZApAQCAtODA5LDggKzgwOSw2IEBACiAgICAgICAgIHNlbGYuZ25hbWUgPSAiZ3JvdXAiICAgICMgZ3JvdXAgbmFtZQogICAgICAgICBzZWxmLmRldm1ham9yID0gMCAgICAgICAjIGRldmljZSBtYWpvciBudW1iZXIKICAgICAgICAgc2VsZi5kZXZtaW5vciA9IDAgICAgICAgIyBkZXZpY2UgbWlub3IgbnVtYmVyCi0gICAgICAgIHNlbGYucHJlZml4ID0gIiIgICAgICAgICMgcHJlZml4IHRvIGZpbGVuYW1lIG9yIGluZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWJvdXQgc3BhcnNlIGZpbGVzCiAKICAgICAgICAgc2VsZi5vZmZzZXQgPSAwICAgICAgICAgIyB0aGUgdGFyIGhlYWRlciBzdGFydHMgaGVyZQogICAgICAgICBzZWxmLm9mZnNldF9kYXRhID0gMCAgICAjIHRoZSBmaWxlJ3MgZGF0YSBzdGFydHMgaGVyZQpAQCAtODQyLDI0ICs4NDAsNzQgQEAKICAgICAgICAgdGFyaW5mby5nbmFtZSA9IGJ1ZlsyOTc6MzI5XS5yc3RyaXAoTlVMKQogICAgICAgICB0YXJpbmZvLmRldm1ham9yID0gbnRpKGJ1ZlszMjk6MzM3XSkKICAgICAgICAgdGFyaW5mby5kZXZtaW5vciA9IG50aShidWZbMzM3OjM0NV0pCi0gICAgICAgIHRhcmluZm8ucHJlZml4ID0gYnVmWzM0NTo1MDBdCisgICAgICAgIHByZWZpeCA9IGJ1ZlszNDU6NTAwXS5yc3RyaXAoTlVMKQorCisgICAgICAgIGlmIHByZWZpeCBhbmQgbm90IHRhcmluZm8uaXNzcGFyc2UoKToKKyAgICAgICAgICAgIHRhcmluZm8ubmFtZSA9IHByZWZpeCArICIvIiArIHRhcmluZm8ubmFtZQogCiAgICAgICAgIGlmIHRhcmluZm8uY2hrc3VtIG5vdCBpbiBjYWxjX2Noa3N1bXMoYnVmKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgaGVhZGVyIikKICAgICAgICAgcmV0dXJuIHRhcmluZm8KIAogICAgIGRlZiB0b2J1ZihzZWxmLCBwb3NpeD1GYWxzZSk6Ci0gICAgICAgICIiIlJldHVybiBhIHRhciBoZWFkZXIgYmxvY2sgYXMgYSA1MTIgYnl0ZSBzdHJpbmcuCisgICAgICAgICIiIlJldHVybiBhIHRhciBoZWFkZXIgYXMgYSBzdHJpbmcgb2YgNTEyIGJ5dGUgYmxvY2tzLgogICAgICAgICAiIiIKKyAgICAgICAgYnVmID0gIiIKKyAgICAgICAgdHlwZSA9IHNlbGYudHlwZQorICAgICAgICBwcmVmaXggPSAiIgorCisgICAgICAgIGlmIHNlbGYubmFtZS5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgdHlwZSA9IERJUlRZUEUKKworICAgICAgICBpZiB0eXBlIGluIChHTlVUWVBFX0xPTkdOQU1FLCBHTlVUWVBFX0xPTkdMSU5LKToKKyAgICAgICAgICAgICMgUHJldmVudCAiLi8uL0BMb25nTGluayIgZnJvbSBiZWluZyBub3JtYWxpemVkLgorICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9IG5vcm1wYXRoKHNlbGYubmFtZSkKKworICAgICAgICBpZiB0eXBlID09IERJUlRZUEU6CisgICAgICAgICAgICAjIGRpcmVjdG9yaWVzIHNob3VsZCBlbmQgd2l0aCAnLycKKyAgICAgICAgICAgIG5hbWUgKz0gIi8iCisKKyAgICAgICAgbGlua25hbWUgPSBzZWxmLmxpbmtuYW1lCisgICAgICAgIGlmIGxpbmtuYW1lOgorICAgICAgICAgICAgIyBpZiBsaW5rbmFtZSBpcyBlbXB0eSB3ZSBlbmQgdXAgd2l0aCBhICcuJworICAgICAgICAgICAgbGlua25hbWUgPSBub3JtcGF0aChsaW5rbmFtZSkKKworICAgICAgICBpZiBwb3NpeDoKKyAgICAgICAgICAgIGlmIHNlbGYuc2l6ZSA+IE1BWFNJWkVfTUVNQkVSOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZpbGUgaXMgdG9vIGxhcmdlICg+PSA4IEdCKSIpCisKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmxpbmtuYW1lKSA+IExFTkdUSF9MSU5LOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxpbmtuYW1lIGlzIHRvbyBsb25nICg+JWQpIiAlIChMRU5HVEhfTElOSykpCisKKyAgICAgICAgICAgIGlmIGxlbihuYW1lKSA+IExFTkdUSF9OQU1FOgorICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVbOkxFTkdUSF9QUkVGSVggKyAxXQorICAgICAgICAgICAgICAgIHdoaWxlIHByZWZpeCBhbmQgcHJlZml4Wy0xXSAhPSAiLyI6CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeFs6LTFdCisKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVtsZW4ocHJlZml4KTpdCisgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4WzotMV0KKworICAgICAgICAgICAgICAgIGlmIG5vdCBwcmVmaXggb3IgbGVuKG5hbWUpID4gTEVOR1RIX05BTUU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5hbWUgaXMgdG9vIGxvbmciKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5saW5rbmFtZSkgPiBMRU5HVEhfTElOSzoKKyAgICAgICAgICAgICAgICBidWYgKz0gc2VsZi5fY3JlYXRlX2dudWxvbmcoc2VsZi5saW5rbmFtZSwgR05VVFlQRV9MT05HTElOSykKKworICAgICAgICAgICAgaWYgbGVuKG5hbWUpID4gTEVOR1RIX05BTUU6CisgICAgICAgICAgICAgICAgYnVmICs9IHNlbGYuX2NyZWF0ZV9nbnVsb25nKG5hbWUsIEdOVVRZUEVfTE9OR05BTUUpCisKICAgICAgICAgcGFydHMgPSBbCi0gICAgICAgICAgICBzdG4oc2VsZi5uYW1lLCAxMDApLAorICAgICAgICAgICAgc3RuKG5hbWUsIDEwMCksCiAgICAgICAgICAgICBpdG4oc2VsZi5tb2RlICYgMDc3NzcsIDgsIHBvc2l4KSwKICAgICAgICAgICAgIGl0bihzZWxmLnVpZCwgOCwgcG9zaXgpLAogICAgICAgICAgICAgaXRuKHNlbGYuZ2lkLCA4LCBwb3NpeCksCiAgICAgICAgICAgICBpdG4oc2VsZi5zaXplLCAxMiwgcG9zaXgpLAogICAgICAgICAgICAgaXRuKHNlbGYubXRpbWUsIDEyLCBwb3NpeCksCiAgICAgICAgICAgICAiICAgICAgICAiLCAjIGNoZWNrc3VtIGZpZWxkCi0gICAgICAgICAgICBzZWxmLnR5cGUsCisgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgc3RuKHNlbGYubGlua25hbWUsIDEwMCksCiAgICAgICAgICAgICBzdG4oTUFHSUMsIDYpLAogICAgICAgICAgICAgc3RuKFZFUlNJT04sIDIpLApAQCAtODY3LDE1ICs5MTUsMzggQEAKICAgICAgICAgICAgIHN0bihzZWxmLmduYW1lLCAzMiksCiAgICAgICAgICAgICBpdG4oc2VsZi5kZXZtYWpvciwgOCwgcG9zaXgpLAogICAgICAgICAgICAgaXRuKHNlbGYuZGV2bWlub3IsIDgsIHBvc2l4KSwKLSAgICAgICAgICAgIHN0bihzZWxmLnByZWZpeCwgMTU1KQorICAgICAgICAgICAgc3RuKHByZWZpeCwgMTU1KQogICAgICAgICBdCiAKLSAgICAgICAgYnVmID0gc3RydWN0LnBhY2soIiVkcyIgJSBCTE9DS1NJWkUsICIiLmpvaW4ocGFydHMpKQotICAgICAgICBjaGtzdW0gPSBjYWxjX2Noa3N1bXMoYnVmKVswXQotICAgICAgICBidWYgPSBidWZbOjE0OF0gKyAiJTA2b1wwIiAlIGNoa3N1bSArIGJ1ZlsxNTU6XQorICAgICAgICBidWYgKz0gc3RydWN0LnBhY2soIiVkcyIgJSBCTE9DS1NJWkUsICIiLmpvaW4ocGFydHMpKQorICAgICAgICBjaGtzdW0gPSBjYWxjX2Noa3N1bXMoYnVmWy1CTE9DS1NJWkU6XSlbMF0KKyAgICAgICAgYnVmID0gYnVmWzotMzY0XSArICIlMDZvXDAiICUgY2hrc3VtICsgYnVmWy0zNTc6XQogICAgICAgICBzZWxmLmJ1ZiA9IGJ1ZgogICAgICAgICByZXR1cm4gYnVmCiAKKyAgICBkZWYgX2NyZWF0ZV9nbnVsb25nKHNlbGYsIG5hbWUsIHR5cGUpOgorICAgICAgICAiIiJDcmVhdGUgYSBHTlUgbG9uZ25hbWUvbG9uZ2xpbmsgaGVhZGVyIGZyb20gbmFtZS4KKyAgICAgICAgICAgSXQgY29uc2lzdHMgb2YgYW4gZXh0ZW5kZWQgdGFyIGhlYWRlciwgd2l0aCB0aGUgbGVuZ3RoCisgICAgICAgICAgIG9mIHRoZSBsb25nbmFtZSBhcyBzaXplLCBmb2xsb3dlZCBieSBkYXRhIGJsb2NrcywKKyAgICAgICAgICAgd2hpY2ggY29udGFpbiB0aGUgbG9uZ25hbWUgYXMgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgbmFtZSArPSBOVUwKKworICAgICAgICB0YXJpbmZvID0gc2VsZi5fX2NsYXNzX18oKQorICAgICAgICB0YXJpbmZvLm5hbWUgPSAiLi8uL0BMb25nTGluayIKKyAgICAgICAgdGFyaW5mby50eXBlID0gdHlwZQorICAgICAgICB0YXJpbmZvLm1vZGUgPSAwCisgICAgICAgIHRhcmluZm8uc2l6ZSA9IGxlbihuYW1lKQorCisgICAgICAgICMgY3JlYXRlIGV4dGVuZGVkIGhlYWRlcgorICAgICAgICBidWYgPSB0YXJpbmZvLnRvYnVmKCkKKyAgICAgICAgIyBjcmVhdGUgbmFtZSBibG9ja3MKKyAgICAgICAgYnVmICs9IG5hbWUKKyAgICAgICAgYmxvY2tzLCByZW1haW5kZXIgPSBkaXZtb2QobGVuKG5hbWUpLCBCTE9DS1NJWkUpCisgICAgICAgIGlmIHJlbWFpbmRlciA+IDA6CisgICAgICAgICAgICBidWYgKz0gKEJMT0NLU0laRSAtIHJlbWFpbmRlcikgKiBOVUwKKyAgICAgICAgcmV0dXJuIGJ1ZgorCiAgICAgZGVmIGlzcmVnKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi50eXBlIGluIFJFR1VMQVJfVFlQRVMKICAgICBkZWYgaXNmaWxlKHNlbGYpOgpAQCAtMTM3OSw1MCArMTQ1MCwxMSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2soImF3IikKIAotICAgICAgICB0YXJpbmZvLm5hbWUgPSBub3JtcGF0aCh0YXJpbmZvLm5hbWUpCi0gICAgICAgIGlmIHRhcmluZm8uaXNkaXIoKToKLSAgICAgICAgICAgICMgZGlyZWN0b3JpZXMgc2hvdWxkIGVuZCB3aXRoICcvJwotICAgICAgICAgICAgdGFyaW5mby5uYW1lICs9ICIvIgorICAgICAgICB0YXJpbmZvID0gY29weS5jb3B5KHRhcmluZm8pCiAKLSAgICAgICAgaWYgdGFyaW5mby5saW5rbmFtZToKLSAgICAgICAgICAgIHRhcmluZm8ubGlua25hbWUgPSBub3JtcGF0aCh0YXJpbmZvLmxpbmtuYW1lKQotCi0gICAgICAgIGlmIHRhcmluZm8uc2l6ZSA+IE1BWFNJWkVfTUVNQkVSOgotICAgICAgICAgICAgaWYgc2VsZi5wb3NpeDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmaWxlIGlzIHRvbyBsYXJnZSAoPj0gOCBHQikiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgInRhcmZpbGU6IENyZWF0ZWQgR05VIHRhciBsYXJnZWZpbGUgaGVhZGVyIikKLQotCi0gICAgICAgIGlmIGxlbih0YXJpbmZvLmxpbmtuYW1lKSA+IExFTkdUSF9MSU5LOgotICAgICAgICAgICAgaWYgc2VsZi5wb3NpeDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsaW5rbmFtZSBpcyB0b28gbG9uZyAoPiVkKSIgJSAoTEVOR1RIX0xJTkspKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZ251bG9uZyh0YXJpbmZvLmxpbmtuYW1lLCBHTlVUWVBFX0xPTkdMSU5LKQotICAgICAgICAgICAgICAgIHRhcmluZm8ubGlua25hbWUgPSB0YXJpbmZvLmxpbmtuYW1lWzpMRU5HVEhfTElOSyAtMV0KLSAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgInRhcmZpbGU6IENyZWF0ZWQgR05VIHRhciBleHRlbnNpb24gTE9OR0xJTksiKQotCi0gICAgICAgIGlmIGxlbih0YXJpbmZvLm5hbWUpID4gTEVOR1RIX05BTUU6Ci0gICAgICAgICAgICBpZiBzZWxmLnBvc2l4OgotICAgICAgICAgICAgICAgIHByZWZpeCA9IHRhcmluZm8ubmFtZVs6TEVOR1RIX1BSRUZJWCArIDFdCi0gICAgICAgICAgICAgICAgd2hpbGUgcHJlZml4IGFuZCBwcmVmaXhbLTFdICE9ICIvIjoKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4WzotMV0KLQotICAgICAgICAgICAgICAgIG5hbWUgPSB0YXJpbmZvLm5hbWVbbGVuKHByZWZpeCk6XQotICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeFs6LTFdCi0KLSAgICAgICAgICAgICAgICBpZiBub3QgcHJlZml4IG9yIGxlbihuYW1lKSA+IExFTkdUSF9OQU1FOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuYW1lIGlzIHRvbyBsb25nICg+JWQpIiAlIChMRU5HVEhfTkFNRSkpCi0KLSAgICAgICAgICAgICAgICB0YXJpbmZvLm5hbWUgICA9IG5hbWUKLSAgICAgICAgICAgICAgICB0YXJpbmZvLnByZWZpeCA9IHByZWZpeAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZ251bG9uZyh0YXJpbmZvLm5hbWUsIEdOVVRZUEVfTE9OR05BTUUpCi0gICAgICAgICAgICAgICAgdGFyaW5mby5uYW1lID0gdGFyaW5mby5uYW1lWzpMRU5HVEhfTkFNRSAtIDFdCi0gICAgICAgICAgICAgICAgc2VsZi5fZGJnKDIsICJ0YXJmaWxlOiBDcmVhdGVkIEdOVSB0YXIgZXh0ZW5zaW9uIExPTkdOQU1FIikKLQotICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUodGFyaW5mby50b2J1ZihzZWxmLnBvc2l4KSkKLSAgICAgICAgc2VsZi5vZmZzZXQgKz0gQkxPQ0tTSVpFCisgICAgICAgIGJ1ZiA9IHRhcmluZm8udG9idWYoc2VsZi5wb3NpeCkKKyAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKGJ1ZikKKyAgICAgICAgc2VsZi5vZmZzZXQgKz0gbGVuKGJ1ZikKIAogICAgICAgICAjIElmIHRoZXJlJ3MgZGF0YSB0byBmb2xsb3csIGFwcGVuZCBpdC4KICAgICAgICAgaWYgZmlsZW9iaiBpcyBub3QgTm9uZToKQEAgLTE3ODEsMTIgKzE4MTMsNiBAQAogICAgICAgICBpZiB0YXJpbmZvLmlzcmVnKCkgYW5kIHRhcmluZm8ubmFtZS5lbmRzd2l0aCgiLyIpOgogICAgICAgICAgICAgdGFyaW5mby50eXBlID0gRElSVFlQRQogCi0gICAgICAgICMgVGhlIHByZWZpeCBmaWVsZCBpcyB1c2VkIGZvciBmaWxlbmFtZXMgPiAxMDAgaW4KLSAgICAgICAgIyB0aGUgUE9TSVggc3RhbmRhcmQuCi0gICAgICAgICMgbmFtZSA9IHByZWZpeCArICcvJyArIG5hbWUKLSAgICAgICAgdGFyaW5mby5uYW1lID0gbm9ybXBhdGgob3MucGF0aC5qb2luKHRhcmluZm8ucHJlZml4LnJzdHJpcChOVUwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyaW5mby5uYW1lKSkKLQogICAgICAgICAjIERpcmVjdG9yeSBuYW1lcyBzaG91bGQgaGF2ZSBhICcvJyBhdCB0aGUgZW5kLgogICAgICAgICBpZiB0YXJpbmZvLmlzZGlyKCk6CiAgICAgICAgICAgICB0YXJpbmZvLm5hbWUgKz0gIi8iCkBAIC0xOTExLDEwICsxOTM3LDYgQEAKICAgICAgICAgc2VsZi5vZmZzZXQgKz0gc2VsZi5fYmxvY2sodGFyaW5mby5zaXplKQogICAgICAgICB0YXJpbmZvLnNpemUgPSBvcmlnc2l6ZQogCi0gICAgICAgICMgQ2xlYXIgdGhlIHByZWZpeCBmaWVsZCBzbyB0aGF0IGl0IGlzIG5vdCB1c2VkCi0gICAgICAgICMgYXMgYSBwYXRobmFtZSBpbiBuZXh0KCkuCi0gICAgICAgIHRhcmluZm8ucHJlZml4ID0gIiIKLQogICAgICAgICByZXR1cm4gdGFyaW5mbwogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTcyLDMxICsxOTk0LDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBUYXJJdGVyKHNlbGYpCiAKLSAgICBkZWYgX2NyZWF0ZV9nbnVsb25nKHNlbGYsIG5hbWUsIHR5cGUpOgotICAgICAgICAiIiJXcml0ZSBhIEdOVSBsb25nbmFtZS9sb25nbGluayBtZW1iZXIgdG8gdGhlIFRhckZpbGUuCi0gICAgICAgICAgIEl0IGNvbnNpc3RzIG9mIGFuIGV4dGVuZGVkIHRhciBoZWFkZXIsIHdpdGggdGhlIGxlbmd0aAotICAgICAgICAgICBvZiB0aGUgbG9uZ25hbWUgYXMgc2l6ZSwgZm9sbG93ZWQgYnkgZGF0YSBibG9ja3MsCi0gICAgICAgICAgIHdoaWNoIGNvbnRhaW4gdGhlIGxvbmduYW1lIGFzIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZy4KLSAgICAgICAgIiIiCi0gICAgICAgIG5hbWUgKz0gTlVMCi0KLSAgICAgICAgdGFyaW5mbyA9IFRhckluZm8oKQotICAgICAgICB0YXJpbmZvLm5hbWUgPSAiLi8uL0BMb25nTGluayIKLSAgICAgICAgdGFyaW5mby50eXBlID0gdHlwZQotICAgICAgICB0YXJpbmZvLm1vZGUgPSAwCi0gICAgICAgIHRhcmluZm8uc2l6ZSA9IGxlbihuYW1lKQotCi0gICAgICAgICMgd3JpdGUgZXh0ZW5kZWQgaGVhZGVyCi0gICAgICAgIHNlbGYuZmlsZW9iai53cml0ZSh0YXJpbmZvLnRvYnVmKCkpCi0gICAgICAgIHNlbGYub2Zmc2V0ICs9IEJMT0NLU0laRQotICAgICAgICAjIHdyaXRlIG5hbWUgYmxvY2tzCi0gICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShuYW1lKQotICAgICAgICBibG9ja3MsIHJlbWFpbmRlciA9IGRpdm1vZCh0YXJpbmZvLnNpemUsIEJMT0NLU0laRSkKLSAgICAgICAgaWYgcmVtYWluZGVyID4gMDoKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShOVUwgKiAoQkxPQ0tTSVpFIC0gcmVtYWluZGVyKSkKLSAgICAgICAgICAgIGJsb2NrcyArPSAxCi0gICAgICAgIHNlbGYub2Zmc2V0ICs9IGJsb2NrcyAqIEJMT0NLU0laRQotCiAgICAgZGVmIF9kYmcoc2VsZiwgbGV2ZWwsIG1zZyk6CiAgICAgICAgICIiIldyaXRlIGRlYnVnZ2luZyBvdXRwdXQgdG8gc3lzLnN0ZGVyci4KICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9SRUFETUUgYi9MaWIvdGVzdC9SRUFETUUKaW5kZXggNDk2YzQwMC4uMjdmNjk2YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvUkVBRE1FCisrKyBiL0xpYi90ZXN0L1JFQURNRQpAQCAtMzc5LDggKzM3OSw4IEBACiAgICAgICBwb2ludCBudW1iZXJzIHdoZW4geW91IGV4cGVjdCB0aGVtIHRvIG9ubHkgYmUgYXBwcm94aW1hdGVseSBlcXVhbAogICAgICAgd2l0aGluZyBhIGZ1enogZmFjdG9yIChgYHRlc3Rfc3VwcG9ydC5GVVpaYGAsIHdoaWNoIGRlZmF1bHRzIHRvIDFlLTYpLgogCi0gICAgKiBgYGNoZWNrX3N5bnRheChzdGF0ZW1lbnQpYGAgLSBtYWtlIHN1cmUgdGhhdCB0aGUgc3RhdGVtZW50IGlzICpub3QqCi0gICAgICBjb3JyZWN0IFB5dGhvbiBzeW50YXguCisgICAgKiBgYGNoZWNrX3N5bnRheF9lcnJvcih0ZXN0Y2FzZSwgc3RhdGVtZW50KWBgIC0gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICBzdGF0ZW1lbnQgaXMgKm5vdCogY29ycmVjdCBQeXRob24gc3ludGF4LgogCiAKIFB5dGhvbiBhbmQgQyBzdGF0ZW1lbnQgY292ZXJhZ2UgcmVzdWx0cyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBhdApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvY3Jhc2hlcnMvYm9ndXNfc3JlX2J5dGVjb2RlLnB5IGIvTGliL3Rlc3QvY3Jhc2hlcnMvYm9ndXNfc3JlX2J5dGVjb2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZmM3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9jcmFzaGVycy9ib2d1c19zcmVfYnl0ZWNvZGUucHkKQEAgLTAsMCArMSw0NyBAQAorIiIiCitUaGUgcmVndWxhciBleHByZXNzaW9uIGVuZ2luZSBpbiAnX3NyZScgY2FuIHNlZ2ZhdWx0IHdoZW4gaW50ZXJwcmV0aW5nCitib2d1cyBieXRlY29kZS4KKworSXQgaXMgdW5jbGVhciB3aGV0aGVyIHRoaXMgaXMgYSByZWFsIGJ1ZyBvciBhICJ3b24ndCBmaXgiIGNhc2UgbGlrZQorYm9ndXNfY29kZV9vYmoucHksIGJlY2F1c2UgaXQgcmVxdWlyZXMgYnl0ZWNvZGUgdGhhdCBpcyBidWlsdCBieSBoYW5kLAorYXMgb3Bwb3NlZCB0byBjb21waWxlZCBieSAncmUnIGZyb20gYSBzdHJpbmctc291cmNlIHJlZ2V4cC4gIFRoZQorZGlmZmVyZW5jZSB3aXRoIGJvZ3VzX2NvZGVfb2JqLCB0aG91Z2gsIGlzIHRoYXQgdGhlIG9ubHkgZXhpc3RpbmcgcmVnZXhwCitjb21waWxlciBpcyB3cml0dGVuIGluIFB5dGhvbiwgc28gdGhhdCB0aGUgQyBjb2RlIGhhcyBubyBjaG9pY2UgYnV0CithY2NlcHQgYXJiaXRyYXJ5IGJ5dGVjb2RlIGZyb20gUHl0aG9uLWxldmVsLgorCitUaGUgdGVzdCBiZWxvdyBidWlsZHMgYW5kIHJ1bnMgcmFuZG9tIGJ5dGVjb2RlcyB1bnRpbCAnbWF0Y2gnIGNyYXNoZXMKK1B5dGhvbi4gIEkgaGF2ZSBub3QgaW52ZXN0aWdhdGVkIHdoeSBleGFjdGx5IHNlZ2ZhdWx0cyBvY2N1ciBub3IgaG93CitoYXJkIHRoZXkgd291bGQgYmUgdG8gZml4LiAgSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXMgb2YgJ2NvZGUnIHRoYXQKK3NlZ2ZhdWx0IGZvciBtZToKKworICAgIFsyMSwgNTA4MTQsIDgsIDI5LCAxNl0KKyAgICBbMjEsIDM5NjcsIDI2LCAxMCwgMjMsIDU0MTEzXQorICAgIFsyOSwgMjMsIDAsIDIsIDVdCisgICAgWzMxLCA2NDM1MSwgMCwgMjgsIDMsIDIyMjgxLCAyMCwgNDQ2MywgOSwgMjUsIDU5MTU0LCAxNTI0NSwgMiwKKyAgICAgICAgICAgICAgICAgIDE2MzQzLCAzLCAxMTYwMCwgMjQzODAsIDEwLCAzNzU1NiwgMTAsIDMxLCAxNSwgMzFdCisKK0hlcmUgaXMgYWxzbyBhICdjb2RlJyB0aGF0IHRyaWdnZXJzIGFuIGluZmluaXRlIHVuaW50ZXJydXB0aWJsZSBsb29wOgorCisgICAgWzI5LCAxLCA4LCAyMSwgMSwgNDMwODMsIDZdCisKKyIiIgorCitpbXBvcnQgX3NyZSwgcmFuZG9tCisKK2RlZiBwaWNrKCk6CisgICAgbiA9IHJhbmRvbS5yYW5kcmFuZ2UoLTY1NTM2LCA2NTUzNikKKyAgICBpZiBuIDwgMDoKKyAgICAgICAgbiAmPSAzMQorICAgIHJldHVybiBuCisKK3NzID0gWyIiLCAid29ybGQiLCAieCIgKiA1MDBdCisKK3doaWxlIDE6CisgICAgY29kZSA9IFtwaWNrKCkgZm9yIGkgaW4gcmFuZ2UocmFuZG9tLnJhbmRyYW5nZSg1LCAyNSkpXQorICAgIHByaW50IGNvZGUKKyAgICBwYXQgPSBfc3JlLmNvbXBpbGUoTm9uZSwgMCwgY29kZSkKKyAgICBmb3IgcyBpbiBzczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0Lm1hdGNoKHMpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jcmFzaGVycy9pbmZpbml0ZV9sb29wX3JlLnB5IGIvTGliL3Rlc3QvY3Jhc2hlcnMvaW5maW5pdGVfbG9vcF9yZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWVjYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvY3Jhc2hlcnMvaW5maW5pdGVfbG9vcF9yZS5weQpAQCAtMCwwICsxLDE2IEBACisKKyMgVGhpcyB3YXMgdGFrZW4gZnJvbSBodHRwOi8vcHl0aG9uLm9yZy9zZi8xNTQxNjk3CisjIEl0J3Mgbm90IHRlY2huaWNhbGx5IGEgY3Jhc2hlci4gIEl0IG1heSBub3QgZXZlbiB0cnVseSBiZSBpbmZpbml0ZSwKKyMgaG93ZXZlciwgSSBoYXZlbid0IHdhaXRlZCBhIGxvbmcgdGltZSB0byBzZWUgdGhlIHJlc3VsdC4gIEl0IHRha2VzCisjIDEwMCUgb2YgQ1BVIHdoaWxlIHJ1bm5pbmcgdGhpcyBhbmQgc2hvdWxkIGJlIGZpeGVkLgorCitpbXBvcnQgcmUKK3N0YXJ0dGFnID0gcmUuY29tcGlsZShyJzxbYS16QS1aXVstXy46YS16QS1aMC05XSpccyooJworICAgICAgICByJ1xzKihbYS16QS1aX11bLTouYS16QS1aXzAtOV0qKShccyo9XHMqJworICAgICAgICByJyhcJ1teXCddKlwnfCJbXiJdKiJ8Wy1hLXpBLVowLTkuLyw6OysqJT8hJiRcKFwpXyM9fkBdJworICAgICAgICByJ1tdW1wtYS16QS1aMC05Li8sOjsrKiU/ISYkXChcKV8jPX5cJyJAXSooPz1bXHM+LzxdKSkpPycKKyAgICByJykqXHMqLz9ccyooPz1bPD5dKScpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZm9vID0gJzx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHN0eWxlPSJib3JkZXItY29sbGFwc2UnCisgICAgc3RhcnR0YWcubWF0Y2goZm9vKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvY3Jhc2hlcnMvbG9vc2luZ19tcm9fcmVmLnB5IGIvTGliL3Rlc3QvY3Jhc2hlcnMvbG9vc2luZ19tcm9fcmVmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjgwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9jcmFzaGVycy9sb29zaW5nX21yb19yZWYucHkKQEAgLTAsMCArMSwzNiBAQAorIiIiCitUaGVyZSBpcyBhIHdheSB0byBwdXQga2V5cyBvZiBhbnkgdHlwZSBpbiBhIHR5cGUncyBkaWN0aW9uYXJ5LgorSSB0aGluayB0aGlzIGFsbG93cyB2YXJpb3VzIGtpbmRzIG9mIGNyYXNoZXMsIGJ1dCBzbyBmYXIgSSBoYXZlIG9ubHkKK2ZvdW5kIGEgY29udm9sdXRlZCBhdHRhY2sgb2YgX1B5VHlwZV9Mb29rdXAoKSwgd2hpY2ggdXNlcyB0aGUgbXJvIG9mIHRoZQordHlwZSB3aXRob3V0IGhvbGRpbmcgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0LiAgUHJvYmFibHkgd29ya3Mgd2l0aAorc3VwZXIuX19nZXRhdHRyaWJ1dGVfXygpIHRvbywgd2hpY2ggdXNlcyB0aGUgc2FtZSBraW5kIG9mIGNvZGUuCisiIiIKKworY2xhc3MgTXlLZXkob2JqZWN0KToKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKCdteWtleScpCisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICMgdGhlIGZvbGxvd2luZyBsaW5lIGRlY3JlZnMgdGhlIHByZXZpb3VzIFguX19tcm9fXworICAgICAgICBYLl9fYmFzZXNfXyA9IChCYXNlMiwpCisgICAgICAgICMgdHJhc2ggYWxsIHR1cGxlcyBvZiBsZW5ndGggMywgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGl0ZW1zIG9mCisgICAgICAgICMgdGhlIHByZXZpb3VzIFguX19tcm9fXyBhcmUgcmVhbGx5IGdhcmJhZ2UKKyAgICAgICAgeiA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgei5hcHBlbmQoKGksIE5vbmUsIE5vbmUpKQorICAgICAgICByZXR1cm4gLTEKKworCitjbGFzcyBCYXNlKG9iamVjdCk6CisgICAgbXlrZXkgPSAnZnJvbSBCYXNlJworCitjbGFzcyBCYXNlMihvYmplY3QpOgorICAgIG15a2V5ID0gJ2Zyb20gQmFzZTInCisKK2NsYXNzIFgoQmFzZSk6CisgICAgIyB5b3UgY2FuJ3QgYWRkIGEgbm9uLXN0cmluZyBrZXkgdG8gWC5fX2RpY3RfXywgYnV0IGl0IGNhbiBiZQorICAgICMgdGhlcmUgZnJvbSB0aGUgYmVnaW5uaW5nIDotKQorICAgIGxvY2FscygpW015S2V5KCldID0gNQorCitwcmludCBYLm15a2V5CisjIEkgZ2V0IGEgc2VnZmF1bHQsIG9yIGEgc2xpZ2h0bHkgd3JvbmcgYXNzZXJ0aW9uIGVycm9yIGluIGEgZGVidWcgYnVpbGQuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9saXN0X3Rlc3RzLnB5IGIvTGliL3Rlc3QvbGlzdF90ZXN0cy5weQppbmRleCA0NTNjNTFjLi5mYzFhNmMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9saXN0X3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2xpc3RfdGVzdHMucHkKQEAgLTI2OSw3ICsyNjksNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuaW5zZXJ0KQogCiAgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgotICAgICAgICBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKICAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFstMSwgMCwgMV0pCiAgICAgICAgIGEucG9wKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbLTEsIDBdKQpAQCAtMjgxLDggKzI4MCw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEucG9wKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEucG9wLCA0MiwgNDIpCiAgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMTAsIDIwLCAzMCwgNDBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucG9wKERlY2ltYWwoMikpLCAyMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5wb3AsIERlY2ltYWwoMjUpKQogCiAgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgogICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDAsIDFdKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfTWltZVdyaXRlciBiL0xpYi90ZXN0L291dHB1dC90ZXN0X01pbWVXcml0ZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliOTdkOTMuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfTWltZVdyaXRlcgorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi10ZXN0X01pbWVXcml0ZXIKLUZyb206IGJ3YXJzYXdAY25yaS5yZXN0b24udmEudXMKLURhdGU6IE1vbiBGZWIgMTIgMTc6MjE6NDggRVNUIDE5OTYKLVRvOiBrc3Mtc3VibWl0QGNucmkucmVzdG9uLnZhLnVzCi1NSU1FLVZlcnNpb246IDEuMAotQ29udGVudC1UeXBlOiBtdWx0aXBhcnQva25vd2JvdDsKLSAgICBib3VuZGFyeT0iODAxc3BhbTk5OSI7Ci0gICAgdmVyc2lvbj0iMC4xIgotCi1UaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgotCi0tLTgwMXNwYW05OTkKLUNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2tub3dib3QtbWV0YWRhdGE7Ci0gICAgYm91bmRhcnk9IjgwMnNwYW05OTkiCi0KLQotLS04MDJzcGFtOTk5Ci1Db250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCi1LUC1NZXRhZGF0YS1UeXBlOiBzaW1wbGUKLUtQLUFjY2VzczogcmVhZC1vbmx5Ci0KLUtQTUQtSW50ZXJwcmV0ZXI6IHB5dGhvbgotS1BNRC1JbnRlcnByZXRlci1WZXJzaW9uOiAxLjMKLUtQTUQtT3duZXItTmFtZTogQmFycnkgV2Fyc2F3Ci1LUE1ELU93bmVyLVJlbmRlenZvdXM6IGJ3YXJzYXdAY25yaS5yZXN0b24udmEudXMKLUtQTUQtSG9tZS1LU1M6IGtzcy5jbnJpLnJlc3Rvbi52YS51cwotS1BNRC1JZGVudGlmaWVyOiBoZGw6Ly9jbnJpLmtzcy9teV9maXJzdF9rbm93Ym90Ci1LUE1ELUxhdW5jaC1EYXRlOiBNb24gRmViIDEyIDE2OjM5OjAzIEVTVCAxOTk2Ci0KLS0tODAyc3BhbTk5OQotQ29udGVudC1UeXBlOiB0ZXh0L2lzbAotS1AtTWV0YWRhdGEtVHlwZTogY29tcGxleAotS1AtTWV0YWRhdGEtS2V5OiBjb25uZWN0aW9uCi1LUC1BY2Nlc3M6IHJlYWQtb25seQotS1AtQ29ubmVjdGlvbi1EZXNjcmlwdGlvbjogQmFycnkncyBCaWcgQmFzcyBCdXNpbmVzcwotS1AtQ29ubmVjdGlvbi1JZDogQjQKLUtQLUNvbm5lY3Rpb24tRGlyZWN0aW9uOiBjbGllbnQKLQotSU5URVJGQUNFIFNlbGxlci0xOwotCi1UWVBFIFNlbGxlciA9IE9CSkVDVAotICAgIERPQ1VNRU5UQVRJT04gIkEgc2ltcGxlIFNlbGxlciBpbnRlcmZhY2UgdG8gdGVzdCBJTFUiCi0gICAgTUVUSE9EUwotICAgICAgICAgICAgcHJpY2UoKTpJTlRFR0VSLAotICAgIEVORDsKLQotLS04MDJzcGFtOTk5Ci1Db250ZW50LVR5cGU6IG1lc3NhZ2UvZXh0ZXJuYWwtYm9keTsKLSAgICBhY2Nlc3MtdHlwZT0iVVJMIjsKLSAgICBVUkw9ImhkbDovL2Nucmkua3NzL2dlbmVyaWMta25vd2JvdCIKLQotQ29udGVudC1UeXBlOiB0ZXh0L2lzbAotS1AtTWV0YWRhdGEtVHlwZTogY29tcGxleAotS1AtTWV0YWRhdGEtS2V5OiBnZW5lcmljLWludGVyZmFjZQotS1AtQWNjZXNzOiByZWFkLW9ubHkKLUtQLUNvbm5lY3Rpb24tRGVzY3JpcHRpb246IEdlbmVyaWMgSW50ZXJmYWNlIGZvciBBbGwgS25vd2JvdHMKLUtQLUNvbm5lY3Rpb24tSWQ6IGdlbmVyaWMta3AKLUtQLUNvbm5lY3Rpb24tRGlyZWN0aW9uOiBjbGllbnQKLQotCi0tLTgwMnNwYW05OTktLQotCi0tLTgwMXNwYW05OTkKLUNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2tub3dib3QtY29kZTsKLSAgICBib3VuZGFyeT0iODAzc3BhbTk5OSIKLQotCi0tLTgwM3NwYW05OTkKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgotS1AtTW9kdWxlLU5hbWU6IEJ1eWVyS1AKLQotY2xhc3MgQnV5ZXI6Ci0gICAgZGVmIF9fc2V0dXBfXyhzZWxmLCBtYXhwcmljZSk6Ci0gICAgICAgIHNlbGYuX21heHByaWNlID0gbWF4cHJpY2UKLQotICAgIGRlZiBfX21haW5fXyhzZWxmLCBrb3MpOgotICAgICAgICAiIiJFbnRyeSBwb2ludCB1cG9uIGFycml2YWwgYXQgYSBuZXcgS09TLiIiIgotICAgICAgICBicm9rZXIgPSBrb3MuYnJva2VyKCkKLSAgICAgICAgIyBCNCA9PSBCYXJyeSdzIEJpZyBCYXNzIEJ1c2luZXNzIDotKQotICAgICAgICBzZWxsZXIgPSBicm9rZXIubG9va3VwKCdTZWxsZXJfMS5TZWxsZXInLCAnQjQnKQotICAgICAgICBpZiBzZWxsZXI6Ci0gICAgICAgICAgICBwcmljZSA9IHNlbGxlci5wcmljZSgpCi0gICAgICAgICAgICBwcmludCAnU2VsbGVyIHdhbnRzICQnLCBwcmljZSwgJy4uLiAnCi0gICAgICAgICAgICBpZiBwcmljZSA+IHNlbGYuX21heHByaWNlOgotICAgICAgICAgICAgICAgIHByaW50ICd0b28gbXVjaCEnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50ICJJJ2xsIHRha2UgaXQhIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgJ25vIHNlbGxlciBmb3VuZCBoZXJlJwotCi0tLTgwM3NwYW05OTktLQotCi0tLTgwMXNwYW05OTkKLUNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2tub3dib3Qtc3RhdGU7Ci0gICAgYm91bmRhcnk9IjgwNHNwYW05OTkiCi1LUC1NYWluLU1vZHVsZTogbWFpbgotCi0KLS0tODA0c3BhbTk5OQotQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCi1LUC1Nb2R1bGUtTmFtZTogbWFpbgotCi0jIGluc3RhbnRpYXRlIGEgYnV5ZXIgaW5zdGFuY2UgYW5kIHB1dCBpdCBpbiBhIG1hZ2ljIHBsYWNlIGZvciB0aGUgS09TCi0jIHRvIGZpbmQuCi1fX2twX18gPSBCdXllcigpCi1fX2twX18uX19zZXR1cF9fKDUwMCkKLQotLS04MDRzcGFtOTk5LS0KLQotLS04MDFzcGFtOTk5LS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L291dHB1dC90ZXN0X2NnaSBiL0xpYi90ZXN0L291dHB1dC90ZXN0X2NnaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZlZGRmYS4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9jZ2kKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi10ZXN0X2NnaQotJycgPT4gW10KLScmJyA9PiBbXQotJyYmJyA9PiBbXQotJz0nID0+IFsoJycsICcnKV0KLSc9YScgPT4gWygnJywgJ2EnKV0KLSdhJyA9PiBbKCdhJywgJycpXQotJ2E9JyA9PiBbKCdhJywgJycpXQotJ2E9JyA9PiBbKCdhJywgJycpXQotJyZhPWInID0+IFsoJ2EnLCAnYicpXQotJ2E9YStiJmI9YitjJyA9PiBbKCdhJywgJ2EgYicpLCAoJ2InLCAnYiBjJyldCi0nYT0xJmE9MicgPT4gWygnYScsICcxJyksICgnYScsICcyJyldCi0nJwotJyYnCi0nJiYnCi0nOycKLSc7JjsnCi0nPScKLSc9Jj0nCi0nPTs9JwotJz1hJwotJyY9YScKLSc9YSYnCi0nPSZhJwotJ2I9YScKLSdiKz1hJwotJ2E9Yj1hJwotJ2E9K2I9YScKLScmYj1hJwotJ2ImPWEnCi0nYT1hK2ImYj1iK2MnCi0nYT1hK2ImYT1iK2EnCi0neD0xJnk9Mi4wJno9Mi0zLiUyYjAnCi0neD0xO3k9Mi4wJno9Mi0zLiUyYjAnCi0neD0xO3k9Mi4wO3o9Mi0zLiUyYjAnCi0nSGJjNTE2MTE2OGM1NDIzMzM2MzMzMTVkZWUxMTgyMjI3OmtleV9zdG9yZV9zZXFpZD00MDAwMDYmY3V5ZXI9ciZ2aWV3PWJ1c3RvbWVyJm9yZGVyX2lkPTBiYjJlMjQ4NjM4ODMzZDQ4Y2I3ZmVkMzAwMDAwZjFiJmV4cGlyZT05NjQ1NDYyNjMmbG9iYWxlPWVuLVVTJmtpZD0xMzAwMDMuMzAwMDM4JnNzPWVudicKLSdncm91cF9pZD01NDcwJnNldD1jdXN0b20mX2Fzc2lnbmVkX3RvPTMxMzkyJl9zdGF0dXM9MSZfY2F0ZWdvcnk9MTAwJlNVQk1JVD1Ccm93c2UnCi1UZXN0aW5nIGxvZwotVGVzdGluZyBpbml0bG9nIDEKLVRlc3RpbmcgbG9nIDIKLVRlc3QgRmllbGRTdG9yYWdlIG1ldGhvZHMgdGhhdCB1c2UgcmVhZGxpbmUKLVRlc3QgYmFzaWMgRmllbGRTdG9yYWdlIG11bHRpcGFydCBwYXJzaW5nCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9jb29raWUgYi9MaWIvdGVzdC9vdXRwdXQvdGVzdF9jb29raWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YzczMjguLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfY29va2llCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotdGVzdF9jb29raWUKLTxTaW1wbGVDb29raWU6IGNoaXBzPSdhaG95JyB2aWVubmE9J2Zpbmdlcic+Ci1TZXQtQ29va2llOiBjaGlwcz1haG95Ci1TZXQtQ29va2llOiB2aWVubmE9ZmluZ2VyCi0gIGNoaXBzICdhaG95JyAnYWhveScKLVNldC1Db29raWU6IGNoaXBzPWFob3kKLSAgdmllbm5hICdmaW5nZXInICdmaW5nZXInCi1TZXQtQ29va2llOiB2aWVubmE9ZmluZ2VyCi08U2ltcGxlQ29va2llOiBrZWVibGVyPSdFPW1jMjsgTD0iTG92ZXMiOyBmdWRnZT1cbjsnPgotU2V0LUNvb2tpZToga2VlYmxlcj0iRT1tYzI7IEw9XCJMb3Zlc1wiOyBmdWRnZT1cMDEyOyIKLSAga2VlYmxlciAnRT1tYzI7IEw9IkxvdmVzIjsgZnVkZ2U9XG47JyAnRT1tYzI7IEw9IkxvdmVzIjsgZnVkZ2U9XG47JwotU2V0LUNvb2tpZToga2VlYmxlcj0iRT1tYzI7IEw9XCJMb3Zlc1wiOyBmdWRnZT1cMDEyOyIKLTxTaW1wbGVDb29raWU6IGtlZWJsZXI9J0U9bWMyJz4KLVNldC1Db29raWU6IGtlZWJsZXI9RT1tYzIKLSAga2VlYmxlciAnRT1tYzInICdFPW1jMicKLVNldC1Db29raWU6IGtlZWJsZXI9RT1tYzIKLVNldC1Db29raWU6IEN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgUGF0aD0vYWNtZQotCi0gICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICAgICAgPCEtLSBiZWdpbiBoaWRpbmcKLSAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgUGF0aD0vYWNtZTsgVmVyc2lvbj0xIjsKLSAgICAgICAgLy8gZW5kIGhpZGluZyAtLT4KLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIAotCi0gICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICAgICAgPCEtLSBiZWdpbiBoaWRpbmcKLSAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgUGF0aD0vYWNtZSI7Ci0gICAgICAgIC8vIGVuZCBoaWRpbmcgLS0+Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICAKLUlmIGFueXRoaW5nIGJsb3dzIHVwIGFmdGVyIHRoaXMgbGluZSwgaXQncyBmcm9tIENvb2tpZSdzIGRvY3Rlc3QuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9nbG9iYWwgYi9MaWIvdGVzdC9vdXRwdXQvdGVzdF9nbG9iYWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MjdhMjkuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfZ2xvYmFsCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi10ZXN0X2dsb2JhbAotZ290IFN5bnRheEVycm9yIGFzIGV4cGVjdGVkCi1nb3QgU3ludGF4RXJyb3IgYXMgZXhwZWN0ZWQKLWdvdCBTeW50YXhFcnJvciBhcyBleHBlY3RlZAotYXMgZXhwZWN0ZWQsIG5vIFN5bnRheEVycm9yCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9ncmFtbWFyIGIvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfZ3JhbW1hcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzMzI3Ni4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9ncmFtbWFyCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotdGVzdF9ncmFtbWFyCi0xLiBQYXJzZXIKLTEuMSBUb2tlbnMKLTEuMS4xIEJhY2tzbGFzaGVzCi0xLjEuMiBOdW1lcmljIGxpdGVyYWxzCi0xLjEuMi4xIFBsYWluIGludGVnZXJzCi0xLjEuMi4yIExvbmcgaW50ZWdlcnMKLTEuMS4yLjMgRmxvYXRpbmcgcG9pbnQKLTEuMS4zIFN0cmluZyBsaXRlcmFscwotMS4xLjQgRWxsaXBzaXMgbGl0ZXJhbAotMS4yIEdyYW1tYXIKLXNpbmdsZV9pbnB1dAotZmlsZV9pbnB1dAotZXhwcl9pbnB1dAotZXZhbF9pbnB1dAotZnVuY2RlZgotbGFtYmRlZgotc2ltcGxlX3N0bXQKLWV4cHJfc3RtdAotcHJpbnRfc3RtdAotMSAyIDMKLTEgMiAzCi0xIDEgMQotZXh0ZW5kZWQgcHJpbnRfc3RtdAotMSAyIDMKLTEgMiAzCi0xIDEgMQotaGVsbG8gd29ybGQKLWRlbF9zdG10Ci1wYXNzX3N0bXQKLWZsb3dfc3RtdAotYnJlYWtfc3RtdAotY29udGludWVfc3RtdAotY29udGludWUgKyB0cnkvZXhjZXB0IG9rCi1jb250aW51ZSArIHRyeS9maW5hbGx5IG9rCi10ZXN0aW5nIGNvbnRpbnVlIGFuZCBicmVhayBpbiB0cnkvZXhjZXB0IGluIGxvb3AKLXJldHVybl9zdG10Ci15aWVsZF9zdG10Ci1yYWlzZV9zdG10Ci1pbXBvcnRfbmFtZQotaW1wb3J0X2Zyb20KLWdsb2JhbF9zdG10Ci1hc3NlcnRfc3RtdAotaWZfc3RtdAotd2hpbGVfc3RtdAotZm9yX3N0bXQKLXRyeV9zdG10Ci1zdWl0ZQotdGVzdAotY29tcGFyaXNvbgotYmluYXJ5IG1hc2sgb3BzCi1zaGlmdCBvcHMKLWFkZGl0aXZlIG9wcwotbXVsdGlwbGljYXRpdmUgb3BzCi11bmFyeSBvcHMKLXNlbGVjdG9ycwotCi1bMSwgKDEsKSwgKDEsIDIpLCAoMSwgMiwgMyldCi1hdG9tcwotY2xhc3NkZWYKLVsnQXBwbGUnLCAnQmFuYW5hJywgJ0NvY28gIG51dCddCi1bMywgNiwgOSwgMTIsIDE1XQotWzMsIDQsIDVdCi1bKDEsICdBcHBsZScpLCAoMSwgJ0JhbmFuYScpLCAoMSwgJ0NvY29udXQnKSwgKDIsICdBcHBsZScpLCAoMiwgJ0JhbmFuYScpLCAoMiwgJ0NvY29udXQnKSwgKDMsICdBcHBsZScpLCAoMywgJ0JhbmFuYScpLCAoMywgJ0NvY29udXQnKSwgKDQsICdBcHBsZScpLCAoNCwgJ0JhbmFuYScpLCAoNCwgJ0NvY29udXQnKSwgKDUsICdBcHBsZScpLCAoNSwgJ0JhbmFuYScpLCAoNSwgJ0NvY29udXQnKV0KLVsoMSwgJ0JhbmFuYScpLCAoMSwgJ0NvY29udXQnKSwgKDIsICdCYW5hbmEnKSwgKDIsICdDb2NvbnV0JyksICgzLCAnQmFuYW5hJyksICgzLCAnQ29jb251dCcpLCAoNCwgJ0JhbmFuYScpLCAoNCwgJ0NvY29udXQnKSwgKDUsICdCYW5hbmEnKSwgKDUsICdDb2NvbnV0JyldCi1bWzFdLCBbMSwgMV0sIFsxLCAyLCA0XSwgWzEsIDMsIDksIDI3XSwgWzEsIDQsIDE2LCA2NCwgMjU2XV0KLVtGYWxzZSwgRmFsc2UsIEZhbHNlXQotW1sxLCAyXSwgWzMsIDRdLCBbNSwgNl1dCi1bKCdCb2VpbmcnLCAnQWlybGluZXInKSwgKCdCb2VpbmcnLCAnRW5naW5lJyksICgnRm9yZCcsICdFbmdpbmUnKSwgKCdNYWNkb25hbGRzJywgJ0NoZWVzZWJ1cmdlcicpXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfaHR0cGxpYiBiL0xpYi90ZXN0L291dHB1dC90ZXN0X2h0dHBsaWIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMmI4NzYuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfaHR0cGxpYgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXRlc3RfaHR0cGxpYgotcmVwbHk6ICdIVFRQLzEuMSAyMDAgT2tcclxuJwotVGV4dAotcmVwbHk6ICdIVFRQLzEuMSA0MDAuMTAwIE5vdCBPa1xyXG4nCi1CYWRTdGF0dXNMaW5lIHJhaXNlZCBhcyBleHBlY3RlZAotSW52YWxpZFVSTCByYWlzZWQgYXMgZXhwZWN0ZWQKLUludmFsaWRVUkwgcmFpc2VkIGFzIGV4cGVjdGVkCi1yZXBseTogJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCi1oZWFkZXI6IFNldC1Db29raWU6IEN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIgotaGVhZGVyOiBTZXQtQ29va2llOiBQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiCi1yZXBseTogJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCi1oZWFkZXI6IENvbnRlbnQtTGVuZ3RoOiAxNDQzMgotCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9tYXRoIGIvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfbWF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4Zjc3Yy4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9tYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotdGVzdF9tYXRoCi1tYXRoIG1vZHVsZSwgdGVzdGluZyB3aXRoIGVwcyAxZS0wNQotY29uc3RhbnRzCi1hY29zCi1hc2luCi1hdGFuCi1hdGFuMgotY2VpbAotY29zCi1jb3NoCi1kZWdyZWVzCi1leHAKLWZhYnMKLWZsb29yCi1mbW9kCi1mcmV4cAotaHlwb3QKLWxkZXhwCi1sb2cKLWxvZzEwCi1tb2RmCi1wb3cKLXJhZGlhbnMKLXNpbgotc2luaAotc3FydAotdGFuCi10YW5oCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9tbWFwIGIvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfbW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA1Zjg0MC4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9tbWFwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotdGVzdF9tbWFwCi08dHlwZSAnbW1hcC5tbWFwJz4KLSAgUG9zaXRpb24gb2YgZm9vOiAxLjAgcGFnZXMKLSAgTGVuZ3RoIG9mIGZpbGU6IDIuMCBwYWdlcwotICBDb250ZW50cyBvZiBieXRlIDA6ICdceDAwJwotICBDb250ZW50cyBvZiBmaXJzdCAzIGJ5dGVzOiAnXHgwMFx4MDBceDAwJwotCi0gIE1vZGlmeWluZyBmaWxlJ3MgY29udGVudC4uLgotICBDb250ZW50cyBvZiBieXRlIDA6ICczJwotICBDb250ZW50cyBvZiBmaXJzdCAzIGJ5dGVzOiAnM1x4MDBceDAwJwotICBDb250ZW50cyBvZiBzZWNvbmQgcGFnZTogJ1x4MDBmb29iYXJceDAwJwotICBSZWdleCBtYXRjaCBvbiBtbWFwIChwYWdlIHN0YXJ0LCBsZW5ndGggb2YgbWF0Y2gpOiAxLjAgNgotICBTZWVrIHRvIHplcm90aCBieXRlCi0gIFNlZWsgdG8gNDJuZCBieXRlCi0gIFNlZWsgdG8gbGFzdCBieXRlCi0gIFRyeSB0byBzZWVrIHRvIG5lZ2F0aXZlIHBvc2l0aW9uLi4uCi0gIFRyeSB0byBzZWVrIGJleW9uZCBlbmQgb2YgbW1hcC4uLgotICBUcnkgdG8gc2VlayB0byBuZWdhdGl2ZSBwb3NpdGlvbi4uLgotICBBdHRlbXB0aW5nIHJlc2l6ZSgpCi0gIENyZWF0aW5nIDEwIGJ5dGUgdGVzdCBkYXRhIGZpbGUuCi0gIE9wZW5pbmcgbW1hcCB3aXRoIGFjY2Vzcz1BQ0NFU1NfUkVBRAotICBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgc2xpY2UgYXNzaWduZWQuCi0gIEVuc3VyaW5nIHRoYXQgcmVhZG9ubHkgbW1hcCBjYW4ndCBiZSBpdGVtIGFzc2lnbmVkLgotICBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgd3JpdGUoKSB0by4KLSAgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHdyaXRlX2J5dGUoKSB0by4KLSAgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHJlc2l6ZWQuCi0gIE9wZW5pbmcgbW1hcCB3aXRoIHNpemUgdG9vIGJpZwotICBPcGVuaW5nIG1tYXAgd2l0aCBhY2Nlc3M9QUNDRVNTX1dSSVRFCi0gIE1vZGlmeWluZyB3cml0ZS10aHJvdWdoIG1lbW9yeSBtYXAuCi0gIE9wZW5pbmcgbW1hcCB3aXRoIGFjY2Vzcz1BQ0NFU1NfQ09QWQotICBNb2RpZnlpbmcgY29weS1vbi13cml0ZSBtZW1vcnkgbWFwLgotICBFbnN1cmluZyBjb3B5LW9uLXdyaXRlIG1hcHMgY2Fubm90IGJlIHJlc2l6ZWQuCi0gIEVuc3VyaW5nIGludmFsaWQgYWNjZXNzIHBhcmFtZXRlciByYWlzZXMgZXhjZXB0aW9uLgotICBUcnkgb3BlbmluZyBhIGJhZCBmaWxlIGRlc2NyaXB0b3IuLi4KLSAgRW5zdXJpbmcgdGhhdCBwYXNzaW5nIDAgYXMgbWFwIGxlbmd0aCBzZXRzIG1hcCBzaXplIHRvIGN1cnJlbnQgZmlsZSBzaXplLgotICBFbnN1cmluZyB0aGF0IHBhc3NpbmcgMCBhcyBtYXAgbGVuZ3RoIHNldHMgbWFwIHNpemUgdG8gY3VycmVudCBmaWxlIHNpemUuCi0gIGFub255bW91cyBtbWFwLm1tYXAoLTEsIFBBR0VTSVpFKS4uLgotIFRlc3QgcGFzc2VkCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9uaXMgYi9MaWIvdGVzdC9vdXRwdXQvdGVzdF9uaXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NTNhYjQuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfbmlzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi10ZXN0X25pcwotbmlzLm1hcHMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3Rfb3Bjb2RlcyBiL0xpYi90ZXN0L291dHB1dC90ZXN0X29wY29kZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODU1NzEuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3Rfb3Bjb2RlcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotdGVzdF9vcGNvZGVzCi0yLiBPcGNvZGVzCi1YWFggTm90IHlldCBmdWxseSBpbXBsZW1lbnRlZAotMi4xIHRyeSBpbnNpZGUgZm9yIGxvb3AKLTIuMiByYWlzZSBjbGFzcyBleGNlcHRpb25zCi0yLjMgY29tcGFyaW5nIGZ1bmN0aW9uIG9iamVjdHMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L291dHB1dC90ZXN0X29wZW5wdHkgYi9MaWIvdGVzdC9vdXRwdXQvdGVzdF9vcGVucHR5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGI4YjVlLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L291dHB1dC90ZXN0X29wZW5wdHkKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXRlc3Rfb3BlbnB0eQotUGluZyEKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L291dHB1dC90ZXN0X3BvbGwgYi9MaWIvdGVzdC9vdXRwdXQvdGVzdF9wb2xsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTYxZDM3Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L291dHB1dC90ZXN0X3BvbGwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi10ZXN0X3BvbGwKLVJ1bm5pbmcgcG9sbCB0ZXN0IDEKLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLSBUaGlzIGlzIGEgdGVzdC4KLVBvbGwgdGVzdCAxIGNvbXBsZXRlCi1SdW5uaW5nIHBvbGwgdGVzdCAyCi1Qb2xsIHRlc3QgMiBjb21wbGV0ZQotUnVubmluZyBwb2xsIHRlc3QgMwotUG9sbCB0ZXN0IDMgY29tcGxldGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L291dHB1dC90ZXN0X3JlZ2V4IGIvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfcmVnZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZWIyNmYuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfcmVnZXgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi10ZXN0X3JlZ2V4Ci1ubyBtYXRjaDogLTEKLXN1Y2Nlc3NmdWwgc2VhcmNoOiA2Ci1jYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uCi1mYWlsZWQgYXdrIHN5bnRheDogLTEKLXN1Y2Nlc3NmdWwgYXdrIHN5bnRheDogMgotZmFpbGVkIGF3ayBzeW50YXg6IC0xCi1tYXRjaGluZyB3aXRoIGdyb3VwIG5hbWVzIGFuZCBjb21waWxlKCkKLS0xCi1jYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uCi1tYXRjaGluZyB3aXRoIGdyb3VwIG5hbWVzIGFuZCBzeW1jb21wKCkKLTcKLTgwMSA5OTkKLTgwMQotKCc4MDEnLCAnOTk5JykKLSgnODAxJywgJzk5OScpCi1yZWFscGF0OiBcKFswLTldK1wpICpcKFswLTldK1wpCi1ncm91cGluZGV4OiB7J29uZSc6IDEsICd0d28nOiAyfQotbm90IGNhc2UgZm9sZGVkIHNlYXJjaDogLTEKLWNhc2UgZm9sZGVkIHNlYXJjaDogNgotX19tZW1iZXJzX186IFsnbGFzdCcsICdyZWdzJywgJ3RyYW5zbGF0ZScsICdncm91cGluZGV4JywgJ3JlYWxwYXQnLCAnZ2l2ZW5wYXQnXQotcmVnczogKCg2LCAxMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSksICgtMSwgLTEpLCAoLTEsIC0xKSwgKC0xLCAtMSkpCi1sYXN0OiBIRUxMTyBXT1JMRAotdHJhbnNsYXRlOiAyNTYKLWdpdmVucGF0OiB3b3JsZAotbWF0Y2ggd2l0aCBwb3M6IC0xCi1zZWFyY2ggd2l0aCBwb3M6IDE4Ci1ib2d1cyBncm91cDogKCd3b3JsZCcsIE5vbmUsIE5vbmUpCi1ubyBuYW1lOiBjYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9zY29wZSBiL0xpYi90ZXN0L291dHB1dC90ZXN0X3Njb3BlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDM5ZTQ0Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L291dHB1dC90ZXN0X3Njb3BlCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotdGVzdF9zY29wZQotMS4gc2ltcGxlIG5lc3RpbmcKLTIuIGV4dHJhIG5lc3RpbmcKLTMuIHNpbXBsZSBuZXN0aW5nICsgcmViaW5kaW5nCi00LiBuZXN0aW5nIHdpdGggZ2xvYmFsIGJ1dCBubyBmcmVlCi01LiBuZXN0aW5nIHRocm91Z2ggY2xhc3MKLTYuIG5lc3RpbmcgcGx1cyBmcmVlIHJlZiB0byBnbG9iYWwKLTcuIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlCi04LiBtaXhlZCBmcmVldmFycyBhbmQgY2VsbHZhcnMKLTkuIGZyZWUgdmFyaWFibGUgaW4gbWV0aG9kCi0xMC4gcmVjdXJzaW9uCi0xMS4gdW5vcHRpbWl6ZWQgbmFtZXNwYWNlcwotMTIuIGxhbWJkYXMKLTEzLiBVbmJvdW5kTG9jYWwKLTE0LiBjb21wbGV4IGRlZmluaXRpb25zCi0xNS4gc2NvcGUgb2YgZ2xvYmFsIHN0YXRlbWVudHMKLTE2LiBjaGVjayBsZWFrcwotMTcuIGNsYXNzIGFuZCBnbG9iYWwKLTE4LiB2ZXJpZnkgdGhhdCBsb2NhbHMoKSB3b3JrcwotMTkuIHZhciBpcyBib3VuZCBhbmQgZnJlZSBpbiBjbGFzcwotMjAuIGludGVyYWN0aW9uIHdpdGggdHJhY2UgZnVuY3Rpb24KLTIwLiBldmFsIGFuZCBleGVjIHdpdGggZnJlZSB2YXJpYWJsZXMKLTIxLiBsaXN0IGNvbXByZWhlbnNpb24gd2l0aCBsb2NhbCB2YXJpYWJsZXMKLTIyLiBldmFsIHdpdGggZnJlZSB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L291dHB1dC90ZXN0X3Rva2VuaXplIGIvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfdG9rZW5pemUKaW5kZXggMGMxNDMwOC4uNGEzZDU4YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfdG9rZW5pemUKKysrIGIvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfdG9rZW5pemUKQEAgLTEsMTUgKzEsMjMgQEAKIHRlc3RfdG9rZW5pemUKLTEsMC0xLDM1OglDT01NRU5UCSIjIFRlc3RzIGZvciB0aGUgJ3Rva2VuaXplJyBtb2R1bGUuXG4iCi0yLDAtMiw0MzoJQ09NTUVOVAknIyBMYXJnZSBiaXRzIHN0b2xlbiBmcm9tIHRlc3RfZ3JhbW1hci5weS4gXG4nCisxLDAtMSwzNDoJQ09NTUVOVAkiIyBUZXN0cyBmb3IgdGhlICd0b2tlbml6ZScgbW9kdWxlLiIKKzEsMzQtMSwzNToJTkwJJ1xuJworMiwwLTIsNDI6CUNPTU1FTlQJJyMgTGFyZ2UgYml0cyBzdG9sZW4gZnJvbSB0ZXN0X2dyYW1tYXIucHkuICcKKzIsNDItMiw0MzoJTkwJJ1xuJwogMywwLTMsMToJTkwJJ1xuJwotNCwwLTQsMTE6CUNPTU1FTlQJJyMgQ29tbWVudHNcbicKKzQsMC00LDEwOglDT01NRU5UCScjIENvbW1lbnRzJworNCwxMC00LDExOglOTAknXG4nCiA1LDAtNSwzOglTVFJJTkcJJyIjIicKIDUsMy01LDQ6CU5FV0xJTkUJJ1xuJwotNiwwLTYsMzoJQ09NTUVOVAkiIydcbiIKLTcsMC03LDM6CUNPTU1FTlQJJyMiXG4nCi04LDAtOCwzOglDT01NRU5UCScjXFxcbicKLTksNy05LDk6CUNPTU1FTlQJJyNcbicKLTEwLDQtMTAsMTA6CUNPTU1FTlQJJyMgYWJjXG4nCis2LDAtNiwyOglDT01NRU5UCSIjJyIKKzYsMi02LDM6CU5MCSdcbicKKzcsMC03LDI6CUNPTU1FTlQJJyMiJworNywyLTcsMzoJTkwJJ1xuJworOCwwLTgsMjoJQ09NTUVOVAknI1xcJworOCwyLTgsMzoJTkwJJ1xuJworOSw3LTksODoJQ09NTUVOVAknIycKKzksOC05LDk6CU5MCSdcbicKKzEwLDQtMTAsOToJQ09NTUVOVAknIyBhYmMnCisxMCw5LTEwLDEwOglOTAknXG4nCiAxMSwwLTEyLDQ6CVNUUklORwkiJycnI1xuIycnJyIKIDEyLDQtMTIsNToJTkVXTElORQknXG4nCiAxMywwLTEzLDE6CU5MCSdcbicKQEAgLTE5LDcgKzI3LDggQEAKIDE0LDctMTQsODoJQ09NTUVOVAknIycKIDE0LDgtMTQsOToJTkVXTElORQknXG4nCiAxNSwwLTE1LDE6CU5MCSdcbicKLTE2LDAtMTYsMjU6CUNPTU1FTlQJJyMgQmFsYW5jaW5nIGNvbnRpbnVhdGlvblxuJworMTYsMC0xNiwyNDoJQ09NTUVOVAknIyBCYWxhbmNpbmcgY29udGludWF0aW9uJworMTYsMjQtMTYsMjU6CU5MCSdcbicKIDE3LDAtMTcsMToJTkwJJ1xuJwogMTgsMC0xOCwxOglOQU1FCSdhJwogMTgsMi0xOCwzOglPUAknPScKQEAgLTkzLDcgKzEwMiw4IEBACiAyOSwyLTI5LDM6CU9QCScpJwogMjksMy0yOSw0OglORVdMSU5FCSdcbicKIDMwLDAtMzAsMToJTkwJJ1xuJwotMzEsMC0zMSwzNzoJQ09NTUVOVAknIyBCYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb246XG4nCiszMSwwLTMxLDM2OglDT01NRU5UCScjIEJhY2tzbGFzaCBtZWFucyBsaW5lIGNvbnRpbnVhdGlvbjonCiszMSwzNi0zMSwzNzoJTkwJJ1xuJwogMzIsMC0zMiwxOglOQU1FCSd4JwogMzIsMi0zMiwzOglPUAknPScKIDMyLDQtMzIsNToJTlVNQkVSCScxJwpAQCAtMTAxLDEzICsxMTEsMTUgQEAKIDMzLDItMzMsMzoJTlVNQkVSCScxJwogMzMsMy0zMyw0OglORVdMSU5FCSdcbicKIDM0LDAtMzQsMToJTkwJJ1xuJwotMzUsMC0zNSw1NToJQ09NTUVOVAknIyBCYWNrc2xhc2ggZG9lcyBub3QgbWVhbnMgY29udGludWF0aW9uIGluIGNvbW1lbnRzIDpcXFxuJworMzUsMC0zNSw1NDoJQ09NTUVOVAknIyBCYWNrc2xhc2ggZG9lcyBub3QgbWVhbnMgY29udGludWF0aW9uIGluIGNvbW1lbnRzIDpcXCcKKzM1LDU0LTM1LDU1OglOTAknXG4nCiAzNiwwLTM2LDE6CU5BTUUJJ3gnCiAzNiwyLTM2LDM6CU9QCSc9JwogMzYsNC0zNiw1OglOVU1CRVIJJzAnCiAzNiw1LTM2LDY6CU5FV0xJTkUJJ1xuJwogMzcsMC0zNywxOglOTAknXG4nCi0zOCwwLTM4LDIwOglDT01NRU5UCScjIE9yZGluYXJ5IGludGVnZXJzXG4nCiszOCwwLTM4LDE5OglDT01NRU5UCScjIE9yZGluYXJ5IGludGVnZXJzJworMzgsMTktMzgsMjA6CU5MCSdcbicKIDM5LDAtMzksNDoJTlVNQkVSCScweGZmJwogMzksNS0zOSw3OglPUAknIT0nCiAzOSw4LTM5LDExOglOVU1CRVIJJzI1NScKQEAgLTEzOCw3ICsxNTAsOCBAQAogNDQsMTUtNDQsMTY6CU5VTUJFUgknMScKIDQ0LDE2LTQ0LDE3OglORVdMSU5FCSdcbicKIDQ1LDAtNDUsMToJTkwJJ1xuJwotNDYsMC00NiwxNjoJQ09NTUVOVAknIyBMb25nIGludGVnZXJzXG4nCis0NiwwLTQ2LDE1OglDT01NRU5UCScjIExvbmcgaW50ZWdlcnMnCis0NiwxNS00NiwxNjoJTkwJJ1xuJwogNDcsMC00NywxOglOQU1FCSd4JwogNDcsMi00NywzOglPUAknPScKIDQ3LDQtNDcsNjoJTlVNQkVSCScwTCcKQEAgLTE3Miw3ICsxODUsOCBAQAogNTQsNC01NCwzNToJTlVNQkVSCScxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTBsJwogNTQsMzUtNTQsMzY6CU5FV0xJTkUJJ1xuJwogNTUsMC01NSwxOglOTAknXG4nCi01NiwwLTU2LDI1OglDT01NRU5UCScjIEZsb2F0aW5nLXBvaW50IG51bWJlcnNcbicKKzU2LDAtNTYsMjQ6CUNPTU1FTlQJJyMgRmxvYXRpbmctcG9pbnQgbnVtYmVycycKKzU2LDI0LTU2LDI1OglOTAknXG4nCiA1NywwLTU3LDE6CU5BTUUJJ3gnCiA1NywyLTU3LDM6CU9QCSc9JwogNTcsNC01Nyw4OglOVU1CRVIJJzMuMTQnCkBAIC0xODUsNyArMTk5LDggQEAKIDU5LDItNTksMzoJT1AJJz0nCiA1OSw0LTU5LDk6CU5VTUJFUgknMC4zMTQnCiA1OSw5LTU5LDEwOglORVdMSU5FCSdcbicKLTYwLDAtNjAsMTg6CUNPTU1FTlQJJyMgWFhYIHggPSAwMDAuMzE0XG4nCis2MCwwLTYwLDE3OglDT01NRU5UCScjIFhYWCB4ID0gMDAwLjMxNCcKKzYwLDE3LTYwLDE4OglOTAknXG4nCiA2MSwwLTYxLDE6CU5BTUUJJ3gnCiA2MSwyLTYxLDM6CU9QCSc9JwogNjEsNC02MSw4OglOVU1CRVIJJy4zMTQnCkBAIC0yMTksNyArMjM0LDggQEAKIDY4LDQtNjgsOToJTlVNQkVSCSczLjFlNCcKIDY4LDktNjgsMTA6CU5FV0xJTkUJJ1xuJwogNjksMC02OSwxOglOTAknXG4nCi03MCwwLTcwLDE4OglDT01NRU5UCScjIFN0cmluZyBsaXRlcmFsc1xuJworNzAsMC03MCwxNzoJQ09NTUVOVAknIyBTdHJpbmcgbGl0ZXJhbHMnCis3MCwxNy03MCwxODoJTkwJJ1xuJwogNzEsMC03MSwxOglOQU1FCSd4JwogNzEsMi03MSwzOglPUAknPScKIDcxLDQtNzEsNjoJU1RSSU5HCSInJyIKQEAgLTM2Nyw3ICszODMsOCBAQAogMTI1LDYtMTI2LDM6CVNUUklORwkidVInJydzcGFtXG4nJyciCiAxMjYsMy0xMjYsNDoJTkVXTElORQknXG4nCiAxMjcsMC0xMjcsMToJTkwJJ1xuJwotMTI4LDAtMTI4LDE0OglDT01NRU5UCScjIEluZGVudGF0aW9uXG4nCisxMjgsMC0xMjgsMTM6CUNPTU1FTlQJJyMgSW5kZW50YXRpb24nCisxMjgsMTMtMTI4LDE0OglOTAknXG4nCiAxMjksMC0xMjksMjoJTkFNRQknaWYnCiAxMjksMy0xMjksNDoJTlVNQkVSCScxJwogMTI5LDQtMTI5LDU6CU9QCSc6JwpAQCAtNDM5LDcgKzQ1Niw4IEBACiAxNDIsMTQtMTQyLDE1OglOVU1CRVIJJzInCiAxNDIsMTUtMTQyLDE2OglORVdMSU5FCSdcbicKIDE0MywwLTE0MywxOglOTAknXG4nCi0xNDQsMC0xNDQsMTI6CUNPTU1FTlQJJyMgT3BlcmF0b3JzXG4nCisxNDQsMC0xNDQsMTE6CUNPTU1FTlQJJyMgT3BlcmF0b3JzJworMTQ0LDExLTE0NCwxMjoJTkwJJ1xuJwogMTQ1LDAtMTQ1LDE6CU5MCSdcbicKIDE0NiwwLTE0NiwwOglERURFTlQJJycKIDE0NiwwLTE0NiwwOglERURFTlQJJycKQEAgLTUwMSw3ICs1MTksOCBAQAogMTQ5LDI3LTE0OSwyODoJT1AJJyknCiAxNDksMjgtMTQ5LDI5OglORVdMSU5FCSdcbicKIDE1MCwwLTE1MCwxOglOTAknXG4nCi0xNTEsMC0xNTEsMTM6CUNPTU1FTlQJJyMgY29tcGFyaXNvblxuJworMTUxLDAtMTUxLDEyOglDT01NRU5UCScjIGNvbXBhcmlzb24nCisxNTEsMTItMTUxLDEzOglOTAknXG4nCiAxNTIsMC0xNTIsMjoJTkFNRQknaWYnCiAxNTIsMy0xNTIsNDoJTlVNQkVSCScxJwogMTUyLDUtMTUyLDY6CU9QCSc8JwpAQCAtNTMyLDcgKzU1MSw4IEBACiAxNTIsNjctMTUyLDcxOglOQU1FCSdwYXNzJwogMTUyLDcxLTE1Miw3MjoJTkVXTElORQknXG4nCiAxNTMsMC0xNTMsMToJTkwJJ1xuJwotMTU0LDAtMTU0LDk6CUNPTU1FTlQJJyMgYmluYXJ5XG4nCisxNTQsMC0xNTQsODoJQ09NTUVOVAknIyBiaW5hcnknCisxNTQsOC0xNTQsOToJTkwJJ1xuJwogMTU1LDAtMTU1LDE6CU5BTUUJJ3gnCiAxNTUsMi0xNTUsMzoJT1AJJz0nCiAxNTUsNC0xNTUsNToJTlVNQkVSCScxJwpAQCAtNTUyLDcgKzU3Miw4IEBACiAxNTcsOC0xNTcsOToJTlVNQkVSCScxJwogMTU3LDktMTU3LDEwOglORVdMSU5FCSdcbicKIDE1OCwwLTE1OCwxOglOTAknXG4nCi0xNTksMC0xNTksODoJQ09NTUVOVAknIyBzaGlmdFxuJworMTU5LDAtMTU5LDc6CUNPTU1FTlQJJyMgc2hpZnQnCisxNTksNy0xNTksODoJTkwJJ1xuJwogMTYwLDAtMTYwLDE6CU5BTUUJJ3gnCiAxNjAsMi0xNjAsMzoJT1AJJz0nCiAxNjAsNC0xNjAsNToJTlVNQkVSCScxJwpAQCAtNTYyLDcgKzU4Myw4IEBACiAxNjAsMTQtMTYwLDE1OglOVU1CRVIJJzEnCiAxNjAsMTUtMTYwLDE2OglORVdMSU5FCSdcbicKIDE2MSwwLTE2MSwxOglOTAknXG4nCi0xNjIsMC0xNjIsMTE6CUNPTU1FTlQJJyMgYWRkaXRpdmVcbicKKzE2MiwwLTE2MiwxMDoJQ09NTUVOVAknIyBhZGRpdGl2ZScKKzE2MiwxMC0xNjIsMTE6CU5MCSdcbicKIDE2MywwLTE2MywxOglOQU1FCSd4JwogMTYzLDItMTYzLDM6CU9QCSc9JwogMTYzLDQtMTYzLDU6CU5VTUJFUgknMScKQEAgLTU3Niw3ICs1OTgsOCBAQAogMTYzLDIwLTE2MywyMToJTlVNQkVSCScxJwogMTYzLDIxLTE2MywyMjoJTkVXTElORQknXG4nCiAxNjQsMC0xNjQsMToJTkwJJ1xuJwotMTY1LDAtMTY1LDE3OglDT01NRU5UCScjIG11bHRpcGxpY2F0aXZlXG4nCisxNjUsMC0xNjUsMTY6CUNPTU1FTlQJJyMgbXVsdGlwbGljYXRpdmUnCisxNjUsMTYtMTY1LDE3OglOTAknXG4nCiAxNjYsMC0xNjYsMToJTkFNRQkneCcKIDE2NiwyLTE2NiwzOglPUAknPScKIDE2Niw0LTE2Niw1OglOVU1CRVIJJzEnCkBAIC01ODgsNyArNjExLDggQEAKIDE2NiwxNi0xNjYsMTc6CU5VTUJFUgknMScKIDE2NiwxNy0xNjYsMTg6CU5FV0xJTkUJJ1xuJwogMTY3LDAtMTY3LDE6CU5MCSdcbicKLTE2OCwwLTE2OCw4OglDT01NRU5UCScjIHVuYXJ5XG4nCisxNjgsMC0xNjgsNzoJQ09NTUVOVAknIyB1bmFyeScKKzE2OCw3LTE2OCw4OglOTAknXG4nCiAxNjksMC0xNjksMToJTkFNRQkneCcKIDE2OSwyLTE2OSwzOglPUAknPScKIDE2OSw0LTE2OSw1OglPUAknficKQEAgLTYyNiw3ICs2NTAsOCBAQAogMTcwLDI0LTE3MCwyNToJTlVNQkVSCScxJwogMTcwLDI1LTE3MCwyNjoJTkVXTElORQknXG4nCiAxNzEsMC0xNzEsMToJTkwJJ1xuJwotMTcyLDAtMTcyLDExOglDT01NRU5UCScjIHNlbGVjdG9yXG4nCisxNzIsMC0xNzIsMTA6CUNPTU1FTlQJJyMgc2VsZWN0b3InCisxNzIsMTAtMTcyLDExOglOTAknXG4nCiAxNzMsMC0xNzMsNjoJTkFNRQknaW1wb3J0JwogMTczLDctMTczLDEwOglOQU1FCSdzeXMnCiAxNzMsMTAtMTczLDExOglPUAknLCcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L291dHB1dC90ZXN0X3R5cGVzIGIvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfdHlwZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0OWNlMGQuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfdHlwZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi10ZXN0X3R5cGVzCi02LiBCdWlsdC1pbiB0eXBlcwotNi4xIFRydXRoIHZhbHVlIHRlc3RpbmcKLTYuMiBCb29sZWFuIG9wZXJhdGlvbnMKLTYuMyBDb21wYXJpc29ucwotNi40IE51bWVyaWMgdHlwZXMgKG1vc3RseSBjb252ZXJzaW9ucykKLTYuNC4xIDMyLWJpdCBpbnRlZ2VycwotNi40LjIgTG9uZyBpbnRlZ2VycwotNi40LjMgRmxvYXRpbmcgcG9pbnQgbnVtYmVycwotNi41IFNlcXVlbmNlIHR5cGVzCi02LjUuMSBTdHJpbmdzCi02LjUuMiBUdXBsZXMgW3NlZSB0ZXN0X3R1cGxlLnB5XQotNi41LjMgTGlzdHMgW3NlZSB0ZXN0X2xpc3QucHldCi02LjYgTWFwcGluZ3MgPT0gRGljdGlvbmFyaWVzIFtzZWUgdGVzdF9kaWN0LnB5XQotQnVmZmVycwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfeGRybGliIGIvTGliL3Rlc3Qvb3V0cHV0L3Rlc3RfeGRybGliCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODZjYWE5Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L291dHB1dC90ZXN0X3hkcmxpYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXRlc3RfeGRybGliCi1wYWNrIHRlc3QgMCBzdWNjZWVkZWQKLXBhY2sgdGVzdCAxIHN1Y2NlZWRlZAotcGFjayB0ZXN0IDIgc3VjY2VlZGVkCi1wYWNrIHRlc3QgMyBzdWNjZWVkZWQKLXBhY2sgdGVzdCA0IHN1Y2NlZWRlZAotcGFjayB0ZXN0IDUgc3VjY2VlZGVkCi1wYWNrIHRlc3QgNiBzdWNjZWVkZWQKLXBhY2sgdGVzdCA3IHN1Y2NlZWRlZAotcGFjayB0ZXN0IDggc3VjY2VlZGVkCi11bnBhY2sgdGVzdCAwIHN1Y2NlZWRlZCA6IDkKLXVucGFjayB0ZXN0IDEgc3VjY2VlZGVkIDogVHJ1ZQotdW5wYWNrIHRlc3QgMiBzdWNjZWVkZWQgOiBGYWxzZQotdW5wYWNrIHRlc3QgMyBzdWNjZWVkZWQgOiA0NQotdW5wYWNrIHRlc3QgNCBzdWNjZWVkZWQgOiAxLjg5OTk5OTk3NjE2Ci11bnBhY2sgdGVzdCA1IHN1Y2NlZWRlZCA6IDEuOQotdW5wYWNrIHRlc3QgNiBzdWNjZWVkZWQgOiBoZWxsbyB3b3JsZAotdW5wYWNrIHRlc3QgNyBzdWNjZWVkZWQgOiBbMCwgMSwgMiwgMywgNF0KLXVucGFjayB0ZXN0IDggc3VjY2VlZGVkIDogWyd3aGF0JywgJ2lzJywgJ2hhcG5pbicsICdkb2N0b3InXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvb3V0c3RhbmRpbmdfYnVncy5weSBiL0xpYi90ZXN0L291dHN0YW5kaW5nX2J1Z3MucHkKaW5kZXggN2UzN2M4NS4uMDRhZmNiZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvb3V0c3RhbmRpbmdfYnVncy5weQorKysgYi9MaWIvdGVzdC9vdXRzdGFuZGluZ19idWdzLnB5CkBAIC05LDE5ICs5LDE0IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKLWNsYXNzIFRlc3RCdWcxMzg1MDQwKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdFN5bnRheEVycm9yKHNlbGYpOgotICAgICAgICBpbXBvcnQgY29tcGlsZXIKLQotICAgICAgICAjIFRoZSBmb2xsb3dpbmcgc25pcHBldCBnaXZlcyBhIFN5bnRheEVycm9yIGluIHRoZSBpbnRlcnByZXRlcgotICAgICAgICAjCi0gICAgICAgICMgSWYgeW91IGNvbXBpbGUgYW5kIGV4ZWMgaXQsIHRoZSBjYWxsIGZvbyg3KSByZXR1cm5zICg3LCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZXIuY29tcGlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZiBmb28oYT0xLCBiKTogcmV0dXJuIGEsIGJcblxuIiwgIjxzdHJpbmc+IiwgImV4ZWMiKQorIworIyBObyB0ZXN0IGNhc2VzIGZvciBvdXRzdGFuZGluZyBidWdzIGF0IHRoZSBtb21lbnQuCisjCiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEJ1ZzEzODUwNDApCisgICAgI3Rlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKQorICAgIHBhc3MKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc2dtbF9pbnB1dC5odG1sIGIvTGliL3Rlc3Qvc2dtbF9pbnB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDJlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zZ21sX2lucHV0Lmh0bWwKQEAgLTAsMCArMSwyMTIgQEAKKzxodG1sPgorIDxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL2Zvcm1hdGUuY3NzIj4KKyAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSJqcy9mbG90dGVuLmpzIj48L3NjcmlwdD4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICAgPHNjcmlwdCBsYW5ndWFnZT1KYXZhU2NyaXB0PiBpZiAocGFyZW50LmZyYW1lcy5sZW5ndGggPT0gMCkgeyB0b3AubG9jYXRpb24uaHJlZiA9ICJodHRwOi8vZXMub2dhbWUub3JnLyI7IH0gPC9zY3JpcHQ+IDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorZnVuY3Rpb24gaGFoYSh6MSkgeworICBldmFsKCJsb2NhdGlvbj0nIit6MS5vcHRpb25zW3oxLnNlbGVjdGVkSW5kZXhdLnZhbHVlKyInIik7Cit9Cis8L3NjcmlwdD4KKzxjZW50ZXI+Cis8dGFibGU+CisgPHRyPgorICA8dGQ+PC90ZD4KKyAgPHRkPgorICAgPGNlbnRlcj4KKyAgIDx0YWJsZT4KKyAgICA8dHI+CisgICAgIDx0ZD48aW1nIHNyYz0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL3BsYW5ldGVuL3NtYWxsL3NfZHNjaGp1bmdlbHBsYW5ldDA0LmpwZyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L3RkPgorICAgICA8dGQ+CisgICAgICA8dGFibGUgYm9yZGVyPSIxIj4KKyAgICAgICA8c2VsZWN0IHNpemU9IjEiIG9uY2hhbmdlPSJoYWhhKHRoaXMpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTMzODc1MzQxJm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiIHNlbGVjdGVkPkFsaWVuIHNleCBmcmllbmQgICAgWzI6MjUwOjZdPC9vcHRpb24+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIvZ2FtZS9mbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMmY3A9MzM5MDUxMDAmbW9kZT1GbG90dGUmZ2lkPSZtZXNzYWdlemllbD0mcmU9MCIgPjE5ODkgICAgWzI6MjQ4OjE0XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcwODA4Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID4xOTkwICAgIFsyOjI0ODo2XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcwODU4Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID4xOTkxICAgIFsyOjI1NDo2XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcyOTI5Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID5Db2xvbmlhICAgIFsyOjI1MzoxMl08L29wdGlvbj4gCisgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgIDwvdGFibGU+CisgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKyAgPC9jZW50ZXI+CisgIDwvdGQ+CisgIDx0ZD4KKyAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorICAgIDx0cj4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPgorICAgICAgPGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL2ltYWdlcy9tZXRhbGwuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4KKyAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9vZ2FtZTE4Mi5kZS9lcGljYmx1ZS9pbWFnZXMva3Jpc3RhbGwuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4KKyAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9vZ2FtZTE4Mi5kZS9lcGljYmx1ZS9pbWFnZXMvZGV1dGVyaXVtLmdpZiIgd2lkdGg9IjQyIiBoZWlnaHQ9IjIyIj4KKyAgICAgPC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+CisgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vb2dhbWUxODIuZGUvZXBpY2JsdWUvaW1hZ2VzL2VuZXJnaWUuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxpPjxiPiZuYnNwOyZuYnNwOzwvYj48L2k+PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+PGk+PGI+PGZvbnQgY29sb3I9IiNmZmZmZmYiPk1ldGFsPC9mb250PjwvYj48L2k+PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+PGk+PGI+PGZvbnQgY29sb3I9IiNmZmZmZmYiPkNyaXN0YWw8L2ZvbnQ+PC9iPjwvaT48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48aT48Yj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+RGV1dGVyaW88L2ZvbnQ+PC9iPjwvaT48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48aT48Yj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+RW5lcmftYTwvZm9udD48L2I+PC9pPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48aT48Yj4mbmJzcDsmbmJzcDs8L2I+PC9pPjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4xNjAuNjM2PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+My40MDY8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4zOS4yMzA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48Zm9udCBjb2xvcj0jZmYwMDAwPi04MDwvZm9udD4vMy45NjU8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICA8L3RyPgorICAgPC90YWJsZT4KKyAgPC90cj4KKyA8L3RhYmxlPgorICA8L2NlbnRlcj4KKzxiciAvPgorICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKyAgPCEtLQorICAgICBmdW5jdGlvbiBsaW5rX3RvX2dhbWVwYXkoKSB7CisgICAgc2VsZi5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5nYW1lcGF5LmRlLz9sYW5nPWVzJnNlcnZlcklEPTgmdXNlcklEPTEyOTM2MCZnYW1lSUQ9b2dhbWUmZ3VpPXYyJmNoa3N1bT1hOTc1MWFmYTllMzdlNmIxYjgyNjM1NmJjY2E0NTY3NSI7CisgIH0KKy8vLS0+CisgIDwvc2NyaXB0PgorPGNlbnRlcj4KKyAgPHRhYmxlIHdpZHRoPSI1MTkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIxIj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgPHRkIGNvbHNwYW49IjgiIGNsYXNzPSJjIj5GbG90YXMgKG1heC4gOSk8L3RkPgorICAgPC90cj4KKyAgICAgPHRyIGhlaWdodD0iMjAiPgorICAgIDx0aD5OdW0uPC90aD4KKyAgICA8dGg+TWlzafNuPC90aD4KKyAgICA8dGg+Q2FudGlkYWQ8L3RoPgorICAgIDx0aD5Db21pZW56bzwvdGg+CisgICAgPHRoPlNhbGlkYTwvdGg+CisgICAgPHRoPk9iamV0aXZvPC90aD4KKyAgICA8dGg+TGxlZ2FkYTwvdGg+CisgICAgPHRoPk9yZGVuPC90aD4gICAKKyAgIDwvdHI+CisgICAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+MTwvdGg+CisgICAgPHRoPiAgCisgICAgICA8YSB0aXRsZT0iIj5Fc3Bpb25hamU8L2E+CisgICAgICA8YSB0aXRsZT0iRmxvdGEgZW4gZWwgcGxhbmV0YSI+KEYpPC9hPgorICAgIDwvdGg+CisgICAgPHRoPiA8YSB0aXRsZT0iU29uZGEgZGUgZXNwaW9uYWplOiAzIAorIj4zPC9hPjwvdGg+CisgICAgPHRoPlsyOjI1MDo2XTwvdGg+CisgICAgPHRoPldlZCBBdWcgOSAxODowMDowMjwvdGg+CisgICAgPHRoPlsyOjI0Mjo1XTwvdGg+CisgICAgPHRoPldlZCBBdWcgOSAxODowMTowMjwvdGg+CisgICAgPHRoPgorICAgICAgICAgPGZvcm0gYWN0aW9uPSJmbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMiIG1ldGhvZD0iUE9TVCI+CisJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib3JkZXJfcmV0dXJuIiB2YWx1ZT0iMjUwNTQ0OTAiIC8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnZpYXIgZGUgcmVncmVzbyIgLz4KKyAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjI8L3RoPgorICAgIDx0aD4gIAorICAgICAgPGEgdGl0bGU9IiI+RXNwaW9uYWplPC9hPgorICAgICAgPGEgdGl0bGU9IlZvbHZlciBhbCBwbGFuZXRhIj4oVik8L2E+CisgICAgPC90aD4KKyAgICA8dGg+IDxhIHRpdGxlPSJTb25kYSBkZSBlc3Bpb25hamU6IDMgCisiPjM8L2E+PC90aD4KKyAgICA8dGg+WzI6MjUwOjZdPC90aD4KKyAgICA8dGg+V2VkIEF1ZyA5IDE3OjU5OjU1PC90aD4KKyAgICA8dGg+WzI6MjQyOjFdPC90aD4KKyAgICA8dGg+V2VkIEF1ZyA5IDE4OjAxOjU1PC90aD4KKyAgICA8dGg+CisgICAgICAgICAgICA8L3RoPgorICAgPC90cj4KKyAgPC90YWJsZT4KKworCisgIAorPGZvcm0gYWN0aW9uPSJmbG90dGVuMi5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMiIG1ldGhvZD0iUE9TVCI+CisgIDx0YWJsZSB3aWR0aD0iNTE5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMSI+CisgICAgICAgPHRyIGhlaWdodD0iMjAiPgorICA8dGQgY29sc3Bhbj0iNCIgY2xhc3M9ImMiPk51ZXZhIG1pc2nzbjogZWxlZ2lyIG5hdmVzPC90ZD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgIDx0aD5OYXZlczwvdGg+CisgIDx0aD5EaXNwb25pYmxlczwvdGg+Cis8IS0tICAgIDx0aD5HZXNjaC48L3RoPiAtLT4KKyAgICA8dGg+LTwvdGg+CisgICAgPHRoPi08L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogODUwMCI+TmF2ZSBwZXF1ZfFhIGRlIGNhcmdhPC9hPjwvdGg+IAorICAgIDx0aD4xMDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1heHNoaXAyMDIiIHZhbHVlPSIxMCIvPjwvdGg+Cis8IS0tICAgIDx0aD44NTAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIwMiIgdmFsdWU9IjEwIi8+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNwZWVkMjAyIiB2YWx1ZT0iODUwMCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIwMiIgdmFsdWU9IjUwMDAiIC8+PC90aD4KKyAgICAgPHRoPjxhIGhyZWY9ImphdmFzY3JpcHQ6bWF4U2hpcCgnc2hpcDIwMicpOyIgPm3heDwvYT4gPC90aD4KKyAgICAgPHRoPjxpbnB1dCBuYW1lPSJzaGlwMjAyIiBzaXplPSIxMCIgdmFsdWU9IjAiIGFsdD0iTmF2ZSBwZXF1ZfFhIGRlIGNhcmdhIDEwIi8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDEyNzUwIj5OYXZlIGdyYW5kZSBkZSBjYXJnYTwvYT48L3RoPiAKKyAgICA8dGg+MTk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtYXhzaGlwMjAzIiB2YWx1ZT0iMTkiLz48L3RoPgorPCEtLSAgICA8dGg+MTI3NTAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjAzIiB2YWx1ZT0iNTAiLz4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3BlZWQyMDMiIHZhbHVlPSIxMjc1MCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIwMyIgdmFsdWU9IjI1MDAwIiAvPjwvdGg+CisgICAgIDx0aD48YSBocmVmPSJqYXZhc2NyaXB0Om1heFNoaXAoJ3NoaXAyMDMnKTsiID5t4Xg8L2E+IDwvdGg+CisgICAgIDx0aD48aW5wdXQgbmFtZT0ic2hpcDIwMyIgc2l6ZT0iMTAiIHZhbHVlPSIwIiBhbHQ9Ik5hdmUgZ3JhbmRlIGRlIGNhcmdhIDE5Ii8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDI3MDAwIj5DcnVjZXJvPC9hPjwvdGg+IAorICAgIDx0aD42PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWF4c2hpcDIwNiIgdmFsdWU9IjYiLz48L3RoPgorPCEtLSAgICA8dGg+MjcwMDAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjA2IiB2YWx1ZT0iMzAwIi8+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNwZWVkMjA2IiB2YWx1ZT0iMjcwMDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMDYiIHZhbHVlPSI4MDAiIC8+PC90aD4KKyAgICAgPHRoPjxhIGhyZWY9ImphdmFzY3JpcHQ6bWF4U2hpcCgnc2hpcDIwNicpOyIgPm3heDwvYT4gPC90aD4KKyAgICAgPHRoPjxpbnB1dCBuYW1lPSJzaGlwMjA2IiBzaXplPSIxMCIgdmFsdWU9IjAiIGFsdD0iQ3J1Y2VybyA2Ii8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDM0MDAiPlJlY2ljbGFkb3I8L2E+PC90aD4gCisgICAgPHRoPjE8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtYXhzaGlwMjA5IiB2YWx1ZT0iMSIvPjwvdGg+Cis8IS0tICAgIDx0aD4zNDAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIwOSIgdmFsdWU9IjMwMCIvPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcGVlZDIwOSIgdmFsdWU9IjM0MDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMDkiIHZhbHVlPSIyMDAwMCIgLz48L3RoPgorICAgICA8dGg+PGEgaHJlZj0iamF2YXNjcmlwdDptYXhTaGlwKCdzaGlwMjA5Jyk7IiA+beF4PC9hPiA8L3RoPgorICAgICA8dGg+PGlucHV0IG5hbWU9InNoaXAyMDkiIHNpemU9IjEwIiB2YWx1ZT0iMCIgYWx0PSJSZWNpY2xhZG9yIDEiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogMTcwMDAwMDAwIj5Tb25kYSBkZSBlc3Bpb25hamU8L2E+PC90aD4gCisgICAgPHRoPjEzOTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1heHNoaXAyMTAiIHZhbHVlPSIxMzkiLz48L3RoPgorPCEtLSAgICA8dGg+MTcwMDAwMDAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIxMCIgdmFsdWU9IjEiLz4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3BlZWQyMTAiIHZhbHVlPSIxNzAwMDAwMDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMTAiIHZhbHVlPSI1IiAvPjwvdGg+CisgICAgIDx0aD48YSBocmVmPSJqYXZhc2NyaXB0Om1heFNoaXAoJ3NoaXAyMTAnKTsiID5t4Xg8L2E+IDwvdGg+CisgICAgIDx0aD48aW5wdXQgbmFtZT0ic2hpcDIxMCIgc2l6ZT0iMTAiIHZhbHVlPSIwIiBhbHQ9IlNvbmRhIGRlIGVzcGlvbmFqZSAxMzkiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgPHRoIGNvbHNwYW49IjIiPjxhIGhyZWY9ImphdmFzY3JpcHQ6bm9TaGlwcygpOyIgPk5pbmd1bmEgbmF2ZTwvYT48L3RoPgorICA8dGggY29sc3Bhbj0iMiI+PGEgaHJlZj0iamF2YXNjcmlwdDptYXhTaGlwcygpOyIgPlRvZGFzIGxhcyBuYXZlczwvYT48L3RoPgorICAgPC90cj4KKyAgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoIGNvbHNwYW49IjQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDb250aW51YXIiIC8+PC90aD4KKyAgIDwvdHI+Cis8dHI+PHRoIGNvbHNwYW49ND4KKzxpZnJhbWUgaWQ9J2E0NGZiNTIyJyBuYW1lPSdhNDRmYjUyMicgc3JjPSdodHRwOi8vYWRzLmdhbWVmb3JnZWFkcy5kZS9hZGZyYW1lLnBocD9uPWE0NGZiNTIyJmFtcDt3aGF0PXpvbmU6NTc4JyBmcmFtZXNwYWNpbmc9JzAnIGZyYW1lYm9yZGVyPSdubycgc2Nyb2xsaW5nPSdubycgd2lkdGg9JzQ2OCcgaGVpZ2h0PSc2MCc+PC9pZnJhbWU+Cis8YnI+PGNlbnRlcj48L2NlbnRlcj48L2JyPgorPC90aD48L3RyPgorPC9mb3JtPgorPC90YWJsZT4KKyA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKaW5kZXggNzM0NDdhZC4uMWFhNjhkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKICAgICAgICAgIyBmcm9tIHJheW1vbmQncyBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uCiAgICAgICAgIFMgPSAnaHR0cDovL3d3dy5weXRob24ub3JnJwogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCdodHRwJywgJzovLycsICd3d3cucHl0aG9uLm9yZycpLCBTLCAncnBhcnRpdGlvbicsICc6Ly8nKQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCdodHRwOi8vd3d3LnB5dGhvbi5vcmcnLCAnJywgJycpLCBTLCAncnBhcnRpdGlvbicsICc/JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnJywgJycsICdodHRwOi8vd3d3LnB5dGhvbi5vcmcnKSwgUywgJ3JwYXJ0aXRpb24nLCAnPycpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJycsICdodHRwOi8vJywgJ3d3dy5weXRob24ub3JnJyksIFMsICdycGFydGl0aW9uJywgJ2h0dHA6Ly8nKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCdodHRwOi8vd3d3LnB5dGhvbi4nLCAnb3JnJywgJycpLCBTLCAncnBhcnRpdGlvbicsICdvcmcnKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X01pbWVXcml0ZXIucHkgYi9MaWIvdGVzdC90ZXN0X01pbWVXcml0ZXIucHkKaW5kZXggNTA0MTEwNS4uZmVjYTE2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9NaW1lV3JpdGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfTWltZVdyaXRlci5weQpAQCAtNyw2ICs3LDggQEAKIAogIiIiCiAKK2ltcG9ydCB1bml0dGVzdCwgc3lzLCBTdHJpbmdJTworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGZyb20gTWltZVdyaXRlciBpbXBvcnQgTWltZVdyaXRlcgogCkBAIC03Nyw5NCArNzksMjEzIEBACiAgICAgICAgIF0KIAogCi1kZWYgbWFpbigpOgotICAgIGltcG9ydCBzeXMKK09VVFBVVCA9ICcnJ1wKK0Zyb206IGJ3YXJzYXdAY25yaS5yZXN0b24udmEudXMKK0RhdGU6IE1vbiBGZWIgMTIgMTc6MjE6NDggRVNUIDE5OTYKK1RvOiBrc3Mtc3VibWl0QGNucmkucmVzdG9uLnZhLnVzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQva25vd2JvdDsKKyAgICBib3VuZGFyeT0iODAxc3BhbTk5OSI7CisgICAgdmVyc2lvbj0iMC4xIgogCi0gICAgIyBUb3BsZXZlbCBoZWFkZXJzCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgogCi0gICAgdG9wbGV2ZWwgPSBNaW1lV3JpdGVyKHN5cy5zdGRvdXQpCi0gICAgdG9wbGV2ZWwuYWRkaGVhZGVyKCJGcm9tIiwgImJ3YXJzYXdAY25yaS5yZXN0b24udmEudXMiKQotICAgIHRvcGxldmVsLmFkZGhlYWRlcigiRGF0ZSIsICJNb24gRmViIDEyIDE3OjIxOjQ4IEVTVCAxOTk2IikKLSAgICB0b3BsZXZlbC5hZGRoZWFkZXIoIlRvIiwgImtzcy1zdWJtaXRAY25yaS5yZXN0b24udmEudXMiKQotICAgIHRvcGxldmVsLmFkZGhlYWRlcigiTUlNRS1WZXJzaW9uIiwgIjEuMCIpCi0KLSAgICAjIFRvcGxldmVsIGJvZHkgcGFydHMKLQotICAgIGYgPSB0b3BsZXZlbC5zdGFydG11bHRpcGFydGJvZHkoImtub3dib3QiLCAiODAxc3BhbTk5OSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCJ2ZXJzaW9uIiwgIjAuMSIpXSwgcHJlZml4PTApCi0gICAgZi53cml0ZSgiVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC5cbiIpCi0KLSAgICAjIEZpcnN0IHRvcGxldmVsIGJvZHkgcGFydDogbWV0YWRhdGEKLQotICAgIG1kID0gdG9wbGV2ZWwubmV4dHBhcnQoKQotICAgIG1kLnN0YXJ0bXVsdGlwYXJ0Ym9keSgia25vd2JvdC1tZXRhZGF0YSIsICI4MDJzcGFtOTk5IikKLQotICAgICMgTWV0YWRhdGEgcGFydCAxCi0KLSAgICBtZDEgPSBtZC5uZXh0cGFydCgpCi0gICAgbWQxLmFkZGhlYWRlcigiS1AtTWV0YWRhdGEtVHlwZSIsICJzaW1wbGUiKQotICAgIG1kMS5hZGRoZWFkZXIoIktQLUFjY2VzcyIsICJyZWFkLW9ubHkiKQotICAgIG0gPSBNaW1lV3JpdGVyKG1kMS5zdGFydGJvZHkoIm1lc3NhZ2UvcmZjODIyIikpCi0gICAgZm9yIGtleSwgdmFsdWUgaW4gU0lNUExFX01FVEFEQVRBOgotICAgICAgICBtLmFkZGhlYWRlcigiS1BNRC0iICsga2V5LCB2YWx1ZSkKLSAgICBtLmZsdXNoaGVhZGVycygpCi0gICAgZGVsIG1kMQotCi0gICAgIyBNZXRhZGF0YSBwYXJ0IDIKLQotICAgIG1kMiA9IG1kLm5leHRwYXJ0KCkKLSAgICBmb3Iga2V5LCB2YWx1ZSBpbiBDT01QTEVYX01FVEFEQVRBOgotICAgICAgICBtZDIuYWRkaGVhZGVyKCJLUC0iICsga2V5LCB2YWx1ZSkKLSAgICBmID0gbWQyLnN0YXJ0Ym9keSgidGV4dC9pc2wiKQotICAgIGYud3JpdGUoU0VMTEVSKQotICAgIGRlbCBtZDIKLQotICAgICMgTWV0YWRhdGEgcGFydCAzCi0KLSAgICBtZDMgPSBtZC5uZXh0cGFydCgpCi0gICAgZiA9IG1kMy5zdGFydGJvZHkoIm1lc3NhZ2UvZXh0ZXJuYWwtYm9keSIsCi0gICAgICAgICAgICAgICAgICAgICAgWygiYWNjZXNzLXR5cGUiLCAiVVJMIiksCi0gICAgICAgICAgICAgICAgICAgICAgICgiVVJMIiwgImhkbDovL2Nucmkua3NzL2dlbmVyaWMta25vd2JvdCIpXSkKLSAgICBtID0gTWltZVdyaXRlcihmKQotICAgIGZvciBrZXksIHZhbHVlIGluIEVYVEVSTkFMX01FVEFEQVRBOgotICAgICAgICBtZDMuYWRkaGVhZGVyKCJLUC0iICsga2V5LCB2YWx1ZSkKLSAgICBtZDMuc3RhcnRib2R5KCJ0ZXh0L2lzbCIpCi0gICAgIyBQaGFudG9tIGJvZHkgZG9lc24ndCBuZWVkIHRvIGJlIHdyaXR0ZW4KLQotICAgIG1kLmxhc3RwYXJ0KCkKLQotICAgICMgU2Vjb25kIHRvcGxldmVsIGJvZHkgcGFydDogY29kZQotCi0gICAgY29kZSA9IHRvcGxldmVsLm5leHRwYXJ0KCkKLSAgICBjb2RlLnN0YXJ0bXVsdGlwYXJ0Ym9keSgia25vd2JvdC1jb2RlIiwgIjgwM3NwYW05OTkiKQotCi0gICAgIyBDb2RlOiBidXllciBwcm9ncmFtIHNvdXJjZQotCi0gICAgYnV5ZXIgPSBjb2RlLm5leHRwYXJ0KCkKLSAgICBidXllci5hZGRoZWFkZXIoIktQLU1vZHVsZS1OYW1lIiwgIkJ1eWVyS1AiKQotICAgIGYgPSBidXllci5zdGFydGJvZHkoInRleHQvcGxhaW4iKQotICAgIGYud3JpdGUoQlVZRVIpCi0KLSAgICBjb2RlLmxhc3RwYXJ0KCkKLQotICAgICMgVGhpcmQgdG9wbGV2ZWwgYm9keSBwYXJ0OiBzdGF0ZQotCi0gICAgc3RhdGUgPSB0b3BsZXZlbC5uZXh0cGFydCgpCi0gICAgc3RhdGUuYWRkaGVhZGVyKCJLUC1NYWluLU1vZHVsZSIsICJtYWluIikKLSAgICBzdGF0ZS5zdGFydG11bHRpcGFydGJvZHkoImtub3dib3Qtc3RhdGUiLCAiODA0c3BhbTk5OSIpCi0KLSAgICAjIFN0YXRlOiBhIGJ1bmNoIG9mIGFzc2lnbm1lbnRzCi0KLSAgICBzdCA9IHN0YXRlLm5leHRwYXJ0KCkKLSAgICBzdC5hZGRoZWFkZXIoIktQLU1vZHVsZS1OYW1lIiwgIm1haW4iKQotICAgIGYgPSBzdC5zdGFydGJvZHkoInRleHQvcGxhaW4iKQotICAgIGYud3JpdGUoU1RBVEUpCi0KLSAgICBzdGF0ZS5sYXN0cGFydCgpCi0KLSAgICAjIEVuZCB0b3BsZXZlbCBib2R5IHBhcnRzCi0KLSAgICB0b3BsZXZlbC5sYXN0cGFydCgpCistLTgwMXNwYW05OTkKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2tub3dib3QtbWV0YWRhdGE7CisgICAgYm91bmRhcnk9IjgwMnNwYW05OTkiCiAKIAotbWFpbigpCistLTgwMnNwYW05OTkKK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKK0tQLU1ldGFkYXRhLVR5cGU6IHNpbXBsZQorS1AtQWNjZXNzOiByZWFkLW9ubHkKKworS1BNRC1JbnRlcnByZXRlcjogcHl0aG9uCitLUE1ELUludGVycHJldGVyLVZlcnNpb246IDEuMworS1BNRC1Pd25lci1OYW1lOiBCYXJyeSBXYXJzYXcKK0tQTUQtT3duZXItUmVuZGV6dm91czogYndhcnNhd0BjbnJpLnJlc3Rvbi52YS51cworS1BNRC1Ib21lLUtTUzoga3NzLmNucmkucmVzdG9uLnZhLnVzCitLUE1ELUlkZW50aWZpZXI6IGhkbDovL2Nucmkua3NzL215X2ZpcnN0X2tub3dib3QKK0tQTUQtTGF1bmNoLURhdGU6IE1vbiBGZWIgMTIgMTY6Mzk6MDMgRVNUIDE5OTYKKworLS04MDJzcGFtOTk5CitDb250ZW50LVR5cGU6IHRleHQvaXNsCitLUC1NZXRhZGF0YS1UeXBlOiBjb21wbGV4CitLUC1NZXRhZGF0YS1LZXk6IGNvbm5lY3Rpb24KK0tQLUFjY2VzczogcmVhZC1vbmx5CitLUC1Db25uZWN0aW9uLURlc2NyaXB0aW9uOiBCYXJyeSdzIEJpZyBCYXNzIEJ1c2luZXNzCitLUC1Db25uZWN0aW9uLUlkOiBCNAorS1AtQ29ubmVjdGlvbi1EaXJlY3Rpb246IGNsaWVudAorCitJTlRFUkZBQ0UgU2VsbGVyLTE7CisKK1RZUEUgU2VsbGVyID0gT0JKRUNUCisgICAgRE9DVU1FTlRBVElPTiAiQSBzaW1wbGUgU2VsbGVyIGludGVyZmFjZSB0byB0ZXN0IElMVSIKKyAgICBNRVRIT0RTCisgICAgICAgICAgICBwcmljZSgpOklOVEVHRVIsCisgICAgRU5EOworCistLTgwMnNwYW05OTkKK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9leHRlcm5hbC1ib2R5OworICAgIGFjY2Vzcy10eXBlPSJVUkwiOworICAgIFVSTD0iaGRsOi8vY25yaS5rc3MvZ2VuZXJpYy1rbm93Ym90IgorCitDb250ZW50LVR5cGU6IHRleHQvaXNsCitLUC1NZXRhZGF0YS1UeXBlOiBjb21wbGV4CitLUC1NZXRhZGF0YS1LZXk6IGdlbmVyaWMtaW50ZXJmYWNlCitLUC1BY2Nlc3M6IHJlYWQtb25seQorS1AtQ29ubmVjdGlvbi1EZXNjcmlwdGlvbjogR2VuZXJpYyBJbnRlcmZhY2UgZm9yIEFsbCBLbm93Ym90cworS1AtQ29ubmVjdGlvbi1JZDogZ2VuZXJpYy1rcAorS1AtQ29ubmVjdGlvbi1EaXJlY3Rpb246IGNsaWVudAorCisKKy0tODAyc3BhbTk5OS0tCisKKy0tODAxc3BhbTk5OQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQva25vd2JvdC1jb2RlOworICAgIGJvdW5kYXJ5PSI4MDNzcGFtOTk5IgorCisKKy0tODAzc3BhbTk5OQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCitLUC1Nb2R1bGUtTmFtZTogQnV5ZXJLUAorCitjbGFzcyBCdXllcjoKKyAgICBkZWYgX19zZXR1cF9fKHNlbGYsIG1heHByaWNlKToKKyAgICAgICAgc2VsZi5fbWF4cHJpY2UgPSBtYXhwcmljZQorCisgICAgZGVmIF9fbWFpbl9fKHNlbGYsIGtvcyk6CisgICAgICAgICIiIkVudHJ5IHBvaW50IHVwb24gYXJyaXZhbCBhdCBhIG5ldyBLT1MuIiIiCisgICAgICAgIGJyb2tlciA9IGtvcy5icm9rZXIoKQorICAgICAgICAjIEI0ID09IEJhcnJ5J3MgQmlnIEJhc3MgQnVzaW5lc3MgOi0pCisgICAgICAgIHNlbGxlciA9IGJyb2tlci5sb29rdXAoJ1NlbGxlcl8xLlNlbGxlcicsICdCNCcpCisgICAgICAgIGlmIHNlbGxlcjoKKyAgICAgICAgICAgIHByaWNlID0gc2VsbGVyLnByaWNlKCkKKyAgICAgICAgICAgIHByaW50ICdTZWxsZXIgd2FudHMgJCcsIHByaWNlLCAnLi4uICcKKyAgICAgICAgICAgIGlmIHByaWNlID4gc2VsZi5fbWF4cHJpY2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3RvbyBtdWNoIScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkknbGwgdGFrZSBpdCEiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAnbm8gc2VsbGVyIGZvdW5kIGhlcmUnCisKKy0tODAzc3BhbTk5OS0tCisKKy0tODAxc3BhbTk5OQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQva25vd2JvdC1zdGF0ZTsKKyAgICBib3VuZGFyeT0iODA0c3BhbTk5OSIKK0tQLU1haW4tTW9kdWxlOiBtYWluCisKKworLS04MDRzcGFtOTk5CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KK0tQLU1vZHVsZS1OYW1lOiBtYWluCisKKyMgaW5zdGFudGlhdGUgYSBidXllciBpbnN0YW5jZSBhbmQgcHV0IGl0IGluIGEgbWFnaWMgcGxhY2UgZm9yIHRoZSBLT1MKKyMgdG8gZmluZC4KK19fa3BfXyA9IEJ1eWVyKCkKK19fa3BfXy5fX3NldHVwX18oNTAwKQorCistLTgwNHNwYW05OTktLQorCistLTgwMXNwYW05OTktLQorJycnCisKK2NsYXNzIE1pbWV3cml0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBidWYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisKKyAgICAgICAgIyBUb3BsZXZlbCBoZWFkZXJzCisKKyAgICAgICAgdG9wbGV2ZWwgPSBNaW1lV3JpdGVyKGJ1ZikKKyAgICAgICAgdG9wbGV2ZWwuYWRkaGVhZGVyKCJGcm9tIiwgImJ3YXJzYXdAY25yaS5yZXN0b24udmEudXMiKQorICAgICAgICB0b3BsZXZlbC5hZGRoZWFkZXIoIkRhdGUiLCAiTW9uIEZlYiAxMiAxNzoyMTo0OCBFU1QgMTk5NiIpCisgICAgICAgIHRvcGxldmVsLmFkZGhlYWRlcigiVG8iLCAia3NzLXN1Ym1pdEBjbnJpLnJlc3Rvbi52YS51cyIpCisgICAgICAgIHRvcGxldmVsLmFkZGhlYWRlcigiTUlNRS1WZXJzaW9uIiwgIjEuMCIpCisKKyAgICAgICAgIyBUb3BsZXZlbCBib2R5IHBhcnRzCisKKyAgICAgICAgZiA9IHRvcGxldmVsLnN0YXJ0bXVsdGlwYXJ0Ym9keSgia25vd2JvdCIsICI4MDFzcGFtOTk5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCJ2ZXJzaW9uIiwgIjAuMSIpXSwgcHJlZml4PTApCisgICAgICAgIGYud3JpdGUoIlRoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuXG4iKQorCisgICAgICAgICMgRmlyc3QgdG9wbGV2ZWwgYm9keSBwYXJ0OiBtZXRhZGF0YQorCisgICAgICAgIG1kID0gdG9wbGV2ZWwubmV4dHBhcnQoKQorICAgICAgICBtZC5zdGFydG11bHRpcGFydGJvZHkoImtub3dib3QtbWV0YWRhdGEiLCAiODAyc3BhbTk5OSIpCisKKyAgICAgICAgIyBNZXRhZGF0YSBwYXJ0IDEKKworICAgICAgICBtZDEgPSBtZC5uZXh0cGFydCgpCisgICAgICAgIG1kMS5hZGRoZWFkZXIoIktQLU1ldGFkYXRhLVR5cGUiLCAic2ltcGxlIikKKyAgICAgICAgbWQxLmFkZGhlYWRlcigiS1AtQWNjZXNzIiwgInJlYWQtb25seSIpCisgICAgICAgIG0gPSBNaW1lV3JpdGVyKG1kMS5zdGFydGJvZHkoIm1lc3NhZ2UvcmZjODIyIikpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIFNJTVBMRV9NRVRBREFUQToKKyAgICAgICAgICAgIG0uYWRkaGVhZGVyKCJLUE1ELSIgKyBrZXksIHZhbHVlKQorICAgICAgICBtLmZsdXNoaGVhZGVycygpCisgICAgICAgIGRlbCBtZDEKKworICAgICAgICAjIE1ldGFkYXRhIHBhcnQgMgorCisgICAgICAgIG1kMiA9IG1kLm5leHRwYXJ0KCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gQ09NUExFWF9NRVRBREFUQToKKyAgICAgICAgICAgIG1kMi5hZGRoZWFkZXIoIktQLSIgKyBrZXksIHZhbHVlKQorICAgICAgICBmID0gbWQyLnN0YXJ0Ym9keSgidGV4dC9pc2wiKQorICAgICAgICBmLndyaXRlKFNFTExFUikKKyAgICAgICAgZGVsIG1kMgorCisgICAgICAgICMgTWV0YWRhdGEgcGFydCAzCisKKyAgICAgICAgbWQzID0gbWQubmV4dHBhcnQoKQorICAgICAgICBmID0gbWQzLnN0YXJ0Ym9keSgibWVzc2FnZS9leHRlcm5hbC1ib2R5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWygiYWNjZXNzLXR5cGUiLCAiVVJMIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlVSTCIsICJoZGw6Ly9jbnJpLmtzcy9nZW5lcmljLWtub3dib3QiKV0pCisgICAgICAgIG0gPSBNaW1lV3JpdGVyKGYpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIEVYVEVSTkFMX01FVEFEQVRBOgorICAgICAgICAgICAgbWQzLmFkZGhlYWRlcigiS1AtIiArIGtleSwgdmFsdWUpCisgICAgICAgIG1kMy5zdGFydGJvZHkoInRleHQvaXNsIikKKyAgICAgICAgIyBQaGFudG9tIGJvZHkgZG9lc24ndCBuZWVkIHRvIGJlIHdyaXR0ZW4KKworICAgICAgICBtZC5sYXN0cGFydCgpCisKKyAgICAgICAgIyBTZWNvbmQgdG9wbGV2ZWwgYm9keSBwYXJ0OiBjb2RlCisKKyAgICAgICAgY29kZSA9IHRvcGxldmVsLm5leHRwYXJ0KCkKKyAgICAgICAgY29kZS5zdGFydG11bHRpcGFydGJvZHkoImtub3dib3QtY29kZSIsICI4MDNzcGFtOTk5IikKKworICAgICAgICAjIENvZGU6IGJ1eWVyIHByb2dyYW0gc291cmNlCisKKyAgICAgICAgYnV5ZXIgPSBjb2RlLm5leHRwYXJ0KCkKKyAgICAgICAgYnV5ZXIuYWRkaGVhZGVyKCJLUC1Nb2R1bGUtTmFtZSIsICJCdXllcktQIikKKyAgICAgICAgZiA9IGJ1eWVyLnN0YXJ0Ym9keSgidGV4dC9wbGFpbiIpCisgICAgICAgIGYud3JpdGUoQlVZRVIpCisKKyAgICAgICAgY29kZS5sYXN0cGFydCgpCisKKyAgICAgICAgIyBUaGlyZCB0b3BsZXZlbCBib2R5IHBhcnQ6IHN0YXRlCisKKyAgICAgICAgc3RhdGUgPSB0b3BsZXZlbC5uZXh0cGFydCgpCisgICAgICAgIHN0YXRlLmFkZGhlYWRlcigiS1AtTWFpbi1Nb2R1bGUiLCAibWFpbiIpCisgICAgICAgIHN0YXRlLnN0YXJ0bXVsdGlwYXJ0Ym9keSgia25vd2JvdC1zdGF0ZSIsICI4MDRzcGFtOTk5IikKKworICAgICAgICAjIFN0YXRlOiBhIGJ1bmNoIG9mIGFzc2lnbm1lbnRzCisKKyAgICAgICAgc3QgPSBzdGF0ZS5uZXh0cGFydCgpCisgICAgICAgIHN0LmFkZGhlYWRlcigiS1AtTW9kdWxlLU5hbWUiLCAibWFpbiIpCisgICAgICAgIGYgPSBzdC5zdGFydGJvZHkoInRleHQvcGxhaW4iKQorICAgICAgICBmLndyaXRlKFNUQVRFKQorCisgICAgICAgIHN0YXRlLmxhc3RwYXJ0KCkKKworICAgICAgICAjIEVuZCB0b3BsZXZlbCBib2R5IHBhcnRzCisKKyAgICAgICAgdG9wbGV2ZWwubGFzdHBhcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksIE9VVFBVVCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChNaW1ld3JpdGVyVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9TdHJpbmdJTy5weSBiL0xpYi90ZXN0L3Rlc3RfU3RyaW5nSU8ucHkKaW5kZXggY2MzMzY3Zi4uOWY3OWIwMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9TdHJpbmdJTy5weQorKysgYi9MaWIvdGVzdC90ZXN0X1N0cmluZ0lPLnB5CkBAIC02Miw2ICs2Miw3IEBACiAgICAgICAgIGVxKGYuZ2V0dmFsdWUoKSwgJ2FiY2RlJykKICAgICAgICAgZi53cml0ZSgneHl6JykKICAgICAgICAgZXEoZi5nZXR2YWx1ZSgpLCAnYWJjZGV4eXonKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLnRydW5jYXRlLCAtMSkKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYud3JpdGUsICdmcm9ibml0eicpCiAKQEAgLTEyMCw2ICsxMjEsMjggQEAKIGNsYXNzIFRlc3RjU3RyaW5nSU8oVGVzdEdlbmVyaWNTdHJpbmdJTyk6CiAgICAgTU9EVUxFID0gY1N0cmluZ0lPCiAKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorCisgICAgICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOiByZXR1cm4KKworICAgICAgICAjIFRoZSBjU3RyaW5nSU8gbW9kdWxlIGNvbnZlcnRzIFVuaWNvZGUgc3RyaW5ncyB0byBjaGFyYWN0ZXIKKyAgICAgICAgIyBzdHJpbmdzIHdoZW4gd3JpdGluZyB0aGVtIHRvIGNTdHJpbmdJTyBvYmplY3RzLgorICAgICAgICAjIENoZWNrIHRoYXQgdGhpcyB3b3Jrcy4KKworICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oKQorICAgICAgICBmLndyaXRlKHVuaWNvZGUoc2VsZi5fbGluZVs6NV0pKQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgJ2FiY2RlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHMpLCB0eXBlcy5TdHJpbmdUeXBlKQorCisgICAgICAgIGYgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTyh1bmljb2RlKHNlbGYuX2xpbmVbOjVdKSkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICdhYmNkZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzKSwgdHlwZXMuU3RyaW5nVHlwZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHNlbGYuTU9EVUxFLlN0cmluZ0lPLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlKCdceGY0JywgJ2xhdGluLTEnKSkKKwogaW1wb3J0IHN5cwogaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKICAgICAjIEp5dGhvbiBkb2Vzbid0IGhhdmUgYSBidWZmZXIgb2JqZWN0LCBzbyB3ZSBqdXN0IGRvIGEgdXNlbGVzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5CmluZGV4IDdkMmIyYWUuLjUwYTJjNzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19mdXR1cmVfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fZnV0dXJlX18ucHkKQEAgLTEsNTkgKzEsNjMgQEAKICMhIC91c3IvYmluL2VudiBweXRob24KLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHZlcmlmeQotZnJvbSB0eXBlcyBpbXBvcnQgVHVwbGVUeXBlLCBTdHJpbmdUeXBlLCBJbnRUeXBlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgX19mdXR1cmVfXwogCiBHT09EX1NFUklBTFMgPSAoImFscGhhIiwgImJldGEiLCAiY2FuZGlkYXRlIiwgImZpbmFsIikKIAogZmVhdHVyZXMgPSBfX2Z1dHVyZV9fLmFsbF9mZWF0dXJlX25hbWVzCiAKLSMgVmVyaWZ5IHRoYXQgYWxsX2ZlYXR1cmVfbmFtZXMgYXBwZWFycyBjb3JyZWN0LgotZ2l2ZW5fZmVhdHVyZV9uYW1lcyA9IGZlYXR1cmVzWzpdCi1mb3IgbmFtZSBpbiBkaXIoX19mdXR1cmVfXyk6Ci0gICAgb2JqID0gZ2V0YXR0cihfX2Z1dHVyZV9fLCBuYW1lLCBOb25lKQotICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShvYmosIF9fZnV0dXJlX18uX0ZlYXR1cmUpOgotICAgICAgICB2ZXJpZnkobmFtZSBpbiBnaXZlbl9mZWF0dXJlX25hbWVzLAotICAgICAgICAgICAgICAgIiVyIHNob3VsZCBoYXZlIGJlZW4gaW4gYWxsX2ZlYXR1cmVfbmFtZXMiICUgbmFtZSkKLSAgICAgICAgZ2l2ZW5fZmVhdHVyZV9uYW1lcy5yZW1vdmUobmFtZSkKLXZlcmlmeShsZW4oZ2l2ZW5fZmVhdHVyZV9uYW1lcykgPT0gMCwKLSAgICAgICAiYWxsX2ZlYXR1cmVfbmFtZXMgaGFzIHRvbyBtdWNoOiAlciIgJSBnaXZlbl9mZWF0dXJlX25hbWVzKQotZGVsIGdpdmVuX2ZlYXR1cmVfbmFtZXMKK2NsYXNzIEZ1dHVyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi1mb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKLSAgICB2YWx1ZSA9IGdldGF0dHIoX19mdXR1cmVfXywgZmVhdHVyZSkKLSAgICBpZiB2ZXJib3NlOgotICAgICAgICBwcmludCAiQ2hlY2tpbmcgX19mdXR1cmVfXyAiLCBmZWF0dXJlLCAidmFsdWUiLCB2YWx1ZQorICAgIGRlZiB0ZXN0X25hbWVzKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IGFsbF9mZWF0dXJlX25hbWVzIGFwcGVhcnMgY29ycmVjdC4KKyAgICAgICAgZ2l2ZW5fZmVhdHVyZV9uYW1lcyA9IGZlYXR1cmVzWzpdCisgICAgICAgIGZvciBuYW1lIGluIGRpcihfX2Z1dHVyZV9fKToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoX19mdXR1cmVfXywgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShvYmosIF9fZnV0dXJlX18uX0ZlYXR1cmUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygKKyAgICAgICAgICAgICAgICAgICAgbmFtZSBpbiBnaXZlbl9mZWF0dXJlX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAiJXIgc2hvdWxkIGhhdmUgYmVlbiBpbiBhbGxfZmVhdHVyZV9uYW1lcyIgJSBuYW1lCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGdpdmVuX2ZlYXR1cmVfbmFtZXMucmVtb3ZlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdpdmVuX2ZlYXR1cmVfbmFtZXMpLCAwLAorICAgICAgICAgICAgICAgImFsbF9mZWF0dXJlX25hbWVzIGhhcyB0b28gbXVjaDogJXIiICUgZ2l2ZW5fZmVhdHVyZV9uYW1lcykKIAotICAgIG9wdGlvbmFsID0gdmFsdWUuZ2V0T3B0aW9uYWxSZWxlYXNlKCkKLSAgICBtYW5kYXRvcnkgPSB2YWx1ZS5nZXRNYW5kYXRvcnlSZWxlYXNlKCkKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihfX2Z1dHVyZV9fLCBmZWF0dXJlKQogCi0gICAgdmVyaWZ5KHR5cGUob3B0aW9uYWwpIGlzIFR1cGxlVHlwZSwgIm9wdGlvbmFsIGlzbid0IHR1cGxlIikKLSAgICB2ZXJpZnkobGVuKG9wdGlvbmFsKSA9PSA1LCAib3B0aW9uYWwgaXNuJ3QgNS10dXBsZSIpCi0gICAgbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IG9wdGlvbmFsCi0gICAgdmVyaWZ5KHR5cGUobWFqb3IpIGlzIEludFR5cGUsICJvcHRpb25hbCBtYWpvciBpc24ndCBpbnQiKQotICAgIHZlcmlmeSh0eXBlKG1pbm9yKSBpcyBJbnRUeXBlLCAib3B0aW9uYWwgbWlub3IgaXNuJ3QgaW50IikKLSAgICB2ZXJpZnkodHlwZShtaWNybykgaXMgSW50VHlwZSwgIm9wdGlvbmFsIG1pY3JvIGlzbid0IGludCIpCi0gICAgdmVyaWZ5KGlzaW5zdGFuY2UobGV2ZWwsIGJhc2VzdHJpbmcpLCAib3B0aW9uYWwgbGV2ZWwgaXNuJ3Qgc3RyaW5nIikKLSAgICB2ZXJpZnkobGV2ZWwgaW4gR09PRF9TRVJJQUxTLAotICAgICAgICAgICAib3B0aW9uYWwgbGV2ZWwgc3RyaW5nIGhhcyB1bmtub3duIHZhbHVlIikKLSAgICB2ZXJpZnkodHlwZShzZXJpYWwpIGlzIEludFR5cGUsICJvcHRpb25hbCBzZXJpYWwgaXNuJ3QgaW50IikKKyAgICAgICAgICAgIG9wdGlvbmFsID0gdmFsdWUuZ2V0T3B0aW9uYWxSZWxlYXNlKCkKKyAgICAgICAgICAgIG1hbmRhdG9yeSA9IHZhbHVlLmdldE1hbmRhdG9yeVJlbGVhc2UoKQogCi0gICAgdmVyaWZ5KHR5cGUobWFuZGF0b3J5KSBpcyBUdXBsZVR5cGUgb3IKLSAgICAgICAgICAgbWFuZGF0b3J5IGlzIE5vbmUsICJtYW5kYXRvcnkgaXNuJ3QgdHVwbGUgb3IgTm9uZSIpCi0gICAgaWYgbWFuZGF0b3J5IGlzIG5vdCBOb25lOgotICAgICAgICB2ZXJpZnkobGVuKG1hbmRhdG9yeSkgPT0gNSwgIm1hbmRhdG9yeSBpc24ndCA1LXR1cGxlIikKLSAgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IG1hbmRhdG9yeQotICAgICAgICB2ZXJpZnkodHlwZShtYWpvcikgaXMgSW50VHlwZSwgIm1hbmRhdG9yeSBtYWpvciBpc24ndCBpbnQiKQotICAgICAgICB2ZXJpZnkodHlwZShtaW5vcikgaXMgSW50VHlwZSwgIm1hbmRhdG9yeSBtaW5vciBpc24ndCBpbnQiKQotICAgICAgICB2ZXJpZnkodHlwZShtaWNybykgaXMgSW50VHlwZSwgIm1hbmRhdG9yeSBtaWNybyBpc24ndCBpbnQiKQotICAgICAgICB2ZXJpZnkoaXNpbnN0YW5jZShsZXZlbCwgYmFzZXN0cmluZyksICJtYW5kYXRvcnkgbGV2ZWwgaXNuJ3Qgc3RyaW5nIikKLSAgICAgICAgdmVyaWZ5KGxldmVsIGluIEdPT0RfU0VSSUFMUywKLSAgICAgICAgICAgICAgICJtYW5kYXRvcnkgc2VyaWFsIHN0cmluZyBoYXMgdW5rbm93biB2YWx1ZSIpCi0gICAgICAgIHZlcmlmeSh0eXBlKHNlcmlhbCkgaXMgSW50VHlwZSwgIm1hbmRhdG9yeSBzZXJpYWwgaXNuJ3QgaW50IikKLSAgICAgICAgdmVyaWZ5KG9wdGlvbmFsIDwgbWFuZGF0b3J5LAotICAgICAgICAgICAgICAgIm9wdGlvbmFsIG5vdCBsZXNzIHRoYW4gbWFuZGF0b3J5LCBhbmQgbWFuZGF0b3J5IG5vdCBOb25lIikKKyAgICAgICAgICAgIGEgPSBzZWxmLmFzc2VydF8KKyAgICAgICAgICAgIGUgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICAgICBkZWYgY2hlY2sodCwgbmFtZSk6CisgICAgICAgICAgICAgICAgYShpc2luc3RhbmNlKHQsIHR1cGxlKSwgIiVzIGlzbid0IHR1cGxlIiAlIG5hbWUpCisgICAgICAgICAgICAgICAgZShsZW4odCksIDUsICIlcyBpc24ndCA1LXR1cGxlIiAlIG5hbWUpCisgICAgICAgICAgICAgICAgKG1ham9yLCBtaW5vciwgbWljcm8sIGxldmVsLCBzZXJpYWwpID0gdAorICAgICAgICAgICAgICAgIGEoaXNpbnN0YW5jZShtYWpvciwgaW50KSwgIiVzIG1ham9yIGlzbid0IGludCIgICUgbmFtZSkKKyAgICAgICAgICAgICAgICBhKGlzaW5zdGFuY2UobWlub3IsIGludCksICIlcyBtaW5vciBpc24ndCBpbnQiICUgbmFtZSkKKyAgICAgICAgICAgICAgICBhKGlzaW5zdGFuY2UobWljcm8sIGludCksICIlcyBtaWNybyBpc24ndCBpbnQiICUgbmFtZSkKKyAgICAgICAgICAgICAgICBhKGlzaW5zdGFuY2UobGV2ZWwsIGJhc2VzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAiJXMgbGV2ZWwgaXNuJ3Qgc3RyaW5nIiAlIG5hbWUpCisgICAgICAgICAgICAgICAgYShsZXZlbCBpbiBHT09EX1NFUklBTFMsCisgICAgICAgICAgICAgICAgICAgICAgICIlcyBsZXZlbCBzdHJpbmcgaGFzIHVua25vd24gdmFsdWUiICUgbmFtZSkKKyAgICAgICAgICAgICAgICBhKGlzaW5zdGFuY2Uoc2VyaWFsLCBpbnQpLCAiJXMgc2VyaWFsIGlzbid0IGludCIgJSBuYW1lKQogCi0gICAgdmVyaWZ5KGhhc2F0dHIodmFsdWUsICJjb21waWxlcl9mbGFnIiksCi0gICAgICAgICAgICJmZWF0dXJlIGlzIG1pc3NpbmcgYSAuY29tcGlsZXJfZmxhZyBhdHRyIikKLSAgICB2ZXJpZnkodHlwZShnZXRhdHRyKHZhbHVlLCAiY29tcGlsZXJfZmxhZyIpKSBpcyBJbnRUeXBlLAotICAgICAgICAgICAiLmNvbXBpbGVyX2ZsYWcgaXNuJ3QgaW50IikKKyAgICAgICAgICAgIGNoZWNrKG9wdGlvbmFsLCAib3B0aW9uYWwiKQorICAgICAgICAgICAgaWYgbWFuZGF0b3J5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNoZWNrKG1hbmRhdG9yeSwgIm1hbmRhdG9yeSIpCisgICAgICAgICAgICAgICAgYShvcHRpb25hbCA8IG1hbmRhdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIG5vdCBsZXNzIHRoYW4gbWFuZGF0b3J5LCBhbmQgbWFuZGF0b3J5IG5vdCBOb25lIikKKworICAgICAgICAgICAgYShoYXNhdHRyKHZhbHVlLCAiY29tcGlsZXJfZmxhZyIpLAorICAgICAgICAgICAgICAgICAgICJmZWF0dXJlIGlzIG1pc3NpbmcgYSAuY29tcGlsZXJfZmxhZyBhdHRyIikKKyAgICAgICAgICAgIGEoaXNpbnN0YW5jZShnZXRhdHRyKHZhbHVlLCAiY29tcGlsZXJfZmxhZyIpLCBpbnQpLAorICAgICAgICAgICAgICAgICAgICIuY29tcGlsZXJfZmxhZyBpc24ndCBpbnQiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGdXR1cmVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5IGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQppbmRleCA2YWRiZjMzLi41Yzc5YjQ4IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKQEAgLTg1LDYgKzg1LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCiAKKyAgICBkZWYgdGVzdF9kZWVwY29weShzZWxmKToKKyAgICAgICAgaW1wb3J0IGNvcHkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYiA9IGNvcHkuZGVlcGNvcHkoYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChhKSwgaWQoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKwogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICAgICAgICAgZm9yIHByb3RvY29sIGluICgwLCAxLCAyKToKICAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5IGIvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weQppbmRleCA4ZGY0NTA0Li44MjcyYWQ5IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJiaW5hc2NpaS5hMmJfcXAoKip7MToxfSkgZGlkbid0IHJhaXNlIFR5cGVFcnJvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3FwKCI9ICIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfcXAoIj0gIiksICI9ICIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3FwKCI9PSIpLCAiPSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3FwKCI9QVgiKSwgIj1BWCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmluYXNjaWkuYjJhX3FwLCBmb289ImJhciIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5IGIvTGliL3Rlc3QvdGVzdF9idWZpby5weQppbmRleCA2MTFjZDY5Li4xNGE5MjZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkKQEAgLTEsNjAgKzEsNjYgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgVGVzdEZhaWxlZCwgVEVTVEZOCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKICMgU2ltcGxlIHRlc3QgdG8gZW5zdXJlIHRoYXQgb3B0aW1pemF0aW9ucyBpbiBmaWxlb2JqZWN0LmMgZGVsaXZlcgogIyB0aGUgZXhwZWN0ZWQgcmVzdWx0cy4gIEZvciBiZXN0IHRlc3RpbmcsIHJ1biB0aGlzIHVuZGVyIGEgZGVidWctYnVpbGQKICMgUHl0aG9uIHRvbyAodG8gZXhlcmNpc2UgYXNzZXJ0cyBpbiB0aGUgQyBjb2RlKS4KIAotIyBSZXBlYXQgc3RyaW5nICdwYXR0ZXJuJyBhcyBvZnRlbiBhcyBuZWVkZWQgdG8gcmVhY2ggdG90YWwgbGVuZ3RoCi0jICdsZW5ndGgnLiAgVGhlbiBjYWxsIHRyeV9vbmUgd2l0aCB0aGF0IHN0cmluZywgYSBzdHJpbmcgb25lIGxhcmdlcgotIyB0aGFuIHRoYXQsIGFuZCBhIHN0cmluZyBvbmUgc21hbGxlciB0aGFuIHRoYXQuICBUaGUgbWFpbiBkcml2ZXIKLSMgZmVlZHMgdGhpcyBhbGwgc21hbGwgc2l6ZXMgYW5kIHZhcmlvdXMgcG93ZXJzIG9mIDIsIHNvIHdlIGV4ZXJjaXNlCi0jIGFsbCBsaWtlbHkgc3RkaW8gYnVmZmVyIHNpemVzLCBhbmQgIm9mZiBieSBvbmUiIGVycm9ycyBvbiBib3RoCi0jIHNpZGVzLgotZGVmIGRyaXZlX29uZShwYXR0ZXJuLCBsZW5ndGgpOgotICAgIHEsIHIgPSBkaXZtb2QobGVuZ3RoLCBsZW4ocGF0dGVybikpCi0gICAgdGVzdHN0cmluZyA9IHBhdHRlcm4gKiBxICsgcGF0dGVybls6cl0KLSAgICB2ZXJpZnkobGVuKHRlc3RzdHJpbmcpID09IGxlbmd0aCkKLSAgICB0cnlfb25lKHRlc3RzdHJpbmcpCi0gICAgdHJ5X29uZSh0ZXN0c3RyaW5nICsgIngiKQotICAgIHRyeV9vbmUodGVzdHN0cmluZ1s6LTFdKQorbGVuZ3RocyA9IHJhbmdlKDEsIDI1NykgKyBbNTEyLCAxMDAwLCAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Mzg0LCAzMjc2OCwgNjU1MzYsIDEwMDAwMDBdCiAKLSMgV3JpdGUgcyArICJcbiIgKyBzIHRvIGZpbGUsIHRoZW4gb3BlbiBpdCBhbmQgZW5zdXJlIHRoYXQgc3VjY2Vzc2l2ZQotIyAucmVhZGxpbmUoKXMgZGVsaXZlciB3aGF0IHdlIHdyb3RlLgotZGVmIHRyeV9vbmUocyk6Ci0gICAgIyBTaW5jZSBDIGRvZXNuJ3QgZ3VhcmFudGVlIHdlIGNhbiB3cml0ZS9yZWFkIGFyYml0cmFyeSBieXRlcyBpbiB0ZXh0Ci0gICAgIyBmaWxlcywgdXNlIGJpbmFyeSBtb2RlLgotICAgIGYgPSBvcGVuKFRFU1RGTiwgIndiIikKLSAgICAjIHdyaXRlIG9uY2Ugd2l0aCBcbiBhbmQgb25jZSB3aXRob3V0Ci0gICAgZi53cml0ZShzKQotICAgIGYud3JpdGUoIlxuIikKLSAgICBmLndyaXRlKHMpCi0gICAgZi5jbG9zZSgpCi0gICAgZiA9IG9wZW4oVEVTVEZOLCAicmIiKQotICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICBpZiBsaW5lICE9IHMgKyAiXG4iOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJFeHBlY3RlZCAlciBnb3QgJXIiICUgKHMgKyAiXG4iLCBsaW5lKSkKLSAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgaWYgbGluZSAhPSBzOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJFeHBlY3RlZCAlciBnb3QgJXIiICUgKHMsIGxpbmUpKQotICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICBpZiBsaW5lOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJFeHBlY3RlZCBFT0YgYnV0IGdvdCAlciIgJSBsaW5lKQotICAgIGYuY2xvc2UoKQorY2xhc3MgQnVmZmVyU2l6ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0cnlfb25lKHNlbGYsIHMpOgorICAgICAgICAjIFdyaXRlIHMgKyAiXG4iICsgcyB0byBmaWxlLCB0aGVuIG9wZW4gaXQgYW5kIGVuc3VyZSB0aGF0IHN1Y2Nlc3NpdmUKKyAgICAgICAgIyAucmVhZGxpbmUoKXMgZGVsaXZlciB3aGF0IHdlIHdyb3RlLgogCi0jIEEgcGF0dGVybiB3aXRoIHByaW1lIGxlbmd0aCwgdG8gYXZvaWQgc2ltcGxlIHJlbGF0aW9uc2hpcHMgd2l0aAotIyBzdGRpbyBidWZmZXIgc2l6ZXMuCi1wcmltZXBhdCA9ICIxMjM0NTY3ODkwXDAwXDAxXDAyXDAzXDA0XDA1XDA2IgorICAgICAgICAjIFNpbmNlIEMgZG9lc24ndCBndWFyYW50ZWUgd2UgY2FuIHdyaXRlL3JlYWQgYXJiaXRyYXJ5IGJ5dGVzIGluIHRleHQKKyAgICAgICAgIyBmaWxlcywgdXNlIGJpbmFyeSBtb2RlLgorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHdyaXRlIG9uY2Ugd2l0aCBcbiBhbmQgb25jZSB3aXRob3V0CisgICAgICAgICAgICBmLndyaXRlKHMpCisgICAgICAgICAgICBmLndyaXRlKCJcbiIpCisgICAgICAgICAgICBmLndyaXRlKHMpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIHMgKyAiXG4iKQorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBzKQorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBsaW5lKSAjIE11c3QgYmUgYXQgRU9GCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCiAKLW51bGxwYXQgPSAiXDAiICogMTAwMAorICAgIGRlZiBkcml2ZV9vbmUoc2VsZiwgcGF0dGVybik6CisgICAgICAgIGZvciBsZW5ndGggaW4gbGVuZ3RoczoKKyAgICAgICAgICAgICMgUmVwZWF0IHN0cmluZyAncGF0dGVybicgYXMgb2Z0ZW4gYXMgbmVlZGVkIHRvIHJlYWNoIHRvdGFsIGxlbmd0aAorICAgICAgICAgICAgIyAnbGVuZ3RoJy4gIFRoZW4gY2FsbCB0cnlfb25lIHdpdGggdGhhdCBzdHJpbmcsIGEgc3RyaW5nIG9uZSBsYXJnZXIKKyAgICAgICAgICAgICMgdGhhbiB0aGF0LCBhbmQgYSBzdHJpbmcgb25lIHNtYWxsZXIgdGhhbiB0aGF0LiAgVHJ5IHRoaXMgd2l0aCBhbGwKKyAgICAgICAgICAgICMgc21hbGwgc2l6ZXMgYW5kIHZhcmlvdXMgcG93ZXJzIG9mIDIsIHNvIHdlIGV4ZXJjaXNlIGFsbCBsaWtlbHkKKyAgICAgICAgICAgICMgc3RkaW8gYnVmZmVyIHNpemVzLCBhbmQgIm9mZiBieSBvbmUiIGVycm9ycyBvbiBib3RoIHNpZGVzLgorICAgICAgICAgICAgcSwgciA9IGRpdm1vZChsZW5ndGgsIGxlbihwYXR0ZXJuKSkKKyAgICAgICAgICAgIHRlc3RzdHJpbmcgPSBwYXR0ZXJuICogcSArIHBhdHRlcm5bOnJdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0c3RyaW5nKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi50cnlfb25lKHRlc3RzdHJpbmcpCisgICAgICAgICAgICBzZWxmLnRyeV9vbmUodGVzdHN0cmluZyArICJ4IikKKyAgICAgICAgICAgIHNlbGYudHJ5X29uZSh0ZXN0c3RyaW5nWzotMV0pCiAKLXRyeToKLSAgICBmb3Igc2l6ZSBpbiByYW5nZSgxLCAyNTcpICsgWzUxMiwgMTAwMCwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTAwMDAsCi0gICAgICAgICAgICAgICAgICAgICAgMTYzODQsIDMyNzY4LCA2NTUzNiwgMTAwMDAwMF06Ci0gICAgICAgIGRyaXZlX29uZShwcmltZXBhdCwgc2l6ZSkKLSAgICAgICAgZHJpdmVfb25lKG51bGxwYXQsIHNpemUpCi1maW5hbGx5OgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IG9zCi0gICAgICAgIG9zLnVubGluayhURVNURk4pCi0gICAgZXhjZXB0OgotICAgICAgICBwYXNzCisgICAgZGVmIHRlc3RfcHJpbWVwYXQoc2VsZik6CisgICAgICAgICMgQSBwYXR0ZXJuIHdpdGggcHJpbWUgbGVuZ3RoLCB0byBhdm9pZCBzaW1wbGUgcmVsYXRpb25zaGlwcyB3aXRoCisgICAgICAgICMgc3RkaW8gYnVmZmVyIHNpemVzLgorICAgICAgICBzZWxmLmRyaXZlX29uZSgiMTIzNDU2Nzg5MFwwMFwwMVwwMlwwM1wwNFwwNVwwNiIpCisKKyAgICBkZWYgdGVzdF9udWxscGF0KHNlbGYpOgorICAgICAgICBzZWxmLmRyaXZlX29uZSgiXDAiICogMTAwMCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQnVmZmVyU2l6ZVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCA3YjI0NWQxLi4zODUwMzFmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC0xMTYsNiArMTE2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKDEyMzQpLCAxMjM0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicygtMTIzNCksIDEyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhYnMoLXN5cy5tYXhpbnQtMSkgPiAwKQogICAgICAgICAjIGZsb2F0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKDAuMCksIDAuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMy4xNCksIDMuMTQpCkBAIC0xNTUsNiArMTU2LDExIEBACiAgICAgICAgIFMgPSBbMTAsIDIwLCAzMF0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnkoeCA+IDQyIGZvciB4IGluIFMpLCBGYWxzZSkKIAorICAgIGRlZiB0ZXN0X25lZyhzZWxmKToKKyAgICAgICAgeCA9IC1zeXMubWF4aW50LTEKKyAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeCwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgteCwgc3lzLm1heGludCsxKQorCiAgICAgZGVmIHRlc3RfY2FsbGFibGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0XyhjYWxsYWJsZShsZW4pKQogICAgICAgICBkZWYgZigpOiBwYXNzCkBAIC02ODYsOSArNjkyLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgcyA9IHJlcHIoLTEtc3lzLm1heGludCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQocykrMSwgLXN5cy5tYXhpbnQpCisgICAgICAgIHggPSBpbnQocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4KzEsIC1zeXMubWF4aW50KQorICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4LCBpbnQpKQogICAgICAgICAjIHNob3VsZCByZXR1cm4gbG9uZwotICAgICAgICBpbnQoc1sxOl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHNbMTpdKSwgc3lzLm1heGludCsxKQogCiAgICAgICAgICMgc2hvdWxkIHJldHVybiBsb25nCiAgICAgICAgIHggPSBpbnQoMWUxMDApCkBAIC03MDYsNiArNzE0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzEyM1wwJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnNTMnLCA0MCkKIAorICAgICAgICAjIFNGIGJ1ZyAxNTQ1NDk3OiBlbWJlZGRlZCBOVUxzIHdlcmUgbm90IGRldGVjdGVkIHdpdGgKKyAgICAgICAgIyBleHBsaWNpdCBiYXNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzEyM1wwJywgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzEyM1x4MDAgMjQ1JywgMjApCisKICAgICAgICAgeCA9IGludCgnMScgKiA2MDApCiAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHgsIGxvbmcpKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NmZ3BhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CmluZGV4IDY2ZmVjZjEuLjM5NzlmMTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CkBAIC0xLDkgKzEsMjkgQEAKIGltcG9ydCBDb25maWdQYXJzZXIKIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgVXNlckRpY3QKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAorY2xhc3MgU29ydGVkRGljdChVc2VyRGljdC5Vc2VyRGljdCk6CisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmRhdGEuaXRlbXMoKQorICAgICAgICByZXN1bHQuc29ydCgpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmRhdGEua2V5cygpCisgICAgICAgIHJlc3VsdC5zb3J0KCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIAorICAgIGRlZiB2YWx1ZXMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaXRlbXMoKQorICAgICAgICByZXR1cm4gW2lbMV0gZm9yIGkgaW4gdmFsdWVzXQorCisgICAgZGVmIGl0ZXJpdGVtcyhzZWxmKTogcmV0dXJuIGl0ZXIoc2VsZi5pdGVtcygpKQorICAgIGRlZiBpdGVya2V5cyhzZWxmKTogcmV0dXJuIGl0ZXIoc2VsZi5rZXlzKCkpCisgICAgX19pdGVyX18gPSBpdGVya2V5cworICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOiByZXR1cm4gaXRlcihzZWxmLnZhbHVlcygpKQogCiBjbGFzcyBUZXN0Q2FzZUJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBuZXdjb25maWcoc2VsZiwgZGVmYXVsdHM9Tm9uZSk6CkBAIC00MTQsMTIgKzQzNCwzNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMiIsIDEuMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjIiLCBvYmplY3QoKSkKIAorY2xhc3MgU29ydGVkVGVzdENhc2UoUmF3Q29uZmlnUGFyc2VyVGVzdENhc2UpOgorICAgIGRlZiBuZXdjb25maWcoc2VsZiwgZGVmYXVsdHM9Tm9uZSk6CisgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcyhkZWZhdWx0cz1kZWZhdWx0cywgZGljdF90eXBlPVNvcnRlZERpY3QpCisgICAgICAgIHJldHVybiBzZWxmLmNmCisKKyAgICBkZWYgdGVzdF9zb3J0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuZnJvbXN0cmluZygiW2JdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAibzQ9MVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIm8zPTJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJvMj0zXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAibzE9NFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlthXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIms9dlxuIikgICAgICAgIAorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHNlbGYuY2Yud3JpdGUob3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlthXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiayA9IHZcblxuIiAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIltiXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAibzEgPSA0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICJvMiA9IDNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm8zID0gMlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAibzQgPSAxXG5cbiIpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBDb25maWdQYXJzZXJUZXN0Q2FzZSwKICAgICAgICAgUmF3Q29uZmlnUGFyc2VyVGVzdENhc2UsCi0gICAgICAgIFNhZmVDb25maWdQYXJzZXJUZXN0Q2FzZQorICAgICAgICBTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2UsCisgICAgICAgIFNvcnRlZFRlc3RDYXNlCiAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jZ2kucHkgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQppbmRleCBmOTNmYTU1Li41MmU1ZTkxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NnaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQpAQCAtMSw4ICsxLDkgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgY2dpCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCiBjbGFzcyBIYWNrZWRTeXNNb2R1bGU6CkBAIC0xMjcsMTE5ICsxMjgsMTI0IEBACiBkZWYgZmlyc3Rfc2Vjb25kX2VsdHMobGlzdCk6CiAgICAgcmV0dXJuIG1hcChsYW1iZGEgcDoocFswXSwgcFsxXVswXSksIGxpc3QpCiAKLWRlZiBtYWluKCk6Ci0gICAgZm9yIG9yaWcsIGV4cGVjdCBpbiBwYXJzZV9xc2xfdGVzdF9jYXNlczoKLSAgICAgICAgcmVzdWx0ID0gY2dpLnBhcnNlX3FzbChvcmlnLCBrZWVwX2JsYW5rX3ZhbHVlcz1UcnVlKQotICAgICAgICBwcmludCByZXByKG9yaWcpLCAnPT4nLCByZXN1bHQKLSAgICAgICAgdmVyaWZ5KHJlc3VsdCA9PSBleHBlY3QsICJFcnJvciBwYXJzaW5nICVzIiAlIHJlcHIob3JpZykpCitjbGFzcyBDZ2lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBmb3Igb3JpZywgZXhwZWN0IGluIHBhcnNlX3N0cmljdF90ZXN0X2Nhc2VzOgotICAgICAgICAjIFRlc3QgYmFzaWMgcGFyc2luZwotICAgICAgICBwcmludCByZXByKG9yaWcpCi0gICAgICAgIGQgPSBkb190ZXN0KG9yaWcsICJHRVQiKQotICAgICAgICB2ZXJpZnkoZCA9PSBleHBlY3QsICJFcnJvciBwYXJzaW5nICVzIiAlIHJlcHIob3JpZykpCi0gICAgICAgIGQgPSBkb190ZXN0KG9yaWcsICJQT1NUIikKLSAgICAgICAgdmVyaWZ5KGQgPT0gZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlcyIgJSByZXByKG9yaWcpKQorICAgIGRlZiB0ZXN0X3FzbChzZWxmKToKKyAgICAgICAgZm9yIG9yaWcsIGV4cGVjdCBpbiBwYXJzZV9xc2xfdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHJlc3VsdCA9IGNnaS5wYXJzZV9xc2wob3JpZywga2VlcF9ibGFua192YWx1ZXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3QsICJFcnJvciBwYXJzaW5nICVzIiAlIHJlcHIob3JpZykpCiAKLSAgICAgICAgZW52ID0geydRVUVSWV9TVFJJTkcnOiBvcmlnfQotICAgICAgICBmY2QgPSBjZ2kuRm9ybUNvbnRlbnREaWN0KGVudikKLSAgICAgICAgc2QgPSBjZ2kuU3ZGb3JtQ29udGVudERpY3QoZW52KQotICAgICAgICBmcyA9IGNnaS5GaWVsZFN0b3JhZ2UoZW52aXJvbj1lbnYpCi0gICAgICAgIGlmIHR5cGUoZXhwZWN0KSA9PSB0eXBlKHt9KToKLSAgICAgICAgICAgICMgdGVzdCBkaWN0IGludGVyZmFjZQotICAgICAgICAgICAgdmVyaWZ5KGxlbihleHBlY3QpID09IGxlbihmY2QpKQotICAgICAgICAgICAgdmVyaWZ5KG5vcm0oZXhwZWN0LmtleXMoKSkgPT0gbm9ybShmY2Qua2V5cygpKSkKLSAgICAgICAgICAgIHZlcmlmeShub3JtKGV4cGVjdC52YWx1ZXMoKSkgPT0gbm9ybShmY2QudmFsdWVzKCkpKQotICAgICAgICAgICAgdmVyaWZ5KG5vcm0oZXhwZWN0Lml0ZW1zKCkpID09IG5vcm0oZmNkLml0ZW1zKCkpKQotICAgICAgICAgICAgdmVyaWZ5KGZjZC5nZXQoIm5vbmV4aXN0ZW50IGZpZWxkIiwgImRlZmF1bHQiKSA9PSAiZGVmYXVsdCIpCi0gICAgICAgICAgICB2ZXJpZnkobGVuKHNkKSA9PSBsZW4oZnMpKQotICAgICAgICAgICAgdmVyaWZ5KG5vcm0oc2Qua2V5cygpKSA9PSBub3JtKGZzLmtleXMoKSkpCi0gICAgICAgICAgICB2ZXJpZnkoZnMuZ2V0dmFsdWUoIm5vbmV4aXN0ZW50IGZpZWxkIiwgImRlZmF1bHQiKSA9PSAiZGVmYXVsdCIpCi0gICAgICAgICAgICAjIHRlc3QgaW5kaXZpZHVhbCBmaWVsZHMKLSAgICAgICAgICAgIGZvciBrZXkgaW4gZXhwZWN0LmtleXMoKToKLSAgICAgICAgICAgICAgICBleHBlY3RfdmFsID0gZXhwZWN0W2tleV0KLSAgICAgICAgICAgICAgICB2ZXJpZnkoa2V5IGluIGZjZCkKLSAgICAgICAgICAgICAgICB2ZXJpZnkobm9ybShmY2Rba2V5XSkgPT0gbm9ybShleHBlY3Rba2V5XSkpCi0gICAgICAgICAgICAgICAgdmVyaWZ5KGZjZC5nZXQoa2V5LCAiZGVmYXVsdCIpID09IGZjZFtrZXldKQotICAgICAgICAgICAgICAgIHZlcmlmeShrZXkgaW4gZnMpCi0gICAgICAgICAgICAgICAgaWYgbGVuKGV4cGVjdF92YWwpID4gMToKLSAgICAgICAgICAgICAgICAgICAgc2luZ2xlX3ZhbHVlID0gMAorICAgIGRlZiB0ZXN0X3N0cmljdChzZWxmKToKKyAgICAgICAgZm9yIG9yaWcsIGV4cGVjdCBpbiBwYXJzZV9zdHJpY3RfdGVzdF9jYXNlczoKKyAgICAgICAgICAgICMgVGVzdCBiYXNpYyBwYXJzaW5nCisgICAgICAgICAgICBkID0gZG9fdGVzdChvcmlnLCAiR0VUIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlcyIgJSByZXByKG9yaWcpKQorICAgICAgICAgICAgZCA9IGRvX3Rlc3Qob3JpZywgIlBPU1QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBleHBlY3QsICJFcnJvciBwYXJzaW5nICVzIiAlIHJlcHIob3JpZykpCisKKyAgICAgICAgICAgIGVudiA9IHsnUVVFUllfU1RSSU5HJzogb3JpZ30KKyAgICAgICAgICAgIGZjZCA9IGNnaS5Gb3JtQ29udGVudERpY3QoZW52KQorICAgICAgICAgICAgc2QgPSBjZ2kuU3ZGb3JtQ29udGVudERpY3QoZW52KQorICAgICAgICAgICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGVudmlyb249ZW52KQorICAgICAgICAgICAgaWYgdHlwZShleHBlY3QpID09IHR5cGUoe30pOgorICAgICAgICAgICAgICAgICMgdGVzdCBkaWN0IGludGVyZmFjZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4cGVjdCksIGxlbihmY2QpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybShleHBlY3Qua2V5cygpKSwgbm9ybShmY2Qua2V5cygpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcm0oZXhwZWN0LnZhbHVlcygpKSwgbm9ybShmY2QudmFsdWVzKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybShleHBlY3QuaXRlbXMoKSksIG5vcm0oZmNkLml0ZW1zKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNkLmdldCgibm9uZXhpc3RlbnQgZmllbGQiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2QpLCBsZW4oZnMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybShzZC5rZXlzKCkpLCBub3JtKGZzLmtleXMoKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5nZXR2YWx1ZSgibm9uZXhpc3RlbnQgZmllbGQiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCisgICAgICAgICAgICAgICAgIyB0ZXN0IGluZGl2aWR1YWwgZmllbGRzCisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBleHBlY3Qua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RfdmFsID0gZXhwZWN0W2tleV0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGtleSBpbiBmY2QpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybShmY2Rba2V5XSksIG5vcm0oZXhwZWN0W2tleV0pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjZC5nZXQoa2V5LCAiZGVmYXVsdCIpLCBmY2Rba2V5XSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGtleSBpbiBmcykKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGV4cGVjdF92YWwpID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZV92YWx1ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZV92YWx1ZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gc2Rba2V5XQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKHNpbmdsZV92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMuZ2V0dmFsdWUoa2V5KSwgZXhwZWN0X3ZhbCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzaW5nbGVfdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgZXhwZWN0X3ZhbFswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMuZ2V0dmFsdWUoa2V5KSwgZXhwZWN0X3ZhbFswXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3JtKHNkLmdldGxpc3Qoa2V5KSksIG5vcm0oZXhwZWN0X3ZhbCkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNpbmdsZV92YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybShzZC52YWx1ZXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZWx0cyhub3JtKGV4cGVjdC52YWx1ZXMoKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3JtKHNkLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X3NlY29uZF9lbHRzKG5vcm0oZXhwZWN0Lml0ZW1zKCkpKSkKKworICAgIGRlZiB0ZXN0X3dlaXJkX2Zvcm1jb250ZW50ZGljdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSB3ZWlyZCBGb3JtQ29udGVudERpY3QgY2xhc3NlcworICAgICAgICBlbnYgPSB7J1FVRVJZX1NUUklORyc6ICJ4PTEmeT0yLjAmej0yLTMuJTJiMCYxPTFhYmMifQorICAgICAgICBleHBlY3QgPSB7J3gnOiAxLCAneSc6IDIuMCwgJ3onOiAnMi0zLiswJywgJzEnOiAnMWFiYyd9CisgICAgICAgIGQgPSBjZ2kuSW50ZXJwRm9ybUNvbnRlbnREaWN0KGVudikKKyAgICAgICAgZm9yIGssIHYgaW4gZXhwZWN0Lml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRba10sIHYpCisgICAgICAgIGZvciBrLCB2IGluIGQuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0W2tdLCB2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcm0oZXhwZWN0LnZhbHVlcygpKSwgbm9ybShkLnZhbHVlcygpKSkKKworICAgIGRlZiB0ZXN0X2xvZyhzZWxmKToKKyAgICAgICAgY2dpLmxvZygiVGVzdGluZyIpCisKKyAgICAgICAgY2dpLmxvZ2ZwID0gU3RyaW5nSU8oKQorICAgICAgICBjZ2kuaW5pdGxvZygiJXMiLCAiVGVzdGluZyBpbml0bG9nIDEiKQorICAgICAgICBjZ2kubG9nKCIlcyIsICJUZXN0aW5nIGxvZyAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZ2kubG9nZnAuZ2V0dmFsdWUoKSwgIlRlc3RpbmcgaW5pdGxvZyAxXG5UZXN0aW5nIGxvZyAyXG4iKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL2Rldi9udWxsIik6CisgICAgICAgICAgICBjZ2kubG9nZnAgPSBOb25lCisgICAgICAgICAgICBjZ2kubG9nZmlsZSA9ICIvZGV2L251bGwiCisgICAgICAgICAgICBjZ2kuaW5pdGxvZygiJXMiLCAiVGVzdGluZyBsb2cgMyIpCisgICAgICAgICAgICBjZ2kubG9nKCJUZXN0aW5nIGxvZyA0IikKKworICAgIGRlZiB0ZXN0X2ZpZWxkc3RvcmFnZV9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIyBGaWVsZFN0b3JhZ2UgdXNlcyByZWFkbGluZSwgd2hpY2ggaGFzIHRoZSBjYXBhY2l0eSB0byByZWFkIGFsbAorICAgICAgICAjIGNvbnRlbnRzIG9mIHRoZSBpbnB1dCBmaWxlIGludG8gbWVtb3J5OyB3ZSB1c2UgcmVhZGxpbmUncyBzaXplIGFyZ3VtZW50CisgICAgICAgICMgdG8gcHJldmVudCB0aGF0IGZvciBmaWxlcyB0aGF0IGRvIG5vdCBjb250YWluIGFueSBuZXdsaW5lcyBpbgorICAgICAgICAjIG5vbi1HRVQvSEVBRCByZXF1ZXN0cworICAgICAgICBjbGFzcyBUZXN0UmVhZGxpbmVGaWxlOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKyAgICAgICAgICAgICAgICBzZWxmLm51bWNhbGxzID0gMAorCisgICAgICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgICAgICAgICBzZWxmLm51bWNhbGxzICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzaXplOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlLnJlYWRsaW5lKHNpemUpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2luZ2xlX3ZhbHVlID0gMQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdmFsID0gc2Rba2V5XQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgICAgICB2ZXJpZnkobm90IHNpbmdsZV92YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgdmVyaWZ5KGZzLmdldHZhbHVlKGtleSkgPT0gZXhwZWN0X3ZhbCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB2ZXJpZnkoc2luZ2xlX3ZhbHVlKQotICAgICAgICAgICAgICAgICAgICB2ZXJpZnkodmFsID09IGV4cGVjdF92YWxbMF0pCi0gICAgICAgICAgICAgICAgICAgIHZlcmlmeShmcy5nZXR2YWx1ZShrZXkpID09IGV4cGVjdF92YWxbMF0pCi0gICAgICAgICAgICAgICAgdmVyaWZ5KG5vcm0oc2QuZ2V0bGlzdChrZXkpKSA9PSBub3JtKGV4cGVjdF92YWwpKQotICAgICAgICAgICAgICAgIGlmIHNpbmdsZV92YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgdmVyaWZ5KG5vcm0oc2QudmFsdWVzKCkpID09IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2VsdHMobm9ybShleHBlY3QudmFsdWVzKCkpKSkKLSAgICAgICAgICAgICAgICAgICAgdmVyaWZ5KG5vcm0oc2QuaXRlbXMoKSkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Rfc2Vjb25kX2VsdHMobm9ybShleHBlY3QuaXRlbXMoKSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlLnJlYWRsaW5lKCkKIAotICAgICMgVGVzdCB0aGUgd2VpcmQgRm9ybUNvbnRlbnREaWN0IGNsYXNzZXMKLSAgICBlbnYgPSB7J1FVRVJZX1NUUklORyc6ICJ4PTEmeT0yLjAmej0yLTMuJTJiMCYxPTFhYmMifQotICAgIGV4cGVjdCA9IHsneCc6IDEsICd5JzogMi4wLCAneic6ICcyLTMuKzAnLCAnMSc6ICcxYWJjJ30KLSAgICBkID0gY2dpLkludGVycEZvcm1Db250ZW50RGljdChlbnYpCi0gICAgZm9yIGssIHYgaW4gZXhwZWN0Lml0ZW1zKCk6Ci0gICAgICAgIHZlcmlmeShkW2tdID09IHYpCi0gICAgZm9yIGssIHYgaW4gZC5pdGVtcygpOgotICAgICAgICB2ZXJpZnkoZXhwZWN0W2tdID09IHYpCi0gICAgdmVyaWZ5KG5vcm0oZXhwZWN0LnZhbHVlcygpKSA9PSBub3JtKGQudmFsdWVzKCkpKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9fZGljdF9fWydmaWxlJ10KKyAgICAgICAgICAgICAgICBhID0gZ2V0YXR0cihmaWxlLCBuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGEsIGludCk6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZSwgYSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYQogCi0gICAgcHJpbnQgIlRlc3RpbmcgbG9nIgotICAgIGNnaS5sb2coIlRlc3RpbmciKQotICAgIGNnaS5sb2dmcCA9IHN5cy5zdGRvdXQKLSAgICBjZ2kuaW5pdGxvZygiJXMiLCAiVGVzdGluZyBpbml0bG9nIDEiKQotICAgIGNnaS5sb2coIiVzIiwgIlRlc3RpbmcgbG9nIDIiKQotICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvZGV2L251bGwiKToKLSAgICAgICAgY2dpLmxvZ2ZwID0gTm9uZQotICAgICAgICBjZ2kubG9nZmlsZSA9ICIvZGV2L251bGwiCi0gICAgICAgIGNnaS5pbml0bG9nKCIlcyIsICJUZXN0aW5nIGxvZyAzIikKLSAgICAgICAgY2dpLmxvZygiVGVzdGluZyBsb2cgNCIpCisgICAgICAgIGYgPSBUZXN0UmVhZGxpbmVGaWxlKHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKSkKKyAgICAgICAgZi53cml0ZSgneCcgKiAyNTYgKiAxMDI0KQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZW52ID0geydSRVFVRVNUX01FVEhPRCc6J1BVVCd9CisgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShmcD1mLCBlbnZpcm9uPWVudikKKyAgICAgICAgIyBpZiB3ZSdyZSBub3QgY2h1bmtpbmcgcHJvcGVybHksIHJlYWRsaW5lIGlzIG9ubHkgY2FsbGVkIHR3aWNlCisgICAgICAgICMgKGJ5IHJlYWRfYmluYXJ5KTsgaWYgd2UgYXJlIGNodW5raW5nIHByb3Blcmx5LCBpdCB3aWxsIGJlIGNhbGxlZCA1IHRpbWVzCisgICAgICAgICMgYXMgbG9uZyBhcyB0aGUgY2h1bmtzaXplIGlzIDEgPDwgMTYuCisgICAgICAgIHNlbGYuYXNzZXJ0XyhmLm51bWNhbGxzID4gMikKIAotICAgIHByaW50ICJUZXN0IEZpZWxkU3RvcmFnZSBtZXRob2RzIHRoYXQgdXNlIHJlYWRsaW5lIgotICAgICMgRmllbGRTdG9yYWdlIHVzZXMgcmVhZGxpbmUsIHdoaWNoIGhhcyB0aGUgY2FwYWNpdHkgdG8gcmVhZCBhbGwKLSAgICAjIGNvbnRlbnRzIG9mIHRoZSBpbnB1dCBmaWxlIGludG8gbWVtb3J5OyB3ZSB1c2UgcmVhZGxpbmUncyBzaXplIGFyZ3VtZW50Ci0gICAgIyB0byBwcmV2ZW50IHRoYXQgZm9yIGZpbGVzIHRoYXQgZG8gbm90IGNvbnRhaW4gYW55IG5ld2xpbmVzIGluCi0gICAgIyBub24tR0VUL0hFQUQgcmVxdWVzdHMKLSAgICBjbGFzcyBUZXN0UmVhZGxpbmVGaWxlOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSk6Ci0gICAgICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCi0gICAgICAgICAgICBzZWxmLm51bWNhbGxzID0gMAotCi0gICAgICAgIGRlZiByZWFkbGluZShzZWxmLCBzaXplPU5vbmUpOgotICAgICAgICAgICAgc2VsZi5udW1jYWxscyArPSAxCi0gICAgICAgICAgICBpZiBzaXplOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGUucmVhZGxpbmUoc2l6ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZS5yZWFkbGluZSgpCi0KLSAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICAgICAgZmlsZSA9IHNlbGYuX19kaWN0X19bJ2ZpbGUnXQotICAgICAgICAgICAgYSA9IGdldGF0dHIoZmlsZSwgbmFtZSkKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGEsIGludCk6Ci0gICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCBhKQotICAgICAgICAgICAgcmV0dXJuIGEKLQotICAgIGYgPSBUZXN0UmVhZGxpbmVGaWxlKHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKSkKLSAgICBmLndyaXRlKCd4JyAqIDI1NiAqIDEwMjQpCi0gICAgZi5zZWVrKDApCi0gICAgZW52ID0geydSRVFVRVNUX01FVEhPRCc6J1BVVCd9Ci0gICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGZwPWYsIGVudmlyb249ZW52KQotICAgICMgaWYgd2UncmUgbm90IGNodW5raW5nIHByb3Blcmx5LCByZWFkbGluZSBpcyBvbmx5IGNhbGxlZCB0d2ljZQotICAgICMgKGJ5IHJlYWRfYmluYXJ5KTsgaWYgd2UgYXJlIGNodW5raW5nIHByb3Blcmx5LCBpdCB3aWxsIGJlIGNhbGxlZCA1IHRpbWVzCi0gICAgIyBhcyBsb25nIGFzIHRoZSBjaHVua3NpemUgaXMgMSA8PCAxNi4KLSAgICB2ZXJpZnkoZi5udW1jYWxscyA+IDIpCi0KLSAgICBwcmludCAiVGVzdCBiYXNpYyBGaWVsZFN0b3JhZ2UgbXVsdGlwYXJ0IHBhcnNpbmciCi0gICAgZW52ID0geydSRVFVRVNUX01FVEhPRCc6J1BPU1QnLCAnQ09OVEVOVF9UWVBFJzonbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0JywgJ0NPTlRFTlRfTEVOR1RIJzonNTU4J30KLSAgICBwb3N0ZGF0YSA9ICIiIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0CisgICAgZGVmIHRlc3RfZmllbGRzdG9yYWdlX211bHRpcGFydChzZWxmKToKKyAgICAgICAgI1Rlc3QgYmFzaWMgRmllbGRTdG9yYWdlIG11bHRpcGFydCBwYXJzaW5nCisgICAgICAgIGVudiA9IHsnUkVRVUVTVF9NRVRIT0QnOidQT1NUJywgJ0NPTlRFTlRfVFlQRSc6J211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NCcsICdDT05URU5UX0xFTkdUSCc6JzU1OCd9CisgICAgICAgIHBvc3RkYXRhID0gIiIiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQKIENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iaWQiCiAKIDEyMzQKQEAgLTI1OSwxNSArMjY1LDE5IEBACiAgQWRkXHgyMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQtLQogIiIiCi0gICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGZwPVN0cmluZ0lPKHBvc3RkYXRhKSwgZW52aXJvbj1lbnYpCi0gICAgdmVyaWZ5KGxlbihmcy5saXN0KSA9PSA0KQotICAgIGV4cGVjdCA9IFt7J25hbWUnOidpZCcsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonMTIzNCd9LAotICAgICAgICAgICAgICB7J25hbWUnOid0aXRsZScsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonJ30sCi0gICAgICAgICAgICAgIHsnbmFtZSc6J2ZpbGUnLCAnZmlsZW5hbWUnOid0ZXN0LnR4dCcsJ3ZhbHVlJzonVGVzdGluZyAxMjMuXG4nfSwKLSAgICAgICAgICAgICAgeyduYW1lJzonc3VibWl0JywgJ2ZpbGVuYW1lJzpOb25lLCAndmFsdWUnOicgQWRkICd9XQotICAgIGZvciB4IGluIHJhbmdlKGxlbihmcy5saXN0KSk6Ci0gICAgICAgIGZvciBrLCBleHAgaW4gZXhwZWN0W3hdLml0ZW1zKCk6Ci0gICAgICAgICAgICBnb3QgPSBnZXRhdHRyKGZzLmxpc3RbeF0sIGspCi0gICAgICAgICAgICB2ZXJpZnkoZ290ID09IGV4cCkKKyAgICAgICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGZwPVN0cmluZ0lPKHBvc3RkYXRhKSwgZW52aXJvbj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihmcy5saXN0KSwgNCkKKyAgICAgICAgZXhwZWN0ID0gW3snbmFtZSc6J2lkJywgJ2ZpbGVuYW1lJzpOb25lLCAndmFsdWUnOicxMjM0J30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOid0aXRsZScsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonJ30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOidmaWxlJywgJ2ZpbGVuYW1lJzondGVzdC50eHQnLCd2YWx1ZSc6J1Rlc3RpbmcgMTIzLlxuJ30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOidzdWJtaXQnLCAnZmlsZW5hbWUnOk5vbmUsICd2YWx1ZSc6JyBBZGQgJ31dCisgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihmcy5saXN0KSk6CisgICAgICAgICAgICBmb3IgaywgZXhwIGluIGV4cGVjdFt4XS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGdvdCA9IGdldGF0dHIoZnMubGlzdFt4XSwgaykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnb3QsIGV4cCkKIAotbWFpbigpCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KENnaVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jbGFzcy5weQppbmRleCBmMzM0NjJhLi4zMjAxZGQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkKQEAgLTE4Niw2ICsxODYsMTQgQEAKIAogIyBMaXN0L2RpY3Qgb3BlcmF0aW9ucwogCitjbGFzcyBFbXB0eTogcGFzcworCit0cnk6CisgICAgMSBpbiBFbXB0eSgpCisgICAgcHJpbnQgJ2ZhaWxlZCwgc2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvcicKK2V4Y2VwdCBUeXBlRXJyb3I6CisgICAgcGFzcworCiAxIGluIHRlc3RtZQogCiB0ZXN0bWVbMV0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfY24ucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2NuLnB5CmluZGV4IDFiZjg1ODMuLmM1NThmMWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfY24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19jbi5weQpAQCAtMzIsNiArMzIsNyBAQAogICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzRceGM4IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YVx1ZmZmZCIpLAogICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAiaWdub3JlIiwgIHUiYWJjXHU4MDRhIiksCiAgICAgICAgICgiXHg4M1x4MzRceDgzXHgzMSIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKHUiXHUzMGZiIiwgInN0cmljdCIsIE5vbmUpLAogICAgICkKIAogY2xhc3MgVGVzdF9HQjE4MDMwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDUsNiArNDYsNyBAQAogICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzRceGM4IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YVx1ZmZmZCIpLAogICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAiaWdub3JlIiwgIHUiYWJjXHU4MDRhIiksCiAgICAgICAgICgiYWJjXHg4NFx4MzlceDg0XHgzOVx4YzFceGM0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YSIpLAorICAgICAgICAodSJcdTMwZmIiLCAic3RyaWN0IiwgIlx4ODE5XHhhNzkiKSwKICAgICApCiAgICAgaGFzX2lzbzEwNjQ2ID0gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CmluZGV4IDgxNTM5NzkuLjNjODAwZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CkBAIC00MjUsNiArNDI1LDEwIEBACiAgICAgICAgICAgICBdCiAgICAgICAgICkKIAorICAgIGRlZiB0ZXN0X2J1ZzE2MDE1MDEoc2VsZik6CisgICAgICAgICMgU0YgYnVnICMxNjAxNTAxOiBjaGVjayB0aGF0IHRoZSBjb2RlYyB3b3JrcyB3aXRoIGEgYnVmZmVyCisgICAgICAgIHVuaWNvZGUoIlx4ZWZceGJiXHhiZiIsICJ1dGYtOC1zaWciKQorCiBjbGFzcyBFc2NhcGVEZWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29kZWNzLmVzY2FwZV9kZWNvZGUoIiIpLCAoIiIsIDApKQpAQCAtOTEwLDYgKzkxNCwxOCBAQAogICAgICAgICBmID0gc2VsZi5yZWFkZXIoc2VsZi5zdHJlYW0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZGxpbmVzKCksIFt1J1x1ZDU1Y1xuJywgdSdcdWFlMDAnXSkKIAorY2xhc3MgRW5jb2RlZEZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oJ1x4ZWRceDk1XHg5Y1xuXHhlYVx4YjhceDgwJykKKyAgICAgICAgZWYgPSBjb2RlY3MuRW5jb2RlZEZpbGUoZiwgJ3V0Zi0xNi1sZScsICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVmLnJlYWQoKSwgJ1xcXHhkNVxuXHgwMFx4MDBceGFlJykKKworICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBlZiA9IGNvZGVjcy5FbmNvZGVkRmlsZShmLCAndXRmLTgnLCAnbGF0aW4xJykKKyAgICAgICAgZWYud3JpdGUoJ1x4YzNceGJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5nZXR2YWx1ZSgpLCAnXHhmYycpCisKIGNsYXNzIFN0cjJTdHJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CkBAIC0xMDUwLDYgKzEwNjYsMTQgQEAKICAgICAicHVueWNvZGUiLAogICAgICJ1bmljb2RlX2ludGVybmFsIgogXQorYnJva2VuX2luY3JlbWVudGFsX2NvZGVycyA9IGJyb2tlbl91bmljb2RlX3dpdGhfc3RyZWFtc1s6XQorCisjIFRoZSBmb2xsb3dpbmcgZW5jb2RpbmdzIG9ubHkgc3VwcG9ydCAic3RyaWN0IiBtb2RlCitvbmx5X3N0cmljdF9tb2RlID0gWworICAgICJpZG5hIiwKKyAgICAiemxpYl9jb2RlYyIsCisgICAgImJ6Ml9jb2RlYyIsCitdCiAKIHRyeToKICAgICBpbXBvcnQgYnoyCkBAIC0xMDk5LDYgKzExMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ICs9IHJlYWRlci5yZWFkKCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWRyZXN1bHQsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChkZWNvZGVkcmVzdWx0LCBzLCBlbmNvZGluZykpCiAKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBicm9rZW5faW5jcmVtZW50YWxfY29kZXJzOgogICAgICAgICAgICAgICAgICMgY2hlY2sgaW5jcmVtZW50YWwgZGVjb2Rlci9lbmNvZGVyIChmZXRjaGVkIHZpYSB0aGUgUHl0aG9uCiAgICAgICAgICAgICAgICAgIyBhbmQgQyBBUEkpIGFuZCBpdGVyZW5jb2RlKCkvaXRlcmRlY29kZSgpCiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMTEzOSw2ICsxMTY0LDI0IEBACiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHUiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKGNvZGVjcy5pdGVyZW5jb2RlKHUiIiwgZW5jb2RpbmcpLCBlbmNvZGluZykpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB1IiIpCiAKKyAgICAgICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gb25seV9zdHJpY3RfbW9kZToKKyAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpbmNyZW1lbnRhbCBkZWNvZGVyL2VuY29kZXIgd2l0aCBlcnJvcnMgYXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXIoZW5jb2RpbmcpKCJpZ25vcmUiKQorICAgICAgICAgICAgICAgICAgICAgICAgY2VuY29kZXIgPSBfdGVzdGNhcGkuY29kZWNfaW5jcmVtZW50YWxlbmNvZGVyKGVuY29kaW5nLCAiaWdub3JlIikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IExvb2t1cEVycm9yOiAjIG5vIEluY3JlbWVudGFsRW5jb2RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZHJlc3VsdCA9ICIiLmpvaW4oZW5jb2Rlci5lbmNvZGUoYykgZm9yIGMgaW4gcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKGVuY29kaW5nKSgiaWdub3JlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRyZXN1bHQgPSB1IiIuam9pbihkZWNvZGVyLmRlY29kZShjKSBmb3IgYyBpbiBlbmNvZGVkcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkcmVzdWx0LCBzLCAiJXIgIT0gJXIgKGVuY29kaW5nPSVyKSIgJSAoZGVjb2RlZHJlc3VsdCwgcywgZW5jb2RpbmcpKQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkcmVzdWx0ID0gIiIuam9pbihjZW5jb2Rlci5lbmNvZGUoYykgZm9yIGMgaW4gcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNkZWNvZGVyID0gX3Rlc3RjYXBpLmNvZGVjX2luY3JlbWVudGFsZGVjb2RlcihlbmNvZGluZywgImlnbm9yZSIpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ID0gdSIiLmpvaW4oY2RlY29kZXIuZGVjb2RlKGMpIGZvciBjIGluIGVuY29kZWRyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWRyZXN1bHQsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChkZWNvZGVkcmVzdWx0LCBzLCBlbmNvZGluZykpCisKICAgICBkZWYgdGVzdF9zZWVrKHNlbGYpOgogICAgICAgICAjIGFsbCBjb2RlY3Mgc2hvdWxkIGJlIGFibGUgdG8gZW5jb2RlIHRoZXNlCiAgICAgICAgIHMgPSB1IiVzXG4lc1xuIiAlICgxMDAqdSJhYmMxMjMiLCAxMDAqdSJkZWY0NTYiKQpAQCAtMTIxNCw2ICsxMjU3LDE5IEBACiAgICAgICAgICAgICAodSIiLCBsZW4oYWxsYnl0ZXMpKQogICAgICAgICApCiAKK2NsYXNzIFdpdGhTdG10VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW5jb2RlZGZpbGUoc2VsZik6CisgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygiXHhjM1x4YmMiKQorICAgICAgICB3aXRoIGNvZGVjcy5FbmNvZGVkRmlsZShmLCAibGF0aW4tMSIsICJ1dGYtOCIpIGFzIGVmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZWYucmVhZCgpLCAiXHhmYyIpCisKKyAgICBkZWYgdGVzdF9zdHJlYW1yZWFkZXJ3cml0ZXIoc2VsZik6CisgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygiXHhjM1x4YmMiKQorICAgICAgICBpbmZvID0gY29kZWNzLmxvb2t1cCgidXRmLTgiKQorICAgICAgICB3aXRoIGNvZGVjcy5TdHJlYW1SZWFkZXJXcml0ZXIoZiwgaW5mby5zdHJlYW1yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnN0cmVhbXdyaXRlciwgJ3N0cmljdCcpIGFzIHNydzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNydy5yZWFkKCksIHUiXHhmYyIpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCkBAIC0xMjM0LDEwICsxMjkwLDEyIEBACiAgICAgICAgIElETkFDb2RlY1Rlc3QsCiAgICAgICAgIENvZGVjc01vZHVsZVRlc3QsCiAgICAgICAgIFN0cmVhbVJlYWRlclRlc3QsCisgICAgICAgIEVuY29kZWRGaWxlVGVzdCwKICAgICAgICAgU3RyMlN0clRlc3QsCiAgICAgICAgIEJhc2ljVW5pY29kZVRlc3QsCiAgICAgICAgIEJhc2ljU3RyVGVzdCwKLSAgICAgICAgQ2hhcm1hcFRlc3QKKyAgICAgICAgQ2hhcm1hcFRlc3QsCisgICAgICAgIFdpdGhTdG10VGVzdCwKICAgICApCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4X2FyZ3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXhfYXJncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmQ1MGE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4X2FyZ3MucHkKQEAgLTAsMCArMSw5MSBAQAorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIENvbXBsZXhBcmdzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrKHNlbGYsIGZ1bmMsIGV4cGVjdGVkLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygqYXJncyksIGV4cGVjdGVkKQorCisgICAgIyBUaGVzZSBmdW5jdGlvbnMgYXJlIHRlc3RlZCBiZWxvdyBhcyBsYW1iZGFzIHRvby4gIElmIHlvdSBhZGQgYSBmdW5jdGlvbiB0ZXN0LAorICAgICMgYWxzbyBhZGQgYSBzaW1pbGFyIGxhbWJkYSB0ZXN0LgorCisgICAgZGVmIHRlc3RfZnVuY19wYXJlbnNfbm9fdW5wYWNraW5nKHNlbGYpOgorICAgICAgICBkZWYgZigoKCgoeCkpKSkpOiByZXR1cm4geAorICAgICAgICBzZWxmLmNoZWNrKGYsIDEsIDEpCisgICAgICAgICMgSW5uZXIgcGFyZW5zIGFyZSBlbGlkZWQsIHNhbWUgYXM6IGYoeCwpCisgICAgICAgIGRlZiBmKCgoeCkpLCk6IHJldHVybiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMiwgMikKKworICAgIGRlZiB0ZXN0X2Z1bmNfMShzZWxmKToKKyAgICAgICAgZGVmIGYoKCgoKHgpLCkpKSk6IHJldHVybiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMywgKDMsKSkKKyAgICAgICAgZGVmIGYoKCgoKHgpKSwpKSk6IHJldHVybiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgNCwgKDQsKSkKKyAgICAgICAgZGVmIGYoKCgoKHgpKSksKSk6IHJldHVybiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgNSwgKDUsKSkKKyAgICAgICAgZGVmIGYoKCh4KSwpKTogcmV0dXJuIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCA2LCAoNiwpKQorCisgICAgZGVmIHRlc3RfZnVuY18yKHNlbGYpOgorICAgICAgICBkZWYgZigoKCgoeCkpLCksKSk6IHJldHVybiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMiwgKCgyLCksKSkKKworICAgIGRlZiB0ZXN0X2Z1bmNfMyhzZWxmKToKKyAgICAgICAgZGVmIGYoKCgoKCh4KSksKSwpLCkpOiByZXR1cm4geAorICAgICAgICBzZWxmLmNoZWNrKGYsIDMsICgoKDMsKSwpLCkpCisKKyAgICBkZWYgdGVzdF9mdW5jX2NvbXBsZXgoc2VsZik6CisgICAgICAgIGRlZiBmKCgoKCgoeCkpLCksKSwpLCBhLCBiLCBjKTogcmV0dXJuIHgsIGEsIGIsIGMKKyAgICAgICAgc2VsZi5jaGVjayhmLCAoMywgOSwgOCwgNyksICgoKDMsKSwpLCksIDksIDgsIDcpCisKKyAgICAgICAgZGVmIGYoKCgoKCgoeCkpLCkpLCksKSwgYSwgYiwgYyk6IHJldHVybiB4LCBhLCBiLCBjCisgICAgICAgIHNlbGYuY2hlY2soZiwgKDMsIDksIDgsIDcpLCAoKCgzLCksKSwpLCA5LCA4LCA3KQorCisgICAgICAgIGRlZiBmKGEsIGIsIGMsICgoKCgoKHgpKSwpKSwpLCkpOiByZXR1cm4gYSwgYiwgYywgeAorICAgICAgICBzZWxmLmNoZWNrKGYsICg5LCA4LCA3LCAzKSwgOSwgOCwgNywgKCgoMywpLCksKSkKKworICAgICMgRHVwbGljYXRlIHRoZSB0ZXN0cyBhYm92ZSwgYnV0IGZvciBsYW1iZGEuICBJZiB5b3UgYWRkIGEgbGFtYmRhIHRlc3QsCisgICAgIyBhbHNvIGFkZCBhIHNpbWlsYXIgZnVuY3Rpb24gdGVzdCBhYm92ZS4KKworICAgIGRlZiB0ZXN0X2xhbWJkYV9wYXJlbnNfbm9fdW5wYWNraW5nKHNlbGYpOgorICAgICAgICBmID0gbGFtYmRhICgoKCgoeCkpKSkpOiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMSwgMSkKKyAgICAgICAgIyBJbm5lciBwYXJlbnMgYXJlIGVsaWRlZCwgc2FtZSBhczogZih4LCkKKyAgICAgICAgZiA9IGxhbWJkYSAoKHgpKSw6IHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAyLCAyKQorCisgICAgZGVmIHRlc3RfbGFtYmRhXzEoc2VsZik6CisgICAgICAgIGYgPSBsYW1iZGEgKCgoKCh4KSwpKSkpOiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMywgKDMsKSkKKyAgICAgICAgZiA9IGxhbWJkYSAoKCgoKHgpKSwpKSk6IHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCA0LCAoNCwpKQorICAgICAgICBmID0gbGFtYmRhICgoKCgoeCkpKSwpKTogeAorICAgICAgICBzZWxmLmNoZWNrKGYsIDUsICg1LCkpCisgICAgICAgIGYgPSBsYW1iZGEgKCgoeCksKSk6IHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCA2LCAoNiwpKQorCisgICAgZGVmIHRlc3RfbGFtYmRhXzIoc2VsZik6CisgICAgICAgIGYgPSBsYW1iZGEgKCgoKCh4KSksKSwpKTogeAorICAgICAgICBzZWxmLmNoZWNrKGYsIDIsICgoMiwpLCkpCisKKyAgICBkZWYgdGVzdF9sYW1iZGFfMyhzZWxmKToKKyAgICAgICAgZiA9IGxhbWJkYSAoKCgoKCh4KSksKSwpLCkpOiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMywgKCgoMywpLCksKSkKKworICAgIGRlZiB0ZXN0X2xhbWJkYV9jb21wbGV4KHNlbGYpOgorICAgICAgICBmID0gbGFtYmRhICgoKCgoeCkpLCksKSwpLCBhLCBiLCBjOiAoeCwgYSwgYiwgYykKKyAgICAgICAgc2VsZi5jaGVjayhmLCAoMywgOSwgOCwgNyksICgoKDMsKSwpLCksIDksIDgsIDcpCisKKyAgICAgICAgZiA9IGxhbWJkYSAoKCgoKCh4KSksKSksKSwpLCBhLCBiLCBjOiAoeCwgYSwgYiwgYykKKyAgICAgICAgc2VsZi5jaGVjayhmLCAoMywgOSwgOCwgNyksICgoKDMsKSwpLCksIDksIDgsIDcpCisKKyAgICAgICAgZiA9IGxhbWJkYSBhLCBiLCBjLCAoKCgoKCh4KSksKSksKSwpOiAoYSwgYiwgYywgeCkKKyAgICAgICAgc2VsZi5jaGVjayhmLCAoOSwgOCwgNywgMyksIDksIDgsIDcsICgoKDMsKSwpLCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29tcGxleEFyZ3NUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IDJjZjM5YWUuLjc0Nzc4NWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTMzMCwzMiArMzMwLDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBzZWxmLmJvaWxlclBsYXRlKGxvY2ssIGxvY2tlZCkKIAotY2xhc3MgRGVjaW1hbENvbnRleHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAjIFhYWCBTb21lYm9keSBzaG91bGQgd3JpdGUgbW9yZSB0aG9yb3VnaCB0ZXN0cyBmb3IgdGhpcwotCi0gICAgZGVmIHRlc3RCYXNpYyhzZWxmKToKLSAgICAgICAgY3R4ID0gZGVjaW1hbC5nZXRjb250ZXh0KCkKLSAgICAgICAgb3JpZ19jb250ZXh0ID0gY3R4LmNvcHkoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjdHgucHJlYyA9IHNhdmVfcHJlYyA9IGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0LnByZWMgKyA1Ci0gICAgICAgICAgICB3aXRoIGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0LmdldF9tYW5hZ2VyKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNpbWFsLmdldGNvbnRleHQoKS5wcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbC5FeHRlbmRlZENvbnRleHQucHJlYykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjaW1hbC5nZXRjb250ZXh0KCkucHJlYywgc2F2ZV9wcmVjKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdpdGggZGVjaW1hbC5FeHRlbmRlZENvbnRleHQuZ2V0X21hbmFnZXIoKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNpbWFsLmdldGNvbnRleHQoKS5wcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0LnByZWMpCi0gICAgICAgICAgICAgICAgICAgIDEvMAotICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjaW1hbC5nZXRjb250ZXh0KCkucHJlYywgc2F2ZV9wcmVjKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkZWNpbWFsLnNldGNvbnRleHQob3JpZ19jb250ZXh0KQotCi0KICMgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgdGVzdCBhY3R1YWxseSBydW4gdW5kZXIgcmVncnRlc3QucHkhCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3N1aXRlKApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb29raWUucHkgYi9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weQppbmRleCBjMjBiZWVlLi5lN2MwY2YxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weQpAQCAtMSw2ICsxLDcgQEAKICMgU2ltcGxlIHRlc3Qgc3VpdGUgZm9yIENvb2tpZS5weQogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UsIHJ1bl9kb2N0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJ1bl9kb2N0ZXN0CitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBDb29raWUKIAogaW1wb3J0IHdhcm5pbmdzCkBAIC04LDQzICs5LDc0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiLiogY2xhc3MgaXMgaW5zZWN1cmUuKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAKLSMgQ3VycmVudGx5IHRoaXMgb25seSB0ZXN0cyBTaW1wbGVDb29raWUKK2NsYXNzIENvb2tpZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEN1cnJlbnRseSB0aGlzIG9ubHkgdGVzdHMgU2ltcGxlQ29va2llCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGNhc2VzID0gWworICAgICAgICAgICAgeyAnZGF0YSc6ICdjaGlwcz1haG95OyB2aWVubmE9ZmluZ2VyJywKKyAgICAgICAgICAgICAgJ2RpY3QnOiB7J2NoaXBzJzonYWhveScsICd2aWVubmEnOidmaW5nZXInfSwKKyAgICAgICAgICAgICAgJ3JlcHInOiAiPFNpbXBsZUNvb2tpZTogY2hpcHM9J2Fob3knIHZpZW5uYT0nZmluZ2VyJz4iLAorICAgICAgICAgICAgICAnb3V0cHV0JzogJ1NldC1Db29raWU6IGNoaXBzPWFob3lcblNldC1Db29raWU6IHZpZW5uYT1maW5nZXInLAorICAgICAgICAgICAgfSwKIAotY2FzZXMgPSBbCi0gICAgKCdjaGlwcz1haG95OyB2aWVubmE9ZmluZ2VyJywgeydjaGlwcyc6J2Fob3knLCAndmllbm5hJzonZmluZ2VyJ30pLAotICAgICgna2VlYmxlcj0iRT1tYzI7IEw9XFwiTG92ZXNcXCI7IGZ1ZGdlPVxcMDEyOyInLAotICAgICB7J2tlZWJsZXInIDogJ0U9bWMyOyBMPSJMb3ZlcyI7IGZ1ZGdlPVwwMTI7J30pLAorICAgICAgICAgICAgeyAnZGF0YSc6ICdrZWVibGVyPSJFPW1jMjsgTD1cXCJMb3Zlc1xcIjsgZnVkZ2U9XFwwMTI7IicsCisgICAgICAgICAgICAgICdkaWN0JzogeydrZWVibGVyJyA6ICdFPW1jMjsgTD0iTG92ZXMiOyBmdWRnZT1cMDEyOyd9LAorICAgICAgICAgICAgICAncmVwcic6ICcnJzxTaW1wbGVDb29raWU6IGtlZWJsZXI9J0U9bWMyOyBMPSJMb3ZlcyI7IGZ1ZGdlPVxcbjsnPicnJywKKyAgICAgICAgICAgICAgJ291dHB1dCc6ICdTZXQtQ29va2llOiBrZWVibGVyPSJFPW1jMjsgTD1cXCJMb3Zlc1xcIjsgZnVkZ2U9XFwwMTI7IicsCisgICAgICAgICAgICB9LAogCi0gICAgIyBDaGVjayBpbGxlZ2FsIGNvb2tpZXMgdGhhdCBoYXZlIGFuICc9JyBjaGFyIGluIGFuIHVucXVvdGVkIHZhbHVlCi0gICAgKCdrZWVibGVyPUU9bWMyJywgeydrZWVibGVyJyA6ICdFPW1jMid9KQotICAgIF0KKyAgICAgICAgICAgICMgQ2hlY2sgaWxsZWdhbCBjb29raWVzIHRoYXQgaGF2ZSBhbiAnPScgY2hhciBpbiBhbiB1bnF1b3RlZCB2YWx1ZQorICAgICAgICAgICAgeyAnZGF0YSc6ICdrZWVibGVyPUU9bWMyJywKKyAgICAgICAgICAgICAgJ2RpY3QnOiB7J2tlZWJsZXInIDogJ0U9bWMyJ30sCisgICAgICAgICAgICAgICdyZXByJzogIjxTaW1wbGVDb29raWU6IGtlZWJsZXI9J0U9bWMyJz4iLAorICAgICAgICAgICAgICAnb3V0cHV0JzogJ1NldC1Db29raWU6IGtlZWJsZXI9RT1tYzInLAorICAgICAgICAgICAgfQorICAgICAgICBdCiAKLWZvciBkYXRhLCBkaWN0IGluIGNhc2VzOgotICAgIEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkgOyBDLmxvYWQoZGF0YSkKLSAgICBwcmludCByZXByKEMpCi0gICAgcHJpbnQgQy5vdXRwdXQoc2VwPSdcbicpCi0gICAgZm9yIGssIHYgaW4gc29ydGVkKGRpY3QuaXRlcml0ZW1zKCkpOgotICAgICAgICBwcmludCAnICcsIGssIHJlcHIoIENba10udmFsdWUgKSwgcmVwcih2KQotICAgICAgICB2ZXJpZnkoQ1trXS52YWx1ZSA9PSB2KQotICAgICAgICBwcmludCBDW2tdCisgICAgICAgIGZvciBjYXNlIGluIGNhc2VzOgorICAgICAgICAgICAgQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQorICAgICAgICAgICAgQy5sb2FkKGNhc2VbJ2RhdGEnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihDKSwgY2FzZVsncmVwciddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm91dHB1dChzZXA9J1xuJyksIGNhc2VbJ291dHB1dCddKQorICAgICAgICAgICAgZm9yIGssIHYgaW4gc29ydGVkKGNhc2VbJ2RpY3QnXS5pdGVyaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDW2tdLnZhbHVlLCB2KQogCi1DID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCi1DLmxvYWQoJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0xOyBQYXRoPS9hY21lJykKKyAgICBkZWYgdGVzdF9sb2FkKHNlbGYpOgorICAgICAgICBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCisgICAgICAgIEMubG9hZCgnQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBWZXJzaW9uPTE7IFBhdGg9L2FjbWUnKQogCi12ZXJpZnkoQ1snQ3VzdG9tZXInXS52YWx1ZSA9PSAnV0lMRV9FX0NPWU9URScpCi12ZXJpZnkoQ1snQ3VzdG9tZXInXVsndmVyc2lvbiddID09ICcxJykKLXZlcmlmeShDWydDdXN0b21lciddWydwYXRoJ10gPT0gJy9hY21lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDWydDdXN0b21lciddLnZhbHVlLCAnV0lMRV9FX0NPWU9URScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsndmVyc2lvbiddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsncGF0aCddLCAnL2FjbWUnKQogCi1wcmludCBDLm91dHB1dChbJ3BhdGgnXSkKLXByaW50IEMuanNfb3V0cHV0KCkKLXByaW50IEMuanNfb3V0cHV0KFsncGF0aCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KFsncGF0aCddKSwKKyAgICAgICAgICAgICdTZXQtQ29va2llOiBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFBhdGg9L2FjbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuanNfb3V0cHV0KCksICIiIgorICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIDwhLS0gYmVnaW4gaGlkaW5nCisgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFBhdGg9L2FjbWU7IFZlcnNpb249MSI7CisgICAgICAgIC8vIGVuZCBoaWRpbmcgLS0+CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5qc19vdXRwdXQoWydwYXRoJ10pLCAiIiIKKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICA8IS0tIGJlZ2luIGhpZGluZworICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBQYXRoPS9hY21lIjsKKyAgICAgICAgLy8gZW5kIGhpZGluZyAtLT4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICIiIikKIAotIyBUcnkgY29va2llIHdpdGggcXVvdGVkIG1ldGEtZGF0YQotQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQotQy5sb2FkKCdDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSInKQotdmVyaWZ5KENbJ0N1c3RvbWVyJ10udmFsdWUgPT0gJ1dJTEVfRV9DT1lPVEUnKQotdmVyaWZ5KENbJ0N1c3RvbWVyJ11bJ3ZlcnNpb24nXSA9PSAnMScpCi12ZXJpZnkoQ1snQ3VzdG9tZXInXVsncGF0aCddID09ICcvYWNtZScpCisgICAgZGVmIHRlc3RfcXVvdGVkX21ldGEoc2VsZik6CisgICAgICAgICMgVHJ5IGNvb2tpZSB3aXRoIHF1b3RlZCBtZXRhLWRhdGEKKyAgICAgICAgQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQorICAgICAgICBDLmxvYWQoJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXS52YWx1ZSwgJ1dJTEVfRV9DT1lPVEUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ3ZlcnNpb24nXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ3BhdGgnXSwgJy9hY21lJykKIAotcHJpbnQgIklmIGFueXRoaW5nIGJsb3dzIHVwIGFmdGVyIHRoaXMgbGluZSwgaXQncyBmcm9tIENvb2tpZSdzIGRvY3Rlc3QuIgotcnVuX2RvY3Rlc3QoQ29va2llKQorZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChDb29raWVUZXN0cykKKyAgICBydW5fZG9jdGVzdChDb29raWUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X2RhdGV0aW1lLnB5CmluZGV4IDc2NWJkYWYuLjMzMjkxMDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYXRldGltZS5weQpAQCAtODUyLDYgKzg1Miw3IEBACiAgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDUsIDMsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgibTolbSBkOiVkIHk6JXkiKSwgIm06MDMgZDowMiB5OjA1IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCIiKSwgIiIpICMgU0YgYnVnICM3NjEzMzcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCd4JyoxMDAwKSwgJ3gnKjEwMDApICMgU0YgYnVnICMxNTU2Nzg0CiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnN0cmZ0aW1lKSAjIG5lZWRzIGFuIGFyZwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuc3RyZnRpbWUsICJvbmUiLCAidHdvIikgIyB0b28gbWFueSBhcmdzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKaW5kZXggNTVhNTNkMy4uNTBkZjkzZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQpAQCAtMjMsNiArMjMsNyBAQAogeW91J3JlIHdvcmtpbmcgdGhyb3VnaCBJRExFLCB5b3UgY2FuIGltcG9ydCB0aGlzIHRlc3QgbW9kdWxlIGFuZCBjYWxsIHRlc3RfbWFpbigpCiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LgogIiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGdsb2IKQEAgLTEwNTcsNiArMTA1OCwzMiBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGMuZmxhZ3MpLCBpZChkLmZsYWdzKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChjLnRyYXBzKSwgaWQoZC50cmFwcykpCiAKK2NsYXNzIFdpdGhTdGF0ZW1lbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIENhbid0IGRvIHRoZXNlIGFzIGRvY3N0cmluZ3MgdW50aWwgUHl0aG9uIDIuNgorICAgICMgYXMgZG9jdGVzdCBjYW4ndCBoYW5kbGUgX19mdXR1cmVfXyBzdGF0ZW1lbnRzCisKKyAgICBkZWYgdGVzdF9sb2NhbGNvbnRleHQoc2VsZik6CisgICAgICAgICMgVXNlIGEgY29weSBvZiB0aGUgY3VycmVudCBjb250ZXh0IGluIHRoZSBibG9jaworICAgICAgICBvcmlnX2N0eCA9IGdldGNvbnRleHQoKQorICAgICAgICB3aXRoIGxvY2FsY29udGV4dCgpIGFzIGVudGVyX2N0eDoKKyAgICAgICAgICAgIHNldF9jdHggPSBnZXRjb250ZXh0KCkKKyAgICAgICAgZmluYWxfY3R4ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0XyhvcmlnX2N0eCBpcyBmaW5hbF9jdHgsICdkaWQgbm90IHJlc3RvcmUgY29udGV4dCBjb3JyZWN0bHknKQorICAgICAgICBzZWxmLmFzc2VydF8ob3JpZ19jdHggaXMgbm90IHNldF9jdHgsICdkaWQgbm90IGNvcHkgdGhlIGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydF8oc2V0X2N0eCBpcyBlbnRlcl9jdHgsICdfX2VudGVyX18gcmV0dXJuZWQgd3JvbmcgY29udGV4dCcpCisKKyAgICBkZWYgdGVzdF9sb2NhbGNvbnRleHRhcmcoc2VsZik6CisgICAgICAgICMgVXNlIGEgY29weSBvZiB0aGUgc3VwcGxpZWQgY29udGV4dCBpbiB0aGUgYmxvY2sKKyAgICAgICAgb3JpZ19jdHggPSBnZXRjb250ZXh0KCkKKyAgICAgICAgbmV3X2N0eCA9IENvbnRleHQocHJlYz00MikKKyAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQobmV3X2N0eCkgYXMgZW50ZXJfY3R4OgorICAgICAgICAgICAgc2V0X2N0eCA9IGdldGNvbnRleHQoKQorICAgICAgICBmaW5hbF9jdHggPSBnZXRjb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG9yaWdfY3R4IGlzIGZpbmFsX2N0eCwgJ2RpZCBub3QgcmVzdG9yZSBjb250ZXh0IGNvcnJlY3RseScpCisgICAgICAgIHNlbGYuYXNzZXJ0XyhzZXRfY3R4LnByZWMgPT0gbmV3X2N0eC5wcmVjLCAnZGlkIG5vdCBzZXQgY29ycmVjdCBjb250ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5ld19jdHggaXMgbm90IHNldF9jdHgsICdkaWQgbm90IGNvcHkgdGhlIGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydF8oc2V0X2N0eCBpcyBlbnRlcl9jdHgsICdfX2VudGVyX18gcmV0dXJuZWQgd3JvbmcgY29udGV4dCcpCisKIGRlZiB0ZXN0X21haW4oYXJpdGg9RmFsc2UsIHZlcmJvc2U9Tm9uZSk6CiAgICAgIiIiIEV4ZWN1dGUgdGhlIHRlc3RzLgogCkBAIC0xMDc3LDYgKzExMDQsNyBAQAogICAgICAgICBEZWNpbWFsUHl0aG9uQVBJdGVzdHMsCiAgICAgICAgIENvbnRleHRBUEl0ZXN0cywKICAgICAgICAgRGVjaW1hbFRlc3QsCisgICAgICAgIFdpdGhTdGF0ZW1lbnRUZXN0LAogICAgIF0KIAogICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CmluZGV4IGQzYWU0NTUuLjI5NjhlM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQpAQCAtMjAxNyw2ICsyMDE3LDEzIEBACiAKICAgICB2ZXJpcyhTdWIudGVzdCgpLCBCYXNlLmFQcm9wKQogCisgICAgIyBWZXJpZnkgdGhhdCBzdXBlcigpIGRvZXNuJ3QgYWxsb3cga2V5d29yZCBhcmdzCisgICAgdHJ5OgorICAgICAgICBzdXBlcihCYXNlLCBrdz0xKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAic3VwZXIgc2hvdWxkbid0IGFjY2VwdCBrZXl3b3JkIGFyZ3MiCiAKIGRlZiBpbmhlcml0cygpOgogICAgIGlmIHZlcmJvc2U6IHByaW50ICJUZXN0aW5nIGluaGVyaXRhbmNlIGZyb20gYmFzaWMgdHlwZXMuLi4iCkBAIC0zNTAxLDYgKzM1MDgsMTMgQEAKICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgInNob3VsZG4ndCBiZSBhYmxlIHRvIGFzc2lnbiB0byBsaXN0Ll9fYmFzZXNfXyIKIAogICAgIHRyeToKKyAgICAgICAgRC5fX2Jhc2VzX18gPSAoQzIsIGxpc3QpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGFzc2VydCAwLCAiYmVzdF9iYXNlIGNhbGN1bGF0aW9uIGZvdW5kIHdhbnRpbmciCisKKyAgICB0cnk6CiAgICAgICAgIGRlbCBELl9fYmFzZXNfXwogICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfZGljdC5weQppbmRleCA3MTdlZDVlLi5mZjZjY2RlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CkBAIC00MzksNiArNDM5LDE2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWxfKCJnWzQyXSBkaWRuJ3QgcmFpc2UgS2V5RXJyb3IiKQogCisgICAgZGVmIHRlc3RfdHVwbGVfa2V5ZXJyb3Ioc2VsZik6CisgICAgICAgICMgU0YgIzE1NzY2NTcKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRbKDEsKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsICgoMSwpLCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm1pc3NpbmcgS2V5RXJyb3IiKQorCiAKIGZyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKaW5kZXggYjVjNTY3Ni4uYWJjZTQxZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQpAQCAtMTk2LDE3ICsxOTYsMjEgQEAKICAgICAgICAgICAgIHRlc3RfY2FwaTIoKQogICAgICAgICAgICAgdGVzdF9jYXBpMygpCiAKKyAgICBkZWYgdGVzdF9XaW5kb3dzRXJyb3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFdpbmRvd3NFcnJvcgorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyKFdpbmRvd3NFcnJvcigxMDAxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAwMSIpCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHIoV2luZG93c0Vycm9yKDEwMDEsICJtZXNzYWdlIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltFcnJvciAxMDAxXSBtZXNzYWdlIikKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpLmVycm5vLCAyMikKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpLndpbmVycm9yLCAxMDAxKQorCiAgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCBleGNlcHRpb24gYXR0cmlidXRlcyBhcmUgaGFwcHkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3RyKHUnSGVsbG8gXHUwMEUxJykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHNhbXBsZVVuaWNvZGVFbmNvZGVFcnJvciA9IGUKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB1bmljb2RlKCdceGZmJykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHNhbXBsZVVuaWNvZGVEZWNvZGVFcnJvciA9IGUKIAogICAgICAgICBleGNlcHRpb25MaXN0ID0gWwogICAgICAgICAgICAgKEJhc2VFeGNlcHRpb24sICgpLCB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgpfSksCkBAIC0yMTgsMTEgKzIyMiwxNiBAQAogICAgICAgICAgICAgKFN5c3RlbUV4aXQsICgnZm9vJywpLAogICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnZm9vJywgJ2FyZ3MnIDogKCdmb28nLCksICdjb2RlJyA6ICdmb28nfSksCiAgICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCksCi0gICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICdmb28nLCAnYXJncycgOiAoJ2ZvbycsKX0pLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnZm9vJywgJ2FyZ3MnIDogKCdmb28nLCksICdmaWxlbmFtZScgOiBOb25lLAorICAgICAgICAgICAgICAgICAnZXJybm8nIDogTm9uZSwgJ3N0cmVycm9yJyA6IE5vbmV9KSwKICAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInKSwKLSAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgnZm9vJywgJ2JhcicpfSksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCisgICAgICAgICAgICAgICAgICdlcnJubycgOiAnZm9vJywgJ3N0cmVycm9yJyA6ICdiYXInfSksCiAgICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicpLAotICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKCdmb28nLCAnYmFyJyl9KSwKKyAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgnZm9vJywgJ2JhcicpLCAnZmlsZW5hbWUnIDogJ2JheicsCisgICAgICAgICAgICAgICAgICdlcnJubycgOiAnZm9vJywgJ3N0cmVycm9yJyA6ICdiYXInfSksCisgICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXV4JyksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKX0pLAogICAgICAgICAgICAgKEVudmlyb25tZW50RXJyb3IsICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKICAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInKSwKICAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICdlcnJubycgOiAnZXJybm9TdHInLApAQCAtMjQ5LDE2ICsyNTgsMTYgQEAKICAgICAgICAgICAgICAgICAgJ3ByaW50X2ZpbGVfYW5kX2xpbmUnIDogTm9uZSwgJ21zZycgOiAnbXNnU3RyJywKICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6IE5vbmUsICdsaW5lbm8nIDogTm9uZSwgJ29mZnNldCcgOiBOb25lfSksCiAgICAgICAgICAgICAoVW5pY29kZUVycm9yLCAoKSwgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoKSx9KSwKLSAgICAgICAgICAgIChzYW1wbGVVbmljb2RlRW5jb2RlRXJyb3IsCi0gICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2FzY2lpJywgdSdIZWxsbyBceGUxJywgNiwgNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KScpLAotICAgICAgICAgICAgICAgICAnZW5jb2RpbmcnIDogJ2FzY2lpJywgJ29iamVjdCcgOiB1J0hlbGxvIFx4ZTEnLAotICAgICAgICAgICAgICAgICAnc3RhcnQnIDogNiwgJ3JlYXNvbicgOiAnb3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSd9KSwKLSAgICAgICAgICAgIChzYW1wbGVVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAoVW5pY29kZUVuY29kZUVycm9yLCAoJ2FzY2lpJywgdSdhJywgMCwgMSwgJ29yZGluYWwgbm90IGluIHJhbmdlJyksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2FzY2lpJywgdSdhJywgMCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkaW5hbCBub3QgaW4gcmFuZ2UnKSwKKyAgICAgICAgICAgICAgICAgJ2VuY29kaW5nJyA6ICdhc2NpaScsICdvYmplY3QnIDogdSdhJywKKyAgICAgICAgICAgICAgICAgJ3N0YXJ0JyA6IDAsICdyZWFzb24nIDogJ29yZGluYWwgbm90IGluIHJhbmdlJ30pLAorICAgICAgICAgICAgKFVuaWNvZGVEZWNvZGVFcnJvciwgKCdhc2NpaScsICdceGZmJywgMCwgMSwgJ29yZGluYWwgbm90IGluIHJhbmdlJyksCiAgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2FzY2lpJywgJ1x4ZmYnLCAwLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGluYWwgbm90IGluIHJhbmdlJyksCiAgICAgICAgICAgICAgICAgICdlbmNvZGluZycgOiAnYXNjaWknLCAnb2JqZWN0JyA6ICdceGZmJywKLSAgICAgICAgICAgICAgICAgJ3N0YXJ0JyA6IDAsICdyZWFzb24nIDogJ29yZGluYWwgbm90IGluIHJhbmdlKDEyOCknfSksCisgICAgICAgICAgICAgICAgICdzdGFydCcgOiAwLCAncmVhc29uJyA6ICdvcmRpbmFsIG5vdCBpbiByYW5nZSd9KSwKICAgICAgICAgICAgIChVbmljb2RlVHJhbnNsYXRlRXJyb3IsICh1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIiksCiAgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAodSdcdTMwNDInLCAwLCAxLCAnb3VjaCcpLAogICAgICAgICAgICAgICAgICAnb2JqZWN0JyA6IHUnXHUzMDQyJywgJ3JlYXNvbicgOiAnb3VjaCcsCkBAIC0yNzQsMTggKzI4MywxNCBAQAogICAgICAgICBleGNlcHQgTmFtZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGZvciBhcmdzIGluIGV4Y2VwdGlvbkxpc3Q6Ci0gICAgICAgICAgICBleHBlY3RlZCA9IGFyZ3NbLTFdCisgICAgICAgIGZvciBleGMsIGFyZ3MsIGV4cGVjdGVkIGluIGV4Y2VwdGlvbkxpc3Q6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZXhjID0gYXJnc1swXQotICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAyOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBleGMKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBleGMoKmFyZ3NbMV0pCisgICAgICAgICAgICAgICAgcmFpc2UgZXhjKCphcmdzKQogICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICAgICAgaWYgKGUgaXMgbm90IGV4YyBhbmQgICAgICMgbmVlZGVkIGZvciBzYW1wbGVVbmljb2RlIGVycm9ycwotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShlKSBpcyBub3QgZXhjKToKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGUpIGlzIG5vdCBleGM6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIyBWZXJpZnkgbW9kdWxlIG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eXBlKGUpLl9fbW9kdWxlX18sICdleGNlcHRpb25zJykKICAgICAgICAgICAgICAgICAjIFZlcmlmeSBubyByZWYgbGVha3MgaW4gRXhjX3N0cigpCiAgICAgICAgICAgICAgICAgcyA9IHN0cihlKQogICAgICAgICAgICAgICAgIGZvciBjaGVja0FyZ05hbWUgaW4gZXhwZWN0ZWQ6CkBAIC0zMzIsNiArMzM3LDE1IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZykKIAorICAgIGRlZiB0ZXN0VW5pY29kZVN0clVzYWdlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBib3RoIGluc3RhbmNlcyBhbmQgY2xhc3NlcyBoYXZlIGEgc3RyIGFuZCB1bmljb2RlCisgICAgICAgICMgcmVwcmVzZW50YXRpb24uCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHIoRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHVuaWNvZGUoRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cihFeGNlcHRpb24oJ2EnKSkpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyh1bmljb2RlKEV4Y2VwdGlvbih1J2EnKSkpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0cykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mY250bC5weSBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKaW5kZXggNThhNTdiNS4uMmQ4MDBiMiAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9mY250bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICdmcmVlYnNkMicsICdmcmVlYnNkMycsICdmcmVlYnNkNCcsICdmcmVlYnNkNScsCiAgICAgICAgICAgICAgICAgICAgICdmcmVlYnNkNicsICdmcmVlYnNkNycsCiAgICAgICAgICAgICAgICAgICAgICdic2RvczInLCAnYnNkb3MzJywgJ2JzZG9zNCcsCi0gICAgICAgICAgICAgICAgICAgICdvcGVuYnNkJywgJ29wZW5ic2QyJywgJ29wZW5ic2QzJyk6CisgICAgICAgICAgICAgICAgICAgICdvcGVuYnNkJywgJ29wZW5ic2QyJywgJ29wZW5ic2QzJywgJ29wZW5ic2Q0Jyk6CiAgICAgaWYgc3RydWN0LmNhbGNzaXplKCdsJykgPT0gODoKICAgICAgICAgb2ZmX3QgPSAnbCcKICAgICAgICAgcGlkX3QgPSAnaScKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKaW5kZXggYTliMzE3MC4uOGJmNWQ2ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKQEAgLTIxOSw4ICsyMTksOCBAQAogICAgIHRlc3RfZXhjKHVuaWNvZGUoJ2FiYyAlXHUzMDAwJywncmF3LXVuaWNvZGUtZXNjYXBlJyksIDEsIFZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXIgJz8nICgweDMwMDApIGF0IGluZGV4IDUiKQogCi10ZXN0X2V4YygnJWQnLCAnMScsIFR5cGVFcnJvciwgImludCBhcmd1bWVudCByZXF1aXJlZCIpCi10ZXN0X2V4YygnJWcnLCAnMScsIFR5cGVFcnJvciwgImZsb2F0IGFyZ3VtZW50IHJlcXVpcmVkIikKK3Rlc3RfZXhjKCclZCcsICcxJywgVHlwZUVycm9yLCAiaW50IGFyZ3VtZW50IHJlcXVpcmVkLCBub3Qgc3RyIikKK3Rlc3RfZXhjKCclZycsICcxJywgVHlwZUVycm9yLCAiZmxvYXQgYXJndW1lbnQgcmVxdWlyZWQsIG5vdCBzdHIiKQogdGVzdF9leGMoJ25vIGZvcm1hdCcsICcxJywgVHlwZUVycm9yLAogICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKQogdGVzdF9leGMoJ25vIGZvcm1hdCcsIHUnMScsIFR5cGVFcnJvciwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKaW5kZXggMDFkNmNkMi4uZWRjMTdmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTIxMCw2ICsyMTAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGEgZGlmZmVyZW50IHRlc3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuZGljdF9hdHRyLCBmLmRpY3RfYXR0cikKIAorICAgIGRlZiB0ZXN0X2J1aWx0aW5fdXBkYXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAjMTU3NjI0MQorICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgbWF4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICdtYXgnKQorICAgICAgICBzZWxmLmFzc2VydF8od3JhcHBlci5fX2RvY19fLnN0YXJ0c3dpdGgoJ21heCgnKSkKIAogY2xhc3MgVGVzdFdyYXBzKFRlc3RVcGRhdGVXcmFwcGVyKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQppbmRleCBmNTQ2MmUyLi45YTVmODI5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQpAQCAtODIsNiArODIsMjcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCiAKKyAgICBkZWYgdGVzdF9wYXJzZXJoYWNrKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhhdCB0aGUgcGFyc2VyLmM6OmZ1dHVyZV9oYWNrIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkCisgICAgICAgICMgTm90ZTogYWx0aG91Z2ggdGhpcyB0ZXN0IG11c3QgcGFzcywgaXQncyBub3QgdGVzdGluZyB0aGUgb3JpZ2luYWwKKyAgICAgICAgIyAgICAgICBidWcgYXMgb2YgMi42IHNpbmNlIHRoZSB3aXRoIHN0YXRlbWVudCBpcyBub3Qgb3B0aW9uYWwgYW5kCisgICAgICAgICMgICAgICAgdGhlIHBhcnNlciBoYWNrIGRpc2FibGVkLiBJZiBhIG5ldyBrZXl3b3JkIGlzIGludHJvZHVjZWQgaW4KKyAgICAgICAgIyAgICAgICAyLjYsIGNoYW5nZSB0aGlzIHRvIHJlZmVyIHRvIHRoZSBuZXcgZnV0dXJlIGltcG9ydC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYygiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiwgd2l0aF9zdGF0ZW1lbnQ7IHdpdGggPSAwIikKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzeW50YXggZXJyb3IgZGlkbid0IG9jY3VyIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjKCJmcm9tIF9fZnV0dXJlX18gaW1wb3J0ICh3aXRoX3N0YXRlbWVudCwgZGl2aXNpb24pOyB3aXRoID0gMCIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic3ludGF4IGVycm9yIGRpZG4ndCBvY2N1ciIpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRnV0dXJlVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjNDYwNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTAsMCArMSwxODQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBvcworaW1wb3J0IGdlbmVyaWNwYXRoCisKK2NsYXNzIEFsbENvbW1vblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydElzKHNlbGYsIGEsIGIpOgorICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBiKQorCisgICAgZGVmIHRlc3RfY29tbW9ucHJlZml4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZ2VuZXJpY3BhdGguY29tbW9ucHJlZml4KFtdKSwKKyAgICAgICAgICAgICIiCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGdlbmVyaWNwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW5zb24vc3BhbSIsICIvaG9tZS9zd2VuL3NwYW0iXSksCisgICAgICAgICAgICAiL2hvbWUvc3dlbiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZ2VuZXJpY3BhdGguY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vZWdncyJdKSwKKyAgICAgICAgICAgICIvaG9tZS9zd2VuLyIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZ2VuZXJpY3BhdGguY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKSwKKyAgICAgICAgICAgICIvaG9tZS9zd2VuL3NwYW0iCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2dldHNpemUoc2VsZik6CisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJpY3BhdGguZ2V0c2l6ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgMykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfdGltZShzZWxmKToKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgImFiIikKKyAgICAgICAgICAgIGYud3JpdGUoImJhciIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBkID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCAiZm9vYmFyIikKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRfKAorICAgICAgICAgICAgICAgIGdlbmVyaWNwYXRoLmdldGN0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4pIDw9CisgICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguZ2V0bXRpbWUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgICkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZW5lcmljcGF0aC5leGlzdHMpCisKKyAgICBkZWYgdGVzdF9pc2RpcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKKyAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdlbmVyaWNwYXRoLmlzZGlyKQorCisgICAgZGVmIHRlc3RfaXNmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2VuZXJpY3BhdGguaXNkaXIpCisKKyAgICAgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CisgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcygKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguc2FtZWZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBUcnVlCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBsaW5rcywgYXNzdW1lIHRoYXQgb3Muc3RhdCBkb2Vzbid0IHJldHVybiByZXNvbmFibGUKKyAgICAgICAgICAgICAgICAjIGlub2RlIGluZm9ybWF0aW9uIGFuZCB0aHVzLCB0aGF0IHNhbWVmaWxlKCkgZG9lc24ndCB3b3JrCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKKyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcygKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNwYXRoLnNhbWVmaWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIikKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIiwgIndiIikKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiYmFyIikKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljcGF0aC5zYW1lZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIpCisgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIikKKyAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZW5lcmljcGF0aC5zYW1lZmlsZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQWxsQ29tbW9uVGVzdCkKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2xvYmFsLnB5IGIvTGliL3Rlc3QvdGVzdF9nbG9iYWwucHkKaW5kZXggNGNjOTUzYy4uMjJlNGIyNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nbG9iYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nbG9iYWwucHkKQEAgLTEsNTEgKzEsNTEgQEAKICIiIlZlcmlmeSB0aGF0IHdhcm5pbmdzIGFyZSBpc3N1ZWQgZm9yIGdsb2JhbCBzdGF0ZW1lbnRzIGZvbGxvd2luZyB1c2UuIiIiCiAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNoZWNrX3N5bnRheAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19zeW50YXhfZXJyb3IKK2ltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgd2FybmluZ3MKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsIG1vZHVsZT0iPHRlc3Qgc3RyaW5nPiIpCiAKLXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsIG1vZHVsZT0iPHRlc3QgY29kZT4iKQorY2xhc3MgR2xvYmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi1kZWYgY29tcGlsZV9hbmRfY2hlY2sodGV4dCwgc2hvdWxkX2ZhaWw9MSk6Ci0gICAgdHJ5OgotICAgICAgICBjb21waWxlKHRleHQsICI8dGVzdCBjb2RlPiIsICJleGVjIikKLSAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKLSAgICAgICAgaWYgc2hvdWxkX2ZhaWw6Ci0gICAgICAgICAgICBwcmludCAiZ290IFN5bnRheEVycm9yIGFzIGV4cGVjdGVkIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgInJhaXNlZCB1bmV4cGVjdGVkIFN5bnRheEVycm9yOiIsIHRleHQKLSAgICBlbHNlOgotICAgICAgICBpZiBzaG91bGRfZmFpbDoKLSAgICAgICAgICAgIHByaW50ICJzaG91bGQgaGF2ZSByYWlzZWQgU3ludGF4RXJyb3I6IiwgdGV4dAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgImFzIGV4cGVjdGVkLCBubyBTeW50YXhFcnJvciIKLQotcHJvZ190ZXh0XzEgPSAiIiIKKyAgICBkZWYgdGVzdDEoc2VsZik6CisgICAgICAgIHByb2dfdGV4dF8xID0gIiIiXAogZGVmIHdyb25nMSgpOgogICAgIGEgPSAxCiAgICAgYiA9IDIKICAgICBnbG9iYWwgYQogICAgIGdsb2JhbCBiCiAiIiIKLWNvbXBpbGVfYW5kX2NoZWNrKHByb2dfdGV4dF8xKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgcHJvZ190ZXh0XzEpCiAKLXByb2dfdGV4dF8yID0gIiIiCisgICAgZGVmIHRlc3QyKHNlbGYpOgorICAgICAgICBwcm9nX3RleHRfMiA9ICIiIlwKIGRlZiB3cm9uZzIoKToKICAgICBwcmludCB4CiAgICAgZ2xvYmFsIHgKICIiIgotY29tcGlsZV9hbmRfY2hlY2socHJvZ190ZXh0XzIpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCBwcm9nX3RleHRfMikKIAotcHJvZ190ZXh0XzMgPSAiIiIKKyAgICBkZWYgdGVzdDMoc2VsZik6CisgICAgICAgIHByb2dfdGV4dF8zID0gIiIiXAogZGVmIHdyb25nMygpOgogICAgIHByaW50IHgKICAgICB4ID0gMgogICAgIGdsb2JhbCB4CiAiIiIKLWNvbXBpbGVfYW5kX2NoZWNrKHByb2dfdGV4dF8zKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgcHJvZ190ZXh0XzMpCiAKLXByb2dfdGV4dF80ID0gIiIiCisgICAgZGVmIHRlc3Q0KHNlbGYpOgorICAgICAgICBwcm9nX3RleHRfNCA9ICIiIlwKIGdsb2JhbCB4CiB4ID0gMgogIiIiCi1jb21waWxlX2FuZF9jaGVjayhwcm9nX3RleHRfNCwgMCkKKyAgICAgICAgIyB0aGlzIHNob3VsZCB3b3JrCisgICAgICAgIGNvbXBpbGUocHJvZ190ZXh0XzQsICI8dGVzdCBzdHJpbmc+IiwgImV4ZWMiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoR2xvYmFsVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weSBiL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQppbmRleCBjYTg0YzU2Li5mNGEwNDc4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CkBAIC04LDgzMCArOCw4OTcgQEAKICMgcmVncmVzc2lvbiB0ZXN0LCB0aGUgZmlsdGVyd2FybmluZ3MoKSBjYWxsIGhhcyBiZWVuIGFkZGVkIHRvCiAjIHJlZ3J0ZXN0LnB5LgogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0RmFpbGVkLCB2ZXJpZnksIHZlcmVxLCBjaGVja19zeW50YXgKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfc3ludGF4X2Vycm9yCitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKKyMgdGVzdGluZyBpbXBvcnQgKgorZnJvbSBzeXMgaW1wb3J0ICoKIAotcHJpbnQgJzEuIFBhcnNlcicKK2NsYXNzIFRva2VuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi1wcmludCAnMS4xIFRva2VucycKKyAgICBkZWYgdGVzdEJhY2tzbGFzaChzZWxmKToKKyAgICAgICAgIyBCYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb246CisgICAgICAgIHggPSAxIFwKKyAgICAgICAgKyAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDIsICdiYWNrc2xhc2ggZm9yIGxpbmUgY29udGludWF0aW9uJykKIAotcHJpbnQgJzEuMS4xIEJhY2tzbGFzaGVzJworICAgICAgICAjIEJhY2tzbGFzaCBkb2VzIG5vdCBtZWFucyBjb250aW51YXRpb24gaW4gY29tbWVudHMgOlwKKyAgICAgICAgeCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgMCwgJ2JhY2tzbGFzaCBlbmRpbmcgY29tbWVudCcpCiAKLSMgQmFja3NsYXNoIG1lYW5zIGxpbmUgY29udGludWF0aW9uOgoteCA9IDEgXAotKyAxCi1pZiB4ICE9IDI6IHJhaXNlIFRlc3RGYWlsZWQsICdiYWNrc2xhc2ggZm9yIGxpbmUgY29udGludWF0aW9uJworICAgIGRlZiB0ZXN0UGxhaW5JbnRlZ2VycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMHhmZiwgMjU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwMzc3LCAyNTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIxNDc0ODM2NDcsIDAxNzc3Nzc3Nzc3NykKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IG1heGludAorICAgICAgICBpZiBtYXhpbnQgPT0gMjE0NzQ4MzY0NzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKC0yMTQ3NDgzNjQ3LTEsIC0wMjAwMDAwMDAwMDApCisgICAgICAgICAgICAjIFhYWCAtMjE0NzQ4MzY0OAorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDAzNzc3Nzc3Nzc3NyA+IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydF8oMHhmZmZmZmZmZiA+IDApCisgICAgICAgICAgICBmb3IgcyBpbiAnMjE0NzQ4MzY0OCcsICcwNDAwMDAwMDAwMDAnLCAnMHgxMDAwMDAwMDAnOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgeCA9IGV2YWwocykKKyAgICAgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJPdmVyZmxvd0Vycm9yIG9uIGh1Z2UgaW50ZWdlciBsaXRlcmFsICVyIiAlIHMpCisgICAgICAgIGVsaWYgbWF4aW50ID09IDkyMjMzNzIwMzY4NTQ3NzU4MDc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygtOTIyMzM3MjAzNjg1NDc3NTgwNy0xLCAtMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydF8oMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDB4ZmZmZmZmZmZmZmZmZmZmZiA+IDApCisgICAgICAgICAgICBmb3IgcyBpbiAnOTIyMzM3MjAzNjg1NDc3NTgwOCcsICcwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICcweDEwMDAwMDAwMDAwMDAwMDAwJzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHggPSBldmFsKHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiT3ZlcmZsb3dFcnJvciBvbiBodWdlIGludGVnZXIgbGl0ZXJhbCAlciIgJSBzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdXZWlyZCBtYXhpbnQgdmFsdWUgJXInICUgbWF4aW50KQogCi0jIEJhY2tzbGFzaCBkb2VzIG5vdCBtZWFucyBjb250aW51YXRpb24gaW4gY29tbWVudHMgOlwKLXggPSAwCi1pZiB4ICE9IDA6IHJhaXNlIFRlc3RGYWlsZWQsICdiYWNrc2xhc2ggZW5kaW5nIGNvbW1lbnQnCisgICAgZGVmIHRlc3RMb25nSW50ZWdlcnMoc2VsZik6CisgICAgICAgIHggPSAwTAorICAgICAgICB4ID0gMGwKKyAgICAgICAgeCA9IDB4ZmZmZmZmZmZmZmZmZmZmZkwKKyAgICAgICAgeCA9IDB4ZmZmZmZmZmZmZmZmZmZmZmwKKyAgICAgICAgeCA9IDA3Nzc3Nzc3Nzc3Nzc3Nzc3N0wKKyAgICAgICAgeCA9IDA3Nzc3Nzc3Nzc3Nzc3Nzc3N2wKKyAgICAgICAgeCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MEwKKyAgICAgICAgeCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MGwKIAotcHJpbnQgJzEuMS4yIE51bWVyaWMgbGl0ZXJhbHMnCisgICAgZGVmIHRlc3RGbG9hdHMoc2VsZik6CisgICAgICAgIHggPSAzLjE0CisgICAgICAgIHggPSAzMTQuCisgICAgICAgIHggPSAwLjMxNAorICAgICAgICAjIFhYWCB4ID0gMDAwLjMxNAorICAgICAgICB4ID0gLjMxNAorICAgICAgICB4ID0gM2UxNAorICAgICAgICB4ID0gM0UxNAorICAgICAgICB4ID0gM2UtMTQKKyAgICAgICAgeCA9IDNlKzE0CisgICAgICAgIHggPSAzLmUxNAorICAgICAgICB4ID0gLjNlMTQKKyAgICAgICAgeCA9IDMuMWU0CiAKLXByaW50ICcxLjEuMi4xIFBsYWluIGludGVnZXJzJwotaWYgMHhmZiAhPSAyNTU6IHJhaXNlIFRlc3RGYWlsZWQsICdoZXggaW50JwotaWYgMDM3NyAhPSAyNTU6IHJhaXNlIFRlc3RGYWlsZWQsICdvY3RhbCBpbnQnCi1pZiAgMjE0NzQ4MzY0NyAgICE9IDAxNzc3Nzc3Nzc3NzogcmFpc2UgVGVzdEZhaWxlZCwgJ2xhcmdlIHBvc2l0aXZlIGludCcKLXRyeToKLSAgICBmcm9tIHN5cyBpbXBvcnQgbWF4aW50Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgbWF4aW50ID0gMjE0NzQ4MzY0NwotaWYgbWF4aW50ID09IDIxNDc0ODM2NDc6Ci0gICAgIyBUaGUgZm9sbG93aW5nIHRlc3Qgd2lsbCBzdGFydCB0byBmYWlsIGluIFB5dGhvbiAyLjQ7Ci0gICAgIyBjaGFuZ2UgdGhlIDAyMDAwMDAwMDAwMCB0byAtMDIwMDAwMDAwMDAwCi0gICAgaWYgLTIxNDc0ODM2NDctMSAhPSAtMDIwMDAwMDAwMDAwOiByYWlzZSBUZXN0RmFpbGVkLCAnbWF4IG5lZ2F0aXZlIGludCcKLSAgICAjIFhYWCAtMjE0NzQ4MzY0OAotICAgIGlmIDAzNzc3Nzc3Nzc3NyA8IDA6IHJhaXNlIFRlc3RGYWlsZWQsICdsYXJnZSBvY3QnCi0gICAgaWYgMHhmZmZmZmZmZiA8IDA6IHJhaXNlIFRlc3RGYWlsZWQsICdsYXJnZSBoZXgnCi0gICAgZm9yIHMgaW4gJzIxNDc0ODM2NDgnLCAnMDQwMDAwMDAwMDAwJywgJzB4MTAwMDAwMDAwJzoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgeCA9IGV2YWwocykKLSAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiT3ZlcmZsb3dFcnJvciBvbiBodWdlIGludGVnZXIgbGl0ZXJhbCAiICsgcmVwcihzKQotZWxpZiBldmFsKCdtYXhpbnQgPT0gOTIyMzM3MjAzNjg1NDc3NTgwNycpOgotICAgIGlmIGV2YWwoJy05MjIzMzcyMDM2ODU0Nzc1ODA3LTEgIT0gLTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk6Ci0gICAgICAgIHJhaXNlIFRlc3RGYWlsZWQsICdtYXggbmVnYXRpdmUgaW50JwotICAgIGlmIGV2YWwoJzAxNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3JykgPCAwOiByYWlzZSBUZXN0RmFpbGVkLCAnbGFyZ2Ugb2N0JwotICAgIGlmIGV2YWwoJzB4ZmZmZmZmZmZmZmZmZmZmZicpIDwgMDogcmFpc2UgVGVzdEZhaWxlZCwgJ2xhcmdlIGhleCcKLSAgICBmb3IgcyBpbiAnOTIyMzM3MjAzNjg1NDc3NTgwOCcsICcwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsIFwKLSAgICAgICAgICAgICAnMHgxMDAwMDAwMDAwMDAwMDAwMCc6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHggPSBldmFsKHMpCi0gICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgotICAgICAgICAgICAgcHJpbnQgIk92ZXJmbG93RXJyb3Igb24gaHVnZSBpbnRlZ2VyIGxpdGVyYWwgIiArIHJlcHIocykKLWVsc2U6Ci0gICAgcHJpbnQgJ1dlaXJkIG1heGludCB2YWx1ZScsIG1heGludAotCi1wcmludCAnMS4xLjIuMiBMb25nIGludGVnZXJzJwoteCA9IDBMCi14ID0gMGwKLXggPSAweGZmZmZmZmZmZmZmZmZmZmZMCi14ID0gMHhmZmZmZmZmZmZmZmZmZmZmbAoteCA9IDA3Nzc3Nzc3Nzc3Nzc3Nzc3N0wKLXggPSAwNzc3Nzc3Nzc3Nzc3Nzc3NzdsCi14ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwTAoteCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MGwKLQotcHJpbnQgJzEuMS4yLjMgRmxvYXRpbmcgcG9pbnQnCi14ID0gMy4xNAoteCA9IDMxNC4KLXggPSAwLjMxNAotIyBYWFggeCA9IDAwMC4zMTQKLXggPSAuMzE0Ci14ID0gM2UxNAoteCA9IDNFMTQKLXggPSAzZS0xNAoteCA9IDNlKzE0Ci14ID0gMy5lMTQKLXggPSAuM2UxNAoteCA9IDMuMWU0Ci0KLXByaW50ICcxLjEuMyBTdHJpbmcgbGl0ZXJhbHMnCi0KLXggPSAnJzsgeSA9ICIiOyB2ZXJpZnkobGVuKHgpID09IDAgYW5kIHggPT0geSkKLXggPSAnXCcnOyB5ID0gIiciOyB2ZXJpZnkobGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM5KQoteCA9ICciJzsgeSA9ICJcIiI7IHZlcmlmeShsZW4oeCkgPT0gMSBhbmQgeCA9PSB5IGFuZCBvcmQoeCkgPT0gMzQpCi14ID0gImRvZXNuJ3QgXCJzaHJpbmtcIiBkb2VzIGl0IgoteSA9ICdkb2VzblwndCAic2hyaW5rIiBkb2VzIGl0JwotdmVyaWZ5KGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQoteCA9ICJkb2VzIFwic2hyaW5rXCIgZG9lc24ndCBpdCIKLXkgPSAnZG9lcyAic2hyaW5rIiBkb2VzblwndCBpdCcKLXZlcmlmeShsZW4oeCkgPT0gMjQgYW5kIHggPT0geSkKLXggPSAiIiIKKyAgICBkZWYgdGVzdFN0cmluZ0xpdGVyYWxzKHNlbGYpOgorICAgICAgICB4ID0gJyc7IHkgPSAiIjsgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAwIGFuZCB4ID09IHkpCisgICAgICAgIHggPSAnXCcnOyB5ID0gIiciOyBzZWxmLmFzc2VydF8obGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM5KQorICAgICAgICB4ID0gJyInOyB5ID0gIlwiIjsgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzNCkKKyAgICAgICAgeCA9ICJkb2Vzbid0IFwic2hyaW5rXCIgZG9lcyBpdCIKKyAgICAgICAgeSA9ICdkb2VzblwndCAic2hyaW5rIiBkb2VzIGl0JworICAgICAgICBzZWxmLmFzc2VydF8obGVuKHgpID09IDI0IGFuZCB4ID09IHkpCisgICAgICAgIHggPSAiZG9lcyBcInNocmlua1wiIGRvZXNuJ3QgaXQiCisgICAgICAgIHkgPSAnZG9lcyAic2hyaW5rIiBkb2VzblwndCBpdCcKKyAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQorICAgICAgICB4ID0gIiIiCiBUaGUgInF1aWNrIgogYnJvd24gZm94CiBqdW1wcyBvdmVyCiB0aGUgJ2xhenknIGRvZy4KICIiIgoteSA9ICdcblRoZSAicXVpY2siXG5icm93biBmb3hcbmp1bXBzIG92ZXJcbnRoZSBcJ2xhenlcJyBkb2cuXG4nCi12ZXJpZnkoeCA9PSB5KQoteSA9ICcnJworICAgICAgICB5ID0gJ1xuVGhlICJxdWljayJcbmJyb3duIGZveFxuanVtcHMgb3ZlclxudGhlIFwnbGF6eVwnIGRvZy5cbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgeSkKKyAgICAgICAgeSA9ICcnJwogVGhlICJxdWljayIKIGJyb3duIGZveAoganVtcHMgb3ZlcgogdGhlICdsYXp5JyBkb2cuCi0nJyc7IHZlcmlmeSh4ID09IHkpCi15ID0gIlxuXAorJycnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIHkpCisgICAgICAgIHkgPSAiXG5cCiBUaGUgXCJxdWlja1wiXG5cCiBicm93biBmb3hcblwKIGp1bXBzIG92ZXJcblwKIHRoZSAnbGF6eScgZG9nLlxuXAotIjsgdmVyaWZ5KHggPT0geSkKLXkgPSAnXG5cCisiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIHkpCisgICAgICAgIHkgPSAnXG5cCiBUaGUgXCJxdWlja1wiXG5cCiBicm93biBmb3hcblwKIGp1bXBzIG92ZXJcblwKIHRoZSBcJ2xhenlcJyBkb2cuXG5cCi0nOyB2ZXJpZnkoeCA9PSB5KQorJworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCB5KQorCisgICAgZGVmIHRlc3RFbGxpcHNpcyhzZWxmKToKKyAgICAgICAgeCA9IC4uLgorICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyBFbGxpcHNpcykKKworY2xhc3MgR3JhbW1hclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgc2luZ2xlX2lucHV0OiBORVdMSU5FIHwgc2ltcGxlX3N0bXQgfCBjb21wb3VuZF9zdG10IE5FV0xJTkUKKyAgICAjIFhYWCBjYW4ndCB0ZXN0IGluIGEgc2NyaXB0IC0tIHRoaXMgcnVsZSBpcyBvbmx5IHVzZWQgd2hlbiBpbnRlcmFjdGl2ZQorCisgICAgIyBmaWxlX2lucHV0OiAoTkVXTElORSB8IHN0bXQpKiBFTkRNQVJLRVIKKyAgICAjIEJlaW5nIHRlc3RlZCBhcyB0aGlzIHZlcnkgbW9tZW50IHRoaXMgdmVyeSBtb2R1bGUKKworICAgICMgZXhwcl9pbnB1dDogdGVzdGxpc3QgTkVXTElORQorICAgICMgWFhYIEhhcmQgdG8gdGVzdCAtLSB1c2VkIG9ubHkgaW4gY2FsbHMgdG8gaW5wdXQoKQorCisgICAgZGVmIHRlc3RFdmFsSW5wdXQoc2VsZik6CisgICAgICAgICMgdGVzdGxpc3QgRU5ETUFSS0VSCisgICAgICAgIHggPSBldmFsKCcxLCAwIG9yIDEnKQorCisgICAgZGVmIHRlc3RGdW5jZGVmKHNlbGYpOgorICAgICAgICAjIyMgJ2RlZicgTkFNRSBwYXJhbWV0ZXJzICc6JyBzdWl0ZQorICAgICAgICAjIyMgcGFyYW1ldGVyczogJygnIFt2YXJhcmdzbGlzdF0gJyknCisgICAgICAgICMjIyB2YXJhcmdzbGlzdDogKGZwZGVmIFsnPScgdGVzdF0gJywnKSoKKyAgICAgICAgIyMjICAgICAgICAgICAoJyonIChOQU1FfCcsJyBmcGRlZiBbJz0nIHRlc3RdKSBbJywnICgnKionfCcqJyAnKicpIE5BTUVdCisgICAgICAgICMjIyAgICAgICAgICAgIHwgKCcqKid8JyonICcqJykgTkFNRSkKKyAgICAgICAgIyMjICAgICAgICAgICAgfCBmcGRlZiBbJz0nIHRlc3RdICgnLCcgZnBkZWYgWyc9JyB0ZXN0XSkqIFsnLCddCisgICAgICAgICMjIyBmcGRlZjogTkFNRSB8ICcoJyBmcGxpc3QgJyknCisgICAgICAgICMjIyBmcGxpc3Q6IGZwZGVmICgnLCcgZnBkZWYpKiBbJywnXQorICAgICAgICAjIyMgYXJnbGlzdDogKGFyZ3VtZW50ICcsJykqIChhcmd1bWVudCB8IConIHRlc3QgWycsJyAnKionIHRlc3RdIHwgJyoqJyB0ZXN0KQorICAgICAgICAjIyMgYXJndW1lbnQ6IFt0ZXN0ICc9J10gdGVzdCAgICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdAorICAgICAgICBkZWYgZjEoKTogcGFzcworICAgICAgICBmMSgpCisgICAgICAgIGYxKCooKSkKKyAgICAgICAgZjEoKigpLCAqKnt9KQorICAgICAgICBkZWYgZjIob25lX2FyZ3VtZW50KTogcGFzcworICAgICAgICBkZWYgZjModHdvLCBhcmd1bWVudHMpOiBwYXNzCisgICAgICAgIGRlZiBmNCh0d28sIChjb21wb3VuZCwgKGFyZ3VtZW50LCBsaXN0KSkpOiBwYXNzCisgICAgICAgIGRlZiBmNSgoY29tcG91bmQsIGZpcnN0KSwgdHdvKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmMi5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnb25lX2FyZ3VtZW50JywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmMy5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgndHdvJywgJ2FyZ3VtZW50cycpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjQuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgICgndHdvJywgJyhjb21wb3VuZCwgKGFyZ3VtZW50LCBsaXN0KSknLCAnY29tcG91bmQnLCAnYXJndW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGlzdCcsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGY1LmZ1bmNfY29kZS5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICAoJyhjb21wb3VuZCwgZmlyc3QpJywgJ3R3bycsICdjb21wb3VuZCcsICdmaXJzdCcpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjQuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgKCd0d28nLCAnLjEnLCAnY29tcG91bmQnLCAnYXJndW1lbnQnLCAgJ2xpc3QnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGY1LmZ1bmNfY29kZS5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICgnLjAnLCAndHdvJywgJ2NvbXBvdW5kJywgJ2ZpcnN0JykpCisgICAgICAgIGRlZiBhMShvbmVfYXJnLCk6IHBhc3MKKyAgICAgICAgZGVmIGEyKHR3bywgYXJncywpOiBwYXNzCisgICAgICAgIGRlZiB2MCgqcmVzdCk6IHBhc3MKKyAgICAgICAgZGVmIHYxKGEsICpyZXN0KTogcGFzcworICAgICAgICBkZWYgdjIoYSwgYiwgKnJlc3QpOiBwYXNzCisgICAgICAgIGRlZiB2MyhhLCAoYiwgYyksICpyZXN0KTogcmV0dXJuIGEsIGIsIGMsIHJlc3QKKworICAgICAgICBmMSgpCisgICAgICAgIGYyKDEpCisgICAgICAgIGYyKDEsKQorICAgICAgICBmMygxLCAyKQorICAgICAgICBmMygxLCAyLCkKKyAgICAgICAgZjQoMSwgKDIsICgzLCA0KSkpCisgICAgICAgIHYwKCkKKyAgICAgICAgdjAoMSkKKyAgICAgICAgdjAoMSwpCisgICAgICAgIHYwKDEsMikKKyAgICAgICAgdjAoMSwyLDMsNCw1LDYsNyw4LDksMCkKKyAgICAgICAgdjEoMSkKKyAgICAgICAgdjEoMSwpCisgICAgICAgIHYxKDEsMikKKyAgICAgICAgdjEoMSwyLDMpCisgICAgICAgIHYxKDEsMiwzLDQsNSw2LDcsOCw5LDApCisgICAgICAgIHYyKDEsMikKKyAgICAgICAgdjIoMSwyLDMpCisgICAgICAgIHYyKDEsMiwzLDQpCisgICAgICAgIHYyKDEsMiwzLDQsNSw2LDcsOCw5LDApCisgICAgICAgIHYzKDEsKDIsMykpCisgICAgICAgIHYzKDEsKDIsMyksNCkKKyAgICAgICAgdjMoMSwoMiwzKSw0LDUsNiw3LDgsOSwwKQorCisgICAgICAgICMgY2V2YWwgdW5wYWNrcyB0aGUgZm9ybWFsIGFyZ3VtZW50cyBpbnRvIHRoZSBmaXJzdCBhcmdjb3VudCBuYW1lczsKKyAgICAgICAgIyB0aHVzLCB0aGUgbmFtZXMgbmVzdGVkIGluc2lkZSB0dXBsZXMgbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlc2UgbmFtZXMuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh2My5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnYScsICcoYiwgYyknLCAncmVzdCcsICdiJywgJ2MnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHYzLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdhJywgJy4xJywgJ3Jlc3QnLCAnYicsICdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHYzKDEsICgyLCAzKSwgNCksICgxLCAyLCAzLCAoNCwpKSkKKyAgICAgICAgZGVmIGQwMShhPTEpOiBwYXNzCisgICAgICAgIGQwMSgpCisgICAgICAgIGQwMSgxKQorICAgICAgICBkMDEoKigxLCkpCisgICAgICAgIGQwMSgqKnsnYSc6Mn0pCisgICAgICAgIGRlZiBkMTEoYSwgYj0xKTogcGFzcworICAgICAgICBkMTEoMSkKKyAgICAgICAgZDExKDEsIDIpCisgICAgICAgIGQxMSgxLCAqKnsnYic6Mn0pCisgICAgICAgIGRlZiBkMjEoYSwgYiwgYz0xKTogcGFzcworICAgICAgICBkMjEoMSwgMikKKyAgICAgICAgZDIxKDEsIDIsIDMpCisgICAgICAgIGQyMSgqKDEsIDIsIDMpKQorICAgICAgICBkMjEoMSwgKigyLCAzKSkKKyAgICAgICAgZDIxKDEsIDIsICooMywpKQorICAgICAgICBkMjEoMSwgMiwgKip7J2MnOjN9KQorICAgICAgICBkZWYgZDAyKGE9MSwgYj0yKTogcGFzcworICAgICAgICBkMDIoKQorICAgICAgICBkMDIoMSkKKyAgICAgICAgZDAyKDEsIDIpCisgICAgICAgIGQwMigqKDEsIDIpKQorICAgICAgICBkMDIoMSwgKigyLCkpCisgICAgICAgIGQwMigxLCAqKnsnYic6Mn0pCisgICAgICAgIGQwMigqKnsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIGRlZiBkMTIoYSwgYj0xLCBjPTIpOiBwYXNzCisgICAgICAgIGQxMigxKQorICAgICAgICBkMTIoMSwgMikKKyAgICAgICAgZDEyKDEsIDIsIDMpCisgICAgICAgIGRlZiBkMjIoYSwgYiwgYz0xLCBkPTIpOiBwYXNzCisgICAgICAgIGQyMigxLCAyKQorICAgICAgICBkMjIoMSwgMiwgMykKKyAgICAgICAgZDIyKDEsIDIsIDMsIDQpCisgICAgICAgIGRlZiBkMDF2KGE9MSwgKnJlc3QpOiBwYXNzCisgICAgICAgIGQwMXYoKQorICAgICAgICBkMDF2KDEpCisgICAgICAgIGQwMXYoMSwgMikKKyAgICAgICAgZDAxdigqKDEsIDIsIDMsIDQpKQorICAgICAgICBkMDF2KCooMSwpKQorICAgICAgICBkMDF2KCoqeydhJzoyfSkKKyAgICAgICAgZGVmIGQxMXYoYSwgYj0xLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDExdigxKQorICAgICAgICBkMTF2KDEsIDIpCisgICAgICAgIGQxMXYoMSwgMiwgMykKKyAgICAgICAgZGVmIGQyMXYoYSwgYiwgYz0xLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDIxdigxLCAyKQorICAgICAgICBkMjF2KDEsIDIsIDMpCisgICAgICAgIGQyMXYoMSwgMiwgMywgNCkKKyAgICAgICAgZDIxdigqKDEsIDIsIDMsIDQpKQorICAgICAgICBkMjF2KDEsIDIsICoqeydjJzogM30pCisgICAgICAgIGRlZiBkMDJ2KGE9MSwgYj0yLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDAydigpCisgICAgICAgIGQwMnYoMSkKKyAgICAgICAgZDAydigxLCAyKQorICAgICAgICBkMDJ2KDEsIDIsIDMpCisgICAgICAgIGQwMnYoMSwgKigyLCAzLCA0KSkKKyAgICAgICAgZDAydigqKnsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIGRlZiBkMTJ2KGEsIGI9MSwgYz0yLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDEydigxKQorICAgICAgICBkMTJ2KDEsIDIpCisgICAgICAgIGQxMnYoMSwgMiwgMykKKyAgICAgICAgZDEydigxLCAyLCAzLCA0KQorICAgICAgICBkMTJ2KCooMSwgMiwgMywgNCkpCisgICAgICAgIGQxMnYoMSwgMiwgKigzLCA0LCA1KSkKKyAgICAgICAgZDEydigxLCAqKDIsKSwgKip7J2MnOiAzfSkKKyAgICAgICAgZGVmIGQyMnYoYSwgYiwgYz0xLCBkPTIsICpyZXN0KTogcGFzcworICAgICAgICBkMjJ2KDEsIDIpCisgICAgICAgIGQyMnYoMSwgMiwgMykKKyAgICAgICAgZDIydigxLCAyLCAzLCA0KQorICAgICAgICBkMjJ2KDEsIDIsIDMsIDQsIDUpCisgICAgICAgIGQyMnYoKigxLCAyLCAzLCA0KSkKKyAgICAgICAgZDIydigxLCAyLCAqKDMsIDQsIDUpKQorICAgICAgICBkMjJ2KDEsICooMiwgMyksICoqeydkJzogNH0pCisgICAgICAgIGRlZiBkMzF2KCh4KSk6IHBhc3MKKyAgICAgICAgZDMxdigxKQorICAgICAgICBkZWYgZDMydigoeCwpKTogcGFzcworICAgICAgICBkMzJ2KCgxLCkpCisgICAgICAgICMga2V5d29yZCBvbmx5IGFyZ3VtZW50IHRlc3RzCisgICAgICAgIGRlZiBwb3Mwa2V5MSgqLCBrZXkpOiByZXR1cm4ga2V5CisgICAgICAgIHBvczBrZXkxKGtleT0xMDApCisgICAgICAgIGRlZiBwb3Mya2V5MihwMSwgcDIsICosIGsxLCBrMj0xMDApOiByZXR1cm4gcDEscDIsazEsazIKKyAgICAgICAgcG9zMmtleTIoMSwgMiwgazE9MTAwKQorICAgICAgICBwb3Mya2V5MigxLCAyLCBrMT0xMDAsIGsyPTIwMCkKKyAgICAgICAgcG9zMmtleTIoMSwgMiwgazI9MTAwLCBrMT0yMDApCisgICAgICAgIGRlZiBwb3Mya2V5MmRpY3QocDEsIHAyLCAqLCBrMT0xMDAsIGsyLCAqKmt3YXJnKTogcmV0dXJuIHAxLHAyLGsxLGsyLGt3YXJnCisgICAgICAgIHBvczJrZXkyZGljdCgxLDIsazI9MTAwLHRva3dhcmcxPTEwMCx0b2t3YXJnMj0yMDApCisgICAgICAgIHBvczJrZXkyZGljdCgxLDIsdG9rd2FyZzE9MTAwLHRva3dhcmcyPTIwMCwgazI9MTAwKQorCisgICAgZGVmIHRlc3RMYW1iZGVmKHNlbGYpOgorICAgICAgICAjIyMgbGFtYmRlZjogJ2xhbWJkYScgW3ZhcmFyZ3NsaXN0XSAnOicgdGVzdAorICAgICAgICBsMSA9IGxhbWJkYSA6IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDEoKSwgMCkKKyAgICAgICAgbDIgPSBsYW1iZGEgOiBhW2RdICMgWFhYIGp1c3QgdGVzdGluZyB0aGUgZXhwcmVzc2lvbgorICAgICAgICBsMyA9IGxhbWJkYSA6IFsyIDwgeCBmb3IgeCBpbiBbLTEsIDMsIDBMXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDMoKSwgWzAsIDEsIDBdKQorICAgICAgICBsNCA9IGxhbWJkYSB4ID0gbGFtYmRhIHkgPSBsYW1iZGEgej0xIDogeiA6IHkoKSA6IHgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsNCgpLCAxKQorICAgICAgICBsNSA9IGxhbWJkYSB4LCB5LCB6PTI6IHggKyB5ICsgegorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsNSgxLCAyKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDUoMSwgMiwgMyksIDYpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAibGFtYmRhIHg6IHggPSAyIikKKyAgICAgICAgbDYgPSBsYW1iZGEgeCwgeSwgKiwgaz0yMDogeCt5K2sKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDYoMSwyKSwgMSsyKzIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsNigxLDIsaz0xMCksIDErMisxMCkKIAogCi1wcmludCAnMS4xLjQgRWxsaXBzaXMgbGl0ZXJhbCcKKyAgICAjIyMgc3RtdDogc2ltcGxlX3N0bXQgfCBjb21wb3VuZF9zdG10CisgICAgIyBUZXN0ZWQgYmVsb3cKIAoteCA9IC4uLgotdmVyaWZ5KHggPT0gRWxsaXBzaXMpCisgICAgZGVmIHRlc3RTaW1wbGVTdG10KHNlbGYpOgorICAgICAgICAjIyMgc2ltcGxlX3N0bXQ6IHNtYWxsX3N0bXQgKCc7JyBzbWFsbF9zdG10KSogWyc7J10KKyAgICAgICAgeCA9IDE7IHBhc3M7IGRlbCB4CisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgICMgdmVyaWZ5IHN0YXRtZW50cyB0aGF0IGVuZCB3aXRoIHNlbWktY29sb25zCisgICAgICAgICAgICB4ID0gMTsgcGFzczsgZGVsIHg7CisgICAgICAgIGZvbygpCiAKKyAgICAjIyMgc21hbGxfc3RtdDogZXhwcl9zdG10IHwgcHJpbnRfc3RtdCAgfCBwYXNzX3N0bXQgfCBkZWxfc3RtdCB8IGZsb3dfc3RtdCB8IGltcG9ydF9zdG10IHwgZ2xvYmFsX3N0bXQgfCBhY2Nlc3Nfc3RtdCAKKyAgICAjIFRlc3RlZCBiZWxvdwogCi1wcmludCAnMS4yIEdyYW1tYXInCisgICAgZGVmIHRlc3RFeHByU3RtdChzZWxmKToKKyAgICAgICAgIyAoZXhwcmxpc3QgJz0nKSogZXhwcmxpc3QKKyAgICAgICAgMQorICAgICAgICAxLCAyLCAzCisgICAgICAgIHggPSAxCisgICAgICAgIHggPSAxLCAyLCAzCisgICAgICAgIHggPSB5ID0geiA9IDEsIDIsIDMKKyAgICAgICAgeCwgeSwgeiA9IDEsIDIsIDMKKyAgICAgICAgYWJjID0gYSwgYiwgYyA9IHgsIHksIHogPSB4eXogPSAxLCAyLCAoMywgNCkKIAotcHJpbnQgJ3NpbmdsZV9pbnB1dCcgIyBORVdMSU5FIHwgc2ltcGxlX3N0bXQgfCBjb21wb3VuZF9zdG10IE5FV0xJTkUKLSMgWFhYIGNhbid0IHRlc3QgaW4gYSBzY3JpcHQgLS0gdGhpcyBydWxlIGlzIG9ubHkgdXNlZCB3aGVuIGludGVyYWN0aXZlCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAieCArIDEgPSAxIikKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJhICsgMSA9IGIgKyAyIikKIAotcHJpbnQgJ2ZpbGVfaW5wdXQnICMgKE5FV0xJTkUgfCBzdG10KSogRU5ETUFSS0VSCi0jIEJlaW5nIHRlc3RlZCBhcyB0aGlzIHZlcnkgbW9tZW50IHRoaXMgdmVyeSBtb2R1bGUKKyAgICBkZWYgdGVzdFByaW50U3RtdChzZWxmKToKKyAgICAgICAgIyAncHJpbnQnICh0ZXN0ICcsJykqIFt0ZXN0XQorICAgICAgICBpbXBvcnQgU3RyaW5nSU8KIAotcHJpbnQgJ2V4cHJfaW5wdXQnICMgdGVzdGxpc3QgTkVXTElORQotIyBYWFggSGFyZCB0byB0ZXN0IC0tIHVzZWQgb25seSBpbiBjYWxscyB0byBpbnB1dCgpCisgICAgICAgICMgQ2FuJ3QgdGVzdCBwcmludGluZyB0byByZWFsIHN0ZG91dCB3aXRob3V0IGNvbXBhcmluZyBvdXRwdXQKKyAgICAgICAgIyB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHVuaXR0ZXN0LgorICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc3lzLnN0ZG91dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKIAotcHJpbnQgJ2V2YWxfaW5wdXQnICMgdGVzdGxpc3QgRU5ETUFSS0VSCi14ID0gZXZhbCgnMSwgMCBvciAxJykKKyAgICAgICAgcHJpbnQgMSwgMiwgMworICAgICAgICBwcmludCAxLCAyLCAzLAorICAgICAgICBwcmludAorICAgICAgICBwcmludCAwIG9yIDEsIDAgb3IgMSwKKyAgICAgICAgcHJpbnQgMCBvciAxCiAKLXByaW50ICdmdW5jZGVmJwotIyMjICdkZWYnIE5BTUUgcGFyYW1ldGVycyAnOicgc3VpdGUKLSMjIyBwYXJhbWV0ZXJzOiAnKCcgW3ZhcmFyZ3NsaXN0XSAnKScKLSMjIyB2YXJhcmdzbGlzdDogKGZwZGVmIFsnPScgdGVzdF0gJywnKSogCi0jIyMgICAgICAgICAgICgnKicgKE5BTUV8JywnIGZwZGVmIFsnPScgdGVzdF0pIFsnLCcgKCcqKid8JyonICcqJykgTkFNRV0KLSMjIyAgICAgICAgICAgIHwgKCcqKid8JyonICcqJykgTkFNRSkKLSMjIyAgICAgICAgICAgIHwgZnBkZWYgWyc9JyB0ZXN0XSAoJywnIGZwZGVmIFsnPScgdGVzdF0pKiBbJywnXQotIyMjIGZwZGVmOiBOQU1FIHwgJygnIGZwbGlzdCAnKScKLSMjIyBmcGxpc3Q6IGZwZGVmICgnLCcgZnBkZWYpKiBbJywnXQotIyMjIGFyZ2xpc3Q6IChhcmd1bWVudCAnLCcpKiAoYXJndW1lbnQgfCAqJyB0ZXN0IFsnLCcgJyoqJyB0ZXN0XSB8ICcqKicgdGVzdCkKLSMjIyBhcmd1bWVudDogW3Rlc3QgJz0nXSB0ZXN0ICAgIyBSZWFsbHkgW2tleXdvcmQgJz0nXSB0ZXN0Ci1kZWYgZjEoKTogcGFzcwotZjEoKQotZjEoKigpKQotZjEoKigpLCAqKnt9KQotZGVmIGYyKG9uZV9hcmd1bWVudCk6IHBhc3MKLWRlZiBmMyh0d28sIGFyZ3VtZW50cyk6IHBhc3MKLWRlZiBmNCh0d28sIChjb21wb3VuZCwgKGFyZ3VtZW50LCBsaXN0KSkpOiBwYXNzCi1kZWYgZjUoKGNvbXBvdW5kLCBmaXJzdCksIHR3byk6IHBhc3MKLXZlcmVxKGYyLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdvbmVfYXJndW1lbnQnLCkpCi12ZXJlcShmMy5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgndHdvJywgJ2FyZ3VtZW50cycpKQotaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKLSAgICB2ZXJlcShmNC5mdW5jX2NvZGUuY29fdmFybmFtZXMsCi0gICAgICAgICAgICgndHdvJywgJyhjb21wb3VuZCwgKGFyZ3VtZW50LCBsaXN0KSknLCAnY29tcG91bmQnLCAnYXJndW1lbnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2xpc3QnLCkpCi0gICAgdmVyZXEoZjUuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAotICAgICAgICAgICAoJyhjb21wb3VuZCwgZmlyc3QpJywgJ3R3bycsICdjb21wb3VuZCcsICdmaXJzdCcpKQotZWxzZToKLSAgICB2ZXJlcShmNC5mdW5jX2NvZGUuY29fdmFybmFtZXMsCi0gICAgICAgICAgKCd0d28nLCAnLjEnLCAnY29tcG91bmQnLCAnYXJndW1lbnQnLCAgJ2xpc3QnKSkKLSAgICB2ZXJlcShmNS5mdW5jX2NvZGUuY29fdmFybmFtZXMsCi0gICAgICAgICAgKCcuMCcsICd0d28nLCAnY29tcG91bmQnLCAnZmlyc3QnKSkKLWRlZiBhMShvbmVfYXJnLCk6IHBhc3MKLWRlZiBhMih0d28sIGFyZ3MsKTogcGFzcwotZGVmIHYwKCpyZXN0KTogcGFzcwotZGVmIHYxKGEsICpyZXN0KTogcGFzcwotZGVmIHYyKGEsIGIsICpyZXN0KTogcGFzcwotZGVmIHYzKGEsIChiLCBjKSwgKnJlc3QpOiByZXR1cm4gYSwgYiwgYywgcmVzdAotIyBjZXZhbCB1bnBhY2tzIHRoZSBmb3JtYWwgYXJndW1lbnRzIGludG8gdGhlIGZpcnN0IGFyZ2NvdW50IG5hbWVzOwotIyB0aHVzLCB0aGUgbmFtZXMgbmVzdGVkIGluc2lkZSB0dXBsZXMgbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlc2UgbmFtZXMuCi1pZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgotICAgIHZlcmlmeSh2My5mdW5jX2NvZGUuY29fdmFybmFtZXMgPT0gKCdhJywgJyhiLCBjKScsICdyZXN0JywgJ2InLCAnYycpKQotZWxzZToKLSAgICB2ZXJlcSh2My5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnYScsICcuMScsICdyZXN0JywgJ2InLCAnYycpKQotdmVyaWZ5KHYzKDEsICgyLCAzKSwgNCkgPT0gKDEsIDIsIDMsICg0LCkpKQotZGVmIGQwMShhPTEpOiBwYXNzCi1kMDEoKQotZDAxKDEpCi1kMDEoKigxLCkpCi1kMDEoKip7J2EnOjJ9KQotZGVmIGQxMShhLCBiPTEpOiBwYXNzCi1kMTEoMSkKLWQxMSgxLCAyKQotZDExKDEsICoqeydiJzoyfSkKLWRlZiBkMjEoYSwgYiwgYz0xKTogcGFzcwotZDIxKDEsIDIpCi1kMjEoMSwgMiwgMykKLWQyMSgqKDEsIDIsIDMpKQotZDIxKDEsICooMiwgMykpCi1kMjEoMSwgMiwgKigzLCkpCi1kMjEoMSwgMiwgKip7J2MnOjN9KQotZGVmIGQwMihhPTEsIGI9Mik6IHBhc3MKLWQwMigpCi1kMDIoMSkKLWQwMigxLCAyKQotZDAyKCooMSwgMikpCi1kMDIoMSwgKigyLCkpCi1kMDIoMSwgKip7J2InOjJ9KQotZDAyKCoqeydhJzogMSwgJ2InOiAyfSkKLWRlZiBkMTIoYSwgYj0xLCBjPTIpOiBwYXNzCi1kMTIoMSkKLWQxMigxLCAyKQotZDEyKDEsIDIsIDMpCi1kZWYgZDIyKGEsIGIsIGM9MSwgZD0yKTogcGFzcwotZDIyKDEsIDIpCi1kMjIoMSwgMiwgMykKLWQyMigxLCAyLCAzLCA0KQotZGVmIGQwMXYoYT0xLCAqcmVzdCk6IHBhc3MKLWQwMXYoKQotZDAxdigxKQotZDAxdigxLCAyKQotZDAxdigqKDEsIDIsIDMsIDQpKQotZDAxdigqKDEsKSkKLWQwMXYoKip7J2EnOjJ9KQotZGVmIGQxMXYoYSwgYj0xLCAqcmVzdCk6IHBhc3MKLWQxMXYoMSkKLWQxMXYoMSwgMikKLWQxMXYoMSwgMiwgMykKLWRlZiBkMjF2KGEsIGIsIGM9MSwgKnJlc3QpOiBwYXNzCi1kMjF2KDEsIDIpCi1kMjF2KDEsIDIsIDMpCi1kMjF2KDEsIDIsIDMsIDQpCi1kMjF2KCooMSwgMiwgMywgNCkpCi1kMjF2KDEsIDIsICoqeydjJzogM30pCi1kZWYgZDAydihhPTEsIGI9MiwgKnJlc3QpOiBwYXNzCi1kMDJ2KCkKLWQwMnYoMSkKLWQwMnYoMSwgMikKLWQwMnYoMSwgMiwgMykKLWQwMnYoMSwgKigyLCAzLCA0KSkKLWQwMnYoKip7J2EnOiAxLCAnYic6IDJ9KQotZGVmIGQxMnYoYSwgYj0xLCBjPTIsICpyZXN0KTogcGFzcwotZDEydigxKQotZDEydigxLCAyKQotZDEydigxLCAyLCAzKQotZDEydigxLCAyLCAzLCA0KQotZDEydigqKDEsIDIsIDMsIDQpKQotZDEydigxLCAyLCAqKDMsIDQsIDUpKQotZDEydigxLCAqKDIsKSwgKip7J2MnOiAzfSkKLWRlZiBkMjJ2KGEsIGIsIGM9MSwgZD0yLCAqcmVzdCk6IHBhc3MKLWQyMnYoMSwgMikKLWQyMnYoMSwgMiwgMykKLWQyMnYoMSwgMiwgMywgNCkKLWQyMnYoMSwgMiwgMywgNCwgNSkKLWQyMnYoKigxLCAyLCAzLCA0KSkKLWQyMnYoMSwgMiwgKigzLCA0LCA1KSkKLWQyMnYoMSwgKigyLCAzKSwgKip7J2QnOiA0fSkKLWRlZiBkMzF2KCh4KSk6IHBhc3MKLWQzMXYoMSkKLWRlZiBkMzJ2KCh4LCkpOiBwYXNzCi1kMzJ2KCgxLCkpCi0ja2V5d29yZCBvbmx5IGFyZ3VtZW50IHRlc3RzCi1kZWYgcG9zMGtleTEoKiwga2V5KTogcmV0dXJuIGtleQotcG9zMGtleTEoa2V5PTEwMCkKLWRlZiBwb3Mya2V5MihwMSwgcDIsICosIGsxLCBrMj0xMDApOiByZXR1cm4gcDEscDIsazEsazIKLXBvczJrZXkyKDEsIDIsIGsxPTEwMCkKLXBvczJrZXkyKDEsIDIsIGsxPTEwMCwgazI9MjAwKQotcG9zMmtleTIoMSwgMiwgazI9MTAwLCBrMT0yMDApCi1kZWYgcG9zMmtleTJkaWN0KHAxLCBwMiwgKiwgazE9MTAwLCBrMiwgKiprd2FyZyk6IHJldHVybiBwMSxwMixrMSxrMixrd2FyZwotcG9zMmtleTJkaWN0KDEsMixrMj0xMDAsdG9rd2FyZzE9MTAwLHRva3dhcmcyPTIwMCkKLXBvczJrZXkyZGljdCgxLDIsdG9rd2FyZzE9MTAwLHRva3dhcmcyPTIwMCwgazI9MTAwKQorICAgICAgICAjICdwcmludCcgJz4+JyB0ZXN0ICcsJworICAgICAgICBwcmludCA+PiBzeXMuc3Rkb3V0LCAxLCAyLCAzCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRvdXQsIDEsIDIsIDMsCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRvdXQKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZG91dCwgMCBvciAxLCAwIG9yIDEsCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRvdXQsIDAgb3IgMQogCi0jIyMgbGFtYmRlZjogJ2xhbWJkYScgW3ZhcmFyZ3NsaXN0XSAnOicgdGVzdAotcHJpbnQgJ2xhbWJkZWYnCi1sMSA9IGxhbWJkYSA6IDAKLXZlcmlmeShsMSgpID09IDApCi1sMiA9IGxhbWJkYSA6IGFbZF0gIyBYWFgganVzdCB0ZXN0aW5nIHRoZSBleHByZXNzaW9uCi1sMyA9IGxhbWJkYSA6IFsyIDwgeCBmb3IgeCBpbiBbLTEsIDMsIDBMXV0KLXZlcmlmeShsMygpID09IFswLCAxLCAwXSkKLWw0ID0gbGFtYmRhIHggPSBsYW1iZGEgeSA9IGxhbWJkYSB6PTEgOiB6IDogeSgpIDogeCgpCi12ZXJpZnkobDQoKSA9PSAxKQotbDUgPSBsYW1iZGEgeCwgeSwgej0yOiB4ICsgeSArIHoKLXZlcmlmeShsNSgxLCAyKSA9PSA1KQotdmVyaWZ5KGw1KDEsIDIsIDMpID09IDYpCi1jaGVja19zeW50YXgoImxhbWJkYSB4OiB4ID0gMiIpCi1sNiA9IGxhbWJkYSB4LCB5LCAqLCBrPTIwOiB4K3krawotdmVyaWZ5KGw2KDEsMikgPT0gMSsyKzIwKQotdmVyaWZ5KGw2KDEsMixrPTEwKSA9PSAxKzIrMTApCisgICAgICAgICMgdGVzdCBwcmludGluZyB0byBhbiBpbnN0YW5jZQorICAgICAgICBjbGFzcyBHdWxwOgorICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIG1zZyk6IHBhc3MKIAotIyMjIHN0bXQ6IHNpbXBsZV9zdG10IHwgY29tcG91bmRfc3RtdAotIyBUZXN0ZWQgYmVsb3cKKyAgICAgICAgZ3VscCA9IEd1bHAoKQorICAgICAgICBwcmludCA+PiBndWxwLCAxLCAyLCAzCisgICAgICAgIHByaW50ID4+IGd1bHAsIDEsIDIsIDMsCisgICAgICAgIHByaW50ID4+IGd1bHAKKyAgICAgICAgcHJpbnQgPj4gZ3VscCwgMCBvciAxLCAwIG9yIDEsCisgICAgICAgIHByaW50ID4+IGd1bHAsIDAgb3IgMQogCi0jIyMgc2ltcGxlX3N0bXQ6IHNtYWxsX3N0bXQgKCc7JyBzbWFsbF9zdG10KSogWyc7J10KLXByaW50ICdzaW1wbGVfc3RtdCcKLXggPSAxOyBwYXNzOyBkZWwgeAotZGVmIGZvbygpOgotICAgICMgdmVyaWZ5IHN0YXRtZW50cyB0aGF0IGVuZCB3aXRoIHNlbWktY29sb25zCi0gICAgeCA9IDE7IHBhc3M7IGRlbCB4OwotZm9vKCkKKyAgICAgICAgIyB0ZXN0IHByaW50ID4+IE5vbmUKKyAgICAgICAgZGVmIGRyaXZlcigpOgorICAgICAgICAgICAgb2xkc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IEd1bHAoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlbGxtZShHdWxwKCkpCisgICAgICAgICAgICAgICAgdGVsbG1lKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9sZHN0ZG91dAogCi0jIyMgc21hbGxfc3RtdDogZXhwcl9zdG10IHwgcHJpbnRfc3RtdCAgfCBwYXNzX3N0bXQgfCBkZWxfc3RtdCB8IGZsb3dfc3RtdCB8IGltcG9ydF9zdG10IHwgZ2xvYmFsX3N0bXQgfCBhY2Nlc3Nfc3RtdCB8IGV4ZWNfc3RtdAotIyBUZXN0ZWQgYmVsb3cKKyAgICAgICAgIyB3ZSBzaG91bGQgc2VlIHRoaXMgb25jZQorICAgICAgICBkZWYgdGVsbG1lKGZpbGU9c3lzLnN0ZG91dCk6CisgICAgICAgICAgICBwcmludCA+PiBmaWxlLCAnaGVsbG8gd29ybGQnCiAKLXByaW50ICdleHByX3N0bXQnICMgKGV4cHJsaXN0ICc9JykqIGV4cHJsaXN0Ci0xCi0xLCAyLCAzCi14ID0gMQoteCA9IDEsIDIsIDMKLXggPSB5ID0geiA9IDEsIDIsIDMKLXgsIHksIHogPSAxLCAyLCAzCi1hYmMgPSBhLCBiLCBjID0geCwgeSwgeiA9IHh5eiA9IDEsIDIsICgzLCA0KQotIyBOQiB0aGVzZSB2YXJpYWJsZXMgYXJlIGRlbGV0ZWQgYmVsb3cKKyAgICAgICAgZHJpdmVyKCkKIAotY2hlY2tfc3ludGF4KCJ4ICsgMSA9IDEiKQotY2hlY2tfc3ludGF4KCJhICsgMSA9IGIgKyAyIikKKyAgICAgICAgIyB3ZSBzaG91bGQgbm90IHNlZSB0aGlzIGF0IGFsbAorICAgICAgICBkZWYgdGVsbG1lKGZpbGU9Tm9uZSk6CisgICAgICAgICAgICBwcmludCA+PiBmaWxlLCAnZ29vZGJ5ZSB1bml2ZXJzZScKIAotcHJpbnQgJ3ByaW50X3N0bXQnICMgJ3ByaW50JyAodGVzdCAnLCcpKiBbdGVzdF0KLXByaW50IDEsIDIsIDMKLXByaW50IDEsIDIsIDMsCi1wcmludAotcHJpbnQgMCBvciAxLCAwIG9yIDEsCi1wcmludCAwIG9yIDEKKyAgICAgICAgZHJpdmVyKCkKIAotcHJpbnQgJ2V4dGVuZGVkIHByaW50X3N0bXQnICMgJ3ByaW50JyAnPj4nIHRlc3QgJywnCi1pbXBvcnQgc3lzCi1wcmludCA+PiBzeXMuc3Rkb3V0LCAxLCAyLCAzCi1wcmludCA+PiBzeXMuc3Rkb3V0LCAxLCAyLCAzLAotcHJpbnQgPj4gc3lzLnN0ZG91dAotcHJpbnQgPj4gc3lzLnN0ZG91dCwgMCBvciAxLCAwIG9yIDEsCi1wcmludCA+PiBzeXMuc3Rkb3V0LCAwIG9yIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuc3Rkb3V0LmdldHZhbHVlKCksICcnJ1wKKzEgMiAzCisxIDIgMworMSAxIDEKKzEgMiAzCisxIDIgMworMSAxIDEKK2hlbGxvIHdvcmxkCisnJycpCisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAogCi0jIHRlc3QgcHJpbnRpbmcgdG8gYW4gaW5zdGFuY2UKLWNsYXNzIEd1bHA6Ci0gICAgZGVmIHdyaXRlKHNlbGYsIG1zZyk6IHBhc3MKKyAgICAgICAgIyBzeW50YXggZXJyb3JzCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAncHJpbnQgLCcpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAncHJpbnQgPj4geCwnKQogCi1ndWxwID0gR3VscCgpCi1wcmludCA+PiBndWxwLCAxLCAyLCAzCi1wcmludCA+PiBndWxwLCAxLCAyLCAzLAotcHJpbnQgPj4gZ3VscAotcHJpbnQgPj4gZ3VscCwgMCBvciAxLCAwIG9yIDEsCi1wcmludCA+PiBndWxwLCAwIG9yIDEKKyAgICBkZWYgdGVzdERlbFN0bXQoc2VsZik6CisgICAgICAgICMgJ2RlbCcgZXhwcmxpc3QKKyAgICAgICAgYWJjID0gWzEsMiwzXQorICAgICAgICB4LCB5LCB6ID0gYWJjCisgICAgICAgIHh5eiA9IHgsIHksIHoKIAotIyB0ZXN0IHByaW50ID4+IE5vbmUKLWRlZiBkcml2ZXIoKToKLSAgICBvbGRzdGRvdXQgPSBzeXMuc3Rkb3V0Ci0gICAgc3lzLnN0ZG91dCA9IEd1bHAoKQotICAgIHRyeToKLSAgICAgICAgdGVsbG1lKEd1bHAoKSkKLSAgICAgICAgdGVsbG1lKCkKLSAgICBmaW5hbGx5OgotICAgICAgICBzeXMuc3Rkb3V0ID0gb2xkc3Rkb3V0CisgICAgICAgIGRlbCBhYmMKKyAgICAgICAgZGVsIHgsIHksICh6LCB4eXopCiAKLSMgd2Ugc2hvdWxkIHNlZSB0aGlzIG9uY2UKLWRlZiB0ZWxsbWUoZmlsZT1zeXMuc3Rkb3V0KToKLSAgICBwcmludCA+PiBmaWxlLCAnaGVsbG8gd29ybGQnCisgICAgZGVmIHRlc3RQYXNzU3RtdChzZWxmKToKKyAgICAgICAgIyAncGFzcycKKyAgICAgICAgcGFzcwogCi1kcml2ZXIoKQorICAgICMgZmxvd19zdG10OiBicmVha19zdG10IHwgY29udGludWVfc3RtdCB8IHJldHVybl9zdG10IHwgcmFpc2Vfc3RtdAorICAgICMgVGVzdGVkIGJlbG93CiAKLSMgd2Ugc2hvdWxkIG5vdCBzZWUgdGhpcyBhdCBhbGwKLWRlZiB0ZWxsbWUoZmlsZT1Ob25lKToKLSAgICBwcmludCA+PiBmaWxlLCAnZ29vZGJ5ZSB1bml2ZXJzZScKKyAgICBkZWYgdGVzdEJyZWFrU3RtdChzZWxmKToKKyAgICAgICAgIyAnYnJlYWsnCisgICAgICAgIHdoaWxlIDE6IGJyZWFrCiAKLWRyaXZlcigpCisgICAgZGVmIHRlc3RDb250aW51ZVN0bXQoc2VsZik6CisgICAgICAgICMgJ2NvbnRpbnVlJworICAgICAgICBpID0gMQorICAgICAgICB3aGlsZSBpOiBpID0gMDsgY29udGludWUKIAotIyBzeW50YXggZXJyb3JzCi1jaGVja19zeW50YXgoJ3ByaW50ICwnKQotY2hlY2tfc3ludGF4KCdwcmludCA+PiB4LCcpCisgICAgICAgIG1zZyA9ICIiCisgICAgICAgIHdoaWxlIG5vdCBtc2c6CisgICAgICAgICAgICBtc2cgPSAib2siCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBtc2cgPSAiY29udGludWUgZmFpbGVkIHRvIGNvbnRpbnVlIGluc2lkZSB0cnkiCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbXNnID0gImNvbnRpbnVlIGluc2lkZSB0cnkgY2FsbGVkIGV4Y2VwdCBibG9jayIKKyAgICAgICAgaWYgbXNnICE9ICJvayI6CisgICAgICAgICAgICBzZWxmLmZhaWwobXNnKQogCi1wcmludCAnZGVsX3N0bXQnICMgJ2RlbCcgZXhwcmxpc3QKLWRlbCBhYmMKLWRlbCB4LCB5LCAoeiwgeHl6KQorICAgICAgICBtc2cgPSAiIgorICAgICAgICB3aGlsZSBub3QgbXNnOgorICAgICAgICAgICAgbXNnID0gImZpbmFsbHkgYmxvY2sgbm90IGNhbGxlZCIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtc2cgPSAib2siCisgICAgICAgIGlmIG1zZyAhPSAib2siOgorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKIAotcHJpbnQgJ3Bhc3Nfc3RtdCcgIyAncGFzcycKLXBhc3MKKyAgICBkZWYgdGVzdF9icmVha19jb250aW51ZV9sb29wKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCB3YXJyYW50cyBhbiBleHBsYW5hdGlvbi4gSXQgaXMgYSB0ZXN0IHNwZWNpZmljYWxseSBmb3IgU0YgYnVncworICAgICAgICAjICM0NjMzNTkgYW5kICM0NjI5MzcuIFRoZSBidWcgaXMgdGhhdCBhICdicmVhaycgc3RhdGVtZW50IGV4ZWN1dGVkIG9yCisgICAgICAgICMgZXhjZXB0aW9uIHJhaXNlZCBpbnNpZGUgYSB0cnkvZXhjZXB0IGluc2lkZSBhIGxvb3AsICphZnRlciogYSBjb250aW51ZQorICAgICAgICAjIHN0YXRlbWVudCBoYXMgYmVlbiBleGVjdXRlZCBpbiB0aGF0IGxvb3AsIHdpbGwgY2F1c2UgdGhlIHdyb25nIG51bWJlciBvZgorICAgICAgICAjIGFyZ3VtZW50cyB0byBiZSBwb3BwZWQgb2ZmIHRoZSBzdGFjayBhbmQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgcmVzZXQgdG8KKyAgICAgICAgIyBhIHZlcnkgc21hbGwgbnVtYmVyICh1c3VhbGx5IDAuKSBCZWNhdXNlIG9mIHRoaXMsIHRoZSBmb2xsb3dpbmcgdGVzdAorICAgICAgICAjICptdXN0KiB3cml0dGVuIGFzIGEgZnVuY3Rpb24sIGFuZCB0aGUgdHJhY2tpbmcgdmFycyAqbXVzdCogYmUgZnVuY3Rpb24KKyAgICAgICAgIyBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcy4gT3RoZXJ3aXNlLCB0aGUgdGVzdCB3aWxsIGxvb3AgYW5kIGxvb3AuCiAKLXByaW50ICdmbG93X3N0bXQnICMgYnJlYWtfc3RtdCB8IGNvbnRpbnVlX3N0bXQgfCByZXR1cm5fc3RtdCB8IHJhaXNlX3N0bXQKLSMgVGVzdGVkIGJlbG93CisgICAgICAgIGRlZiB0ZXN0X2lubmVyKGV4dHJhX2J1cm5pbmdfb2lsID0gMSwgY291bnQ9MCk6CisgICAgICAgICAgICBiaWdfaGlwcG8gPSAyCisgICAgICAgICAgICB3aGlsZSBiaWdfaGlwcG86CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmFfYnVybmluZ19vaWwgYW5kIGJpZ19oaXBwbyA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfYnVybmluZ19vaWwgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgYmlnX2hpcHBvIC09IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBpZiBjb3VudCA+IDIgb3IgYmlnX2hpcHBvICE9IDE6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJjb250aW51ZSB0aGVuIGJyZWFrIGluIHRyeS9leGNlcHQgaW4gbG9vcCBicm9rZW4hIikKKyAgICAgICAgdGVzdF9pbm5lcigpCiAKLXByaW50ICdicmVha19zdG10JyAjICdicmVhaycKLXdoaWxlIDE6IGJyZWFrCisgICAgZGVmIHRlc3RSZXR1cm4oc2VsZik6CisgICAgICAgICMgJ3JldHVybicgW3Rlc3RsaXN0XQorICAgICAgICBkZWYgZzEoKTogcmV0dXJuCisgICAgICAgIGRlZiBnMigpOiByZXR1cm4gMQorICAgICAgICBnMSgpCisgICAgICAgIHggPSBnMigpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiY2xhc3MgZm9vOnJldHVybiAxIikKIAotcHJpbnQgJ2NvbnRpbnVlX3N0bXQnICMgJ2NvbnRpbnVlJwotaSA9IDEKLXdoaWxlIGk6IGkgPSAwOyBjb250aW51ZQorICAgIGRlZiB0ZXN0WWllbGQoc2VsZik6CisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiY2xhc3MgZm9vOnlpZWxkIDEiKQogCi1tc2cgPSAiIgotd2hpbGUgbm90IG1zZzoKLSAgICBtc2cgPSAiY29udGludWUgKyB0cnkvZXhjZXB0IG9rIgotICAgIHRyeToKLSAgICAgICAgY29udGludWUKLSAgICAgICAgbXNnID0gImNvbnRpbnVlIGZhaWxlZCB0byBjb250aW51ZSBpbnNpZGUgdHJ5IgotICAgIGV4Y2VwdDoKLSAgICAgICAgbXNnID0gImNvbnRpbnVlIGluc2lkZSB0cnkgY2FsbGVkIGV4Y2VwdCBibG9jayIKLXByaW50IG1zZworICAgIGRlZiB0ZXN0UmFpc2Uoc2VsZik6CisgICAgICAgICMgJ3JhaXNlJyB0ZXN0IFsnLCcgdGVzdF0KKyAgICAgICAgdHJ5OiByYWlzZSBSdW50aW1lRXJyb3IsICdqdXN0IHRlc3RpbmcnCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6IHBhc3MKKyAgICAgICAgdHJ5OiByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6IHBhc3MKIAotbXNnID0gIiIKLXdoaWxlIG5vdCBtc2c6Ci0gICAgbXNnID0gImZpbmFsbHkgYmxvY2sgbm90IGNhbGxlZCIKLSAgICB0cnk6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgZmluYWxseToKLSAgICAgICAgbXNnID0gImNvbnRpbnVlICsgdHJ5L2ZpbmFsbHkgb2siCi1wcmludCBtc2cKKyAgICBkZWYgdGVzdEltcG9ydChzZWxmKToKKyAgICAgICAgIyAnaW1wb3J0JyBkb3R0ZWRfYXNfbmFtZXMKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgdGltZSwgc3lzCisgICAgICAgICMgJ2Zyb20nIGRvdHRlZF9uYW1lICdpbXBvcnQnICgnKicgfCAnKCcgaW1wb3J0X2FzX25hbWVzICcpJyB8IGltcG9ydF9hc19uYW1lcykKKyAgICAgICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lCisgICAgICAgIGZyb20gdGltZSBpbXBvcnQgKHRpbWUpCisgICAgICAgICMgbm90IHRlc3RhYmxlIGluc2lkZSBhIGZ1bmN0aW9uLCBidXQgYWxyZWFkeSBkb25lIGF0IHRvcCBvZiB0aGUgbW9kdWxlCisgICAgICAgICMgZnJvbSBzeXMgaW1wb3J0ICoKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IHBhdGgsIGFyZ3YKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IChwYXRoLCBhcmd2KQorICAgICAgICBmcm9tIHN5cyBpbXBvcnQgKHBhdGgsIGFyZ3YsKQogCisgICAgZGVmIHRlc3RHbG9iYWwoc2VsZik6CisgICAgICAgICMgJ2dsb2JhbCcgTkFNRSAoJywnIE5BTUUpKgorICAgICAgICBnbG9iYWwgYQorICAgICAgICBnbG9iYWwgYSwgYgorICAgICAgICBnbG9iYWwgb25lLCB0d28sIHRocmVlLCBmb3VyLCBmaXZlLCBzaXgsIHNldmVuLCBlaWdodCwgbmluZSwgdGVuCiAKLSMgVGhpcyB0ZXN0IHdhcnJhbnRzIGFuIGV4cGxhbmF0aW9uLiBJdCBpcyBhIHRlc3Qgc3BlY2lmaWNhbGx5IGZvciBTRiBidWdzCi0jICM0NjMzNTkgYW5kICM0NjI5MzcuIFRoZSBidWcgaXMgdGhhdCBhICdicmVhaycgc3RhdGVtZW50IGV4ZWN1dGVkIG9yCi0jIGV4Y2VwdGlvbiByYWlzZWQgaW5zaWRlIGEgdHJ5L2V4Y2VwdCBpbnNpZGUgYSBsb29wLCAqYWZ0ZXIqIGEgY29udGludWUKLSMgc3RhdGVtZW50IGhhcyBiZWVuIGV4ZWN1dGVkIGluIHRoYXQgbG9vcCwgd2lsbCBjYXVzZSB0aGUgd3JvbmcgbnVtYmVyIG9mCi0jIGFyZ3VtZW50cyB0byBiZSBwb3BwZWQgb2ZmIHRoZSBzdGFjayBhbmQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgcmVzZXQgdG8KLSMgYSB2ZXJ5IHNtYWxsIG51bWJlciAodXN1YWxseSAwLikgQmVjYXVzZSBvZiB0aGlzLCB0aGUgZm9sbG93aW5nIHRlc3QKLSMgKm11c3QqIHdyaXR0ZW4gYXMgYSBmdW5jdGlvbiwgYW5kIHRoZSB0cmFja2luZyB2YXJzICptdXN0KiBiZSBmdW5jdGlvbgotIyBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcy4gT3RoZXJ3aXNlLCB0aGUgdGVzdCB3aWxsIGxvb3AgYW5kIGxvb3AuCi0KLXByaW50ICJ0ZXN0aW5nIGNvbnRpbnVlIGFuZCBicmVhayBpbiB0cnkvZXhjZXB0IGluIGxvb3AiCi1kZWYgdGVzdF9icmVha19jb250aW51ZV9sb29wKGV4dHJhX2J1cm5pbmdfb2lsID0gMSwgY291bnQ9MCk6Ci0gICAgYmlnX2hpcHBvID0gMgotICAgIHdoaWxlIGJpZ19oaXBwbzoKLSAgICAgICAgY291bnQgKz0gMQorICAgIGRlZiB0ZXN0QXNzZXJ0KHNlbGYpOgorICAgICAgICAjIGFzc2VydF9zdG10OiAnYXNzZXJ0JyB0ZXN0IFsnLCcgdGVzdF0KKyAgICAgICAgYXNzZXJ0IDEKKyAgICAgICAgYXNzZXJ0IDEsIDEKKyAgICAgICAgYXNzZXJ0IGxhbWJkYSB4OngKKyAgICAgICAgYXNzZXJ0IDEsIGxhbWJkYSB4OngrMQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBleHRyYV9idXJuaW5nX29pbCBhbmQgYmlnX2hpcHBvID09IDE6Ci0gICAgICAgICAgICAgICAgZXh0cmFfYnVybmluZ19vaWwgLT0gMQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBiaWdfaGlwcG8gLT0gMQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmFpc2UKLSAgICBpZiBjb3VudCA+IDIgb3IgYmlnX2hpcHBvICE9IDE6Ci0gICAgICAgIHByaW50ICJjb250aW51ZSB0aGVuIGJyZWFrIGluIHRyeS9leGNlcHQgaW4gbG9vcCBicm9rZW4hIgotdGVzdF9icmVha19jb250aW51ZV9sb29wKCkKKyAgICAgICAgICAgIGFzc2VydCAwLCAibXNnIgorICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlLmFyZ3NbMF0sICJtc2ciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiQXNzZXJ0aW9uRXJyb3Igbm90IHJhaXNlZCBieSBhc3NlcnQgMCIpCiAKLXByaW50ICdyZXR1cm5fc3RtdCcgIyAncmV0dXJuJyBbdGVzdGxpc3RdCi1kZWYgZzEoKTogcmV0dXJuCi1kZWYgZzIoKTogcmV0dXJuIDEKLWcxKCkKLXggPSBnMigpCi1jaGVja19zeW50YXgoImNsYXNzIGZvbzpyZXR1cm4gMSIpCisgICAgIyMjIGNvbXBvdW5kX3N0bXQ6IGlmX3N0bXQgfCB3aGlsZV9zdG10IHwgZm9yX3N0bXQgfCB0cnlfc3RtdCB8IGZ1bmNkZWYgfCBjbGFzc2RlZgorICAgICMgVGVzdGVkIGJlbG93CiAKLXByaW50ICd5aWVsZF9zdG10JwotY2hlY2tfc3ludGF4KCJjbGFzcyBmb286eWllbGQgMSIpCisgICAgZGVmIHRlc3RJZihzZWxmKToKKyAgICAgICAgIyAnaWYnIHRlc3QgJzonIHN1aXRlICgnZWxpZicgdGVzdCAnOicgc3VpdGUpKiBbJ2Vsc2UnICc6JyBzdWl0ZV0KKyAgICAgICAgaWYgMTogcGFzcworICAgICAgICBpZiAxOiBwYXNzCisgICAgICAgIGVsc2U6IHBhc3MKKyAgICAgICAgaWYgMDogcGFzcworICAgICAgICBlbGlmIDA6IHBhc3MKKyAgICAgICAgaWYgMDogcGFzcworICAgICAgICBlbGlmIDA6IHBhc3MKKyAgICAgICAgZWxpZiAwOiBwYXNzCisgICAgICAgIGVsaWYgMDogcGFzcworICAgICAgICBlbHNlOiBwYXNzCiAKLXByaW50ICdyYWlzZV9zdG10JyAjICdyYWlzZScgdGVzdCBbJywnIHRlc3RdCi10cnk6IHJhaXNlIFJ1bnRpbWVFcnJvciwgJ2p1c3QgdGVzdGluZycKLWV4Y2VwdCBSdW50aW1lRXJyb3I6IHBhc3MKLXRyeTogcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLWV4Y2VwdCBLZXlib2FyZEludGVycnVwdDogcGFzcworICAgIGRlZiB0ZXN0V2hpbGUoc2VsZik6CisgICAgICAgICMgJ3doaWxlJyB0ZXN0ICc6JyBzdWl0ZSBbJ2Vsc2UnICc6JyBzdWl0ZV0KKyAgICAgICAgd2hpbGUgMDogcGFzcworICAgICAgICB3aGlsZSAwOiBwYXNzCisgICAgICAgIGVsc2U6IHBhc3MKIAotcHJpbnQgJ2ltcG9ydF9uYW1lJyAjICdpbXBvcnQnIGRvdHRlZF9hc19uYW1lcwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUsIHN5cwotcHJpbnQgJ2ltcG9ydF9mcm9tJyAjICdmcm9tJyBkb3R0ZWRfbmFtZSAnaW1wb3J0JyAoJyonIHwgJygnIGltcG9ydF9hc19uYW1lcyAnKScgfCBpbXBvcnRfYXNfbmFtZXMpCi1mcm9tIHRpbWUgaW1wb3J0IHRpbWUKLWZyb20gdGltZSBpbXBvcnQgKHRpbWUpCi1mcm9tIHN5cyBpbXBvcnQgKgotZnJvbSBzeXMgaW1wb3J0IHBhdGgsIGFyZ3YKLWZyb20gc3lzIGltcG9ydCAocGF0aCwgYXJndikKLWZyb20gc3lzIGltcG9ydCAocGF0aCwgYXJndiwpCisgICAgZGVmIHRlc3RGb3Ioc2VsZik6CisgICAgICAgICMgJ2ZvcicgZXhwcmxpc3QgJ2luJyBleHBybGlzdCAnOicgc3VpdGUgWydlbHNlJyAnOicgc3VpdGVdCisgICAgICAgIGZvciBpIGluIDEsIDIsIDM6IHBhc3MKKyAgICAgICAgZm9yIGksIGosIGsgaW4gKCk6IHBhc3MKKyAgICAgICAgZWxzZTogcGFzcworICAgICAgICBjbGFzcyBTcXVhcmVzOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heCk6CisgICAgICAgICAgICAgICAgc2VsZi5tYXggPSBtYXgKKyAgICAgICAgICAgICAgICBzZWxmLnNvZmFyID0gW10KKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gbGVuKHNlbGYuc29mYXIpCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgbm90IDAgPD0gaSA8IHNlbGYubWF4OiByYWlzZSBJbmRleEVycm9yCisgICAgICAgICAgICAgICAgbiA9IGxlbihzZWxmLnNvZmFyKQorICAgICAgICAgICAgICAgIHdoaWxlIG4gPD0gaToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2Zhci5hcHBlbmQobipuKQorICAgICAgICAgICAgICAgICAgICBuID0gbisxCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29mYXJbaV0KKyAgICAgICAgbiA9IDAKKyAgICAgICAgZm9yIHggaW4gU3F1YXJlcygxMCk6IG4gPSBuK3gKKyAgICAgICAgaWYgbiAhPSAyODU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZvciBvdmVyIGdyb3dpbmcgc2VxdWVuY2UnKQogCi1wcmludCAnZ2xvYmFsX3N0bXQnICMgJ2dsb2JhbCcgTkFNRSAoJywnIE5BTUUpKgotZGVmIGYoKToKLSAgICBnbG9iYWwgYQotICAgIGdsb2JhbCBhLCBiCi0gICAgZ2xvYmFsIG9uZSwgdHdvLCB0aHJlZSwgZm91ciwgZml2ZSwgc2l4LCBzZXZlbiwgZWlnaHQsIG5pbmUsIHRlbgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgeCwgaW4gWygxLCksICgyLCksICgzLCldOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWzEsIDIsIDNdKQogCi1wcmludCAiYXNzZXJ0X3N0bXQiICMgYXNzZXJ0X3N0bXQ6ICdhc3NlcnQnIHRlc3QgWycsJyB0ZXN0XQotYXNzZXJ0IDEKLWFzc2VydCAxLCAxCi1hc3NlcnQgbGFtYmRhIHg6eAotYXNzZXJ0IDEsIGxhbWJkYSB4OngrMQorICAgIGRlZiB0ZXN0VHJ5KHNlbGYpOgorICAgICAgICAjIyMgdHJ5X3N0bXQ6ICd0cnknICc6JyBzdWl0ZSAoZXhjZXB0X2NsYXVzZSAnOicgc3VpdGUpKyBbJ2Vsc2UnICc6JyBzdWl0ZV0KKyAgICAgICAgIyMjICAgICAgICAgfCAndHJ5JyAnOicgc3VpdGUgJ2ZpbmFsbHknICc6JyBzdWl0ZQorICAgICAgICAjIyMgZXhjZXB0X2NsYXVzZTogJ2V4Y2VwdCcgW2V4cHIgWycsJyBleHByXV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgMS8wCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OiAxLzAKKyAgICAgICAgZXhjZXB0IEVPRkVycm9yOiBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIG1zZzogcGFzcworICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBtc2c6IHBhc3MKKyAgICAgICAgZXhjZXB0OiBwYXNzCisgICAgICAgIGVsc2U6IHBhc3MKKyAgICAgICAgdHJ5OiAxLzAKKyAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgVHlwZUVycm9yLCBaZXJvRGl2aXNpb25FcnJvcik6IHBhc3MKKyAgICAgICAgdHJ5OiAxLzAKKyAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgVHlwZUVycm9yLCBaZXJvRGl2aXNpb25FcnJvciksIG1zZzogcGFzcworICAgICAgICB0cnk6IHBhc3MKKyAgICAgICAgZmluYWxseTogcGFzcwogCi0jIyMgY29tcG91bmRfc3RtdDogaWZfc3RtdCB8IHdoaWxlX3N0bXQgfCBmb3Jfc3RtdCB8IHRyeV9zdG10IHwgZnVuY2RlZiB8IGNsYXNzZGVmCi0jIFRlc3RlZCBiZWxvdworICAgIGRlZiB0ZXN0U3VpdGUoc2VsZik6CisgICAgICAgICMgc2ltcGxlX3N0bXQgfCBORVdMSU5FIElOREVOVCBORVdMSU5FKiAoc3RtdCBORVdMSU5FKikrIERFREVOVAorICAgICAgICBpZiAxOiBwYXNzCisgICAgICAgIGlmIDE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIDE6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjCisgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjCiAKLXByaW50ICdpZl9zdG10JyAjICdpZicgdGVzdCAnOicgc3VpdGUgKCdlbGlmJyB0ZXN0ICc6JyBzdWl0ZSkqIFsnZWxzZScgJzonIHN1aXRlXQotaWYgMTogcGFzcwotaWYgMTogcGFzcwotZWxzZTogcGFzcwotaWYgMDogcGFzcwotZWxpZiAwOiBwYXNzCi1pZiAwOiBwYXNzCi1lbGlmIDA6IHBhc3MKLWVsaWYgMDogcGFzcwotZWxpZiAwOiBwYXNzCi1lbHNlOiBwYXNzCisgICAgZGVmIHRlc3RUZXN0KHNlbGYpOgorICAgICAgICAjIyMgYW5kX3Rlc3QgKCdvcicgYW5kX3Rlc3QpKgorICAgICAgICAjIyMgYW5kX3Rlc3Q6IG5vdF90ZXN0ICgnYW5kJyBub3RfdGVzdCkqCisgICAgICAgICMjIyBub3RfdGVzdDogJ25vdCcgbm90X3Rlc3QgfCBjb21wYXJpc29uCisgICAgICAgIGlmIG5vdCAxOiBwYXNzCisgICAgICAgIGlmIDEgYW5kIDE6IHBhc3MKKyAgICAgICAgaWYgMSBvciAxOiBwYXNzCisgICAgICAgIGlmIG5vdCBub3Qgbm90IDE6IHBhc3MKKyAgICAgICAgaWYgbm90IDEgYW5kIDEgYW5kIDE6IHBhc3MKKyAgICAgICAgaWYgMSBhbmQgMSBvciAxIGFuZCAxIGFuZCAxIG9yIG5vdCAxIGFuZCAxOiBwYXNzCiAKLXByaW50ICd3aGlsZV9zdG10JyAjICd3aGlsZScgdGVzdCAnOicgc3VpdGUgWydlbHNlJyAnOicgc3VpdGVdCi13aGlsZSAwOiBwYXNzCi13aGlsZSAwOiBwYXNzCi1lbHNlOiBwYXNzCisgICAgZGVmIHRlc3RDb21wYXJpc29uKHNlbGYpOgorICAgICAgICAjIyMgY29tcGFyaXNvbjogZXhwciAoY29tcF9vcCBleHByKSoKKyAgICAgICAgIyMjIGNvbXBfb3A6ICc8J3wnPid8Jz09J3wnPj0nfCc8PSd8JyE9J3wnaW4nfCdub3QnICdpbid8J2lzJ3wnaXMnICdub3QnCisgICAgICAgIGlmIDE6IHBhc3MKKyAgICAgICAgeCA9ICgxID09IDEpCisgICAgICAgIGlmIDEgPT0gMTogcGFzcworICAgICAgICBpZiAxICE9IDE6IHBhc3MKKyAgICAgICAgaWYgMSA8IDE6IHBhc3MKKyAgICAgICAgaWYgMSA+IDE6IHBhc3MKKyAgICAgICAgaWYgMSA8PSAxOiBwYXNzCisgICAgICAgIGlmIDEgPj0gMTogcGFzcworICAgICAgICBpZiAxIGlzIDE6IHBhc3MKKyAgICAgICAgaWYgMSBpcyBub3QgMTogcGFzcworICAgICAgICBpZiAxIGluICgpOiBwYXNzCisgICAgICAgIGlmIDEgbm90IGluICgpOiBwYXNzCisgICAgICAgIGlmIDEgPCAxID4gMSA9PSAxID49IDEgPD0gMSAhPSAxIGluIDEgbm90IGluIDEgaXMgMSBpcyBub3QgMTogcGFzcwogCi1wcmludCAnZm9yX3N0bXQnICMgJ2ZvcicgZXhwcmxpc3QgJ2luJyBleHBybGlzdCAnOicgc3VpdGUgWydlbHNlJyAnOicgc3VpdGVdCi1mb3IgaSBpbiAxLCAyLCAzOiBwYXNzCi1mb3IgaSwgaiwgayBpbiAoKTogcGFzcwotZWxzZTogcGFzcwotY2xhc3MgU3F1YXJlczoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4KToKLSAgICAgICAgc2VsZi5tYXggPSBtYXgKLSAgICAgICAgc2VsZi5zb2ZhciA9IFtdCi0gICAgZGVmIF9fbGVuX18oc2VsZik6IHJldHVybiBsZW4oc2VsZi5zb2ZhcikKLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6Ci0gICAgICAgIGlmIG5vdCAwIDw9IGkgPCBzZWxmLm1heDogcmFpc2UgSW5kZXhFcnJvcgotICAgICAgICBuID0gbGVuKHNlbGYuc29mYXIpCi0gICAgICAgIHdoaWxlIG4gPD0gaToKLSAgICAgICAgICAgIHNlbGYuc29mYXIuYXBwZW5kKG4qbikKLSAgICAgICAgICAgIG4gPSBuKzEKLSAgICAgICAgcmV0dXJuIHNlbGYuc29mYXJbaV0KLW4gPSAwCi1mb3IgeCBpbiBTcXVhcmVzKDEwKTogbiA9IG4reAotaWYgbiAhPSAyODU6IHJhaXNlIFRlc3RGYWlsZWQsICdmb3Igb3ZlciBncm93aW5nIHNlcXVlbmNlJworICAgIGRlZiB0ZXN0QmluYXJ5TWFza09wcyhzZWxmKToKKyAgICAgICAgeCA9IDEgJiAxCisgICAgICAgIHggPSAxIF4gMQorICAgICAgICB4ID0gMSB8IDEKIAotcmVzdWx0ID0gW10KLWZvciB4LCBpbiBbKDEsKSwgKDIsKSwgKDMsKV06Ci0gICAgcmVzdWx0LmFwcGVuZCh4KQotdmVyZXEocmVzdWx0LCBbMSwgMiwgM10pCisgICAgZGVmIHRlc3RTaGlmdE9wcyhzZWxmKToKKyAgICAgICAgeCA9IDEgPDwgMQorICAgICAgICB4ID0gMSA+PiAxCisgICAgICAgIHggPSAxIDw8IDEgPj4gMQogCi1wcmludCAndHJ5X3N0bXQnCi0jIyMgdHJ5X3N0bXQ6ICd0cnknICc6JyBzdWl0ZSAoZXhjZXB0X2NsYXVzZSAnOicgc3VpdGUpKyBbJ2Vsc2UnICc6JyBzdWl0ZV0KLSMjIyAgICAgICAgIHwgJ3RyeScgJzonIHN1aXRlICdmaW5hbGx5JyAnOicgc3VpdGUKLSMjIyBleGNlcHRfY2xhdXNlOiAnZXhjZXB0JyBbZXhwciBbJywnIGV4cHJdXQotdHJ5OgotICAgIDEvMAotZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgcGFzcwotdHJ5OiAxLzAKLWV4Y2VwdCBFT0ZFcnJvcjogcGFzcwotZXhjZXB0IFR5cGVFcnJvciwgbXNnOiBwYXNzCi1leGNlcHQgUnVudGltZUVycm9yLCBtc2c6IHBhc3MKLWV4Y2VwdDogcGFzcwotZWxzZTogcGFzcwotdHJ5OiAxLzAKLWV4Y2VwdCAoRU9GRXJyb3IsIFR5cGVFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IpOiBwYXNzCi10cnk6IDEvMAotZXhjZXB0IChFT0ZFcnJvciwgVHlwZUVycm9yLCBaZXJvRGl2aXNpb25FcnJvciksIG1zZzogcGFzcwotdHJ5OiBwYXNzCi1maW5hbGx5OiBwYXNzCisgICAgZGVmIHRlc3RBZGRpdGl2ZU9wcyhzZWxmKToKKyAgICAgICAgeCA9IDEKKyAgICAgICAgeCA9IDEgKyAxCisgICAgICAgIHggPSAxIC0gMSAtIDEKKyAgICAgICAgeCA9IDEgLSAxICsgMSAtIDEgKyAxCiAKLXByaW50ICdzdWl0ZScgIyBzaW1wbGVfc3RtdCB8IE5FV0xJTkUgSU5ERU5UIE5FV0xJTkUqIChzdG10IE5FV0xJTkUqKSsgREVERU5UCi1pZiAxOiBwYXNzCi1pZiAxOgotICAgIHBhc3MKLWlmIDE6Ci0gICAgIwotICAgICMKLSAgICAjCi0gICAgcGFzcwotICAgIHBhc3MKLSAgICAjCi0gICAgcGFzcwotICAgICMKKyAgICBkZWYgdGVzdE11bHRpcGxpY2F0aXZlT3BzKHNlbGYpOgorICAgICAgICB4ID0gMSAqIDEKKyAgICAgICAgeCA9IDEgLyAxCisgICAgICAgIHggPSAxICUgMQorICAgICAgICB4ID0gMSAvIDEgKiAxICUgMQogCi1wcmludCAndGVzdCcKLSMjIyBhbmRfdGVzdCAoJ29yJyBhbmRfdGVzdCkqCi0jIyMgYW5kX3Rlc3Q6IG5vdF90ZXN0ICgnYW5kJyBub3RfdGVzdCkqCi0jIyMgbm90X3Rlc3Q6ICdub3QnIG5vdF90ZXN0IHwgY29tcGFyaXNvbgotaWYgbm90IDE6IHBhc3MKLWlmIDEgYW5kIDE6IHBhc3MKLWlmIDEgb3IgMTogcGFzcwotaWYgbm90IG5vdCBub3QgMTogcGFzcwotaWYgbm90IDEgYW5kIDEgYW5kIDE6IHBhc3MKLWlmIDEgYW5kIDEgb3IgMSBhbmQgMSBhbmQgMSBvciBub3QgMSBhbmQgMTogcGFzcworICAgIGRlZiB0ZXN0VW5hcnlPcHMoc2VsZik6CisgICAgICAgIHggPSArMQorICAgICAgICB4ID0gLTEKKyAgICAgICAgeCA9IH4xCisgICAgICAgIHggPSB+MSBeIDEgJiAxIHwgMSAmIDEgXiAtMQorICAgICAgICB4ID0gLTEqMS8xICsgMSoxIC0gLS0tMSoxCiAKLXByaW50ICdjb21wYXJpc29uJwotIyMjIGNvbXBhcmlzb246IGV4cHIgKGNvbXBfb3AgZXhwcikqCi0jIyMgY29tcF9vcDogJzwnfCc+J3wnPT0nfCc+PSd8Jzw9J3wnIT0nfCdpbid8J25vdCcgJ2luJ3wnaXMnfCdpcycgJ25vdCcKLWlmIDE6IHBhc3MKLXggPSAoMSA9PSAxKQotaWYgMSA9PSAxOiBwYXNzCi1pZiAxICE9IDE6IHBhc3MKLWlmIDEgPCAxOiBwYXNzCi1pZiAxID4gMTogcGFzcwotaWYgMSA8PSAxOiBwYXNzCi1pZiAxID49IDE6IHBhc3MKLWlmIDEgaXMgMTogcGFzcwotaWYgMSBpcyBub3QgMTogcGFzcwotaWYgMSBpbiAoKTogcGFzcwotaWYgMSBub3QgaW4gKCk6IHBhc3MKLWlmIDEgPCAxID4gMSA9PSAxID49IDEgPD0gMSAhPSAxIGluIDEgbm90IGluIDEgaXMgMSBpcyBub3QgMTogcGFzcworICAgIGRlZiB0ZXN0U2VsZWN0b3JzKHNlbGYpOgorICAgICAgICAjIyMgdHJhaWxlcjogJygnIFt0ZXN0bGlzdF0gJyknIHwgJ1snIHN1YnNjcmlwdCAnXScgfCAnLicgTkFNRQorICAgICAgICAjIyMgc3Vic2NyaXB0OiBleHByIHwgW2V4cHJdICc6JyBbZXhwcl0KIAotcHJpbnQgJ2JpbmFyeSBtYXNrIG9wcycKLXggPSAxICYgMQoteCA9IDEgXiAxCi14ID0gMSB8IDEKKyAgICAgICAgaW1wb3J0IHN5cywgdGltZQorICAgICAgICBjID0gc3lzLnBhdGhbMF0KKyAgICAgICAgeCA9IHRpbWUudGltZSgpCisgICAgICAgIHggPSBzeXMubW9kdWxlc1sndGltZSddLnRpbWUoKQorICAgICAgICBhID0gJzAxMjM0JworICAgICAgICBjID0gYVswXQorICAgICAgICBjID0gYVstMV0KKyAgICAgICAgcyA9IGFbMDo1XQorICAgICAgICBzID0gYVs6NV0KKyAgICAgICAgcyA9IGFbMDpdCisgICAgICAgIHMgPSBhWzpdCisgICAgICAgIHMgPSBhWy01Ol0KKyAgICAgICAgcyA9IGFbOi0xXQorICAgICAgICBzID0gYVstNDotM10KKyAgICAgICAgIyBBIHJvdWdoIHRlc3Qgb2YgU0YgYnVnIDEzMzM5ODIuICBodHRwOi8vcHl0aG9uLm9yZy9zZi8xMzMzOTgyCisgICAgICAgICMgVGhlIHRlc3RpbmcgaGVyZSBpcyBmYWlybHkgaW5jb21wbGV0ZS4KKyAgICAgICAgIyBUZXN0IGNhc2VzIHNob3VsZCBpbmNsdWRlOiBjb21tYXMgd2l0aCAxIGFuZCAyIGNvbG9ucworICAgICAgICBkID0ge30KKyAgICAgICAgZFsxXSA9IDEKKyAgICAgICAgZFsxLF0gPSAyCisgICAgICAgIGRbMSwyXSA9IDMKKyAgICAgICAgZFsxLDIsM10gPSA0CisgICAgICAgIEwgPSBsaXN0KGQpCisgICAgICAgIEwuc29ydChrZXk9bGFtYmRhIHg6IHggaWYgaXNpbnN0YW5jZSh4LCB0dXBsZSkgZWxzZSAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKEwpLCAnWzEsICgxLCksICgxLCAyKSwgKDEsIDIsIDMpXScpCiAKLXByaW50ICdzaGlmdCBvcHMnCi14ID0gMSA8PCAxCi14ID0gMSA+PiAxCi14ID0gMSA8PCAxID4+IDEKKyAgICBkZWYgdGVzdEF0b21zKHNlbGYpOgorICAgICAgICAjIyMgYXRvbTogJygnIFt0ZXN0bGlzdF0gJyknIHwgJ1snIFt0ZXN0bGlzdF0gJ10nIHwgJ3snIFtkaWN0c2V0bWFrZXJdICd9JyB8IE5BTUUgfCBOVU1CRVIgfCBTVFJJTkcKKyAgICAgICAgIyMjIGRpY3RzZXRtYWtlcjogKHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10pIHwgKHRlc3QgKCcsJyB0ZXN0KSogWycsJ10pCiAKLXByaW50ICdhZGRpdGl2ZSBvcHMnCi14ID0gMQoteCA9IDEgKyAxCi14ID0gMSAtIDEgLSAxCi14ID0gMSAtIDEgKyAxIC0gMSArIDEKKyAgICAgICAgeCA9ICgxKQorICAgICAgICB4ID0gKDEgb3IgMiBvciAzKQorICAgICAgICB4ID0gKDEgb3IgMiBvciAzLCAyLCAzKQogCi1wcmludCAnbXVsdGlwbGljYXRpdmUgb3BzJwoteCA9IDEgKiAxCi14ID0gMSAvIDEKLXggPSAxICUgMQoteCA9IDEgLyAxICogMSAlIDEKKyAgICAgICAgeCA9IFtdCisgICAgICAgIHggPSBbMV0KKyAgICAgICAgeCA9IFsxIG9yIDIgb3IgM10KKyAgICAgICAgeCA9IFsxIG9yIDIgb3IgMywgMiwgM10KKyAgICAgICAgeCA9IFtdCiAKLXByaW50ICd1bmFyeSBvcHMnCi14ID0gKzEKLXggPSAtMQoteCA9IH4xCi14ID0gfjEgXiAxICYgMSB8IDEgJiAxIF4gLTEKLXggPSAtMSoxLzEgKyAxKjEgLSAtLS0xKjEKKyAgICAgICAgeCA9IHt9CisgICAgICAgIHggPSB7J29uZSc6IDF9CisgICAgICAgIHggPSB7J29uZSc6IDEsfQorICAgICAgICB4ID0geydvbmUnIG9yICd0d28nOiAxIG9yIDJ9CisgICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyfQorICAgICAgICB4ID0geydvbmUnOiAxLCAndHdvJzogMix9CisgICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyLCAndGhyZWUnOiAzLCAnZm91cic6IDQsICdmaXZlJzogNSwgJ3NpeCc6IDZ9CiAKLXByaW50ICdzZWxlY3RvcnMnCi0jIyMgdHJhaWxlcjogJygnIFt0ZXN0bGlzdF0gJyknIHwgJ1snIHN1YnNjcmlwdCAnXScgfCAnLicgTkFNRQotIyMjIHN1YnNjcmlwdDogZXhwciB8IFtleHByXSAnOicgW2V4cHJdCi1mMSgpCi1mMigxKQotZjIoMSwpCi1mMygxLCAyKQotZjMoMSwgMiwpCi1mNCgxLCAoMiwgKDMsIDQpKSkKLXYwKCkKLXYwKDEpCi12MCgxLCkKLXYwKDEsMikKLXYwKDEsMiwzLDQsNSw2LDcsOCw5LDApCi12MSgxKQotdjEoMSwpCi12MSgxLDIpCi12MSgxLDIsMykKLXYxKDEsMiwzLDQsNSw2LDcsOCw5LDApCi12MigxLDIpCi12MigxLDIsMykKLXYyKDEsMiwzLDQpCi12MigxLDIsMyw0LDUsNiw3LDgsOSwwKQotdjMoMSwoMiwzKSkKLXYzKDEsKDIsMyksNCkKLXYzKDEsKDIsMyksNCw1LDYsNyw4LDksMCkKLXByaW50Ci1pbXBvcnQgc3lzLCB0aW1lCi1jID0gc3lzLnBhdGhbMF0KLXggPSB0aW1lLnRpbWUoKQoteCA9IHN5cy5tb2R1bGVzWyd0aW1lJ10udGltZSgpCi1hID0gJzAxMjM0JwotYyA9IGFbMF0KLWMgPSBhWy0xXQotcyA9IGFbMDo1XQotcyA9IGFbOjVdCi1zID0gYVswOl0KLXMgPSBhWzpdCi1zID0gYVstNTpdCi1zID0gYVs6LTFdCi1zID0gYVstNDotM10KLSMgQSByb3VnaCB0ZXN0IG9mIFNGIGJ1ZyAxMzMzOTgyLiAgaHR0cDovL3B5dGhvbi5vcmcvc2YvMTMzMzk4MgotIyBUaGUgdGVzdGluZyBoZXJlIGlzIGZhaXJseSBpbmNvbXBsZXRlLgotIyBUZXN0IGNhc2VzIHNob3VsZCBpbmNsdWRlOiBjb21tYXMgd2l0aCAxIGFuZCAyIGNvbG9ucwotZCA9IHt9Ci1kWzFdID0gMQotZFsxLF0gPSAyCi1kWzEsMl0gPSAzCi1kWzEsMiwzXSA9IDQKLUwgPSBsaXN0KGQpCi1MLnNvcnQoa2V5PWxhbWJkYSB4OiB4IGlmIGlzaW5zdGFuY2UoeCwgdHVwbGUpIGVsc2UgKCkpCi1wcmludCBMCisgICAgICAgIHggPSB7J29uZSd9CisgICAgICAgIHggPSB7J29uZScsIDEsfQorICAgICAgICB4ID0geydvbmUnLCAndHdvJywgJ3RocmVlJ30KKyAgICAgICAgeCA9IHsyLCAzLCA0LH0KKworICAgICAgICB4ID0geAorICAgICAgICB4ID0gJ3gnCisgICAgICAgIHggPSAxMjMKKworICAgICMjIyBleHBybGlzdDogZXhwciAoJywnIGV4cHIpKiBbJywnXQorICAgICMjIyB0ZXN0bGlzdDogdGVzdCAoJywnIHRlc3QpKiBbJywnXQorICAgICMgVGhlc2UgaGF2ZSBiZWVuIGV4ZXJjaXNlZCBlbm91Z2ggYWJvdmUKKworICAgIGRlZiB0ZXN0Q2xhc3NkZWYoc2VsZik6CisgICAgICAgICMgJ2NsYXNzJyBOQU1FIFsnKCcgW3Rlc3RsaXN0XSAnKSddICc6JyBzdWl0ZQorICAgICAgICBjbGFzcyBCOiBwYXNzCisgICAgICAgIGNsYXNzIEIyKCk6IHBhc3MKKyAgICAgICAgY2xhc3MgQzEoQik6IHBhc3MKKyAgICAgICAgY2xhc3MgQzIoQik6IHBhc3MKKyAgICAgICAgY2xhc3MgRChDMSwgQzIsIEIpOiBwYXNzCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgbWV0aDEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBtZXRoMihzZWxmLCBhcmcpOiBwYXNzCisgICAgICAgICAgICBkZWYgbWV0aDMoc2VsZiwgYTEsIGEyKTogcGFzcworCisgICAgZGVmIHRlc3RMaXN0Y29tcHMoc2VsZik6CisgICAgICAgICMgbGlzdCBjb21wcmVoZW5zaW9uIHRlc3RzCisgICAgICAgIG51bXMgPSBbMSwgMiwgMywgNCwgNV0KKyAgICAgICAgc3RycyA9IFsiQXBwbGUiLCAiQmFuYW5hIiwgIkNvY29udXQiXQorICAgICAgICBzcGNzID0gWyIgIEFwcGxlIiwgIiBCYW5hbmEgIiwgIkNvY28gIG51dCAgIl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzLnN0cmlwKCkgZm9yIHMgaW4gc3Bjc10sIFsnQXBwbGUnLCAnQmFuYW5hJywgJ0NvY28gIG51dCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFszICogeCBmb3IgeCBpbiBudW1zXSwgWzMsIDYsIDksIDEyLCAxNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3ggZm9yIHggaW4gbnVtcyBpZiB4ID4gMl0sIFszLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGksIHMpIGZvciBpIGluIG51bXMgZm9yIHMgaW4gc3Ryc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgWygxLCAnQXBwbGUnKSwgKDEsICdCYW5hbmEnKSwgKDEsICdDb2NvbnV0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnQXBwbGUnKSwgKDIsICdCYW5hbmEnKSwgKDIsICdDb2NvbnV0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnQXBwbGUnKSwgKDMsICdCYW5hbmEnKSwgKDMsICdDb2NvbnV0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnQXBwbGUnKSwgKDQsICdCYW5hbmEnKSwgKDQsICdDb2NvbnV0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnQXBwbGUnKSwgKDUsICdCYW5hbmEnKSwgKDUsICdDb2NvbnV0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoaSwgcykgZm9yIGkgaW4gbnVtcyBmb3IgcyBpbiBbZiBmb3IgZiBpbiBzdHJzIGlmICJuIiBpbiBmXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgWygxLCAnQmFuYW5hJyksICgxLCAnQ29jb251dCcpLCAoMiwgJ0JhbmFuYScpLCAoMiwgJ0NvY29udXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdCYW5hbmEnKSwgKDMsICdDb2NvbnV0JyksICg0LCAnQmFuYW5hJyksICg0LCAnQ29jb251dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ0JhbmFuYScpLCAoNSwgJ0NvY29udXQnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhsYW1iZGEgYTpbYSoqaSBmb3IgaSBpbiByYW5nZShhKzEpXSkoaikgZm9yIGogaW4gcmFuZ2UoNSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbMV0sIFsxLCAxXSwgWzEsIDIsIDRdLCBbMSwgMywgOSwgMjddLCBbMSwgNCwgMTYsIDY0LCAyNTZdXSkKKworICAgICAgICBkZWYgdGVzdF9pbl9mdW5jKGwpOgorICAgICAgICAgICAgcmV0dXJuIFswIDwgeCA8IDMgZm9yIHggaW4gbCBpZiB4ID4gMl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RfaW5fZnVuYyhudW1zKSwgW0ZhbHNlLCBGYWxzZSwgRmFsc2VdKQorCisgICAgICAgIGRlZiB0ZXN0X25lc3RlZF9mcm9udCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbW3kgZm9yIHkgaW4gW3gsIHggKyAxXV0gZm9yIHggaW4gWzEsMyw1XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbMSwgMl0sIFszLCA0XSwgWzUsIDZdXSkKKworICAgICAgICB0ZXN0X25lc3RlZF9mcm9udCgpCisKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJbaSwgcyBmb3IgaSBpbiBudW1zIGZvciBzIGluIHN0cnNdIikKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJbeCBpZiB5XSIpCisKKyAgICAgICAgc3VwcGxpZXJzID0gWworICAgICAgICAgICgxLCAiQm9laW5nIiksCisgICAgICAgICAgKDIsICJGb3JkIiksCisgICAgICAgICAgKDMsICJNYWNkb25hbGRzIikKKyAgICAgICAgXQorCisgICAgICAgIHBhcnRzID0gWworICAgICAgICAgICgxMCwgIkFpcmxpbmVyIiksCisgICAgICAgICAgKDIwLCAiRW5naW5lIiksCisgICAgICAgICAgKDMwLCAiQ2hlZXNlYnVyZ2VyIikKKyAgICAgICAgXQorCisgICAgICAgIHN1cHBhcnQgPSBbCisgICAgICAgICAgKDEsIDEwKSwgKDEsIDIwKSwgKDIsIDIwKSwgKDMsIDMwKQorICAgICAgICBdCisKKyAgICAgICAgeCA9IFsKKyAgICAgICAgICAoc25hbWUsIHBuYW1lKQorICAgICAgICAgICAgZm9yIChzbm8sIHNuYW1lKSBpbiBzdXBwbGllcnMKKyAgICAgICAgICAgICAgZm9yIChwbm8sIHBuYW1lKSBpbiBwYXJ0cworICAgICAgICAgICAgICAgIGZvciAoc3Bfc25vLCBzcF9wbm8pIGluIHN1cHBhcnQKKyAgICAgICAgICAgICAgICAgIGlmIHNubyA9PSBzcF9zbm8gYW5kIHBubyA9PSBzcF9wbm8KKyAgICAgICAgXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgWygnQm9laW5nJywgJ0FpcmxpbmVyJyksICgnQm9laW5nJywgJ0VuZ2luZScpLCAoJ0ZvcmQnLCAnRW5naW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTWFjZG9uYWxkcycsICdDaGVlc2VidXJnZXInKV0pCisKKyAgICBkZWYgdGVzdEdlbmV4cHMoc2VsZik6CisgICAgICAgICMgZ2VuZXJhdG9yIGV4cHJlc3Npb24gdGVzdHMKKyAgICAgICAgZyA9IChbeCBmb3IgeCBpbiByYW5nZSgxMCldIGZvciB4IGluIHJhbmdlKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcubmV4dCgpLCBbeCBmb3IgeCBpbiByYW5nZSgxMCldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnLm5leHQoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCdzaG91bGQgcHJvZHVjZSBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbicpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGcgPSAoYSBmb3IgZCBpbiBhKQorICAgICAgICAgICAgZy5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnc2hvdWxkIHByb2R1Y2UgVHlwZUVycm9yJykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoKHgsIHkpIGZvciB4IGluICdhYmNkJyBmb3IgeSBpbiAnYWJjZCcpLCBbKHgsIHkpIGZvciB4IGluICdhYmNkJyBmb3IgeSBpbiAnYWJjZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoKHgsIHkpIGZvciB4IGluICdhYicgZm9yIHkgaW4gJ3h5JyksIFsoeCwgeSkgZm9yIHggaW4gJ2FiJyBmb3IgeSBpbiAneHknXSkKKworICAgICAgICBhID0gW3ggZm9yIHggaW4gcmFuZ2UoMTApXQorICAgICAgICBiID0gKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gYSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGIpLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCoqMiBmb3IgeCBpbiByYW5nZSgxMCkpLCBzdW0oW3gqKjIgZm9yIHggaW4gcmFuZ2UoMTApXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHgqeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCUyKSwgc3VtKFt4KnggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHglMl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4IGZvciB4IGluICh5IGZvciB5IGluIHJhbmdlKDEwKSkpLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApKSkpLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gW3kgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApKV0pLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApIGlmIFRydWUpKSBpZiBUcnVlKSwgc3VtKFt4IGZvciB4IGluIHJhbmdlKDEwKV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4IGZvciB4IGluICh5IGZvciB5IGluICh6IGZvciB6IGluIHJhbmdlKDEwKSBpZiBUcnVlKSBpZiBGYWxzZSkgaWYgVHJ1ZSksIDApCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiZm9vKHggZm9yIHggaW4gcmFuZ2UoMTApLCAxMDApIikKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJmb28oMTAwLCB4IGZvciB4IGluIHJhbmdlKDEwKSkiKQorCisgICAgZGVmIHRlc3RDb21wcmVoZW5zaW9uU3BlY2lhbHMoc2VsZik6CisgICAgICAgICMgdGVzdCBmb3Igb3V0bW9zdCBpdGVyYWJsZSBwcmVjb21wdXRhdGlvbgorICAgICAgICB4ID0gMTA7IGcgPSAoaSBmb3IgaSBpbiByYW5nZSh4KSk7IHggPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoZykpLCAxMCkKKworICAgICAgICAjIFRoaXMgc2hvdWxkIGhvbGQsIHNpbmNlIHdlJ3JlIG9ubHkgcHJlY29tcHV0aW5nIG91dG1vc3QgaXRlcmFibGUuCisgICAgICAgIHggPSAxMDsgdCA9IEZhbHNlOyBnID0gKChpLGopIGZvciBpIGluIHJhbmdlKHgpIGlmIHQgZm9yIGogaW4gcmFuZ2UoeCkpCisgICAgICAgIHggPSA1OyB0ID0gVHJ1ZTsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGksaikgZm9yIGkgaW4gcmFuZ2UoMTApIGZvciBqIGluIHJhbmdlKDUpXSwgbGlzdChnKSkKKworICAgICAgICAjIEdyYW1tYXIgYWxsb3dzIG11bHRpcGxlIGFkamFjZW50ICdpZidzIGluIGxpc3Rjb21wcyBhbmQgZ2VuZXhwcywKKyAgICAgICAgIyBldmVuIHRob3VnaCBpdCdzIHNpbGx5LiBNYWtlIHN1cmUgaXQgd29ya3MgKGlmZWxzZSBicm9rZSB0aGlzLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbIHggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHggJSAyIGlmIHggJSAzIF0sIFsxLCA1LCA3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHggJSAyIGlmIHggJSAzKSwgWzEsIDUsIDddKQorCisgICAgICAgICMgdmVyaWZ5IHVucGFja2luZyBzaW5nbGUgZWxlbWVudCB0dXBsZXMgaW4gbGlzdGNvbXAvZ2VuZXhwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt4IGZvciB4LCBpbiBbKDQsKSwgKDUsKSwgKDYsKV1dLCBbNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4IGZvciB4LCBpbiBbKDcsKSwgKDgsKSwgKDksKV0pLCBbNywgOCwgOV0pCisKKyAgICBkZWYgdGVzdElmRWxzZUV4cHIoc2VsZik6CisgICAgICAgICMgVGVzdCBpZmVsc2UgZXhwcmVzc2lvbnMgaW4gdmFyaW91cyBjYXNlcworICAgICAgICBkZWYgX2NoZWNrZXZhbChtc2csIHJldCk6CisgICAgICAgICAgICAiaGVscGVyIHRvIGNoZWNrIHRoYXQgZXZhbHVhdGlvbiBvZiBleHByZXNzaW9ucyBpcyBkb25lIGNvcnJlY3RseSIKKyAgICAgICAgICAgIHByaW50IHgKKyAgICAgICAgICAgIHJldHVybiByZXQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCgpIGZvciB4IGluIGxhbWJkYTogVHJ1ZSwgbGFtYmRhOiBGYWxzZSBpZiB4KCkgXSwgW1RydWVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCgpIGZvciB4IGluIChsYW1iZGE6IFRydWUsIGxhbWJkYTogRmFsc2UpIGlmIHgoKSBdLCBbVHJ1ZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyB4KEZhbHNlKSBmb3IgeCBpbiAobGFtYmRhIHg6IEZhbHNlIGlmIHggZWxzZSBUcnVlLCBsYW1iZGEgeDogVHJ1ZSBpZiB4IGVsc2UgRmFsc2UpIGlmIHgoRmFsc2UpIF0sIFtUcnVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgMSIsIDApKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoX2NoZWNrZXZhbCgiY2hlY2sgMiIsIDApIGlmIDAgZWxzZSA1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBhbmQgNiBpZiAwIGVsc2UgMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCg1IGFuZCA2KSBpZiAwIGVsc2UgMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUgYW5kICg2IGlmIDEgZWxzZSAxKSksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAgb3IgX2NoZWNrZXZhbCgiY2hlY2sgMyIsIDIpIGlmIDAgZWxzZSAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSBvciBfY2hlY2tldmFsKCJjaGVjayA0IiwgMikgaWYgMSBlbHNlIF9jaGVja2V2YWwoImNoZWNrIDUiLCAzKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAgb3IgNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgNiIsIDMpKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobm90IDUgaWYgMSBlbHNlIDEpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobm90IDUgaWYgMCBlbHNlIDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2ICsgMSBpZiAxIGVsc2UgMiksIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgLSAxIGlmIDEgZWxzZSAyKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAqIDIgaWYgMSBlbHNlIDQpLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAvIDIgaWYgMSBlbHNlIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2IDwgNCBpZiAwIGVsc2UgMiksIDIpCiAKIAotcHJpbnQgJ2F0b21zJwotIyMjIGF0b206ICcoJyBbdGVzdGxpc3RdICcpJyB8ICdbJyBbdGVzdGxpc3RdICddJyB8ICd7JyBbZGljdHNldG1ha2VyXSAnfScgfCBOQU1FIHwgTlVNQkVSIHwgU1RSSU5HCi0jIyMgZGljdHNldG1ha2VyOiAodGVzdCAnOicgdGVzdCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkgfCAodGVzdCAoJywnIHRlc3QpKiBbJywnXSkKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVG9rZW5UZXN0cywgR3JhbW1hclRlc3RzKQogCi14ID0gKDEpCi14ID0gKDEgb3IgMiBvciAzKQoteCA9ICgxIG9yIDIgb3IgMywgMiwgMykKLQoteCA9IFtdCi14ID0gWzFdCi14ID0gWzEgb3IgMiBvciAzXQoteCA9IFsxIG9yIDIgb3IgMywgMiwgM10KLXggPSBbXQotCi14ID0ge30KLXggPSB7J29uZSc6IDF9Ci14ID0geydvbmUnOiAxLH0KLXggPSB7J29uZScgb3IgJ3R3byc6IDEgb3IgMn0KLXggPSB7J29uZSc6IDEsICd0d28nOiAyfQoteCA9IHsnb25lJzogMSwgJ3R3byc6IDIsfQoteCA9IHsnb25lJzogMSwgJ3R3byc6IDIsICd0aHJlZSc6IDMsICdmb3VyJzogNCwgJ2ZpdmUnOiA1LCAnc2l4JzogNn0KLQoteCA9IHsnb25lJ30KLXggPSB7J29uZScsIDEsfQoteCA9IHsnb25lJywgJ3R3bycsICd0aHJlZSd9Ci14ID0gezIsIDMsIDQsfQotCi14ID0geAoteCA9ICd4JwoteCA9IDEyMwotCi0jIyMgZXhwcmxpc3Q6IGV4cHIgKCcsJyBleHByKSogWycsJ10KLSMjIyB0ZXN0bGlzdDogdGVzdCAoJywnIHRlc3QpKiBbJywnXQotIyBUaGVzZSBoYXZlIGJlZW4gZXhlcmNpc2VkIGVub3VnaCBhYm92ZQotCi1wcmludCAnY2xhc3NkZWYnICMgJ2NsYXNzJyBOQU1FIFsnKCcgW3Rlc3RsaXN0XSAnKSddICc6JyBzdWl0ZQotY2xhc3MgQjogcGFzcwotY2xhc3MgQjIoKTogcGFzcwotY2xhc3MgQzEoQik6IHBhc3MKLWNsYXNzIEMyKEIpOiBwYXNzCi1jbGFzcyBEKEMxLCBDMiwgQik6IHBhc3MKLWNsYXNzIEM6Ci0gICAgZGVmIG1ldGgxKHNlbGYpOiBwYXNzCi0gICAgZGVmIG1ldGgyKHNlbGYsIGFyZyk6IHBhc3MKLSAgICBkZWYgbWV0aDMoc2VsZiwgYTEsIGEyKTogcGFzcwotCi0jIGxpc3QgY29tcHJlaGVuc2lvbiB0ZXN0cwotbnVtcyA9IFsxLCAyLCAzLCA0LCA1XQotc3RycyA9IFsiQXBwbGUiLCAiQmFuYW5hIiwgIkNvY29udXQiXQotc3BjcyA9IFsiICBBcHBsZSIsICIgQmFuYW5hICIsICJDb2NvICBudXQgICJdCi0KLXByaW50IFtzLnN0cmlwKCkgZm9yIHMgaW4gc3Bjc10KLXByaW50IFszICogeCBmb3IgeCBpbiBudW1zXQotcHJpbnQgW3ggZm9yIHggaW4gbnVtcyBpZiB4ID4gMl0KLXByaW50IFsoaSwgcykgZm9yIGkgaW4gbnVtcyBmb3IgcyBpbiBzdHJzXQotcHJpbnQgWyhpLCBzKSBmb3IgaSBpbiBudW1zIGZvciBzIGluIFtmIGZvciBmIGluIHN0cnMgaWYgIm4iIGluIGZdXQotcHJpbnQgWyhsYW1iZGEgYTpbYSoqaSBmb3IgaSBpbiByYW5nZShhKzEpXSkoaikgZm9yIGogaW4gcmFuZ2UoNSldCi0KLWRlZiB0ZXN0X2luX2Z1bmMobCk6Ci0gICAgcmV0dXJuIFswIDwgeCA8IDMgZm9yIHggaW4gbCBpZiB4ID4gMl0KLQotcHJpbnQgdGVzdF9pbl9mdW5jKG51bXMpCi0KLWRlZiB0ZXN0X25lc3RlZF9mcm9udCgpOgotICAgIHByaW50IFtbeSBmb3IgeSBpbiBbeCwgeCArIDFdXSBmb3IgeCBpbiBbMSwzLDVdXQotCi10ZXN0X25lc3RlZF9mcm9udCgpCi0KLWNoZWNrX3N5bnRheCgiW2ksIHMgZm9yIGkgaW4gbnVtcyBmb3IgcyBpbiBzdHJzXSIpCi1jaGVja19zeW50YXgoIlt4IGlmIHldIikKLQotc3VwcGxpZXJzID0gWwotICAoMSwgIkJvZWluZyIpLAotICAoMiwgIkZvcmQiKSwKLSAgKDMsICJNYWNkb25hbGRzIikKLV0KLQotcGFydHMgPSBbCi0gICgxMCwgIkFpcmxpbmVyIiksCi0gICgyMCwgIkVuZ2luZSIpLAotICAoMzAsICJDaGVlc2VidXJnZXIiKQotXQotCi1zdXBwYXJ0ID0gWwotICAoMSwgMTApLCAoMSwgMjApLCAoMiwgMjApLCAoMywgMzApCi1dCi0KLXByaW50IFsKLSAgKHNuYW1lLCBwbmFtZSkKLSAgICBmb3IgKHNubywgc25hbWUpIGluIHN1cHBsaWVycwotICAgICAgZm9yIChwbm8sIHBuYW1lKSBpbiBwYXJ0cwotICAgICAgICBmb3IgKHNwX3Nubywgc3BfcG5vKSBpbiBzdXBwYXJ0Ci0gICAgICAgICAgaWYgc25vID09IHNwX3NubyBhbmQgcG5vID09IHNwX3BubwotXQotCi0jIGdlbmVyYXRvciBleHByZXNzaW9uIHRlc3RzCi1nID0gKFt4IGZvciB4IGluIHJhbmdlKDEwKV0gZm9yIHggaW4gcmFuZ2UoMSkpCi12ZXJpZnkoZy5uZXh0KCkgPT0gW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkKLXRyeToKLSAgICBnLm5leHQoKQotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdzaG91bGQgcHJvZHVjZSBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbicKLWV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgIHBhc3MKLQotYSA9IDEKLXRyeToKLSAgICBnID0gKGEgZm9yIGQgaW4gYSkKLSAgICBnLm5leHQoKQotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdzaG91bGQgcHJvZHVjZSBUeXBlRXJyb3InCi1leGNlcHQgVHlwZUVycm9yOgotICAgIHBhc3MKLQotdmVyaWZ5KGxpc3QoKHgsIHkpIGZvciB4IGluICdhYmNkJyBmb3IgeSBpbiAnYWJjZCcpID09IFsoeCwgeSkgZm9yIHggaW4gJ2FiY2QnIGZvciB5IGluICdhYmNkJ10pCi12ZXJpZnkobGlzdCgoeCwgeSkgZm9yIHggaW4gJ2FiJyBmb3IgeSBpbiAneHknKSA9PSBbKHgsIHkpIGZvciB4IGluICdhYicgZm9yIHkgaW4gJ3h5J10pCi0KLWEgPSBbeCBmb3IgeCBpbiByYW5nZSgxMCldCi1iID0gKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gYSkpCi12ZXJpZnkoc3VtKGIpID09IHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKLQotdmVyaWZ5KHN1bSh4KioyIGZvciB4IGluIHJhbmdlKDEwKSkgPT0gc3VtKFt4KioyIGZvciB4IGluIHJhbmdlKDEwKV0pKQotdmVyaWZ5KHN1bSh4KnggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHglMikgPT0gc3VtKFt4KnggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHglMl0pKQotdmVyaWZ5KHN1bSh4IGZvciB4IGluICh5IGZvciB5IGluIHJhbmdlKDEwKSkpID09IHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKLXZlcmlmeShzdW0oeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiAoeiBmb3IgeiBpbiByYW5nZSgxMCkpKSkgPT0gc3VtKFt4IGZvciB4IGluIHJhbmdlKDEwKV0pKQotdmVyaWZ5KHN1bSh4IGZvciB4IGluIFt5IGZvciB5IGluICh6IGZvciB6IGluIHJhbmdlKDEwKSldKSA9PSBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCi12ZXJpZnkoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApIGlmIFRydWUpKSBpZiBUcnVlKSA9PSBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCi12ZXJpZnkoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApIGlmIFRydWUpIGlmIEZhbHNlKSBpZiBUcnVlKSA9PSAwKQotY2hlY2tfc3ludGF4KCJmb28oeCBmb3IgeCBpbiByYW5nZSgxMCksIDEwMCkiKQotY2hlY2tfc3ludGF4KCJmb28oMTAwLCB4IGZvciB4IGluIHJhbmdlKDEwKSkiKQotCi0jIHRlc3QgZm9yIG91dG1vc3QgaXRlcmFibGUgcHJlY29tcHV0YXRpb24KLXggPSAxMDsgZyA9IChpIGZvciBpIGluIHJhbmdlKHgpKTsgeCA9IDUKLXZlcmlmeShsZW4obGlzdChnKSkgPT0gMTApCi0KLSMgVGhpcyBzaG91bGQgaG9sZCwgc2luY2Ugd2UncmUgb25seSBwcmVjb21wdXRpbmcgb3V0bW9zdCBpdGVyYWJsZS4KLXggPSAxMDsgdCA9IEZhbHNlOyBnID0gKChpLGopIGZvciBpIGluIHJhbmdlKHgpIGlmIHQgZm9yIGogaW4gcmFuZ2UoeCkpCi14ID0gNTsgdCA9IFRydWU7Ci12ZXJpZnkoWyhpLGopIGZvciBpIGluIHJhbmdlKDEwKSBmb3IgaiBpbiByYW5nZSg1KV0gPT0gbGlzdChnKSkKLQotIyBHcmFtbWFyIGFsbG93cyBtdWx0aXBsZSBhZGphY2VudCAnaWYncyBpbiBsaXN0Y29tcHMgYW5kIGdlbmV4cHMsCi0jIGV2ZW4gdGhvdWdoIGl0J3Mgc2lsbHkuIE1ha2Ugc3VyZSBpdCB3b3JrcyAoaWZlbHNlIGJyb2tlIHRoaXMuKQotdmVyaWZ5KFsgeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCAlIDIgaWYgeCAlIDMgXSwgWzEsIDUsIDddKQotdmVyaWZ5KCh4IGZvciB4IGluIHJhbmdlKDEwKSBpZiB4ICUgMiBpZiB4ICUgMyksIFsxLCA1LCA3XSkKLQotIyBUZXN0IGlmZWxzZSBleHByZXNzaW9ucyBpbiB2YXJpb3VzIGNhc2VzCi1kZWYgX2NoZWNrZXZhbChtc2csIHJldCk6Ci0gICAgImhlbHBlciB0byBjaGVjayB0aGF0IGV2YWx1YXRpb24gb2YgZXhwcmVzc2lvbnMgaXMgZG9uZSBjb3JyZWN0bHkiCi0gICAgcHJpbnQgeAotICAgIHJldHVybiByZXQKLQotdmVyaWZ5KFsgeCgpIGZvciB4IGluIGxhbWJkYTogVHJ1ZSwgbGFtYmRhOiBGYWxzZSBpZiB4KCkgXSA9PSBbVHJ1ZV0pCi12ZXJpZnkoWyB4KCkgZm9yIHggaW4gKGxhbWJkYTogVHJ1ZSwgbGFtYmRhOiBGYWxzZSkgaWYgeCgpIF0gPT0gW1RydWVdKQotdmVyaWZ5KFsgeChGYWxzZSkgZm9yIHggaW4gKGxhbWJkYSB4OiBGYWxzZSBpZiB4IGVsc2UgVHJ1ZSwgbGFtYmRhIHg6IFRydWUgaWYgeCBlbHNlIEZhbHNlKSBpZiB4KEZhbHNlKSBdID09IFtUcnVlXSkKLXZlcmlmeSgoNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgMSIsIDApKSA9PSA1KQotdmVyaWZ5KChfY2hlY2tldmFsKCJjaGVjayAyIiwgMCkgaWYgMCBlbHNlIDUpID09IDUpCi12ZXJpZnkoKDUgYW5kIDYgaWYgMCBlbHNlIDEpID09IDEpCi12ZXJpZnkoKCg1IGFuZCA2KSBpZiAwIGVsc2UgMSkgPT0gMSkKLXZlcmlmeSgoNSBhbmQgKDYgaWYgMSBlbHNlIDEpKSA9PSA2KQotdmVyaWZ5KCgwIG9yIF9jaGVja2V2YWwoImNoZWNrIDMiLCAyKSBpZiAwIGVsc2UgMykgPT0gMykKLXZlcmlmeSgoMSBvciBfY2hlY2tldmFsKCJjaGVjayA0IiwgMikgaWYgMSBlbHNlIF9jaGVja2V2YWwoImNoZWNrIDUiLCAzKSkgPT0gMSkKLXZlcmlmeSgoMCBvciA1IGlmIDEgZWxzZSBfY2hlY2tldmFsKCJjaGVjayA2IiwgMykpID09IDUpCi12ZXJpZnkoKG5vdCA1IGlmIDEgZWxzZSAxKSA9PSBGYWxzZSkKLXZlcmlmeSgobm90IDUgaWYgMCBlbHNlIDEpID09IDEpCi12ZXJpZnkoKDYgKyAxIGlmIDEgZWxzZSAyKSA9PSA3KQotdmVyaWZ5KCg2IC0gMSBpZiAxIGVsc2UgMikgPT0gNSkKLXZlcmlmeSgoNiAqIDIgaWYgMSBlbHNlIDQpID09IDEyKQotdmVyaWZ5KCg2IC8gMiBpZiAxIGVsc2UgMykgPT0gMykKLXZlcmlmeSgoNiA8IDQgaWYgMCBlbHNlIDIpID09IDIpCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKaW5kZXggMGY4ZTAzZS4uOTk4OWE5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtMTI4LDYgKzEyOCwxNyBAQAogICAgICAgICAgICAgZi5zZWVrKG5ld3BvcykgICMgcG9zaXRpdmUgc2VlawogICAgICAgICBmLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X3NlZWtfd2hlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorICAgICAgICAjIFRyeSBzZWVrKHdoZW5jZT0xKSwgcmVhZCB0ZXN0CisKKyAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgZi5yZWFkKDEwKQorICAgICAgICBmLnNlZWsoMTAsIHdoZW5jZT0xKQorICAgICAgICB5ID0gZi5yZWFkKDEwKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeSwgZGF0YTFbMjA6MzBdKQorICAgICAgICAKICAgICBkZWYgdGVzdF9zZWVrX3dyaXRlKHNlbGYpOgogICAgICAgICAjIFRyeSBzZWVrLCB3cml0ZSB0ZXN0CiAgICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3JykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQppbmRleCA5MGJhZTg4Li45MGE0ZTU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CkBAIC0xMCw5ICsxMCwxMCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0LCBmaWxlY2xhc3M9U3RyaW5nSU8uU3RyaW5nSU8pOgogICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CiAgICAgICAgIHNlbGYuZmlsZWNsYXNzID0gZmlsZWNsYXNzCisgICAgICAgIHNlbGYuZGF0YSA9ICcnCiAKICAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLmRhdGEgKz0gZGF0YQogCiAgICAgZGVmIG1ha2VmaWxlKHNlbGYsIG1vZGUsIGJ1ZnNpemU9Tm9uZSk6CiAgICAgICAgIGlmIG1vZGUgIT0gJ3InIGFuZCBtb2RlICE9ICdyYic6CkBAIC03MCwxMDMgKzcxLDg2IEBACiAgICAgICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5LCBoZWFkZXJzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5fYnVmZmVyLmNvdW50W2hlYWRlci5sb3dlcigpXSwgMSkKIAotIyBDb2xsZWN0IG91dHB1dCB0byBhIGJ1ZmZlciBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY29wZSB3aXRoIGxpbmUtZW5kaW5nCi0jIGlzc3VlcyBhY3Jvc3MgcGxhdGZvcm1zLiAgU3BlY2lmaWNhbGx5LCB0aGUgaGVhZGVycyB3aWxsIGhhdmUgXHJcbiBwYWlycwotIyBhbmQgc29tZSBwbGF0Zm9ybXMgd2lsbCBzdHJpcCB0aGVtIGZyb20gdGhlIG91dHB1dCBmaWxlLgorY2xhc3MgQmFzaWNUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zdGF0dXNfbGluZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBIVFRQIHN0YXR1cyBsaW5lcwogCi1kZWYgdGVzdCgpOgotICAgIGJ1ZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICBfc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgIHRyeToKLSAgICAgICAgc3lzLnN0ZG91dCA9IGJ1ZgotICAgICAgICBfdGVzdCgpCi0gICAgZmluYWxseToKLSAgICAgICAgc3lzLnN0ZG91dCA9IF9zdGRvdXQKLQotICAgICMgcHJpbnQgaW5kaXZpZHVhbCBsaW5lcyB3aXRoIGVuZGluZ3Mgc3RyaXBwZWQKLSAgICBzID0gYnVmLmdldHZhbHVlKCkKLSAgICBmb3IgbGluZSBpbiBzLnNwbGl0KCJcbiIpOgotICAgICAgICBwcmludCBsaW5lLnN0cmlwKCkKLQotZGVmIF90ZXN0KCk6Ci0gICAgIyBUZXN0IEhUVFAgc3RhdHVzIGxpbmVzCi0KLSAgICBib2R5ID0gIkhUVFAvMS4xIDIwMCBPa1xyXG5cclxuVGV4dCIKLSAgICBzb2NrID0gRmFrZVNvY2tldChib2R5KQotICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrLCAxKQotICAgIHJlc3AuYmVnaW4oKQotICAgIHByaW50IHJlc3AucmVhZCgpCi0gICAgcmVzcC5jbG9zZSgpCi0KLSAgICBib2R5ID0gIkhUVFAvMS4xIDQwMC4xMDAgTm90IE9rXHJcblxyXG5UZXh0IgotICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCi0gICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIDEpCi0gICAgdHJ5OgorICAgICAgICBib2R5ID0gIkhUVFAvMS4xIDIwMCBPa1xyXG5cclxuVGV4dCIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2spCiAgICAgICAgIHJlc3AuYmVnaW4oKQotICAgIGV4Y2VwdCBodHRwbGliLkJhZFN0YXR1c0xpbmU6Ci0gICAgICAgIHByaW50ICJCYWRTdGF0dXNMaW5lIHJhaXNlZCBhcyBleHBlY3RlZCIKLSAgICBlbHNlOgotICAgICAgICBwcmludCAiRXhwZWN0IEJhZFN0YXR1c0xpbmUiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKCksICdUZXh0JykKKyAgICAgICAgcmVzcC5jbG9zZSgpCiAKLSAgICAjIENoZWNrIGludmFsaWQgaG9zdF9wb3J0CisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgNDAwLjEwMCBOb3QgT2tcclxuXHJcblRleHQiCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodHRwbGliLkJhZFN0YXR1c0xpbmUsIHJlc3AuYmVnaW4pCiAKLSAgICBmb3IgaHAgaW4gKCJ3d3cucHl0aG9uLm9yZzphYmMiLCAid3d3LnB5dGhvbi5vcmc6Iik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGggPSBodHRwbGliLkhUVFAoaHApCi0gICAgICAgIGV4Y2VwdCBodHRwbGliLkludmFsaWRVUkw6Ci0gICAgICAgICAgICBwcmludCAiSW52YWxpZFVSTCByYWlzZWQgYXMgZXhwZWN0ZWQiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCAiRXhwZWN0IEludmFsaWRVUkwiCisgICAgZGVmIHRlc3RfaG9zdF9wb3J0KHNlbGYpOgorICAgICAgICAjIENoZWNrIGludmFsaWQgaG9zdF9wb3J0CiAKLSAgICBmb3IgaHAsaCxwIGluICgoIltmZTgwOjoyMDc6ZTlmZjpmZTliXTo4MDAwIiwgImZlODA6OjIwNzplOWZmOmZlOWIiLCA4MDAwKSwKLSAgICAgICAgICAgICAgICAgICAoInd3dy5weXRob24ub3JnOjgwIiwgInd3dy5weXRob24ub3JnIiwgODApLAotICAgICAgICAgICAgICAgICAgICgid3d3LnB5dGhvbi5vcmciLCAid3d3LnB5dGhvbi5vcmciLCA4MCksCi0gICAgICAgICAgICAgICAgICAgKCJbZmU4MDo6MjA3OmU5ZmY6ZmU5Yl0iLCAiZmU4MDo6MjA3OmU5ZmY6ZmU5YiIsIDgwKSk6Ci0gICAgICAgIHRyeToKKyAgICAgICAgZm9yIGhwIGluICgid3d3LnB5dGhvbi5vcmc6YWJjIiwgInd3dy5weXRob24ub3JnOiIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHR0cGxpYi5JbnZhbGlkVVJMLCBodHRwbGliLkhUVFAsIGhwKQorCisgICAgICAgIGZvciBocCwgaCwgcCBpbiAoKCJbZmU4MDo6MjA3OmU5ZmY6ZmU5Yl06ODAwMCIsICJmZTgwOjoyMDc6ZTlmZjpmZTliIiwgODAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3d3cucHl0aG9uLm9yZzo4MCIsICJ3d3cucHl0aG9uLm9yZyIsIDgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoInd3dy5weXRob24ub3JnIiwgInd3dy5weXRob24ub3JnIiwgODApLAorICAgICAgICAgICAgICAgICAgICAgICAgICgiW2ZlODA6OjIwNzplOWZmOmZlOWJdIiwgImZlODA6OjIwNzplOWZmOmZlOWIiLCA4MCkpOgogICAgICAgICAgICAgaHR0cCA9IGh0dHBsaWIuSFRUUChocCkKLSAgICAgICAgZXhjZXB0IGh0dHBsaWIuSW52YWxpZFVSTDoKLSAgICAgICAgICAgIHByaW50ICJJbnZhbGlkVVJMIHJhaXNlZCBlcnJvbmVvdXNseSIKLSAgICAgICAgYyA9IGh0dHAuX2Nvbm4KLSAgICAgICAgaWYgaCAhPSBjLmhvc3Q6IHJhaXNlIEFzc2VydGlvbkVycm9yLCAoIkhvc3QgaW5jb3JyZWN0bHkgcGFyc2VkIiwgaCwgYy5ob3N0KQotICAgICAgICBpZiBwICE9IGMucG9ydDogcmFpc2UgQXNzZXJ0aW9uRXJyb3IsICgiUG9ydCBpbmNvcnJlY3RseSBwYXJzZWQiLCBwLCBjLmhvc3QpCisgICAgICAgICAgICBjID0gaHR0cC5fY29ubgorICAgICAgICAgICAgaWYgaCAhPSBjLmhvc3Q6IHNlbGYuZmFpbCgiSG9zdCBpbmNvcnJlY3RseSBwYXJzZWQ6ICVzICE9ICVzIiAlIChoLCBjLmhvc3QpKQorICAgICAgICAgICAgaWYgcCAhPSBjLnBvcnQ6IHNlbGYuZmFpbCgiUG9ydCBpbmNvcnJlY3RseSBwYXJzZWQ6ICVzICE9ICVzIiAlIChwLCBjLmhvc3QpKQogCi0gICAgIyB0ZXN0IHJlc3BvbnNlIHdpdGggbXVsdGlwbGUgbWVzc2FnZSBoZWFkZXJzIHdpdGggdGhlIHNhbWUgZmllbGQgbmFtZS4KLSAgICB0ZXh0ID0gKCdIVFRQLzEuMSAyMDAgT0tcclxuJwotICAgICAgICAgICAgJ1NldC1Db29raWU6IEN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIlxyXG4nCi0gICAgICAgICAgICAnU2V0LUNvb2tpZTogUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgVmVyc2lvbj0iMSI7JwotICAgICAgICAgICAgJyBQYXRoPSIvYWNtZSJcclxuJwotICAgICAgICAgICAgJ1xyXG4nCi0gICAgICAgICAgICAnTm8gYm9keVxyXG4nKQotICAgIGhkciA9ICgnQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiJwotICAgICAgICAgICAnLCAnCi0gICAgICAgICAgICdQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiJykKLSAgICBzID0gRmFrZVNvY2tldCh0ZXh0KQotICAgIHIgPSBodHRwbGliLkhUVFBSZXNwb25zZShzLCAxKQotICAgIHIuYmVnaW4oKQotICAgIGNvb2tpZXMgPSByLmdldGhlYWRlcigiU2V0LUNvb2tpZSIpCi0gICAgaWYgY29va2llcyAhPSBoZHI6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yLCAibXVsdGlwbGUgaGVhZGVycyBub3QgY29tYmluZWQgcHJvcGVybHkiCisgICAgZGVmIHRlc3RfcmVzcG9uc2VfaGVhZGVycyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHJlc3BvbnNlIHdpdGggbXVsdGlwbGUgbWVzc2FnZSBoZWFkZXJzIHdpdGggdGhlIHNhbWUgZmllbGQgbmFtZS4KKyAgICAgICAgdGV4dCA9ICgnSFRUUC8xLjEgMjAwIE9LXHJcbicKKyAgICAgICAgICAgICAgICAnU2V0LUNvb2tpZTogQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiXHJcbicKKyAgICAgICAgICAgICAgICAnU2V0LUNvb2tpZTogUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgVmVyc2lvbj0iMSI7JworICAgICAgICAgICAgICAgICcgUGF0aD0iL2FjbWUiXHJcbicKKyAgICAgICAgICAgICAgICAnXHJcbicKKyAgICAgICAgICAgICAgICAnTm8gYm9keVxyXG4nKQorICAgICAgICBoZHIgPSAoJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicKKyAgICAgICAgICAgICAgICcsICcKKyAgICAgICAgICAgICAgICdQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiJykKKyAgICAgICAgcyA9IEZha2VTb2NrZXQodGV4dCkKKyAgICAgICAgciA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHMpCisgICAgICAgIHIuYmVnaW4oKQorICAgICAgICBjb29raWVzID0gci5nZXRoZWFkZXIoIlNldC1Db29raWUiKQorICAgICAgICBpZiBjb29raWVzICE9IGhkcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibXVsdGlwbGUgaGVhZGVycyBub3QgY29tYmluZWQgcHJvcGVybHkiKQogCi0gICAgIyBUZXN0IHRoYXQgdGhlIGxpYnJhcnkgZG9lc24ndCBhdHRlbXB0IHRvIHJlYWQgYW55IGRhdGEKLSAgICAjIGZyb20gYSBIRUFEIHJlcXVlc3QuICAoVGlja2xlcyBTRiBidWcgIzYyMjA0Mi4pCi0gICAgc29jayA9IEZha2VTb2NrZXQoCi0gICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJwotICAgICAgICAnQ29udGVudC1MZW5ndGg6IDE0NDMyXHJcbicKLSAgICAgICAgJ1xyXG4nLAotICAgICAgICBOb0VPRlN0cmluZ0lPKQotICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrLCAxLCBtZXRob2Q9IkhFQUQiKQotICAgIHJlc3AuYmVnaW4oKQotICAgIGlmIHJlc3AucmVhZCgpICE9ICIiOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvciwgIkRpZCBub3QgZXhwZWN0IHJlc3BvbnNlIGZyb20gSEVBRCByZXF1ZXN0IgotICAgIHJlc3AuY2xvc2UoKQorICAgIGRlZiB0ZXN0X3JlYWRfaGVhZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGxpYnJhcnkgZG9lc24ndCBhdHRlbXB0IHRvIHJlYWQgYW55IGRhdGEKKyAgICAgICAgIyBmcm9tIGEgSEVBRCByZXF1ZXN0LiAgKFRpY2tsZXMgU0YgYnVnICM2MjIwNDIuKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldCgKKyAgICAgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiAxNDQzMlxyXG4nCisgICAgICAgICAgICAnXHJcbicsCisgICAgICAgICAgICBOb0VPRlN0cmluZ0lPKQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJIRUFEIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIGlmIHJlc3AucmVhZCgpICE9ICIiOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IGV4cGVjdCByZXNwb25zZSBmcm9tIEhFQUQgcmVxdWVzdCIpCisgICAgICAgIHJlc3AuY2xvc2UoKQogCisgICAgZGVmIHRlc3Rfc2VuZF9maWxlKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdHRVQgL2ZvbyBIVFRQLzEuMVxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG4nIFwKKyAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nOiBpZGVudGl0eVxyXG5Db250ZW50LUxlbmd0aDonCisKKyAgICAgICAgYm9keSA9IG9wZW4oX19maWxlX18sICdyYicpCisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL2ZvbycsIGJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmRhdGEuc3RhcnRzd2l0aChleHBlY3RlZCkpCiAKIGNsYXNzIE9mZmxpbmVUZXN0KFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZXNwb25zZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGh0dHBsaWIucmVzcG9uc2VzW2h0dHBsaWIuTk9UX0ZPVU5EXSwgIk5vdCBGb3VuZCIpCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICB0ZXN0cyA9IFtIZWFkZXJUZXN0cyxPZmZsaW5lVGVzdF0KLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhlYWRlclRlc3RzLCBPZmZsaW5lVGVzdCwgQmFzaWNUZXN0KQogCi10ZXN0KCkKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXAucHkKaW5kZXggODkzYmEyNC4uNjJiMTRlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXAucHkKQEAgLTEsNDMgKzEsNDcgQEAKIGltcG9ydCBpbXAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RGYWlsZWQsIFRlc3RTa2lwcGVkCi10cnk6Ci0gICAgaW1wb3J0IHRocmVhZAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJ0ZXN0IG9ubHkgdmFsaWQgd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBhdmFpbGFibGUiKQoraW1wb3J0IHRocmVhZAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCi1kZWYgdmVyaWZ5X2xvY2tfc3RhdGUoZXhwZWN0ZWQpOgotICAgIGlmIGltcC5sb2NrX2hlbGQoKSAhPSBleHBlY3RlZDoKLSAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgiZXhwZWN0ZWQgaW1wLmxvY2tfaGVsZCgpIHRvIGJlICVyIiAlIGV4cGVjdGVkKQogCi1kZWYgdGVzdExvY2soKToKLSAgICBMT09QUyA9IDUwCitjbGFzcyBMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyBUaGUgaW1wb3J0IGxvY2sgbWF5IGFscmVhZHkgYmUgaGVsZCwgZS5nLiBpZiB0aGUgdGVzdCBzdWl0ZSBpcyBydW4KLSAgICAjIHZpYSAiaW1wb3J0IHRlc3QuYXV0b3Rlc3QiLgotICAgIGxvY2tfaGVsZF9hdF9zdGFydCA9IGltcC5sb2NrX2hlbGQoKQotICAgIHZlcmlmeV9sb2NrX3N0YXRlKGxvY2tfaGVsZF9hdF9zdGFydCkKKyAgICAiIiJWZXJ5IGJhc2ljIHRlc3Qgb2YgaW1wb3J0IGxvY2sgZnVuY3Rpb25zLiIiIgogCi0gICAgZm9yIGkgaW4gcmFuZ2UoTE9PUFMpOgotICAgICAgICBpbXAuYWNxdWlyZV9sb2NrKCkKLSAgICAgICAgdmVyaWZ5X2xvY2tfc3RhdGUoVHJ1ZSkKKyAgICBkZWYgdmVyaWZ5X2xvY2tfc3RhdGUoc2VsZiwgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChpbXAubG9ja19oZWxkKCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgaW1wLmxvY2tfaGVsZCgpIHRvIGJlICVyIiAlIGV4cGVjdGVkKQorICAgIGRlZiB0ZXN0TG9jayhzZWxmKToKKyAgICAgICAgTE9PUFMgPSA1MAogCi0gICAgZm9yIGkgaW4gcmFuZ2UoTE9PUFMpOgotICAgICAgICBpbXAucmVsZWFzZV9sb2NrKCkKKyAgICAgICAgIyBUaGUgaW1wb3J0IGxvY2sgbWF5IGFscmVhZHkgYmUgaGVsZCwgZS5nLiBpZiB0aGUgdGVzdCBzdWl0ZSBpcyBydW4KKyAgICAgICAgIyB2aWEgImltcG9ydCB0ZXN0LmF1dG90ZXN0Ii4KKyAgICAgICAgbG9ja19oZWxkX2F0X3N0YXJ0ID0gaW1wLmxvY2tfaGVsZCgpCisgICAgICAgIHNlbGYudmVyaWZ5X2xvY2tfc3RhdGUobG9ja19oZWxkX2F0X3N0YXJ0KQogCi0gICAgIyBUaGUgb3JpZ2luYWwgc3RhdGUgc2hvdWxkIGJlIHJlc3RvcmVkIG5vdy4KLSAgICB2ZXJpZnlfbG9ja19zdGF0ZShsb2NrX2hlbGRfYXRfc3RhcnQpCisgICAgICAgIGZvciBpIGluIHJhbmdlKExPT1BTKToKKyAgICAgICAgICAgIGltcC5hY3F1aXJlX2xvY2soKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfbG9ja19zdGF0ZShUcnVlKQogCi0gICAgaWYgbm90IGxvY2tfaGVsZF9hdF9zdGFydDoKLSAgICAgICAgdHJ5OgorICAgICAgICBmb3IgaSBpbiByYW5nZShMT09QUyk6CiAgICAgICAgICAgICBpbXAucmVsZWFzZV9sb2NrKCkKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoInJlbGVhc2VfbG9jaygpIHdpdGhvdXQgbG9jayBzaG91bGQgcmFpc2UgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUnVudGltZUVycm9yIikKKworICAgICAgICAjIFRoZSBvcmlnaW5hbCBzdGF0ZSBzaG91bGQgYmUgcmVzdG9yZWQgbm93LgorICAgICAgICBzZWxmLnZlcmlmeV9sb2NrX3N0YXRlKGxvY2tfaGVsZF9hdF9zdGFydCkKKworICAgICAgICBpZiBub3QgbG9ja19oZWxkX2F0X3N0YXJ0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcC5yZWxlYXNlX2xvY2soKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVsZWFzZV9sb2NrKCkgd2l0aG91dCBsb2NrIHNob3VsZCByYWlzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1bnRpbWVFcnJvciIpCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0TG9jaygpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgICAgICBMb2NrVGVzdHMsCisgICAgICAgICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKaW5kZXggYjY0YzIzYi4uZTM3Mzc4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKQEAgLTEsMjEgKzEsMTEgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgVGVzdEZhaWxlZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKIAoraW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIGltcG9ydCByYW5kb20KIGltcG9ydCBzeXMKIGltcG9ydCBweV9jb21waWxlCiAKLSMgQnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoYXQgaW1wb3J0IGlzIGNhc2Utc2Vuc2l0aXZlOiAgaWYgd2UgZ290IHRoaXMKLSMgZmFyLCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgInJhbmRvbSIgZXhpc3RzLgotdHJ5OgotICAgIGltcG9ydCBSQW5Eb00KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIHJhaXNlIFRlc3RGYWlsZWQoImltcG9ydCBvZiBSQW5Eb00gc2hvdWxkIGhhdmUgZmFpbGVkIChjYXNlIG1pc21hdGNoKSIpCi0KLSMgQW5vdGhlciBicmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhlIGFjY3VyYWN5IG9mIG1hbmlmZXN0IGZsb2F0IGNvbnN0YW50cy4KLWZyb20gdGVzdCBpbXBvcnQgZG91YmxlX2NvbnN0ICAjIGRvbid0IGJsaW5rIC0tIHRoYXQgKndhcyogdGhlIHRlc3QKIAogZGVmIHJlbW92ZV9maWxlcyhuYW1lKToKICAgICBmb3IgZiBpbiAobmFtZSArIG9zLmV4dHNlcCArICJweSIsCkBAIC0yNiwxOTkgKzE2LDIwNiBAQAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmKToKICAgICAgICAgICAgIG9zLnJlbW92ZShmKQogCi1kZWYgdGVzdF93aXRoX2V4dGVuc2lvbihleHQpOiAjIGV4dCBub3JtYWxseSAiLnB5IjsgcGVyaGFwcyAiLnB5dyIKLSAgICBzb3VyY2UgPSBURVNURk4gKyBleHQKLSAgICBweW8gPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHlvIgotICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6Ci0gICAgICAgIHB5YyA9IFRFU1RGTiArICIkcHkuY2xhc3MiCi0gICAgZWxzZToKLSAgICAgICAgcHljID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5YyIKIAotICAgIGYgPSBvcGVuKHNvdXJjZSwgInciKQotICAgIHByaW50ID4+IGYsICIjIFRoaXMgdGVzdHMgUHl0aG9uJ3MgYWJpbGl0eSB0byBpbXBvcnQgYSIsIGV4dCwgImZpbGUuIgotICAgIGEgPSByYW5kb20ucmFuZHJhbmdlKDEwMDApCi0gICAgYiA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKLSAgICBwcmludCA+PiBmLCAiYSA9IiwgYQotICAgIHByaW50ID4+IGYsICJiID0iLCBiCi0gICAgZi5jbG9zZSgpCitjbGFzcyBJbXBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHRyeToKKyAgICBkZWYgdGVzdENhc2VTZW5zaXRpdml0eShzZWxmKToKKyAgICAgICAgIyBCcmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhhdCBpbXBvcnQgaXMgY2FzZS1zZW5zaXRpdmU6ICBpZiB3ZSBnb3QgdGhpcworICAgICAgICAjIGZhciwgd2Uga25vdyBmb3Igc3VyZSB0aGF0ICJyYW5kb20iIGV4aXN0cy4KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZXJyOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW1wb3J0IGZyb20gJXMgZmFpbGVkOiAlcyIgJSAoZXh0LCBlcnIpKQotCi0gICAgICAgIGlmIG1vZC5hICE9IGEgb3IgbW9kLmIgIT0gYjoKLSAgICAgICAgICAgIHByaW50IGEsICIhPSIsIG1vZC5hCi0gICAgICAgICAgICBwcmludCBiLCAiIT0iLCBtb2QuYgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibW9kdWxlIGxvYWRlZCAoJXMpIGJ1dCBjb250ZW50cyBpbnZhbGlkIiAlIG1vZCkKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy51bmxpbmsoc291cmNlKQotCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZWxvYWQobW9kKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImltcG9ydCBmcm9tIC5weWMvLnB5byBmYWlsZWQ6ICVzIiAlIGVycikKLSAgICBmaW5hbGx5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsocHljKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVubGluayhweW8pCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZGVsIHN5cy5tb2R1bGVzW1RFU1RGTl0KLQotc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKLXRyeToKLSAgICB0ZXN0X3dpdGhfZXh0ZW5zaW9uKG9zLmV4dHNlcCArICJweSIpCi0gICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgotICAgICAgICBmb3IgZXh0IGluICIuUFkiLCAiLlB5IiwgIi5wWSIsICIucHl3IiwgIi5QWVciLCAiLnBZdyI6Ci0gICAgICAgICAgICB0ZXN0X3dpdGhfZXh0ZW5zaW9uKGV4dCkKLWZpbmFsbHk6Ci0gICAgZGVsIHN5cy5wYXRoWzBdCi0KLSMgVmVyaWZ5IHRoYXQgdGhlIGltcCBtb2R1bGUgY2FuIGNvcnJlY3RseSBsb2FkIGFuZCBmaW5kIC5weSBmaWxlcwotaW1wb3J0IGltcAoteCA9IGltcC5maW5kX21vZHVsZSgib3MiKQotb3MgPSBpbXAubG9hZF9tb2R1bGUoIm9zIiwgKngpCi0KLWRlZiB0ZXN0X21vZHVsZV93aXRoX2xhcmdlX3N0YWNrKG1vZHVsZSk6Ci0gICAgIyBjcmVhdGUgbW9kdWxlIHcvbGlzdCBvZiA2NTAwMCBlbGVtZW50cyB0byB0ZXN0IGJ1ZyAjNTYxODU4Ci0gICAgZmlsZW5hbWUgPSBtb2R1bGUgKyBvcy5leHRzZXAgKyAncHknCi0KLSAgICAjIGNyZWF0ZSBhIGZpbGUgd2l0aCBhIGxpc3Qgb2YgNjUwMDAgZWxlbWVudHMKLSAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3crJykKLSAgICBmLndyaXRlKCdkID0gW1xuJykKLSAgICBmb3IgaSBpbiByYW5nZSg2NTAwMCk6Ci0gICAgICAgIGYud3JpdGUoJyIiLFxuJykKLSAgICBmLndyaXRlKCddJykKLSAgICBmLmNsb3NlKCkKLQotICAgICMgY29tcGlsZSAmIHJlbW92ZSAucHkgZmlsZSwgd2Ugb25seSBuZWVkIC5weWMgKG9yIC5weW8pCi0gICAgZiA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZW5hbWUpCi0gICAgZi5jbG9zZSgpCi0gICAgb3MudW5saW5rKGZpbGVuYW1lKQotCi0gICAgIyBuZWVkIHRvIGJlIGFibGUgdG8gbG9hZCBmcm9tIGN1cnJlbnQgZGlyCi0gICAgc3lzLnBhdGguYXBwZW5kKCcnKQotCi0gICAgIyB0aGlzIHVzZWQgdG8gY3Jhc2gKLSAgICBleGVjKCdpbXBvcnQgJyArIG1vZHVsZSkKLQotICAgICMgY2xlYW51cAotICAgIGRlbCBzeXMucGF0aFstMV0KLSAgICBmb3IgZXh0IGluICdweWMnLCAncHlvJzoKLSAgICAgICAgZm5hbWUgPSBtb2R1bGUgKyBvcy5leHRzZXAgKyBleHQKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZm5hbWUpOgotICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQotCi10ZXN0X21vZHVsZV93aXRoX2xhcmdlX3N0YWNrKCdsb25nbGlzdCcpCi0KLWRlZiB0ZXN0X2ZhaWxpbmdfaW1wb3J0X3N0aWNrcygpOgotICAgIHNvdXJjZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKLSAgICBmID0gb3Blbihzb3VyY2UsICJ3IikKLSAgICBwcmludCA+PiBmLCAiYSA9IDEvMCIKLSAgICBmLmNsb3NlKCkKLQotICAgICMgTmV3IGluIDIuNCwgd2Ugc2hvdWxkbid0IGJlIGFibGUgdG8gaW1wb3J0IHRoYXQgbm8gbWF0dGVyIGhvdyBvZnRlbgotICAgICMgd2UgdHJ5LgotICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCi0gICAgdHJ5OgotICAgICAgICBmb3IgaSBpbiAxLCAyLCAzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1vZCA9IF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgiZGFtYWdlZCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMiLCBpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJ3YXMgYWJsZSB0byBpbXBvcnQgYSBkYW1hZ2VkIG1vZHVsZSIsIGkpCi0gICAgZmluYWxseToKLSAgICAgICAgc3lzLnBhdGgucG9wKDApCi0gICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCi0KLXRlc3RfZmFpbGluZ19pbXBvcnRfc3RpY2tzKCkKLQotZGVmIHRlc3RfZmFpbGluZ19yZWxvYWQoKToKLSAgICAjIEEgZmFpbGluZyByZWxvYWQgc2hvdWxkIGxlYXZlIHRoZSBtb2R1bGUgb2JqZWN0IGluIHN5cy5tb2R1bGVzLgotICAgIHNvdXJjZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKLSAgICBmID0gb3Blbihzb3VyY2UsICJ3IikKLSAgICBwcmludCA+PiBmLCAiYSA9IDEiCi0gICAgcHJpbnQgPj4gZiwgImIgPSAyIgotICAgIGYuY2xvc2UoKQotCi0gICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKLSAgICB0cnk6Ci0gICAgICAgIG1vZCA9IF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICBpZiBURVNURk4gbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgiZXhwZWN0ZWQgbW9kdWxlIGluIHN5cy5tb2R1bGVzIikKLSAgICAgICAgaWYgbW9kLmEgIT0gMSBvciBtb2QuYiAhPSAyOgotICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKLQotICAgICAgICAjIE9uIFdpblhQLCBqdXN0IHJlcGxhY2luZyB0aGUgLnB5IGZpbGUgd2Fzbid0IGVub3VnaCB0bwotICAgICAgICAjIGNvbnZpbmNlIHJlbG9hZCgpIHRvIHJlcGFyc2UgaXQuICBNYXliZSB0aGUgdGltZXN0YW1wIGRpZG4ndAotICAgICAgICAjIG1vdmUgZW5vdWdoLiAgV2UgZm9yY2UgaXQgdG8gZ2V0IHJlcGFyc2VkIGJ5IHJlbW92aW5nIHRoZQotICAgICAgICAjIGNvbXBpbGVkIGZpbGUgdG9vLgotICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQotCi0gICAgICAgICMgTm93IGRhbWFnZSB0aGUgbW9kdWxlLgotICAgICAgICBmID0gb3Blbihzb3VyY2UsICJ3IikKLSAgICAgICAgcHJpbnQgPj4gZiwgImEgPSAxMCIKLSAgICAgICAgcHJpbnQgPj4gZiwgImIgPSAyMC8vMCIKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlbG9hZChtb2QpCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIGltcG9ydCBSQW5Eb00KKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgid2FzIGFibGUgdG8gcmVsb2FkIGEgZGFtYWdlZCBtb2R1bGUiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgb2YgUkFuRG9NIHNob3VsZCBoYXZlIGZhaWxlZCAoY2FzZSBtaXNtYXRjaCkiKQogCi0gICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgotICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5nZXQoVEVTVEZOKQotICAgICAgICBpZiBtb2QgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoImV4cGVjdGVkIG1vZHVsZSB0byBzdGlsbCBiZSBpbiBzeXMubW9kdWxlcyIpCi0gICAgICAgICMgV2Ugc2hvdWxkIGhhdmUgcmVwbGFjZWQgYSB3LyAxMCwgYnV0IHRoZSBvbGQgYiB2YWx1ZSBzaG91bGQKLSAgICAgICAgIyBzdGljay4KLSAgICAgICAgaWYgbW9kLmEgIT0gMTAgb3IgbW9kLmIgIT0gMjoKLSAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCisgICAgZGVmIHRlc3REb3VibGVDb25zdChzZWxmKToKKyAgICAgICAgIyBBbm90aGVyIGJyaWVmIGRpZ3Jlc3Npb24gdG8gdGVzdCB0aGUgYWNjdXJhY3kgb2YgbWFuaWZlc3QgZmxvYXQgY29uc3RhbnRzLgorICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGRvdWJsZV9jb25zdCAgIyBkb24ndCBibGluayAtLSB0aGF0ICp3YXMqIHRoZSB0ZXN0CiAKLSAgICBmaW5hbGx5OgotICAgICAgICBzeXMucGF0aC5wb3AoMCkKLSAgICAgICAgcmVtb3ZlX2ZpbGVzKFRFU1RGTikKLSAgICAgICAgaWYgVEVTVEZOIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW1RFU1RGTl0KKyAgICBkZWYgdGVzdEltcG9ydChzZWxmKToKKyAgICAgICAgZGVmIHRlc3Rfd2l0aF9leHRlbnNpb24oZXh0KToKKyAgICAgICAgICAgICMgZXh0IG5vcm1hbGx5ICIucHkiOyBwZXJoYXBzICIucHl3IgorICAgICAgICAgICAgc291cmNlID0gVEVTVEZOICsgZXh0CisgICAgICAgICAgICBweW8gPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHlvIgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKKyAgICAgICAgICAgICAgICBweWMgPSBURVNURk4gKyAiJHB5LmNsYXNzIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBweWMgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHljIgogCi10ZXN0X2ZhaWxpbmdfcmVsb2FkKCkKKyAgICAgICAgICAgIGYgPSBvcGVuKHNvdXJjZSwgInciKQorICAgICAgICAgICAgcHJpbnQgPj4gZiwgIiMgVGhpcyB0ZXN0cyBQeXRob24ncyBhYmlsaXR5IHRvIGltcG9ydCBhIiwgZXh0LCAiZmlsZS4iCisgICAgICAgICAgICBhID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwKQorICAgICAgICAgICAgYiA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKKyAgICAgICAgICAgIHByaW50ID4+IGYsICJhID0iLCBhCisgICAgICAgICAgICBwcmludCA+PiBmLCAiYiA9IiwgYgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKLWRlZiB0ZXN0X2ltcG9ydF9uYW1lX2JpbmRpbmcoKToKLSAgICAjIGltcG9ydCB4LnkueiBiaW5kcyB4IGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZQotICAgIGltcG9ydCB0ZXN0IGFzIHgKLSAgICBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKLSAgICBhc3NlcnQgeCBpcyB0ZXN0LCB4Ll9fbmFtZV9fCi0gICAgYXNzZXJ0IGhhc2F0dHIodGVzdC50ZXN0X3N1cHBvcnQsICJfX2ZpbGVfXyIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgZnJvbSAlcyBmYWlsZWQ6ICVzIiAlIChleHQsIGVycikpCiAKLSAgICAjIGltcG9ydCB4LnkueiBhcyB3IGJpbmRzIHogYXMgdwotICAgIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCBhcyB5Ci0gICAgYXNzZXJ0IHkgaXMgdGVzdC50ZXN0X3N1cHBvcnQsIHkuX19uYW1lX18KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtb2QuYSwgYSwKKyAgICAgICAgICAgICAgICAgICAgIm1vZHVsZSBsb2FkZWQgKCVzKSBidXQgY29udGVudHMgaW52YWxpZCIgJSBtb2QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobW9kLmIsIGIsCisgICAgICAgICAgICAgICAgICAgICJtb2R1bGUgbG9hZGVkICglcykgYnV0IGNvbnRlbnRzIGludmFsaWQiICUgbW9kKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoc291cmNlKQogCi10ZXN0X2ltcG9ydF9uYW1lX2JpbmRpbmcoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVsb2FkKG1vZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgZnJvbSAucHljLy5weW8gZmFpbGVkOiAlcyIgJSBlcnIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHB5YykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHB5bykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tURVNURk5dCiAKLWRlZiB0ZXN0X2ltcG9ydF9pbml0bGVzc19kaXJlY3Rvcnlfd2FybmluZygpOgotICAgIGltcG9ydCB3YXJuaW5ncwotICAgIG9sZGZpbHRlcnMgPSB3YXJuaW5ncy5maWx0ZXJzWzpdCi0gICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIEltcG9ydFdhcm5pbmcpOwotICAgIHRyeToKLSAgICAgICAgIyBKdXN0IGEgcmFuZG9tIG5vbi1wYWNrYWdlIGRpcmVjdG9yeSB3ZSBhbHdheXMgZXhwZWN0IHRvIGJlCi0gICAgICAgICMgc29tZXdoZXJlIGluIHN5cy5wYXRoLi4uCi0gICAgICAgIF9faW1wb3J0X18oInNpdGUtcGFja2FnZXMiKQotICAgIGV4Y2VwdCBJbXBvcnRXYXJuaW5nOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IKLSAgICBmaW5hbGx5OgotICAgICAgICB3YXJuaW5ncy5maWx0ZXJzID0gb2xkZmlsdGVycworICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X3dpdGhfZXh0ZW5zaW9uKG9zLmV4dHNlcCArICJweSIpCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAgICAgICAgICAgZm9yIGV4dCBpbiAiLlBZIiwgIi5QeSIsICIucFkiLCAiLnB5dyIsICIuUFlXIiwgIi5wWXciOgorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dpdGhfZXh0ZW5zaW9uKGV4dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQogCi10ZXN0X2ltcG9ydF9pbml0bGVzc19kaXJlY3Rvcnlfd2FybmluZygpCisgICAgZGVmIHRlc3RJbXBNb2R1bGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIGltcCBtb2R1bGUgY2FuIGNvcnJlY3RseSBsb2FkIGFuZCBmaW5kIC5weSBmaWxlcworICAgICAgICBpbXBvcnQgaW1wCisgICAgICAgIHggPSBpbXAuZmluZF9tb2R1bGUoIm9zIikKKyAgICAgICAgb3MgPSBpbXAubG9hZF9tb2R1bGUoIm9zIiwgKngpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aF9sYXJnZV9zdGFjayhzZWxmLCBtb2R1bGU9J2xvbmdsaXN0Jyk6CisgICAgICAgICMgY3JlYXRlIG1vZHVsZSB3L2xpc3Qgb2YgNjUwMDAgZWxlbWVudHMgdG8gdGVzdCBidWcgIzU2MTg1OAorICAgICAgICBmaWxlbmFtZSA9IG1vZHVsZSArIG9zLmV4dHNlcCArICdweScKKworICAgICAgICAjIGNyZWF0ZSBhIGZpbGUgd2l0aCBhIGxpc3Qgb2YgNjUwMDAgZWxlbWVudHMKKyAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3KycpCisgICAgICAgIGYud3JpdGUoJ2QgPSBbXG4nKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg2NTAwMCk6CisgICAgICAgICAgICBmLndyaXRlKCciIixcbicpCisgICAgICAgIGYud3JpdGUoJ10nKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIGNvbXBpbGUgJiByZW1vdmUgLnB5IGZpbGUsIHdlIG9ubHkgbmVlZCAucHljIChvciAucHlvKQorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3InKQorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZW5hbWUpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCisKKyAgICAgICAgIyBuZWVkIHRvIGJlIGFibGUgdG8gbG9hZCBmcm9tIGN1cnJlbnQgZGlyCisgICAgICAgIHN5cy5wYXRoLmFwcGVuZCgnJykKKworICAgICAgICAjIHRoaXMgdXNlZCB0byBjcmFzaAorICAgICAgICBleGVjKCdpbXBvcnQgJyArIG1vZHVsZSkKKworICAgICAgICAjIGNsZWFudXAKKyAgICAgICAgZGVsIHN5cy5wYXRoWy0xXQorICAgICAgICBmb3IgZXh0IGluICdweWMnLCAncHlvJzoKKyAgICAgICAgICAgIGZuYW1lID0gbW9kdWxlICsgb3MuZXh0c2VwICsgZXh0CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbmFtZSk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQorCisgICAgZGVmIHRlc3RfZmFpbGluZ19pbXBvcnRfc3RpY2tzKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHkiCisgICAgICAgIGYgPSBvcGVuKHNvdXJjZSwgInciKQorICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEvMCIKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgIyBOZXcgaW4gMi40LCB3ZSBzaG91bGRuJ3QgYmUgYWJsZSB0byBpbXBvcnQgdGhhdCBubyBtYXR0ZXIgaG93IG9mdGVuCisgICAgICAgICMgd2UgdHJ5LgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiAxLCAyLCAzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhURVNURk4pCisgICAgICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgICAgICAgICBpZiBURVNURk4gaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImRhbWFnZWQgbW9kdWxlIGluIHN5cy5tb2R1bGVzIG9uICVpLiB0cnkiICUgaSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIndhcyBhYmxlIHRvIGltcG9ydCBhIGRhbWFnZWQgbW9kdWxlIG9uICVpLiB0cnkiICUgaSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5wYXRoLnBvcCgwKQorICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2ZhaWxpbmdfcmVsb2FkKHNlbGYpOgorICAgICAgICAjIEEgZmFpbGluZyByZWxvYWQgc2hvdWxkIGxlYXZlIHRoZSBtb2R1bGUgb2JqZWN0IGluIHN5cy5tb2R1bGVzLgorICAgICAgICBzb3VyY2UgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHkiCisgICAgICAgIGYgPSBvcGVuKHNvdXJjZSwgInciKQorICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEiCisgICAgICAgIHByaW50ID4+IGYsICJiID0gMiIKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydF8oVEVTVEZOIGluIHN5cy5tb2R1bGVzLCAiZXhwZWN0ZWQgbW9kdWxlIGluIHN5cy5tb2R1bGVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5hLCAxLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5iLCAyLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKworICAgICAgICAgICAgIyBPbiBXaW5YUCwganVzdCByZXBsYWNpbmcgdGhlIC5weSBmaWxlIHdhc24ndCBlbm91Z2ggdG8KKyAgICAgICAgICAgICMgY29udmluY2UgcmVsb2FkKCkgdG8gcmVwYXJzZSBpdC4gIE1heWJlIHRoZSB0aW1lc3RhbXAgZGlkbid0CisgICAgICAgICAgICAjIG1vdmUgZW5vdWdoLiAgV2UgZm9yY2UgaXQgdG8gZ2V0IHJlcGFyc2VkIGJ5IHJlbW92aW5nIHRoZQorICAgICAgICAgICAgIyBjb21waWxlZCBmaWxlIHRvby4KKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCisKKyAgICAgICAgICAgICMgTm93IGRhbWFnZSB0aGUgbW9kdWxlLgorICAgICAgICAgICAgZiA9IG9wZW4oc291cmNlLCAidyIpCisgICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEwIgorICAgICAgICAgICAgcHJpbnQgPj4gZiwgImIgPSAyMC8vMCIKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcmVsb2FkLCBtb2QpCisKKyAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgorICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKG1vZCBpcyBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIHN0aWxsIGJlIGluIHN5cy5tb2R1bGVzIikKKworICAgICAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSByZXBsYWNlZCBhIHcvIDEwLCBidXQgdGhlIG9sZCBiIHZhbHVlIHNob3VsZAorICAgICAgICAgICAgIyBzdGljay4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5hLCAxMCwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtb2QuYiwgMiwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5wYXRoLnBvcCgwKQorICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzKFRFU1RGTikKKyAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbVEVTVEZOXQorCisgICAgZGVmIHRlc3RfaW1wb3J0X25hbWVfYmluZGluZyhzZWxmKToKKyAgICAgICAgIyBpbXBvcnQgeC55LnogYmluZHMgeCBpbiB0aGUgY3VycmVudCBuYW1lc3BhY2UKKyAgICAgICAgaW1wb3J0IHRlc3QgYXMgeAorICAgICAgICBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKKyAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgdGVzdCwgeC5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIodGVzdC50ZXN0X3N1cHBvcnQsICJfX2ZpbGVfXyIpKQorCisgICAgICAgICMgaW1wb3J0IHgueS56IGFzIHcgYmluZHMgeiBhcyB3CisgICAgICAgIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCBhcyB5CisgICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIHRlc3QudGVzdF9zdXBwb3J0LCB5Ll9fbmFtZV9fKQorCisgICAgZGVmIHRlc3RfaW1wb3J0X2luaXRsZXNzX2RpcmVjdG9yeV93YXJuaW5nKHNlbGYpOgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgb2xkZmlsdGVycyA9IHdhcm5pbmdzLmZpbHRlcnNbOl0KKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIEltcG9ydFdhcm5pbmcpOworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEp1c3QgYSByYW5kb20gbm9uLXBhY2thZ2UgZGlyZWN0b3J5IHdlIGFsd2F5cyBleHBlY3QgdG8gYmUKKyAgICAgICAgICAgICMgc29tZXdoZXJlIGluIHN5cy5wYXRoLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRXYXJuaW5nLCBfX2ltcG9ydF9fLCAic2l0ZS1wYWNrYWdlcyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJzID0gb2xkZmlsdGVycworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgcnVuX3VuaXR0ZXN0KEltcG9ydFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQppbmRleCBlNTk0NmU5Li4wNzFlNTIxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CkBAIC0xODAsNyArMTgwLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRjb21tZW50cyhtb2QuU3R1cGlkR2l0KSwgJyMgbGluZSAyMFxuJykKIAogICAgIGRlZiB0ZXN0X2dldG1vZHVsZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBhY3R1YWwgbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRtb2R1bGUobW9kKSwgbW9kKQorICAgICAgICAjIENoZWNrIGNsYXNzICh1c2VzIF9fbW9kdWxlX18gYXR0cmlidXRlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0bW9kdWxlKG1vZC5TdHVwaWRHaXQpLCBtb2QpCisgICAgICAgICMgQ2hlY2sgYSBtZXRob2QgKG5vIF9fbW9kdWxlX18gYXR0cmlidXRlLCBmYWxscyBiYWNrIHRvIGZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0bW9kdWxlKG1vZC5TdHVwaWRHaXQuYWJ1c2UpLCBtb2QpCisgICAgICAgICMgRG8gaXQgYWdhaW4gKGNoZWNrIHRoZSBjYWNoaW5nIGlzbid0IGJyb2tlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldG1vZHVsZShtb2QuU3R1cGlkR2l0LmFidXNlKSwgbW9kKQorICAgICAgICAjIENoZWNrIGEgYnVpbHRpbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0bW9kdWxlKHN0ciksIHN5cy5tb2R1bGVzWyJfX2J1aWx0aW5fXyJdKQorICAgICAgICAjIENoZWNrIGZpbGVuYW1lIG92ZXJyaWRlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRtb2R1bGUoTm9uZSwgbW9kZmlsZSksIG1vZCkKIAogICAgIGRlZiB0ZXN0X2dldHNvdXJjZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChnaXQuYWJ1c2UsIDI5LCAzOSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKaW5kZXggOGY4ZmM3My4uOGUxMTE4YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKQEAgLTYxLDYgKzYxLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KDMpJykKICAgICAgICAgYy5uZXh0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoNCknKQorICAgICAgICBjID0gY291bnQoLTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC05KScpCisgICAgICAgIGMubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0KCksIC04KQogCiAgICAgZGVmIHRlc3RfY3ljbGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgxMCwgY3ljbGUoJ2FiYycpKSwgbGlzdCgnYWJjYWJjYWJjYScpKQpAQCAtMzc1LDYgKzM3OSw3IEBACiAKICAgICAgICAgIyB0ZXN0IHZhbHVlcyBvZiBuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGVlLCAnYWJjJywgJ2ludmFsaWQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0ZWUsIFtdLCAtMSkKICAgICAgICAgZm9yIG4gaW4geHJhbmdlKDUpOgogICAgICAgICAgICAgcmVzdWx0ID0gdGVlKCdhYmMnLCBuKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIHR1cGxlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5IGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CmluZGV4IDkyZmU3YTEuLmUwYzc4MWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKQEAgLTI0NywxNyArMjQ3LDIzIEBACiAgICAgICAgICAgICAibG9uZygtc3lzLm1heGludC0xKSAhPSAtc3lzLm1heGludC0xIikKIAogICAgICAgICAjIGxvbmcgLT4gaW50IHNob3VsZCBub3QgZmFpbCBmb3IgaHVnZXBvc19hc2xvbmcgb3IgaHVnZW5lZ19hc2xvbmcKKyAgICAgICAgeCA9IGludChodWdlcG9zX2FzbG9uZykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoaHVnZXBvc19hc2xvbmcpLCBodWdlcG9zLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBodWdlcG9zLAogICAgICAgICAgICAgICAgICAgImNvbnZlcnRpbmcgc3lzLm1heGludCB0byBsb25nIGFuZCBiYWNrIHRvIGludCBmYWlscyIpCiAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZyhzeXMubWF4aW50KSkgb3ZlcmZsb3dlZCEiKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh4LCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgiaW50KGxvbmcoc3lzLm1heGludCkpIHNob3VsZCBoYXZlIHJldHVybmVkIGludCIpCisgICAgICAgIHggPSBpbnQoaHVnZW5lZ19hc2xvbmcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGh1Z2VuZWdfYXNsb25nKSwgaHVnZW5lZywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgaHVnZW5lZywKICAgICAgICAgICAgICAgICAgICJjb252ZXJ0aW5nIC1zeXMubWF4aW50LTEgdG8gbG9uZyBhbmQgYmFjayB0byBpbnQgZmFpbHMiKQogICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50KGxvbmcoLXN5cy5tYXhpbnQtMSkpIG92ZXJmbG93ZWQhIikKLQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh4LCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgiaW50KGxvbmcoLXN5cy5tYXhpbnQtMSkpIHNob3VsZCBoYXZlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGludCIpCiAgICAgICAgICMgYnV0IGxvbmcgLT4gaW50IHNob3VsZCBvdmVyZmxvdyBmb3IgaHVnZXBvcysxIGFuZCBodWdlbmVnLTEKICAgICAgICAgeCA9IGh1Z2Vwb3NfYXNsb25nICsgMQogICAgICAgICB0cnk6CkBAIC0yODIsNiArMjg4LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHkpIGlzIGxvbmcsCiAgICAgICAgICAgICAib3ZlcmZsb3dpbmcgaW50IGNvbnZlcnNpb24gbXVzdCByZXR1cm4gbG9uZyBub3QgbG9uZyBzdWJ0eXBlIikKIAorICAgICAgICAjIGxvbmcgLT4gUHlfc3NpemVfdCBjb252ZXJzaW9uCisgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGksIGoKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKVstNUw6N0xdLCAoLTUsIDcpKQorICAgICAgICAjIHVzZSB0aGUgY2xhbXBpbmcgZWZmZWN0IHRvIHRlc3QgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IGxvbmdzCisgICAgICAgICMgdGhhdCBmaXQgYSBQeV9zc2l6ZV90CisgICAgICAgIHNsaWNlbWluLCBzbGljZW1heCA9IFgoKVstMkwqKjEwMDoyTCoqMTAwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKVtzbGljZW1pbjpzbGljZW1heF0sIChzbGljZW1pbiwgc2xpY2VtYXgpKQorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRlc3RzIG9mIGF1dG8gaW50LT5sb25nIGNvbnZlcnNpb24KIAogICAgIGRlZiB0ZXN0X2F1dG9fb3ZlcmZsb3coc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkgYi9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKaW5kZXggMTgzNzMwNi4uZGVmNThjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQpAQCAtNjY2LDYgKzY2NiwxOSBAQAogICAgICAgICBzZWxmLl9ib3gubG9jaygpCiAgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQogCisgICAgZGVmIHRlc3RfZm9sZGVyIChzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBidWcgIzE1Njk3OTA6IHZlcmlmeSB0aGF0IGZvbGRlcnMgcmV0dXJuZWQgYnkgLmdldF9mb2xkZXIoKQorICAgICAgICAjIHVzZSB0aGUgc2FtZSBmYWN0b3J5IGZ1bmN0aW9uLgorICAgICAgICBkZWYgZHVtbXlfZmFjdG9yeSAocyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgsIGZhY3Rvcnk9ZHVtbXlfZmFjdG9yeSkKKyAgICAgICAgZm9sZGVyID0gYm94LmFkZF9mb2xkZXIoJ2ZvbGRlcjEnKQorICAgICAgICBzZWxmLmFzc2VydF8oZm9sZGVyLl9mYWN0b3J5IGlzIGR1bW15X2ZhY3RvcnkpCisgICAgICAgIAorICAgICAgICBmb2xkZXIxX2FsaWFzID0gYm94LmdldF9mb2xkZXIoJ2ZvbGRlcjEnKQorICAgICAgICBzZWxmLmFzc2VydF8oZm9sZGVyMV9hbGlhcy5fZmFjdG9yeSBpcyBkdW1teV9mYWN0b3J5KQorCisgICAgICAgIAogCiBjbGFzcyBfVGVzdE1ib3hNTURGKFRlc3RNYWlsYm94KToKIApAQCAtNzQwLDYgKzc1MywyMiBAQAogICAgICAgICBzZWxmLl9ib3gubG9jaygpCiAgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQogCisgICAgZGVmIHRlc3RfcmVsb2NrKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FzZSBmb3IgYnVnICMxNTc1NTA2OiB0aGUgbWFpbGJveCBjbGFzcyB3YXMgbG9ja2luZyB0aGUKKyAgICAgICAgIyB3cm9uZyBmaWxlIG9iamVjdCBpbiBpdHMgZmx1c2goKSBtZXRob2QuCisgICAgICAgIG1zZyA9ICJTdWJqZWN0OiBzdWJcblxuYm9keVxuIgorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChtc2cpCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKG1zZykKKyAgICAgICAgc2VsZi5fYm94LmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5fbG9ja2VkKQorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorCisKIAogY2xhc3MgVGVzdE1ib3goX1Rlc3RNYm94TU1ERik6CiAKQEAgLTc2Niw3ICs3OTUsMTEgQEAKIAogICAgIGRlZiB0ZXN0X2dldF9mb2xkZXIoc2VsZik6CiAgICAgICAgICMgT3BlbiBmb2xkZXJzCi0gICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdmb28uYmFyJykKKyAgICAgICAgZGVmIGR1bW15X2ZhY3RvcnkgKHMpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoLCBkdW1teV9mYWN0b3J5KQorICAgICAgICAKKyAgICAgICAgbmV3X2ZvbGRlciA9IHNlbGYuX2JveC5hZGRfZm9sZGVyKCdmb28uYmFyJykKICAgICAgICAgZm9sZGVyMCA9IHNlbGYuX2JveC5nZXRfZm9sZGVyKCdmb28uYmFyJykKICAgICAgICAgZm9sZGVyMC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKICAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICdmb28uYmFyJykpKQpAQCAtNzc0LDYgKzgwNywxMSBAQAogICAgICAgICBzZWxmLmFzc2VydF8oZm9sZGVyMS5nZXRfc3RyaW5nKGZvbGRlcjEua2V5cygpWzBdKSA9PSBcCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdiYXInKQogCisgICAgICAgICMgVGVzdCBmb3IgYnVnICMxNTY5NzkwOiB2ZXJpZnkgdGhhdCBmb2xkZXJzIHJldHVybmVkIGJ5IC5nZXRfZm9sZGVyKCkKKyAgICAgICAgIyB1c2UgdGhlIHNhbWUgZmFjdG9yeSBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRfKG5ld19mb2xkZXIuX2ZhY3RvcnkgaXMgc2VsZi5fYm94Ll9mYWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydF8oZm9sZGVyMC5fZmFjdG9yeSBpcyBzZWxmLl9ib3guX2ZhY3RvcnkpCisKICAgICBkZWYgdGVzdF9hZGRfYW5kX3JlbW92ZV9mb2xkZXJzKHNlbGYpOgogICAgICAgICAjIERlbGV0ZSBmb2xkZXJzCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdvbmUnKQpAQCAtODQyLDYgKzg4MCwyMSBAQAogICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSA9PQogICAgICAgICAgICAgICAgICAgICAgeydmb28nOlsxLCAyLCAzXSwgJ3Vuc2Vlbic6WzFdLCAnYmFyJzpbM10sICdyZXBsaWVkJzpbM119KQogCisgICAgICAgICMgVGVzdCBjYXNlIGZvciBwYWNraW5nIHdoaWxlIGhvbGRpbmcgdGhlIG1haWxib3ggbG9ja2VkLgorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cxKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChtc2cxKQorICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChtc2cxKQorICAgICAgICBrZXkzID0gc2VsZi5fYm94LmFkZChtc2cxKQorCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MCkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZShrZXkyKQorICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIHNlbGYuX2JveC5wYWNrKCkKKyAgICAgICAgc2VsZi5fYm94LnVubG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpID09CisgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6WzEsIDIsIDMsIDQsIDVdLAorICAgICAgICAgICAgICAgICAgICAgICd1bnNlZW4nOlsxXSwgJ2Jhcic6WzNdLCAncmVwbGllZCc6WzNdfSkKKyAgICAgICAgCiAgICAgZGVmIF9nZXRfbG9ja19wYXRoKHNlbGYpOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICcubWhfc2VxdWVuY2VzLmxvY2snKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21hdGgucHkgYi9MaWIvdGVzdC90ZXN0X21hdGgucHkKaW5kZXggYTA5MjI2NS4uYTQ1ZmMzNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWF0aC5weQpAQCAtMSwyMDggKzEsMjQxIEBACiAjIFB5dGhvbiB0ZXN0IHNldCAtLSBtYXRoIG1vZHVsZQogIyBYWFhYIFNob3VsZCBub3QgZG8gdGVzdHMgYXJvdW5kIHplcm8gb25seQogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0RmFpbGVkLCB2ZXJib3NlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHZlcmJvc2UKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG1hdGgKIAogc2Vwcz0nMWUtMDUnCiBlcHMgPSBldmFsKHNlcHMpCi1wcmludCAnbWF0aCBtb2R1bGUsIHRlc3Rpbmcgd2l0aCBlcHMnLCBzZXBzCi1pbXBvcnQgbWF0aAogCi1kZWYgdGVzdGl0KG5hbWUsIHZhbHVlLCBleHBlY3RlZCk6Ci0gICAgaWYgYWJzKHZhbHVlLWV4cGVjdGVkKSA+IGVwczoKLSAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgJyVzIHJldHVybmVkICVmLCBleHBlY3RlZCAlZiclXAotICAgICAgICAgICAgICAobmFtZSwgdmFsdWUsIGV4cGVjdGVkKQorY2xhc3MgTWF0aFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotcHJpbnQgJ2NvbnN0YW50cycKLXRlc3RpdCgncGknLCBtYXRoLnBpLCAzLjE0MTU5MjYpCi10ZXN0aXQoJ2UnLCBtYXRoLmUsIDIuNzE4MjgxOCkKKyAgICBkZWYgZnRlc3Qoc2VsZiwgbmFtZSwgdmFsdWUsIGV4cGVjdGVkKToKKyAgICAgICAgaWYgYWJzKHZhbHVlLWV4cGVjdGVkKSA+IGVwczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnJXMgcmV0dXJuZWQgJWYsIGV4cGVjdGVkICVmJyVcCisgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHZhbHVlLCBleHBlY3RlZCkpCiAKLXByaW50ICdhY29zJwotdGVzdGl0KCdhY29zKC0xKScsIG1hdGguYWNvcygtMSksIG1hdGgucGkpCi10ZXN0aXQoJ2Fjb3MoMCknLCBtYXRoLmFjb3MoMCksIG1hdGgucGkvMikKLXRlc3RpdCgnYWNvcygxKScsIG1hdGguYWNvcygxKSwgMCkKKyAgICBkZWYgdGVzdENvbnN0YW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5mdGVzdCgncGknLCBtYXRoLnBpLCAzLjE0MTU5MjYpCisgICAgICAgIHNlbGYuZnRlc3QoJ2UnLCBtYXRoLmUsIDIuNzE4MjgxOCkKIAotcHJpbnQgJ2FzaW4nCi10ZXN0aXQoJ2FzaW4oLTEpJywgbWF0aC5hc2luKC0xKSwgLW1hdGgucGkvMikKLXRlc3RpdCgnYXNpbigwKScsIG1hdGguYXNpbigwKSwgMCkKLXRlc3RpdCgnYXNpbigxKScsIG1hdGguYXNpbigxKSwgbWF0aC5waS8yKQorICAgIGRlZiB0ZXN0QWNvcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmFjb3MpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Fjb3MoLTEpJywgbWF0aC5hY29zKC0xKSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgnYWNvcygwKScsIG1hdGguYWNvcygwKSwgbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhY29zKDEpJywgbWF0aC5hY29zKDEpLCAwKQogCi1wcmludCAnYXRhbicKLXRlc3RpdCgnYXRhbigtMSknLCBtYXRoLmF0YW4oLTEpLCAtbWF0aC5waS80KQotdGVzdGl0KCdhdGFuKDApJywgbWF0aC5hdGFuKDApLCAwKQotdGVzdGl0KCdhdGFuKDEpJywgbWF0aC5hdGFuKDEpLCBtYXRoLnBpLzQpCisgICAgZGVmIHRlc3RBc2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXNpbikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXNpbigtMSknLCBtYXRoLmFzaW4oLTEpLCAtbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luKDApJywgbWF0aC5hc2luKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luKDEpJywgbWF0aC5hc2luKDEpLCBtYXRoLnBpLzIpCiAKLXByaW50ICdhdGFuMicKLXRlc3RpdCgnYXRhbjIoLTEsIDApJywgbWF0aC5hdGFuMigtMSwgMCksIC1tYXRoLnBpLzIpCi10ZXN0aXQoJ2F0YW4yKC0xLCAxKScsIG1hdGguYXRhbjIoLTEsIDEpLCAtbWF0aC5waS80KQotdGVzdGl0KCdhdGFuMigwLCAxKScsIG1hdGguYXRhbjIoMCwgMSksIDApCi10ZXN0aXQoJ2F0YW4yKDEsIDEpJywgbWF0aC5hdGFuMigxLCAxKSwgbWF0aC5waS80KQotdGVzdGl0KCdhdGFuMigxLCAwKScsIG1hdGguYXRhbjIoMSwgMCksIG1hdGgucGkvMikKKyAgICBkZWYgdGVzdEF0YW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hdGFuKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuKC0xKScsIG1hdGguYXRhbigtMSksIC1tYXRoLnBpLzQpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4oMCknLCBtYXRoLmF0YW4oMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4oMSknLCBtYXRoLmF0YW4oMSksIG1hdGgucGkvNCkKIAotcHJpbnQgJ2NlaWwnCi10ZXN0aXQoJ2NlaWwoMC41KScsIG1hdGguY2VpbCgwLjUpLCAxKQotdGVzdGl0KCdjZWlsKDEuMCknLCBtYXRoLmNlaWwoMS4wKSwgMSkKLXRlc3RpdCgnY2VpbCgxLjUpJywgbWF0aC5jZWlsKDEuNSksIDIpCi10ZXN0aXQoJ2NlaWwoLTAuNSknLCBtYXRoLmNlaWwoLTAuNSksIDApCi10ZXN0aXQoJ2NlaWwoLTEuMCknLCBtYXRoLmNlaWwoLTEuMCksIC0xKQotdGVzdGl0KCdjZWlsKC0xLjUpJywgbWF0aC5jZWlsKC0xLjUpLCAtMSkKKyAgICBkZWYgdGVzdEF0YW4yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXRhbjIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC0xLCAwKScsIG1hdGguYXRhbjIoLTEsIDApLCAtbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMSwgMSknLCBtYXRoLmF0YW4yKC0xLCAxKSwgLW1hdGgucGkvNCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoMCwgMSknLCBtYXRoLmF0YW4yKDAsIDEpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigxLCAxKScsIG1hdGguYXRhbjIoMSwgMSksIG1hdGgucGkvNCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoMSwgMCknLCBtYXRoLmF0YW4yKDEsIDApLCBtYXRoLnBpLzIpCiAKLXByaW50ICdjb3MnCi10ZXN0aXQoJ2NvcygtcGkvMiknLCBtYXRoLmNvcygtbWF0aC5waS8yKSwgMCkKLXRlc3RpdCgnY29zKDApJywgbWF0aC5jb3MoMCksIDEpCi10ZXN0aXQoJ2NvcyhwaS8yKScsIG1hdGguY29zKG1hdGgucGkvMiksIDApCi10ZXN0aXQoJ2NvcyhwaSknLCBtYXRoLmNvcyhtYXRoLnBpKSwgLTEpCisgICAgZGVmIHRlc3RDZWlsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY2VpbCkKKyAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgwLjUpJywgbWF0aC5jZWlsKDAuNSksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoMS4wKScsIG1hdGguY2VpbCgxLjApLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKDEuNSknLCBtYXRoLmNlaWwoMS41KSwgMikKKyAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgtMC41KScsIG1hdGguY2VpbCgtMC41KSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgtMS4wKScsIG1hdGguY2VpbCgtMS4wKSwgLTEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoLTEuNSknLCBtYXRoLmNlaWwoLTEuNSksIC0xKQogCi1wcmludCAnY29zaCcKLXRlc3RpdCgnY29zaCgwKScsIG1hdGguY29zaCgwKSwgMSkKLXRlc3RpdCgnY29zaCgyKS0yKmNvc2goMSkqKjInLCBtYXRoLmNvc2goMiktMiptYXRoLmNvc2goMSkqKjIsIC0xKSAjIFRoYW5rcyB0byBMYW1iZXJ0CisgICAgZGVmIHRlc3RDb3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jb3MpCisgICAgICAgIHNlbGYuZnRlc3QoJ2NvcygtcGkvMiknLCBtYXRoLmNvcygtbWF0aC5waS8yKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnY29zKDApJywgbWF0aC5jb3MoMCksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2NvcyhwaS8yKScsIG1hdGguY29zKG1hdGgucGkvMiksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2NvcyhwaSknLCBtYXRoLmNvcyhtYXRoLnBpKSwgLTEpCiAKLXByaW50ICdkZWdyZWVzJwotdGVzdGl0KCdkZWdyZWVzKHBpKScsIG1hdGguZGVncmVlcyhtYXRoLnBpKSwgMTgwLjApCi10ZXN0aXQoJ2RlZ3JlZXMocGkvMiknLCBtYXRoLmRlZ3JlZXMobWF0aC5waS8yKSwgOTAuMCkKLXRlc3RpdCgnZGVncmVlcygtcGkvNCknLCBtYXRoLmRlZ3JlZXMoLW1hdGgucGkvNCksIC00NS4wKQorICAgIGRlZiB0ZXN0Q29zaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNvc2gpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Nvc2goMCknLCBtYXRoLmNvc2goMCksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Nvc2goMiktMipjb3NoKDEpKioyJywgbWF0aC5jb3NoKDIpLTIqbWF0aC5jb3NoKDEpKioyLCAtMSkgIyBUaGFua3MgdG8gTGFtYmVydAogCi1wcmludCAnZXhwJwotdGVzdGl0KCdleHAoLTEpJywgbWF0aC5leHAoLTEpLCAxL21hdGguZSkKLXRlc3RpdCgnZXhwKDApJywgbWF0aC5leHAoMCksIDEpCi10ZXN0aXQoJ2V4cCgxKScsIG1hdGguZXhwKDEpLCBtYXRoLmUpCisgICAgZGVmIHRlc3REZWdyZWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZGVncmVlcykKKyAgICAgICAgc2VsZi5mdGVzdCgnZGVncmVlcyhwaSknLCBtYXRoLmRlZ3JlZXMobWF0aC5waSksIDE4MC4wKQorICAgICAgICBzZWxmLmZ0ZXN0KCdkZWdyZWVzKHBpLzIpJywgbWF0aC5kZWdyZWVzKG1hdGgucGkvMiksIDkwLjApCisgICAgICAgIHNlbGYuZnRlc3QoJ2RlZ3JlZXMoLXBpLzQpJywgbWF0aC5kZWdyZWVzKC1tYXRoLnBpLzQpLCAtNDUuMCkKIAotcHJpbnQgJ2ZhYnMnCi10ZXN0aXQoJ2ZhYnMoLTEpJywgbWF0aC5mYWJzKC0xKSwgMSkKLXRlc3RpdCgnZmFicygwKScsIG1hdGguZmFicygwKSwgMCkKLXRlc3RpdCgnZmFicygxKScsIG1hdGguZmFicygxKSwgMSkKKyAgICBkZWYgdGVzdEV4cChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmV4cCkKKyAgICAgICAgc2VsZi5mdGVzdCgnZXhwKC0xKScsIG1hdGguZXhwKC0xKSwgMS9tYXRoLmUpCisgICAgICAgIHNlbGYuZnRlc3QoJ2V4cCgwKScsIG1hdGguZXhwKDApLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdleHAoMSknLCBtYXRoLmV4cCgxKSwgbWF0aC5lKQogCi1wcmludCAnZmxvb3InCi10ZXN0aXQoJ2Zsb29yKDAuNSknLCBtYXRoLmZsb29yKDAuNSksIDApCi10ZXN0aXQoJ2Zsb29yKDEuMCknLCBtYXRoLmZsb29yKDEuMCksIDEpCi10ZXN0aXQoJ2Zsb29yKDEuNSknLCBtYXRoLmZsb29yKDEuNSksIDEpCi10ZXN0aXQoJ2Zsb29yKC0wLjUpJywgbWF0aC5mbG9vcigtMC41KSwgLTEpCi10ZXN0aXQoJ2Zsb29yKC0xLjApJywgbWF0aC5mbG9vcigtMS4wKSwgLTEpCi10ZXN0aXQoJ2Zsb29yKC0xLjUpJywgbWF0aC5mbG9vcigtMS41KSwgLTIpCisgICAgZGVmIHRlc3RGYWJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmFicykKKyAgICAgICAgc2VsZi5mdGVzdCgnZmFicygtMSknLCBtYXRoLmZhYnMoLTEpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmYWJzKDApJywgbWF0aC5mYWJzKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmYWJzKDEpJywgbWF0aC5mYWJzKDEpLCAxKQogCi1wcmludCAnZm1vZCcKLXRlc3RpdCgnZm1vZCgxMCwxKScsIG1hdGguZm1vZCgxMCwxKSwgMCkKLXRlc3RpdCgnZm1vZCgxMCwwLjUpJywgbWF0aC5mbW9kKDEwLDAuNSksIDApCi10ZXN0aXQoJ2Ztb2QoMTAsMS41KScsIG1hdGguZm1vZCgxMCwxLjUpLCAxKQotdGVzdGl0KCdmbW9kKC0xMCwxKScsIG1hdGguZm1vZCgtMTAsMSksIDApCi10ZXN0aXQoJ2Ztb2QoLTEwLDAuNSknLCBtYXRoLmZtb2QoLTEwLDAuNSksIDApCi10ZXN0aXQoJ2Ztb2QoLTEwLDEuNSknLCBtYXRoLmZtb2QoLTEwLDEuNSksIC0xKQorICAgIGRlZiB0ZXN0Rmxvb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5mbG9vcikKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMC41KScsIG1hdGguZmxvb3IoMC41KSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMS4wKScsIG1hdGguZmxvb3IoMS4wKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMS41KScsIG1hdGguZmxvb3IoMS41KSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoLTAuNSknLCBtYXRoLmZsb29yKC0wLjUpLCAtMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoLTEuMCknLCBtYXRoLmZsb29yKC0xLjApLCAtMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoLTEuNSknLCBtYXRoLmZsb29yKC0xLjUpLCAtMikKIAotcHJpbnQgJ2ZyZXhwJwotZGVmIHRlc3RmcmV4cChuYW1lLCAobWFudCwgZXhwKSwgKGVtYW50LCBlZXhwKSk6Ci0gICAgaWYgYWJzKG1hbnQtZW1hbnQpID4gZXBzIG9yIGV4cCAhPSBlZXhwOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAnJXMgcmV0dXJuZWQgJXIsIGV4cGVjdGVkICVyJyVcCi0gICAgICAgICAgICAgIChuYW1lLCAobWFudCwgZXhwKSwgKGVtYW50LGVleHApKQorICAgIGRlZiB0ZXN0Rm1vZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmZtb2QpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Ztb2QoMTAsMSknLCBtYXRoLmZtb2QoMTAsMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2Ztb2QoMTAsMC41KScsIG1hdGguZm1vZCgxMCwwLjUpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKDEwLDEuNSknLCBtYXRoLmZtb2QoMTAsMS41KSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZm1vZCgtMTAsMSknLCBtYXRoLmZtb2QoLTEwLDEpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKC0xMCwwLjUpJywgbWF0aC5mbW9kKC0xMCwwLjUpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKC0xMCwxLjUpJywgbWF0aC5mbW9kKC0xMCwxLjUpLCAtMSkKIAotdGVzdGZyZXhwKCdmcmV4cCgtMSknLCBtYXRoLmZyZXhwKC0xKSwgKC0wLjUsIDEpKQotdGVzdGZyZXhwKCdmcmV4cCgwKScsIG1hdGguZnJleHAoMCksICgwLCAwKSkKLXRlc3RmcmV4cCgnZnJleHAoMSknLCBtYXRoLmZyZXhwKDEpLCAoMC41LCAxKSkKLXRlc3RmcmV4cCgnZnJleHAoMiknLCBtYXRoLmZyZXhwKDIpLCAoMC41LCAyKSkKKyAgICBkZWYgdGVzdEZyZXhwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZnJleHApCiAKLXByaW50ICdoeXBvdCcKLXRlc3RpdCgnaHlwb3QoMCwwKScsIG1hdGguaHlwb3QoMCwwKSwgMCkKLXRlc3RpdCgnaHlwb3QoMyw0KScsIG1hdGguaHlwb3QoMyw0KSwgNSkKKyAgICAgICAgZGVmIHRlc3RmcmV4cChuYW1lLCAobWFudCwgZXhwKSwgKGVtYW50LCBlZXhwKSk6CisgICAgICAgICAgICBpZiBhYnMobWFudC1lbWFudCkgPiBlcHMgb3IgZXhwICE9IGVleHA6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCclcyByZXR1cm5lZCAlciwgZXhwZWN0ZWQgJXInJVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIChtYW50LCBleHApLCAoZW1hbnQsZWV4cCkpKQogCi1wcmludCAnbGRleHAnCi10ZXN0aXQoJ2xkZXhwKDAsMSknLCBtYXRoLmxkZXhwKDAsMSksIDApCi10ZXN0aXQoJ2xkZXhwKDEsMSknLCBtYXRoLmxkZXhwKDEsMSksIDIpCi10ZXN0aXQoJ2xkZXhwKDEsLTEpJywgbWF0aC5sZGV4cCgxLC0xKSwgMC41KQotdGVzdGl0KCdsZGV4cCgtMSwxKScsIG1hdGgubGRleHAoLTEsMSksIC0yKQorICAgICAgICB0ZXN0ZnJleHAoJ2ZyZXhwKC0xKScsIG1hdGguZnJleHAoLTEpLCAoLTAuNSwgMSkpCisgICAgICAgIHRlc3RmcmV4cCgnZnJleHAoMCknLCBtYXRoLmZyZXhwKDApLCAoMCwgMCkpCisgICAgICAgIHRlc3RmcmV4cCgnZnJleHAoMSknLCBtYXRoLmZyZXhwKDEpLCAoMC41LCAxKSkKKyAgICAgICAgdGVzdGZyZXhwKCdmcmV4cCgyKScsIG1hdGguZnJleHAoMiksICgwLjUsIDIpKQogCi1wcmludCAnbG9nJwotdGVzdGl0KCdsb2coMS9lKScsIG1hdGgubG9nKDEvbWF0aC5lKSwgLTEpCi10ZXN0aXQoJ2xvZygxKScsIG1hdGgubG9nKDEpLCAwKQotdGVzdGl0KCdsb2coZSknLCBtYXRoLmxvZyhtYXRoLmUpLCAxKQotdGVzdGl0KCdsb2coMzIsMiknLCBtYXRoLmxvZygzMiwyKSwgNSkKLXRlc3RpdCgnbG9nKDEwKio0MCwgMTApJywgbWF0aC5sb2coMTAqKjQwLCAxMCksIDQwKQotdGVzdGl0KCdsb2coMTAqKjQwLCAxMCoqMjApJywgbWF0aC5sb2coMTAqKjQwLCAxMCoqMjApLCAyKQorICAgIGRlZiB0ZXN0SHlwb3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5oeXBvdCkKKyAgICAgICAgc2VsZi5mdGVzdCgnaHlwb3QoMCwwKScsIG1hdGguaHlwb3QoMCwwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnaHlwb3QoMyw0KScsIG1hdGguaHlwb3QoMyw0KSwgNSkKIAotcHJpbnQgJ2xvZzEwJwotdGVzdGl0KCdsb2cxMCgwLjEpJywgbWF0aC5sb2cxMCgwLjEpLCAtMSkKLXRlc3RpdCgnbG9nMTAoMSknLCBtYXRoLmxvZzEwKDEpLCAwKQotdGVzdGl0KCdsb2cxMCgxMCknLCBtYXRoLmxvZzEwKDEwKSwgMSkKKyAgICBkZWYgdGVzdExkZXhwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubGRleHApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xkZXhwKDAsMSknLCBtYXRoLmxkZXhwKDAsMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xkZXhwKDEsMSknLCBtYXRoLmxkZXhwKDEsMSksIDIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2xkZXhwKDEsLTEpJywgbWF0aC5sZGV4cCgxLC0xKSwgMC41KQorICAgICAgICBzZWxmLmZ0ZXN0KCdsZGV4cCgtMSwxKScsIG1hdGgubGRleHAoLTEsMSksIC0yKQogCi1wcmludCAnbW9kZicKLWRlZiB0ZXN0bW9kZihuYW1lLCAodjEsIHYyKSwgKGUxLCBlMikpOgotICAgIGlmIGFicyh2MS1lMSkgPiBlcHMgb3IgYWJzKHYyLWUyKToKLSAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgJyVzIHJldHVybmVkICVyLCBleHBlY3RlZCAlciclXAotICAgICAgICAgICAgICAobmFtZSwgKHYxLHYyKSwgKGUxLGUyKSkKKyAgICBkZWYgdGVzdExvZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmxvZykKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDEvZSknLCBtYXRoLmxvZygxL21hdGguZSksIC0xKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coMSknLCBtYXRoLmxvZygxKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKGUpJywgbWF0aC5sb2cobWF0aC5lKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDMyLDIpJywgbWF0aC5sb2coMzIsMiksIDUpCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZygxMCoqNDAsIDEwKScsIG1hdGgubG9nKDEwKio0MCwgMTApLCA0MCkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDEwKio0MCwgMTAqKjIwKScsIG1hdGgubG9nKDEwKio0MCwgMTAqKjIwKSwgMikKIAotdGVzdG1vZGYoJ21vZGYoMS41KScsIG1hdGgubW9kZigxLjUpLCAoMC41LCAxLjApKQotdGVzdG1vZGYoJ21vZGYoLTEuNSknLCBtYXRoLm1vZGYoLTEuNSksICgtMC41LCAtMS4wKSkKKyAgICBkZWYgdGVzdExvZzEwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubG9nMTApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDAuMSknLCBtYXRoLmxvZzEwKDAuMSksIC0xKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxMCgxKScsIG1hdGgubG9nMTAoMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDEwKScsIG1hdGgubG9nMTAoMTApLCAxKQogCi1wcmludCAncG93JwotdGVzdGl0KCdwb3coMCwxKScsIG1hdGgucG93KDAsMSksIDApCi10ZXN0aXQoJ3BvdygxLDApJywgbWF0aC5wb3coMSwwKSwgMSkKLXRlc3RpdCgncG93KDIsMSknLCBtYXRoLnBvdygyLDEpLCAyKQotdGVzdGl0KCdwb3coMiwtMSknLCBtYXRoLnBvdygyLC0xKSwgMC41KQorICAgIGRlZiB0ZXN0TW9kZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLm1vZGYpCiAKLXByaW50ICdyYWRpYW5zJwotdGVzdGl0KCdyYWRpYW5zKDE4MCknLCBtYXRoLnJhZGlhbnMoMTgwKSwgbWF0aC5waSkKLXRlc3RpdCgncmFkaWFucyg5MCknLCBtYXRoLnJhZGlhbnMoOTApLCBtYXRoLnBpLzIpCi10ZXN0aXQoJ3JhZGlhbnMoLTQ1KScsIG1hdGgucmFkaWFucygtNDUpLCAtbWF0aC5waS80KQorICAgICAgICBkZWYgdGVzdG1vZGYobmFtZSwgKHYxLCB2MiksIChlMSwgZTIpKToKKyAgICAgICAgICAgIGlmIGFicyh2MS1lMSkgPiBlcHMgb3IgYWJzKHYyLWUyKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJyVzIHJldHVybmVkICVyLCBleHBlY3RlZCAlciclXAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgKHYxLHYyKSwgKGUxLGUyKSkpCiAKLXByaW50ICdzaW4nCi10ZXN0aXQoJ3NpbigwKScsIG1hdGguc2luKDApLCAwKQotdGVzdGl0KCdzaW4ocGkvMiknLCBtYXRoLnNpbihtYXRoLnBpLzIpLCAxKQotdGVzdGl0KCdzaW4oLXBpLzIpJywgbWF0aC5zaW4oLW1hdGgucGkvMiksIC0xKQorICAgICAgICB0ZXN0bW9kZignbW9kZigxLjUpJywgbWF0aC5tb2RmKDEuNSksICgwLjUsIDEuMCkpCisgICAgICAgIHRlc3Rtb2RmKCdtb2RmKC0xLjUpJywgbWF0aC5tb2RmKC0xLjUpLCAoLTAuNSwgLTEuMCkpCiAKLXByaW50ICdzaW5oJwotdGVzdGl0KCdzaW5oKDApJywgbWF0aC5zaW5oKDApLCAwKQotdGVzdGl0KCdzaW5oKDEpKioyLWNvc2goMSkqKjInLCBtYXRoLnNpbmgoMSkqKjItbWF0aC5jb3NoKDEpKioyLCAtMSkKLXRlc3RpdCgnc2luaCgxKStzaW5oKC0xKScsIG1hdGguc2luaCgxKSttYXRoLnNpbmgoLTEpLCAwKQorICAgIGRlZiB0ZXN0UG93KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgucG93KQorICAgICAgICBzZWxmLmZ0ZXN0KCdwb3coMCwxKScsIG1hdGgucG93KDAsMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ3BvdygxLDApJywgbWF0aC5wb3coMSwwKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgncG93KDIsMSknLCBtYXRoLnBvdygyLDEpLCAyKQorICAgICAgICBzZWxmLmZ0ZXN0KCdwb3coMiwtMSknLCBtYXRoLnBvdygyLC0xKSwgMC41KQogCi1wcmludCAnc3FydCcKLXRlc3RpdCgnc3FydCgwKScsIG1hdGguc3FydCgwKSwgMCkKLXRlc3RpdCgnc3FydCgxKScsIG1hdGguc3FydCgxKSwgMSkKLXRlc3RpdCgnc3FydCg0KScsIG1hdGguc3FydCg0KSwgMikKKyAgICBkZWYgdGVzdFJhZGlhbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5yYWRpYW5zKQorICAgICAgICBzZWxmLmZ0ZXN0KCdyYWRpYW5zKDE4MCknLCBtYXRoLnJhZGlhbnMoMTgwKSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgncmFkaWFucyg5MCknLCBtYXRoLnJhZGlhbnMoOTApLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ3JhZGlhbnMoLTQ1KScsIG1hdGgucmFkaWFucygtNDUpLCAtbWF0aC5waS80KQogCi1wcmludCAndGFuJwotdGVzdGl0KCd0YW4oMCknLCBtYXRoLnRhbigwKSwgMCkKLXRlc3RpdCgndGFuKHBpLzQpJywgbWF0aC50YW4obWF0aC5waS80KSwgMSkKLXRlc3RpdCgndGFuKC1waS80KScsIG1hdGgudGFuKC1tYXRoLnBpLzQpLCAtMSkKKyAgICBkZWYgdGVzdFNpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnNpbikKKyAgICAgICAgc2VsZi5mdGVzdCgnc2luKDApJywgbWF0aC5zaW4oMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ3NpbihwaS8yKScsIG1hdGguc2luKG1hdGgucGkvMiksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ3NpbigtcGkvMiknLCBtYXRoLnNpbigtbWF0aC5waS8yKSwgLTEpCiAKLXByaW50ICd0YW5oJwotdGVzdGl0KCd0YW5oKDApJywgbWF0aC50YW5oKDApLCAwKQotdGVzdGl0KCd0YW5oKDEpK3RhbmgoLTEpJywgbWF0aC50YW5oKDEpK21hdGgudGFuaCgtMSksIDApCisgICAgZGVmIHRlc3RTaW5oKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguc2luaCkKKyAgICAgICAgc2VsZi5mdGVzdCgnc2luaCgwKScsIG1hdGguc2luaCgwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnc2luaCgxKSoqMi1jb3NoKDEpKioyJywgbWF0aC5zaW5oKDEpKioyLW1hdGguY29zaCgxKSoqMiwgLTEpCisgICAgICAgIHNlbGYuZnRlc3QoJ3NpbmgoMSkrc2luaCgtMSknLCBtYXRoLnNpbmgoMSkrbWF0aC5zaW5oKC0xKSwgMCkKIAotIyBSRURfRkxBRyAxNi1PY3QtMjAwMCBUaW0KLSMgV2hpbGUgMi4wIGlzIG1vcmUgY29uc2lzdGVudCBhYm91dCBleGNlcHRpb25zIHRoYW4gcHJldmlvdXMgcmVsZWFzZXMsIGl0Ci0jIHN0aWxsIGZhaWxzIHRoaXMgcGFydCBvZiB0aGUgdGVzdCBvbiBzb21lIHBsYXRmb3Jtcy4gIEZvciBub3csIHdlIG9ubHkKLSMgKnJ1biogdGVzdF9leGNlcHRpb25zKCkgaW4gdmVyYm9zZSBtb2RlLCBzbyB0aGF0IHRoaXMgaXNuJ3Qgbm9ybWFsbHkKLSMgdGVzdGVkLgorICAgIGRlZiB0ZXN0U3FydChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnNxcnQpCisgICAgICAgIHNlbGYuZnRlc3QoJ3NxcnQoMCknLCBtYXRoLnNxcnQoMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ3NxcnQoMSknLCBtYXRoLnNxcnQoMSksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ3NxcnQoNCknLCBtYXRoLnNxcnQoNCksIDIpCiAKLWRlZiB0ZXN0X2V4Y2VwdGlvbnMoKToKLSAgICBwcmludCAnZXhjZXB0aW9ucycKLSAgICB0cnk6Ci0gICAgICAgIHggPSBtYXRoLmV4cCgtMTAwMDAwMDAwMCkKLSAgICBleGNlcHQ6Ci0gICAgICAgICMgbWF0aG1vZHVsZS5jIGlzIGZhaWxpbmcgdG8gd2VlZCBvdXQgdW5kZXJmbG93cyBmcm9tIGxpYm0sIG9yCi0gICAgICAgICMgd2UndmUgZ290IGFuIGZwIGZvcm1hdCB3aXRoIGh1Z2UgZHluYW1pYyByYW5nZQotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJ1bmRlcmZsb3dpbmcgZXhwKCkgc2hvdWxkIG5vdCBoYXZlIHJhaXNlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4Y2VwdGlvbiIpCi0gICAgaWYgeCAhPSAwOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJ1bmRlcmZsb3dpbmcgZXhwKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgMCIpCisgICAgZGVmIHRlc3RUYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50YW4pCisgICAgICAgIHNlbGYuZnRlc3QoJ3RhbigwKScsIG1hdGgudGFuKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW4ocGkvNCknLCBtYXRoLnRhbihtYXRoLnBpLzQpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW4oLXBpLzQpJywgbWF0aC50YW4oLW1hdGgucGkvNCksIC0xKQogCi0gICAgIyBJZiB0aGlzIGZhaWxzLCBwcm9iYWJseSB1c2luZyBhIHN0cmljdCBJRUVFLTc1NCBjb25mb3JtaW5nIGxpYm0sIGFuZCB4Ci0gICAgIyBpcyArSW5mIGFmdGVyd2FyZHMuICBCdXQgUHl0aG9uIHdhbnRzIG92ZXJmbG93cyBkZXRlY3RlZCBieSBkZWZhdWx0LgotICAgIHRyeToKLSAgICAgICAgeCA9IG1hdGguZXhwKDEwMDAwMDAwMDApCi0gICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJvdmVyZmxvd2luZyBleHAoKSBkaWRuJ3QgdHJpZ2dlciBPdmVyZmxvd0Vycm9yIikKKyAgICBkZWYgdGVzdFRhbmgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50YW5oKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW5oKDApJywgbWF0aC50YW5oKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW5oKDEpK3RhbmgoLTEpJywgbWF0aC50YW5oKDEpK21hdGgudGFuaCgtMSksIDApCiAKLSAgICAjIElmIHRoaXMgZmFpbHMsIGl0IGNvdWxkIGJlIGEgcHV6emxlLiAgT25lIG9kZCBwb3NzaWJpbGl0eSBpcyB0aGF0Ci0gICAgIyBtYXRobW9kdWxlLmMncyBtYWNyb3MgYXJlIGdldHRpbmcgY29uZnVzZWQgd2hpbGUgY29tcGFyaW5nCi0gICAgIyBJbmYgKEhVR0VfVkFMKSB0byBhIE5hTiwgYW5kIGFydGlmaWNpYWxseSBzZXR0aW5nIGVycm5vIHRvIEVSQU5HRQotICAgICMgYXMgYSByZXN1bHQgKGFuZCBzbyByYWlzaW5nIE92ZXJmbG93RXJyb3IgaW5zdGVhZCkuCi0gICAgdHJ5OgotICAgICAgICB4ID0gbWF0aC5zcXJ0KC0xLjApCi0gICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJzcXJ0KC0xKSBkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciIpCisgICAgIyBSRURfRkxBRyAxNi1PY3QtMjAwMCBUaW0KKyAgICAjIFdoaWxlIDIuMCBpcyBtb3JlIGNvbnNpc3RlbnQgYWJvdXQgZXhjZXB0aW9ucyB0aGFuIHByZXZpb3VzIHJlbGVhc2VzLCBpdAorICAgICMgc3RpbGwgZmFpbHMgdGhpcyBwYXJ0IG9mIHRoZSB0ZXN0IG9uIHNvbWUgcGxhdGZvcm1zLiAgRm9yIG5vdywgd2Ugb25seQorICAgICMgKnJ1biogdGVzdF9leGNlcHRpb25zKCkgaW4gdmVyYm9zZSBtb2RlLCBzbyB0aGF0IHRoaXMgaXNuJ3Qgbm9ybWFsbHkKKyAgICAjIHRlc3RlZC4KIAotaWYgdmVyYm9zZToKLSAgICB0ZXN0X2V4Y2VwdGlvbnMoKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeCA9IG1hdGguZXhwKC0xMDAwMDAwMDAwKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgbWF0aG1vZHVsZS5jIGlzIGZhaWxpbmcgdG8gd2VlZCBvdXQgdW5kZXJmbG93cyBmcm9tIGxpYm0sIG9yCisgICAgICAgICAgICAgICAgIyB3ZSd2ZSBnb3QgYW4gZnAgZm9ybWF0IHdpdGggaHVnZSBkeW5hbWljIHJhbmdlCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmRlcmZsb3dpbmcgZXhwKCkgc2hvdWxkIG5vdCBoYXZlIHJhaXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhbiBleGNlcHRpb24iKQorICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5kZXJmbG93aW5nIGV4cCgpIHNob3VsZCBoYXZlIHJldHVybmVkIDAiKQorCisgICAgICAgICAgICAjIElmIHRoaXMgZmFpbHMsIHByb2JhYmx5IHVzaW5nIGEgc3RyaWN0IElFRUUtNzU0IGNvbmZvcm1pbmcgbGlibSwgYW5kIHgKKyAgICAgICAgICAgICMgaXMgK0luZiBhZnRlcndhcmRzLiAgQnV0IFB5dGhvbiB3YW50cyBvdmVyZmxvd3MgZGV0ZWN0ZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4ID0gbWF0aC5leHAoMTAwMDAwMDAwMCkKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJvdmVyZmxvd2luZyBleHAoKSBkaWRuJ3QgdHJpZ2dlciBPdmVyZmxvd0Vycm9yIikKKworICAgICAgICAgICAgIyBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZCBiZSBhIHB1enpsZS4gIE9uZSBvZGQgcG9zc2liaWxpdHkgaXMgdGhhdAorICAgICAgICAgICAgIyBtYXRobW9kdWxlLmMncyBtYWNyb3MgYXJlIGdldHRpbmcgY29uZnVzZWQgd2hpbGUgY29tcGFyaW5nCisgICAgICAgICAgICAjIEluZiAoSFVHRV9WQUwpIHRvIGEgTmFOLCBhbmQgYXJ0aWZpY2lhbGx5IHNldHRpbmcgZXJybm8gdG8gRVJBTkdFCisgICAgICAgICAgICAjIGFzIGEgcmVzdWx0IChhbmQgc28gcmFpc2luZyBPdmVyZmxvd0Vycm9yIGluc3RlYWQpLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHggPSBtYXRoLnNxcnQoLTEuMCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzcXJ0KC0xKSBkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChNYXRoVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW1hcC5weSBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQppbmRleCBkMmEyNDc3Li4wYjUzODIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21tYXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CkBAIC0xLDE5MCArMSwxNTggQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyZXEsIFRFU1RGTgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKIGltcG9ydCBtbWFwCitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBvcywgcmUKIAogUEFHRVNJWkUgPSBtbWFwLlBBR0VTSVpFCiAKLWRlZiB0ZXN0X2JvdGgoKToKLSAgICAiVGVzdCBtbWFwIG1vZHVsZSBvbiBVbml4IHN5c3RlbXMgYW5kIFdpbmRvd3MiCitjbGFzcyBNbWFwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyBDcmVhdGUgYSBmaWxlIHRvIGJlIG1tYXAnZWQuCi0gICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKLSAgICAgICAgb3MudW5saW5rKFRFU1RGTikKLSAgICBmID0gb3BlbihURVNURk4sICd3KycpCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKIAotICAgIHRyeTogICAgIyB1bmxpbmsgVEVTVEZOIG5vIG1hdHRlciB3aGF0Ci0gICAgICAgICMgV3JpdGUgMiBwYWdlcyB3b3J0aCBvZiBkYXRhIHRvIHRoZSBmaWxlCi0gICAgICAgIGYud3JpdGUoJ1wwJyogUEFHRVNJWkUpCi0gICAgICAgIGYud3JpdGUoJ2ZvbycpCi0gICAgICAgIGYud3JpdGUoJ1wwJyogKFBBR0VTSVpFLTMpICkKLSAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMiAqIFBBR0VTSVpFKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICAjIFNpbXBsZSBzYW5pdHkgY2hlY2tzCi0KLSAgICAgICAgcHJpbnQgdHlwZShtKSAgIyBTRiBidWcgMTI4NzEzOiAgc2VnZmF1bHRlZCBvbiBMaW51eAotICAgICAgICBwcmludCAnICBQb3NpdGlvbiBvZiBmb286JywgbS5maW5kKCdmb28nKSAvIGZsb2F0KFBBR0VTSVpFKSwgJ3BhZ2VzJwotICAgICAgICB2ZXJlcShtLmZpbmQoJ2ZvbycpLCBQQUdFU0laRSkKLQotICAgICAgICBwcmludCAnICBMZW5ndGggb2YgZmlsZTonLCBsZW4obSkgLyBmbG9hdChQQUdFU0laRSksICdwYWdlcycKLSAgICAgICAgdmVyZXEobGVuKG0pLCAyKlBBR0VTSVpFKQotCi0gICAgICAgIHByaW50ICcgIENvbnRlbnRzIG9mIGJ5dGUgMDonLCByZXByKG1bMF0pCi0gICAgICAgIHZlcmVxKG1bMF0sICdcMCcpCi0gICAgICAgIHByaW50ICcgIENvbnRlbnRzIG9mIGZpcnN0IDMgYnl0ZXM6JywgcmVwcihtWzA6M10pCi0gICAgICAgIHZlcmVxKG1bMDozXSwgJ1wwXDBcMCcpCi0KLSAgICAgICAgIyBNb2RpZnkgdGhlIGZpbGUncyBjb250ZW50Ci0gICAgICAgIHByaW50ICJcbiAgTW9kaWZ5aW5nIGZpbGUncyBjb250ZW50Li4uIgotICAgICAgICBtWzBdID0gJzMnCi0gICAgICAgIG1bUEFHRVNJWkUgKzM6IFBBR0VTSVpFICszKzNdID0gJ2JhcicKLQotICAgICAgICAjIENoZWNrIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB3b3JrZWQKLSAgICAgICAgcHJpbnQgJyAgQ29udGVudHMgb2YgYnl0ZSAwOicsIHJlcHIobVswXSkKLSAgICAgICAgdmVyZXEobVswXSwgJzMnKQotICAgICAgICBwcmludCAnICBDb250ZW50cyBvZiBmaXJzdCAzIGJ5dGVzOicsIHJlcHIobVswOjNdKQotICAgICAgICB2ZXJlcShtWzA6M10sICczXDBcMCcpCi0gICAgICAgIHByaW50ICcgIENvbnRlbnRzIG9mIHNlY29uZCBwYWdlOicsICByZXByKG1bUEFHRVNJWkUtMSA6IFBBR0VTSVpFICsgN10pCi0gICAgICAgIHZlcmVxKG1bUEFHRVNJWkUtMSA6IFBBR0VTSVpFICsgN10sICdcMGZvb2JhclwwJykKLQotICAgICAgICBtLmZsdXNoKCkKLQotICAgICAgICAjIFRlc3QgZG9pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggaW4gYW4gbW1hcCdlZCBmaWxlCi0gICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCdbQS1aYS16XSsnLCBtKQotICAgICAgICBpZiBtYXRjaCBpcyBOb25lOgotICAgICAgICAgICAgcHJpbnQgJyAgRVJST1I6IHJlZ2V4IG1hdGNoIG9uIG1tYXAgZmFpbGVkIScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN0YXJ0LCBlbmQgPSBtYXRjaC5zcGFuKDApCi0gICAgICAgICAgICBsZW5ndGggPSBlbmQgLSBzdGFydAotCi0gICAgICAgICAgICBwcmludCAnICBSZWdleCBtYXRjaCBvbiBtbWFwIChwYWdlIHN0YXJ0LCBsZW5ndGggb2YgbWF0Y2gpOicsCi0gICAgICAgICAgICBwcmludCBzdGFydCAvIGZsb2F0KFBBR0VTSVpFKSwgbGVuZ3RoCi0KLSAgICAgICAgICAgIHZlcmVxKHN0YXJ0LCBQQUdFU0laRSkKLSAgICAgICAgICAgIHZlcmVxKGVuZCwgUEFHRVNJWkUgKyA2KQotCi0gICAgICAgICMgdGVzdCBzZWVraW5nIGFyb3VuZCAodHJ5IHRvIG92ZXJmbG93IHRoZSBzZWVrIGltcGxlbWVudGF0aW9uKQotICAgICAgICBtLnNlZWsoMCwwKQotICAgICAgICBwcmludCAnICBTZWVrIHRvIHplcm90aCBieXRlJwotICAgICAgICB2ZXJlcShtLnRlbGwoKSwgMCkKLSAgICAgICAgbS5zZWVrKDQyLDEpCi0gICAgICAgIHByaW50ICcgIFNlZWsgdG8gNDJuZCBieXRlJwotICAgICAgICB2ZXJlcShtLnRlbGwoKSwgNDIpCi0gICAgICAgIG0uc2VlaygwLDIpCi0gICAgICAgIHByaW50ICcgIFNlZWsgdG8gbGFzdCBieXRlJwotICAgICAgICB2ZXJlcShtLnRlbGwoKSwgbGVuKG0pKQotCi0gICAgICAgIHByaW50ICcgIFRyeSB0byBzZWVrIHRvIG5lZ2F0aXZlIHBvc2l0aW9uLi4uJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtLnNlZWsoLTEpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdmVyaWZ5KDAsICdleHBlY3RlZCBhIFZhbHVlRXJyb3IgYnV0IGRpZCBub3QgZ2V0IGl0JykKLQotICAgICAgICBwcmludCAnICBUcnkgdG8gc2VlayBiZXlvbmQgZW5kIG9mIG1tYXAuLi4nCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG0uc2VlaygxLDIpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdmVyaWZ5KDAsICdleHBlY3RlZCBhIFZhbHVlRXJyb3IgYnV0IGRpZCBub3QgZ2V0IGl0JykKLQotICAgICAgICBwcmludCAnICBUcnkgdG8gc2VlayB0byBuZWdhdGl2ZSBwb3NpdGlvbi4uLicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbS5zZWVrKC1sZW4obSktMSwyKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHZlcmlmeSgwLCAnZXhwZWN0ZWQgYSBWYWx1ZUVycm9yIGJ1dCBkaWQgbm90IGdldCBpdCcpCi0KLSAgICAgICAgIyBUcnkgcmVzaXppbmcgbWFwCi0gICAgICAgIHByaW50ICcgIEF0dGVtcHRpbmcgcmVzaXplKCknCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG0ucmVzaXplKDUxMikKLSAgICAgICAgZXhjZXB0IFN5c3RlbUVycm9yOgotICAgICAgICAgICAgIyByZXNpemUoKSBub3Qgc3VwcG9ydGVkCi0gICAgICAgICAgICAjIE5vIG1lc3NhZ2VzIGFyZSBwcmludGVkLCBzaW5jZSB0aGUgb3V0cHV0IG9mIHRoaXMgdGVzdCBzdWl0ZQotICAgICAgICAgICAgIyB3b3VsZCB0aGVuIGJlIGRpZmZlcmVudCBhY3Jvc3MgcGxhdGZvcm1zLgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyByZXNpemUoKSBpcyBzdXBwb3J0ZWQKLSAgICAgICAgICAgIHZlcmlmeShsZW4obSkgPT0gNTEyLAotICAgICAgICAgICAgICAgICAgICAibGVuKG0pIGlzICVkLCBidXQgZXhwZWN0aW5nIDUxMiIgJSAobGVuKG0pLCkgKQotICAgICAgICAgICAgIyBDaGVjayB0aGF0IHdlIGNhbiBubyBsb25nZXIgc2VlayBiZXlvbmQgdGhlIG5ldyBzaXplLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG0uc2Vlayg1MTMsMCkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdmVyaWZ5KDAsICdDb3VsZCBzZWVrIGJleW9uZCB0aGUgbmV3IHNpemUnKQotCi0gICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHVuZGVybHlpbmcgZmlsZSBpcyB0cnVuY2F0ZWQgdG9vCi0gICAgICAgICAgICAjIChidWcgIzcyODUxNSkKLSAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKLSAgICAgICAgICAgIGYuc2VlaygwLCAyKQotICAgICAgICAgICAgdmVyaWZ5KGYudGVsbCgpID09IDUxMiwgJ1VuZGVybHlpbmcgZmlsZSBub3QgdHJ1bmNhdGVkJykKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgdmVyaWZ5KG0uc2l6ZSgpID09IDUxMiwgJ05ldyBzaXplIG5vdCByZWZsZWN0ZWQgaW4gZmlsZScpCi0KLSAgICAgICAgbS5jbG9zZSgpCi0KLSAgICBmaW5hbGx5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAotICAgICMgVGVzdCBmb3IgImFjY2VzcyIga2V5d29yZCBwYXJhbWV0ZXIKLSAgICB0cnk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgVGVzdCBtbWFwIG1vZHVsZSBvbiBVbml4IHN5c3RlbXMgYW5kIFdpbmRvd3MKKworICAgICAgICAjIENyZWF0ZSBhIGZpbGUgdG8gYmUgbW1hcCdlZC4KKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdyaXRlIDIgcGFnZXMgd29ydGggb2YgZGF0YSB0byB0aGUgZmlsZQorICAgICAgICAgICAgZi53cml0ZSgnXDAnKiBQQUdFU0laRSkKKyAgICAgICAgICAgIGYud3JpdGUoJ2ZvbycpCisgICAgICAgICAgICBmLndyaXRlKCdcMCcqIChQQUdFU0laRS0zKSApCisgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMiAqIFBBR0VTSVpFKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgICMgU2ltcGxlIHNhbml0eSBjaGVja3MKKworICAgICAgICAgICAgdHAgPSBzdHIodHlwZShtKSkgICMgU0YgYnVnIDEyODcxMzogIHNlZ2ZhdWx0ZWQgb24gTGludXgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKCdmb28nKSwgUEFHRVNJWkUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCAyKlBBR0VTSVpFKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMF0sICdcMCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMDozXSwgJ1wwXDBcMCcpCisKKyAgICAgICAgICAgICMgTW9kaWZ5IHRoZSBmaWxlJ3MgY29udGVudAorICAgICAgICAgICAgbVswXSA9ICczJworICAgICAgICAgICAgbVtQQUdFU0laRSArMzogUEFHRVNJWkUgKzMrM10gPSAnYmFyJworCisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB3b3JrZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVswXSwgJzMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzA6M10sICczXDBcMCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bUEFHRVNJWkUtMSA6IFBBR0VTSVpFICsgN10sICdcMGZvb2JhclwwJykKKworICAgICAgICAgICAgbS5mbHVzaCgpCisKKyAgICAgICAgICAgICMgVGVzdCBkb2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBpbiBhbiBtbWFwJ2VkIGZpbGUKKyAgICAgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCdbQS1aYS16XSsnLCBtKQorICAgICAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JlZ2V4IG1hdGNoIG9uIG1tYXAgZmFpbGVkIScpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQgPSBtYXRjaC5zcGFuKDApCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQsIFBBR0VTSVpFKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5kLCBQQUdFU0laRSArIDYpCisKKyAgICAgICAgICAgICMgdGVzdCBzZWVraW5nIGFyb3VuZCAodHJ5IHRvIG92ZXJmbG93IHRoZSBzZWVrIGltcGxlbWVudGF0aW9uKQorICAgICAgICAgICAgbS5zZWVrKDAsMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50ZWxsKCksIDApCisgICAgICAgICAgICBtLnNlZWsoNDIsMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50ZWxsKCksIDQyKQorICAgICAgICAgICAgbS5zZWVrKDAsMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50ZWxsKCksIGxlbihtKSkKKworICAgICAgICAgICAgIyBUcnkgdG8gc2VlayB0byBuZWdhdGl2ZSBwb3NpdGlvbi4uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5zZWVrLCAtMSkKKworICAgICAgICAgICAgIyBUcnkgdG8gc2VlayBiZXlvbmQgZW5kIG9mIG1tYXAuLi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0uc2VlaywgMSwgMikKKworICAgICAgICAgICAgIyBUcnkgdG8gc2VlayB0byBuZWdhdGl2ZSBwb3NpdGlvbi4uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5zZWVrLCAtbGVuKG0pLTEsIDIpCisKKyAgICAgICAgICAgICMgVHJ5IHJlc2l6aW5nIG1hcAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG0ucmVzaXplKDUxMikKKyAgICAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FcnJvcjoKKyAgICAgICAgICAgICAgICAjIHJlc2l6ZSgpIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAjIE5vIG1lc3NhZ2VzIGFyZSBwcmludGVkLCBzaW5jZSB0aGUgb3V0cHV0IG9mIHRoaXMgdGVzdCBzdWl0ZQorICAgICAgICAgICAgICAgICMgd291bGQgdGhlbiBiZSBkaWZmZXJlbnQgYWNyb3NzIHBsYXRmb3Jtcy4KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgcmVzaXplKCkgaXMgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obSksIDUxMikKKyAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQgd2UgY2FuIG5vIGxvbmdlciBzZWVrIGJleW9uZCB0aGUgbmV3IHNpemUuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5zZWVrLCA1MTMsIDApCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHVuZGVybHlpbmcgZmlsZSBpcyB0cnVuY2F0ZWQgdG9vCisgICAgICAgICAgICAgICAgIyAoYnVnICM3Mjg1MTUpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOKQorICAgICAgICAgICAgICAgIGYuc2VlaygwLCAyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDUxMikKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uc2l6ZSgpLCA1MTIpCisKKyAgICAgICAgICAgIG0uY2xvc2UoKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9hY2Nlc3NfcGFyYW1ldGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yICJhY2Nlc3MiIGtleXdvcmQgcGFyYW1ldGVyCiAgICAgICAgIG1hcHNpemUgPSAxMAotICAgICAgICBwcmludCAiICBDcmVhdGluZyIsIG1hcHNpemUsICJieXRlIHRlc3QgZGF0YSBmaWxlLiIKICAgICAgICAgb3BlbihURVNURk4sICJ3YiIpLndyaXRlKCJhIiptYXBzaXplKQotICAgICAgICBwcmludCAiICBPcGVuaW5nIG1tYXAgd2l0aCBhY2Nlc3M9QUNDRVNTX1JFQUQiCiAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInJiIikKICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkKLSAgICAgICAgdmVyaWZ5KG1bOl0gPT0gJ2EnKm1hcHNpemUsICJSZWFkb25seSBtZW1vcnkgbWFwIGRhdGEgaW5jb3JyZWN0LiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgJ2EnKm1hcHNpemUsICJSZWFkb25seSBtZW1vcnkgbWFwIGRhdGEgaW5jb3JyZWN0LiIpCiAKLSAgICAgICAgcHJpbnQgIiAgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHNsaWNlIGFzc2lnbmVkLiIKKyAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgc2xpY2UgYXNzaWduZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbVs6XSA9ICdiJyptYXBzaXplCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB2ZXJpZnkoMCwgIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCiAKLSAgICAgICAgcHJpbnQgIiAgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIGl0ZW0gYXNzaWduZWQuIgorICAgICAgICAjIEVuc3VyaW5nIHRoYXQgcmVhZG9ubHkgbW1hcCBjYW4ndCBiZSBpdGVtIGFzc2lnbmVkCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1bMF0gPSAnYicKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHZlcmlmeSgwLCAiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKIAotICAgICAgICBwcmludCAiICBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgd3JpdGUoKSB0by4iCisgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHdyaXRlKCkgdG8KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbS5zZWVrKDAsMCkKICAgICAgICAgICAgIG0ud3JpdGUoJ2FiYycpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB2ZXJpZnkoMCwgIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCiAKLSAgICAgICAgcHJpbnQgIiAgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHdyaXRlX2J5dGUoKSB0by4iCisgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHdyaXRlX2J5dGUoKSB0bwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtLnNlZWsoMCwwKQogICAgICAgICAgICAgbS53cml0ZV9ieXRlKCdkJykKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHZlcmlmeSgwLCAiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKIAotICAgICAgICBwcmludCAiICBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgcmVzaXplZC4iCisgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHJlc2l6ZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbS5yZXNpemUoMiptYXBzaXplKQogICAgICAgICBleGNlcHQgU3lzdGVtRXJyb3I6ICAgIyByZXNpemUgaXMgbm90IHVuaXZlcnNhbGx5IHN1cHBvcnRlZApAQCAtMTkyLDEyICsxNjAsMTIgQEAKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHZlcmlmeSgwLCAiQWJsZSB0byByZXNpemUgcmVhZG9ubHkgbWVtb3J5IG1hcCIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gcmVzaXplIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQogICAgICAgICBkZWwgbSwgZgotICAgICAgICB2ZXJpZnkob3BlbihURVNURk4sICJyYiIpLnJlYWQoKSA9PSAnYScqbWFwc2l6ZSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKFRFU1RGTiwgInJiIikucmVhZCgpLCAnYScqbWFwc2l6ZSwKICAgICAgICAgICAgICAgICJSZWFkb25seSBtZW1vcnkgbWFwIGRhdGEgZmlsZSB3YXMgbW9kaWZpZWQiKQogCi0gICAgICAgIHByaW50ICIgIE9wZW5pbmcgbW1hcCB3aXRoIHNpemUgdG9vIGJpZyIKKyAgICAgICAgIyBPcGVuaW5nIG1tYXAgd2l0aCBzaXplIHRvbyBiaWcKICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQogICAgICAgICB0cnk6CkBAIC0yMDgsMTEgKzE3NiwxMSBAQAogICAgICAgICAgICAgIyBsYXRlciB0ZXN0cyBhc3N1bWUgdGhhdCB0aGUgbGVuZ3RoIGhhc24ndCBjaGFuZ2VkLiAgV2UgbmVlZCB0bwogICAgICAgICAgICAgIyByZXBhaXIgdGhhdC4KICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICAgICAgICAgICAgICB2ZXJpZnkoMCwgIk9wZW5pbmcgbW1hcCB3aXRoIHNpemUrMSBzaG91bGQgd29yayBvbiBXaW5kb3dzLiIpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJPcGVuaW5nIG1tYXAgd2l0aCBzaXplKzEgc2hvdWxkIHdvcmsgb24gV2luZG93cy4iKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyB3ZSBleHBlY3QgYSBWYWx1ZUVycm9yIG9uIFVuaXgsIGJ1dCBub3Qgb24gV2luZG93cwogICAgICAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICAgICAgICAgICAgICB2ZXJpZnkoMCwgIk9wZW5pbmcgbW1hcCB3aXRoIHNpemUrMSBzaG91bGQgcmFpc2UgVmFsdWVFcnJvci4iKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiT3BlbmluZyBtbWFwIHdpdGggc2l6ZSsxIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yLiIpCiAgICAgICAgICAgICBtLmNsb3NlKCkKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKQEAgLTIyMSwxMiArMTg5LDEyIEBACiAgICAgICAgICAgICBmLnRydW5jYXRlKG1hcHNpemUpCiAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICBwcmludCAiICBPcGVuaW5nIG1tYXAgd2l0aCBhY2Nlc3M9QUNDRVNTX1dSSVRFIgorICAgICAgICAjIE9wZW5pbmcgbW1hcCB3aXRoIGFjY2Vzcz1BQ0NFU1NfV1JJVEUKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfV1JJVEUpCi0gICAgICAgIHByaW50ICIgIE1vZGlmeWluZyB3cml0ZS10aHJvdWdoIG1lbW9yeSBtYXAuIgorICAgICAgICAjIE1vZGlmeWluZyB3cml0ZS10aHJvdWdoIG1lbW9yeSBtYXAKICAgICAgICAgbVs6XSA9ICdjJyptYXBzaXplCi0gICAgICAgIHZlcmlmeShtWzpdID09ICdjJyptYXBzaXplLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sICdjJyptYXBzaXplLAogICAgICAgICAgICAgICAgIldyaXRlLXRocm91Z2ggbWVtb3J5IG1hcCBtZW1vcnkgbm90IHVwZGF0ZWQgcHJvcGVybHkuIikKICAgICAgICAgbS5mbHVzaCgpCiAgICAgICAgIG0uY2xvc2UoKQpAQCAtMjM0LDY2ICsyMDIsNDUgQEAKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAncmInKQogICAgICAgICBzdHVmZiA9IGYucmVhZCgpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICB2ZXJpZnkoc3R1ZmYgPT0gJ2MnKm1hcHNpemUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R1ZmYsICdjJyptYXBzaXplLAogICAgICAgICAgICAgICAgIldyaXRlLXRocm91Z2ggbWVtb3J5IG1hcCBkYXRhIGZpbGUgbm90IHVwZGF0ZWQgcHJvcGVybHkuIikKIAotICAgICAgICBwcmludCAiICBPcGVuaW5nIG1tYXAgd2l0aCBhY2Nlc3M9QUNDRVNTX0NPUFkiCisgICAgICAgICMgT3BlbmluZyBtbWFwIHdpdGggYWNjZXNzPUFDQ0VTU19DT1BZCiAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCiAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgYWNjZXNzPW1tYXAuQUNDRVNTX0NPUFkpCi0gICAgICAgIHByaW50ICIgIE1vZGlmeWluZyBjb3B5LW9uLXdyaXRlIG1lbW9yeSBtYXAuIgorICAgICAgICAjIE1vZGlmeWluZyBjb3B5LW9uLXdyaXRlIG1lbW9yeSBtYXAKICAgICAgICAgbVs6XSA9ICdkJyptYXBzaXplCi0gICAgICAgIHZlcmlmeShtWzpdID09ICdkJyAqIG1hcHNpemUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgJ2QnICogbWFwc2l6ZSwKICAgICAgICAgICAgICAgICJDb3B5LW9uLXdyaXRlIG1lbW9yeSBtYXAgZGF0YSBub3Qgd3JpdHRlbiBjb3JyZWN0bHkuIikKICAgICAgICAgbS5mbHVzaCgpCi0gICAgICAgIHZlcmlmeShvcGVuKFRFU1RGTiwgInJiIikucmVhZCgpID09ICdjJyptYXBzaXplLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oVEVTVEZOLCAicmIiKS5yZWFkKCksICdjJyptYXBzaXplLAogICAgICAgICAgICAgICAgIkNvcHktb24td3JpdGUgdGVzdCBkYXRhIGZpbGUgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcmludCAiICBFbnN1cmluZyBjb3B5LW9uLXdyaXRlIG1hcHMgY2Fubm90IGJlIHJlc2l6ZWQuIgotICAgICAgICAgICAgbS5yZXNpemUoMiptYXBzaXplKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdmVyaWZ5KDAsICJDb3B5LW9uLXdyaXRlIG1tYXAgcmVzaXplIGRpZCBub3QgcmFpc2UgZXhjZXB0aW9uLiIpCisgICAgICAgICMgRW5zdXJpbmcgY29weS1vbi13cml0ZSBtYXBzIGNhbm5vdCBiZSByZXNpemVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbS5yZXNpemUsIDIqbWFwc2l6ZSkKICAgICAgICAgZGVsIG0sIGYKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcHJpbnQgIiAgRW5zdXJpbmcgaW52YWxpZCBhY2Nlc3MgcGFyYW1ldGVyIHJhaXNlcyBleGNlcHRpb24uIgotICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKLSAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgYWNjZXNzPTQpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdmVyaWZ5KDAsICJJbnZhbGlkIGFjY2VzcyBjb2RlIHNob3VsZCBoYXZlIHJhaXNlZCBleGNlcHRpb24uIikKKworICAgICAgICAjIEVuc3VyaW5nIGludmFsaWQgYWNjZXNzIHBhcmFtZXRlciByYWlzZXMgZXhjZXB0aW9uCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1tYXAubW1hcCwgZi5maWxlbm8oKSwgbWFwc2l6ZSwgYWNjZXNzPTQpCisgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICAgICAgICMgVHJ5IGluY29tcGF0aWJsZSBmbGFncywgcHJvdCBhbmQgYWNjZXNzIHBhcmFtZXRlcnMuCiAgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgZmxhZ3M9bW1hcC5NQVBfUFJJVkFURSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1tYXAubW1hcCwgZi5maWxlbm8oKSwgbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPW1tYXAuTUFQX1BSSVZBVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90PW1tYXAuUFJPVF9SRUFELCBhY2Nlc3M9bW1hcC5BQ0NFU1NfV1JJVEUpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHZlcmlmeSgwLCAiSW5jb21wYXRpYmxlIHBhcmFtZXRlcnMgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IuIikKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcGFzcwogCi0gICAgcHJpbnQgJyAgVHJ5IG9wZW5pbmcgYSBiYWQgZmlsZSBkZXNjcmlwdG9yLi4uJwotICAgIHRyeToKLSAgICAgICAgbW1hcC5tbWFwKC0yLCA0MDk2KQotICAgIGV4Y2VwdCBtbWFwLmVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgdmVyaWZ5KDAsICdleHBlY3RlZCBhIG1tYXAuZXJyb3IgYnV0IGRpZCBub3QgZ2V0IGl0JykKKyAgICBkZWYgdGVzdF9iYWRfZmlsZV9kZXNjKHNlbGYpOgorICAgICAgICAjIFRyeSBvcGVuaW5nIGEgYmFkIGZpbGUgZGVzY3JpcHRvci4uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQogCi0gICAgIyBEbyBhIHRvdWdoZXIgLmZpbmQoKSB0ZXN0LiAgU0YgYnVnIDUxNTk0MyBwb2ludGVkIG91dCB0aGF0LCBpbiAyLjIsCi0gICAgIyBzZWFyY2hpbmcgZm9yIGRhdGEgd2l0aCBlbWJlZGRlZCBcMCBieXRlcyBkaWRuJ3Qgd29yay4KLSAgICBmID0gb3BlbihURVNURk4sICd3KycpCisgICAgZGVmIHRlc3RfdG91Z2hlcl9maW5kKHNlbGYpOgorICAgICAgICAjIERvIGEgdG91Z2hlciAuZmluZCgpIHRlc3QuICBTRiBidWcgNTE1OTQzIHBvaW50ZWQgb3V0IHRoYXQsIGluIDIuMiwKKyAgICAgICAgIyBzZWFyY2hpbmcgZm9yIGRhdGEgd2l0aCBlbWJlZGRlZCBcMCBieXRlcyBkaWRuJ3Qgd29yay4KKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQogCi0gICAgdHJ5OiAgICAjIHVubGluayBURVNURk4gbm8gbWF0dGVyIHdoYXQKICAgICAgICAgZGF0YSA9ICdhYWJhYWNceDAwZGVlZlx4MDBceDAwYWFceDAwJwogICAgICAgICBuID0gbGVuKGRhdGEpCiAgICAgICAgIGYud3JpdGUoZGF0YSkKQEAgLTMwNCwxNyArMjUxLDE0IEBACiAgICAgICAgIGZvciBzdGFydCBpbiByYW5nZShuKzEpOgogICAgICAgICAgICAgZm9yIGZpbmlzaCBpbiByYW5nZShzdGFydCwgbisxKToKICAgICAgICAgICAgICAgICBzbGljZSA9IGRhdGFbc3RhcnQgOiBmaW5pc2hdCi0gICAgICAgICAgICAgICAgdmVyZXEobS5maW5kKHNsaWNlKSwgZGF0YS5maW5kKHNsaWNlKSkKLSAgICAgICAgICAgICAgICB2ZXJlcShtLmZpbmQoc2xpY2UgKyAneCcpLCAtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZChzbGljZSksIGRhdGEuZmluZChzbGljZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoc2xpY2UgKyAneCcpLCAtMSkKICAgICAgICAgbS5jbG9zZSgpCiAKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgIGRlZiB0ZXN0X2RvdWJsZV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgYSBkb3VibGUgY2xvc2UgZG9lc24ndCBjcmFzaCBvbiBTb2xhcmlzIChCdWcjIDY2NTkxMykKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQogCi0gICAgIyBtYWtlIHN1cmUgYSBkb3VibGUgY2xvc2UgZG9lc24ndCBjcmFzaCBvbiBTb2xhcmlzIChCdWcjIDY2NTkxMykKLSAgICBmID0gb3BlbihURVNURk4sICd3KycpCi0KLSAgICB0cnk6ICAgICMgdW5saW5rIFRFU1RGTiBubyBtYXR0ZXIgd2hhdAogICAgICAgICBmLndyaXRlKDIqKjE2ICogJ2EnKSAjIEFyYml0cmFyeSBjaGFyYWN0ZXIKICAgICAgICAgZi5jbG9zZSgpCiAKQEAgLTMyNCw3MiArMjY4LDQ2IEBACiAgICAgICAgIG1mLmNsb3NlKCkKICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgIGRlZiB0ZXN0X2VudGlyZV9maWxlKHNlbGYpOgorICAgICAgICAjIHRlc3QgbWFwcGluZyBvZiBlbnRpcmUgZmlsZSBieSBwYXNzaW5nIDAgZm9yIG1hcCBsZW5ndGgKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInN0YXQiKToKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgIncrIikKIAotICAgICMgdGVzdCBtYXBwaW5nIG9mIGVudGlyZSBmaWxlIGJ5IHBhc3NpbmcgMCBmb3IgbWFwIGxlbmd0aAotICAgIGlmIGhhc2F0dHIob3MsICJzdGF0Iik6Ci0gICAgICAgIHByaW50ICIgIEVuc3VyaW5nIHRoYXQgcGFzc2luZyAwIGFzIG1hcCBsZW5ndGggc2V0cyBtYXAgc2l6ZSB0byBjdXJyZW50IGZpbGUgc2l6ZS4iCi0gICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgIncrIikKLQotICAgICAgICB0cnk6CiAgICAgICAgICAgICBmLndyaXRlKDIqKjE2ICogJ20nKSAjIEFyYml0cmFyeSBjaGFyYWN0ZXIKICAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJyYisiKQogICAgICAgICAgICAgbWYgPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCkKLSAgICAgICAgICAgIHZlcmlmeShsZW4obWYpID09IDIqKjE2LCAiTWFwIHNpemUgc2hvdWxkIGVxdWFsIGZpbGUgc2l6ZS4iKQotICAgICAgICAgICAgdmVyZXEobWYucmVhZCgyKioxNiksIDIqKjE2ICogIm0iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obWYpLCAyKioxNiwgIk1hcCBzaXplIHNob3VsZCBlcXVhbCBmaWxlIHNpemUuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWYucmVhZCgyKioxNiksIDIqKjE2ICogIm0iKQogICAgICAgICAgICAgbWYuY2xvc2UoKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgZGVmIHRlc3RfbW92ZShzZWxmKToKKyAgICAgICAgIyBtYWtlIG1vdmUgd29ya3MgZXZlcnl3aGVyZSAoNjQtYml0IGZvcm1hdCBwcm9ibGVtIGVhcmxpZXIpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3crJykKIAotICAgICMgdGVzdCBtYXBwaW5nIG9mIGVudGlyZSBmaWxlIGJ5IHBhc3NpbmcgMCBmb3IgbWFwIGxlbmd0aAotICAgIGlmIGhhc2F0dHIob3MsICJzdGF0Iik6Ci0gICAgICAgIHByaW50ICIgIEVuc3VyaW5nIHRoYXQgcGFzc2luZyAwIGFzIG1hcCBsZW5ndGggc2V0cyBtYXAgc2l6ZSB0byBjdXJyZW50IGZpbGUgc2l6ZS4iCi0gICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgIncrIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZSgyKioxNiAqICdtJykgIyBBcmJpdHJhcnkgY2hhcmFjdGVyCi0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicmIrIikKLSAgICAgICAgICAgIG1mID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDApCi0gICAgICAgICAgICB2ZXJpZnkobGVuKG1mKSA9PSAyKioxNiwgIk1hcCBzaXplIHNob3VsZCBlcXVhbCBmaWxlIHNpemUuIikKLSAgICAgICAgICAgIHZlcmVxKG1mLnJlYWQoMioqMTYpLCAyKioxNiAqICJtIikKLSAgICAgICAgICAgIG1mLmNsb3NlKCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQotCi0gICAgIyBtYWtlIG1vdmUgd29ya3MgZXZlcnl3aGVyZSAoNjQtYml0IGZvcm1hdCBwcm9ibGVtIGVhcmxpZXIpCi0gICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQotCi0gICAgdHJ5OiAgICAjIHVubGluayBURVNURk4gbm8gbWF0dGVyIHdoYXQKICAgICAgICAgZi53cml0ZSgiQUJDREVhYmNkZSIpICMgQXJiaXRyYXJ5IGNoYXJhY3RlcgogICAgICAgICBmLmZsdXNoKCkKIAogICAgICAgICBtZiA9IG1tYXAubW1hcChmLmZpbGVubygpLCAxMCkKICAgICAgICAgbWYubW92ZSg1LCAwLCA1KQotICAgICAgICB2ZXJpZnkobWZbOl0gPT0gIkFCQ0RFQUJDREUiLCAiTWFwIG1vdmUgc2hvdWxkIGhhdmUgZHVwbGljYXRlZCBmcm9udCA1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZls6XSwgIkFCQ0RFQUJDREUiLCAiTWFwIG1vdmUgc2hvdWxkIGhhdmUgZHVwbGljYXRlZCBmcm9udCA1IikKICAgICAgICAgbWYuY2xvc2UoKQogICAgICAgICBmLmNsb3NlKCkKIAotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgZGVmIHRlc3RfYW5vbnltb3VzKHNlbGYpOgorICAgICAgICAjIGFub255bW91cyBtbWFwLm1tYXAoLTEsIFBBR0UpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIFBBR0VTSVpFKQorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoUEFHRVNJWkUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW3hdLCAnXDAnLCAiYW5vbnltb3VzbHkgbW1hcCdlZCBjb250ZW50cyBzaG91bGQgYmUgemVybyIpCiAKLWRlZiB0ZXN0X2Fub24oKToKLSAgICBwcmludCAiICBhbm9ueW1vdXMgbW1hcC5tbWFwKC0xLCBQQUdFU0laRSkuLi4iCi0gICAgbSA9IG1tYXAubW1hcCgtMSwgUEFHRVNJWkUpCi0gICAgZm9yIHggaW4geHJhbmdlKFBBR0VTSVpFKToKLSAgICAgICAgdmVyaWZ5KG1beF0gPT0gJ1wwJywgImFub255bW91c2x5IG1tYXAnZWQgY29udGVudHMgc2hvdWxkIGJlIHplcm8iKQorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoUEFHRVNJWkUpOgorICAgICAgICAgICAgbVt4XSA9IGNoID0gY2hyKHggJiAyNTUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1beF0sIGNoKQogCi0gICAgZm9yIHggaW4geHJhbmdlKFBBR0VTSVpFKToKLSAgICAgICAgbVt4XSA9IGNoID0gY2hyKHggJiAyNTUpCi0gICAgICAgIHZlcmVxKG1beF0sIGNoKQorZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChNbWFwVGVzdHMpCiAKLXRlc3RfYm90aCgpCi10ZXN0X2Fub24oKQotcHJpbnQgJyBUZXN0IHBhc3NlZCcKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKaW5kZXggMGI4ZTQ1MS4uN2RhMjQxYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKQEAgLTUwLDcgKzUwLDcgQEAKIG1heWJlX3Rlc3RfbmV3ID0gWwogICAgICJhLm1vZHVsZSIsCiAgICAgWyJhIiwgImEubW9kdWxlIiwgInN5cyIsCi0gICAgICJiIl0sCisgICAgICJiIiwgIl9fZnV0dXJlX18iXSwKICAgICBbImMiXSwgWyJiLnNvbWV0aGluZyJdLAogICAgICIiIlwKIGEvX19pbml0X18ucHkKQEAgLTU4LDYgKzU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBiIGltcG9ydCBzb21ldGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBjIGltcG9ydCBzb21ldGhpbmcKIGIvX19pbml0X18ucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBzeXMgaW1wb3J0ICoKICIiIl0KIApAQCAtODYsMTIgKzg3LDEzIEBACiAgICAgImEubW9kdWxlIiwKICAgICBbImEiLCAiYS5tb2R1bGUiLAogICAgICAiYiIsICJiLngiLCAiYi55IiwgImIueiIsCi0gICAgICJzeXMiLCAiZXhjZXB0aW9ucyJdLAorICAgICAiX19mdXR1cmVfXyIsICJzeXMiLCAiZXhjZXB0aW9ucyJdLAogICAgIFsiYmxhaGJsYWgiLCAieiJdLCBbXSwKICAgICAiIiJcCiBteW1vZHVsZS5weQogYS9fX2luaXRfXy5weQogYS9tb2R1bGUucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cyAjIHN5cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgYmxhaGJsYWggIyBmYWlscwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgZXhjZXB0aW9ucyAjIGV4Y2VwdGlvbnMKQEAgLTExNSw3ICsxMTcsOCBAQAogCiByZWxhdGl2ZV9pbXBvcnRfdGVzdCA9IFsKICAgICAiYS5tb2R1bGUiLAotICAgIFsiYSIsICJhLm1vZHVsZSIsCisgICAgWyJfX2Z1dHVyZV9fIiwKKyAgICAgImEiLCAiYS5tb2R1bGUiLAogICAgICAiYS5iIiwgImEuYi55IiwgImEuYi56IiwKICAgICAgImEuYi5jIiwgImEuYi5jLm1vZHVsZUMiLAogICAgICAiYS5iLmMuZCIsICJhLmIuYy5lIiwKQEAgLTEyNyw2ICsxMzAsNyBAQAogYS9fX2luaXRfXy5weQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC5iIGltcG9ydCB5LCB6ICMgYS5iLnksIGEuYi56CiBhL21vZHVsZS5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydCAjIF9fZnV0dXJlX18KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGV4Y2VwdGlvbnMgIyBleGNlcHRpb25zCiBhL2V4Y2VwdGlvbnMucHkKIGEvc3lzLnB5CkBAIC0yNTMsNiArMjU3LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2RvX3Rlc3QocmVsYXRpdmVfaW1wb3J0X3Rlc3RfMikKIAogZGVmIHRlc3RfbWFpbigpOgorICAgIGRpc3R1dGlscy5sb2cuc2V0X3RocmVzaG9sZChkaXN0dXRpbHMubG9nLldBUk4pCiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNb2R1bGVGaW5kZXJUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKaW5kZXggOTVmNGIzOC4uZmI3ZjgyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CkBAIC0yMDIsNiArMjAyLDIyIEBACiAgICAgICAgIHVuaSA9IHUnOmh1NDp1bml0XHhlOSBkZSBmYW1pbGxlJwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzbzIwMjJqcDIuZGVjb2RlKCdpc28yMDIyLWpwLTInKSwgdW5pKQogCisgICAgZGVmIHRlc3RfaXNvMjAyMl9qcF9nMChzZWxmKToKKyAgICAgICAgc2VsZi5mYWlsSWYoJ1x4MGUnIGluIHUnXE57U09GVCBIWVBIRU59Jy5lbmNvZGUoJ2lzby0yMDIyLWpwLTInKSkKKyAgICAgICAgZm9yIGVuY29kaW5nIGluICgnaXNvLTIwMjItanAtMjAwNCcsICdpc28tMjAyMi1qcC0zJyk6CisgICAgICAgICAgICBlID0gdSdcdTM0MDYnLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGZpbHRlcihsYW1iZGEgeDogeCA+PSAnXHg4MCcsIGUpKQorCisgICAgZGVmIHRlc3RfYnVnMTU3MjgzMihzZWxmKToKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPj0gMHgxMDAwMDoKKyAgICAgICAgICAgIG15dW5pY2hyID0gdW5pY2hyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBteXVuaWNociA9IGxhbWJkYSB4OiB1bmljaHIoMHhEN0MwKyh4Pj4xMCkpICsgdW5pY2hyKDB4REMwMCsoeCYweDNGRikpCisKKyAgICAgICAgZm9yIHggaW4geHJhbmdlKDB4MTAwMDAsIDB4MTEwMDAwKToKKyAgICAgICAgICAgICMgQW55IElTTyAyMDIyIGNvZGVjIHdpbGwgY2F1c2UgdGhlIHNlZ2ZhdWx0CisgICAgICAgICAgICBteXVuaWNocih4KS5lbmNvZGUoJ2lzb18yMDIyX2pwJywgJ2lnbm9yZScpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVGVzdF9NdWx0aWJ5dGVDb2RlYykpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211dGFudHMucHkgYi9MaWIvdGVzdC90ZXN0X211dGFudHMucHkKaW5kZXggOGFmZGE3NS4uNjIxNTIyNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdXRhbnRzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbXV0YW50cy5weQpAQCAtOTIsOCArOTIsOCBAQAogICAgICAgICAjI3NlbGYuaGFzaGNvZGUgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMDAwMDApCiAKICAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgICMjcmV0dXJuIHNlbGYuaGFzaGNvZGUKICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIHJldHVybiBzZWxmLmhhc2hjb2RlCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgbWF5YmVfbXV0YXRlKCkgICAjIFRoZSBwb2ludCBvZiB0aGUgdGVzdC4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbmV3LnB5IGIvTGliL3Rlc3QvdGVzdF9uZXcucHkKaW5kZXggM2MxNmJmNS4uZTkwZmQ2NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9uZXcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9uZXcucHkKQEAgLTQ3LDYgKzQ3LDE0IEBACiBlbHNlOgogICAgIHJhaXNlIFRlc3RGYWlsZWQsICJkYW5nZXJvdXMgaW5zdGFuY2UgbWV0aG9kIGNyZWF0aW9uIGFsbG93ZWQiCiAKKyMgVmVyaWZ5IHRoYXQgaW5zdGFuY2VtZXRob2QoKSBkb2Vzbid0IGFsbG93IGtleXdvcmQgYXJncwordHJ5OgorICAgIG5ldy5pbnN0YW5jZW1ldGhvZChicmVha195b2xrcywgYywga3c9MSkKK2V4Y2VwdCBUeXBlRXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICByYWlzZSBUZXN0RmFpbGVkLCAiaW5zdGFuY2VtZXRob2Qgc2hvdWxkbid0IGFjY2VwdCBrZXl3b3JkIGFyZ3MiCisKICMgSXQncyB1bmNsZWFyIHdoYXQgdGhlIHNlbWFudGljcyBzaG91bGQgYmUgZm9yIGEgY29kZSBvYmplY3QgY29tcGlsZWQgYXQKICMgbW9kdWxlIHNjb3BlLCBidXQgYm91bmQgYW5kIHJ1biBpbiBhIGZ1bmN0aW9uLiAgSW4gQ1B5dGhvbiwgYGMnIGlzIGdsb2JhbAogIyAoYnkgYWNjaWRlbnQ/KSB3aGlsZSBpbiBKeXRob24sIGBjJyBpcyBsb2NhbC4gIFRoZSBpbnRlbnQgb2YgdGhlIHRlc3QKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbmlzLnB5IGIvTGliL3Rlc3QvdGVzdF9uaXMucHkKaW5kZXggZjUyMjRmZS4uNTkwODY4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9uaXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9uaXMucHkKQEAgLTEsMzIgKzEsNDEgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IG5pcwogCi1wcmludCAnbmlzLm1hcHMoKScKLXRyeToKLSAgICBtYXBzID0gbmlzLm1hcHMoKQotZXhjZXB0IG5pcy5lcnJvciwgbXNnOgotICAgICMgTklTIGlzIHByb2JhYmx5IG5vdCBhY3RpdmUsIHNvIHRoaXMgdGVzdCBpc24ndCB1c2VmdWwKLSAgICBpZiB2ZXJib3NlOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCBtc2cKLSAgICAjIG9ubHkgZG8gdGhpcyBpZiBydW5uaW5nIHVuZGVyIHRoZSByZWdyZXNzaW9uIHN1aXRlCi0gICAgcmFpc2UgVGVzdFNraXBwZWQsIG1zZworY2xhc3MgTmlzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X21hcHMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1hcHMgPSBuaXMubWFwcygpCisgICAgICAgIGV4Y2VwdCBuaXMuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgICMgTklTIGlzIHByb2JhYmx5IG5vdCBhY3RpdmUsIHNvIHRoaXMgdGVzdCBpc24ndCB1c2VmdWwKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIoZmFpbGluZyBiZWNhdXNlIG9mIHZlcmJvc2UgbW9kZSkgJXMiICUgbXNnKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgT24gc29tZSBzeXN0ZW1zLCB0aGlzIG1hcCBpcyBvbmx5IGFjY2Vzc2libGUgdG8gdGhlCisgICAgICAgICAgICAjIHN1cGVyIHVzZXIKKyAgICAgICAgICAgIG1hcHMucmVtb3ZlKCJwYXNzd2QuYWRqdW5jdC5ieW5hbWUiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKIAotZG9uZSA9IDAKLWZvciBuaXNtYXAgaW4gbWFwczoKLSAgICBpZiB2ZXJib3NlOgotICAgICAgICBwcmludCBuaXNtYXAKLSAgICBtYXBwaW5nID0gbmlzLmNhdChuaXNtYXApCi0gICAgZm9yIGssIHYgaW4gbWFwcGluZy5pdGVtcygpOgotICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQgJyAgICAnLCBrLCB2Ci0gICAgICAgIGlmIG5vdCBrOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgbmlzLm1hdGNoKGssIG5pc21hcCkgIT0gdjoKLSAgICAgICAgICAgIHByaW50ICJOSVMgbWF0Y2ggZmFpbGVkIGZvciBrZXkgYCVzJyBpbiBtYXAgYCVzJyIgJSAoaywgbmlzbWFwKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBqdXN0IHRlc3QgdGhlIG9uZSBrZXksIG90aGVyd2lzZSB0aGlzIHRlc3QgY291bGQgdGFrZSBhCi0gICAgICAgICAgICAjIHZlcnkgbG9uZyB0aW1lCi0gICAgICAgICAgICBkb25lID0gMQotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBkb25lOgotICAgICAgICBicmVhaworICAgICAgICBkb25lID0gMAorICAgICAgICBmb3IgbmlzbWFwIGluIG1hcHM6CisgICAgICAgICAgICBtYXBwaW5nID0gbmlzLmNhdChuaXNtYXApCisgICAgICAgICAgICBmb3IgaywgdiBpbiBtYXBwaW5nLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGs6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbmlzLm1hdGNoKGssIG5pc21hcCkgIT0gdjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJOSVMgbWF0Y2ggZmFpbGVkIGZvciBrZXkgYCVzJyBpbiBtYXAgYCVzJyIgJSAoaywgbmlzbWFwKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCB0aGUgb25lIGtleSwgb3RoZXJ3aXNlIHRoaXMgdGVzdCBjb3VsZCB0YWtlIGEKKyAgICAgICAgICAgICAgICAgICAgIyB2ZXJ5IGxvbmcgdGltZQorICAgICAgICAgICAgICAgICAgICBkb25lID0gMQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgZG9uZToKKyAgICAgICAgICAgICAgICBicmVhaworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE5pc1Rlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkgYi9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkKaW5kZXggNzQyMjY3Zi4uMWEyZjVkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGNvZGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weQpAQCAtMSwxMDEgKzEsMTEwIEBACiAjIFB5dGhvbiB0ZXN0IHNldCAtLSBwYXJ0IDIsIG9wY29kZXMKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgT3Bjb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90cnlfaW5zaWRlX2Zvcl9sb29wKHNlbGYpOgorICAgICAgICBuID0gMAorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBuID0gbitpCisgICAgICAgICAgICB0cnk6IDEvMAorICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjogcGFzcworICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOiBwYXNzCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgICAgICB0cnk6IHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdDogcGFzcworICAgICAgICAgICAgdHJ5OiBwYXNzCisgICAgICAgICAgICBmaW5hbGx5OiBwYXNzCisgICAgICAgICAgICBuID0gbitpCisgICAgICAgIGlmIG4gIT0gOTA6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3RyeSBpbnNpZGUgZm9yJykKKworICAgIGRlZiB0ZXN0X3JhaXNlX2NsYXNzX2V4Y2VwdGlvbnMoc2VsZik6CisKKyAgICAgICAgY2xhc3MgQUNsYXNzKEV4Y2VwdGlvbik6IHBhc3MKKyAgICAgICAgY2xhc3MgQkNsYXNzKEFDbGFzcyk6IHBhc3MKKyAgICAgICAgY2xhc3MgQ0NsYXNzKEV4Y2VwdGlvbik6IHBhc3MKKyAgICAgICAgY2xhc3MgRENsYXNzKEFDbGFzcyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaWdub3JlKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OiByYWlzZSBBQ2xhc3MoKQorICAgICAgICBleGNlcHQ6IHBhc3MKKworICAgICAgICB0cnk6IHJhaXNlIEFDbGFzcygpCisgICAgICAgIGV4Y2VwdCBBQ2xhc3M6IHBhc3MKKworICAgICAgICB0cnk6IHJhaXNlIEJDbGFzcygpCisgICAgICAgIGV4Y2VwdCBBQ2xhc3M6IHBhc3MKKworICAgICAgICB0cnk6IHJhaXNlIEJDbGFzcygpCisgICAgICAgIGV4Y2VwdCBDQ2xhc3M6IHNlbGYuZmFpbCgpCisgICAgICAgIGV4Y2VwdDogcGFzcworCisgICAgICAgIGEgPSBBQ2xhc3MoKQorICAgICAgICBiID0gQkNsYXNzKCkKKworICAgICAgICB0cnk6IHJhaXNlIEFDbGFzcywgYgorICAgICAgICBleGNlcHQgQkNsYXNzLCB2OgorICAgICAgICAgICAgaWYgdiAhPSBiOiBzZWxmLmZhaWwoInYhPWIiKQorICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgdHJ5OiByYWlzZSBiCisgICAgICAgIGV4Y2VwdCBBQ2xhc3MsIHY6CisgICAgICAgICAgICBpZiB2ICE9IGI6IHNlbGYuZmFpbCgidiE9YiBBQ2xhc3MiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQorCisgICAgICAgICMgbm90IGVub3VnaCBhcmd1bWVudHMKKyAgICAgICAgIyN0cnk6ICByYWlzZSBCQ2xhc3MsIGEKKyAgICAgICAgIyNleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgICMjZWxzZTogc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQorCisgICAgICAgIHRyeTogIHJhaXNlIERDbGFzcywgYQorICAgICAgICBleGNlcHQgRENsYXNzLCB2OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodiwgRENsYXNzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfZnVuY3Rpb25fb2JqZWN0cyhzZWxmKToKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiBOb25lJykKKyAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYTogTm9uZScpCisgICAgICAgIHNlbGYuZmFpbElmKGYgPT0gZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE6IGEnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE6IGEnKQorICAgICAgICBzZWxmLmZhaWxJZihmID09IGcpCisKKyAgICAgICAgZiA9IGV2YWwoJ2xhbWJkYSBhPTE6IGEnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE9MTogYScpCisgICAgICAgIHNlbGYuZmFpbElmKGYgPT0gZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiAwJykKKyAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYTogMScpCisgICAgICAgIHNlbGYuZmFpbElmKGYgPT0gZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiBOb25lJykKKyAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYSBhOiBOb25lJykKKyAgICAgICAgc2VsZi5mYWlsSWYoZiA9PSBnKQorCisgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYTogTm9uZScpCisgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYjogTm9uZScpCisgICAgICAgIHNlbGYuZmFpbElmKGYgPT0gZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE6IE5vbmUnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE9Tm9uZTogTm9uZScpCisgICAgICAgIHNlbGYuZmFpbElmKGYgPT0gZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE9MDogTm9uZScpCisgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYT0xOiBOb25lJykKKyAgICAgICAgc2VsZi5mYWlsSWYoZiA9PSBnKQogCiAKLXByaW50ICcyLiBPcGNvZGVzJwotcHJpbnQgJ1hYWCBOb3QgeWV0IGZ1bGx5IGltcGxlbWVudGVkJworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChPcGNvZGVUZXN0KQogCi1wcmludCAnMi4xIHRyeSBpbnNpZGUgZm9yIGxvb3AnCi1uID0gMAotZm9yIGkgaW4gcmFuZ2UoMTApOgotICAgIG4gPSBuK2kKLSAgICB0cnk6IDEvMAotICAgIGV4Y2VwdCBOYW1lRXJyb3I6IHBhc3MKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKLSAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCi0gICAgdHJ5OiBwYXNzCi0gICAgZXhjZXB0OiBwYXNzCi0gICAgdHJ5OiBwYXNzCi0gICAgZmluYWxseTogcGFzcwotICAgIG4gPSBuK2kKLWlmIG4gIT0gOTA6Ci0gICAgcmFpc2UgVGVzdEZhaWxlZCwgJ3RyeSBpbnNpZGUgZm9yJwotCi0KLXByaW50ICcyLjIgcmFpc2UgY2xhc3MgZXhjZXB0aW9ucycKLQotY2xhc3MgQUNsYXNzKEV4Y2VwdGlvbik6IHBhc3MKLWNsYXNzIEJDbGFzcyhBQ2xhc3MpOiBwYXNzCi1jbGFzcyBDQ2xhc3MoRXhjZXB0aW9uKTogcGFzcwotY2xhc3MgRENsYXNzKEFDbGFzcyk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGlnbm9yZSk6Ci0gICAgICAgIHBhc3MKLQotdHJ5OiByYWlzZSBBQ2xhc3MoKQotZXhjZXB0OiBwYXNzCi0KLXRyeTogcmFpc2UgQUNsYXNzKCkKLWV4Y2VwdCBBQ2xhc3M6IHBhc3MKLQotdHJ5OiByYWlzZSBCQ2xhc3MoKQotZXhjZXB0IEFDbGFzczogcGFzcwotCi10cnk6IHJhaXNlIEJDbGFzcygpCi1leGNlcHQgQ0NsYXNzOiByYWlzZSBUZXN0RmFpbGVkCi1leGNlcHQ6IHBhc3MKLQotYSA9IEFDbGFzcygpCi1iID0gQkNsYXNzKCkKLQotdHJ5OiByYWlzZSBBQ2xhc3MsIGIKLWV4Y2VwdCBCQ2xhc3MsIHY6Ci0gICAgaWYgdiAhPSBiOiByYWlzZSBUZXN0RmFpbGVkLCAidiE9YiIKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICJubyBleGNlcHRpb24iCi0KLXRyeTogcmFpc2UgYgotZXhjZXB0IEFDbGFzcywgdjoKLSAgICBpZiB2ICE9IGI6IHJhaXNlIFRlc3RGYWlsZWQsICJ2IT1iIEFDbGFzcyIKLQotIyBub3QgZW5vdWdoIGFyZ3VtZW50cwotIyN0cnk6ICByYWlzZSBCQ2xhc3MsIGEKLSMjZXhjZXB0IFR5cGVFcnJvcjogcGFzcwotCi10cnk6ICByYWlzZSBEQ2xhc3MsIGEKLWV4Y2VwdCBEQ2xhc3MsIHY6Ci0gICAgaWYgbm90IGlzaW5zdGFuY2UodiwgRENsYXNzKToKLSAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgInYgbm90IERDbGFzcyIKLQotcHJpbnQgJzIuMyBjb21wYXJpbmcgZnVuY3Rpb24gb2JqZWN0cycKLQotZiA9IGV2YWwoJ2xhbWJkYTogTm9uZScpCi1nID0gZXZhbCgnbGFtYmRhOiBOb25lJykKLWlmIGYgPT0gZzogcmFpc2UgVGVzdEZhaWxlZCwgImZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIHNhbWUiCi0KLWYgPSBldmFsKCdsYW1iZGEgYTogYScpCi1nID0gZXZhbCgnbGFtYmRhIGE6IGEnKQotaWYgZiA9PSBnOiByYWlzZSBUZXN0RmFpbGVkLCAiZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgc2FtZSIKLQotZiA9IGV2YWwoJ2xhbWJkYSBhPTE6IGEnKQotZyA9IGV2YWwoJ2xhbWJkYSBhPTE6IGEnKQotaWYgZiA9PSBnOiByYWlzZSBUZXN0RmFpbGVkLCAiZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgc2FtZSIKLQotZiA9IGV2YWwoJ2xhbWJkYTogMCcpCi1nID0gZXZhbCgnbGFtYmRhOiAxJykKLWlmIGYgPT0gZzogcmFpc2UgVGVzdEZhaWxlZAotCi1mID0gZXZhbCgnbGFtYmRhOiBOb25lJykKLWcgPSBldmFsKCdsYW1iZGEgYTogTm9uZScpCi1pZiBmID09IGc6IHJhaXNlIFRlc3RGYWlsZWQKLQotZiA9IGV2YWwoJ2xhbWJkYSBhOiBOb25lJykKLWcgPSBldmFsKCdsYW1iZGEgYjogTm9uZScpCi1pZiBmID09IGc6IHJhaXNlIFRlc3RGYWlsZWQKLQotZiA9IGV2YWwoJ2xhbWJkYSBhOiBOb25lJykKLWcgPSBldmFsKCdsYW1iZGEgYT1Ob25lOiBOb25lJykKLWlmIGYgPT0gZzogcmFpc2UgVGVzdEZhaWxlZAotCi1mID0gZXZhbCgnbGFtYmRhIGE9MDogTm9uZScpCi1nID0gZXZhbCgnbGFtYmRhIGE9MTogTm9uZScpCi1pZiBmID09IGc6IHJhaXNlIFRlc3RGYWlsZWQKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQppbmRleCBhOGI4NTUwLi42NDcxZjU4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CkBAIC0xLDE5ICsxLDIzIEBACiAjIFRlc3QgdG8gc2VlIGlmIG9wZW5wdHkgd29ya3MuIChCdXQgZG9uJ3Qgd29ycnkgaWYgaXQgaXNuJ3QgYXZhaWxhYmxlLikKIAotaW1wb3J0IG9zCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0RmFpbGVkLCBUZXN0U2tpcHBlZAoraW1wb3J0IG9zLCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBUZXN0U2tpcHBlZAogCi10cnk6Ci0gICAgaWYgdmVyYm9zZToKLSAgICAgICAgcHJpbnQgIkNhbGxpbmcgb3Mub3BlbnB0eSgpIgotICAgIG1hc3Rlciwgc2xhdmUgPSBvcy5vcGVucHR5KCkKLSAgICBpZiB2ZXJib3NlOgotICAgICAgICBwcmludCAiKG1hc3Rlciwgc2xhdmUpID0gKCVkLCAlZCkiJShtYXN0ZXIsIHNsYXZlKQotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgoraWYgbm90IGhhc2F0dHIob3MsICJvcGVucHR5Iik6CiAgICAgcmFpc2UgVGVzdFNraXBwZWQsICJObyBvcGVucHR5KCkgYXZhaWxhYmxlLiIKIAotaWYgbm90IG9zLmlzYXR0eShzbGF2ZSk6Ci0gICAgcmFpc2UgVGVzdEZhaWxlZCwgIlNsYXZlLWVuZCBvZiBwdHkgaXMgbm90IGEgdGVybWluYWwuIgogCi1vcy53cml0ZShzbGF2ZSwgJ1BpbmchJykKLXByaW50IG9zLnJlYWQobWFzdGVyLCAxMDI0KQorY2xhc3MgT3BlbnB0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBtYXN0ZXIsIHNsYXZlID0gb3Mub3BlbnB0eSgpCisgICAgICAgIGlmIG5vdCBvcy5pc2F0dHkoc2xhdmUpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTbGF2ZS1lbmQgb2YgcHR5IGlzIG5vdCBhIHRlcm1pbmFsLiIpCisKKyAgICAgICAgb3Mud3JpdGUoc2xhdmUsICdQaW5nIScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChtYXN0ZXIsIDEwMjQpLCAnUGluZyEnKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE9wZW5wdHlUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29zLnB5IGIvTGliL3Rlc3QvdGVzdF9vcy5weQppbmRleCBiZjBlMTk2Li4xYzg3ZDA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3MucHkKQEAgLTIyMyw2ICsyMjMsMjMgQEAKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiB0ZXN0X3V0aW1lX2RpcihzZWxmKToKKyAgICAgICAgZGVsdGEgPSAxMDAwMDAwCisgICAgICAgIHN0ID0gb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAjIHJvdW5kIHRvIGludCwgYmVjYXVzZSBzb21lIHN5c3RlbXMgbWF5IHN1cHBvcnQgc3ViLXNlY29uZAorICAgICAgICAjIHRpbWUgc3RhbXBzIGluIHN0YXQsIGJ1dCBub3QgaW4gdXRpbWUuCisgICAgICAgIG9zLnV0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4sIChzdC5zdF9hdGltZSwgaW50KHN0LnN0X210aW1lLWRlbHRhKSkpCisgICAgICAgIHN0MiA9IG9zLnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3QyLnN0X210aW1lLCBpbnQoc3Quc3RfbXRpbWUtZGVsdGEpKQorCisgICAgIyBSZXN0cmljdCB0ZXN0IHRvIFdpbjMyLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgb3RoZXIKKyAgICAjIHN5c3RlbXMgc3VwcG9ydCBjZW50aXNlY29uZHMKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgZGVmIHRlc3RfMTU2NTE1MChzZWxmKToKKyAgICAgICAgICAgIHQxID0gMTE1OTE5NTAzOS4yNQorICAgICAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgKHQxLCB0MSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5zdGF0KHNlbGYuZm5hbWUpLnN0X210aW1lLCB0MSkKKwogZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCiAKIGNsYXNzIEVudmlyb25UZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CmluZGV4IDk2Mzg0Y2QuLjBiZjEyMTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CkBAIC0xODMsNiArMTgzLDQ0IEBACiAgICAgZGVmIHRlc3RfYXNzZXJ0KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhc3NlcnQgYWxvIDwgYWhpIGFuZCBibG8gPCBiaGlcbiIpCiAKKyAgICBkZWYgdGVzdF9wb3NpdGlvbihzZWxmKToKKyAgICAgICAgIyBBbiBhYnNvbHV0ZWx5IG1pbmltYWwgdGVzdCBvZiBwb3NpdGlvbiBpbmZvcm1hdGlvbi4gIEJldHRlcgorICAgICAgICAjIHRlc3RzIHdvdWxkIGJlIGEgYmlnIHByb2plY3QuCisgICAgICAgIGNvZGUgPSAiZGVmIGYoeCk6XG4gICAgcmV0dXJuIHggKyAxXG4iCisgICAgICAgIHN0MSA9IHBhcnNlci5zdWl0ZShjb2RlKQorICAgICAgICBzdDIgPSBzdDEudG90dXBsZShsaW5lX2luZm89MSwgY29sX2luZm89MSkKKworICAgICAgICBkZWYgd2Fsayh0cmVlKToKKyAgICAgICAgICAgIG5vZGVfdHlwZSA9IHRyZWVbMF0KKyAgICAgICAgICAgIG5leHQgPSB0cmVlWzFdCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5leHQsIHR1cGxlKToKKyAgICAgICAgICAgICAgICBmb3IgZWx0IGluIHRyZWVbMTpdOgorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiB3YWxrKGVsdCk6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHlpZWxkIHRyZWUKKworICAgICAgICB0ZXJtaW5hbHMgPSBsaXN0KHdhbGsoc3QyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbCisgICAgICAgICAgICAoMSwgJ2RlZicsIDEsIDApLAorICAgICAgICAgICAgKDEsICdmJywgMSwgNCksCisgICAgICAgICAgICAoNywgJygnLCAxLCA1KSwKKyAgICAgICAgICAgICgxLCAneCcsIDEsIDYpLAorICAgICAgICAgICAgKDgsICcpJywgMSwgNyksCisgICAgICAgICAgICAoMTEsICc6JywgMSwgOCksCisgICAgICAgICAgICAoNCwgJycsIDEsIDkpLAorICAgICAgICAgICAgKDUsICcnLCAyLCAtMSksCisgICAgICAgICAgICAoMSwgJ3JldHVybicsIDIsIDQpLAorICAgICAgICAgICAgKDEsICd4JywgMiwgMTEpLAorICAgICAgICAgICAgKDE0LCAnKycsIDIsIDEzKSwKKyAgICAgICAgICAgICgyLCAnMScsIDIsIDE1KSwKKyAgICAgICAgICAgICg0LCAnJywgMiwgMTYpLAorICAgICAgICAgICAgKDYsICcnLCAyLCAtMSksCisgICAgICAgICAgICAoNCwgJycsIDIsIC0xKSwKKyAgICAgICAgICAgICgwLCAnJywgMiwgLTEpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbHMpCisKKwogIwogIyAgU2Vjb25kLCB3ZSB0YWtlICppbnZhbGlkKiB0cmVlcyBhbmQgbWFrZSBzdXJlIHdlIGdldCBQYXJzZXJFcnJvcgogIyAgcmVqZWN0aW9ucyBmb3IgdGhlbS4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKaW5kZXggYmU3ZDRlOC4uNzc5YTIwYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKQEAgLTE2MCw2ICsxNjAsNDEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRfKCcoTm9uZSknIG5vdCBpbiBhc20pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAxKQogCisgICAgZGVmIHRlc3RfZWxpbV9qdW1wX3RvX3JldHVybihzZWxmKToKKyAgICAgICAgIyBKVU1QX0ZPUldBUkQgdG8gUkVUVVJOIC0tPiAgUkVUVVJOCisgICAgICAgIGRlZiBmKGNvbmQsIHRydWVfdmFsdWUsIGZhbHNlX3ZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiB0cnVlX3ZhbHVlIGlmIGNvbmQgZWxzZSBmYWxzZV92YWx1ZQorICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQorICAgICAgICBzZWxmLmFzc2VydF8oJ0pVTVBfRk9SV0FSRCcgbm90IGluIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKCdKVU1QX0FCU09MVVRFJyBub3QgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKKworICAgIGRlZiB0ZXN0X2VsaW1fanVtcF9hZnRlcl9yZXR1cm4xKHNlbGYpOgorICAgICAgICAjIEVsaW1pbmF0ZSBkZWFkIGNvZGU6IGp1bXBzIGltbWVkaWF0ZWx5IGFmdGVyIHJldHVybnMgY2FuJ3QgYmUgcmVhY2hlZAorICAgICAgICBkZWYgZihjb25kMSwgY29uZDIpOgorICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiAxCisgICAgICAgICAgICBpZiBjb25kMjogcmV0dXJuIDIKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0CisgICAgICAgICAgICAgICAgcmV0dXJuIDUKKyAgICAgICAgICAgIHJldHVybiA2CisgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0XygnSlVNUF9GT1JXQVJEJyBub3QgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydF8oJ0pVTVBfQUJTT0xVVEUnIG5vdCBpbiBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCA2KQorCisgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjIoc2VsZik6CisgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCisgICAgICAgIGRlZiBmKGNvbmQxLCBjb25kMik6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAorICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQorICAgICAgICBzZWxmLmFzc2VydF8oJ0pVTVBfRk9SV0FSRCcgbm90IGluIGFzbSkKKyAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUgb25lIGp1bXAgZm9yIHRoZSB3aGlsZSBsb29wLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdKVU1QX0FCU09MVVRFJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAyKQogCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzUyLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkKaW5kZXggNzNjZmZkMi4uNzU2MTBiNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkKQEAgLTE1LDggKzE1LDcgQEAKICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoRXhjZXB0aW9uLCBvYmplY3QpKQogCiAgICAgZGVmIHZlcmlmeV9pbnN0YW5jZV9pbnRlcmZhY2Uoc2VsZiwgaW5zKToKLSAgICAgICAgZm9yIGF0dHIgaW4gKCJhcmdzIiwgIm1lc3NhZ2UiLCAiX19zdHJfXyIsICJfX3VuaWNvZGVfXyIsICJfX3JlcHJfXyIsCi0gICAgICAgICAgICAgICAgIl9fZ2V0aXRlbV9fIik6CisgICAgICAgIGZvciBhdHRyIGluICgiYXJncyIsICJtZXNzYWdlIiwgIl9fc3RyX18iLCAiX19yZXByX18iLCAiX19nZXRpdGVtX18iKToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNhdHRyKGlucywgYXR0ciksICIlcyBtaXNzaW5nICVzIGF0dHJpYnV0ZSIgJQogICAgICAgICAgICAgICAgICAgICAoaW5zLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0cikpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQppbmRleCAzYTQ4YmNlLi42MGNkM2Y0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CkBAIC0xLDcgKzEsNyBAQAogIyBUZXN0IGNhc2UgZm9yIHRoZSBvcy5wb2xsKCkgZnVuY3Rpb24KIAotaW1wb3J0IHN5cywgb3MsIHNlbGVjdCwgcmFuZG9tCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UsIFRlc3RTa2lwcGVkLCBURVNURk4KK2ltcG9ydCBzeXMsIG9zLCBzZWxlY3QsIHJhbmRvbSwgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RTa2lwcGVkLCBURVNURk4sIHJ1bl91bml0dGVzdAogCiB0cnk6CiAgICAgc2VsZWN0LnBvbGwKQEAgLTE2LDE3NyArMTYsMTQxIEBACiAgICAgICAgICAgICBtYXRjaC5hcHBlbmQoZmQpCiAgICAgcmV0dXJuIG1hdGNoCiAKLWRlZiB0ZXN0X3BvbGwxKCk6Ci0gICAgIiIiQmFzaWMgZnVuY3Rpb25hbCB0ZXN0IG9mIHBvbGwgb2JqZWN0CitjbGFzcyBQb2xsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgQ3JlYXRlIGEgYnVuY2ggb2YgcGlwZSBhbmQgdGVzdCB0aGF0IHBvbGwgd29ya3Mgd2l0aCB0aGVtLgotICAgICIiIgotICAgIHByaW50ICdSdW5uaW5nIHBvbGwgdGVzdCAxJwotICAgIHAgPSBzZWxlY3QucG9sbCgpCisgICAgZGVmIHRlc3RfcG9sbDEoc2VsZik6CisgICAgICAgICMgQmFzaWMgZnVuY3Rpb25hbCB0ZXN0IG9mIHBvbGwgb2JqZWN0CisgICAgICAgICMgQ3JlYXRlIGEgYnVuY2ggb2YgcGlwZSBhbmQgdGVzdCB0aGF0IHBvbGwgd29ya3Mgd2l0aCB0aGVtLgogCi0gICAgTlVNX1BJUEVTID0gMTIKLSAgICBNU0cgPSAiIFRoaXMgaXMgYSB0ZXN0LiIKLSAgICBNU0dfTEVOID0gbGVuKE1TRykKLSAgICByZWFkZXJzID0gW10KLSAgICB3cml0ZXJzID0gW10KLSAgICByMncgPSB7fQotICAgIHcyciA9IHt9CisgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCiAKLSAgICBmb3IgaSBpbiByYW5nZShOVU1fUElQRVMpOgotICAgICAgICByZCwgd3IgPSBvcy5waXBlKCkKLSAgICAgICAgcC5yZWdpc3RlcihyZCwgc2VsZWN0LlBPTExJTikKLSAgICAgICAgcC5yZWdpc3Rlcih3ciwgc2VsZWN0LlBPTExPVVQpCi0gICAgICAgIHJlYWRlcnMuYXBwZW5kKHJkKQotICAgICAgICB3cml0ZXJzLmFwcGVuZCh3cikKLSAgICAgICAgcjJ3W3JkXSA9IHdyCi0gICAgICAgIHcyclt3cl0gPSByZAorICAgICAgICBOVU1fUElQRVMgPSAxMgorICAgICAgICBNU0cgPSAiIFRoaXMgaXMgYSB0ZXN0LiIKKyAgICAgICAgTVNHX0xFTiA9IGxlbihNU0cpCisgICAgICAgIHJlYWRlcnMgPSBbXQorICAgICAgICB3cml0ZXJzID0gW10KKyAgICAgICAgcjJ3ID0ge30KKyAgICAgICAgdzJyID0ge30KIAotICAgIHdoaWxlIHdyaXRlcnM6Ci0gICAgICAgIHJlYWR5ID0gcC5wb2xsKCkKLSAgICAgICAgcmVhZHlfd3JpdGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIHNlbGVjdC5QT0xMT1VUKQotICAgICAgICBpZiBub3QgcmVhZHlfd3JpdGVyczoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIm5vIHBpcGVzIHJlYWR5IGZvciB3cml0aW5nIgotICAgICAgICB3ciA9IHJhbmRvbS5jaG9pY2UocmVhZHlfd3JpdGVycykKLSAgICAgICAgb3Mud3JpdGUod3IsIE1TRykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX1BJUEVTKToKKyAgICAgICAgICAgIHJkLCB3ciA9IG9zLnBpcGUoKQorICAgICAgICAgICAgcC5yZWdpc3RlcihyZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgICAgIHAucmVnaXN0ZXIod3IsIHNlbGVjdC5QT0xMT1VUKQorICAgICAgICAgICAgcmVhZGVycy5hcHBlbmQocmQpCisgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3cikKKyAgICAgICAgICAgIHIyd1tyZF0gPSB3cgorICAgICAgICAgICAgdzJyW3dyXSA9IHJkCiAKLSAgICAgICAgcmVhZHkgPSBwLnBvbGwoKQotICAgICAgICByZWFkeV9yZWFkZXJzID0gZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgc2VsZWN0LlBPTExJTikKLSAgICAgICAgaWYgbm90IHJlYWR5X3JlYWRlcnM6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJubyBwaXBlcyByZWFkeSBmb3IgcmVhZGluZyIKLSAgICAgICAgcmQgPSByYW5kb20uY2hvaWNlKHJlYWR5X3JlYWRlcnMpCi0gICAgICAgIGJ1ZiA9IG9zLnJlYWQocmQsIE1TR19MRU4pCi0gICAgICAgIHZlcmlmeShsZW4oYnVmKSA9PSBNU0dfTEVOKQotICAgICAgICBwcmludCBidWYKLSAgICAgICAgb3MuY2xvc2UocjJ3W3JkXSkgOyBvcy5jbG9zZSggcmQgKQotICAgICAgICBwLnVucmVnaXN0ZXIoIHIyd1tyZF0gKQotICAgICAgICBwLnVucmVnaXN0ZXIoIHJkICkKLSAgICAgICAgd3JpdGVycy5yZW1vdmUocjJ3W3JkXSkKKyAgICAgICAgYnVmcyA9IFtdCiAKLSAgICBwb2xsX3VuaXRfdGVzdHMoKQotICAgIHByaW50ICdQb2xsIHRlc3QgMSBjb21wbGV0ZScKKyAgICAgICAgd2hpbGUgd3JpdGVyczoKKyAgICAgICAgICAgIHJlYWR5ID0gcC5wb2xsKCkKKyAgICAgICAgICAgIHJlYWR5X3dyaXRlcnMgPSBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBzZWxlY3QuUE9MTE9VVCkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkeV93cml0ZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIm5vIHBpcGVzIHJlYWR5IGZvciB3cml0aW5nIgorICAgICAgICAgICAgd3IgPSByYW5kb20uY2hvaWNlKHJlYWR5X3dyaXRlcnMpCisgICAgICAgICAgICBvcy53cml0ZSh3ciwgTVNHKQogCi1kZWYgcG9sbF91bml0X3Rlc3RzKCk6Ci0gICAgIyByZXR1cm5zIE5WQUwgZm9yIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yCi0gICAgRkQgPSA0MgotICAgIHRyeToKLSAgICAgICAgb3MuY2xvc2UoRkQpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBwID0gc2VsZWN0LnBvbGwoKQotICAgIHAucmVnaXN0ZXIoRkQpCi0gICAgciA9IHAucG9sbCgpCi0gICAgdmVyaWZ5KHJbMF0gPT0gKEZELCBzZWxlY3QuUE9MTE5WQUwpKQorICAgICAgICAgICAgcmVhZHkgPSBwLnBvbGwoKQorICAgICAgICAgICAgcmVhZHlfcmVhZGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIHNlbGVjdC5QT0xMSU4pCisgICAgICAgICAgICBpZiBub3QgcmVhZHlfcmVhZGVyczoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJubyBwaXBlcyByZWFkeSBmb3IgcmVhZGluZyIKKyAgICAgICAgICAgIHJkID0gcmFuZG9tLmNob2ljZShyZWFkeV9yZWFkZXJzKQorICAgICAgICAgICAgYnVmID0gb3MucmVhZChyZCwgTVNHX0xFTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIE1TR19MRU4pCisgICAgICAgICAgICBidWZzLmFwcGVuZChidWYpCisgICAgICAgICAgICBvcy5jbG9zZShyMndbcmRdKSA7IG9zLmNsb3NlKCByZCApCisgICAgICAgICAgICBwLnVucmVnaXN0ZXIoIHIyd1tyZF0gKQorICAgICAgICAgICAgcC51bnJlZ2lzdGVyKCByZCApCisgICAgICAgICAgICB3cml0ZXJzLnJlbW92ZShyMndbcmRdKQogCi0gICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCi0gICAgZmQgPSBmLmZpbGVubygpCi0gICAgcCA9IHNlbGVjdC5wb2xsKCkKLSAgICBwLnJlZ2lzdGVyKGYpCi0gICAgciA9IHAucG9sbCgpCi0gICAgdmVyaWZ5KHJbMF1bMF0gPT0gZmQpCi0gICAgZi5jbG9zZSgpCi0gICAgciA9IHAucG9sbCgpCi0gICAgdmVyaWZ5KHJbMF0gPT0gKGZkLCBzZWxlY3QuUE9MTE5WQUwpKQotICAgIG9zLnVubGluayhURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmcywgW01TR10gKiBOVU1fUElQRVMpCiAKLSAgICAjIHR5cGUgZXJyb3IgZm9yIGludmFsaWQgYXJndW1lbnRzCi0gICAgcCA9IHNlbGVjdC5wb2xsKCkKLSAgICB0cnk6Ci0gICAgICAgIHAucmVnaXN0ZXIocCkKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQgIkJvZ3VzIHJlZ2lzdGVyIGNhbGwgZGlkIG5vdCByYWlzZSBUeXBlRXJyb3IiCi0gICAgdHJ5OgotICAgICAgICBwLnVucmVnaXN0ZXIocCkKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQgIkJvZ3VzIHVucmVnaXN0ZXIgY2FsbCBkaWQgbm90IHJhaXNlIFR5cGVFcnJvciIKKyAgICBkZWYgcG9sbF91bml0X3Rlc3RzKHNlbGYpOgorICAgICAgICAjIHJldHVybnMgTlZBTCBmb3IgaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgRkQgPSA0MgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jbG9zZShGRCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCisgICAgICAgIHAucmVnaXN0ZXIoRkQpCisgICAgICAgIHIgPSBwLnBvbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbMF0sIChGRCwgc2VsZWN0LlBPTExOVkFMKSkKIAotICAgICMgY2FuJ3QgdW5yZWdpc3RlciBub24tZXhpc3RlbnQgb2JqZWN0Ci0gICAgcCA9IHNlbGVjdC5wb2xsKCkKLSAgICB0cnk6Ci0gICAgICAgIHAudW5yZWdpc3RlcigzKQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICJCb2d1cyB1bnJlZ2lzdGVyIGNhbGwgZGlkIG5vdCByYWlzZSBLZXlFcnJvciIKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCisgICAgICAgIGZkID0gZi5maWxlbm8oKQorICAgICAgICBwID0gc2VsZWN0LnBvbGwoKQorICAgICAgICBwLnJlZ2lzdGVyKGYpCisgICAgICAgIHIgPSBwLnBvbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbMF1bMF0sIGZkKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgciA9IHAucG9sbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclswXSwgKGZkLCBzZWxlY3QuUE9MTE5WQUwpKQorICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQogCi0gICAgIyBUZXN0IGVycm9yIGNhc2VzCi0gICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgY2xhc3MgTm9wZToKLSAgICAgICAgcGFzcworICAgICAgICAjIHR5cGUgZXJyb3IgZm9yIGludmFsaWQgYXJndW1lbnRzCisgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcC5yZWdpc3RlciwgcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwLnVucmVnaXN0ZXIsIHApCiAKLSAgICBjbGFzcyBBbG1vc3Q6Ci0gICAgICAgIGRlZiBmaWxlbm8oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gJ2ZpbGVubycKKyAgICAgICAgIyBjYW4ndCB1bnJlZ2lzdGVyIG5vbi1leGlzdGVudCBvYmplY3QKKyAgICAgICAgcCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHAudW5yZWdpc3RlciwgMykKIAotICAgIHRyeToKLSAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoIE5vcGUoKSwgMCApCi0gICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcwotICAgIGVsc2U6IHByaW50ICdleHBlY3RlZCBUeXBlRXJyb3IgZXhjZXB0aW9uLCBub3QgcmFpc2VkJworICAgICAgICAjIFRlc3QgZXJyb3IgY2FzZXMKKyAgICAgICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCisgICAgICAgIGNsYXNzIE5vcGU6CisgICAgICAgICAgICBwYXNzCiAKLSAgICB0cnk6Ci0gICAgICAgIHBvbGxzdGVyLnJlZ2lzdGVyKCBBbG1vc3QoKSwgMCApCi0gICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcwotICAgIGVsc2U6IHByaW50ICdleHBlY3RlZCBUeXBlRXJyb3IgZXhjZXB0aW9uLCBub3QgcmFpc2VkJworICAgICAgICBjbGFzcyBBbG1vc3Q6CisgICAgICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZmlsZW5vJwogCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9sbHN0ZXIucmVnaXN0ZXIsIE5vcGUoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb2xsc3Rlci5yZWdpc3RlciwgQWxtb3N0KCksIDApCiAKLSMgQW5vdGhlciB0ZXN0IGNhc2UgZm9yIHBvbGwoKS4gIFRoaXMgaXMgY29waWVkIGZyb20gdGhlIHRlc3QgY2FzZSBmb3IKLSMgc2VsZWN0KCksIG1vZGlmaWVkIHRvIHVzZSBwb2xsKCkgaW5zdGVhZC4KKyAgICAjIEFub3RoZXIgdGVzdCBjYXNlIGZvciBwb2xsKCkuICBUaGlzIGlzIGNvcGllZCBmcm9tIHRoZSB0ZXN0IGNhc2UgZm9yCisgICAgIyBzZWxlY3QoKSwgbW9kaWZpZWQgdG8gdXNlIHBvbGwoKSBpbnN0ZWFkLgogCi1kZWYgdGVzdF9wb2xsMigpOgotICAgIHByaW50ICdSdW5uaW5nIHBvbGwgdGVzdCAyJwotICAgIGNtZCA9ICdmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvIHRlc3RpbmcuLi47IHNsZWVwIDE7IGRvbmUnCi0gICAgcCA9IG9zLnBvcGVuKGNtZCwgJ3InKQotICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQotICAgIHBvbGxzdGVyLnJlZ2lzdGVyKCBwLCBzZWxlY3QuUE9MTElOICkKLSAgICBmb3IgdG91dCBpbiAoMCwgMTAwMCwgMjAwMCwgNDAwMCwgODAwMCwgMTYwMDApICsgKC0xLCkqMTA6Ci0gICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAndGltZW91dCA9JywgdG91dAotICAgICAgICBmZGxpc3QgPSBwb2xsc3Rlci5wb2xsKHRvdXQpCi0gICAgICAgIGlmIChmZGxpc3QgPT0gW10pOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZmQsIGZsYWdzID0gZmRsaXN0WzBdCi0gICAgICAgIGlmIGZsYWdzICYgc2VsZWN0LlBPTExIVVA6Ci0gICAgICAgICAgICBsaW5lID0gcC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBsaW5lICE9ICIiOgotICAgICAgICAgICAgICAgIHByaW50ICdlcnJvcjogcGlwZSBzZWVtcyB0byBiZSBjbG9zZWQsIGJ1dCBzdGlsbCByZXR1cm5zIGRhdGEnCi0gICAgICAgICAgICBjb250aW51ZQorICAgIGRlZiB0ZXN0X3BvbGwyKHNlbGYpOgorICAgICAgICBjbWQgPSAnZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gZWNobyB0ZXN0aW5nLi4uOyBzbGVlcCAxOyBkb25lJworICAgICAgICBwID0gb3MucG9wZW4oY21kLCAncicpCisgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQorICAgICAgICBwb2xsc3Rlci5yZWdpc3RlciggcCwgc2VsZWN0LlBPTExJTiApCisgICAgICAgIGZvciB0b3V0IGluICgwLCAxMDAwLCAyMDAwLCA0MDAwLCA4MDAwLCAxNjAwMCkgKyAoLTEsKSoxMDoKKyAgICAgICAgICAgIGZkbGlzdCA9IHBvbGxzdGVyLnBvbGwodG91dCkKKyAgICAgICAgICAgIGlmIChmZGxpc3QgPT0gW10pOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmZCwgZmxhZ3MgPSBmZGxpc3RbMF0KKyAgICAgICAgICAgIGlmIGZsYWdzICYgc2VsZWN0LlBPTExIVVA6CisgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gIiI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3I6IHBpcGUgc2VlbXMgdG8gYmUgY2xvc2VkLCBidXQgc3RpbGwgcmV0dXJucyBkYXRhJykKKyAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgIGVsaWYgZmxhZ3MgJiBzZWxlY3QuUE9MTElOOgotICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCByZXByKGxpbmUpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBwcmludCAnRU9GJwotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgJ1VuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIGZyb20gc2VsZWN0LnBvbGw6JywgZmRsaXN0Ci0gICAgcC5jbG9zZSgpCi0gICAgcHJpbnQgJ1BvbGwgdGVzdCAyIGNvbXBsZXRlJworICAgICAgICAgICAgZWxpZiBmbGFncyAmIHNlbGVjdC5QT0xMSU46CisgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgZnJvbSBzZWxlY3QucG9sbDogJXMnICUgZmRsaXN0KQorICAgICAgICBwLmNsb3NlKCkKIAotZGVmIHRlc3RfcG9sbDMoKToKLSAgICAjIHRlc3QgaW50IG92ZXJmbG93Ci0gICAgcHJpbnQgJ1J1bm5pbmcgcG9sbCB0ZXN0IDMnCi0gICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgcG9sbHN0ZXIucmVnaXN0ZXIoMSkKKyAgICBkZWYgdGVzdF9wb2xsMyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGludCBvdmVyZmxvdworICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoMSkKIAotICAgIHRyeToKLSAgICAgICAgcG9sbHN0ZXIucG9sbCgxTCA8PCA2NCkKLSAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICdFeHBlY3RlZCBPdmVyZmxvd0Vycm9yIHdpdGggZXhjZXNzaXZlIHRpbWVvdXQnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIDFMIDw8IDY0KQogCi0gICAgeCA9IDIgKyAzCi0gICAgaWYgeCAhPSA1OgotICAgICAgICBwcmludCAnT3ZlcmZsb3cgbXVzdCBoYXZlIG9jY3VycmVkJwotICAgIHByaW50ICdQb2xsIHRlc3QgMyBjb21wbGV0ZScKKyAgICAgICAgeCA9IDIgKyAzCisgICAgICAgIGlmIHggIT0gNToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnT3ZlcmZsb3cgbXVzdCBoYXZlIG9jY3VycmVkJykKIAorZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChQb2xsVGVzdHMpCiAKLXRlc3RfcG9sbDEoKQotdGVzdF9wb2xsMigpCi10ZXN0X3BvbGwzKCkKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5IGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKaW5kZXggMDE3MDNiNS4uN2M5ZDRhYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKQEAgLTk1LDYgKzk1LDkgQEAKICAgICAgICAgICAgIHB5X2l0ZW0gPSBnZXRhdHRyKG1vZHVsZSwgbmFtZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHB5Y2xici5GdW5jdGlvbik6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocHlfaXRlbSwgKEZ1bmN0aW9uVHlwZSwgQnVpbHRpbkZ1bmN0aW9uVHlwZSkpKQorICAgICAgICAgICAgICAgIGlmIHB5X2l0ZW0uX19tb2R1bGVfXyAhPSBtb2R1bGVOYW1lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAgICMgc2tpcCBmdW5jdGlvbnMgdGhhdCBjYW1lIGZyb20gc29tZXdoZXJlIGVsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhweV9pdGVtLl9fbW9kdWxlX18sIHZhbHVlLm1vZHVsZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UocHlfaXRlbSwgKENsYXNzVHlwZSwgdHlwZSkpKQogICAgICAgICAgICAgICAgIGlmIHB5X2l0ZW0uX19tb2R1bGVfXyAhPSBtb2R1bGVOYW1lOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKaW5kZXggZTRlNTkyYS4uNzc3ZTg1YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CkBAIC0xLDE4NiArMSwxOTAgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgVGVzdEZhaWxlZCwgY2hlY2tfc3ludGF4LCB2ZXJlcQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjaGVja19zeW50YXhfZXJyb3IsIHJ1bl91bml0dGVzdAogCiBpbXBvcnQgd2FybmluZ3MKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCByImltcG9ydCBcKiIsIFN5bnRheFdhcm5pbmcsICI8dGVzdCBzdHJpbmc+IikKIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCByImltcG9ydCBcKiIsIFN5bnRheFdhcm5pbmcsICI8c3RyaW5nPiIpCiAKLXByaW50ICIxLiBzaW1wbGUgbmVzdGluZyIKK2NsYXNzIFNjb3BlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi1kZWYgbWFrZV9hZGRlcih4KToKLSAgICBkZWYgYWRkZXIoeSk6Ci0gICAgICAgIHJldHVybiB4ICsgeQotICAgIHJldHVybiBhZGRlcgorICAgIGRlZiB0ZXN0U2ltcGxlTmVzdGluZyhzZWxmKToKIAotaW5jID0gbWFrZV9hZGRlcigxKQotcGx1czEwID0gbWFrZV9hZGRlcigxMCkKLQotdmVyZXEoaW5jKDEpLCAyKQotdmVyZXEocGx1czEwKC0yKSwgOCkKLQotcHJpbnQgIjIuIGV4dHJhIG5lc3RpbmciCi0KLWRlZiBtYWtlX2FkZGVyMih4KToKLSAgICBkZWYgZXh0cmEoKTogIyBjaGVjayBmcmVldmFycyBwYXNzaW5nIHRocm91Z2ggbm9uLXVzZSBzY29wZXMKLSAgICAgICAgZGVmIGFkZGVyKHkpOgotICAgICAgICAgICAgcmV0dXJuIHggKyB5Ci0gICAgICAgIHJldHVybiBhZGRlcgotICAgIHJldHVybiBleHRyYSgpCi0KLWluYyA9IG1ha2VfYWRkZXIyKDEpCi1wbHVzMTAgPSBtYWtlX2FkZGVyMigxMCkKLQotdmVyZXEoaW5jKDEpLCAyKQotdmVyZXEocGx1czEwKC0yKSwgOCkKLQotcHJpbnQgIjMuIHNpbXBsZSBuZXN0aW5nICsgcmViaW5kaW5nIgotCi1kZWYgbWFrZV9hZGRlcjMoeCk6Ci0gICAgZGVmIGFkZGVyKHkpOgotICAgICAgICByZXR1cm4geCArIHkKLSAgICB4ID0geCArIDEgIyBjaGVjayB0cmFja2luZyBvZiBhc3NpZ25tZW50IHRvIHggaW4gZGVmaW5pbmcgc2NvcGUKLSAgICByZXR1cm4gYWRkZXIKLQotaW5jID0gbWFrZV9hZGRlcjMoMCkKLXBsdXMxMCA9IG1ha2VfYWRkZXIzKDkpCi0KLXZlcmVxKGluYygxKSwgMikKLXZlcmVxKHBsdXMxMCgtMiksIDgpCi0KLXByaW50ICI0LiBuZXN0aW5nIHdpdGggZ2xvYmFsIGJ1dCBubyBmcmVlIgotCi1kZWYgbWFrZV9hZGRlcjQoKTogIyBYWFggYWRkIGV4dGEgbGV2ZWwgb2YgaW5kaXJlY3Rpb24KLSAgICBkZWYgbmVzdCgpOgotICAgICAgICBkZWYgbmVzdCgpOgorICAgICAgICBkZWYgbWFrZV9hZGRlcih4KToKICAgICAgICAgICAgIGRlZiBhZGRlcih5KToKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsX3ggKyB5ICMgY2hlY2sgdGhhdCBwbGFpbiBvbGQgZ2xvYmFscyB3b3JrCisgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB5CiAgICAgICAgICAgICByZXR1cm4gYWRkZXIKLSAgICAgICAgcmV0dXJuIG5lc3QoKQotICAgIHJldHVybiBuZXN0KCkKIAotZ2xvYmFsX3ggPSAxCi1hZGRlciA9IG1ha2VfYWRkZXI0KCkKLXZlcmVxKGFkZGVyKDEpLCAyKQorICAgICAgICBpbmMgPSBtYWtlX2FkZGVyKDEpCisgICAgICAgIHBsdXMxMCA9IG1ha2VfYWRkZXIoMTApCiAKLWdsb2JhbF94ID0gMTAKLXZlcmVxKGFkZGVyKC0yKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKC0yKSwgOCkKIAotcHJpbnQgIjUuIG5lc3RpbmcgdGhyb3VnaCBjbGFzcyIKKyAgICBkZWYgdGVzdEV4dHJhTmVzdGluZyhzZWxmKToKIAotZGVmIG1ha2VfYWRkZXI1KHgpOgotICAgIGNsYXNzIEFkZGVyOgotICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgeSk6Ci0gICAgICAgICAgICByZXR1cm4geCArIHkKLSAgICByZXR1cm4gQWRkZXIoKQorICAgICAgICBkZWYgbWFrZV9hZGRlcjIoeCk6CisgICAgICAgICAgICBkZWYgZXh0cmEoKTogIyBjaGVjayBmcmVldmFycyBwYXNzaW5nIHRocm91Z2ggbm9uLXVzZSBzY29wZXMKKyAgICAgICAgICAgICAgICBkZWYgYWRkZXIoeSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeQorICAgICAgICAgICAgICAgIHJldHVybiBhZGRlcgorICAgICAgICAgICAgcmV0dXJuIGV4dHJhKCkKIAotaW5jID0gbWFrZV9hZGRlcjUoMSkKLXBsdXMxMCA9IG1ha2VfYWRkZXI1KDEwKQorICAgICAgICBpbmMgPSBtYWtlX2FkZGVyMigxKQorICAgICAgICBwbHVzMTAgPSBtYWtlX2FkZGVyMigxMCkKIAotdmVyZXEoaW5jKDEpLCAyKQotdmVyZXEocGx1czEwKC0yKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKC0yKSwgOCkKIAotcHJpbnQgIjYuIG5lc3RpbmcgcGx1cyBmcmVlIHJlZiB0byBnbG9iYWwiCisgICAgZGVmIHRlc3RTaW1wbGVBbmRSZWJpbmRpbmcoc2VsZik6CiAKLWRlZiBtYWtlX2FkZGVyNih4KToKLSAgICBnbG9iYWwgZ2xvYmFsX25lc3RfeAotICAgIGRlZiBhZGRlcih5KToKLSAgICAgICAgcmV0dXJuIGdsb2JhbF9uZXN0X3ggKyB5Ci0gICAgZ2xvYmFsX25lc3RfeCA9IHgKLSAgICByZXR1cm4gYWRkZXIKKyAgICAgICAgZGVmIG1ha2VfYWRkZXIzKHgpOgorICAgICAgICAgICAgZGVmIGFkZGVyKHkpOgorICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeQorICAgICAgICAgICAgeCA9IHggKyAxICMgY2hlY2sgdHJhY2tpbmcgb2YgYXNzaWdubWVudCB0byB4IGluIGRlZmluaW5nIHNjb3BlCisgICAgICAgICAgICByZXR1cm4gYWRkZXIKIAotaW5jID0gbWFrZV9hZGRlcjYoMSkKLXBsdXMxMCA9IG1ha2VfYWRkZXI2KDEwKQorICAgICAgICBpbmMgPSBtYWtlX2FkZGVyMygwKQorICAgICAgICBwbHVzMTAgPSBtYWtlX2FkZGVyMyg5KQogCi12ZXJlcShpbmMoMSksIDExKSAjIHRoZXJlJ3Mgb25seSBvbmUgZ2xvYmFsCi12ZXJlcShwbHVzMTAoLTIpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluYygxKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbHVzMTAoLTIpLCA4KQogCi1wcmludCAiNy4gbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUiCisgICAgZGVmIHRlc3ROZXN0aW5nR2xvYmFsTm9GcmVlKHNlbGYpOgogCi1kZWYgZih4KToKLSAgICBkZWYgZyh5KToKLSAgICAgICAgeCA9IDQyICMgY2hlY2sgdGhhdCB0aGlzIG1hc2tzIGJpbmRpbmcgaW4gZigpCi0gICAgICAgIGRlZiBoKHopOgotICAgICAgICAgICAgcmV0dXJuIHggKyB6Ci0gICAgICAgIHJldHVybiBoCi0gICAgcmV0dXJuIGcoMikKKyAgICAgICAgZGVmIG1ha2VfYWRkZXI0KCk6ICMgWFhYIGFkZCBleHRhIGxldmVsIG9mIGluZGlyZWN0aW9uCisgICAgICAgICAgICBkZWYgbmVzdCgpOgorICAgICAgICAgICAgICAgIGRlZiBuZXN0KCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBhZGRlcih5KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxfeCArIHkgIyBjaGVjayB0aGF0IHBsYWluIG9sZCBnbG9iYWxzIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIG5lc3QoKQorICAgICAgICAgICAgcmV0dXJuIG5lc3QoKQogCi10ZXN0X2Z1bmMgPSBmKDEwKQotdmVyZXEodGVzdF9mdW5jKDUpLCA0NykKKyAgICAgICAgZ2xvYmFsX3ggPSAxCisgICAgICAgIGFkZGVyID0gbWFrZV9hZGRlcjQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZGVyKDEpLCAyKQogCi1wcmludCAiOC4gbWl4ZWQgZnJlZXZhcnMgYW5kIGNlbGx2YXJzIgorICAgICAgICBnbG9iYWxfeCA9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkZXIoLTIpLCA4KQogCi1kZWYgaWRlbnRpdHkoeCk6Ci0gICAgcmV0dXJuIHgKKyAgICBkZWYgdGVzdE5lc3RpbmdUaHJvdWdoQ2xhc3Moc2VsZik6CiAKLWRlZiBmKHgsIHksIHopOgotICAgIGRlZiBnKGEsIGIsIGMpOgotICAgICAgICBhID0gYSArIHggIyAzCi0gICAgICAgIGRlZiBoKCk6Ci0gICAgICAgICAgICAjIHogKiAoNCArIDkpCi0gICAgICAgICAgICAjIDMgKiAxMwotICAgICAgICAgICAgcmV0dXJuIGlkZW50aXR5KHogKiAoYiArIHkpKQotICAgICAgICB5ID0gYyArIHogIyA5Ci0gICAgICAgIHJldHVybiBoCi0gICAgcmV0dXJuIGcKKyAgICAgICAgZGVmIG1ha2VfYWRkZXI1KHgpOgorICAgICAgICAgICAgY2xhc3MgQWRkZXI6CisgICAgICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHkpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geCArIHkKKyAgICAgICAgICAgIHJldHVybiBBZGRlcigpCiAKLWcgPSBmKDEsIDIsIDMpCi1oID0gZygyLCA0LCA2KQotdmVyZXEoaCgpLCAzOSkKKyAgICAgICAgaW5jID0gbWFrZV9hZGRlcjUoMSkKKyAgICAgICAgcGx1czEwID0gbWFrZV9hZGRlcjUoMTApCiAKLXByaW50ICI5LiBmcmVlIHZhcmlhYmxlIGluIG1ldGhvZCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKC0yKSwgOCkKIAotZGVmIHRlc3QoKToKLSAgICBtZXRob2RfYW5kX3ZhciA9ICJ2YXIiCi0gICAgY2xhc3MgVGVzdDoKLSAgICAgICAgZGVmIG1ldGhvZF9hbmRfdmFyKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJtZXRob2QiCi0gICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIG1ldGhvZF9hbmRfdmFyCi0gICAgICAgIGRlZiBhY3R1YWxfZ2xvYmFsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHN0cigiZ2xvYmFsIikKLSAgICAgICAgZGVmIHN0cihzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZikKLSAgICByZXR1cm4gVGVzdCgpCisgICAgZGVmIHRlc3ROZXN0aW5nUGx1c0ZyZWVSZWZUb0dsb2JhbChzZWxmKToKIAotdCA9IHRlc3QoKQotdmVyZXEodC50ZXN0KCksICJ2YXIiKQotdmVyZXEodC5tZXRob2RfYW5kX3ZhcigpLCAibWV0aG9kIikKLXZlcmVxKHQuYWN0dWFsX2dsb2JhbCgpLCAiZ2xvYmFsIikKKyAgICAgICAgZGVmIG1ha2VfYWRkZXI2KHgpOgorICAgICAgICAgICAgZ2xvYmFsIGdsb2JhbF9uZXN0X3gKKyAgICAgICAgICAgIGRlZiBhZGRlcih5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsX25lc3RfeCArIHkKKyAgICAgICAgICAgIGdsb2JhbF9uZXN0X3ggPSB4CisgICAgICAgICAgICByZXR1cm4gYWRkZXIKIAotbWV0aG9kX2FuZF92YXIgPSAidmFyIgotY2xhc3MgVGVzdDoKLSAgICAjIHRoaXMgY2xhc3MgaXMgbm90IG5lc3RlZCwgc28gdGhlIHJ1bGVzIGFyZSBkaWZmZXJlbnQKLSAgICBkZWYgbWV0aG9kX2FuZF92YXIoc2VsZik6Ci0gICAgICAgIHJldHVybiAibWV0aG9kIgotICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICByZXR1cm4gbWV0aG9kX2FuZF92YXIKLSAgICBkZWYgYWN0dWFsX2dsb2JhbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHN0cigiZ2xvYmFsIikKLSAgICBkZWYgc3RyKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisgICAgICAgIGluYyA9IG1ha2VfYWRkZXI2KDEpCisgICAgICAgIHBsdXMxMCA9IG1ha2VfYWRkZXI2KDEwKQogCi10ID0gVGVzdCgpCi12ZXJlcSh0LnRlc3QoKSwgInZhciIpCi12ZXJlcSh0Lm1ldGhvZF9hbmRfdmFyKCksICJtZXRob2QiKQotdmVyZXEodC5hY3R1YWxfZ2xvYmFsKCksICJnbG9iYWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluYygxKSwgMTEpICMgdGhlcmUncyBvbmx5IG9uZSBnbG9iYWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbHVzMTAoLTIpLCA4KQogCi1wcmludCAiMTAuIHJlY3Vyc2lvbiIKKyAgICBkZWYgdGVzdE5lYXJlc3RFbmNsb3NpbmdTY29wZShzZWxmKToKIAotZGVmIGYoeCk6Ci0gICAgZGVmIGZhY3Qobik6Ci0gICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gbiAqIGZhY3QobiAtIDEpCi0gICAgaWYgeCA+PSAwOgotICAgICAgICByZXR1cm4gZmFjdCh4KQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJ4IG11c3QgYmUgPj0gMCIKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZyh5KToKKyAgICAgICAgICAgICAgICB4ID0gNDIgIyBjaGVjayB0aGF0IHRoaXMgbWFza3MgYmluZGluZyBpbiBmKCkKKyAgICAgICAgICAgICAgICBkZWYgaCh6KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB6CisgICAgICAgICAgICAgICAgcmV0dXJuIGgKKyAgICAgICAgICAgIHJldHVybiBnKDIpCiAKLXZlcmVxKGYoNiksIDcyMCkKKyAgICAgICAgdGVzdF9mdW5jID0gZigxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X2Z1bmMoNSksIDQ3KQorCisgICAgZGVmIHRlc3RNaXhlZEZyZWV2YXJzQW5kQ2VsbHZhcnMoc2VsZik6CisKKyAgICAgICAgZGVmIGlkZW50aXR5KHgpOgorICAgICAgICAgICAgcmV0dXJuIHgKKworICAgICAgICBkZWYgZih4LCB5LCB6KToKKyAgICAgICAgICAgIGRlZiBnKGEsIGIsIGMpOgorICAgICAgICAgICAgICAgIGEgPSBhICsgeCAjIDMKKyAgICAgICAgICAgICAgICBkZWYgaCgpOgorICAgICAgICAgICAgICAgICAgICAjIHogKiAoNCArIDkpCisgICAgICAgICAgICAgICAgICAgICMgMyAqIDEzCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZGVudGl0eSh6ICogKGIgKyB5KSkKKyAgICAgICAgICAgICAgICB5ID0gYyArIHogIyA5CisgICAgICAgICAgICAgICAgcmV0dXJuIGgKKyAgICAgICAgICAgIHJldHVybiBnCisKKyAgICAgICAgZyA9IGYoMSwgMiwgMykKKyAgICAgICAgaCA9IGcoMiwgNCwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKCksIDM5KQorCisgICAgZGVmIHRlc3RGcmVlVmFySW5NZXRob2Qoc2VsZik6CisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIG1ldGhvZF9hbmRfdmFyID0gInZhciIKKyAgICAgICAgICAgIGNsYXNzIFRlc3Q6CisgICAgICAgICAgICAgICAgZGVmIG1ldGhvZF9hbmRfdmFyKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm1ldGhvZCIKKyAgICAgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZF9hbmRfdmFyCisgICAgICAgICAgICAgICAgZGVmIGFjdHVhbF9nbG9iYWwoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIoImdsb2JhbCIpCisgICAgICAgICAgICAgICAgZGVmIHN0cihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmKQorICAgICAgICAgICAgcmV0dXJuIFRlc3QoKQorCisgICAgICAgIHQgPSB0ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRlc3QoKSwgInZhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5tZXRob2RfYW5kX3ZhcigpLCAibWV0aG9kIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmFjdHVhbF9nbG9iYWwoKSwgImdsb2JhbCIpCisKKyAgICAgICAgbWV0aG9kX2FuZF92YXIgPSAidmFyIgorICAgICAgICBjbGFzcyBUZXN0OgorICAgICAgICAgICAgIyB0aGlzIGNsYXNzIGlzIG5vdCBuZXN0ZWQsIHNvIHRoZSBydWxlcyBhcmUgZGlmZmVyZW50CisgICAgICAgICAgICBkZWYgbWV0aG9kX2FuZF92YXIoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJtZXRob2QiCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kX2FuZF92YXIKKyAgICAgICAgICAgIGRlZiBhY3R1YWxfZ2xvYmFsKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIoImdsb2JhbCIpCisgICAgICAgICAgICBkZWYgc3RyKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZikKKworICAgICAgICB0ID0gVGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50ZXN0KCksICJ2YXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWV0aG9kX2FuZF92YXIoKSwgIm1ldGhvZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5hY3R1YWxfZ2xvYmFsKCksICJnbG9iYWwiKQorCisgICAgZGVmIHRlc3RSZWN1cnNpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZmFjdChuKToKKyAgICAgICAgICAgICAgICBpZiBuID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gKiBmYWN0KG4gLSAxKQorICAgICAgICAgICAgaWYgeCA+PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWN0KHgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJ4IG11c3QgYmUgPj0gMCIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoNiksIDcyMCkKIAogCi1wcmludCAiMTEuIHVub3B0aW1pemVkIG5hbWVzcGFjZXMiCisgICAgZGVmIHRlc3RVbm9wdGltaXplZE5hbWVzcGFjZXMoc2VsZik6CiAKLWNoZWNrX3N5bnRheCgiIiJcCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJcCiBkZWYgdW5vcHRpbWl6ZWRfY2xhc2gxKHN0cmlwKToKICAgICBkZWYgZihzKToKICAgICAgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKQEAgLTE4OCw3ICsxOTIsNyBAQAogICAgIHJldHVybiBmCiAiIiIpCiAKLWNoZWNrX3N5bnRheCgiIiJcCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJcCiBkZWYgdW5vcHRpbWl6ZWRfY2xhc2gyKCk6CiAgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKICAgICBkZWYgZihzKToKQEAgLTE5Niw3ICsyMDAsNyBAQAogICAgIHJldHVybiBmCiAiIiIpCiAKLWNoZWNrX3N5bnRheCgiIiJcCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJcCiBkZWYgdW5vcHRpbWl6ZWRfY2xhc2gyKCk6CiAgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKICAgICBkZWYgZygpOgpAQCAtMjA1LDIzICsyMDksMjMgQEAKICAgICAgICAgcmV0dXJuIGYKICIiIikKIAotY2hlY2tfc3ludGF4KCIiIlwKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICIiIlwKIGRlZiBmKHgpOgogICAgIGRlZiBnKCk6CiAgICAgICAgIHJldHVybiB4CiAgICAgZGVsIHggIyBjYW4ndCBkZWwgbmFtZQogIiIiKQogCi1jaGVja19zeW50YXgoIiIiXAorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAogZGVmIGYoKToKICAgICBkZWYgZygpOgotICAgICAgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKLSAgICAgICAgIHJldHVybiBzdHJpcCAjIGdsb2JhbCBvciBsb2NhbD8KKyAgICAgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKKyAgICAgICAgcmV0dXJuIHN0cmlwICMgZ2xvYmFsIG9yIGxvY2FsPwogIiIiKQogCi0jIGFuZCB2ZXJpZnkgYSBmZXcgY2FzZXMgdGhhdCBzaG91bGQgd29yaworICAgICAgICAjIGFuZCB2ZXJpZnkgYSBmZXcgY2FzZXMgdGhhdCBzaG91bGQgd29yawogCi1leGVjKCIiIgorICAgICAgICBleGVjKCIiIgogZGVmIG5vcHJvYmxlbTEoKToKICAgICBmcm9tIHN0cmluZyBpbXBvcnQgKgogICAgIGYgPSBsYW1iZGEgeDp4CkBAIC0yMzgsNTkgKzI0Miw2MCBAQAogICAgICAgICB5ID0geAogIiIiKQogCi1wcmludCAiMTIuIGxhbWJkYXMiCisgICAgZGVmIHRlc3RMYW1iZGFzKHNlbGYpOgogCi1mMSA9IGxhbWJkYSB4OiBsYW1iZGEgeTogeCArIHkKLWluYyA9IGYxKDEpCi1wbHVzMTAgPSBmMSgxMCkKLXZlcmVxKGluYygxKSwgMikKLXZlcmVxKHBsdXMxMCg1KSwgMTUpCisgICAgICAgIGYxID0gbGFtYmRhIHg6IGxhbWJkYSB5OiB4ICsgeQorICAgICAgICBpbmMgPSBmMSgxKQorICAgICAgICBwbHVzMTAgPSBmMSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKDUpLCAxNSkKIAotZjIgPSBsYW1iZGEgeDogKGxhbWJkYSA6IGxhbWJkYSB5OiB4ICsgeSkoKQotaW5jID0gZjIoMSkKLXBsdXMxMCA9IGYyKDEwKQotdmVyZXEoaW5jKDEpLCAyKQotdmVyZXEocGx1czEwKDUpLCAxNSkKKyAgICAgICAgZjIgPSBsYW1iZGEgeDogKGxhbWJkYSA6IGxhbWJkYSB5OiB4ICsgeSkoKQorICAgICAgICBpbmMgPSBmMigxKQorICAgICAgICBwbHVzMTAgPSBmMigxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKDUpLCAxNSkKIAotZjMgPSBsYW1iZGEgeDogbGFtYmRhIHk6IGdsb2JhbF94ICsgeQotZ2xvYmFsX3ggPSAxCi1pbmMgPSBmMyhOb25lKQotdmVyZXEoaW5jKDIpLCAzKQorICAgICAgICBmMyA9IGxhbWJkYSB4OiBsYW1iZGEgeTogZ2xvYmFsX3ggKyB5CisgICAgICAgIGdsb2JhbF94ID0gMQorICAgICAgICBpbmMgPSBmMyhOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluYygyKSwgMykKIAotZjggPSBsYW1iZGEgeCwgeSwgejogbGFtYmRhIGEsIGIsIGM6IGxhbWJkYSA6IHogKiAoYiArIHkpCi1nID0gZjgoMSwgMiwgMykKLWggPSBnKDIsIDQsIDYpCi12ZXJlcShoKCksIDE4KQorICAgICAgICBmOCA9IGxhbWJkYSB4LCB5LCB6OiBsYW1iZGEgYSwgYiwgYzogbGFtYmRhIDogeiAqIChiICsgeSkKKyAgICAgICAgZyA9IGY4KDEsIDIsIDMpCisgICAgICAgIGggPSBnKDIsIDQsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCgpLCAxOCkKIAotcHJpbnQgIjEzLiBVbmJvdW5kTG9jYWwiCisgICAgZGVmIHRlc3RVbmJvdW5kTG9jYWwoc2VsZik6CiAKLWRlZiBlcnJvckluT3V0ZXIoKToKLSAgICBwcmludCB5Ci0gICAgZGVmIGlubmVyKCk6Ci0gICAgICAgIHJldHVybiB5Ci0gICAgeSA9IDEKKyAgICAgICAgZGVmIGVycm9ySW5PdXRlcigpOgorICAgICAgICAgICAgcHJpbnQgeQorICAgICAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHkKKyAgICAgICAgICAgIHkgPSAxCiAKLWRlZiBlcnJvckluSW5uZXIoKToKLSAgICBkZWYgaW5uZXIoKToKLSAgICAgICAgcmV0dXJuIHkKLSAgICBpbm5lcigpCi0gICAgeSA9IDEKKyAgICAgICAgZGVmIGVycm9ySW5Jbm5lcigpOgorICAgICAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHkKKyAgICAgICAgICAgIGlubmVyKCkKKyAgICAgICAgICAgIHkgPSAxCiAKLXRyeToKLSAgICBlcnJvckluT3V0ZXIoKQotZXhjZXB0IFVuYm91bmRMb2NhbEVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgcmFpc2UgVGVzdEZhaWxlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBlcnJvckluT3V0ZXIoKQorICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoKQogCi10cnk6Ci0gICAgZXJyb3JJbklubmVyKCkKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgcGFzcwotZWxzZToKLSAgICByYWlzZSBUZXN0RmFpbGVkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVycm9ySW5Jbm5lcigpCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoKQogCi0jIHRlc3QgZm9yIGJ1ZyAjMTUwMTkzNDogaW5jb3JyZWN0IExPQUQvU1RPUkVfR0xPQkFMIGdlbmVyYXRpb24KKyAgICAgICAgIyB0ZXN0IGZvciBidWcgIzE1MDE5MzQ6IGluY29ycmVjdCBMT0FEL1NUT1JFX0dMT0JBTCBnZW5lcmF0aW9uCisgICAgICAgIGV4ZWMoIiIiCiBnbG9iYWxfeCA9IDEKIGRlZiBmKCk6CiAgICAgZ2xvYmFsX3ggKz0gMQpAQCAtMjk5LDM0ICszMDQsMzYgQEAKIGV4Y2VwdCBVbmJvdW5kTG9jYWxFcnJvcjoKICAgICBwYXNzCiBlbHNlOgotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdzY29wZSBvZiBnbG9iYWxfeCBub3QgY29ycmVjdGx5IGRldGVybWluZWQnCisgICAgZmFpbCgnc2NvcGUgb2YgZ2xvYmFsX3ggbm90IGNvcnJlY3RseSBkZXRlcm1pbmVkJykKKyIiIiwgeydmYWlsJzogc2VsZi5mYWlsfSkKIAotcHJpbnQgIjE0LiBjb21wbGV4IGRlZmluaXRpb25zIgorICAgIGRlZiB0ZXN0Q29tcGxleERlZmluaXRpb25zKHNlbGYpOgogCi1kZWYgbWFrZVJldHVybmVyKCpsc3QpOgotICAgIGRlZiByZXR1cm5lcigpOgotICAgICAgICByZXR1cm4gbHN0Ci0gICAgcmV0dXJuIHJldHVybmVyCisgICAgICAgIGRlZiBtYWtlUmV0dXJuZXIoKmxzdCk6CisgICAgICAgICAgICBkZWYgcmV0dXJuZXIoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbHN0CisgICAgICAgICAgICByZXR1cm4gcmV0dXJuZXIKIAotdmVyZXEobWFrZVJldHVybmVyKDEsMiwzKSgpLCAoMSwyLDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ha2VSZXR1cm5lcigxLDIsMykoKSwgKDEsMiwzKSkKIAotZGVmIG1ha2VSZXR1cm5lcjIoKiprd2FyZ3MpOgotICAgIGRlZiByZXR1cm5lcigpOgotICAgICAgICByZXR1cm4ga3dhcmdzCi0gICAgcmV0dXJuIHJldHVybmVyCisgICAgICAgIGRlZiBtYWtlUmV0dXJuZXIyKCoqa3dhcmdzKToKKyAgICAgICAgICAgIGRlZiByZXR1cm5lcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBrd2FyZ3MKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5lcgogCi12ZXJlcShtYWtlUmV0dXJuZXIyKGE9MTEpKClbJ2EnXSwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFrZVJldHVybmVyMihhPTExKSgpWydhJ10sIDExKQogCi1kZWYgbWFrZUFkZFBhaXIoKGEsIGIpKToKLSAgICBkZWYgYWRkUGFpcigoYywgZCkpOgotICAgICAgICByZXR1cm4gKGEgKyBjLCBiICsgZCkKLSAgICByZXR1cm4gYWRkUGFpcgorICAgICAgICBkZWYgbWFrZUFkZFBhaXIoKGEsIGIpKToKKyAgICAgICAgICAgIGRlZiBhZGRQYWlyKChjLCBkKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhICsgYywgYiArIGQpCisgICAgICAgICAgICByZXR1cm4gYWRkUGFpcgogCi12ZXJlcShtYWtlQWRkUGFpcigoMSwgMikpKCgxMDAsIDIwMCkpLCAoMTAxLDIwMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFrZUFkZFBhaXIoKDEsIDIpKSgoMTAwLCAyMDApKSwgKDEwMSwyMDIpKQogCi1wcmludCAiMTUuIHNjb3BlIG9mIGdsb2JhbCBzdGF0ZW1lbnRzIgorICAgIGRlZiB0ZXN0U2NvcGVPZkdsb2JhbFN0bXQoc2VsZik6CiAjIEV4YW1wbGVzIHBvc3RlZCBieSBTYW11ZWxlIFBlZHJvbmkgdG8gcHl0aG9uLWRldiBvbiAzLzEvMjAwMQogCisgICAgICAgIGV4ZWMoIiIiXAogIyBJCiB4ID0gNwogZGVmIGYoKToKQEAgLTMzOSw4ICszNDYsOCBAQAogICAgICAgICAgICAgcmV0dXJuIGgoKQogICAgICAgICByZXR1cm4gaSgpCiAgICAgcmV0dXJuIGcoKQotdmVyZXEoZigpLCA3KQotdmVyZXEoeCwgNykKK3NlbGYuYXNzZXJ0RXF1YWwoZigpLCA3KQorc2VsZi5hc3NlcnRFcXVhbCh4LCA3KQogCiAjIElJCiB4ID0gNwpAQCAtMzU0LDggKzM2MSw4IEBACiAgICAgICAgICAgICByZXR1cm4gaCgpCiAgICAgICAgIHJldHVybiBpKCkKICAgICByZXR1cm4gZygpCi12ZXJlcShmKCksIDIpCi12ZXJlcSh4LCA3KQorc2VsZi5hc3NlcnRFcXVhbChmKCksIDIpCitzZWxmLmFzc2VydEVxdWFsKHgsIDcpCiAKICMgSUlJCiB4ID0gNwpAQCAtMzcwLDggKzM3Nyw4IEBACiAgICAgICAgICAgICByZXR1cm4gaCgpCiAgICAgICAgIHJldHVybiBpKCkKICAgICByZXR1cm4gZygpCi12ZXJlcShmKCksIDIpCi12ZXJlcSh4LCAyKQorc2VsZi5hc3NlcnRFcXVhbChmKCksIDIpCitzZWxmLmFzc2VydEVxdWFsKHgsIDIpCiAKICMgSVYKIHggPSA3CkBAIC0zODYsOCArMzkzLDggQEAKICAgICAgICAgICAgIHJldHVybiBoKCkKICAgICAgICAgcmV0dXJuIGkoKQogICAgIHJldHVybiBnKCkKLXZlcmVxKGYoKSwgMikKLXZlcmVxKHgsIDIpCitzZWxmLmFzc2VydEVxdWFsKGYoKSwgMikKK3NlbGYuYXNzZXJ0RXF1YWwoeCwgMikKIAogIyBYWFggd2hhdCBhYm91dCBnbG9iYWwgc3RhdGVtZW50cyBpbiBjbGFzcyBibG9ja3M/CiAjIGRvIHRoZXkgYWZmZWN0IG1ldGhvZHM/CkBAIC00MDIsMzQgKzQwOSwzNiBAQAogICAgICAgICByZXR1cm4geAogCiBnID0gR2xvYmFsKCkKLXZlcmVxKGcuZ2V0KCksIDEzKQorc2VsZi5hc3NlcnRFcXVhbChnLmdldCgpLCAxMykKIGcuc2V0KDE1KQotdmVyZXEoZy5nZXQoKSwgMTMpCitzZWxmLmFzc2VydEVxdWFsKGcuZ2V0KCksIDEzKQorIiIiKQogCi1wcmludCAiMTYuIGNoZWNrIGxlYWtzIgorICAgIGRlZiB0ZXN0TGVha3Moc2VsZik6CiAKLWNsYXNzIEZvbzoKLSAgICBjb3VudCA9IDAKKyAgICAgICAgY2xhc3MgRm9vOgorICAgICAgICAgICAgY291bnQgPSAwCiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIEZvby5jb3VudCArPSAxCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgRm9vLmNvdW50ICs9IDEKIAotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICBGb28uY291bnQgLT0gMQorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgRm9vLmNvdW50IC09IDEKIAotZGVmIGYxKCk6Ci0gICAgeCA9IEZvbygpCi0gICAgZGVmIGYyKCk6Ci0gICAgICAgIHJldHVybiB4Ci0gICAgZjIoKQorICAgICAgICBkZWYgZjEoKToKKyAgICAgICAgICAgIHggPSBGb28oKQorICAgICAgICAgICAgZGVmIGYyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIGYyKCkKIAotZm9yIGkgaW4gcmFuZ2UoMTAwKToKLSAgICBmMSgpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBmMSgpCiAKLXZlcmVxKEZvby5jb3VudCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uY291bnQsIDApCiAKLXByaW50ICIxNy4gY2xhc3MgYW5kIGdsb2JhbCIKKyAgICBkZWYgdGVzdENsYXNzQW5kR2xvYmFsKHNlbGYpOgogCisgICAgICAgIGV4ZWMoIiIiXAogZGVmIHRlc3QoeCk6CiAgICAgY2xhc3MgRm9vOgogICAgICAgICBnbG9iYWwgeApAQCAtNDM4LDkgKzQ0Nyw5IEBACiAgICAgcmV0dXJuIEZvbygpCiAKIHggPSAwCi12ZXJlcSh0ZXN0KDYpKDIpLCA4KQorc2VsZi5hc3NlcnRFcXVhbCh0ZXN0KDYpKDIpLCA4KQogeCA9IC0xCi12ZXJlcSh0ZXN0KDMpKDIpLCA1KQorc2VsZi5hc3NlcnRFcXVhbCh0ZXN0KDMpKDIpLCA1KQogCiBsb29rZWRfdXBfYnlfbG9hZF9uYW1lID0gRmFsc2UKIGNsYXNzIFg6CkBAIC00NDksMTA0ICs0NTgsMTA2IEBACiAgICAgbG9jYWxzKClbJ2xvb2tlZF91cF9ieV9sb2FkX25hbWUnXSA9IFRydWUKICAgICBwYXNzZWQgPSBsb29rZWRfdXBfYnlfbG9hZF9uYW1lCiAKLXZlcmlmeShYLnBhc3NlZCkKK3NlbGYuYXNzZXJ0XyhYLnBhc3NlZCkKKyIiIikKIAotcHJpbnQgIjE4LiB2ZXJpZnkgdGhhdCBsb2NhbHMoKSB3b3JrcyIKKyAgICBkZWYgdGVzdExvY2Fsc0Z1bmN0aW9uKHNlbGYpOgogCi1kZWYgZih4KToKLSAgICBkZWYgZyh5KToKLSAgICAgICAgZGVmIGgoeik6Ci0gICAgICAgICAgICByZXR1cm4geSArIHoKLSAgICAgICAgdyA9IHggKyB5Ci0gICAgICAgIHkgKz0gMwotICAgICAgICByZXR1cm4gbG9jYWxzKCkKLSAgICByZXR1cm4gZworICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIGRlZiBnKHkpOgorICAgICAgICAgICAgICAgIGRlZiBoKHopOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geSArIHoKKyAgICAgICAgICAgICAgICB3ID0geCArIHkKKyAgICAgICAgICAgICAgICB5ICs9IDMKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxzKCkKKyAgICAgICAgICAgIHJldHVybiBnCiAKLWQgPSBmKDIpKDQpCi12ZXJpZnkoJ2gnIGluIGQpCi1kZWwgZFsnaCddCi12ZXJlcShkLCB7J3gnOiAyLCAneSc6IDcsICd3JzogNn0pCisgICAgICAgIGQgPSBmKDIpKDQpCisgICAgICAgIHNlbGYuYXNzZXJ0XygnaCcgaW4gZCkKKyAgICAgICAgZGVsIGRbJ2gnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsneCc6IDIsICd5JzogNywgJ3cnOiA2fSkKIAotcHJpbnQgIjE5LiB2YXIgaXMgYm91bmQgYW5kIGZyZWUgaW4gY2xhc3MiCisgICAgZGVmIHRlc3RCb3VuZEFuZEZyZWUoc2VsZik6CisgICAgICAgICMgdmFyIGlzIGJvdW5kIGFuZCBmcmVlIGluIGNsYXNzCiAKLWRlZiBmKHgpOgotICAgIGNsYXNzIEM6Ci0gICAgICAgIGRlZiBtKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHgKLSAgICAgICAgYSA9IHgKLSAgICByZXR1cm4gQworICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgZGVmIG0oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICAgICAgYSA9IHgKKyAgICAgICAgICAgIHJldHVybiBDCiAKLWluc3QgPSBmKDMpKCkKLXZlcmVxKGluc3QuYSwgaW5zdC5tKCkpCisgICAgICAgIGluc3QgPSBmKDMpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnN0LmEsIGluc3QubSgpKQogCi1wcmludCAiMjAuIGludGVyYWN0aW9uIHdpdGggdHJhY2UgZnVuY3Rpb24iCisgICAgZGVmIHRlc3RJbnRlcmFjdGlvbldpdGhUcmFjZUZ1bmMoc2VsZik6CiAKLWltcG9ydCBzeXMKLWRlZiB0cmFjZXIoYSxiLGMpOgotICAgIHJldHVybiB0cmFjZXIKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBkZWYgdHJhY2VyKGEsYixjKToKKyAgICAgICAgICAgIHJldHVybiB0cmFjZXIKIAotZGVmIGFkYXB0Z2V0dGVyKG5hbWUsIGtsYXNzLCBnZXR0ZXIpOgotICAgIGtpbmQsIGRlcyA9IGdldHRlcgotICAgIGlmIGtpbmQgPT0gMTogICAgICAgIyBBViBoYXBwZW5zIHdoZW4gc3RlcHBpbmcgZnJvbSB0aGlzIGxpbmUgdG8gbmV4dAotICAgICAgICBpZiBkZXMgPT0gIiI6Ci0gICAgICAgICAgICBkZXMgPSAiXyVzX18lcyIgJSAoa2xhc3MuX19uYW1lX18sIG5hbWUpCi0gICAgICAgIHJldHVybiBsYW1iZGEgb2JqOiBnZXRhdHRyKG9iaiwgZGVzKQorICAgICAgICBkZWYgYWRhcHRnZXR0ZXIobmFtZSwga2xhc3MsIGdldHRlcik6CisgICAgICAgICAgICBraW5kLCBkZXMgPSBnZXR0ZXIKKyAgICAgICAgICAgIGlmIGtpbmQgPT0gMTogICAgICAgIyBBViBoYXBwZW5zIHdoZW4gc3RlcHBpbmcgZnJvbSB0aGlzIGxpbmUgdG8gbmV4dAorICAgICAgICAgICAgICAgIGlmIGRlcyA9PSAiIjoKKyAgICAgICAgICAgICAgICAgICAgZGVzID0gIl8lc19fJXMiICUgKGtsYXNzLl9fbmFtZV9fLCBuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBsYW1iZGEgb2JqOiBnZXRhdHRyKG9iaiwgZGVzKQogCi1jbGFzcyBUZXN0Q2xhc3M6Ci0gICAgcGFzcworICAgICAgICBjbGFzcyBUZXN0Q2xhc3M6CisgICAgICAgICAgICBwYXNzCiAKLXN5cy5zZXR0cmFjZSh0cmFjZXIpCi1hZGFwdGdldHRlcigiZm9vIiwgVGVzdENsYXNzLCAoMSwgIiIpKQotc3lzLnNldHRyYWNlKE5vbmUpCisgICAgICAgIHN5cy5zZXR0cmFjZSh0cmFjZXIpCisgICAgICAgIGFkYXB0Z2V0dGVyKCJmb28iLCBUZXN0Q2xhc3MsICgxLCAiIikpCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQogCi10cnk6IHN5cy5zZXR0cmFjZSgpCi1leGNlcHQgVHlwZUVycm9yOiBwYXNzCi1lbHNlOiByYWlzZSBUZXN0RmFpbGVkLCAnc3lzLnNldHRyYWNlKCkgZGlkIG5vdCByYWlzZSBUeXBlRXJyb3InCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLnNldHRyYWNlKQogCi1wcmludCAiMjAuIGV2YWwgYW5kIGV4ZWMgd2l0aCBmcmVlIHZhcmlhYmxlcyIKKyAgICBkZWYgdGVzdEV2YWxFeGVjRnJlZVZhcnMoc2VsZik6CiAKLWRlZiBmKHgpOgotICAgIHJldHVybiBsYW1iZGE6IHggKyAxCisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYTogeCArIDEKIAotZyA9IGYoMykKLXRyeToKLSAgICBldmFsKGcuZnVuY19jb2RlKQotZXhjZXB0IFR5cGVFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIHByaW50ICJldmFsKCkgc2hvdWxkIGhhdmUgZmFpbGVkLCBiZWNhdXNlIGNvZGUgY29udGFpbmVkIGZyZWUgdmFycyIKKyAgICAgICAgZyA9IGYoMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCBnLmZ1bmNfY29kZSkKIAotdHJ5OgotICAgIGV4ZWMoZy5mdW5jX2NvZGUpCi1leGNlcHQgVHlwZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgcHJpbnQgImV4ZWMgc2hvdWxkIGhhdmUgZmFpbGVkLCBiZWNhdXNlIGNvZGUgY29udGFpbmVkIGZyZWUgdmFycyIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyhnLmZ1bmNfY29kZSwge30pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4ZWMgc2hvdWxkIGhhdmUgZmFpbGVkLCBiZWNhdXNlIGNvZGUgY29udGFpbmVkIGZyZWUgdmFycyIpCiAKLXByaW50ICIyMS4gbGlzdCBjb21wcmVoZW5zaW9uIHdpdGggbG9jYWwgdmFyaWFibGVzIgorICAgIGRlZiB0ZXN0TGlzdENvbXBMb2NhbFZhcnMoc2VsZik6CiAKLXRyeToKLSAgICBwcmludCBiYWQKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgcGFzcwotZWxzZToKLSAgICBwcmludCAiYmFkIHNob3VsZCBub3QgYmUgZGVmaW5lZCIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQgYmFkCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAiYmFkIHNob3VsZCBub3QgYmUgZGVmaW5lZCIKIAotZGVmIHgoKToKLSAgICBbYmFkIGZvciBzIGluICdhIGInIGZvciBiYWQgaW4gcy5zcGxpdCgpXQorICAgICAgICBkZWYgeCgpOgorICAgICAgICAgICAgW2JhZCBmb3IgcyBpbiAnYSBiJyBmb3IgYmFkIGluIHMuc3BsaXQoKV0KIAoteCgpCi10cnk6Ci0gICAgcHJpbnQgYmFkCi1leGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKKyAgICAgICAgeCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50IGJhZAorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcwogCi1wcmludCAiMjIuIGV2YWwgd2l0aCBmcmVlIHZhcmlhYmxlcyIKKyAgICBkZWYgdGVzdEV2YWxGcmVlVmFycyhzZWxmKToKIAotZGVmIGYoeCk6Ci0gICAgZGVmIGcoKToKLSAgICAgICAgeAotICAgICAgICBldmFsKCJ4ICsgMSIpCi0gICAgcmV0dXJuIGcKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgICAgIHgKKyAgICAgICAgICAgICAgICBldmFsKCJ4ICsgMSIpCisgICAgICAgICAgICByZXR1cm4gZwogCi1mKDQpKCkKKyAgICAgICAgZig0KSgpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChTY29wZVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CmluZGV4IDAzNjIxYTYuLmE0ODMwZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CkBAIC0yOTgsNiArMjk4LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSBub3QgaW4gcykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYucy5yZW1vdmUsIHNlbGYudGhldHlwZShzZWxmLndvcmQpKQogCisgICAgZGVmIHRlc3RfcmVtb3ZlX2tleWVycm9yX3VucGFja2luZyhzZWxmKToKKyAgICAgICAgIyBidWc6ICB3d3cucHl0aG9uLm9yZy9zZi8xNTc2NjU3CisgICAgICAgIGZvciB2MSBpbiBbJ1EnLCAoMSwpXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnMucmVtb3ZlKHYxKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHYyID0gZS5hcmdzWzBdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2MSwgdjIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKICAgICBkZWYgdGVzdF9kaXNjYXJkKHNlbGYpOgogICAgICAgICBzZWxmLnMuZGlzY2FyZCgnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0XygnYScgbm90IGluIHNlbGYucykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2dtbGxpYi5weSBiL0xpYi90ZXN0L3Rlc3Rfc2dtbGxpYi5weQppbmRleCAyOGEyMWE0Li5iNjk4NjM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NnbWxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZ21sbGliLnB5CkBAIC0yODYsMjEgKzI4Niw2IEBACiAgICAgICAgICAgICAoJ2NvZGVwb2ludCcsICdjb252ZXJ0JywgNDIpLAogICAgICAgICAgICAgXSkKIAotICAgIGRlZiB0ZXN0X2F0dHJfdmFsdWVzX3F1b3RlZF9tYXJrdXAoc2VsZik6Ci0gICAgICAgICIiIk11bHRpLWxpbmUgYW5kIG1hcmt1cCBpbiBhdHRyaWJ1dGUgdmFsdWVzIiIiCi0gICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhIHRpdGxlPSdmb29cbjxicj5iYXInPnRleHQ8L2E+IiIiLAotICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoInRpdGxlIiwgImZvb1xuPGJyPmJhciIpXSksCi0gICAgICAgICAgICAgKCJkYXRhIiwgInRleHQiKSwKLSAgICAgICAgICAgICAoImVuZHRhZyIsICJhIildKQotICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YSB0aXRsZT0nbGVzcyA8IHRoYW4nPnRleHQ8L2E+IiIiLAotICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoInRpdGxlIiwgImxlc3MgPCB0aGFuIildKSwKLSAgICAgICAgICAgICAoImRhdGEiLCAidGV4dCIpLAotICAgICAgICAgICAgICgiZW5kdGFnIiwgImEiKV0pCi0gICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhIHRpdGxlPSdncmVhdGVyID4gdGhhbic+dGV4dDwvYT4iIiIsCi0gICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygidGl0bGUiLCAiZ3JlYXRlciA+IHRoYW4iKV0pLAotICAgICAgICAgICAgICgiZGF0YSIsICJ0ZXh0IiksCi0gICAgICAgICAgICAgKCJlbmR0YWciLCAiYSIpXSkKLQogICAgIGRlZiB0ZXN0X2F0dHJfZnVua3lfbmFtZXMoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhIGEuYj0ndicgYzpkPXYgZS1mPXY+IiIiLCBbCiAgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbKCJhLmIiLCAidiIpLCAoImM6ZCIsICJ2IiksICgiZS1mIiwgInYiKV0pLApAQCAtMzc2LDYgKzM2MSwxOSBAQAogICAgICAgICAgICAgKCdkZWNsJywgJ0RPQ1RZUEUgZG9jIFs8IUFUVExJU1QgZG9jIGF0dHIgKGEgfCBiKSA+XScpLAogICAgICAgICAgICAgXSkKIAorICAgIGRlZiB0ZXN0X3JlYWRfY2h1bmtzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAjMTU0MTY5NywgdGhpcyBjYXVzZWQgc2dtbCBwYXJzZXIgdG8gaGFuZworICAgICAgICAjIEp1c3QgdmVyaWZ5IHRoaXMgY29kZSBkb2Vzbid0IGNhdXNlIGEgaGFuZy4KKyAgICAgICAgQ0hVTksgPSAxMDI0ICAjIGluY3JlYXNpbmcgdGhpcyB0byA4MjEyIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkKKworICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuZmluZGZpbGUoJ3NnbWxfaW5wdXQuaHRtbCcpKQorICAgICAgICBmcCA9IHNnbWxsaWIuU0dNTFBhcnNlcigpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKENIVU5LKQorICAgICAgICAgICAgZnAuZmVlZChkYXRhKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IENIVU5LOgorICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAjIFhYWCBUaGVzZSB0ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQgYnkgcHJlZml4aW5nIHRoZWlyIG5hbWVzIHdpdGgKICAgICAjIGFuIHVuZGVyc2NvcmUuICBUaGUgZmlyc3QgdHdvIGV4ZXJjaXNlIG91dHN0YW5kaW5nIGJ1Z3MgaW4gdGhlCiAgICAgIyBzZ21sbGliIG1vZHVsZSwgYW5kIHRoZSB0aGlyZCBleGhpYml0cyBxdWVzdGlvbmFibGUgYmVoYXZpb3IKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2hhLnB5IGIvTGliL3Rlc3QvdGVzdF9zaGEucHkKaW5kZXggYzQzOGNjNi4uZWEyMjRlNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaGEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaGEucHkKQEAgLTExLDkgKzExLDIzIEBACiAKIGNsYXNzIFNIQVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgY2hlY2soc2VsZiwgZGF0YSwgZGlnZXN0KToKLSAgICAgICAgY29tcHV0ZWQgPSBzaGEubmV3KGRhdGEpLmhleGRpZ2VzdCgpCisgICAgICAgICMgQ2hlY2sgZGlnZXN0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIHZhbHVlCisgICAgICAgIG9iaiA9IHNoYS5uZXcoZGF0YSkKKyAgICAgICAgY29tcHV0ZWQgPSBvYmouaGV4ZGlnZXN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRfKGNvbXB1dGVkID09IGRpZ2VzdCkKIAorICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSB2YWx1ZSBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZQorICAgICAgICAjIGRpZ2VzdCBvcGVyYXRpb25zLgorICAgICAgICBjb21wdXRlZF9hZ2FpbiA9IG9iai5oZXhkaWdlc3QoKQorICAgICAgICBzZWxmLmFzc2VydF8oY29tcHV0ZWQgPT0gY29tcHV0ZWRfYWdhaW4pCisKKyAgICAgICAgIyBDaGVjayBoZXhkaWdlc3QoKSBvdXRwdXQgbWF0Y2hlcyBkaWdlc3QoKSdzIG91dHB1dAorICAgICAgICBkaWdlc3QgPSBvYmouZGlnZXN0KCkKKyAgICAgICAgaGV4ZCA9ICIiCisgICAgICAgIGZvciBjIGluIGRpZ2VzdDoKKyAgICAgICAgICAgIGhleGQgKz0gJyUwMngnICUgb3JkKGMpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhjb21wdXRlZCA9PSBoZXhkKQorCiAgICAgZGVmIHRlc3RfY2FzZV8xKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCJhYmMiLAogICAgICAgICAgICAgICAgICAgICJhOTk5M2UzNjQ3MDY4MTZhYmEzZTI1NzE3ODUwYzI2YzljZDBkODlkIikKQEAgLTI2LDYgKzQwLDkgQEAKICAgICAgICAgc2VsZi5jaGVjaygiYSIgKiAxMDAwMDAwLAogICAgICAgICAgICAgICAgICAgICIzNGFhOTczY2Q0YzRkYWE0ZjYxZWViMmJkYmFkMjczMTY1MzQwMTZmIikKIAorICAgIGRlZiB0ZXN0X2Nhc2VfNChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjayhjaHIoMHhBQSkgKiA4MCwKKyAgICAgICAgICAgICAgICAgICAnNGNhMGVmMzhmMTc5NGIyOGE4ZjhlZTExMGVlNzlkNDhjZTEzYmUyNScpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFNIQVRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RtZW1iZXJzLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RtZW1iZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGQyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkKQEAgLTAsMCArMSw4MCBAQAorZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHRlc3Rfc3RydWN0bWVtYmVyc1R5cGUsIFwKKyAgICBDSEFSX01BWCwgQ0hBUl9NSU4sIFVDSEFSX01BWCwgXAorICAgIFNIUlRfTUFYLCBTSFJUX01JTiwgVVNIUlRfTUFYLCBcCisgICAgSU5UX01BWCwgSU5UX01JTiwgVUlOVF9NQVgsIFwKKyAgICBMT05HX01BWCwgTE9OR19NSU4sIFVMT05HX01BWAorCitpbXBvcnQgd2FybmluZ3MsIGV4Y2VwdGlvbnMsIHVuaXR0ZXN0LCB0ZXN0LnRlc3Rfd2FybmluZ3MKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK3RzPXRlc3Rfc3RydWN0bWVtYmVyc1R5cGUoMSwyLDMsNCw1LDYsNyw4LDkuOTk5OTksMTAuMTAxMDEwMTAxMCkKKworY2xhc3MgUmVhZFdyaXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3R5cGVzKHNlbGYpOgorICAgICAgICB0cy5UX0JZVEU9Q0hBUl9NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9CWVRFLCBDSEFSX01BWCkKKyAgICAgICAgdHMuVF9CWVRFPUNIQVJfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfQllURSwgQ0hBUl9NSU4pCisgICAgICAgIHRzLlRfVUJZVEU9VUNIQVJfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfVUJZVEUsIFVDSEFSX01BWCkKKworICAgICAgICB0cy5UX1NIT1JUPVNIUlRfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfU0hPUlQsIFNIUlRfTUFYKQorICAgICAgICB0cy5UX1NIT1JUPVNIUlRfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfU0hPUlQsIFNIUlRfTUlOKQorICAgICAgICB0cy5UX1VTSE9SVD1VU0hSVF9NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9VU0hPUlQsIFVTSFJUX01BWCkKKworICAgICAgICB0cy5UX0lOVD1JTlRfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfSU5ULCBJTlRfTUFYKQorICAgICAgICB0cy5UX0lOVD1JTlRfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfSU5ULCBJTlRfTUlOKQorICAgICAgICB0cy5UX1VJTlQ9VUlOVF9NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9VSU5ULCBVSU5UX01BWCkKKworICAgICAgICB0cy5UX0xPTkc9TE9OR19NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9MT05HLCBMT05HX01BWCkKKyAgICAgICAgdHMuVF9MT05HPUxPTkdfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfTE9ORywgTE9OR19NSU4pCisgICAgICAgIHRzLlRfVUxPTkc9VUxPTkdfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfVUxPTkcsIFVMT05HX01BWCkKKworY2xhc3MgVGVzdFdhcm5pbmdzKHRlc3QudGVzdF93YXJuaW5ncy5UZXN0TW9kdWxlKToKKyAgICBkZWYgaGFzX3dhcm5lZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnRlc3Rfd2FybmluZ3MubXNnLmNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuUnVudGltZVdhcm5pbmcuX19uYW1lX18pCisKKyAgICBkZWYgdGVzdF9ieXRlX21heChzZWxmKToKKyAgICAgICAgdHMuVF9CWVRFPUNIQVJfTUFYKzEKKyAgICAgICAgc2VsZi5oYXNfd2FybmVkKCkKKworICAgIGRlZiB0ZXN0X2J5dGVfbWluKHNlbGYpOgorICAgICAgICB0cy5UX0JZVEU9Q0hBUl9NSU4tMQorICAgICAgICBzZWxmLmhhc193YXJuZWQoKQorCisgICAgZGVmIHRlc3RfdWJ5dGVfbWF4KHNlbGYpOgorICAgICAgICB0cy5UX1VCWVRFPVVDSEFSX01BWCsxCisgICAgICAgIHNlbGYuaGFzX3dhcm5lZCgpCisKKyAgICBkZWYgdGVzdF9zaG9ydF9tYXgoc2VsZik6CisgICAgICAgIHRzLlRfU0hPUlQ9U0hSVF9NQVgrMQorICAgICAgICBzZWxmLmhhc193YXJuZWQoKQorCisgICAgZGVmIHRlc3Rfc2hvcnRfbWluKHNlbGYpOgorICAgICAgICB0cy5UX1NIT1JUPVNIUlRfTUlOLTEKKyAgICAgICAgc2VsZi5oYXNfd2FybmVkKCkKKworICAgIGRlZiB0ZXN0X3VzaG9ydF9tYXgoc2VsZik6CisgICAgICAgIHRzLlRfVVNIT1JUPVVTSFJUX01BWCsxCisgICAgICAgIHNlbGYuaGFzX3dhcm5lZCgpCisKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgUmVhZFdyaXRlVGVzdHMsCisgICAgICAgIFRlc3RXYXJuaW5ncworICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQppbmRleCA4YzhhYzQwLi42NGY4ZDQwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CkBAIC0yMzQsNiArMjM0LDEyIEBACiAgICAgICAgIHN0cmlwcGVkID0gcmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhvdXRwdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaXBwZWQsICJhcHBsZW9yYW5nZSIpCiAKKyAgICBkZWYgdGVzdF9zdGRvdXRfZmlsZWRlc19vZl9zdGRvdXQoc2VsZik6CisgICAgICAgICMgc3Rkb3V0IGlzIHNldCB0byAxICgjMTUzMTg2MikuCisgICAgICAgIGNtZCA9IHIiaW1wb3J0IHN5cywgb3M7IHN5cy5leGl0KG9zLndyaXRlKHN5cy5zdGRvdXQuZmlsZW5vKCksICcuXG4nKSkiCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY21kXSwgc3Rkb3V0PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJjLCAyKQorCiAgICAgZGVmIHRlc3RfY3dkKHNlbGYpOgogICAgICAgICB0bXBkaXIgPSBvcy5nZXRlbnYoIlRFTVAiLCAiL3RtcCIpCiAgICAgICAgICMgV2UgY2Fubm90IHVzZSBvcy5wYXRoLnJlYWxwYXRoIHRvIGNhbm9uaWNhbGl6ZSB0aGUgcGF0aCwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQppbmRleCBkMjYwZmM1Li4yODI5YzU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CkBAIC0yNDQsMTMgKzI0NCwxMyBAQAogICAgIHdpdGhjb21tYXMgPSAiLCAiLmpvaW4ocmVwcnBhaXJzKQogICAgIHJldHVybiAieyVzfSIgJSB3aXRoY29tbWFzCiAKLWRlZiBjaGVja19zeW50YXgoc3RhdGVtZW50KToKK2RlZiBjaGVja19zeW50YXhfZXJyb3IodGVzdGNhc2UsIHN0YXRlbWVudCk6CiAgICAgdHJ5OgotICAgICAgICBjb21waWxlKHN0YXRlbWVudCwgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKHN0YXRlbWVudCwgJzx0ZXN0IHN0cmluZz4nLCAnZXhlYycpCiAgICAgZXhjZXB0IFN5bnRheEVycm9yOgogICAgICAgICBwYXNzCiAgICAgZWxzZToKLSAgICAgICAgcHJpbnQgJ01pc3NpbmcgU3ludGF4RXJyb3I6ICIlcyInICUgc3RhdGVtZW50CisgICAgICAgIHRlc3RjYXNlLmZhaWwoJ01pc3NpbmcgU3ludGF4RXJyb3I6ICIlcyInICUgc3RhdGVtZW50KQogCiBkZWYgb3Blbl91cmxyZXNvdXJjZSh1cmwpOgogICAgIGltcG9ydCB1cmxsaWIsIHVybHBhcnNlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5CmluZGV4IGFjYjNmMTAuLmEwZWFhYzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5CkBAIC0yMzUsNiArMjM1LDEzOCBAQAogPj4+IGYoKSArPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiBTeW50YXhFcnJvcjogaWxsZWdhbCBleHByZXNzaW9uIGZvciBhdWdtZW50ZWQgYXNzaWdubWVudCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszM10+LCBsaW5lIDEpCisKKworVGVzdCBjb250aW51ZSBpbiBmaW5hbGx5IGluIHdlaXJkIGNvbWJpbmF0aW9ucy4KKworY29udGludWUgaW4gZm9yIGxvb3AgdW5kZXIgZmluYWxseSBzaG91dWxkIGJlIG9rLgorCisgICAgPj4+IGRlZiB0ZXN0KCk6CisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgcGFzcworICAgIC4uLiAgICAgZmluYWxseToKKyAgICAuLi4gICAgICAgICBmb3IgYWJjIGluIHJhbmdlKDEwKToKKyAgICAuLi4gICAgICAgICAgICAgY29udGludWUKKyAgICAuLi4gICAgIHByaW50IGFiYworICAgID4+PiB0ZXN0KCkKKyAgICA5CisKK1N0YXJ0IHNpbXBsZSwgYSBjb250aW51ZSBpbiBhIGZpbmFsbHkgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLgorCisgICAgPj4+IGRlZiB0ZXN0KCk6CisgICAgLi4uICAgIGZvciBhYmMgaW4gcmFuZ2UoMTApOgorICAgIC4uLiAgICAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgICAgY29udGludWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzM2XT4sIGxpbmUgNikKKworVGhpcyBpcyBlc3NlbnRpYWxseSBhIGNvbnRpbnVlIGluIGEgZmluYWxseSB3aGljaCBzaG91bGQgbm90IGJlIGFsbG93ZWQuCisKKyAgICA+Pj4gZGVmIHRlc3QoKToKKyAgICAuLi4gICAgZm9yIGFiYyBpbiByYW5nZSgxMCk6CisgICAgLi4uICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgcGFzcworICAgIC4uLiAgICAgICAgZmluYWxseToKKyAgICAuLi4gICAgICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgLi4uICAgICAgICAgICAgZXhjZXB0OgorICAgIC4uLiAgICAgICAgICAgICAgICBwYXNzCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszN10+LCBsaW5lIDcpCisKKyAgICA+Pj4gZGVmIGZvbygpOgorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgY29udGludWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzM4XT4sIGxpbmUgNSkKKworICAgID4+PiBkZWYgZm9vKCk6CisgICAgLi4uICAgICBmb3IgYSBpbiAoKToKKyAgICAuLi4gICAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgICAgcGFzcworICAgIC4uLiAgICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgICAgY29udGludWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzM5XT4sIGxpbmUgNikKKworICAgID4+PiBkZWYgZm9vKCk6CisgICAgLi4uICAgICBmb3IgYSBpbiAoKToKKyAgICAuLi4gICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgIC4uLiAgICAgICAgICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgICAgICAgICAgcGFzcworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDBdPiwgbGluZSA3KQorCisgICAgPj4+IGRlZiBmb28oKToKKyAgICAuLi4gIGZvciBhIGluICgpOgorICAgIC4uLiAgIHRyeTogcGFzcworICAgIC4uLiAgIGZpbmFsbHk6CisgICAgLi4uICAgIHRyeToKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4gICAgZXhjZXB0OgorICAgIC4uLiAgICAgY29udGludWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQxXT4sIGxpbmUgOCkKKworVGhlcmUgaXMgb25lIHRlc3QgZm9yIGEgYnJlYWsgdGhhdCBpcyBub3QgaW4gYSBsb29wLiAgVGhlIGNvbXBpbGVyCit1c2VzIGEgc2luZ2xlIGRhdGEgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgdHJ5LWZpbmFsbHkgYW5kIGxvb3BzLAorc28gd2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgYSBicmVhayBpcyBhY3R1YWxseSBpbnNpZGUgYSBsb29wLiAgSWYgaXQKK2lzbid0LCB0aGVyZSBzaG91bGQgYmUgYSBzeW50YXggZXJyb3IuCisKKyAgID4+PiB0cnk6CisgICAuLi4gICAgIHByaW50IDEKKyAgIC4uLiAgICAgYnJlYWsKKyAgIC4uLiAgICAgcHJpbnQgMgorICAgLi4uIGZpbmFsbHk6CisgICAuLi4gICAgIHByaW50IDMKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICBTeW50YXhFcnJvcjogJ2JyZWFrJyBvdXRzaWRlIGxvb3AgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDJdPiwgbGluZSAzKQorCitUaGlzIHNob3VsZCBwcm9iYWJseSByYWlzZSBhIGJldHRlciBlcnJvciB0aGFuIGEgU3lzdGVtRXJyb3IgKG9yIG5vbmUgYXQgYWxsKS4KK0luIDIuNSB0aGVyZSB3YXMgYSBtaXNzaW5nIGV4Y2VwdGlvbiBhbmQgYW4gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQgaW4gYSBkZWJ1ZworYnVpbGQuICBUaGUgbnVtYmVyIG9mIGJsb2NrcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBDT19NQVhCTE9DS1MuICBTRiAjMTU2NTUxNAorCisgICA+Pj4gd2hpbGUgMToKKyAgIC4uLiAgd2hpbGUgMjoKKyAgIC4uLiAgIHdoaWxlIDM6CisgICAuLi4gICAgd2hpbGUgNDoKKyAgIC4uLiAgICAgd2hpbGUgNToKKyAgIC4uLiAgICAgIHdoaWxlIDY6CisgICAuLi4gICAgICAgd2hpbGUgODoKKyAgIC4uLiAgICAgICAgd2hpbGUgOToKKyAgIC4uLiAgICAgICAgIHdoaWxlIDEwOgorICAgLi4uICAgICAgICAgIHdoaWxlIDExOgorICAgLi4uICAgICAgICAgICB3aGlsZSAxMjoKKyAgIC4uLiAgICAgICAgICAgIHdoaWxlIDEzOgorICAgLi4uICAgICAgICAgICAgIHdoaWxlIDE0OgorICAgLi4uICAgICAgICAgICAgICB3aGlsZSAxNToKKyAgIC4uLiAgICAgICAgICAgICAgIHdoaWxlIDE2OgorICAgLi4uICAgICAgICAgICAgICAgIHdoaWxlIDE3OgorICAgLi4uICAgICAgICAgICAgICAgICB3aGlsZSAxODoKKyAgIC4uLiAgICAgICAgICAgICAgICAgIHdoaWxlIDE5OgorICAgLi4uICAgICAgICAgICAgICAgICAgIHdoaWxlIDIwOgorICAgLi4uICAgICAgICAgICAgICAgICAgICB3aGlsZSAyMToKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIDIyOgorICAgLi4uICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIC4uLgorICAgU3lzdGVtRXJyb3I6IHRvbyBtYW55IHN0YXRpY2FsbHkgbmVzdGVkIGJsb2NrcworCiAiIiIKIAogaW1wb3J0IHJlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKaW5kZXggYTQ3YWZhNC4uMGNlYmIyOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQpAQCAtMjgwLDYgKzI4MCwzMiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmRzdC5hZGRmaWxlKHRhcmluZm8sIGYpCiAKKworY2xhc3MgV3JpdGUxMDBUZXN0KEJhc2VUZXN0KToKKyAgICAjIFRoZSBuYW1lIGZpZWxkIGluIGEgdGFyIGhlYWRlciBzdG9yZXMgc3RyaW5ncyBvZiBhdCBtb3N0IDEwMCBjaGFycy4KKyAgICAjIElmIGEgc3RyaW5nIGlzIHNob3J0ZXIgdGhhbiAxMDAgY2hhcnMgaXQgaGFzIHRvIGJlIHBhZGRlZCB3aXRoICdcMCcsCisgICAgIyB3aGljaCBpbXBsaWVzIHRoYXQgYSBzdHJpbmcgb2YgZXhhY3RseSAxMDAgY2hhcnMgaXMgc3RvcmVkIHdpdGhvdXQKKyAgICAjIGEgdHJhaWxpbmcgJ1wwJy4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorICAgICAgICBzZWxmLm5hbWUgKz0gIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorCisgICAgICAgIHNlbGYudGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUoKSwgInciKQorICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi50YXIuYWRkZmlsZSh0KQorICAgICAgICBzZWxmLnRhci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi50YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSgpKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRhci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRhci5nZXRuYW1lcygpWzBdLCBzZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgImZhaWxlZCB0byBzdG9yZSAxMDAgY2hhciBmaWxlbmFtZSIpCisKKwogY2xhc3MgV3JpdGVTaXplMFRlc3QoQmFzZVRlc3QpOgogICAgIG1vZGUgPSAndycKIApAQCAtMzYyLDEzICszODgsNiBAQAogICAgICAgIGlzIHRlc3RlZCBhcyB3ZWxsLgogICAgICIiIgogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLnRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKCksICJ3IikKLSAgICAgICAgc2VsZi50YXIucG9zaXggPSBGYWxzZQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLnRhci5jbG9zZSgpCi0KICAgICBkZWYgX2xlbmd0aChzZWxmLCBzKToKICAgICAgICAgYmxvY2tzLCByZW1haW5kZXIgPSBkaXZtb2QobGVuKHMpICsgMSwgNTEyKQogICAgICAgICBpZiByZW1haW5kZXI6CkBAIC0zOTcsMTIgKzQxNiwyMyBAQAogICAgICAgICAgICAgdGFyaW5mby5saW5rbmFtZSA9IGxpbmsKICAgICAgICAgICAgIHRhcmluZm8udHlwZSA9IHRhcmZpbGUuTE5LVFlQRQogCi0gICAgICAgIHNlbGYudGFyLmFkZGZpbGUodGFyaW5mbykKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUoKSwgInciKQorICAgICAgICB0YXIucG9zaXggPSBGYWxzZQorICAgICAgICB0YXIuYWRkZmlsZSh0YXJpbmZvKQogCiAgICAgICAgIHYxID0gc2VsZi5fY2FsY19zaXplKG5hbWUsIGxpbmspCi0gICAgICAgIHYyID0gc2VsZi50YXIub2Zmc2V0CisgICAgICAgIHYyID0gdGFyLm9mZnNldAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYxLCB2MiwgIkdOVSBsb25nbmFtZS9sb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQogCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUoKSkKKyAgICAgICAgbWVtYmVyID0gdGFyLm5leHQoKQorICAgICAgICBzZWxmLmZhaWxJZihtZW1iZXIgaXMgTm9uZSwgInVuYWJsZSB0byByZWFkIGxvbmduYW1lIG1lbWJlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXJpbmZvLm5hbWUgPT0gbWVtYmVyLm5hbWUgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgIHRhcmluZm8ubGlua25hbWUgPT0gbWVtYmVyLmxpbmtuYW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHJlYWQgbG9uZ25hbWUgbWVtYmVyIikKKwogICAgIGRlZiB0ZXN0X2xvbmduYW1lXzEwMjMoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3QoKCJsb25nbmFtLyIgKiAxMjcpICsgImxvbmduYW0iKQogCkBAIC02MjMsNiArNjUzLDcgQEAKICAgICAgICAgUmVhZEFzdGVyaXNrVGVzdCwKICAgICAgICAgUmVhZFN0cmVhbUFzdGVyaXNrVGVzdCwKICAgICAgICAgV3JpdGVUZXN0LAorICAgICAgICBXcml0ZTEwMFRlc3QsCiAgICAgICAgIFdyaXRlU2l6ZTBUZXN0LAogICAgICAgICBXcml0ZVN0cmVhbVRlc3QsCiAgICAgICAgIFdyaXRlR05VTG9uZ1Rlc3QsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQppbmRleCBhZWFhNzdlLi4yMDQ3YTYzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKQEAgLTI3LDcgKzI3LDcgQEAKICMgbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIG9wZW5lZCBhdCBvbmUgdGltZSAoc2VlIHVsaW1pdCAtbikKIGlmIHN5cy5wbGF0Zm9ybSA9PSAnbWFjJzoKICAgICBURVNUX0ZJTEVTID0gMzIKLWVsaWYgc3lzLnBsYXRmb3JtID09ICdvcGVuYnNkMyc6CitlbGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29wZW5ic2QzJywgJ29wZW5ic2Q0Jyk6CiAgICAgVEVTVF9GSUxFUyA9IDQ4CiBlbHNlOgogICAgIFRFU1RfRklMRVMgPSAxMDAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQppbmRleCA0ZmQ3ODM0Li4xODEyOWRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CkBAIC0xMDIsMTUgKzEwMiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZCwgcmVzdWx0KQogCiAgICAgZGVmIHRlc3Rfc3RycHRpbWUoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGJlIGFibGUgdG8gZ28gcm91bmQtdHJpcCBmcm9tIHN0cmZ0aW1lIHRvIHN0cnB0aW1lIHdpdGhvdXQKKyAgICAgICAgIyB0aHJvd2luZyBhbiBleGNlcHRpb24uCiAgICAgICAgIHR0ID0gdGltZS5nbXRpbWUoc2VsZi50KQogICAgICAgICBmb3IgZGlyZWN0aXZlIGluICgnYScsICdBJywgJ2InLCAnQicsICdjJywgJ2QnLCAnSCcsICdJJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2onLCAnbScsICdNJywgJ3AnLCAnUycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdVJywgJ3cnLCAnVycsICd4JywgJ1gnLCAneScsICdZJywgJ1onLCAnJScpOgotICAgICAgICAgICAgZm9ybWF0ID0gJyAlJyArIGRpcmVjdGl2ZQorICAgICAgICAgICAgZm9ybWF0ID0gJyUnICsgZGlyZWN0aXZlCisgICAgICAgICAgICBzdHJmX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoZm9ybWF0LCB0dCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0aW1lLnN0cnB0aW1lKHRpbWUuc3RyZnRpbWUoZm9ybWF0LCB0dCksIGZvcm1hdCkKKyAgICAgICAgICAgICAgICB0aW1lLnN0cnB0aW1lKHN0cmZfb3V0cHV0LCBmb3JtYXQpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvbnZlcnNpb24gc3BlY2lmaWVyOiAlciBmYWlsZWQuJyAlIGZvcm1hdCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImNvbnZlcnNpb24gc3BlY2lmaWVyICVyIGZhaWxlZCB3aXRoICclcycgaW5wdXQuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQsIHN0cmZfb3V0cHV0KSkKIAogICAgIGRlZiB0ZXN0X2FzY3RpbWUoc2VsZik6CiAgICAgICAgIHRpbWUuYXNjdGltZSh0aW1lLmdtdGltZShzZWxmLnQpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weSBiL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkKaW5kZXggYjA2NDk2Ny4uYmU2YzE4ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5CkBAIC0xLDkgKzEsOTMgQEAKLWltcG9ydCBvcywgZ2xvYiwgcmFuZG9tCisiIiJUZXN0cyBmb3IgdGhlIHRva2VuaXplIG1vZHVsZS4KKworVGhlIHRlc3RzIHdlcmUgb3JpZ2luYWxseSB3cml0dGVuIGluIHRoZSBvbGQgUHl0aG9uIHN0eWxlLCB3aGVyZSB0aGUKK3Rlc3Qgb3V0cHV0IHdhcyBjb21wYXJlZCB0byBhIGdvbGRlbiBmaWxlLiAgVGhpcyBkb2NzdHJpbmcgcmVwcmVzZW50cwordGhlIGZpcnN0IHN0ZXBzIHRvd2FyZHMgcmV3cml0aW5nIHRoZSBlbnRpcmUgdGVzdCBhcyBhIGRvY3Rlc3QuCisKK1RoZSB0ZXN0cyBjYW4gYmUgcmVhbGx5IHNpbXBsZS4gIEdpdmVuIGEgc21hbGwgZnJhZ21lbnQgb2Ygc291cmNlCitjb2RlLCBwcmludCBvdXQgYSB0YWJsZSB3aXRoIHRoZSB0b2tlbnMuICBUaGUgRU5ETUFSSyBpcyBvbWl0dGVkIGZvcgorYnJldml0eS4KKworPj4+IGR1bXBfdG9rZW5zKCIxICsgMSIpCitOVU1CRVIgICAgICAnMScgICAgICAgICAgICgxLCAwKSAoMSwgMSkKK09QICAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorTlVNQkVSICAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisKK0EgY29tbWVudCBnZW5lcmF0ZXMgYSB0b2tlbiBoZXJlLCB1bmxpa2UgaW4gdGhlIHBhcnNlciBtb2R1bGUuICBUaGUKK2NvbW1lbnQgdG9rZW4gaXMgZm9sbG93ZWQgYnkgYW4gTkwgb3IgYSBORVdMSU5FIHRva2VuLCBkZXBlbmRpbmcgb24KK3doZXRoZXIgdGhlIGxpbmUgY29udGFpbnMgdGhlIGNvbXBsZXRpb24gb2YgYSBzdGF0ZW1lbnQuCisKKz4+PiBkdW1wX3Rva2VucygiaWYgRmFsc2U6XFxuIgorLi4uICAgICAgICAgICAgICIgICAgIyBOTFxcbiIKKy4uLiAgICAgICAgICAgICAiICAgIFRydWUgPSBGYWxzZSAjIE5FV0xJTkVcXG4iKQorTkFNRSAgICAgICAgJ2lmJyAgICAgICAgICAoMSwgMCkgKDEsIDIpCitOQU1FICAgICAgICAnRmFsc2UnICAgICAgICgxLCAzKSAoMSwgOCkKK09QICAgICAgICAgICc6JyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorTkVXTElORSAgICAgJ1xcbicgICAgICAgICAgKDEsIDkpICgxLCAxMCkKK0NPTU1FTlQgICAgICcjIE5MJyAgICAgICAgKDIsIDQpICgyLCA4KQorTkwgICAgICAgICAgJ1xcbicgICAgICAgICAgKDIsIDgpICgyLCA5KQorSU5ERU5UICAgICAgJyAgICAnICAgICAgICAoMywgMCkgKDMsIDQpCitOQU1FICAgICAgICAnVHJ1ZScgICAgICAgICgzLCA0KSAoMywgOCkKK09QICAgICAgICAgICc9JyAgICAgICAgICAgKDMsIDkpICgzLCAxMCkKK05BTUUgICAgICAgICdGYWxzZScgICAgICAgKDMsIDExKSAoMywgMTYpCitDT01NRU5UICAgICAnIyBORVdMSU5FJyAgICgzLCAxNykgKDMsIDI2KQorTkVXTElORSAgICAgJ1xcbicgICAgICAgICAgKDMsIDI2KSAoMywgMjcpCitERURFTlQgICAgICAnJyAgICAgICAgICAgICg0LCAwKSAoNCwgMCkKKworCitUaGVyZSB3aWxsIGJlIGEgYnVuY2ggbW9yZSB0ZXN0cyBvZiBzcGVjaWZpYyBzb3VyY2UgcGF0dGVybnMuCisKK1RoZSB0b2tlbml6ZSBtb2R1bGUgYWxzbyBkZWZpbmVzIGFuIHVudG9rZW5pemUgZnVuY3Rpb24gdGhhdCBzaG91bGQKK3JlZ2VuZXJhdGUgdGhlIG9yaWdpbmFsIHByb2dyYW0gdGV4dCBmcm9tIHRoZSB0b2tlbnMuCisKK1RoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGZvcm1hdHRpbmcgcHJhY3RpY2VzIHRoYXQgYXJlIGVhc3kgdG8gZ2V0IHJpZ2h0LgorCis+Pj4gcm91bmR0cmlwKCJpZiB4ID09IDE6XFxuIgorLi4uICAgICAgICAgICAiICAgIHByaW50IHhcXG4iKQoraWYgeCA9PSAxOgorICAgIHByaW50IHgKKworU29tZSBwZW9wbGUgdXNlIGRpZmZlcmVudCBmb3JtYXR0aW5nIGNvbnZlbnRpb25zLCB3aGljaCBtYWtlcwordW50b2tlbml6ZSBhIGxpdHRsZSB0cmlja2llci4gIE5vdGUgdGhhdCB0aGlzIHRlc3QgaW52b2x2ZXMgdHJhaWxpbmcKK3doaXRlc3BhY2UgYWZ0ZXIgdGhlIGNvbG9uLiAgTm90ZSB0aGF0IHdlIHVzZSBoZXggZXNjYXBlcyB0byBtYWtlIHRoZQordHdvIHRyYWlsaW5nIGJsYW5rcyBhcHBhcmVudCBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0LgorCis+Pj4gcm91bmR0cmlwKCJpZiAgIHggID09ICAxICA6ICBcXG4iCisuLi4gICAgICAgICAgICIgIHByaW50IHhcXG4iKQoraWYgICB4ICA9PSAgMSAgOlx4MjBceDIwCisgIHByaW50IHgKKworQ29tbWVudHMgbmVlZCB0byBnbyBpbiB0aGUgcmlnaHQgcGxhY2UuCisKKz4+PiByb3VuZHRyaXAoImlmIHggPT0gMTpcXG4iCisuLi4gICAgICAgICAgICIgICAgIyBBIGNvbW1lbnQgYnkgaXRzZWxmLlxcbiIKKy4uLiAgICAgICAgICAgIiAgICBwcmludCB4ICAjIENvbW1lbnQgaGVyZSwgdG9vLlxcbiIKKy4uLiAgICAgICAgICAgIiAgICAjIEFub3RoZXIgY29tbWVudC5cXG4iCisuLi4gICAgICAgICAgICJhZnRlcl9pZiA9IFRydWVcXG4iKQoraWYgeCA9PSAxOgorICAgICMgQSBjb21tZW50IGJ5IGl0c2VsZi4KKyAgICBwcmludCB4ICAjIENvbW1lbnQgaGVyZSwgdG9vLgorICAgICMgQW5vdGhlciBjb21tZW50LgorYWZ0ZXJfaWYgPSBUcnVlCisKKz4+PiByb3VuZHRyaXAoImlmICh4ICAjIFRoZSBjb21tZW50cyBuZWVkIHRvIGdvIGluIHRoZSByaWdodCBwbGFjZVxcbiIKKy4uLiAgICAgICAgICAgIiAgICA9PSAxKTpcXG4iCisuLi4gICAgICAgICAgICIgICAgcHJpbnQgJ3ggPT0gMSdcXG4iKQoraWYgKHggICMgVGhlIGNvbW1lbnRzIG5lZWQgdG8gZ28gaW4gdGhlIHJpZ2h0IHBsYWNlCisgICAgPT0gMSk6CisgICAgcHJpbnQgJ3ggPT0gMScKKworIiIiCisKK2ltcG9ydCBvcywgZ2xvYiwgcmFuZG9tLCB0aW1lLCBzeXMKIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHZlcmJvc2UsIGZpbmRmaWxlLCBpc19yZXNvdXJjZV9lbmFibGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RGYWlsZWQpCi1mcm9tIHRva2VuaXplIGltcG9ydCAodG9rZW5pemUsIGdlbmVyYXRlX3Rva2VucywgdW50b2tlbml6ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOVU1CRVIsIE5BTUUsIE9QLCBTVFJJTkcpCitmcm9tIHRva2VuaXplIGltcG9ydCAodG9rZW5pemUsIGdlbmVyYXRlX3Rva2VucywgdW50b2tlbml6ZSwgdG9rX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgRU5ETUFSS0VSLCBOVU1CRVIsIE5BTUUsIE9QLCBTVFJJTkcsIENPTU1FTlQpCisKKyMgSG93IG11Y2ggdGltZSBpbiBzZWNvbmRzIGNhbiBwYXNzIGJlZm9yZSB3ZSBwcmludCBhICdTdGlsbCB3b3JraW5nJyBtZXNzYWdlLgorX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMID0gNSAqIDYwCiAKICMgVGVzdCByb3VuZHRyaXAgZm9yIGB1bnRva2VuaXplYC4gIGBmYCBpcyBhIGZpbGUgcGF0aC4gIFRoZSBzb3VyY2UgY29kZSBpbiBmCiAjIGlzIHRva2VuaXplZCwgY29udmVydGVkIGJhY2sgdG8gc291cmNlIGNvZGUgdmlhIHRva2VuaXplLnVudG9rZW5pemUoKSwKQEAgLTI0LDYgKzEwOCwyMyBAQAogICAgIGlmIHQxICE9IHQyOgogICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJ1bnRva2VuaXplKCkgcm91bmR0cmlwIGZhaWxlZCBmb3IgJXIiICUgZikKIAorZGVmIGR1bXBfdG9rZW5zKHMpOgorICAgICIiIlByaW50IG91dCB0aGUgdG9rZW5zIGluIHMgaW4gYSB0YWJsZSBmb3JtYXQuCisKKyAgICBUaGUgRU5ETUFSS0VSIGlzIG9taXR0ZWQuCisgICAgIiIiCisgICAgZiA9IFN0cmluZ0lPKHMpCisgICAgZm9yIHR5cGUsIHRva2VuLCBzdGFydCwgZW5kLCBsaW5lIGluIGdlbmVyYXRlX3Rva2VucyhmLnJlYWRsaW5lKToKKyAgICAgICAgaWYgdHlwZSA9PSBFTkRNQVJLRVI6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0eXBlID0gdG9rX25hbWVbdHlwZV0KKyAgICAgICAgcHJpbnQgIiUodHlwZSktMTAuMTBzICAlKHRva2VuKS0xMy4xM3IgJShzdGFydClzICUoZW5kKXMiICUgbG9jYWxzKCkKKworZGVmIHJvdW5kdHJpcChzKToKKyAgICBmID0gU3RyaW5nSU8ocykKKyAgICBzb3VyY2UgPSB1bnRva2VuaXplKGdlbmVyYXRlX3Rva2VucyhmLnJlYWRsaW5lKSkKKyAgICBwcmludCBzb3VyY2UsCisKICMgVGhpcyBpcyBhbiBleGFtcGxlIGZyb20gdGhlIGRvY3MsIHNldCB1cCBhcyBhIGRvY3Rlc3QuCiBkZWYgZGVjaXN0bXQocyk6CiAgICAgIiIiU3Vic3RpdHV0ZSBEZWNpbWFscyBmb3IgZmxvYXRzIGluIGEgc3RyaW5nIG9mIHN0YXRlbWVudHMuCkBAIC02Niw2ICsxNjcsOCBAQAogICAgIGlmIHZlcmJvc2U6CiAgICAgICAgIHByaW50ICdzdGFydGluZy4uLicKIAorICAgIG5leHRfdGltZSA9IHRpbWUudGltZSgpICsgX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMCisKICAgICAjIFRoaXMgZGlzcGxheXMgdGhlIHRva2VuaXphdGlvbiBvZiB0b2tlbml6ZV90ZXN0cy5weSB0byBzdGRvdXQsIGFuZAogICAgICMgcmVncnRlc3QucHkgY2hlY2tzIHRoYXQgdGhpcyBlcXVhbHMgdGhlIGV4cGVjdGVkIG91dHB1dCAoaW4gdGhlCiAgICAgIyB0ZXN0L291dHB1dC8gZGlyZWN0b3J5KS4KQEAgLTg1LDYgKzE4OCwxMiBAQAogICAgICAgICB0ZXN0ZmlsZXMgPSByYW5kb20uc2FtcGxlKHRlc3RmaWxlcywgMTApCiAKICAgICBmb3IgZiBpbiB0ZXN0ZmlsZXM6CisgICAgICAgICMgUHJpbnQgc3RpbGwgd29ya2luZyBtZXNzYWdlIHNpbmNlIHRoaXMgdGVzdCBjYW4gYmUgcmVhbGx5IHNsb3cKKyAgICAgICAgaWYgbmV4dF90aW1lIDw9IHRpbWUudGltZSgpOgorICAgICAgICAgICAgbmV4dF90aW1lID0gdGltZS50aW1lKCkgKyBfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwKKyAgICAgICAgICAgIHByaW50ID4+c3lzLl9fc3Rkb3V0X18sICcgIHRlc3RfbWFpbiBzdGlsbCB3b3JraW5nLCBiZSBwYXRpZW50Li4uJworICAgICAgICAgICAgc3lzLl9fc3Rkb3V0X18uZmx1c2goKQorCiAgICAgICAgIHRlc3Rfcm91bmR0cmlwKGYpCiAKICAgICAjIFRlc3QgZGV0ZWN0b24gb2YgSW5kZW50YXRpb25FcnJvci4KQEAgLTEwNSw3ICsyMTQsNyBAQAogICAgICMgUnVuIHRoZSBkb2N0ZXN0cyBpbiB0aGlzIG1vZHVsZS4KICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdG9rZW5pemUgICMgaS5lLiwgdGhpcyBtb2R1bGUKICAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fZG9jdGVzdAotICAgIHJ1bl9kb2N0ZXN0KHRlc3RfdG9rZW5pemUpCisgICAgcnVuX2RvY3Rlc3QodGVzdF90b2tlbml6ZSwgdmVyYm9zZSkKIAogICAgIGlmIHZlcmJvc2U6CiAgICAgICAgIHByaW50ICdmaW5pc2hlZCcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKaW5kZXggOWJhMWRjYS4uNDhjNWQxOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKQEAgLTEyMiw2ICsxMjIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWC5fX25hbWVfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3ZhbHVlKSkKIAorICAgIGRlZiB0ZXN0X3dpdGhvdXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBbJ05vbmVcbiddKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVHJhY2ViYWNrQ2FzZXMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5IGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQppbmRleCBmMGJkZmRlLi44ZDI2OTE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKQEAgLTEsMjg1ICsxLDI3MSBAQAogIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCA2LCBidWlsdC1pbiB0eXBlcwogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAqCi0KLXByaW50ICc2LiBCdWlsdC1pbiB0eXBlcycKLQotcHJpbnQgJzYuMSBUcnV0aCB2YWx1ZSB0ZXN0aW5nJwotaWYgTm9uZTogcmFpc2UgVGVzdEZhaWxlZCwgJ05vbmUgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJwotaWYgMDogcmFpc2UgVGVzdEZhaWxlZCwgJzAgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJwotaWYgMEw6IHJhaXNlIFRlc3RGYWlsZWQsICcwTCBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnCi1pZiAwLjA6IHJhaXNlIFRlc3RGYWlsZWQsICcwLjAgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJwotaWYgJyc6IHJhaXNlIFRlc3RGYWlsZWQsICdcJ1wnIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScKLWlmIG5vdCAxOiByYWlzZSBUZXN0RmFpbGVkLCAnMSBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnCi1pZiBub3QgMUw6IHJhaXNlIFRlc3RGYWlsZWQsICcxTCBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnCi1pZiBub3QgMS4wOiByYWlzZSBUZXN0RmFpbGVkLCAnMS4wIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScKLWlmIG5vdCAneCc6IHJhaXNlIFRlc3RGYWlsZWQsICdcJ3hcJyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnCi1pZiBub3Qgeyd4JzogMX06IHJhaXNlIFRlc3RGYWlsZWQsICd7XCd4XCc6IDF9IGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScKLWRlZiBmKCk6IHBhc3MKLWNsYXNzIEM6IHBhc3MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaGF2ZV91bmljb2RlCitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKLXggPSBDKCkKLWlmIG5vdCBmOiByYWlzZSBUZXN0RmFpbGVkLCAnZiBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnCi1pZiBub3QgQzogcmFpc2UgVGVzdEZhaWxlZCwgJ0MgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJwotaWYgbm90IHN5czogcmFpc2UgVGVzdEZhaWxlZCwgJ3N5cyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnCi1pZiBub3QgeDogcmFpc2UgVGVzdEZhaWxlZCwgJ3ggaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJwogCi1wcmludCAnNi4yIEJvb2xlYW4gb3BlcmF0aW9ucycKLWlmIDAgb3IgMDogcmFpc2UgVGVzdEZhaWxlZCwgJzAgb3IgMCBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnCi1pZiAxIGFuZCAxOiBwYXNzCi1lbHNlOiByYWlzZSBUZXN0RmFpbGVkLCAnMSBhbmQgMSBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnCi1pZiBub3QgMTogcmFpc2UgVGVzdEZhaWxlZCwgJ25vdCAxIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScKK2NsYXNzIFR5cGVzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi1wcmludCAnNi4zIENvbXBhcmlzb25zJwotaWYgMCA8IDEgPD0gMSA9PSAxID49IDEgPiAwICE9IDE6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICdpbnQgY29tcGFyaXNvbnMgZmFpbGVkJwotaWYgMEwgPCAxTCA8PSAxTCA9PSAxTCA+PSAxTCA+IDBMICE9IDFMOiBwYXNzCi1lbHNlOiByYWlzZSBUZXN0RmFpbGVkLCAnbG9uZyBpbnQgY29tcGFyaXNvbnMgZmFpbGVkJwotaWYgMC4wIDwgMS4wIDw9IDEuMCA9PSAxLjAgPj0gMS4wID4gMC4wICE9IDEuMDogcGFzcwotZWxzZTogcmFpc2UgVGVzdEZhaWxlZCwgJ2Zsb2F0IGNvbXBhcmlzb25zIGZhaWxlZCcKLWlmICcnIDwgJ2EnIDw9ICdhJyA9PSAnYScgPCAnYWJjJyA8ICdhYmQnIDwgJ2InOiBwYXNzCi1lbHNlOiByYWlzZSBUZXN0RmFpbGVkLCAnc3RyaW5nIGNvbXBhcmlzb25zIGZhaWxlZCcKLWlmIE5vbmUgaXMgTm9uZTogcGFzcwotZWxzZTogcmFpc2UgVGVzdEZhaWxlZCwgJ2lkZW50aXR5IHRlc3QgZmFpbGVkJworICAgIGRlZiB0ZXN0X3RydXRoX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgaWYgTm9uZTogc2VsZi5mYWlsKCdOb25lIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCisgICAgICAgIGlmIDA6IHNlbGYuZmFpbCgnMCBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQorICAgICAgICBpZiAwTDogc2VsZi5mYWlsKCcwTCBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQorICAgICAgICBpZiAwLjA6IHNlbGYuZmFpbCgnMC4wIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCisgICAgICAgIGlmICcnOiBzZWxmLmZhaWwoJ1wnXCcgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJykKKyAgICAgICAgaWYgbm90IDE6IHNlbGYuZmFpbCgnMSBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3QgMUw6IHNlbGYuZmFpbCgnMUwgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKKyAgICAgICAgaWYgbm90IDEuMDogc2VsZi5mYWlsKCcxLjAgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKKyAgICAgICAgaWYgbm90ICd4Jzogc2VsZi5mYWlsKCdcJ3hcJyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3Qgeyd4JzogMX06IHNlbGYuZmFpbCgne1wneFwnOiAxfSBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBkZWYgZigpOiBwYXNzCisgICAgICAgIGNsYXNzIEM6IHBhc3MKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICB4ID0gQygpCisgICAgICAgIGlmIG5vdCBmOiBzZWxmLmZhaWwoJ2YgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKKyAgICAgICAgaWYgbm90IEM6IHNlbGYuZmFpbCgnQyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3Qgc3lzOiBzZWxmLmZhaWwoJ3N5cyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3QgeDogc2VsZi5mYWlsKCd4IGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCiAKLXRyeTogZmxvYXQoJycpCi1leGNlcHQgVmFsdWVFcnJvcjogcGFzcwotZWxzZTogcmFpc2UgVGVzdEZhaWxlZCwgImZsb2F0KCcnKSBkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciIKKyAgICBkZWYgdGVzdF9ib29sZWFuX29wcyhzZWxmKToKKyAgICAgICAgaWYgMCBvciAwOiBzZWxmLmZhaWwoJzAgb3IgMCBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQorICAgICAgICBpZiAxIGFuZCAxOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnMSBhbmQgMSBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3QgMTogc2VsZi5mYWlsKCdub3QgMSBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQogCi10cnk6IGZsb2F0KCc1XDAnKQotZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICJmbG9hdCgnNVwwJykgZGlkbid0IHJhaXNlIFZhbHVlRXJyb3IiCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGlmIDAgPCAxIDw9IDEgPT0gMSA+PSAxID4gMCAhPSAxOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnaW50IGNvbXBhcmlzb25zIGZhaWxlZCcpCisgICAgICAgIGlmIDBMIDwgMUwgPD0gMUwgPT0gMUwgPj0gMUwgPiAwTCAhPSAxTDogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcgaW50IGNvbXBhcmlzb25zIGZhaWxlZCcpCisgICAgICAgIGlmIDAuMCA8IDEuMCA8PSAxLjAgPT0gMS4wID49IDEuMCA+IDAuMCAhPSAxLjA6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdmbG9hdCBjb21wYXJpc29ucyBmYWlsZWQnKQorICAgICAgICBpZiAnJyA8ICdhJyA8PSAnYScgPT0gJ2EnIDwgJ2FiYycgPCAnYWJkJyA8ICdiJzogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ3N0cmluZyBjb21wYXJpc29ucyBmYWlsZWQnKQorICAgICAgICBpZiBOb25lIGlzIE5vbmU6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdpZGVudGl0eSB0ZXN0IGZhaWxlZCcpCiAKLXRyeTogNS4wIC8gMC4wCi1leGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICI1LjAgLyAwLjAgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIgorICAgIGRlZiB0ZXN0X2Zsb2F0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAnNVwwJykKIAotdHJ5OiA1LjAgLy8gMC4wCi1leGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICI1LjAgLy8gMC4wIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIKKyAgICBkZWYgdGVzdF96ZXJvX2RpdmlzaW9uKHNlbGYpOgorICAgICAgICB0cnk6IDUuMCAvIDAuMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCI1LjAgLyAwLjAgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKIAotdHJ5OiA1LjAgJSAwLjAKLWV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjogcGFzcwotZWxzZTogcmFpc2UgVGVzdEZhaWxlZCwgIjUuMCAlIDAuMCBkaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiCisgICAgICAgIHRyeTogNS4wIC8vIDAuMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCI1LjAgLy8gMC4wIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCiAKLXRyeTogNSAvIDBMCi1leGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICI1IC8gMEwgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIgorICAgICAgICB0cnk6IDUuMCAlIDAuMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCI1LjAgJSAwLjAgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKIAotdHJ5OiA1IC8vIDBMCi1leGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICI1IC8vIDBMIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIKKyAgICAgICAgdHJ5OiA1IC8gMEwKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiNSAvIDBMIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCiAKLXRyeTogNSAlIDBMCi1leGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICI1ICUgMEwgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIgorICAgICAgICB0cnk6IDUgLy8gMEwKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiNSAvLyAwTCBkaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQogCi1wcmludCAnNi40IE51bWVyaWMgdHlwZXMgKG1vc3RseSBjb252ZXJzaW9ucyknCi1pZiAwICE9IDBMIG9yIDAgIT0gMC4wIG9yIDBMICE9IDAuMDogcmFpc2UgVGVzdEZhaWxlZCwgJ21peGVkIGNvbXBhcmlzb25zJwotaWYgMSAhPSAxTCBvciAxICE9IDEuMCBvciAxTCAhPSAxLjA6IHJhaXNlIFRlc3RGYWlsZWQsICdtaXhlZCBjb21wYXJpc29ucycKLWlmIC0xICE9IC0xTCBvciAtMSAhPSAtMS4wIG9yIC0xTCAhPSAtMS4wOgotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdpbnQvbG9uZy9mbG9hdCB2YWx1ZSBub3QgZXF1YWwnCi0jIGNhbGxpbmcgYnVpbHQtaW4gdHlwZXMgd2l0aG91dCBhcmd1bWVudCBtdXN0IHJldHVybiAwCi1pZiBpbnQoKSAhPSAwOiByYWlzZSBUZXN0RmFpbGVkLCAnaW50KCkgZG9lcyBub3QgcmV0dXJuIDAnCi1pZiBsb25nKCkgIT0gMEw6IHJhaXNlIFRlc3RGYWlsZWQsICdsb25nKCkgZG9lcyBub3QgcmV0dXJuIDBMJwotaWYgZmxvYXQoKSAhPSAwLjA6IHJhaXNlIFRlc3RGYWlsZWQsICdmbG9hdCgpIGRvZXMgbm90IHJldHVybiAwLjAnCi1pZiBpbnQoMS45KSA9PSAxID09IGludCgxLjEpIGFuZCBpbnQoLTEuMSkgPT0gLTEgPT0gaW50KC0xLjkpOiBwYXNzCi1lbHNlOiByYWlzZSBUZXN0RmFpbGVkLCAnaW50KCkgZG9lcyBub3Qgcm91bmQgcHJvcGVybHknCi1pZiBsb25nKDEuOSkgPT0gMUwgPT0gbG9uZygxLjEpIGFuZCBsb25nKC0xLjEpID09IC0xTCA9PSBsb25nKC0xLjkpOiBwYXNzCi1lbHNlOiByYWlzZSBUZXN0RmFpbGVkLCAnbG9uZygpIGRvZXMgbm90IHJvdW5kIHByb3Blcmx5JwotaWYgZmxvYXQoMSkgPT0gMS4wIGFuZCBmbG9hdCgtMSkgPT0gLTEuMCBhbmQgZmxvYXQoMCkgPT0gMC4wOiBwYXNzCi1lbHNlOiByYWlzZSBUZXN0RmFpbGVkLCAnZmxvYXQoKSBkb2VzIG5vdCB3b3JrIHByb3Blcmx5JwotcHJpbnQgJzYuNC4xIDMyLWJpdCBpbnRlZ2VycycKLSMgRW5zdXJlIHRoZSBmaXJzdCAyNTYgaW50ZWdlcnMgYXJlIHNoYXJlZAotYSA9IDI1NgotYiA9IDEyOCoyCi1pZiBhIGlzIG5vdCBiOiByYWlzZSBUZXN0RmFpbGVkLCAnMjU2IGlzIG5vdCBzaGFyZWQnCi1pZiAxMiArIDI0ICE9IDM2OiByYWlzZSBUZXN0RmFpbGVkLCAnaW50IG9wJwotaWYgMTIgKyAoLTI0KSAhPSAtMTI6IHJhaXNlIFRlc3RGYWlsZWQsICdpbnQgb3AnCi1pZiAoLTEyKSArIDI0ICE9IDEyOiByYWlzZSBUZXN0RmFpbGVkLCAnaW50IG9wJwotaWYgKC0xMikgKyAoLTI0KSAhPSAtMzY6IHJhaXNlIFRlc3RGYWlsZWQsICdpbnQgb3AnCi1pZiBub3QgMTIgPCAyNDogcmFpc2UgVGVzdEZhaWxlZCwgJ2ludCBvcCcKLWlmIG5vdCAtMjQgPCAtMTI6IHJhaXNlIFRlc3RGYWlsZWQsICdpbnQgb3AnCi0jIFRlc3QgZm9yIGEgcGFydGljdWxhciBidWcgaW4gaW50ZWdlciBtdWx0aXBseQoteHNpemUsIHlzaXplLCB6c2l6ZSA9IDIzOCwgMzU2LCA0Ci1pZiBub3QgKHhzaXplKnlzaXplKnpzaXplID09IHpzaXplKnhzaXplKnlzaXplID09IDMzODkxMik6Ci0gICAgcmFpc2UgVGVzdEZhaWxlZCwgJ2ludCBtdWwgY29tbXV0YXRpdml0eScKLSMgQW5kIGFub3RoZXIuCi1tID0gLXN5cy5tYXhpbnQgLSAxCi1mb3IgZGl2aXNvciBpbiAxLCAyLCA0LCA4LCAxNiwgMzI6Ci0gICAgaiA9IG0gLy8gZGl2aXNvcgotICAgIHByb2QgPSBkaXZpc29yICogagotICAgIGlmIHByb2QgIT0gbToKLSAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgIiVyICogJXIgPT0gJXIgIT0gJXIiICUgKGRpdmlzb3IsIGosIHByb2QsIG0pCi0gICAgaWYgdHlwZShwcm9kKSBpcyBub3QgaW50OgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAoImV4cGVjdGVkIHR5cGUocHJvZCkgdG8gYmUgaW50LCBub3QgJXIiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUocHJvZCkpCi0jIENoZWNrIGZvciBleHBlY3RlZCAqIG92ZXJmbG93IHRvIGxvbmcuCi1mb3IgZGl2aXNvciBpbiAxLCAyLCA0LCA4LCAxNiwgMzI6Ci0gICAgaiA9IG0gLy8gZGl2aXNvciAtIDEKLSAgICBwcm9kID0gZGl2aXNvciAqIGoKLSAgICBpZiB0eXBlKHByb2QpIGlzIG5vdCBsb25nOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAoImV4cGVjdGVkIHR5cGUoJXIpIHRvIGJlIGxvbmcsIG5vdCAlciIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2QsIHR5cGUocHJvZCkpKQotIyBDaGVjayBmb3IgZXhwZWN0ZWQgKiBvdmVyZmxvdyB0byBsb25nLgotbSA9IHN5cy5tYXhpbnQKLWZvciBkaXZpc29yIGluIDEsIDIsIDQsIDgsIDE2LCAzMjoKLSAgICBqID0gbSAvLyBkaXZpc29yICsgMQotICAgIHByb2QgPSBkaXZpc29yICogagotICAgIGlmIHR5cGUocHJvZCkgaXMgbm90IGxvbmc6Ci0gICAgICAgIHJhaXNlIFRlc3RGYWlsZWQsICgiZXhwZWN0ZWQgdHlwZSglcikgdG8gYmUgbG9uZywgbm90ICVyIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZCwgdHlwZShwcm9kKSkpCisgICAgICAgIHRyeTogNSAlIDBMCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIjUgJSAwTCBkaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQogCi1wcmludCAnNi40LjIgTG9uZyBpbnRlZ2VycycKLWlmIDEyTCArIDI0TCAhPSAzNkw6IHJhaXNlIFRlc3RGYWlsZWQsICdsb25nIG9wJwotaWYgMTJMICsgKC0yNEwpICE9IC0xMkw6IHJhaXNlIFRlc3RGYWlsZWQsICdsb25nIG9wJwotaWYgKC0xMkwpICsgMjRMICE9IDEyTDogcmFpc2UgVGVzdEZhaWxlZCwgJ2xvbmcgb3AnCi1pZiAoLTEyTCkgKyAoLTI0TCkgIT0gLTM2TDogcmFpc2UgVGVzdEZhaWxlZCwgJ2xvbmcgb3AnCi1pZiBub3QgMTJMIDwgMjRMOiByYWlzZSBUZXN0RmFpbGVkLCAnbG9uZyBvcCcKLWlmIG5vdCAtMjRMIDwgLTEyTDogcmFpc2UgVGVzdEZhaWxlZCwgJ2xvbmcgb3AnCi14ID0gc3lzLm1heGludAotaWYgaW50KGxvbmcoeCkpICE9IHg6IHJhaXNlIFRlc3RGYWlsZWQsICdsb25nIG9wJwotdHJ5OiB5ID0gaW50KGxvbmcoeCkrMUwpCi1leGNlcHQgT3ZlcmZsb3dFcnJvcjogcmFpc2UgVGVzdEZhaWxlZCwgJ2xvbmcgb3AnCi1pZiBub3QgaXNpbnN0YW5jZSh5LCBsb25nKTogcmFpc2UgVGVzdEZhaWxlZCwgJ2xvbmcgb3AnCi14ID0gLXgKLWlmIGludChsb25nKHgpKSAhPSB4OiByYWlzZSBUZXN0RmFpbGVkLCAnbG9uZyBvcCcKLXggPSB4LTEKLWlmIGludChsb25nKHgpKSAhPSB4OiByYWlzZSBUZXN0RmFpbGVkLCAnbG9uZyBvcCcKLXRyeTogeSA9IGludChsb25nKHgpLTFMKQotZXhjZXB0IE92ZXJmbG93RXJyb3I6IHJhaXNlIFRlc3RGYWlsZWQsICdsb25nIG9wJwotaWYgbm90IGlzaW5zdGFuY2UoeSwgbG9uZyk6IHJhaXNlIFRlc3RGYWlsZWQsICdsb25nIG9wJworICAgIGRlZiB0ZXN0X251bWVyaWNfdHlwZXMoc2VsZik6CisgICAgICAgIGlmIDAgIT0gMEwgb3IgMCAhPSAwLjAgb3IgMEwgIT0gMC4wOiBzZWxmLmZhaWwoJ21peGVkIGNvbXBhcmlzb25zJykKKyAgICAgICAgaWYgMSAhPSAxTCBvciAxICE9IDEuMCBvciAxTCAhPSAxLjA6IHNlbGYuZmFpbCgnbWl4ZWQgY29tcGFyaXNvbnMnKQorICAgICAgICBpZiAtMSAhPSAtMUwgb3IgLTEgIT0gLTEuMCBvciAtMUwgIT0gLTEuMDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnaW50L2xvbmcvZmxvYXQgdmFsdWUgbm90IGVxdWFsJykKKyAgICAgICAgIyBjYWxsaW5nIGJ1aWx0LWluIHR5cGVzIHdpdGhvdXQgYXJndW1lbnQgbXVzdCByZXR1cm4gMAorICAgICAgICBpZiBpbnQoKSAhPSAwOiBzZWxmLmZhaWwoJ2ludCgpIGRvZXMgbm90IHJldHVybiAwJykKKyAgICAgICAgaWYgbG9uZygpICE9IDBMOiBzZWxmLmZhaWwoJ2xvbmcoKSBkb2VzIG5vdCByZXR1cm4gMEwnKQorICAgICAgICBpZiBmbG9hdCgpICE9IDAuMDogc2VsZi5mYWlsKCdmbG9hdCgpIGRvZXMgbm90IHJldHVybiAwLjAnKQorICAgICAgICBpZiBpbnQoMS45KSA9PSAxID09IGludCgxLjEpIGFuZCBpbnQoLTEuMSkgPT0gLTEgPT0gaW50KC0xLjkpOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnaW50KCkgZG9lcyBub3Qgcm91bmQgcHJvcGVybHknKQorICAgICAgICBpZiBsb25nKDEuOSkgPT0gMUwgPT0gbG9uZygxLjEpIGFuZCBsb25nKC0xLjEpID09IC0xTCA9PSBsb25nKC0xLjkpOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnbG9uZygpIGRvZXMgbm90IHJvdW5kIHByb3Blcmx5JykKKyAgICAgICAgaWYgZmxvYXQoMSkgPT0gMS4wIGFuZCBmbG9hdCgtMSkgPT0gLTEuMCBhbmQgZmxvYXQoMCkgPT0gMC4wOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnZmxvYXQoKSBkb2VzIG5vdCB3b3JrIHByb3Blcmx5JykKIAotdHJ5OiA1IDw8IC01Ci1leGNlcHQgVmFsdWVFcnJvcjogcGFzcwotZWxzZTogcmFpc2UgVGVzdEZhaWxlZCwgJ2ludCBuZWdhdGl2ZSBzaGlmdCA8PCcKKyAgICBkZWYgdGVzdF9ub3JtYWxfaW50ZWdlcnMoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoZSBmaXJzdCAyNTYgaW50ZWdlcnMgYXJlIHNoYXJlZAorICAgICAgICBhID0gMjU2CisgICAgICAgIGIgPSAxMjgqMgorICAgICAgICBpZiBhIGlzIG5vdCBiOiBzZWxmLmZhaWwoJzI1NiBpcyBub3Qgc2hhcmVkJykKKyAgICAgICAgaWYgMTIgKyAyNCAhPSAzNjogc2VsZi5mYWlsKCdpbnQgb3AnKQorICAgICAgICBpZiAxMiArICgtMjQpICE9IC0xMjogc2VsZi5mYWlsKCdpbnQgb3AnKQorICAgICAgICBpZiAoLTEyKSArIDI0ICE9IDEyOiBzZWxmLmZhaWwoJ2ludCBvcCcpCisgICAgICAgIGlmICgtMTIpICsgKC0yNCkgIT0gLTM2OiBzZWxmLmZhaWwoJ2ludCBvcCcpCisgICAgICAgIGlmIG5vdCAxMiA8IDI0OiBzZWxmLmZhaWwoJ2ludCBvcCcpCisgICAgICAgIGlmIG5vdCAtMjQgPCAtMTI6IHNlbGYuZmFpbCgnaW50IG9wJykKKyAgICAgICAgIyBUZXN0IGZvciBhIHBhcnRpY3VsYXIgYnVnIGluIGludGVnZXIgbXVsdGlwbHkKKyAgICAgICAgeHNpemUsIHlzaXplLCB6c2l6ZSA9IDIzOCwgMzU2LCA0CisgICAgICAgIGlmIG5vdCAoeHNpemUqeXNpemUqenNpemUgPT0genNpemUqeHNpemUqeXNpemUgPT0gMzM4OTEyKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnaW50IG11bCBjb21tdXRhdGl2aXR5JykKKyAgICAgICAgIyBBbmQgYW5vdGhlci4KKyAgICAgICAgbSA9IC1zeXMubWF4aW50IC0gMQorICAgICAgICBmb3IgZGl2aXNvciBpbiAxLCAyLCA0LCA4LCAxNiwgMzI6CisgICAgICAgICAgICBqID0gbSAvLyBkaXZpc29yCisgICAgICAgICAgICBwcm9kID0gZGl2aXNvciAqIGoKKyAgICAgICAgICAgIGlmIHByb2QgIT0gbToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVyICogJXIgPT0gJXIgIT0gJXIiICUgKGRpdmlzb3IsIGosIHByb2QsIG0pKQorICAgICAgICAgICAgaWYgdHlwZShwcm9kKSBpcyBub3QgaW50OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgdHlwZShwcm9kKSB0byBiZSBpbnQsIG5vdCAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHByb2QpKQorICAgICAgICAjIENoZWNrIGZvciBleHBlY3RlZCAqIG92ZXJmbG93IHRvIGxvbmcuCisgICAgICAgIGZvciBkaXZpc29yIGluIDEsIDIsIDQsIDgsIDE2LCAzMjoKKyAgICAgICAgICAgIGogPSBtIC8vIGRpdmlzb3IgLSAxCisgICAgICAgICAgICBwcm9kID0gZGl2aXNvciAqIGoKKyAgICAgICAgICAgIGlmIHR5cGUocHJvZCkgaXMgbm90IGxvbmc6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0eXBlKCVyKSB0byBiZSBsb25nLCBub3QgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2QsIHR5cGUocHJvZCkpKQorICAgICAgICAjIENoZWNrIGZvciBleHBlY3RlZCAqIG92ZXJmbG93IHRvIGxvbmcuCisgICAgICAgIG0gPSBzeXMubWF4aW50CisgICAgICAgIGZvciBkaXZpc29yIGluIDEsIDIsIDQsIDgsIDE2LCAzMjoKKyAgICAgICAgICAgIGogPSBtIC8vIGRpdmlzb3IgKyAxCisgICAgICAgICAgICBwcm9kID0gZGl2aXNvciAqIGoKKyAgICAgICAgICAgIGlmIHR5cGUocHJvZCkgaXMgbm90IGxvbmc6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0eXBlKCVyKSB0byBiZSBsb25nLCBub3QgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2QsIHR5cGUocHJvZCkpKQogCi10cnk6IDVMIDw8IC01TAotZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICdsb25nIG5lZ2F0aXZlIHNoaWZ0IDw8JworICAgIGRlZiB0ZXN0X2xvbmdfaW50ZWdlcnMoc2VsZik6CisgICAgICAgIGlmIDEyTCArIDI0TCAhPSAzNkw6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIGlmIDEyTCArICgtMjRMKSAhPSAtMTJMOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICBpZiAoLTEyTCkgKyAyNEwgIT0gMTJMOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICBpZiAoLTEyTCkgKyAoLTI0TCkgIT0gLTM2TDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgaWYgbm90IDEyTCA8IDI0TDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgaWYgbm90IC0yNEwgPCAtMTJMOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICB4ID0gc3lzLm1heGludAorICAgICAgICBpZiBpbnQobG9uZyh4KSkgIT0geDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgdHJ5OiB5ID0gaW50KGxvbmcoeCkrMUwpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh5LCBsb25nKTogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgeCA9IC14CisgICAgICAgIGlmIGludChsb25nKHgpKSAhPSB4OiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICB4ID0geC0xCisgICAgICAgIGlmIGludChsb25nKHgpKSAhPSB4OiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICB0cnk6IHkgPSBpbnQobG9uZyh4KS0xTCkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHksIGxvbmcpOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQogCi10cnk6IDUgPj4gLTUKLWV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCi1lbHNlOiByYWlzZSBUZXN0RmFpbGVkLCAnaW50IG5lZ2F0aXZlIHNoaWZ0ID4+JworICAgICAgICB0cnk6IDUgPDwgLTUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdpbnQgbmVnYXRpdmUgc2hpZnQgPDwnKQogCi10cnk6IDVMID4+IC01TAotZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICdsb25nIG5lZ2F0aXZlIHNoaWZ0ID4+JworICAgICAgICB0cnk6IDVMIDw8IC01TAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcgbmVnYXRpdmUgc2hpZnQgPDwnKQogCi1wcmludCAnNi40LjMgRmxvYXRpbmcgcG9pbnQgbnVtYmVycycKLWlmIDEyLjAgKyAyNC4wICE9IDM2LjA6IHJhaXNlIFRlc3RGYWlsZWQsICdmbG9hdCBvcCcKLWlmIDEyLjAgKyAoLTI0LjApICE9IC0xMi4wOiByYWlzZSBUZXN0RmFpbGVkLCAnZmxvYXQgb3AnCi1pZiAoLTEyLjApICsgMjQuMCAhPSAxMi4wOiByYWlzZSBUZXN0RmFpbGVkLCAnZmxvYXQgb3AnCi1pZiAoLTEyLjApICsgKC0yNC4wKSAhPSAtMzYuMDogcmFpc2UgVGVzdEZhaWxlZCwgJ2Zsb2F0IG9wJwotaWYgbm90IDEyLjAgPCAyNC4wOiByYWlzZSBUZXN0RmFpbGVkLCAnZmxvYXQgb3AnCi1pZiBub3QgLTI0LjAgPCAtMTIuMDogcmFpc2UgVGVzdEZhaWxlZCwgJ2Zsb2F0IG9wJworICAgICAgICB0cnk6IDUgPj4gLTUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdpbnQgbmVnYXRpdmUgc2hpZnQgPj4nKQogCi1wcmludCAnNi41IFNlcXVlbmNlIHR5cGVzJworICAgICAgICB0cnk6IDVMID4+IC01TAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcgbmVnYXRpdmUgc2hpZnQgPj4nKQogCi1wcmludCAnNi41LjEgU3RyaW5ncycKLWlmIGxlbignJykgIT0gMDogcmFpc2UgVGVzdEZhaWxlZCwgJ2xlbihcJ1wnKScKLWlmIGxlbignYScpICE9IDE6IHJhaXNlIFRlc3RGYWlsZWQsICdsZW4oXCdhXCcpJwotaWYgbGVuKCdhYmNkZWYnKSAhPSA2OiByYWlzZSBUZXN0RmFpbGVkLCAnbGVuKFwnYWJjZGVmXCcpJwotaWYgJ3h5eicgKyAnYWJjZGUnICE9ICd4eXphYmNkZSc6IHJhaXNlIFRlc3RGYWlsZWQsICdzdHJpbmcgY29uY2F0ZW5hdGlvbicKLWlmICd4eXonKjMgIT0gJ3h5enh5enh5eic6IHJhaXNlIFRlc3RGYWlsZWQsICdzdHJpbmcgcmVwZXRpdGlvbiAqMycKLWlmIDAqJ2FiY2RlJyAhPSAnJzogcmFpc2UgVGVzdEZhaWxlZCwgJ3N0cmluZyByZXBldGl0aW9uIDAqJwotaWYgbWluKCdhYmMnKSAhPSAnYScgb3IgbWF4KCdhYmMnKSAhPSAnYyc6IHJhaXNlIFRlc3RGYWlsZWQsICdtaW4vbWF4IHN0cmluZycKLWlmICdhJyBpbiAnYWJjJyBhbmQgJ2InIGluICdhYmMnIGFuZCAnYycgaW4gJ2FiYycgYW5kICdkJyBub3QgaW4gJ2FiYyc6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICdpbi9ub3QgaW4gc3RyaW5nJwoteCA9ICd4JyoxMDMKLWlmICclcyEnJXggIT0geCsnISc6IHJhaXNlIFRlc3RGYWlsZWQsICduYXN0eSBzdHJpbmcgZm9ybWF0dGluZyBidWcnCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICBpZiAxMi4wICsgMjQuMCAhPSAzNi4wOiBzZWxmLmZhaWwoJ2Zsb2F0IG9wJykKKyAgICAgICAgaWYgMTIuMCArICgtMjQuMCkgIT0gLTEyLjA6IHNlbGYuZmFpbCgnZmxvYXQgb3AnKQorICAgICAgICBpZiAoLTEyLjApICsgMjQuMCAhPSAxMi4wOiBzZWxmLmZhaWwoJ2Zsb2F0IG9wJykKKyAgICAgICAgaWYgKC0xMi4wKSArICgtMjQuMCkgIT0gLTM2LjA6IHNlbGYuZmFpbCgnZmxvYXQgb3AnKQorICAgICAgICBpZiBub3QgMTIuMCA8IDI0LjA6IHNlbGYuZmFpbCgnZmxvYXQgb3AnKQorICAgICAgICBpZiBub3QgLTI0LjAgPCAtMTIuMDogc2VsZi5mYWlsKCdmbG9hdCBvcCcpCiAKLSNleHRlbmRlZCBzbGljZXMgZm9yIHN0cmluZ3MKLWEgPSAnMDEyMzQ1Njc4OScKLXZlcmVxKGFbOjpdLCBhKQotdmVyZXEoYVs6OjJdLCAnMDI0NjgnKQotdmVyZXEoYVsxOjoyXSwgJzEzNTc5JykKLXZlcmVxKGFbOjotMV0sJzk4NzY1NDMyMTAnKQotdmVyZXEoYVs6Oi0yXSwgJzk3NTMxJykKLXZlcmVxKGFbMzo6LTJdLCAnMzEnKQotdmVyZXEoYVstMTAwOjEwMDpdLCBhKQotdmVyZXEoYVsxMDA6LTEwMDotMV0sIGFbOjotMV0pCi12ZXJlcShhWy0xMDBMOjEwMEw6MkxdLCAnMDI0NjgnKQorICAgIGRlZiB0ZXN0X3N0cmluZ3Moc2VsZik6CisgICAgICAgIGlmIGxlbignJykgIT0gMDogc2VsZi5mYWlsKCdsZW4oXCdcJyknKQorICAgICAgICBpZiBsZW4oJ2EnKSAhPSAxOiBzZWxmLmZhaWwoJ2xlbihcJ2FcJyknKQorICAgICAgICBpZiBsZW4oJ2FiY2RlZicpICE9IDY6IHNlbGYuZmFpbCgnbGVuKFwnYWJjZGVmXCcpJykKKyAgICAgICAgaWYgJ3h5eicgKyAnYWJjZGUnICE9ICd4eXphYmNkZSc6IHNlbGYuZmFpbCgnc3RyaW5nIGNvbmNhdGVuYXRpb24nKQorICAgICAgICBpZiAneHl6JyozICE9ICd4eXp4eXp4eXonOiBzZWxmLmZhaWwoJ3N0cmluZyByZXBldGl0aW9uICozJykKKyAgICAgICAgaWYgMConYWJjZGUnICE9ICcnOiBzZWxmLmZhaWwoJ3N0cmluZyByZXBldGl0aW9uIDAqJykKKyAgICAgICAgaWYgbWluKCdhYmMnKSAhPSAnYScgb3IgbWF4KCdhYmMnKSAhPSAnYyc6IHNlbGYuZmFpbCgnbWluL21heCBzdHJpbmcnKQorICAgICAgICBpZiAnYScgaW4gJ2FiYycgYW5kICdiJyBpbiAnYWJjJyBhbmQgJ2MnIGluICdhYmMnIGFuZCAnZCcgbm90IGluICdhYmMnOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnaW4vbm90IGluIHN0cmluZycpCisgICAgICAgIHggPSAneCcqMTAzCisgICAgICAgIGlmICclcyEnJXggIT0geCsnISc6IHNlbGYuZmFpbCgnbmFzdHkgc3RyaW5nIGZvcm1hdHRpbmcgYnVnJykKIAotaWYgaGF2ZV91bmljb2RlOgotICAgIGEgPSB1bmljb2RlKCcwMTIzNDU2Nzg5JywgJ2FzY2lpJykKLSAgICB2ZXJlcShhWzo6XSwgYSkKLSAgICB2ZXJlcShhWzo6Ml0sIHVuaWNvZGUoJzAyNDY4JywgJ2FzY2lpJykpCi0gICAgdmVyZXEoYVsxOjoyXSwgdW5pY29kZSgnMTM1NzknLCAnYXNjaWknKSkKLSAgICB2ZXJlcShhWzo6LTFdLCB1bmljb2RlKCc5ODc2NTQzMjEwJywgJ2FzY2lpJykpCi0gICAgdmVyZXEoYVs6Oi0yXSwgdW5pY29kZSgnOTc1MzEnLCAnYXNjaWknKSkKLSAgICB2ZXJlcShhWzM6Oi0yXSwgdW5pY29kZSgnMzEnLCAnYXNjaWknKSkKLSAgICB2ZXJlcShhWy0xMDA6MTAwOl0sIGEpCi0gICAgdmVyZXEoYVsxMDA6LTEwMDotMV0sIGFbOjotMV0pCi0gICAgdmVyZXEoYVstMTAwTDoxMDBMOjJMXSwgdW5pY29kZSgnMDI0NjgnLCAnYXNjaWknKSkKKyAgICAgICAgI2V4dGVuZGVkIHNsaWNlcyBmb3Igc3RyaW5ncworICAgICAgICBhID0gJzAxMjM0NTY3ODknCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Ol0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6OjJdLCAnMDI0NjgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTo6Ml0sICcxMzU3OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Oi0xXSwnOTg3NjU0MzIxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Oi0yXSwgJzk3NTMxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzM6Oi0yXSwgJzMxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xMDA6MTAwOl0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDA6LTEwMDotMV0sIGFbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTAwTDoxMDBMOjJMXSwgJzAyNDY4JykKKworICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBhID0gdW5pY29kZSgnMDEyMzQ1Njc4OScsICdhc2NpaScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjpdLCBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6Ml0sIHVuaWNvZGUoJzAyNDY4JywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTo6Ml0sIHVuaWNvZGUoJzEzNTc5JywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjotMV0sIHVuaWNvZGUoJzk4NzY1NDMyMTAnLCAnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Oi0yXSwgdW5pY29kZSgnOTc1MzEnLCAnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszOjotMl0sIHVuaWNvZGUoJzMxJywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTEwMDoxMDA6XSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDA6LTEwMDotMV0sIGFbOjotMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTEwMEw6MTAwTDoyTF0sIHVuaWNvZGUoJzAyNDY4JywgJ2FzY2lpJykpCiAKIAotcHJpbnQgJzYuNS4yIFR1cGxlcyBbc2VlIHRlc3RfdHVwbGUucHldJworICAgIGRlZiB0ZXN0X3R5cGVfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZSwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlLCAxLCAyLCAzLCA0KQogCi1wcmludCAnNi41LjMgTGlzdHMgW3NlZSB0ZXN0X2xpc3QucHldJworICAgIGRlZiB0ZXN0X2J1ZmZlcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmZlciwgJ2FzZGYnLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBidWZmZXIsIE5vbmUpCiAKLXByaW50ICc2LjYgTWFwcGluZ3MgPT0gRGljdGlvbmFyaWVzIFtzZWUgdGVzdF9kaWN0LnB5XScKKyAgICAgICAgYSA9IGJ1ZmZlcignYXNkZicpCisgICAgICAgIGhhc2goYSkKKyAgICAgICAgYiA9IGEgKiA1CisgICAgICAgIGlmIGEgPT0gYjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYnVmZmVycyBzaG91bGQgbm90IGJlIGVxdWFsJykKKyAgICAgICAgaWYgc3RyKGIpICE9ICgnYXNkZicgKiA1KToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncmVwZWF0ZWQgYnVmZmVyIGhhcyB3cm9uZyBjb250ZW50JykKKyAgICAgICAgaWYgc3RyKGEgKiAwKSAhPSAnJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncmVwZWF0ZWQgYnVmZmVyIHplcm8gdGltZXMgaGFzIHdyb25nIGNvbnRlbnQnKQorICAgICAgICBpZiBzdHIoYSArIGJ1ZmZlcignZGVmJykpICE9ICdhc2RmZGVmJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnY29uY2F0ZW5hdGlvbiBvZiBidWZmZXJzIHlpZWxkcyB3cm9uZyBjb250ZW50JykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihhKSkgIT0gJ2FzZGYnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjb21wb3NpbmcgYnVmZmVycyBmYWlsZWQnKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGEsIDIpKSAhPSAnZGYnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdzcGVjaWZ5aW5nIGJ1ZmZlciBvZmZzZXQgZmFpbGVkJykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihhLCAwLCAyKSkgIT0gJ2FzJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnc3BlY2lmeWluZyBidWZmZXIgc2l6ZSBmYWlsZWQnKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGEsIDEsIDIpKSAhPSAnc2QnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdzcGVjaWZ5aW5nIGJ1ZmZlciBvZmZzZXQgYW5kIHNpemUgZmFpbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmZmVyLCBidWZmZXIoJ2FzZGYnLCAxKSwgLTEpCisgICAgICAgIGlmIHN0cihidWZmZXIoYnVmZmVyKCdhc2RmJywgMCwgMiksIDApKSAhPSAnYXMnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjb21wb3NpbmcgbGVuZ3RoLXNwZWNpZmllZCBidWZmZXIgZmFpbGVkJykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihidWZmZXIoJ2FzZGYnLCAwLCAyKSwgMCwgNTAwMCkpICE9ICdhcyc6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvbXBvc2luZyBsZW5ndGgtc3BlY2lmaWVkIGJ1ZmZlciBmYWlsZWQnKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGJ1ZmZlcignYXNkZicsIDAsIDIpLCAwLCAtMSkpICE9ICdhcyc6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvbXBvc2luZyBsZW5ndGgtc3BlY2lmaWVkIGJ1ZmZlciBmYWlsZWQnKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGJ1ZmZlcignYXNkZicsIDAsIDIpLCAxLCAyKSkgIT0gJ3MnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjb21wb3NpbmcgbGVuZ3RoLXNwZWNpZmllZCBidWZmZXIgZmFpbGVkJykKIAorICAgICAgICB0cnk6IGFbMV0gPSAnZycKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoImJ1ZmZlciBhc3NpZ25tZW50IHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQogCi10cnk6IHR5cGUoMSwgMikKLWV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICd0eXBlKCksIHcvMiBhcmdzIGV4cGVjdGVkIFR5cGVFcnJvcicKKyAgICAgICAgdHJ5OiBhWzA6MV0gPSAnZycKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoImJ1ZmZlciBzbGljZSBhc3NpZ25tZW50IHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQogCi10cnk6IHR5cGUoMSwgMiwgMywgNCkKLWV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICd0eXBlKCksIHcvNCBhcmdzIGV4cGVjdGVkIFR5cGVFcnJvcicKKyAgICAgICAgIyBhcnJheS5hcnJheSgpIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGEgY2hhciBidWZmZXIsCisgICAgICAgICMgc29tZXRoaW5nIHdoaWNoIGludCgpIHVzZXMgZm9yIGNvbnZlcnNpb24uCisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICB0cnk6IGludChidWZmZXIoYXJyYXkuYXJyYXkoJ2MnKSkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJjaGFyIGJ1ZmZlciAoYXQgQyBsZXZlbCkgbm90IHdvcmtpbmciKQogCi1wcmludCAnQnVmZmVycycKLXRyeTogYnVmZmVyKCdhc2RmJywgLTEpCi1leGNlcHQgVmFsdWVFcnJvcjogcGFzcwotZWxzZTogcmFpc2UgVGVzdEZhaWxlZCwgImJ1ZmZlcignYXNkZicsIC0xKSBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciIKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVHlwZXNUZXN0cykKIAotdHJ5OiBidWZmZXIoTm9uZSkKLWV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICJidWZmZXIoTm9uZSkgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIKLQotYSA9IGJ1ZmZlcignYXNkZicpCi1oYXNoKGEpCi1iID0gYSAqIDUKLWlmIGEgPT0gYjoKLSAgICByYWlzZSBUZXN0RmFpbGVkLCAnYnVmZmVycyBzaG91bGQgbm90IGJlIGVxdWFsJwotaWYgc3RyKGIpICE9ICgnYXNkZicgKiA1KToKLSAgICByYWlzZSBUZXN0RmFpbGVkLCAncmVwZWF0ZWQgYnVmZmVyIGhhcyB3cm9uZyBjb250ZW50JwotaWYgc3RyKGEgKiAwKSAhPSAnJzoKLSAgICByYWlzZSBUZXN0RmFpbGVkLCAncmVwZWF0ZWQgYnVmZmVyIHplcm8gdGltZXMgaGFzIHdyb25nIGNvbnRlbnQnCi1pZiBzdHIoYSArIGJ1ZmZlcignZGVmJykpICE9ICdhc2RmZGVmJzoKLSAgICByYWlzZSBUZXN0RmFpbGVkLCAnY29uY2F0ZW5hdGlvbiBvZiBidWZmZXJzIHlpZWxkcyB3cm9uZyBjb250ZW50JwotaWYgc3RyKGJ1ZmZlcihhKSkgIT0gJ2FzZGYnOgotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdjb21wb3NpbmcgYnVmZmVycyBmYWlsZWQnCi1pZiBzdHIoYnVmZmVyKGEsIDIpKSAhPSAnZGYnOgotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdzcGVjaWZ5aW5nIGJ1ZmZlciBvZmZzZXQgZmFpbGVkJwotaWYgc3RyKGJ1ZmZlcihhLCAwLCAyKSkgIT0gJ2FzJzoKLSAgICByYWlzZSBUZXN0RmFpbGVkLCAnc3BlY2lmeWluZyBidWZmZXIgc2l6ZSBmYWlsZWQnCi1pZiBzdHIoYnVmZmVyKGEsIDEsIDIpKSAhPSAnc2QnOgotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdzcGVjaWZ5aW5nIGJ1ZmZlciBvZmZzZXQgYW5kIHNpemUgZmFpbGVkJwotdHJ5OiBidWZmZXIoYnVmZmVyKCdhc2RmJywgMSksIC0xKQotZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICJidWZmZXIoYnVmZmVyKCdhc2RmJywgMSksIC0xKSBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciIKLWlmIHN0cihidWZmZXIoYnVmZmVyKCdhc2RmJywgMCwgMiksIDApKSAhPSAnYXMnOgotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdjb21wb3NpbmcgbGVuZ3RoLXNwZWNpZmllZCBidWZmZXIgZmFpbGVkJwotaWYgc3RyKGJ1ZmZlcihidWZmZXIoJ2FzZGYnLCAwLCAyKSwgMCwgNTAwMCkpICE9ICdhcyc6Ci0gICAgcmFpc2UgVGVzdEZhaWxlZCwgJ2NvbXBvc2luZyBsZW5ndGgtc3BlY2lmaWVkIGJ1ZmZlciBmYWlsZWQnCi1pZiBzdHIoYnVmZmVyKGJ1ZmZlcignYXNkZicsIDAsIDIpLCAwLCAtMSkpICE9ICdhcyc6Ci0gICAgcmFpc2UgVGVzdEZhaWxlZCwgJ2NvbXBvc2luZyBsZW5ndGgtc3BlY2lmaWVkIGJ1ZmZlciBmYWlsZWQnCi1pZiBzdHIoYnVmZmVyKGJ1ZmZlcignYXNkZicsIDAsIDIpLCAxLCAyKSkgIT0gJ3MnOgotICAgIHJhaXNlIFRlc3RGYWlsZWQsICdjb21wb3NpbmcgbGVuZ3RoLXNwZWNpZmllZCBidWZmZXIgZmFpbGVkJwotCi10cnk6IGFbMV0gPSAnZycKLWV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLWVsc2U6IHJhaXNlIFRlc3RGYWlsZWQsICJidWZmZXIgYXNzaWdubWVudCBzaG91bGQgcmFpc2UgVHlwZUVycm9yIgotCi10cnk6IGFbMDoxXSA9ICdnJwotZXhjZXB0IFR5cGVFcnJvcjogcGFzcwotZWxzZTogcmFpc2UgVGVzdEZhaWxlZCwgImJ1ZmZlciBzbGljZSBhc3NpZ25tZW50IHNob3VsZCByYWlzZSBUeXBlRXJyb3IiCi0KLSMgYXJyYXkuYXJyYXkoKSByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBhIGNoYXIgYnVmZmVyLAotIyBzb21ldGhpbmcgd2hpY2ggaW50KCkgdXNlcyBmb3IgY29udmVyc2lvbi4KLWltcG9ydCBhcnJheQotdHJ5OiBpbnQoYnVmZmVyKGFycmF5LmFycmF5KCdjJykpKQotZXhjZXB0IFR5cGVFcnJvciA6cGFzcwotZWxzZTogcmFpc2UgVGVzdEZhaWxlZCwgImNoYXIgYnVmZmVyIChhdCBDIGxldmVsKSBub3Qgd29ya2luZyIKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQppbmRleCA1MTdlY2ZkLi4zOGZmOWFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC05Miw2ICs5Miw5IEBACiAgICAgICAgICAgICAgICAgIlxceGZlXFx4ZmYnIikKICAgICAgICAgICAgIHRlc3RyZXByID0gcmVwcih1Jycuam9pbihtYXAodW5pY2hyLCB4cmFuZ2UoMjU2KSkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0cmVwciwgbGF0aW4xcmVwcikKKyAgICAgICAgICAgICMgVGVzdCByZXByIHdvcmtzIG9uIHdpZGUgdW5pY29kZSBlc2NhcGVzIHdpdGhvdXQgb3ZlcmZsb3cuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSJcVTAwMDEwMDAwIiAqIDM5ICsgdSJcdWZmZmYiICogNDA5NiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIodSJcVTAwMDEwMDAwIiAqIDM5ICsgdSJcdWZmZmYiICogNDA5NikpCiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcnMoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHVuaWNvZGUgb2JqZWN0cyBoYXZlIGFuIF9faXRlcl9fIG1ldGhvZApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94ZHJsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weQppbmRleCBlOTUxN2M1Li44ZmM4OGE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weQpAQCAtMSwzICsxLDU2IEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKIGltcG9ydCB4ZHJsaWIKIAoteGRybGliLl90ZXN0KCkKK2NsYXNzIFhEUlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfeGRyKHNlbGYpOgorICAgICAgICBwID0geGRybGliLlBhY2tlcigpCisKKyAgICAgICAgcyA9ICdoZWxsbyB3b3JsZCcKKyAgICAgICAgYSA9IFsnd2hhdCcsICdpcycsICdoYXBuaW4nLCAnZG9jdG9yJ10KKworICAgICAgICBwLnBhY2tfaW50KDQyKQorICAgICAgICBwLnBhY2tfdWludCg5KQorICAgICAgICBwLnBhY2tfYm9vbChUcnVlKQorICAgICAgICBwLnBhY2tfYm9vbChGYWxzZSkKKyAgICAgICAgcC5wYWNrX3VoeXBlcig0NUwpCisgICAgICAgIHAucGFja19mbG9hdCgxLjkpCisgICAgICAgIHAucGFja19kb3VibGUoMS45KQorICAgICAgICBwLnBhY2tfc3RyaW5nKHMpCisgICAgICAgIHAucGFja19saXN0KHJhbmdlKDUpLCBwLnBhY2tfdWludCkKKyAgICAgICAgcC5wYWNrX2FycmF5KGEsIHAucGFja19zdHJpbmcpCisKKyAgICAgICAgIyBub3cgdmVyaWZ5CisgICAgICAgIGRhdGEgPSBwLmdldF9idWZmZXIoKQorICAgICAgICB1cCA9IHhkcmxpYi5VbnBhY2tlcihkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAuZ2V0X3Bvc2l0aW9uKCksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfaW50KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwLnVucGFja191aW50KCksIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh1cC51bnBhY2tfYm9vbCgpIGlzIFRydWUpCisKKyAgICAgICAgIyByZW1lbWJlciBwb3NpdGlvbgorICAgICAgICBwb3MgPSB1cC5nZXRfcG9zaXRpb24oKQorICAgICAgICBzZWxmLmFzc2VydF8odXAudW5wYWNrX2Jvb2woKSBpcyBGYWxzZSkKKworICAgICAgICAjIHJld2luZCBhbmQgdW5wYWNrIGFnYWluCisgICAgICAgIHVwLnNldF9wb3NpdGlvbihwb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh1cC51bnBhY2tfYm9vbCgpIGlzIEZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX3VoeXBlcigpLCA0NUwpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwodXAudW5wYWNrX2Zsb2F0KCksIDEuOSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCh1cC51bnBhY2tfZG91YmxlKCksIDEuOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfc3RyaW5nKCksIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX2xpc3QodXAudW5wYWNrX3VpbnQpLCByYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfYXJyYXkodXAudW5wYWNrX3N0cmluZyksIGEpCisgICAgICAgIHVwLmRvbmUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgdXAudW5wYWNrX3VpbnQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFhEUlRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggNjRkOGZlOC4uY2NjMWI2MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTg2LDYgKzg2LDE1IEBACiAgICAgICAgIHMgPSB4bWxycGNsaWIuZHVtcHMoKG5ld19kLCksIG1ldGhvZHJlc3BvbnNlPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHMsIHN0cikpCiAKKyAgICBkZWYgdGVzdF9uZXdzdHlsZV9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVChvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0ID0gVCgpCisgICAgICAgIHQueCA9IDEwMAorICAgICAgICB0LnkgPSAiSGVsbG8iCisgICAgICAgICgodDIsKSwgZHVtbXkpID0geG1scnBjbGliLmxvYWRzKHhtbHJwY2xpYi5kdW1wcygodCwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModDIsIHQuX19kaWN0X18pCisKICAgICBkZWYgdGVzdF9kdW1wX2JpZ19sb25nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB4bWxycGNsaWIuZHVtcHMsICgyTCoqOTksKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rva2VuaXplLnB5IGIvTGliL3Rva2VuaXplLnB5CmluZGV4IDVkNjUyNjcuLjEyNTM4MjIgMTAwNjQ0Ci0tLSBhL0xpYi90b2tlbml6ZS5weQorKysgYi9MaWIvdG9rZW5pemUucHkKQEAgLTI0LDcgKzI0LDcgQEAKIAogX19hdXRob3JfXyA9ICdLYS1QaW5nIFllZSA8cGluZ0BsZncub3JnPicKIF9fY3JlZGl0c19fID0gXAotICAgICdHdlIsIEVTUiwgVGltIFBldGVycywgVGhvbWFzIFdvdXRlcnMsIEZyZWQgRHJha2UsIFNraXAgTW9udGFuYXJvJworICAgICdHdlIsIEVTUiwgVGltIFBldGVycywgVGhvbWFzIFdvdXRlcnMsIEZyZWQgRHJha2UsIFNraXAgTW9udGFuYXJvLCBSYXltb25kIEhldHRpbmdlcicKIAogaW1wb3J0IHN0cmluZywgcmUKIGZyb20gdG9rZW4gaW1wb3J0ICoKQEAgLTE1OSwxNCArMTU5LDczIEBACiAgICAgZm9yIHRva2VuX2luZm8gaW4gZ2VuZXJhdGVfdG9rZW5zKHJlYWRsaW5lKToKICAgICAgICAgdG9rZW5lYXRlcigqdG9rZW5faW5mbykKIAorY2xhc3MgVW50b2tlbml6ZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudG9rZW5zID0gW10KKyAgICAgICAgc2VsZi5wcmV2X3JvdyA9IDEKKyAgICAgICAgc2VsZi5wcmV2X2NvbCA9IDAKKworICAgIGRlZiBhZGRfd2hpdGVzcGFjZShzZWxmLCBzdGFydCk6CisgICAgICAgIHJvdywgY29sID0gc3RhcnQKKyAgICAgICAgYXNzZXJ0IHJvdyA8PSBzZWxmLnByZXZfcm93CisgICAgICAgIGNvbF9vZmZzZXQgPSBjb2wgLSBzZWxmLnByZXZfY29sCisgICAgICAgIGlmIGNvbF9vZmZzZXQ6CisgICAgICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoIiAiICogY29sX29mZnNldCkKKworICAgIGRlZiB1bnRva2VuaXplKHNlbGYsIGl0ZXJhYmxlKToKKyAgICAgICAgZm9yIHQgaW4gaXRlcmFibGU6CisgICAgICAgICAgICBpZiBsZW4odCkgPT0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbXBhdCh0LCBpdGVyYWJsZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdG9rX3R5cGUsIHRva2VuLCBzdGFydCwgZW5kLCBsaW5lID0gdAorICAgICAgICAgICAgc2VsZi5hZGRfd2hpdGVzcGFjZShzdGFydCkKKyAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZCh0b2tlbikKKyAgICAgICAgICAgIHNlbGYucHJldl9yb3csIHNlbGYucHJldl9jb2wgPSBlbmQKKyAgICAgICAgICAgIGlmIHRva190eXBlIGluIChORVdMSU5FLCBOTCk6CisgICAgICAgICAgICAgICAgc2VsZi5wcmV2X3JvdyArPSAxCisgICAgICAgICAgICAgICAgc2VsZi5wcmV2X2NvbCA9IDAKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oc2VsZi50b2tlbnMpCisKKyAgICBkZWYgY29tcGF0KHNlbGYsIHRva2VuLCBpdGVyYWJsZSk6CisgICAgICAgIHN0YXJ0bGluZSA9IEZhbHNlCisgICAgICAgIGluZGVudHMgPSBbXQorICAgICAgICB0b2tzX2FwcGVuZCA9IHNlbGYudG9rZW5zLmFwcGVuZAorICAgICAgICB0b2tudW0sIHRva3ZhbCA9IHRva2VuCisgICAgICAgIGlmIHRva251bSBpbiAoTkFNRSwgTlVNQkVSKToKKyAgICAgICAgICAgIHRva3ZhbCArPSAnICcKKyAgICAgICAgaWYgdG9rbnVtIGluIChORVdMSU5FLCBOTCk6CisgICAgICAgICAgICBzdGFydGxpbmUgPSBUcnVlCisgICAgICAgIGZvciB0b2sgaW4gaXRlcmFibGU6CisgICAgICAgICAgICB0b2tudW0sIHRva3ZhbCA9IHRva1s6Ml0KKworICAgICAgICAgICAgaWYgdG9rbnVtIGluIChOQU1FLCBOVU1CRVIpOgorICAgICAgICAgICAgICAgIHRva3ZhbCArPSAnICcKKworICAgICAgICAgICAgaWYgdG9rbnVtID09IElOREVOVDoKKyAgICAgICAgICAgICAgICBpbmRlbnRzLmFwcGVuZCh0b2t2YWwpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgdG9rbnVtID09IERFREVOVDoKKyAgICAgICAgICAgICAgICBpbmRlbnRzLnBvcCgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgdG9rbnVtIGluIChORVdMSU5FLCBOTCk6CisgICAgICAgICAgICAgICAgc3RhcnRsaW5lID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBzdGFydGxpbmUgYW5kIGluZGVudHM6CisgICAgICAgICAgICAgICAgdG9rc19hcHBlbmQoaW5kZW50c1stMV0pCisgICAgICAgICAgICAgICAgc3RhcnRsaW5lID0gRmFsc2UKKyAgICAgICAgICAgIHRva3NfYXBwZW5kKHRva3ZhbCkKIAogZGVmIHVudG9rZW5pemUoaXRlcmFibGUpOgogICAgICIiIlRyYW5zZm9ybSB0b2tlbnMgYmFjayBpbnRvIFB5dGhvbiBzb3VyY2UgY29kZS4KIAogICAgIEVhY2ggZWxlbWVudCByZXR1cm5lZCBieSB0aGUgaXRlcmFibGUgbXVzdCBiZSBhIHRva2VuIHNlcXVlbmNlCi0gICAgd2l0aCBhdCBsZWFzdCB0d28gZWxlbWVudHMsIGEgdG9rZW4gbnVtYmVyIGFuZCB0b2tlbiB2YWx1ZS4KKyAgICB3aXRoIGF0IGxlYXN0IHR3byBlbGVtZW50cywgYSB0b2tlbiBudW1iZXIgYW5kIHRva2VuIHZhbHVlLiAgSWYKKyAgICBvbmx5IHR3byB0b2tlbnMgYXJlIHBhc3NlZCwgdGhlIHJlc3VsdGluZyBvdXRwdXQgaXMgcG9vci4KIAotICAgIFJvdW5kLXRyaXAgaW52YXJpYW50OgorICAgIFJvdW5kLXRyaXAgaW52YXJpYW50IGZvciBmdWxsIGlucHV0OgorICAgICAgICBVbnRva2VuaXplZCBzb3VyY2Ugd2lsbCBtYXRjaCBpbnB1dCBzb3VyY2UgZXhhY3RseQorCisgICAgUm91bmQtdHJpcCBpbnZhcmlhbnQgZm9yIGxpbWl0ZWQgaW50cHV0OgogICAgICAgICAjIE91dHB1dCB0ZXh0IHdpbGwgdG9rZW5pemUgdGhlIGJhY2sgdG8gdGhlIGlucHV0CiAgICAgICAgIHQxID0gW3Rva1s6Ml0gZm9yIHRvayBpbiBnZW5lcmF0ZV90b2tlbnMoZi5yZWFkbGluZSldCiAgICAgICAgIG5ld2NvZGUgPSB1bnRva2VuaXplKHQxKQpAQCAtMTc0LDMxICsyMzMsOCBAQAogICAgICAgICB0MiA9IFt0b2tbOjJdIGZvciB0b2tpbiBnZW5lcmF0ZV90b2tlbnMocmVhZGxpbmUpXQogICAgICAgICBhc3NlcnQgdDEgPT0gdDIKICAgICAiIiIKLQotICAgIHN0YXJ0bGluZSA9IEZhbHNlCi0gICAgaW5kZW50cyA9IFtdCi0gICAgdG9rcyA9IFtdCi0gICAgdG9rc19hcHBlbmQgPSB0b2tzLmFwcGVuZAotICAgIGZvciB0b2sgaW4gaXRlcmFibGU6Ci0gICAgICAgIHRva251bSwgdG9rdmFsID0gdG9rWzoyXQotCi0gICAgICAgIGlmIHRva251bSBpbiAoTkFNRSwgTlVNQkVSKToKLSAgICAgICAgICAgIHRva3ZhbCArPSAnICcKLQotICAgICAgICBpZiB0b2tudW0gPT0gSU5ERU5UOgotICAgICAgICAgICAgaW5kZW50cy5hcHBlbmQodG9rdmFsKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZWxpZiB0b2tudW0gPT0gREVERU5UOgotICAgICAgICAgICAgaW5kZW50cy5wb3AoKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZWxpZiB0b2tudW0gaW4gKE5FV0xJTkUsIENPTU1FTlQsIE5MKToKLSAgICAgICAgICAgIHN0YXJ0bGluZSA9IFRydWUKLSAgICAgICAgZWxpZiBzdGFydGxpbmUgYW5kIGluZGVudHM6Ci0gICAgICAgICAgICB0b2tzX2FwcGVuZChpbmRlbnRzWy0xXSkKLSAgICAgICAgICAgIHN0YXJ0bGluZSA9IEZhbHNlCi0gICAgICAgIHRva3NfYXBwZW5kKHRva3ZhbCkKLSAgICByZXR1cm4gJycuam9pbih0b2tzKQotCisgICAgdXQgPSBVbnRva2VuaXplcigpCisgICAgcmV0dXJuIHV0LnVudG9rZW5pemUoaXRlcmFibGUpCiAKIGRlZiBnZW5lcmF0ZV90b2tlbnMocmVhZGxpbmUpOgogICAgICIiIgpAQCAtMjM3LDcgKzI3Myw3IEBACiAgICAgICAgICAgICBpZiBlbmRtYXRjaDoKICAgICAgICAgICAgICAgICBwb3MgPSBlbmQgPSBlbmRtYXRjaC5lbmQoMCkKICAgICAgICAgICAgICAgICB5aWVsZCAoU1RSSU5HLCBjb250c3RyICsgbGluZVs6ZW5kXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnN0YXJ0LCAobG51bSwgZW5kKSwgY29udGxpbmUgKyBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICBzdHJzdGFydCwgKGxudW0sIGVuZCksIGNvbnRsaW5lICsgbGluZSkKICAgICAgICAgICAgICAgICBjb250c3RyLCBuZWVkY29udCA9ICcnLCAwCiAgICAgICAgICAgICAgICAgY29udGxpbmUgPSBOb25lCiAgICAgICAgICAgICBlbGlmIG5lZWRjb250IGFuZCBsaW5lWy0yOl0gIT0gJ1xcXG4nIGFuZCBsaW5lWy0zOl0gIT0gJ1xcXHJcbic6CkBAIC0yNjMsNyArMjk5LDE1IEBACiAgICAgICAgICAgICBpZiBwb3MgPT0gbWF4OiBicmVhawogCiAgICAgICAgICAgICBpZiBsaW5lW3Bvc10gaW4gJyNcclxuJzogICAgICAgICAgICMgc2tpcCBjb21tZW50cyBvciBibGFuayBsaW5lcwotICAgICAgICAgICAgICAgIHlpZWxkICgoTkwsIENPTU1FTlQpW2xpbmVbcG9zXSA9PSAnIyddLCBsaW5lW3BvczpdLAorICAgICAgICAgICAgICAgIGlmIGxpbmVbcG9zXSA9PSAnIyc6CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRfdG9rZW4gPSBsaW5lW3BvczpdLnJzdHJpcCgnXHJcbicpCisgICAgICAgICAgICAgICAgICAgIG5sX3BvcyA9IHBvcyArIGxlbihjb21tZW50X3Rva2VuKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCAoQ09NTUVOVCwgY29tbWVudF90b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsbnVtLCBwb3MpLCAobG51bSwgcG9zICsgbGVuKGNvbW1lbnRfdG9rZW4pKSwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgKE5MLCBsaW5lW25sX3BvczpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxudW0sIG5sX3BvcyksIChsbnVtLCBsZW4obGluZSkpLCBsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkICgoTkwsIENPTU1FTlQpW2xpbmVbcG9zXSA9PSAnIyddLCBsaW5lW3BvczpdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxudW0sIHBvcyksIChsbnVtLCBsZW4obGluZSkpLCBsaW5lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKQEAgLTI5NCw5ICszMzgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbCA9PSAnLicgYW5kIHRva2VuICE9ICcuJyk6ICAgICAgIyBvcmRpbmFyeSBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgeWllbGQgKE5VTUJFUiwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCiAgICAgICAgICAgICAgICAgZWxpZiBpbml0aWFsIGluICdcclxuJzoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgKHBhcmVubGV2ID4gMCBhbmQgTkwgb3IgTkVXTElORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgc3BvcywgZXBvcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgKE5MIGlmIHBhcmVubGV2ID4gMCBlbHNlIE5FV0xJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgc3BvcywgZXBvcywgbGluZSkKICAgICAgICAgICAgICAgICBlbGlmIGluaXRpYWwgPT0gJyMnOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHRva2VuLmVuZHN3aXRoKCJcbiIpCiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIChDT01NRU5ULCB0b2tlbiwgc3BvcywgZXBvcywgbGluZSkKICAgICAgICAgICAgICAgICBlbGlmIHRva2VuIGluIHRyaXBsZV9xdW90ZWQ6CiAgICAgICAgICAgICAgICAgICAgIGVuZHByb2cgPSBlbmRwcm9nc1t0b2tlbl0KZGlmZiAtLWdpdCBhL0xpYi90cmFjZWJhY2sucHkgYi9MaWIvdHJhY2ViYWNrLnB5CmluZGV4IGViMmZkZjYuLmUzOTVhZDcgMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZWJhY2sucHkKKysrIGIvTGliL3RyYWNlYmFjay5weQpAQCAtMTYyLDYgKzE2MiwxMSBAQAogCiAgICAgIiIiCiAKKyAgICAjIEdyYWNlZnVsbHkgaGFuZGxlICh0aGUgd2F5IFB5dGhvbiAyLjQgYW5kIGVhcmxpZXIgZGlkKSB0aGUgY2FzZSBvZgorICAgICMgYmVpbmcgY2FsbGVkIHdpdGggKE5vbmUsIE5vbmUpLgorICAgIGlmIGV0eXBlIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpXQorCiAgICAgc3R5cGUgPSBldHlwZS5fX25hbWVfXwogICAgIHNtb2QgPSBldHlwZS5fX21vZHVsZV9fCiAgICAgaWYgc21vZCBub3QgaW4gKCJleGNlcHRpb25zIiwgIl9fbWFpbl9fIiwgIl9fYnVpbHRpbl9fIik6CmRpZmYgLS1naXQgYS9MaWIvdXJsbGliLnB5IGIvTGliL3VybGxpYi5weQppbmRleCBlMDFmNDIxLi45MGY3YWEwIDEwMDY0NAotLS0gYS9MaWIvdXJsbGliLnB5CisrKyBiL0xpYi91cmxsaWIucHkKQEAgLTMwMiwxMyArMzAyLDEzIEBACiAKICAgICAgICAgaWYgcHJveHlfcGFzc3dkOgogICAgICAgICAgICAgaW1wb3J0IGJhc2U2NAotICAgICAgICAgICAgcHJveHlfYXV0aCA9IGJhc2U2NC5lbmNvZGVzdHJpbmcocHJveHlfcGFzc3dkKS5zdHJpcCgpCisgICAgICAgICAgICBwcm94eV9hdXRoID0gYmFzZTY0LmI2NGVuY29kZShwcm94eV9wYXNzd2QpLnN0cmlwKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHByb3h5X2F1dGggPSBOb25lCiAKICAgICAgICAgaWYgdXNlcl9wYXNzd2Q6CiAgICAgICAgICAgICBpbXBvcnQgYmFzZTY0Ci0gICAgICAgICAgICBhdXRoID0gYmFzZTY0LmVuY29kZXN0cmluZyh1c2VyX3Bhc3N3ZCkuc3RyaXAoKQorICAgICAgICAgICAgYXV0aCA9IGJhc2U2NC5iNjRlbmNvZGUodXNlcl9wYXNzd2QpLnN0cmlwKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGF1dGggPSBOb25lCiAgICAgICAgIGggPSBodHRwbGliLkhUVFAoaG9zdCkKQEAgLTM4NywxMiArMzg3LDEyIEBACiAgICAgICAgICAgICBpZiBub3QgaG9zdDogcmFpc2UgSU9FcnJvciwgKCdodHRwcyBlcnJvcicsICdubyBob3N0IGdpdmVuJykKICAgICAgICAgICAgIGlmIHByb3h5X3Bhc3N3ZDoKICAgICAgICAgICAgICAgICBpbXBvcnQgYmFzZTY0Ci0gICAgICAgICAgICAgICAgcHJveHlfYXV0aCA9IGJhc2U2NC5lbmNvZGVzdHJpbmcocHJveHlfcGFzc3dkKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcHJveHlfYXV0aCA9IGJhc2U2NC5iNjRlbmNvZGUocHJveHlfcGFzc3dkKS5zdHJpcCgpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByb3h5X2F1dGggPSBOb25lCiAgICAgICAgICAgICBpZiB1c2VyX3Bhc3N3ZDoKICAgICAgICAgICAgICAgICBpbXBvcnQgYmFzZTY0Ci0gICAgICAgICAgICAgICAgYXV0aCA9IGJhc2U2NC5lbmNvZGVzdHJpbmcodXNlcl9wYXNzd2QpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBhdXRoID0gYmFzZTY0LmI2NGVuY29kZSh1c2VyX3Bhc3N3ZCkuc3RyaXAoKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBhdXRoID0gTm9uZQogICAgICAgICAgICAgaCA9IGh0dHBsaWIuSFRUUFMoaG9zdCwgMCwKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIyLnB5IGIvTGliL3VybGxpYjIucHkKaW5kZXggMWUxOWYzMy4uYTg4MGU2NCAxMDA2NDQKLS0tIGEvTGliL3VybGxpYjIucHkKKysrIGIvTGliL3VybGxpYjIucHkKQEAgLTY3NCw3ICs2NzQsNyBAQAogICAgICAgICAgICAgcHJveHlfdHlwZSA9IG9yaWdfdHlwZQogICAgICAgICBpZiB1c2VyIGFuZCBwYXNzd29yZDoKICAgICAgICAgICAgIHVzZXJfcGFzcyA9ICclczolcycgJSAodW5xdW90ZSh1c2VyKSwgdW5xdW90ZShwYXNzd29yZCkpCi0gICAgICAgICAgICBjcmVkcyA9IGJhc2U2NC5lbmNvZGVzdHJpbmcodXNlcl9wYXNzKS5zdHJpcCgpCisgICAgICAgICAgICBjcmVkcyA9IGJhc2U2NC5iNjRlbmNvZGUodXNlcl9wYXNzKS5zdHJpcCgpCiAgICAgICAgICAgICByZXEuYWRkX2hlYWRlcignUHJveHktYXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgY3JlZHMpCiAgICAgICAgIGhvc3Rwb3J0ID0gdW5xdW90ZShob3N0cG9ydCkKICAgICAgICAgcmVxLnNldF9wcm94eShob3N0cG9ydCwgcHJveHlfdHlwZSkKQEAgLTc5OCw3ICs3OTgsNyBAQAogICAgICAgICB1c2VyLCBwdyA9IHNlbGYucGFzc3dkLmZpbmRfdXNlcl9wYXNzd29yZChyZWFsbSwgaG9zdCkKICAgICAgICAgaWYgcHcgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByYXcgPSAiJXM6JXMiICUgKHVzZXIsIHB3KQotICAgICAgICAgICAgYXV0aCA9ICdCYXNpYyAlcycgJSBiYXNlNjQuZW5jb2Rlc3RyaW5nKHJhdykuc3RyaXAoKQorICAgICAgICAgICAgYXV0aCA9ICdCYXNpYyAlcycgJSBiYXNlNjQuYjY0ZW5jb2RlKHJhdykuc3RyaXAoKQogICAgICAgICAgICAgaWYgcmVxLmhlYWRlcnMuZ2V0KHNlbGYuYXV0aF9oZWFkZXIsIE5vbmUpID09IGF1dGg6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIHJlcS5hZGRfaGVhZGVyKHNlbGYuYXV0aF9oZWFkZXIsIGF1dGgpCmRpZmYgLS1naXQgYS9MaWIvdXUucHkgYi9MaWIvdXUucHkKaW5kZXggM2NjZWRiMC4uZGE4OWY3MiAxMDA3NTUKLS0tIGEvTGliL3V1LnB5CisrKyBiL0xpYi91dS5weQpAQCAtMTE0LDYgKzExNCw3IEBACiAgICAgIwogICAgICMgT3BlbiB0aGUgb3V0cHV0IGZpbGUKICAgICAjCisgICAgb3BlbmVkID0gRmFsc2UKICAgICBpZiBvdXRfZmlsZSA9PSAnLSc6CiAgICAgICAgIG91dF9maWxlID0gc3lzLnN0ZG91dAogICAgIGVsaWYgaXNpbnN0YW5jZShvdXRfZmlsZSwgYmFzZXN0cmluZyk6CkBAIC0xMjMsNiArMTI0LDcgQEAKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBvdXRfZmlsZSA9IGZwCisgICAgICAgIG9wZW5lZCA9IFRydWUKICAgICAjCiAgICAgIyBNYWluIGRlY29kaW5nIGxvb3AKICAgICAjCkBAIC0xNDAsNiArMTQyLDggQEAKICAgICAgICAgcyA9IGluX2ZpbGUucmVhZGxpbmUoKQogICAgIGlmIG5vdCBzOgogICAgICAgICByYWlzZSBFcnJvcignVHJ1bmNhdGVkIGlucHV0IGZpbGUnKQorICAgIGlmIG9wZW5lZDoKKyAgICAgICAgb3V0X2ZpbGUuY2xvc2UoKQogCiBkZWYgdGVzdCgpOgogICAgICIiInV1ZW5jb2RlL3V1ZGVjb2RlIG1haW4gcHJvZ3JhbSIiIgpkaWZmIC0tZ2l0IGEvTGliL3dlYmJyb3dzZXIucHkgYi9MaWIvd2ViYnJvd3Nlci5weQppbmRleCA5ZmQxNjE1Li4wZDVmNDRmIDEwMDY0NAotLS0gYS9MaWIvd2ViYnJvd3Nlci5weQorKysgYi9MaWIvd2ViYnJvd3Nlci5weQpAQCAtMTY1LDcgKzE2NSwxMCBAQAogICAgICAgICBjbWRsaW5lID0gW3NlbGYubmFtZV0gKyBbYXJnLnJlcGxhY2UoIiVzIiwgdXJsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLmFyZ3NdCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZGxpbmUsIGNsb3NlX2Zkcz1UcnVlKQorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKKyAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsaW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsaW5lLCBjbG9zZV9mZHM9VHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBub3QgcC53YWl0KCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTE3OCwxMSArMTgxLDE0IEBACiAgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPTEpOgogICAgICAgICBjbWRsaW5lID0gW3NlbGYubmFtZV0gKyBbYXJnLnJlcGxhY2UoIiVzIiwgdXJsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLmFyZ3NdCi0gICAgICAgIHNldHNpZCA9IGdldGF0dHIob3MsICdzZXRzaWQnLCBOb25lKQotICAgICAgICBpZiBub3Qgc2V0c2lkOgotICAgICAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHBncnAnLCBOb25lKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsaW5lLCBjbG9zZV9mZHM9VHJ1ZSwgcHJlZXhlY19mbj1zZXRzaWQpCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nOgorICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNldHNpZCA9IGdldGF0dHIob3MsICdzZXRzaWQnLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZXRzaWQ6CisgICAgICAgICAgICAgICAgICAgIHNldHNpZCA9IGdldGF0dHIob3MsICdzZXRwZ3JwJywgTm9uZSkKKyAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsaW5lLCBjbG9zZV9mZHM9VHJ1ZSwgcHJlZXhlY19mbj1zZXRzaWQpCiAgICAgICAgICAgICByZXR1cm4gKHAucG9sbCgpIGlzIE5vbmUpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC00NDEsNyArNDQ3LDcgQEAKIAogICAgICAgICAjIGlmIHN1Y2Nlc3NmdWwsIHJlZ2lzdGVyIGl0CiAgICAgICAgIGlmIHJldG5jb2RlIGlzIE5vbmUgYW5kIGNvbW1kOgotICAgICAgICAgICAgcmVnaXN0ZXIoImdub21lIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoY29tbWQpKQorICAgICAgICAgICAgcmVnaXN0ZXIoImdub21lIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoY29tbWQuc3BsaXQoKSkpCiAKICAgICAjIEZpcnN0LCB0aGUgTW96aWxsYS9OZXRzY2FwZSBicm93c2VycwogICAgIGZvciBicm93c2VyIGluICgibW96aWxsYS1maXJlZm94IiwgImZpcmVmb3giLApkaWZmIC0tZ2l0IGEvTGliL3hkcmxpYi5weSBiL0xpYi94ZHJsaWIucHkKaW5kZXggYjM0OWViOS4uNzk2ZGZhZiAxMDA2NDQKLS0tIGEvTGliL3hkcmxpYi5weQorKysgYi9MaWIveGRybGliLnB5CkBAIC0yMjcsNjEgKzIyNywzIEBACiAgICAgZGVmIHVucGFja19hcnJheShzZWxmLCB1bnBhY2tfaXRlbSk6CiAgICAgICAgIG4gPSBzZWxmLnVucGFja191aW50KCkKICAgICAgICAgcmV0dXJuIHNlbGYudW5wYWNrX2ZhcnJheShuLCB1bnBhY2tfaXRlbSkKLQotCi0jIHRlc3Qgc3VpdGUKLWRlZiBfdGVzdCgpOgotICAgIHAgPSBQYWNrZXIoKQotICAgIHBhY2t0ZXN0ID0gWwotICAgICAgICAocC5wYWNrX3VpbnQsICAgICg5LCkpLAotICAgICAgICAocC5wYWNrX2Jvb2wsICAgIChUcnVlLCkpLAotICAgICAgICAocC5wYWNrX2Jvb2wsICAgIChGYWxzZSwpKSwKLSAgICAgICAgKHAucGFja191aHlwZXIsICAoNDVMLCkpLAotICAgICAgICAocC5wYWNrX2Zsb2F0LCAgICgxLjksKSksCi0gICAgICAgIChwLnBhY2tfZG91YmxlLCAgKDEuOSwpKSwKLSAgICAgICAgKHAucGFja19zdHJpbmcsICAoJ2hlbGxvIHdvcmxkJywpKSwKLSAgICAgICAgKHAucGFja19saXN0LCAgICAocmFuZ2UoNSksIHAucGFja191aW50KSksCi0gICAgICAgIChwLnBhY2tfYXJyYXksICAgKFsnd2hhdCcsICdpcycsICdoYXBuaW4nLCAnZG9jdG9yJ10sIHAucGFja19zdHJpbmcpKSwKLSAgICAgICAgXQotICAgIHN1Y2NlZWRsaXN0ID0gWzFdICogbGVuKHBhY2t0ZXN0KQotICAgIGNvdW50ID0gMAotICAgIGZvciBtZXRob2QsIGFyZ3MgaW4gcGFja3Rlc3Q6Ci0gICAgICAgIHByaW50ICdwYWNrIHRlc3QnLCBjb3VudCwKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWV0aG9kKCphcmdzKQotICAgICAgICAgICAgcHJpbnQgJ3N1Y2NlZWRlZCcKLSAgICAgICAgZXhjZXB0IENvbnZlcnNpb25FcnJvciwgdmFyOgotICAgICAgICAgICAgcHJpbnQgJ0NvbnZlcnNpb25FcnJvcjonLCB2YXIubXNnCi0gICAgICAgICAgICBzdWNjZWVkbGlzdFtjb3VudF0gPSAwCi0gICAgICAgIGNvdW50ID0gY291bnQgKyAxCi0gICAgZGF0YSA9IHAuZ2V0X2J1ZmZlcigpCi0gICAgIyBub3cgdmVyaWZ5Ci0gICAgdXAgPSBVbnBhY2tlcihkYXRhKQotICAgIHVucGFja3Rlc3QgPSBbCi0gICAgICAgICh1cC51bnBhY2tfdWludCwgICAoKSwgbGFtYmRhIHg6IHggPT0gOSksCi0gICAgICAgICh1cC51bnBhY2tfYm9vbCwgICAoKSwgbGFtYmRhIHg6IHggaXMgVHJ1ZSksCi0gICAgICAgICh1cC51bnBhY2tfYm9vbCwgICAoKSwgbGFtYmRhIHg6IHggaXMgRmFsc2UpLAotICAgICAgICAodXAudW5wYWNrX3VoeXBlciwgKCksIGxhbWJkYSB4OiB4ID09IDQ1TCksCi0gICAgICAgICh1cC51bnBhY2tfZmxvYXQsICAoKSwgbGFtYmRhIHg6IDEuODkgPCB4IDwgMS45MSksCi0gICAgICAgICh1cC51bnBhY2tfZG91YmxlLCAoKSwgbGFtYmRhIHg6IDEuODkgPCB4IDwgMS45MSksCi0gICAgICAgICh1cC51bnBhY2tfc3RyaW5nLCAoKSwgbGFtYmRhIHg6IHggPT0gJ2hlbGxvIHdvcmxkJyksCi0gICAgICAgICh1cC51bnBhY2tfbGlzdCwgICAodXAudW5wYWNrX3VpbnQsKSwgbGFtYmRhIHg6IHggPT0gcmFuZ2UoNSkpLAotICAgICAgICAodXAudW5wYWNrX2FycmF5LCAgKHVwLnVucGFja19zdHJpbmcsKSwKLSAgICAgICAgIGxhbWJkYSB4OiB4ID09IFsnd2hhdCcsICdpcycsICdoYXBuaW4nLCAnZG9jdG9yJ10pLAotICAgICAgICBdCi0gICAgY291bnQgPSAwCi0gICAgZm9yIG1ldGhvZCwgYXJncywgcHJlZCBpbiB1bnBhY2t0ZXN0OgotICAgICAgICBwcmludCAndW5wYWNrIHRlc3QnLCBjb3VudCwKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgc3VjY2VlZGxpc3RbY291bnRdOgotICAgICAgICAgICAgICAgIHggPSBtZXRob2QoKmFyZ3MpCi0gICAgICAgICAgICAgICAgcHJpbnQgcHJlZCh4KSBhbmQgJ3N1Y2NlZWRlZCcgb3IgJ2ZhaWxlZCcsICc6JywgeAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCAnc2tpcHBpbmcnCi0gICAgICAgIGV4Y2VwdCBDb252ZXJzaW9uRXJyb3IsIHZhcjoKLSAgICAgICAgICAgIHByaW50ICdDb252ZXJzaW9uRXJyb3I6JywgdmFyLm1zZwotICAgICAgICBjb3VudCA9IGNvdW50ICsgMQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgX3Rlc3QoKQpkaWZmIC0tZ2l0IGEvTGliL3htbHJwY2xpYi5weSBiL0xpYi94bWxycGNsaWIucHkKaW5kZXggNzI4NjZmMS4uZGEzZDM5NiAxMDA2NDQKLS0tIGEvTGliL3htbHJwY2xpYi5weQorKysgYi9MaWIveG1scnBjbGliLnB5CkBAIC01OTMsOSArNTkzLDIxIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBzZWxmLmRpc3BhdGNoW3R5cGUodmFsdWUpXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJjYW5ub3QgbWFyc2hhbCAlcyBvYmplY3RzIiAlIHR5cGUodmFsdWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmKHNlbGYsIHZhbHVlLCB3cml0ZSkKKyAgICAgICAgICAgICMgY2hlY2sgaWYgdGhpcyBvYmplY3QgY2FuIGJlIG1hcnNoYWxsZWQgYXMgYSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZS5fX2RpY3RfXworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgImNhbm5vdCBtYXJzaGFsICVzIG9iamVjdHMiICUgdHlwZSh2YWx1ZSkKKyAgICAgICAgICAgICMgY2hlY2sgaWYgdGhpcyBjbGFzcyBpcyBhIHN1Yi1jbGFzcyBvZiBhIGJhc2ljIHR5cGUsCisgICAgICAgICAgICAjIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBob3cgdG8gbWFyc2hhbCB0aGVzZSB0eXBlcworICAgICAgICAgICAgIyAoZS5nLiBhIHN0cmluZyBzdWItY2xhc3MpCisgICAgICAgICAgICBmb3IgdHlwZV8gaW4gdHlwZSh2YWx1ZSkuX19tcm9fXzoKKyAgICAgICAgICAgICAgICBpZiB0eXBlXyBpbiBzZWxmLmRpc3BhdGNoLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiY2Fubm90IG1hcnNoYWwgJXMgb2JqZWN0cyIgJSB0eXBlKHZhbHVlKQorICAgICAgICAgICAgIyBYWFgodHdvdXRlcnMpOiB1c2luZyAiX2FyYml0cmFyeV9pbnN0YW5jZSIgYXMga2V5IGFzIGEgcXVpY2stZml4CisgICAgICAgICAgICAjIGZvciB0aGUgcDN5ayBtZXJnZSwgdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgZml4ZWQgbW9yZSBuZWF0bHkuCisgICAgICAgICAgICBmID0gc2VsZi5kaXNwYXRjaFsiX2FyYml0cmFyeV9pbnN0YW5jZSJdCisgICAgICAgIGYoc2VsZiwgdmFsdWUsIHdyaXRlKQogCiAgICAgZGVmIGR1bXBfbmlsIChzZWxmLCB2YWx1ZSwgd3JpdGUpOgogICAgICAgICBpZiBub3Qgc2VsZi5hbGxvd19ub25lOgpAQCAtNzEzLDYgKzcyNSw5IEBACiAgICAgICAgICAgICBzZWxmLmR1bXBfc3RydWN0KHZhbHVlLl9fZGljdF9fLCB3cml0ZSkKICAgICBkaXNwYXRjaFtEYXRlVGltZV0gPSBkdW1wX2luc3RhbmNlCiAgICAgZGlzcGF0Y2hbQmluYXJ5XSA9IGR1bXBfaW5zdGFuY2UKKyAgICAjIFhYWCh0d291dGVycyk6IHVzaW5nICJfYXJiaXRyYXJ5X2luc3RhbmNlIiBhcyBrZXkgYXMgYSBxdWljay1maXgKKyAgICAjIGZvciB0aGUgcDN5ayBtZXJnZSwgdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgZml4ZWQgbW9yZSBuZWF0bHkuCisgICAgZGlzcGF0Y2hbIl9hcmJpdHJhcnlfaW5zdGFuY2UiXSA9IGR1bXBfaW5zdGFuY2UKIAogIyMKICMgWE1MLVJQQyB1bm1hcnNoYWxsZXIuCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5IGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQppbmRleCAwODMyMDliLi44YmRlYmU2IDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CisrKyBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKQEAgLTEwLDkgKzEwLDEwIEBACiBVc2FnZTogc2VlIFVTQUdFIHZhcmlhYmxlIGluIHRoZSBzY3JpcHQuCiAiIiIKIGltcG9ydCBwbGF0Zm9ybSwgb3MsIHN5cywgZ2V0b3B0LCB0ZXh0d3JhcCwgc2h1dGlsLCB1cmxsaWIyLCBzdGF0LCB0aW1lLCBwd2QKK2ltcG9ydCBncnAKIAotSU5DTFVERV9USU1FU1RBTVA9MQotVkVSQk9TRT0xCitJTkNMVURFX1RJTUVTVEFNUCA9IDEKK1ZFUkJPU0UgPSAxCiAKIGZyb20gcGxpc3RsaWIgaW1wb3J0IFBsaXN0CiAKQEAgLTMyLDcgKzMzLDcgQEAKIAogZGVmIHNoZWxsUXVvdGUodmFsdWUpOgogICAgICIiIgotICAgIFJldHVybiB0aGUgc3RyaW5nIHZhbHVlIGluIGEgZm9ybSB0aGF0IGNhbiBzYXZlbHkgYmUgaW5zZXJ0ZWQgaW50bworICAgIFJldHVybiB0aGUgc3RyaW5nIHZhbHVlIGluIGEgZm9ybSB0aGF0IGNhbiBzYWZlbHkgYmUgaW5zZXJ0ZWQgaW50bwogICAgIGEgc2hlbGwgY29tbWFuZC4KICAgICAiIiIKICAgICByZXR1cm4gIiclcyciJSh2YWx1ZS5yZXBsYWNlKCInIiwgIidcIidcIiciKSkKQEAgLTU1LDI4ICs1NiwyOCBAQAogCiAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiQ2Fubm90IGZpbmQgZnVsbCB2ZXJzaW9uPz8iCiAKLSMgVGhlIGRpcmVjdG9yeSB3ZSdsbCB1c2UgdG8gY3JlYXRlIHRoZSBidWlsZCwgd2lsbCBiZSBlcmFzZWQgYW5kIHJlY3JlYXRlZAotV09SS0RJUj0iL3RtcC9fcHkiCisjIFRoZSBkaXJlY3Rvcnkgd2UnbGwgdXNlIHRvIGNyZWF0ZSB0aGUgYnVpbGQgKHdpbGwgYmUgZXJhc2VkIGFuZCByZWNyZWF0ZWQpCitXT1JLRElSID0gIi90bXAvX3B5IgogCi0jIFRoZSBkaXJlY3Rvcnkgd2UnbGwgdXNlIHRvIHN0b3JlIHRoaXJkLXBhcnR5IHNvdXJjZXMsIHNldCB0aGlzIHRvIHNvbWV0aGluZworIyBUaGUgZGlyZWN0b3J5IHdlJ2xsIHVzZSB0byBzdG9yZSB0aGlyZC1wYXJ0eSBzb3VyY2VzLiBTZXQgdGhpcyB0byBzb21ldGhpbmcKICMgZWxzZSBpZiB5b3UgZG9uJ3Qgd2FudCB0byByZS1mZXRjaCByZXF1aXJlZCBsaWJyYXJpZXMgZXZlcnkgdGltZS4KLURFUFNSQz1vcy5wYXRoLmpvaW4oV09SS0RJUiwgJ3RoaXJkLXBhcnR5JykKLURFUFNSQz1vcy5wYXRoLmV4cGFuZHVzZXIoJ34vVW5pdmVyc2FsL290aGVyLXNvdXJjZXMnKQorREVQU1JDID0gb3MucGF0aC5qb2luKFdPUktESVIsICd0aGlyZC1wYXJ0eScpCitERVBTUkMgPSBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vVW5pdmVyc2FsL290aGVyLXNvdXJjZXMnKQogCiAjIExvY2F0aW9uIG9mIHRoZSBwcmVmZXJyZWQgU0RLCi1TREtQQVRIPSIvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrIgotI1NES1BBVEg9Ii8iCitTREtQQVRIID0gIi9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsiCisjU0RLUEFUSCA9ICIvIgogCi1BUkNITElTVD0oJ2kzODYnLCAncHBjJywpCitBUkNITElTVCA9ICgnaTM4NicsICdwcGMnLCkKIAogIyBTb3VyY2UgZGlyZWN0b3J5IChhc3VtZSB3ZSdyZSBpbiBNYWMvQnVpbGRTY3JpcHQpCi1TUkNESVI9b3MucGF0aC5kaXJuYW1lKAorU1JDRElSID0gb3MucGF0aC5kaXJuYW1lKAogICAgICAgICBvcy5wYXRoLmRpcm5hbWUoCiAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoCiAgICAgICAgICAgICAgICAgb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fCiAgICAgICAgICkpKSkKIAotVVNBR0U9dGV4dHdyYXAuZGVkZW50KCIiIlwKK1VTQUdFID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKICAgICBVc2FnZTogYnVpbGRfcHl0aG9uIFtvcHRpb25zXQogCiAgICAgT3B0aW9uczoKQEAgLTkxLDcgKzkyLDcgQEAKIAogIyBJbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIGxpYnJhcmllcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIGJ1aWxkaW5nIGEKICMgYmF0dGVyaWVzIGluY2x1ZGVkIHB5dGhvbi4KLUxJQlJBUllfUkVDSVBFUz1bCitMSUJSQVJZX1JFQ0lQRVMgPSBbCiAgICAgZGljdCgKICAgICAgICAgbmFtZT0iQnppcDIgMS4wLjMiLAogICAgICAgICB1cmw9Imh0dHA6Ly93d3cuYnppcC5vcmcvMS4wLjMvYnppcDItMS4wLjMudGFyLmd6IiwKQEAgLTE4Myw3ICsxODQsNyBAQAogCiAKICMgSW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBwYWNrYWdlcyBpbnNpZGUgdGhlIC5tcGtnLgotUEtHX1JFQ0lQRVM9WworUEtHX1JFQ0lQRVMgPSBbCiAgICAgZGljdCgKICAgICAgICAgbmFtZT0iUHl0aG9uRnJhbWV3b3JrIiwKICAgICAgICAgbG9uZ19uYW1lPSJQeXRob24gRnJhbWV3b3JrIiwKQEAgLTIwMCw3ICsyMDEsNyBAQAogICAgICAgICBsb25nX25hbWU9IkdVSSBBcHBsaWNhdGlvbnMiLAogICAgICAgICBzb3VyY2U9Ii9BcHBsaWNhdGlvbnMvTWFjUHl0aG9uICUoVkVSKXMiLAogICAgICAgICByZWFkbWU9IiIiXAotICAgICAgICAgICAgVGhpcyBwYWNrYWdlIGluc3RhbGxzIElETEUgKGFuIGludGVyYWN0aXZlIFB5dGhvbiBJRExFKSwKKyAgICAgICAgICAgIFRoaXMgcGFja2FnZSBpbnN0YWxscyBJRExFIChhbiBpbnRlcmFjdGl2ZSBQeXRob24gSURFKSwKICAgICAgICAgICAgIFB5dGhvbiBMYXVuY2hlciBhbmQgQnVpbGQgQXBwbGV0IChjcmVhdGUgYXBwbGljYXRpb24gYnVuZGxlcwogICAgICAgICAgICAgZnJvbSBweXRob24gc2NyaXB0cykuCiAKQEAgLTI1Niw4ICsyNTcsNyBAQAogICAgICAgICByZWFkbWU9IiIiXAogICAgICAgICAgICAgVGhpcyBwYWNrYWdlIHVwZGF0ZXMgdGhlIHN5c3RlbSBweXRob24gaW5zdGFsbGF0aW9uIG9uCiAgICAgICAgICAgICBNYWMgT1MgWCAxMC4zIHRvIGVuc3VyZSB0aGF0IHlvdSBjYW4gYnVpbGQgbmV3IHB5dGhvbiBleHRlbnNpb25zCi0gICAgICAgICAgICB1c2luZyB0aGF0IGNvcHkgb2YgcHl0aG9uIGFmdGVyIGluc3RhbGxpbmcgdGhpcyB2ZXJzaW9uIG9mCi0gICAgICAgICAgICBweXRob24uCisgICAgICAgICAgICB1c2luZyB0aGF0IGNvcHkgb2YgcHl0aG9uIGFmdGVyIGluc3RhbGxpbmcgdGhpcyB2ZXJzaW9uLgogICAgICAgICAgICAgIiIiLAogICAgICAgICBwb3N0ZmxpZ2h0PSIuLi9Ub29scy9maXhhcHBsZXB5dGhvbjIzLnB5IiwKICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLApAQCAtMzIzLDcgKzMyMyw3IEBACiAKIAogCi1kZWYgcGFyc2VPcHRpb25zKGFyZ3MgPSBOb25lKToKK2RlZiBwYXJzZU9wdGlvbnMoYXJncz1Ob25lKToKICAgICAiIiIKICAgICBQYXJzZSBhcmd1bWVudHMgYW5kIHVwZGF0ZSBnbG9iYWwgc2V0dGluZ3MuCiAgICAgIiIiCkBAIC02MzYsMTUgKzYzNiwxNSBAQAogICAgIHByaW50ICJSdW5uaW5nIG1ha2UiCiAgICAgcnVuQ29tbWFuZCgibWFrZSIpCiAKLSAgICBwcmludCAiUnVuaW5nIG1ha2UgZnJhbWV3b3JraW5zdGFsbCIKKyAgICBwcmludCAiUnVubmluZyBtYWtlIGZyYW1ld29ya2luc3RhbGwiCiAgICAgcnVuQ29tbWFuZCgibWFrZSBmcmFtZXdvcmtpbnN0YWxsIERFU1RESVI9JXMiJSgKICAgICAgICAgc2hlbGxRdW90ZShyb290RGlyKSkpCiAKLSAgICBwcmludCAiUnVuaW5nIG1ha2UgZnJhbWV3b3JraW5zdGFsbGV4dHJhcyIKKyAgICBwcmludCAiUnVubmluZyBtYWtlIGZyYW1ld29ya2luc3RhbGxleHRyYXMiCiAgICAgcnVuQ29tbWFuZCgibWFrZSBmcmFtZXdvcmtpbnN0YWxsZXh0cmFzIERFU1RESVI9JXMiJSgKICAgICAgICAgc2hlbGxRdW90ZShyb290RGlyKSkpCiAKLSAgICBwcmludCAiQ29weSByZXF1aXJlZCBzaGFyZWQgbGlicmFyaWVzIgorICAgIHByaW50ICJDb3B5aW5nIHJlcXVpcmVkIHNoYXJlZCBsaWJyYXJpZXMiCiAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKFdPUktESVIsICdsaWJyYXJpZXMnLCAnTGlicmFyeScpKToKICAgICAgICAgcnVuQ29tbWFuZCgibXYgJXMvKiAlcyIlKAogICAgICAgICAgICAgc2hlbGxRdW90ZShvcy5wYXRoLmpvaW4oCkBAIC02NTcsOSArNjU3LDEzIEBACiAKICAgICBwcmludCAiRml4IGZpbGUgbW9kZXMiCiAgICAgZnJtRGlyID0gb3MucGF0aC5qb2luKHJvb3REaXIsICdMaWJyYXJ5JywgJ0ZyYW1ld29ya3MnLCAnUHl0aG9uLmZyYW1ld29yaycpCisgICAgZ2lkID0gZ3JwLmdldGdybmFtKCdhZG1pbicpLmdyX2dpZAorCiAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhmcm1EaXIpOgogICAgICAgICBmb3IgZG4gaW4gZGlybmFtZXM6CiAgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oZGlycGF0aCwgZG4pLCAwNzc1KQorICAgICAgICAgICAgb3MuY2hvd24ob3MucGF0aC5qb2luKGRpcnBhdGgsIGRuKSwgLTEsIGdpZCkKKwogCiAgICAgICAgIGZvciBmbiBpbiBmaWxlbmFtZXM6CiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmbik6CkBAIC02NjgsNyArNjcyLDggQEAKICAgICAgICAgICAgICMgImNobW9kIGcrdyAkZm4iCiAgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKQogICAgICAgICAgICAgc3QgPSBvcy5zdGF0KHApCi0gICAgICAgICAgICBvcy5jaG1vZChwLCBzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSkgfCBzdGF0LlNfSVhHUlApCisgICAgICAgICAgICBvcy5jaG1vZChwLCBzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSkgfCBzdGF0LlNfSVdHUlApCisgICAgICAgICAgICBvcy5jaG93bihwLCAtMSwgZ2lkKQogCiAgICAgIyBXZSBhZGRlZCBzb21lIGRpcmVjdG9yaWVzIHRvIHRoZSBzZWFyY2ggcGF0aCBkdXJpbmcgdGhlIGNvbmZpZ3VyZQogICAgICMgcGhhc2UuIFJlbW92ZSB0aG9zZSBiZWNhdXNlIHRob3NlIGRpcmVjdG9yaWVzIHdvbid0IGJlIHRoZXJlIG9uCkBAIC03MjksOCArNzM0LDggQEAKIGRlZiBwYWNrYWdlRnJvbVJlY2lwZSh0YXJnZXREaXIsIHJlY2lwZSk6CiAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKICAgICB0cnk6Ci0gICAgICAgICMgVGhlIG1ham9yIHZlcnNpb24gKHN1Y2ggYXMgMi41KSBpcyBpbmNsdWRlZCBpbiB0aGUgcGFjYWtnZSBuYW1lCi0gICAgICAgICMgYmVjYXVzZSBoYXZlaW5nIHR3byB2ZXJzaW9uIG9mIHB5dGhvbiBpbnN0YWxsZWQgYXQgdGhlIHNhbWUgdGltZSBpcworICAgICAgICAjIFRoZSBtYWpvciB2ZXJzaW9uIChzdWNoIGFzIDIuNSkgaXMgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2UgbmFtZQorICAgICAgICAjIGJlY2F1c2UgaGF2aW5nIHR3byB2ZXJzaW9uIG9mIHB5dGhvbiBpbnN0YWxsZWQgYXQgdGhlIHNhbWUgdGltZSBpcwogICAgICAgICAjIGNvbW1vbi4KICAgICAgICAgcGtnbmFtZSA9ICclcy0lcyclKHJlY2lwZVsnbmFtZSddLCBnZXRWZXJzaW9uKCkpCiAgICAgICAgIHNyY2RpciAgPSByZWNpcGUuZ2V0KCdzb3VyY2UnKQpAQCAtOTA0LDcgKzkwOSw3IEBACiAKIGRlZiBidWlsZERNRygpOgogICAgICIiIgotICAgIENyZWF0ZSBETUcgY29udGFpbmluZyB0aGUgcm9vdERpcgorICAgIENyZWF0ZSBETUcgY29udGFpbmluZyB0aGUgcm9vdERpci4KICAgICAiIiIKICAgICBvdXRkaXIgPSBvcy5wYXRoLmpvaW4oV09SS0RJUiwgJ2Rpc2tpbWFnZScpCiAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0ZGlyKToKQEAgLTkxNyw3ICs5MjIsNyBAQAogICAgIGltYWdlcGF0aCA9IGltYWdlcGF0aCArICcuZG1nJwogCiAgICAgb3MubWtkaXIob3V0ZGlyKQotICAgIHJ1bkNvbW1hbmQoImhkaXV0aWwgY3JlYXRlIC12b2xuYW1lICdVbml2ZXJhbCBNYWNQeXRob24gJXMnIC1zcmNmb2xkZXIgJXMgJXMiJSgKKyAgICBydW5Db21tYW5kKCJoZGl1dGlsIGNyZWF0ZSAtdm9sbmFtZSAnVW5pdmVyc2FsIE1hY1B5dGhvbiAlcycgLXNyY2ZvbGRlciAlcyAlcyIlKAogICAgICAgICAgICAgZ2V0RnVsbFZlcnNpb24oKSwKICAgICAgICAgICAgIHNoZWxsUXVvdGUob3MucGF0aC5qb2luKFdPUktESVIsICdpbnN0YWxsZXInKSksCiAgICAgICAgICAgICBzaGVsbFF1b3RlKGltYWdlcGF0aCkpKQpAQCAtOTQ1LDYgKzk1MCwxMCBAQAogICAgIHJlZiwgaXNEaXJlY3RvcnkgPSBDYXJib24uRmlsZS5GU1BhdGhNYWtlUmVmKGZpbGVQYXRoKQogCiAgICAgaWYgaXNEaXJlY3Rvcnk6CisgICAgICAgICMgVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggZ2V0dGluZyB0aGlzIGludG8gdGhlIHBheCgxKSBhcmNoaXZlLAorICAgICAgICAjIGp1c3QgaWdub3JlIGRpcmVjdG9yeSBpY29ucyBmb3Igbm93LgorICAgICAgICByZXR1cm4KKwogICAgICAgICB0bXBQYXRoID0gb3MucGF0aC5qb2luKGZpbGVQYXRoLCAiSWNvblxyIikKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRtcFBhdGgpOgogICAgICAgICAgICAgZnAgPSBvcGVuKHRtcFBhdGgsICd3JykKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZG9jdW1lbnRhdGlvbiBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZG9jdW1lbnRhdGlvbgppbmRleCA4NWQ0MDBmLi45ZjU5MThlIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmRvY3VtZW50YXRpb24KKysrIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5kb2N1bWVudGF0aW9uCkBAIC0xLDYgKzEsNSBAQAogIyEvYmluL3NoCiAKLSMgRklYTUUKIFBZVkVSPSJAUFlWRVJAIgogCiBpZiBbIC1kIC9EZXZlbG9wZXIvRG9jdW1lbnRhdGlvbiBdOyB0aGVuCkBAIC04LDUgKzcsNSBAQAogCQlta2RpciAtcCAvRGV2ZWxvcGVyL0RvY3VtZW50YXRpb24vUHl0aG9uCiAJZmkKIAotCWxuIC1maHMgL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyR7UFlWRVJ9L1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24gIi9EZXZlbG9wZXIvRG9jdW1lbnRhdGlvbi9QeXRob24vUmVmZXJlbmNlIERvY3VtZW50YXRpb24iCisJbG4gLWZocyAvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJHtQWVZFUn0vUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbiAiL0RldmVsb3Blci9Eb2N1bWVudGF0aW9uL1B5dGhvbi9SZWZlcmVuY2UgRG9jdW1lbnRhdGlvbiBAUFlWRVJAIgogZmkKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQucGF0Y2gtcHJvZmlsZSBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQucGF0Y2gtcHJvZmlsZQppbmRleCBjNDJlMTFlLi41ZTgyZjMzIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LnBhdGNoLXByb2ZpbGUKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5wYXRjaC1wcm9maWxlCkBAIC00NywyMiArNDcsMjkgQEAKIGVjaG8gIiR7UFlUSE9OX1JPT1R9L2JpbiBpcyBub3Qgb24geW91ciBQQVRIIG9yIGF0IGxlYXN0IG5vdCBlYXJseSBlbm91Z2giCiBjYXNlICIke0JTSH0iIGluCiAqY3NoKQotCSMgQ3JlYXRlIGJhY2t1cCBjb3B5IGJlZm9yZSBwYXRjaGluZwotCWlmIFsgLWYgIiR7SE9NRX0vLmNzaHJjIiBdOyB0aGVuCi0JCWNwIC1mcCAiJHtIT01FfS8uY3NocmMiICIke0hPTUV9Ly5jc2hyYy5weXNhdmUiCisJaWYgWyAtZiAiJHtIT01FfS8udGNzaHJjIiBdOyB0aGVuCisJCVJDPSIke0hPTUV9Ly50Y3NocmMiCisJZWxzZQorCQlSQz0iJHtIT01FfS8uY3NocmMiCiAJZmkKLQllY2hvICIiID4+ICIke0hPTUV9Ly5jc2hyYyIKLQllY2hvICIjIFNldHRpbmcgUEFUSCBmb3IgTWFjUHl0aG9uICR7UFlWRVJ9IiA+PiAiJHtIT01FfS8uY3NocmMiCi0JZWNobyAiIyBUaGUgb3JnaW5hbCB2ZXJzaW9uIGlzIHNhdmVkIGluIC5jc2hyYy5weXNhdmUiID4+ICIke0hPTUV9Ly5jc2hyYyIKLQllY2hvICJzZXQgcGF0aD0oJHtQWVRIT05fUk9PVH0vYmluICInJHBhdGgnIikiID4+ICIke0hPTUV9Ly5jc2hyYyIKKwkjIENyZWF0ZSBiYWNrdXAgY29weSBiZWZvcmUgcGF0Y2hpbmcKKwlpZiBbIC1mICIke1JDfSIgXTsgdGhlbgorCQljcCAtZnAgIiR7UkN9IiAiJHtSQ30ucHlzYXZlIgorCWZpCisJZWNobyAiIiA+PiAiJHtSQ30iCisJZWNobyAiIyBTZXR0aW5nIFBBVEggZm9yIE1hY1B5dGhvbiAke1BZVkVSfSIgPj4gIiR7UkN9IgorCWVjaG8gIiMgVGhlIG9yZ2luYWwgdmVyc2lvbiBpcyBzYXZlZCBpbiAuY3NocmMucHlzYXZlIiA+PiAiJHtSQ30iCisJZWNobyAic2V0IHBhdGg9KCR7UFlUSE9OX1JPT1R9L2JpbiAiJyRwYXRoJyIpIiA+PiAiJHtSQ30iCiAJaWYgWyBgaWQgLXVyYCA9IDAgXTsgdGhlbgotCQljaG93biAiJHtVU0VSfSIgIiR7SE9NRX0vLmNzaHJjIgorCQljaG93biAiJHtVU0VSfSIgIiR7UkN9IgogCWZpCiAJZXhpdCAwCiAJOzsKIGJhc2gpCiAJaWYgWyAtZSAiJHtIT01FfS8uYmFzaF9wcm9maWxlIiBdOyB0aGVuCiAJCVBSPSIke0hPTUV9Ly5iYXNoX3Byb2ZpbGUiCisJZWxpZiBbIC1lICIke0hPTUV9Ly5iYXNoX2xvZ2luIiBdOyB0aGVuCisJCVBSPSIke0hPTUV9Ly5iYXNoX2xvZ2luIgogCWVsaWYgWyAtZSAiJHtIT01FfS8ucHJvZmlsZSIgXTsgdGhlbgogCQlQUj0iJHtIT01FfS8ucHJvZmlsZSIKIAllbHNlCmRpZmYgLS1naXQgYS9NYWMvTWFrZWZpbGUuaW4gYi9NYWMvTWFrZWZpbGUuaW4KaW5kZXggMTFmMTQzOC4uOGIyZTFkYiAxMDA2NDQKLS0tIGEvTWFjL01ha2VmaWxlLmluCisrKyBiL01hYy9NYWtlZmlsZS5pbgpAQCAtMTAxLDcgKzEwMSw3IEBACiAJZmkKIAogCi1weXRob253OiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jCitweXRob253OiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCiAJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIFwKIAkJLURQWVRIT05XRVhFQ1VUQUJMRT0nIiQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvTWFjT1MvUHl0aG9uIicKIApAQCAtMjQ5LDMgKzI0OSw2IEBACiAJcm0gcHl0aG9udwogCWNkIFB5dGhvbkxhdW5jaGVyICYmIG1ha2UgY2xlYW4KIAljZCBJRExFICYmIG1ha2UgY2xlYW4KKworTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAuLi9jb25maWcuc3RhdHVzCisJY2QgLi4gJiYgQ09ORklHX0ZJTEVTPU1hYy9NYWtlZmlsZSBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCmRpZmYgLS1naXQgYS9NYWMvUHl0aG9uTGF1bmNoZXIvRmlsZVNldHRpbmdzLm0gYi9NYWMvUHl0aG9uTGF1bmNoZXIvRmlsZVNldHRpbmdzLm0KaW5kZXggYmEzNzViYS4uMWYzNjk1ZSAxMDA3NTUKLS0tIGEvTWFjL1B5dGhvbkxhdW5jaGVyL0ZpbGVTZXR0aW5ncy5tCisrKyBiL01hYy9QeXRob25MYXVuY2hlci9GaWxlU2V0dGluZ3MubQpAQCAtMjA3LDcgKzIwNyw3IEBACiAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IGluc3BlY3RdLCBAImluc3BlY3QiLAogICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBvcHRpbWl6ZV0sIEAib3B0aW1pemUiLAogICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBub3NpdGVdLCBAIm5vc2l0ZSIsCi0gICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IG5vc2l0ZV0sIEAibm9zaXRlIiwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogdGFic10sIEAidGFicyIsCiAgICAgICAgICAgICBvdGhlcnMsIEAib3RoZXJzIiwKICAgICAgICAgICAgIHNjcmlwdGFyZ3MsIEAic2NyaXB0YXJncyIsCiAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IHdpdGhfdGVybWluYWxdLCBAIndpdGhfdGVybWluYWwiLApAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgaWYgKHZhbHVlKSBvcHRpbWl6ZSA9IFt2YWx1ZSBib29sVmFsdWVdOwogICAgIHZhbHVlID0gW2RpY3Qgb2JqZWN0Rm9yS2V5OiBAIm5vc2l0ZSJdOwogICAgIGlmICh2YWx1ZSkgbm9zaXRlID0gW3ZhbHVlIGJvb2xWYWx1ZV07Ci0gICAgdmFsdWUgPSBbZGljdCBvYmplY3RGb3JLZXk6IEAibm9zaXRlIl07CisgICAgdmFsdWUgPSBbZGljdCBvYmplY3RGb3JLZXk6IEAidGFicyJdOwogICAgIGlmICh2YWx1ZSkgdGFicyA9IFt2YWx1ZSBib29sVmFsdWVdOwogICAgIHZhbHVlID0gW2RpY3Qgb2JqZWN0Rm9yS2V5OiBAIm90aGVycyJdOwogICAgIGlmICh2YWx1ZSkgb3RoZXJzID0gW3ZhbHVlIHJldGFpbl07CkBAIC0yOTEsNyArMjkxLDcgQEAKICAgICAgICAgdGFicz8iIC10IjoiIiwKICAgICAgICAgb3RoZXJzLAogICAgICAgICBbc2VsZiBfcmVwbGFjZVNpbmdsZVF1b3RlczpzY3JpcHRdLAotICAgICAgICBzY3JpcHRhcmdzLAorICAgICAgICBzY3JpcHRhcmdzID8gc2NyaXB0YXJncyA6IEAiIiwKICAgICAgICAgd2l0aF90ZXJtaW5hbD8gIiYmIGVjaG8gRXhpdCBzdGF0dXM6ICQ/ICYmIGV4aXQgMSIgOiAiICYiXTsKIH0KIApkaWZmIC0tZ2l0IGEvTWFjL1JFQURNRSBiL01hYy9SRUFETUUKaW5kZXggMWU1OGIwMi4uNWU3NGQ3YiAxMDA2NDQKLS0tIGEvTWFjL1JFQURNRQorKysgYi9NYWMvUkVBRE1FCkBAIC00OCw3ICs0OCw3IEBACiAKIEEgc2Vjb25kIHJlYXNvbiBmb3IgdXNpbmcgZnJhbWV3b3JrcyBpcyB0aGF0IHRoZXkgcHV0IFB5dGhvbi1yZWxhdGVkIGl0ZW1zIGluCiBvbmx5IHR3byBwbGFjZXM6ICIvTGlicmFyeS9GcmFtZXdvcmsvUHl0aG9uLmZyYW1ld29yayIgYW5kIAotIi9BcHBsaWNhdGlvbnMvTWFjUHl0aG9uIDIuNSIuICBUaGlzIHNpbXBsaWZpZXMgbWF0dGVycyBmb3IgdXNlcnMgaW5zdGFsbGluZyAKKyIvQXBwbGljYXRpb25zL01hY1B5dGhvbiAyLjYiLiAgVGhpcyBzaW1wbGlmaWVzIG1hdHRlcnMgZm9yIHVzZXJzIGluc3RhbGxpbmcgCiBQeXRob24gZnJvbSBhIGJpbmFyeSBkaXN0cmlidXRpb24gaWYgdGhleSB3YW50IHRvIGdldCByaWQgb2YgaXQgYWdhaW4uIE1vcmVvdmVyLAogZHVlIHRvIHRoZSB3YXkgZnJhbWV3b3JrcyB3b3JrIGEgdXNlciB3aXRob3V0IGFkbWluIHByaXZpbGVnZXMgY2FuIGluc3RhbGwgYSAKIGJpbmFyeSBkaXN0cmlidXRpb24gaW4gaGlzIG9yIGhlciBob21lIGRpcmVjdG9yeSB3aXRob3V0IHJlY29tcGlsYXRpb24uCkBAIC03NSw3ICs3NSw3IEBACiAKIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgTWFrZWZpbGUgdGhhdCB3aWxsIGNyZWF0ZSBhIGNvdXBsZSBvZiBweXRob24tcmVsYXRlZAogYXBwbGljYXRpb25zIChmdWxsYmxvd24gT1NYIC5hcHAgYXBwbGljYXRpb25zLCB0aGF0IGlzKSBpbgotIi9BcHBsaWNhdGlvbnMvTWFjUHl0aG9uIDIuMyIsIGFuZCBhIGhpZGRlbiBoZWxwZXIgYXBwbGljYXRpb24gUHl0aG9uLmFwcCAKKyIvQXBwbGljYXRpb25zL01hY1B5dGhvbiAyLjYiLCBhbmQgYSBoaWRkZW4gaGVscGVyIGFwcGxpY2F0aW9uIFB5dGhvbi5hcHAgCiBpbnNpZGUgdGhlIFB5dGhvbi5mcmFtZXdvcmssIGFuZCB1bml4IHRvb2xzICJweXRob24iIGFuZCAicHl0aG9udyIgaW50byAKIC91c3IvbG9jYWwvYmluLiAgSW4gYWRkaXRpb24gaXQgaGFzIGEgdGFyZ2V0ICJpbnN0YWxsbWFjc3VidHJlZSIgdGhhdCBpbnN0YWxscyAKIHRoZSByZWxldmFudCBwb3J0aW9ucyBvZiB0aGUgTWFjIHN1YnRyZWUgaW50byB0aGUgUHl0aG9uLmZyYW1ld29yay4KQEAgLTkwLDIwICs5MCwxNiBAQAogIDMuIG1ha2UgaW5zdGFsbAogCiBUaGlzIHNlcXVlbmNlIHdpbGwgcHV0IHRoZSBmcmFtZXdvcmsgaW4gL0xpYnJhcnkvRnJhbWV3b3JrL1B5dGhvbi5mcmFtZXdvcmssCi10aGUgYXBwbGljYXRpb25zIGluIC9BcHBsaWNhdGlvbnMvTWFjUHl0aG9uIDIuNSBhbmQgdGhlIHVuaXggdG9vbHMgaW4gCit0aGUgYXBwbGljYXRpb25zIGluICIvQXBwbGljYXRpb25zL01hY1B5dGhvbiAyLjYiIGFuZCB0aGUgdW5peCB0b29scyBpbiAKIC91c3IvbG9jYWwvYmluLgogCiBJbnN0YWxsaW5nIGluIGFub3RoZXIgcGxhY2UsIGZvciBpbnN0YW5jZSAkSE9NRS9MaWJyYXJ5L0ZyYW1ld29ya3MgaWYgeW91IGhhdmUKIG5vIGFkbWluIHByaXZpbGVnZXMgb24geW91ciBtYWNoaW5lLCBoYXMgb25seSBiZWVuIHRlc3RlZCB2ZXJ5IGxpZ2h0bHkuIFRoaXMKIGNhbiBiZSBkb25lIGJ5IGNvbmZpZ3VyaW5nIHdpdGggLS1lbmFibGUtZnJhbWV3b3JrPSRIT01FL0xpYnJhcnkvRnJhbWV3b3Jrcy4KLVRoZSBvdGhlciB0d28gZGlyZWN0b3JpZXMsIC9BcHBsaWNhdGlvbnMvTWFjUHl0aG9uLTIuMyBhbmQgL3Vzci9sb2NhbC9iaW4sIHdpbGwgCi10aGVuIGFsc28gYmUgZGVwb3NpdGVkIGluICRIT01FLiBUaGlzIGlzIHN1Yi1vcHRpbWFsIGZvciB0aGUgdW5peCB0b29scywgd2hpY2ggCi15b3Ugd291bGQgd2FudCBpbiAkSE9NRS9iaW4sIGJ1dCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBmaXggdGhpcyByaWdodCBub3cuCi0KLU5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gcmVmZXJlbmNlcyB0byB0aGUgYWN0dWFsIGxvY2F0aW9ucyBpbiB0aGUgY29kZSBvcgotcmVzb3VyY2UgZmlsZXMsIHNvIHlvdSBhcmUgZnJlZSB0byBtb3ZlIHRoaW5ncyBhcm91bmQgYWZ0ZXJ3YXJkcy4gRm9yIGV4YW1wbGUsCi15b3UgY291bGQgdXNlIC0tZW5hYmxlLWZyYW1ld29yaz0vdG1wL25ld3ZlcnNpb24vTGlicmFyeS9GcmFtZXdvcmtzIGFuZCB1c2UKLS90bXAvbmV3dmVyc2lvbiBhcyB0aGUgYmFzaXMgZm9yIGFuIGluc3RhbGxlciBvciBzb21ldGhpbmcuCitUaGUgb3RoZXIgdHdvIGRpcmVjdG9yaWVzLCAiL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tMi42IiBhbmQgL3Vzci9sb2NhbC9iaW4sIAord2lsbCB0aGVuIGFsc28gYmUgZGVwb3NpdGVkIGluICRIT01FLiBUaGlzIGlzIHN1Yi1vcHRpbWFsIGZvciB0aGUgdW5peCB0b29scywgCit3aGljaCB5b3Ugd291bGQgd2FudCBpbiAkSE9NRS9iaW4sIGJ1dCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBmaXggdGhpcyByaWdodCAKK25vdy4KIAogSWYgeW91IHdhbnQgdG8gaW5zdGFsbCBzb21lIHBhcnQsIGJ1dCBub3QgYWxsLCByZWFkIHRoZSBtYWluIE1ha2VmaWxlLiBUaGUKIGZyYW1ld29ya2luc3RhbGwgaXMgY29tcG9zZWQgb2YgYSBjb3VwbGUgb2Ygc3ViLXRhcmdldHMgdGhhdCBpbnN0YWxsIHRoZQpAQCAtMTExLDcgKzEwNyw3IEBACiAKIFRoZXJlIGlzIGFuIGV4dHJhIHRhcmdldCBmcmFtZXdvcmtpbnN0YWxsZXh0cmFzIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlCiBub3JtYWwgZnJhbWV3b3JraW5zdGFsbCB3aGljaCBpbnN0YWxscyB0aGUgRGVtbyBhbmQgVG9vbHMgZGlyZWN0b3JpZXMKLWludG8gL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tMi4zLCB0aGlzIGlzIHVzZWZ1bCBmb3IgYmluYXJ5IGRpc3RyaWJ1dGlvbnMuCitpbnRvICIvQXBwbGljYXRpb25zL01hY1B5dGhvbiAyLjYiLCB0aGlzIGlzIHVzZWZ1bCBmb3IgYmluYXJ5IGRpc3RyaWJ1dGlvbnMuCiAKIFdoYXQgZG8gYWxsIHRoZXNlIHByb2dyYW1zIGRvPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL2ZpeGFwcGxlcHl0aG9uMjMucHkgYi9NYWMvVG9vbHMvZml4YXBwbGVweXRob24yMy5weQppbmRleCBmYjg2NDVhLi42YmE1NDAxIDEwMDY0NAotLS0gYS9NYWMvVG9vbHMvZml4YXBwbGVweXRob24yMy5weQorKysgYi9NYWMvVG9vbHMvZml4YXBwbGVweXRob24yMy5weQpAQCAtMTIzLDcgKzEyMyw4IEBACiAgICAgICAgICAgICBtYWtlc2NyaXB0KEdYWF9TQ1JJUFQsICJnKysiKQogICAgICMgIEZpbmFsbHkgZml4IHRoZSBtYWtlZmlsZQogICAgIHJ2ID0gZml4KE1BS0VGSUxFLCBkb19hcHBseSkKLSAgICBzeXMuZXhpdChydikKKyAgICAjc3lzLmV4aXQocnYpCisgICAgc3lzLmV4aXQoMCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnByZS5pbiBiL01ha2VmaWxlLnByZS5pbgppbmRleCA5YzhkN2JhLi4xOWNlNjlmIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrIGIvTWFrZWZpbGUucHJlLmluCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAogIyBCdWlsZCB0aGUgc2hhcmVkIG1vZHVsZXMKIHNoYXJlZG1vZHM6ICQoQlVJTERQWVRIT04pCi0JY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisJQGNhc2UgJCRNQUtFRkxBR1MgaW4gXAogCSotcyopICQoUlVOU0hBUkVEKSBDQz0nJChDQyknIExEU0hBUkVEPSckKEJMRFNIQVJFRCknIE9QVD0nJChPUFQpJyAuLyQoQlVJTERQWVRIT04pIC1FICQoc3JjZGlyKS9zZXR1cC5weSAtcSBidWlsZDs7IFwKIAkqKSAkKFJVTlNIQVJFRCkgQ0M9JyQoQ0MpJyBMRFNIQVJFRD0nJChCTERTSEFSRUQpJyBPUFQ9JyQoT1BUKScgLi8kKEJVSUxEUFlUSE9OKSAtRSAkKHNyY2Rpcikvc2V0dXAucHkgYnVpbGQ7OyBcCiAJZXNhYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCSQoU0lHTkFMX09CSlMpIFwKIAkJJChNT0RPQkpTKSBcCiAJCSQoc3JjZGlyKS9Nb2R1bGVzL2dldGJ1aWxkaW5mby5jCi0JJChDQykgLWMgJChQWV9DRkxBR1MpIC1EU1ZOVkVSU0lPTj1cImBMQU5HPUMgJChTVk5WRVJTSU9OKWBcIiAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRidWlsZGluZm8uYworCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFNWTlZFUlNJT049XCJgTENfQUxMPUMgJChTVk5WRVJTSU9OKWBcIiAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRidWlsZGluZm8uYwogCiBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jIE1ha2VmaWxlCiAJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUFlUSE9OUEFUSD0nIiQoUFlUSE9OUEFUSCkiJyBcCmRpZmYgLS1naXQgYS9NaXNjL0FDS1MgYi9NaXNjL0FDS1MKaW5kZXggMTFlOTU1MS4uZDVkNzY3NSAxMDA2NDQKLS0tIGEvTWlzYy9BQ0tTCisrKyBiL01pc2MvQUNLUwpAQCAtMjQyLDYgKzI0Miw3IEBACiBNaWNoYWVsIEd1cmF2YWdlCiBMYXJzIEd1c3TkYmVsCiBCYXJyeSBIYWRkb3cKK1bhY2xhdiBIYWlzbWFuCiBQYXVsIHRlbiBIYWdlbgogUmFzbXVzIEhhaG4KIFBldGVyIEhhaWdodApAQCAtMzY1LDYgKzM2Niw3IEBACiBTb3JlbiBMYXJzZW4KIFBpZXJzIExhdWRlcgogQmVuIExhdXJpZQorU2ltb24gTGF3CiBDaHJpcyBMYXdyZW5jZQogQ2hyaXN0b3BoZXIgTGVlCiBJbnllb2wgTGVlCkBAIC02MTEsNiArNjEzLDcgQEAKIENocmlzdGlhbiBUYW56ZXIKIFN0ZXZlbiBUYXNjaHVrCiBBbXkgVGF5bG9yCitNb250eSBUYXlsb3IKIFRvYmlhcyBUaGVsZW4KIFJvYmluIFRob21hcwogRXJpYyBUaWVkZW1hbm4KQEAgLTYzMSw2ICs2MzQsNyBAQAogQmlsbCBUdXR0CiBEb29iZWUgUi4gVHplY2sKIExpb25lbCBVbG1lcgorUm9nZXIgVXBvbGUKIE1pY2hhZWwgVXJtYW4KIEhlY3RvciBVcnR1YmlhCiBEbWl0cnkgVmFzaWxpZXYKZGlmZiAtLWdpdCBhL01pc2MvSElTVE9SWSBiL01pc2MvSElTVE9SWQppbmRleCBiZTRjYTg4Li5mMjQ1MmYyIDEwMDY0NAotLS0gYS9NaXNjL0hJU1RPUlkKKysrIGIvTWlzYy9ISVNUT1JZCkBAIC0xMTY3OSw3ICsxMTY3OSw3IEBACiAtIFRoZSB3YXkgR05VIHJlYWRsaW5lIGlzIGNvbmZpZ3VyZWQgaXMgdG90YWxseSBkaWZmZXJlbnQuICBUaGUKIC0td2l0aC1yZWFkbGluZSBjb25maWd1cmUgb3B0aW9uIGlzIGdvbmUuICBJdCBpcyBub3cgYW4gZXh0ZW5zaW9uCiBtb2R1bGUsIHdoaWNoIG1heSBiZSBsb2FkZWQgZHluYW1pY2FsbHkuICBZb3UgbXVzdCBlbmFibGUgaXQgKGFuZAotc3BlY2lmeSB0aGUgY29ycmVjdCBsaW5yYXJpZXMgdG8gbGluayB3aXRoKSBpbiB0aGUgTW9kdWxlcy9TZXR1cCBmaWxlLgorc3BlY2lmeSB0aGUgY29ycmVjdCBsaWJyYXJpZXMgdG8gbGluayB3aXRoKSBpbiB0aGUgTW9kdWxlcy9TZXR1cCBmaWxlLgogSW1wb3J0aW5nIHRoZSBtb2R1bGUgaW5zdGFsbHMgc29tZSBob29rcyB3aGljaCBlbmFibGUgY29tbWFuZCBsaW5lCiBlZGl0aW5nLiAgV2hlbiB0aGUgaW50ZXJwcmV0ZXIgc2hlbGwgaXMgaW52b2tlZCBpbnRlcmFjdGl2ZWx5LCBpdAogYXR0ZW1wdHMgdG8gaW1wb3J0IHRoZSByZWFkbGluZSBtb2R1bGU7IHdoZW4gdGhpcyBmYWlscywgdGhlIGRlZmF1bHQKZGlmZiAtLWdpdCBhL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQgYi9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CmluZGV4IDk1MmNhNDIuLmZhODdkOTIgMTAwNjQ0Ci0tLSBhL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKKysrIGIvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dApAQCAtOTEsNyArOTEsNyBAQAogCiAjZGVmaW5lIENMRUFOQllURSAgICAgMHhDQiAgIC8qIGNsZWFuIChuZXdseSBhbGxvY2F0ZWQpIG1lbW9yeSAqLwogI2RlZmluZSBERUFEQllURSAgICAgIDB4REIgICAvKiBkZWFkIChuZXdseSBmcmVlZCkgbWVtb3J5ICovCi0jZGVmaW5lIEZPUkJJRERFTkJZVEUgMHhGQiAgIC8qIGZvcmRpZGRlbiAtLSB1bnRvdWNoYWJsZSBieXRlcyAqLworI2RlZmluZSBGT1JCSURERU5CWVRFIDB4RkIgICAvKiBmb3JiaWRkZW4gLS0gdW50b3VjaGFibGUgYnl0ZXMgKi8KIAogU3RyaW5ncyBvZiB0aGVzZSBieXRlcyBhcmUgdW5saWtlbHkgdG8gYmUgdmFsaWQgYWRkcmVzc2VzLCBmbG9hdHMsIG9yIDctYml0CiBBU0NJSSBzdHJpbmdzLgpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vcHl0aG9uLnZpbSBiL01pc2MvVmltL3B5dGhvbi52aW0KaW5kZXggMDhjNTRkMi4uMjFjMzc1ZCAxMDA2NDQKLS0tIGEvTWlzYy9WaW0vcHl0aG9uLnZpbQorKysgYi9NaXNjL1ZpbS9weXRob24udmltCkBAIC02MiwzOSArNjIsMzkgQEAKIAogCiBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiKQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHVuaWNociBhbGwgc2V0IGFicyB2YXJzIGludCBfX2ltcG9ydF9fIHVuaWNvZGUKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBlbnVtZXJhdGUgZXhpdCBpc3N1YmNsYXNzCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZGl2bW9kIGZpbGUgRWxsaXBzaXMgaXNpbnN0YW5jZSBvcGVuIGFueQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGxvY2FscyBoZWxwIGZpbHRlciBiYXNlc3RyaW5nIHNsaWNlIGNvcHlyaWdodCBtaW4KLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBzdXBlciBzdW0gdHVwbGUgaGV4IGV4ZWNmaWxlIGxvbmcgaWQgY2hyCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgY29tcGxleCBib29sIHppcCBwb3cgZGljdCBUcnVlIG9jdCBOb3RJbXBsZW1lbnRlZAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIG1hcCBOb25lIGZsb2F0IGhhc2ggZ2V0YXR0ciBidWZmZXIgbWF4IHJldmVyc2VkCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgb2JqZWN0IHF1aXQgbGVuIHJlcHIgY2FsbGFibGUgY3JlZGl0cyBzZXRhdHRyCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZXZhbCBmcm96ZW5zZXQgc29ydGVkIG9yZCBfX2RlYnVnX18gaGFzYXR0cgotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGRlbGF0dHIgRmFsc2UgbGljZW5zZSBjbGFzc21ldGhvZCB0eXBlCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgbGlzdCBpdGVyIHJlbG9hZCByYW5nZSBnbG9iYWxzCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgc3RhdGljbWV0aG9kIHN0ciBwcm9wZXJ0eSByb3VuZCBkaXIgY21wCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgRWxsaXBzaXMgRmFsc2UgTm9uZSBOb3RJbXBsZW1lbnRlZCBUcnVlIF9fZGVidWdfXworICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIF9faW1wb3J0X18gYWJzIGFsbCBhbnkgYmFzZXN0cmluZyBib29sCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgYnVmZmVyIGNhbGxhYmxlIGNociBjbGFzc21ldGhvZCBjbXAKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBjb21wbGV4IGNvcHlyaWdodCBjcmVkaXRzIGRlbGF0dHIgZGljdAorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGRpciBkaXZtb2QgZW51bWVyYXRlIGV2YWwgZXhlY2ZpbGUgZXhpdCBmaWxlCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZmlsdGVyIGZsb2F0IGZyb3plbnNldCBnZXRhdHRyIGdsb2JhbHMgaGFzYXR0cgorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGhhc2ggaGVscCBoZXggaWQgaW50IGlzaW5zdGFuY2UKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBpc3N1YmNsYXNzIGl0ZXIgbGVuIGxpY2Vuc2UgbGlzdCBsb2NhbHMgbG9uZyBtYXAKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBtYXggbWluIG9iamVjdCBvY3Qgb3BlbiBvcmQgcG93IHByb3BlcnR5IHF1aXQKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICByYW5nZSByZWxvYWQgcmVwciByZXZlcnNlZCByb3VuZAorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHNldCBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2Qgc3RyIHN1bQorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHN1cGVyIHR1cGxlIHR5cGUgdW5pY2hyIHVuaWNvZGUgdmFycyB6aXAKIAogZW5kaWYKIAogCiBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyIpCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBHZW5lcmF0b3JFeGl0IEltcG9ydEVycm9yIFJ1bnRpbWVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yIE1lbW9yeUVycm9yIFN0b3BJdGVyYXRpb24KLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgRW52aXJvbm1lbnRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgTG9va3VwRXJyb3IgT1NFcnJvciBEZXByZWNhdGlvbldhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFVuaWNvZGVFcnJvciBVbmljb2RlRW5jb2RlRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEZsb2F0aW5nUG9pbnRFcnJvciBSZWZlcmVuY2VFcnJvciBOYW1lRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIElPRXJyb3IgU3ludGF4RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEZ1dHVyZVdhcm5pbmcgSW1wb3J0V2FybmluZyBTeXN0ZW1FeGl0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBFeGNlcHRpb24gRU9GRXJyb3IgU3RhbmRhcmRFcnJvciBWYWx1ZUVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBUYWJFcnJvciBLZXlFcnJvciBaZXJvRGl2aXNpb25FcnJvciBTeXN0ZW1FcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZURlY29kZUVycm9yIEluZGVudGF0aW9uRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEFzc2VydGlvbkVycm9yIFR5cGVFcnJvciBJbmRleEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBSdW50aW1lV2FybmluZyBLZXlib2FyZEludGVycnVwdCBVc2VyV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgU3ludGF4V2FybmluZyBVbmJvdW5kTG9jYWxFcnJvciBBcml0aG1ldGljRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFdhcm5pbmcgTm90SW1wbGVtZW50ZWRFcnJvciBBdHRyaWJ1dGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgT3ZlcmZsb3dFcnJvciBCYXNlRXhjZXB0aW9uCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBBcml0aG1ldGljRXJyb3IgQXNzZXJ0aW9uRXJyb3IgQXR0cmlidXRlRXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEJhc2VFeGNlcHRpb24gRGVwcmVjYXRpb25XYXJuaW5nIEVPRkVycm9yCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBFbnZpcm9ubWVudEVycm9yIEV4Y2VwdGlvbiBGbG9hdGluZ1BvaW50RXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEZ1dHVyZVdhcm5pbmcgR2VuZXJhdG9yRXhpdCBJT0Vycm9yIEltcG9ydEVycm9yCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBJbXBvcnRXYXJuaW5nIEluZGVudGF0aW9uRXJyb3IgSW5kZXhFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgS2V5RXJyb3IgS2V5Ym9hcmRJbnRlcnJ1cHQgTG9va3VwRXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE1lbW9yeUVycm9yIE5hbWVFcnJvciBOb3RJbXBsZW1lbnRlZEVycm9yCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBPU0Vycm9yIE92ZXJmbG93RXJyb3IgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZworICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgUmVmZXJlbmNlRXJyb3IgUnVudGltZUVycm9yIFJ1bnRpbWVXYXJuaW5nCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBTdGFuZGFyZEVycm9yIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN5bnRheFdhcm5pbmcgU3lzdGVtRXJyb3IgU3lzdGVtRXhpdCBUYWJFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVHlwZUVycm9yIFVuYm91bmRMb2NhbEVycm9yIFVuaWNvZGVEZWNvZGVFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZUVuY29kZUVycm9yIFVuaWNvZGVFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yIFVuaWNvZGVXYXJuaW5nCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBVc2VyV2FybmluZyBWYWx1ZUVycm9yIFdhcm5pbmcKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFplcm9EaXZpc2lvbkVycm9yCiAKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL01pc2MvVmltL3ZpbV9zeW50YXgucHkgYi9NaXNjL1ZpbS92aW1fc3ludGF4LnB5CmluZGV4IDNmMmEzZDguLjU1ZGQyNzcgMTAwNjQ0Ci0tLSBhL01pc2MvVmltL3ZpbV9zeW50YXgucHkKKysrIGIvTWlzYy9WaW0vdmltX3N5bnRheC5weQpAQCAtNSw5ICs1LDkgQEAKIGltcG9ydCBfX2J1aWx0aW5fXwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWNvbW1lbnRfaGVhZGVyID0gIiIiIiBBdXRvLWdlbmVyYXRlZCBWaW0gc3ludGF4IGZpbGUgZm9yIFB5dGhvbgorY29tbWVudF9oZWFkZXIgPSAnJyciIEF1dG8tZ2VuZXJhdGVkIFZpbSBzeW50YXggZmlsZSBmb3IgUHl0aG9uLgogIgotIiBUbyB1c2U6IGNvcHkgb3Igc3ltbGluayB0byB+Ly52aW0vc3ludGF4L3B5dGhvbi52aW0iIiIKKyIgVG8gdXNlOiBjb3B5IG9yIHN5bWxpbmsgdG8gfi8udmltL3N5bnRheC9weXRob24udmltJycnCiAKIHN0YXRlbWVudF9oZWFkZXIgPSAiIiIKIGlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCkBAIC0zMCwxNCArMzAsMTQgQEAKIGltcG9ydF9zdG10cyA9ICgnaW1wb3J0JywgJ2Zyb20nKQogb2JqZWN0X2RlZnMgPSAoJ2RlZicsICdjbGFzcycpCiAKLWV4Y2VwdGlvbl9uYW1lcyA9IGZyb3plbnNldChleGMgZm9yIGV4YyBpbiBkaXIoZXhjZXB0aW9ucykKK2V4Y2VwdGlvbl9uYW1lcyA9IHNvcnRlZChleGMgZm9yIGV4YyBpbiBkaXIoZXhjZXB0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV4Yy5zdGFydHN3aXRoKCdfXycpKQogCiAjIE5lZWQgdG8gaW5jbHVkZSBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoICdfXycgKGUuZy4sIF9faW1wb3J0X18pLCBidXQKICMgbm90aGluZyB0aGF0IGNvbWVzIHdpdGggbW9kdWxlcyAoZS5nLiwgX19uYW1lX18pLCBzbyBqdXN0IGV4Y2x1ZGUgYW55dGhpbmcgaW4KICMgdGhlICdleGNlcHRpb25zJyBtb2R1bGUgc2luY2Ugd2Ugd2FudCB0byBpZ25vcmUgZXhjZXB0aW9ucyAqYW5kKiB3aGF0IGFueQogIyBtb2R1bGUgd291bGQgaGF2ZQotYnVpbHRpbl9uYW1lcyA9IGZyb3plbnNldChidWlsdGluIGZvciBidWlsdGluIGluIGRpcihfX2J1aWx0aW5fXykKK2J1aWx0aW5fbmFtZXMgPSBzb3J0ZWQoYnVpbHRpbiBmb3IgYnVpbHRpbiBpbiBkaXIoX19idWlsdGluX18pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVpbHRpbiBub3QgaW4gZGlyKGV4Y2VwdGlvbnMpKQogCiBlc2NhcGVzID0gKHInK1xcW2FiZm5ydHZcJyJcXF0rJywgciciXFxcb1x7MSwzfSInLCByJyJcXHhceFx7Mn0iJywKZGlmZiAtLWdpdCBhL01pc2MvVmltL3ZpbXJjIGIvTWlzYy9WaW0vdmltcmMKaW5kZXggZmY3YzRjNi4uMTFlYzYzOCAxMDA2NDQKLS0tIGEvTWlzYy9WaW0vdmltcmMKKysrIGIvTWlzYy9WaW0vdmltcmMKQEAgLTIxLDcgKzIxLDggQEAKICIgUHl0aG9uOiA0IHNwYWNlcwogIiBDOiA0IHNwYWNlcwogYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKnB5dyBzZXQgc2hpZnR3aWR0aD00Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5jLCouaCBzZXQgc2hpZnR3aWR0aD00CithdSBCdWZSZWFkICouYywqLmggc2V0IHNoaWZ0d2lkdGg9OAorYXUgQnVmTmV3RmlsZSAqLmMsKi5oIHNldCBzaGlmdHdpZHRoPTQKIAogIiBOdW1iZXIgb2Ygc3BhY2VzIHRoYXQgYSBwcmUtZXhpc3RpbmcgdGFiIGlzIGVxdWFsIHRvLgogIiBGb3IgdGhlIGFtb3VudCBvZiBzcGFjZSB1c2VkIGZvciBhIG5ldyB0YWIgdXNlIHNoaWZ0d2lkdGguCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19ic2RkYi5jIGIvTW9kdWxlcy9fYnNkZGIuYwppbmRleCBhZDQ1OTM2Li43OWYwNmRjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19ic2RkYi5jCisrKyBiL01vZHVsZXMvX2JzZGRiLmMKQEAgLTk4LDcgKzk4LDcgQEAKICNlcnJvciAiZWVrISBEQlZFUiBjYW4ndCBoYW5kbGUgbWlub3IgdmVyc2lvbnMgPiA5IgogI2VuZGlmCiAKLSNkZWZpbmUgUFlfQlNEREJfVkVSU0lPTiAiNC40LjUiCisjZGVmaW5lIFBZX0JTRERCX1ZFUlNJT04gIjQuNC42Igogc3RhdGljIGNoYXIgKnJjc19pZCA9ICIkSWQkIjsKIAogCkBAIC0xNzc5LDkgKzE3NzksNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOwogCi0gICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwogICAgIHR5cGUgPSBfREJfZ2V0X3R5cGUoc2VsZik7Ci0gICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKICAgICBpZiAodHlwZSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKHR5cGUpOwpAQCAtMjQzMCw3ICsyNDI4LDcgQEAKICNpZiAoREJWRVIgPj0gNDMpCiAgICAgUHlPYmplY3QqIHR4bm9iaiA9IE5VTEw7CiAgICAgREJfVFhOICp0eG4gPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJ0eG4iLCAiZmxhZ3MiLCBOVUxMIH07CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgInR4biIsIE5VTEwgfTsKICNlbHNlCiAgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwppbmRleCA3OTQ4NTE2Li5kYzdmZWViIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKQEAgLTI1ODksMTYgKzI1ODksMjIgQEAKIAlQUFJPQyBhZGRyZXNzOwogCWNoYXIgKm1hbmdsZWRfbmFtZTsKIAlpbnQgaTsKLQlTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlUeXBlX3N0Z2RpY3QoKFB5T2JqZWN0ICopdHlwZSk7CisJU3RnRGljdE9iamVjdCAqZGljdDsKIAogCWFkZHJlc3MgPSAoUFBST0MpR2V0UHJvY0FkZHJlc3MoaGFuZGxlLCBuYW1lKTsKKyNpZmRlZiBfV0lONjQKKwkvKiB3aW42NCBoYXMgbm8gc3RkY2FsbCBjYWxsaW5nIGNvbnYsIHNvIGl0IHNob3VsZAorCSAgIGFsc28gbm90IGhhdmUgdGhlIG5hbWUgbWFuZ2xpbmcgb2YgaXQuCisJKi8KKwlyZXR1cm4gYWRkcmVzczsKKyNlbHNlCiAJaWYgKGFkZHJlc3MpCiAJCXJldHVybiBhZGRyZXNzOwotCiAJaWYgKCgoc2l6ZV90KW5hbWUgJiB+MHhGRkZGKSA9PSAwKSB7CiAJCXJldHVybiBOVUxMOwogCX0KIAorCWRpY3QgPSBQeVR5cGVfc3RnZGljdCgoUHlPYmplY3QgKil0eXBlKTsKIAkvKiBJdCBzaG91bGQgbm90IGhhcHBlbiB0aGF0IGRpY3QgaXMgTlVMTCwgYnV0IGJldHRlciBiZSBzYWZlICovCiAJaWYgKGRpY3Q9PU5VTEwgfHwgZGljdC0+ZmxhZ3MgJiBGVU5DRkxBR19DREVDTCkKIAkJcmV0dXJuIGFkZHJlc3M7CkBAIC0yNjE3LDYgKzI2MjMsNyBAQAogCQkJcmV0dXJuIGFkZHJlc3M7CiAJfQogCXJldHVybiBOVUxMOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtNDU4OCwxMSArNDU5NSwxMSBAQAogCQkJaWYgKG9iai0+Yl9vYmplY3RzID09IE5VTEwpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJUHlfWElOQ1JFRihvYmotPmJfb2JqZWN0cyk7CiAJCXJlc3VsdC0+Yl9vYmplY3RzID0gb2JqLT5iX29iamVjdHM7Ci0JCWlmIChyZXN1bHQtPmJfb2JqZWN0cykgeworCQlpZiAocmVzdWx0LT5iX29iamVjdHMgJiYgUHlEaWN0X0NoZWNrKHJlc3VsdC0+Yl9vYmplY3RzKSkgewogCQkJUHlPYmplY3QgKmluZGV4OwogCQkJaW50IHJjOwotCQkJUHlfSU5DUkVGKG9iai0+Yl9vYmplY3RzKTsKIAkJCWluZGV4ID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkICopc3JjKTsKIAkJCWlmIChpbmRleCA9PSBOVUxMKQogCQkJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXNfdGVzdC5jIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXNfdGVzdC5jCmluZGV4IDczMzFkMDEuLmQxM2ZlYzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzX3Rlc3QuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlc190ZXN0LmMKQEAgLTI1LDYgKzI1LDE2IEBACiAKIC8qIHNvbWUgZnVuY3Rpb25zIGhhbmR5IGZvciB0ZXN0aW5nICovCiAKK0VYUE9SVChpbnQpbXlwcmludGYoY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJlc3VsdDsKKwl2YV9saXN0IGFyZ3B0cjsKKwl2YV9zdGFydChhcmdwdHIsIGZtdCk7CisJcmVzdWx0ID0gdnByaW50ZihmbXQsIGFyZ3B0cik7CisJdmFfZW5kKGFyZ3B0cik7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogRVhQT1JUKGNoYXIgKilteV9zdHJ0b2soY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmRlbGltKQogewogCXJldHVybiBzdHJ0b2sodG9rZW4sIGRlbGltKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwppbmRleCBkNWFiNDNiLi44OWI0NGFhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCkBAIC0yOTQsMTQgKzI5NCwxNyBAQAogCQlwLT5yZXN0eXBlID0gJmZmaV90eXBlX3ZvaWQ7CiAJfSBlbHNlIHsKIAkJU3RnRGljdE9iamVjdCAqZGljdCA9IFB5VHlwZV9zdGdkaWN0KHJlc3R5cGUpOwotCQlpZiAoZGljdCA9PSBOVUxMKQotCQkJZ290byBlcnJvcjsKKwkJaWYgKGRpY3QgPT0gTlVMTCB8fCBkaWN0LT5zZXRmdW5jID09IE5VTEwpIHsKKwkJICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorCQkJCSAgImludmFsaWQgcmVzdWx0IHR5cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIik7CisJCSAgZ290byBlcnJvcjsKKwkJfQogCQlwLT5zZXRmdW5jID0gZGljdC0+c2V0ZnVuYzsKIAkJcC0+cmVzdHlwZSA9ICZkaWN0LT5mZmlfdHlwZV9wb2ludGVyOwogCX0KIAogCWNjID0gRkZJX0RFRkFVTFRfQUJJOwotI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCisjaWYgZGVmaW5lZChNU19XSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoTVNfV0lONjQpCiAJaWYgKGlzX2NkZWNsID09IDApCiAJCWNjID0gRkZJX1NURENBTEw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKaW5kZXggZTA3NjVlOS4uMThlMTk5MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKQEAgLTYzOCw3ICs2MzgsNyBAQAogCX0KIAkKIAljYyA9IEZGSV9ERUZBVUxUX0FCSTsKLSNpZiBkZWZpbmVkKE1TX1dJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQorI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKE1TX1dJTjY0KSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQogCWlmICgoZmxhZ3MgJiBGVU5DRkxBR19DREVDTCkgPT0gMCkKIAkJY2MgPSBGRklfU1REQ0FMTDsKICNlbmRpZgpAQCAtNjgzLDYgKzY4MywxNCBAQAogCQlyZXR1cm4gLTE7CiAJfQogI2VuZGlmCisjaWZkZWYgTVNfV0lONjQKKwlpZiAoZGVsdGEgIT0gMCkgeworCQlQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorCQkJICAgICAiZmZpX2NhbGwgZmFpbGVkIHdpdGggY29kZSAlZCIsCisJCQkgICAgIGRlbHRhKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbHNlCiAJaWYgKGRlbHRhIDwgMCkgewogCQlpZiAoZmxhZ3MgJiBGVU5DRkxBR19DREVDTCkKIAkJCVB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLApAQCAtNzA0LDYgKzcxMiw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAjZW5kaWYKKyNlbmRpZgogCWlmICgoZmxhZ3MgJiBGVU5DRkxBR19QWVRIT05BUEkpICYmIFB5RXJyX09jY3VycmVkKCkpCiAJCXJldHVybiAtMTsKIAlyZXR1cm4gMDsKQEAgLTk3OSw3ICs5ODgsMTEgQEAKIAl9CiAJZm9yIChpID0gMDsgaSA8IGFyZ2NvdW50OyArK2kpIHsKIAkJYXR5cGVzW2ldID0gYXJnc1tpXS5mZmlfdHlwZTsKLQkJaWYgKGF0eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisJCWlmIChhdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUIAorI2lmZGVmIF9XSU42NAorCQkgICAgJiYgYXR5cGVzW2ldLT5zaXplIDw9IHNpemVvZih2b2lkICopCisjZW5kaWYKKwkJICAgICkKIAkJCWF2YWx1ZXNbaV0gPSAodm9pZCAqKWFyZ3NbaV0udmFsdWUucDsKIAkJZWxzZQogCQkJYXZhbHVlc1tpXSA9ICh2b2lkICopJmFyZ3NbaV0udmFsdWU7CkBAIC0xMDk5LDcgKzExMTIsMTEgQEAKIAloTW9kID0gTG9hZExpYnJhcnkobmFtZSk7CiAJaWYgKCFoTW9kKQogCQlyZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworI2lmZGVmIF9XSU42NAorCXJldHVybiBQeUxvbmdfRnJvbVZvaWRQdHIoaE1vZCk7CisjZWxzZQogCXJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgaE1vZCk7CisjZW5kaWYKIH0KIAogc3RhdGljIGNoYXIgZnJlZV9saWJyYXJ5X2RvY1tdID0KQEAgLTEyMzAsMTEgKzEyNDcsMTEgQEAKIAogc3RhdGljIFB5T2JqZWN0ICpweV9kbF9jbG9zZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0Jdm9pZCAqIGhhbmRsZTsKKwlpbnQgaGFuZGxlOwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmRsY2xvc2UiLCAmaGFuZGxlKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKGRsY2xvc2UoaGFuZGxlKSkgeworCWlmIChkbGNsb3NlKCh2b2lkKiloYW5kbGUpKSB7CiAJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogCQkJCSAgICAgICBjdHlwZXNfZGxlcnJvcigpKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMjQ2LDEyICsxMjYzLDEyIEBACiBzdGF0aWMgUHlPYmplY3QgKnB5X2RsX3N5bShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAJY2hhciAqbmFtZTsKLQl2b2lkICpoYW5kbGU7CisJaW50IGhhbmRsZTsKIAl2b2lkICpwdHI7CiAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlzOmRsc3ltIiwgJmhhbmRsZSwgJm5hbWUpKQogCQlyZXR1cm4gTlVMTDsKLQlwdHIgPSBjdHlwZXNfZGxzeW0oaGFuZGxlLCBuYW1lKTsKKwlwdHIgPSBjdHlwZXNfZGxzeW0oKHZvaWQqKWhhbmRsZSwgbmFtZSk7CiAJaWYgKCFwdHIpIHsKIAkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAJCQkJICAgICAgIGN0eXBlc19kbGVycm9yKCkpOwpAQCAtMTI2OSw3ICsxMjg2LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBjYWxsX2Z1bmN0aW9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLQlQUFJPQyBmdW5jOworCWludCBmdW5jOwogCVB5T2JqZWN0ICphcmd1bWVudHM7CiAJUHlPYmplY3QgKnJlc3VsdDsKIApAQCAtMTI3OSw3ICsxMjk2LDcgQEAKIAkJCSAgICAgICZQeVR1cGxlX1R5cGUsICZhcmd1bWVudHMpKQogCQlyZXR1cm4gTlVMTDsKIAotCXJlc3VsdCA9ICBfQ2FsbFByb2MoZnVuYywKKwlyZXN1bHQgPSAgX0NhbGxQcm9jKChQUFJPQylmdW5jLAogCQkJICAgIGFyZ3VtZW50cywKICNpZmRlZiBNU19XSU4zMgogCQkJICAgIE5VTEwsCkBAIC0xMzAwLDcgKzEzMTcsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGNhbGxfY2RlY2xmdW5jdGlvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0JUFBST0MgZnVuYzsKKwlpbnQgZnVuYzsKIAlQeU9iamVjdCAqYXJndW1lbnRzOwogCVB5T2JqZWN0ICpyZXN1bHQ7CiAKQEAgLTEzMTAsNyArMTMyNyw3IEBACiAJCQkgICAgICAmUHlUdXBsZV9UeXBlLCAmYXJndW1lbnRzKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXN1bHQgPSAgX0NhbGxQcm9jKGZ1bmMsCisJcmVzdWx0ID0gIF9DYWxsUHJvYygoUFBST0MpZnVuYywKIAkJCSAgICBhcmd1bWVudHMsCiAjaWZkZWYgTVNfV0lOMzIKIAkJCSAgICBOVUxMLApAQCAtMTQ5Myw3ICsxNTEwLDcgQEAKICNlbHNlCiAJCQkgICAgICAiT246cmVzaXplIiwKICNlbmRpZgotCQkJICAgICAgKFB5T2JqZWN0ICopJm9iaiwgJnNpemUpKQorCQkJICAgICAgJm9iaiwgJnNpemUpKQogCQlyZXR1cm4gTlVMTDsKIAogCWRpY3QgPSBQeU9iamVjdF9zdGdkaWN0KChQeU9iamVjdCAqKW9iaik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKaW5kZXggYzE2YTM4Ny4uYWQ4MzE5NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYwpAQCAtMTMxNSw3ICsxMzE1LDExIEBACiAJCSooY2hhciAqKilwdHIgPSBQeVN0cmluZ19BU19TVFJJTkcoc3RyKTsKIAkJcmV0dXJuIHN0cjsKIAl9IGVsc2UgaWYgKFB5SW50X0NoZWNrKHZhbHVlKSB8fCBQeUxvbmdfQ2hlY2sodmFsdWUpKSB7CisjaWYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfTE9OR19MT05HCisJCSooY2hhciAqKilwdHIgPSAoY2hhciAqKVB5SW50X0FzVW5zaWduZWRMb25nTG9uZ01hc2sodmFsdWUpOworI2Vsc2UKIAkJKihjaGFyICoqKXB0ciA9IChjaGFyICopUHlJbnRfQXNVbnNpZ25lZExvbmdNYXNrKHZhbHVlKTsKKyNlbmRpZgogCQlfUkVUKHZhbHVlKTsKIAl9CiAJUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTEzNjAsNyArMTM2NCwxMSBAQAogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIE5VTEw7CiAJfSBlbHNlIGlmIChQeUludF9DaGVjayh2YWx1ZSkgfHwgUHlMb25nX0NoZWNrKHZhbHVlKSkgeworI2lmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkdfTE9ORworCQkqKHdjaGFyX3QgKiopcHRyID0gKHdjaGFyX3QgKilQeUludF9Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKHZhbHVlKTsKKyNlbHNlCiAJCSood2NoYXJfdCAqKilwdHIgPSAod2NoYXJfdCAqKVB5SW50X0FzVW5zaWduZWRMb25nTWFzayh2YWx1ZSk7CisjZW5kaWYKIAkJUHlfSU5DUkVGKFB5X05vbmUpOwogCQlyZXR1cm4gUHlfTm9uZTsKIAl9IGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCmluZGV4IDE1OTViMDAuLjU1YWY3MGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCkBAIC0xLDQgKzEsNCBAQAotI2lmZGVmIF9fcHBjX18KKyNpZiAhKGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX3BwY19fKSkKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmZmkuYyAtIENvcHlyaWdodCAoYykgMTk5OCBHZW9mZnJleSBLZWF0aW5nCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvc3lzdi5TCmluZGV4IDQ2NzU5ZjQuLjk1NDJmYmEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3N5c3YuUwpAQCAtMzc2LDMgKzM3Niw3IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIGlmbmRlZiBfX3g4Nl82NF9fICovCisKKyNpZmRlZiBfX0VMRl9fCisuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYwppbmRleCA5YWY2YjcxLi4zZjIzYTA1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jCkBAIC0zNCw2ICszNCw4IEBACiAvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCiAgICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cyAqLwogCitleHRlcm4gdm9pZCBQeV9GYXRhbEVycm9yKGNoYXIgKm1zZyk7CisKIC8qQC1leHBvcnRoZWFkZXJAKi8KIHZvaWQgZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKQogLypAPWV4cG9ydGhlYWRlckAqLwpAQCAtNDQsMTEgKzQ2LDEwIEBACiAgIHJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmc7CiAKICAgYXJncCA9IHN0YWNrOwotCiAgIGlmIChlY2lmLT5jaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKICAgICB7CiAgICAgICAqKHZvaWQgKiopIGFyZ3AgPSBlY2lmLT5ydmFsdWU7Ci0gICAgICBhcmdwICs9IDQ7CisgICAgICBhcmdwICs9IHNpemVvZih2b2lkICopOwogICAgIH0KIAogICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CkBAIC02MCw4ICs2MSw4IEBACiAgICAgICBzaXplX3QgejsKIAogICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoKHNpemVvZihpbnQpIC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApCi0JYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIHNpemVvZihpbnQpKTsKKyAgICAgIGlmICgoc2l6ZW9mKHZvaWQgKikgLSAxKSAmIChzaXplX3QpIGFyZ3ApCisJYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIHNpemVvZih2b2lkICopKTsKIAogICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOwogICAgICAgaWYgKHogPCBzaXplb2YoaW50KSkKQEAgLTEwOCw3ICsxMDksMTEgQEAKICAgICAgIHBfYXJndisrOwogICAgICAgYXJncCArPSB6OwogICAgIH0KLSAgCisKKyAgaWYgKGFyZ3AgLSBzdGFjayA+IGVjaWYtPmNpZi0+Ynl0ZXMpIAorICAgIHsKKyAgICAgIFB5X0ZhdGFsRXJyb3IoIkZGSSBCVUc6IG5vdCBlbm91Z2ggc3RhY2sgc3BhY2UgZm9yIGFyZ3VtZW50cyIpOworICAgIH0KICAgcmV0dXJuOwogfQogCkBAIC0xMjgsNiArMTMzLDkgQEAKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisjaWZkZWYgX1dJTjY0CisgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorI2VuZGlmCiAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU0lOVDY0OwogICAgICAgYnJlYWs7CiAKQEAgLTEzOSw2ICsxNDcsNyBAQAogICByZXR1cm4gRkZJX09LOwogfQogCisjaWZkZWYgX1dJTjMyCiAvKkAtZGVjbHVuZGVmQCovCiAvKkAtZXhwb3J0aGVhZGVyQCovCiBleHRlcm4gaW50CkBAIC0xNjAsNiArMTY5LDE2IEBACiAJCSB2b2lkICgqZm4pKCkpOwogLypAPWRlY2x1bmRlZkAqLwogLypAPWV4cG9ydGhlYWRlckAqLworI2VuZGlmCisKKyNpZmRlZiBfV0lONjQKK2V4dGVybiBpbnQKK2ZmaV9jYWxsX0FNRDY0KHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLAorCQkgLypAb3V0QCovIGV4dGVuZGVkX2NpZiAqLAorCQkgdW5zaWduZWQsIHVuc2lnbmVkLAorCQkgLypAb3V0QCovIHVuc2lnbmVkICosCisJCSB2b2lkICgqZm4pKCkpOworI2VuZGlmCiAKIGludAogZmZpX2NhbGwoLypAZGVwZW5kZW50QCovIGZmaV9jaWYgKmNpZiwgCkBAIC0xODgsNiArMjA3LDcgQEAKICAgCiAgIHN3aXRjaCAoY2lmLT5hYmkpIAogICAgIHsKKyNpZiAhZGVmaW5lZChfV0lONjQpCiAgICAgY2FzZSBGRklfU1lTVjoKICAgICAgIC8qQC11c2VkZWZAKi8KICAgICAgIHJldHVybiBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCAKQEAgLTIwMSw2ICsyMjEsMTQgQEAKIAkJCSAgICAgIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICAvKkA9dXNlZGVmQCovCiAgICAgICBicmVhazsKKyNlbHNlCisgICAgY2FzZSBGRklfU1lTVjoKKyAgICAgIC8qQC11c2VkZWZAKi8KKyAgICAgIHJldHVybiBmZmlfY2FsbF9BTUQ2NChmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgCisJCQkgICBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgLypAPXVzZWRlZkAqLworICAgICAgYnJlYWs7CisjZW5kaWYKIAogICAgIGRlZmF1bHQ6CiAgICAgICBGRklfQVNTRVJUKDApOwpAQCAtMjEzLDEwICsyNDEsMTQgQEAKIC8qKiBwcml2YXRlIG1lbWJlcnMgKiovCiAKIHN0YXRpYyB2b2lkIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTViAoY2hhciAqc3RhY2ssIHZvaWQgKipyZXQsCi0JCQkJCSB2b2lkKiogYXJncywgZmZpX2NpZiogY2lmKTsKKwkJCQkJICB2b2lkKiogYXJncywgZmZpX2NpZiogY2lmKTsKIC8qIFRoaXMgZnVuY3Rpb24gaXMganVtcGVkIHRvIGJ5IHRoZSB0cmFtcG9saW5lICovCiAKKyNpZmRlZiBfV0lONjQKK3ZvaWQgKgorI2Vsc2UKIHN0YXRpYyB2b2lkIF9fZmFzdGNhbGwKKyNlbmRpZgogZmZpX2Nsb3N1cmVfU1lTViAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIGludCAqYXJncCkKIHsKICAgLy8gdGhpcyBpcyBvdXIgcmV0dXJuIHZhbHVlIHN0b3JhZ2UKQEAgLTI0NCw2ICsyNzYsNyBAQAogCiAgIHJ0eXBlID0gY2lmLT5mbGFnczsKIAorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfV0lONjQpCiAjaWZkZWYgX01TQ19WRVIKICAgLyogbm93LCBkbyBhIGdlbmVyaWMgcmV0dXJuIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBydHlwZSAqLwogICBpZiAocnR5cGUgPT0gRkZJX1RZUEVfSU5UKQpAQCAtMzAzLDYgKzMzNiwxNSBAQAogCSAgIDogImVheCIsICJlZHgiKTsKICAgICB9CiAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjY0CisgIC8qIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgaW4gcmF4LiAgVGhpcyBkb2VzIHRoZSByaWdodCB0aGluZyBmb3IKKyAgICAgcmVzdWx0IHR5cGVzIGV4Y2VwdCBmb3IgZmxvYXRzOyB3ZSBoYXZlIHRvICdtb3YgeG1tMCwgcmF4JyBpbiB0aGUKKyAgICAgY2FsbGVyIHRvIGNvcnJlY3QgdGhpcy4KKyAgKi8KKyAgcmV0dXJuICoodm9pZCAqKilyZXNwOworI2VuZGlmCiB9CiAKIC8qQC1leHBvcnRoZWFkZXJAKi8KQEAgLTMzMCw4ICszNzIsOCBAQAogICAgICAgc2l6ZV90IHo7CiAKICAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgaWYgKChzaXplb2YoaW50KSAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKSB7Ci0JYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIHNpemVvZihpbnQpKTsKKyAgICAgIGlmICgoc2l6ZW9mKGNoYXIgKikgLSAxKSAmIChzaXplX3QpIGFyZ3ApIHsKKwlhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgc2l6ZW9mKGNoYXIqKSk7CiAgICAgICB9CiAKICAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKQEAgLTM0NywyNCArMzg5LDggQEAKICAgcmV0dXJuOwogfQogCi0vKiBIb3cgdG8gbWFrZSBhIHRyYW1wb2xpbmUuICBEZXJpdmVkIGZyb20gZ2NjL2NvbmZpZy9pMzg2L2kzODYuYy4gKi8KLQotI2RlZmluZSBGRklfSU5JVF9UUkFNUE9MSU5FKFRSQU1QLEZVTixDVFgsQllURVMpIFwKLXsgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoVFJBTVApOyBcCi0gICB1bnNpZ25lZCBpbnQgIF9fZnVuID0gKHVuc2lnbmVkIGludCkoRlVOKTsgXAotICAgdW5zaWduZWQgaW50ICBfX2N0eCA9ICh1bnNpZ25lZCBpbnQpKENUWCk7IFwKLSAgIHVuc2lnbmVkIGludCAgX19kaXMgPSBfX2Z1biAtICgodW5zaWduZWQgaW50KSBfX3RyYW1wICsgOCArIDQpOyBcCi0gICAqKHVuc2lnbmVkIGNoYXIqKSAgJl9fdHJhbXBbMF0gPSAweGI5OyBcCi0gICAqKHVuc2lnbmVkIGludCopICAgJl9fdHJhbXBbMV0gPSBfX2N0eDsgLyogbW92IGVjeCwgX19jdHggKi8gXAotICAgKih1bnNpZ25lZCBjaGFyKikgICZfX3RyYW1wWzVdID0gMHg4YjsgXAotICAgKih1bnNpZ25lZCBjaGFyKikgICZfX3RyYW1wWzZdID0gMHhkNDsgLyogbW92IGVkeCwgZXNwICovIFwKLSAgICoodW5zaWduZWQgY2hhciopICAmX190cmFtcFs3XSA9IDB4ZTg7IFwKLSAgICoodW5zaWduZWQgaW50KikgICAmX190cmFtcFs4XSA9IF9fZGlzOyAvKiBjYWxsIF9fZnVuICAqLyBcCi0gICAqKHVuc2lnbmVkIGNoYXIqKSAgJl9fdHJhbXBbMTJdID0gMHhDMjsgLyogcmV0IEJZVEVTICovIFwKLSAgICoodW5zaWduZWQgc2hvcnQqKSAmX190cmFtcFsxM10gPSBCWVRFUzsgXAotIH0KLQogLyogdGhlIGNpZiBtdXN0IGFscmVhZHkgYmUgcHJlcCdlZCAqLworZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfT1VURVIoKTsKIAogZmZpX3N0YXR1cwogZmZpX3ByZXBfY2xvc3VyZSAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsCkBAIC0zNzMsMTkgKzM5OSw3OCBAQAogCQkgIHZvaWQgKnVzZXJfZGF0YSkKIHsKICAgc2hvcnQgYnl0ZXM7CisgIGNoYXIgKnRyYW1wOworI2lmZGVmIF9XSU42NAorICBpbnQgbWFzazsKKyNlbmRpZgogICBGRklfQVNTRVJUIChjaWYtPmFiaSA9PSBGRklfU1lTVik7CiAgIAogICBpZiAoY2lmLT5hYmkgPT0gRkZJX1NZU1YpCiAgICAgYnl0ZXMgPSAwOworI2lmICFkZWZpbmVkKF9XSU42NCkKICAgZWxzZSBpZiAoY2lmLT5hYmkgPT0gRkZJX1NURENBTEwpCiAgICAgYnl0ZXMgPSBjaWYtPmJ5dGVzOworI2VuZGlmCiAgIGVsc2UKICAgICByZXR1cm4gRkZJX0JBRF9BQkk7CiAKLSAgRkZJX0lOSVRfVFJBTVBPTElORSAoJmNsb3N1cmUtPnRyYW1wWzBdLAotCQkgICAgICAgJmZmaV9jbG9zdXJlX1NZU1YsCi0JCSAgICAgICAodm9pZCopY2xvc3VyZSwKLQkJICAgICAgIGJ5dGVzKTsKKyAgdHJhbXAgPSAmY2xvc3VyZS0+dHJhbXBbMF07CisKKyNkZWZpbmUgQllURVModGV4dCkgbWVtY3B5KHRyYW1wLCB0ZXh0LCBzaXplb2YodGV4dCkpLCB0cmFtcCArPSBzaXplb2YodGV4dCktMQorI2RlZmluZSBQT0lOVEVSKHgpICoodm9pZCoqKXRyYW1wID0gKHZvaWQqKSh4KSwgdHJhbXAgKz0gc2l6ZW9mKHZvaWQqKQorI2RlZmluZSBTSE9SVCh4KSAqKHNob3J0Kil0cmFtcCA9IHgsIHRyYW1wICs9IHNpemVvZihzaG9ydCkKKyNkZWZpbmUgSU5UKHgpICooaW50Kil0cmFtcCA9IHgsIHRyYW1wICs9IHNpemVvZihpbnQpCisKKyNpZmRlZiBfV0lONjQKKyAgaWYgKGNpZi0+bmFyZ3MgPj0gMSAmJgorICAgICAgKGNpZi0+YXJnX3R5cGVzWzBdLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUCisgICAgICAgfHwgY2lmLT5hcmdfdHlwZXNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKSkKKyAgICBtYXNrIHw9IDE7CisgIGlmIChjaWYtPm5hcmdzID49IDIgJiYKKyAgICAgIChjaWYtPmFyZ190eXBlc1sxXS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVAorICAgICAgIHx8IGNpZi0+YXJnX3R5cGVzWzFdLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkpCisgICAgbWFzayB8PSAyOworICBpZiAoY2lmLT5uYXJncyA+PSAzICYmCisgICAgICAoY2lmLT5hcmdfdHlwZXNbMl0tPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQKKyAgICAgICB8fCBjaWYtPmFyZ190eXBlc1syXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpKQorICAgIG1hc2sgfD0gNDsKKyAgaWYgKGNpZi0+bmFyZ3MgPj0gNCAmJgorICAgICAgKGNpZi0+YXJnX3R5cGVzWzNdLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUCisgICAgICAgfHwgY2lmLT5hcmdfdHlwZXNbM10tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKSkKKyAgICBtYXNrIHw9IDg7CisKKyAgLyogNDEgQkIgLS0tLSAgICAgICAgIG1vdiAgICAgICAgIHIxMWQsbWFzayAqLworICBCWVRFUygiXHg0MVx4QkIiKTsgSU5UKG1hc2spOworCisgIC8qIDQ4IEI4IC0tLS0tLS0tICAgICBtb3YgICAgICAgICByYXgsIGNsb3N1cmUJCQkqLworICBCWVRFUygiXHg0OFx4QjgiKTsgUE9JTlRFUihjbG9zdXJlKTsKKworICAvKiA0OSBCQSAtLS0tLS0tLSAgICAgbW92ICAgICAgICAgcjEwLCBmZmlfY2xvc3VyZV9PVVRFUiAqLworICBCWVRFUygiXHg0OVx4QkEiKTsgUE9JTlRFUihmZmlfY2xvc3VyZV9PVVRFUik7CisKKyAgLyogNDEgRkYgRTIgICAgICAgICAgIGptcCAgICAgICAgIHIxMCAqLworICBCWVRFUygiXHg0MVx4RkZceEUyIik7CisKKyNlbHNlCisKKyAgLyogbW92IGVjeCwgY2xvc3VyZSAqLworICBCWVRFUygiXHhiOSIpOyBQT0lOVEVSKGNsb3N1cmUpOworCisgIC8qIG1vdiBlZHgsIGVzcCAqLworICBCWVRFUygiXHg4Ylx4ZDQiKTsKKworICAvKiBjYWxsIGZmaV9jbG9zdXJlX1NZU1YgKi8KKyAgQllURVMoIlx4ZTgiKTsgUE9JTlRFUigoY2hhciopJmZmaV9jbG9zdXJlX1NZU1YgLSAodHJhbXAgKyA0KSk7CisKKyAgLyogcmV0IGJ5dGVzICovCisgIEJZVEVTKCJceGMyIik7CisgIFNIT1JUKGJ5dGVzKTsKKyAgCisjZW5kaWYKKworICBpZiAodHJhbXAgLSAmY2xvc3VyZS0+dHJhbXBbMF0gPiBGRklfVFJBTVBPTElORV9TSVpFKQorICAgIFB5X0ZhdGFsRXJyb3IoIkZGSV9UUkFNUE9MSU5FX1NJWkUgdG9vIHNtYWxsIGluICIgX19GSUxFX18pOworCiAgIGNsb3N1cmUtPmNpZiAgPSBjaWY7CiAgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKICAgY2xvc3VyZS0+ZnVuICA9IGZ1bjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuaAppbmRleCAyMDMxNDJkLi5hODhkODc0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5oCkBAIC0xNzQsMTIgKzE3NCwxMCBAQAogCiAvKiAtLS0tIERlZmluaXRpb25zIGZvciB0aGUgcmF3IEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWZuZGVmIEZGSV9TSVpFT0ZfQVJHCi0jIGlmIExPTkdfTUFYID09IDIxNDc0ODM2NDcKLSMgIGRlZmluZSBGRklfU0laRU9GX0FSRyAgICAgICAgNAotIyBlbGlmIExPTkdfTUFYID09IDkyMjMzNzIwMzY4NTQ3NzU4MDcKLSMgIGRlZmluZSBGRklfU0laRU9GX0FSRyAgICAgICAgOAotIyBlbmRpZgorI2lmZGVmIF9XSU42NAorI2RlZmluZSBGRklfU0laRU9GX0FSRyA4CisjZWxzZQorI2RlZmluZSBGRklfU0laRU9GX0FSRyA0CiAjZW5kaWYKIAogdHlwZWRlZiB1bmlvbiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpdGFyZ2V0LmgKaW5kZXggNzhjMGMzNy4uMGRhNzlkNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaXRhcmdldC5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZml0YXJnZXQuaApAQCAtNDQsNyArNDQsOSBAQAogCiAgIC8qIC0tLS0gSW50ZWwgeDg2IFdpbjMyIC0tLS0tLS0tLS0gKi8KICAgRkZJX1NZU1YsCisjaWZuZGVmIF9XSU42NAogICBGRklfU1REQ0FMTCwKKyNlbmRpZgogICAvKiBUT0RPOiBBZGQgZmFzdGNhbGwgc3VwcG9ydCBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzICovCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWLAogCkBAIC02Nyw4ICs2OSw4IEBACiAKICNkZWZpbmUgRkZJX0NMT1NVUkVTIDEKIAotI2lmZGVmIFg4Nl82NAotI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDI0CisjaWZkZWYgX1dJTjY0CisjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMjkKICNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDAKICNlbHNlCiAjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMTUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy93aW42NC5hc20gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvd2luNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTE4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvd2luNjQuYXNtCkBAIC0wLDAgKzEsMTU2IEBACitQVUJMSUMJZmZpX2NhbGxfQU1ENjQKKworRVhUUk4JX19jaGtzdGs6TkVBUgorRVhUUk4JZmZpX2Nsb3N1cmVfU1lTVjpORUFSCisKK19URVhUCVNFR01FTlQKKworOzs7IGZmaV9jbG9zdXJlX09VVEVSIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlc2UgcmVnaXN0ZXJzIHNldDoKKzs7OyAgICByYXggcG9pbnRzIHRvICdjbG9zdXJlJworOzs7ICAgIHIxMSBjb250YWlucyBhIGJpdCBtYXNrIHRoYXQgc3BlY2lmaWVzIHdoaWNoIG9mIHRoZQorOzs7ICAgIGZpcnN0IGZvdXIgcGFyYW1ldGVycyBhcmUgZmxvYXQgb3IgZG91YmxlCis7OzsKKzs7OyBJdCBtdXN0IG1vdmUgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGluIHJlZ2lzdGVycyB0byB0aGVpciBzdGFjayBsb2NhdGlvbiwKKzs7OyBjYWxsIGZmaV9jbG9zdXJlX1NZU1YgZm9yIHRoZSBhY3R1YWwgd29yaywgdGhlbiByZXR1cm4gdGhlIHJlc3VsdC4KKzs7OyAKK2ZmaV9jbG9zdXJlX09VVEVSIFBST0MgRlJBTUUKKwk7OyBzYXZlIGFjdHVhbCBhcmd1bWVudHMgdG8gdGhlaXIgc3RhY2sgc3BhY2UuCisJdGVzdAlyMTEsIDEKKwlqbmUJZmlyc3RfaXNfZmxvYXQJCisJbW92CVFXT1JEIFBUUiBbcnNwKzhdLCByY3gKKwlqbXAJc2Vjb25kCitmaXJzdF9pc19mbG9hdDoKKwltb3ZscGQJUVdPUkQgUFRSIFtyc3ArOF0sIHhtbTAKKworc2Vjb25kOgorCXRlc3QJcjExLCAyCisJam5lCXNlY29uZF9pc19mbG9hdAkKKwltb3YJUVdPUkQgUFRSIFtyc3ArMTZdLCByZHgKKwlqbXAJdGhpcmQKK3NlY29uZF9pc19mbG9hdDoKKwltb3ZscGQJUVdPUkQgUFRSIFtyc3ArMTZdLCB4bW0xCisKK3RoaXJkOgorCXRlc3QJcjExLCA0CisJam5lCXRoaXJkX2lzX2Zsb2F0CQorCW1vdglRV09SRCBQVFIgW3JzcCsyNF0sIHI4CisJam1wCWZvcnRoCit0aGlyZF9pc19mbG9hdDoKKwltb3ZscGQJUVdPUkQgUFRSIFtyc3ArMjRdLCB4bW0yCisKK2ZvcnRoOgorCXRlc3QJcjExLCA4CisJam5lCWZvcnRoX2lzX2Zsb2F0CQorCW1vdglRV09SRCBQVFIgW3JzcCszMl0sIHI5CisJam1wCWRvbmUKK2ZvcnRoX2lzX2Zsb2F0OgorCW1vdmxwZAlRV09SRCBQVFIgW3JzcCszMl0sIHhtbTMKKworZG9uZToKKy5BTExPQ1NUQUNLIDQwCisJc3ViCXJzcCwgNDAKKy5FTkRQUk9MT0cKKwltb3YJcmN4LCByYXgJOyBjb250ZXh0IGlzIGZpcnN0IHBhcmFtZXRlcgorCW1vdglyZHgsIHJzcAk7IHN0YWNrIGlzIHNlY29uZCBwYXJhbWV0ZXIKKwlhZGQJcmR4LCA0MAkJOyBjb3JyZWN0IG91ciBvd24gYXJlYQorCW1vdglyYXgsIGZmaV9jbG9zdXJlX1NZU1YKKwljYWxsCXJheAkJOyBjYWxsIHRoZSByZWFsIGNsb3N1cmUgZnVuY3Rpb24KKwk7OyBIZXJlLCBjb2RlIGlzIG1pc3NpbmcgdGhhdCBoYW5kbGVzIGZsb2F0IHJldHVybiB2YWx1ZXMKKwlhZGQJcnNwLCA0MAorCW1vdmQJeG1tMCwgcmF4CTsgSW4gY2FzZSB0aGUgY2xvc3VyZSByZXR1cm5lZCBhIGZsb2F0LgorCXJldAkwCitmZmlfY2xvc3VyZV9PVVRFUiBFTkRQCisKKworOzs7IGZmaV9jYWxsX0FNRDY0CisKK3N0YWNrJCA9IDAKK3ByZXBmdW5jJCA9IDMyCitlY2lmJCA9IDQwCitieXRlcyQgPSA0OAorZmxhZ3MkID0gNTYKK3J2YWx1ZSQgPSA2NAorZm4kID0gNzIKKworZmZpX2NhbGxfQU1ENjQgUFJPQyBGUkFNRQorCisJbW92CVFXT1JEIFBUUiBbcnNwKzMyXSwgcjkKKwltb3YJUVdPUkQgUFRSIFtyc3ArMjRdLCByOAorCW1vdglRV09SRCBQVFIgW3JzcCsxNl0sIHJkeAorCW1vdglRV09SRCBQVFIgW3JzcCs4XSwgcmN4CisuUFVTSFJFRyByYnAKKwlwdXNoCXJicAorLkFMTE9DU1RBQ0sgNDgKKwlzdWIJcnNwLCA0OAkJCQkJOyAwMDAwMDAzMEgKKy5TRVRGUkFNRSByYnAsIDMyCisJbGVhCXJicCwgUVdPUkQgUFRSIFtyc3ArMzJdCisuRU5EUFJPTE9HCisKKwltb3YJZWF4LCBEV09SRCBQVFIgYnl0ZXMkW3JicF0KKwlhZGQJcmF4LCAxNQorCWFuZAlyYXgsIC0xNgorCWNhbGwJX19jaGtzdGsKKwlzdWIJcnNwLCByYXgKKwlsZWEJcmF4LCBRV09SRCBQVFIgW3JzcCszMl0KKwltb3YJUVdPUkQgUFRSIHN0YWNrJFtyYnBdLCByYXgKKworCW1vdglyZHgsIFFXT1JEIFBUUiBlY2lmJFtyYnBdCisJbW92CXJjeCwgUVdPUkQgUFRSIHN0YWNrJFtyYnBdCisJY2FsbAlRV09SRCBQVFIgcHJlcGZ1bmMkW3JicF0KKworCW1vdglyc3AsIFFXT1JEIFBUUiBzdGFjayRbcmJwXQorCisJbW92bHBkCXhtbTMsIFFXT1JEIFBUUiBbcnNwKzI0XQorCW1vdmQJcjksIHhtbTMKKworCW1vdmxwZAl4bW0yLCBRV09SRCBQVFIgW3JzcCsxNl0KKwltb3ZkCXI4LCB4bW0yCisKKwltb3ZscGQJeG1tMSwgUVdPUkQgUFRSIFtyc3ArOF0KKwltb3ZkCXJkeCwgeG1tMQorCisJbW92bHBkCXhtbTAsIFFXT1JEIFBUUiBbcnNwXQorCW1vdmQJcmN4LCB4bW0wCisKKwljYWxsCVFXT1JEIFBUUiBmbiRbcmJwXQorcmV0X2ludCQ6CisgCWNtcAlEV09SRCBQVFIgZmxhZ3MkW3JicF0sIDEgOyBGRklfVFlQRV9JTlQKKyAJam5lCXJldF9mbG9hdCQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBydmFsdWUkW3JicF0KKwltb3YJRFdPUkQgUFRSIFtyY3hdLCBlYXgKKwlqbXAJU0hPUlQgcmV0X25vdGhpbmckCisKK3JldF9mbG9hdCQ6CisgCWNtcAlEV09SRCBQVFIgZmxhZ3MkW3JicF0sIDIgOyBGRklfVFlQRV9GTE9BVAorIAlqbmUJU0hPUlQgcmV0X2RvdWJsZSQKKworIAltb3YJcmF4LCBRV09SRCBQVFIgcnZhbHVlJFtyYnBdCisgCW1vdmxwZAlRV09SRCBQVFIgW3JheF0sIHhtbTAKKyAJam1wCVNIT1JUIHJldF9ub3RoaW5nJAorCityZXRfZG91YmxlJDoKKyAJY21wCURXT1JEIFBUUiBmbGFncyRbcmJwXSwgMyA7IEZGSV9UWVBFX0RPVUJMRQorIAlqbmUJU0hPUlQgcmV0X2ludDY0JAorCisgCW1vdglyYXgsIFFXT1JEIFBUUiBydmFsdWUkW3JicF0KKyAJbW92bHBkCVFXT1JEIFBUUiBbcmF4XSwgeG1tMAorIAlqbXAJU0hPUlQgcmV0X25vdGhpbmckCisKK3JldF9pbnQ2NCQ6CisgIAljbXAJRFdPUkQgUFRSIGZsYWdzJFtyYnBdLCAxMiA7IEZGSV9UWVBFX1NJTlQ2NAorICAJam5lCXJldF9ub3RoaW5nJAorCisgCW1vdglyY3gsIFFXT1JEIFBUUiBydmFsdWUkW3JicF0KKyAJbW92CVFXT1JEIFBUUiBbcmN4XSwgcmF4CisgCWptcAlTSE9SVCByZXRfbm90aGluZyQKKwkKK3JldF9ub3RoaW5nJDoKKwl4b3IJZWF4LCBlYXgKKworCWxlYQlyc3AsIFFXT1JEIFBUUiBbcmJwKzE2XQorCXBvcAlyYnAKKwlyZXQJMAorZmZpX2NhbGxfQU1ENjQgRU5EUAorX1RFWFQJRU5EUworRU5ECmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jIGIvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYwppbmRleCAwOTQyYjQ4Li5jMzRhZTAxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKQEAgLTE3MywxMSArMTczLDExIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKGZpZWxkbGlzdCk7ICsraSkgewogCQlQeU9iamVjdCAqcGFpciA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShmaWVsZGxpc3QsIGkpOyAvKiBib3Jyb3dlZCAqLwotCQlQeU9iamVjdCAqZm5hbWUsICpmdHlwZTsKKwkJUHlPYmplY3QgKmZuYW1lLCAqZnR5cGUsICpiaXRzOwogCQlDRmllbGRPYmplY3QgKmZkZXNjcjsKIAkJQ0ZpZWxkT2JqZWN0ICpuZXdfZGVzY3I7CiAJCS8qIENvbnZlcnQgdG8gUHlBcmdfVW5wYWNrVHVwbGUuLi4gKi8KLQkJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHBhaXIsICJPTyIsICZmbmFtZSwgJmZ0eXBlKSkgeworCQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUocGFpciwgIk9PfE8iLCAmZm5hbWUsICZmdHlwZSwgJmJpdHMpKSB7CiAJCQlQeV9ERUNSRUYoZmllbGRsaXN0KTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMzM1LDE0ICszMzUsMTQgQEAKIAlzdGdkaWN0ID0gUHlUeXBlX3N0Z2RpY3QodHlwZSk7CiAJaWYgKCFzdGdkaWN0KQogCQlyZXR1cm4gLTE7CisJLyogSWYgdGhpcyBzdHJ1Y3R1cmUvdW5pb24gaXMgYWxyZWFkeSBtYXJrZWQgZmluYWwgd2UgY2Fubm90IGFzc2lnbgorCSAgIF9maWVsZHNfIGFueW1vcmUuICovCisKIAlpZiAoc3RnZGljdC0+ZmxhZ3MgJiBESUNURkxBR19GSU5BTCkgey8qIGlzIGZpbmFsID8gKi8KIAkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLAogCQkJCSJfZmllbGRzXyBpcyBmaW5hbCIpOwogCQlyZXR1cm4gLTE7CiAJfQotCS8qIFhYWCBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBhIHBvaW50IHdoZW4gYWxsIHRoaXMKLQkgICBzdHVmZiBpcyBzdWNlc3NmdWxseSBmaW5pc2hlZC4gKi8KLQlzdGdkaWN0LT5mbGFncyB8PSBESUNURkxBR19GSU5BTDsJLyogc2V0IGZpbmFsICovCiAKIAlpZiAoc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlci5lbGVtZW50cykKIAkJUHlNZW1fRnJlZShzdGdkaWN0LT5mZmlfdHlwZV9wb2ludGVyLmVsZW1lbnRzKTsKQEAgLTQ3Niw1ICs0NzYsMTUgQEAKIAlzdGdkaWN0LT5zaXplID0gc2l6ZTsKIAlzdGdkaWN0LT5hbGlnbiA9IHRvdGFsX2FsaWduOwogCXN0Z2RpY3QtPmxlbmd0aCA9IGxlbjsJLyogQUREIGZmaV9vZnM/ICovCisKKwkvKiBXZSBkaWQgY2hlY2sgdGhhdCB0aGlzIGZsYWcgd2FzIE5PVCBzZXQgYWJvdmUsIGl0IG11c3Qgbm90CisJICAgaGF2ZSBiZWVuIHNldCB1bnRpbCBub3cuICovCisJaWYgKHN0Z2RpY3QtPmZsYWdzICYgRElDVEZMQUdfRklOQUwpIHsKKwkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorCQkJCSJTdHJ1Y3R1cmUgb3IgdW5pb24gY2Fubm90IGNvbnRhaW4gaXRzZWxmIik7CisJCXJldHVybiAtMTsKKwl9CisJc3RnZGljdC0+ZmxhZ3MgfD0gRElDVEZMQUdfRklOQUw7CisKIAlyZXR1cm4gTWFrZUFub25GaWVsZHModHlwZSk7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCmluZGV4IDI5MjFkNTMuLmFlYjFlZjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCkBAIC0yMzM0LDYgKzIzMzQsMTAgQEAKIAl9CiAKIAlyZXN1bHQgPSB0cGFybShmbXQsaTEsaTIsaTMsaTQsaTUsaTYsaTcsaTgsaTkpOworCWlmICghcmVzdWx0KSB7CisJCVB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAidHBhcm0oKSByZXR1cm5lZCBOVUxMIik7CisgIAkJcmV0dXJuIE5VTEw7CisJfQogCiAJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVzdWx0KTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NyZS5jIGIvTW9kdWxlcy9fc3JlLmMKaW5kZXggZDMwYTM1MC4uYTI0ZjI4NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3JlLmMKKysrIGIvTW9kdWxlcy9fc3JlLmMKQEAgLTExNjYsOSArMTE2NiwxMCBAQAogCiAgICAgICAgICAgICAvKiBpbnN0YWxsIG5ldyByZXBlYXQgY29udGV4dCAqLwogICAgICAgICAgICAgY3R4LT51LnJlcCA9IChTUkVfUkVQRUFUKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZigqY3R4LT51LnJlcCkpOwotICAgICAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogYW55dGhpbmcgZWxzZSB3ZSBuZWVkIHRvIGRvIG9uIGVycm9yPyAqLwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQorICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gLTE7CiAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuID0gY3R4LT5wYXR0ZXJuOwogICAgICAgICAgICAgY3R4LT51LnJlcC0+cHJldiA9IHN0YXRlLT5yZXBlYXQ7CkBAIC0xODg0LDYgKzE4ODUsOCBAQAogICAgIH0KIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzdGF0ZV9maW5pKCZzdGF0ZSk7CiAKQEAgLTE5MjIsNiArMTkyNSw5IEBACiAKICAgICBzdGF0ZV9maW5pKCZzdGF0ZSk7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXR1cm4gcGF0dGVybl9uZXdfbWF0Y2goc2VsZiwgJnN0YXRlLCBzdGF0dXMpOwogfQogCkBAIC0yMDcxLDYgKzIwNzcsOSBAQAogI2VuZGlmCiAgICAgICAgIH0KIAorCWlmIChQeUVycl9PY2N1cnJlZCgpKQorCSAgICBnb3RvIGVycm9yOworCiAgICAgICAgIGlmIChzdGF0dXMgPD0gMCkgewogICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE5OCw2ICsyMjA3LDkgQEAKICNlbmRpZgogICAgICAgICB9CiAKKwlpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKwkgICAgZ290byBlcnJvcjsKKwogICAgICAgICBpZiAoc3RhdHVzIDw9IDApIHsKICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzNDcsNiArMjM1OSw5IEBACiAjZW5kaWYKICAgICAgICAgfQogCisJaWYgKFB5RXJyX09jY3VycmVkKCkpCisJICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgaWYgKHN0YXR1cyA8PSAwKSB7CiAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjUwLDYgKzMyNjUsOCBAQAogICAgICAgICBzdGF0dXMgPSBzcmVfdW1hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwogI2VuZGlmCiAgICAgfQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIG1hdGNoID0gcGF0dGVybl9uZXdfbWF0Y2goKFBhdHRlcm5PYmplY3QqKSBzZWxmLT5wYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCBzdGF0dXMpOwpAQCAtMzI4MSw2ICszMjk4LDggQEAKICAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7CiAjZW5kaWYKICAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgbWF0Y2ggPSBwYXR0ZXJuX25ld19tYXRjaCgoUGF0dGVybk9iamVjdCopIHNlbGYtPnBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zc2wuYyBiL01vZHVsZXMvX3NzbC5jCmluZGV4IDNiOTFiMjQuLmYxZTEwOTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NzbC5jCisrKyBiL01vZHVsZXMvX3NzbC5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAogCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8eno6c3NsIiwKIAkJCSAgICAgIFB5U29ja2V0TW9kdWxlLlNvY2tfVHlwZSwKLQkJCSAgICAgIChQeU9iamVjdCopJlNvY2ssCisJCQkgICAgICAmU29jaywKIAkJCSAgICAgICZrZXlfZmlsZSwgJmNlcnRfZmlsZSkpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwppbmRleCBmNWYzYWIyLi5iMTFmMGFlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKQEAgLTYsNiArNiw4IEBACiAgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKICNpZmRlZiBXSVRIX1RIUkVBRAogI2luY2x1ZGUgInB5dGhyZWFkLmgiCkBAIC0zNSwxMyArMzcsMTMgQEAKICAgIHBsYXRmb3JtcyBoYXZlIHRoZXNlIGhhcmRjb2RlZC4gIEJldHRlciBzYWZlIHRoYW4gc29ycnkuCiAqLwogc3RhdGljIFB5T2JqZWN0Kgotc2l6ZW9mX2Vycm9yKGNvbnN0IGNoYXIqIGZhdG5hbWUsIGNvbnN0IGNoYXIqIHR5cGVuYW1lLAorc2l6ZW9mX2Vycm9yKGNvbnN0IGNoYXIqIGZhdG5hbWUsIGNvbnN0IGNoYXIqIHR5cG5hbWUsCiAgICAgICAgIGludCBleHBlY3RlZCwgaW50IGdvdCkKIHsKIAljaGFyIGJ1ZlsxMDI0XTsKIAlQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCiAJCSIlLjIwMHMgI2RlZmluZSA9PSAlZCBidXQgc2l6ZW9mKCUuMjAwcykgPT0gJWQiLAotCQlmYXRuYW1lLCBleHBlY3RlZCwgdHlwZW5hbWUsIGdvdCk7CisJCWZhdG5hbWUsIGV4cGVjdGVkLCB0eXBuYW1lLCBnb3QpOwogCVB5RXJyX1NldFN0cmluZyhUZXN0RXJyb3IsIGJ1Zik7CiAJcmV0dXJuIChQeU9iamVjdCopTlVMTDsKIH0KQEAgLTYxNSw3ICs2MTcsNyBAQAogewogCVB5T2JqZWN0ICpyYzsKIAlQeUdJTFN0YXRlX1NUQVRFIHMgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwotCXJjID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNhbGxhYmxlLCAiIik7CisJcmMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopY2FsbGFibGUsICIiKTsKIAlQeV9YREVDUkVGKHJjKTsKIAlQeUdJTFN0YXRlX1JlbGVhc2Uocyk7CiB9CkBAIC02NjUsNiArNjY3LDkgQEAKIAlQeVRocmVhZF9hY3F1aXJlX2xvY2sodGhyZWFkX2RvbmUsIDEpOyAgLyogd2FpdCBmb3IgdGhyZWFkIHRvIGZpbmlzaCAqLwogCVB5X0VORF9BTExPV19USFJFQURTCiAKKwkvKiBSZWxlYXNlIGxvY2sgd2UgYWNxdWlyZWQgYWJvdmUuICBUaGlzIGlzIHJlcXVpcmVkIG9uIEhQLVVYLiAqLworCVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0aHJlYWRfZG9uZSk7CisKIAlQeVRocmVhZF9mcmVlX2xvY2sodGhyZWFkX2RvbmUpOwogCVB5X1JFVFVSTl9OT05FOwogfQpAQCAtNzU2LDYgKzc2MSwxMDUgQEAKIAogI2RlZmluZSBBZGRTeW0oZCwgbiwgZiwgdikge1B5T2JqZWN0ICpvID0gZih2KTsgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbiwgbyk7IFB5X0RFQ1JFRihvKTt9CiAKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyIGJ5dGVfbWVtYmVyOworCXVuc2lnbmVkIGNoYXIgdWJ5dGVfbWVtYmVyOworCXNob3J0IHNob3J0X21lbWJlcjsKKwl1bnNpZ25lZCBzaG9ydCB1c2hvcnRfbWVtYmVyOworCWludCBpbnRfbWVtYmVyOworCXVuc2lnbmVkIGludCB1aW50X21lbWJlcjsKKwlsb25nIGxvbmdfbWVtYmVyOworCXVuc2lnbmVkIGxvbmcgdWxvbmdfbWVtYmVyOworCWZsb2F0IGZsb2F0X21lbWJlcjsKKwlkb3VibGUgZG91YmxlX21lbWJlcjsKK30gYWxsX3N0cnVjdG1lbWJlcnM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisJYWxsX3N0cnVjdG1lbWJlcnMgc3RydWN0bWVtYmVyczsKK30gdGVzdF9zdHJ1Y3RtZW1iZXJzOworCitzdGF0aWMgc3RydWN0IFB5TWVtYmVyRGVmIHRlc3RfbWVtYmVyc1tdID0geworCXsiVF9CWVRFIiwgVF9CWVRFLCBvZmZzZXRvZih0ZXN0X3N0cnVjdG1lbWJlcnMsIHN0cnVjdG1lbWJlcnMuYnl0ZV9tZW1iZXIpLCAwLCBOVUxMfSwKKwl7IlRfVUJZVEUiLCBUX1VCWVRFLCBvZmZzZXRvZih0ZXN0X3N0cnVjdG1lbWJlcnMsIHN0cnVjdG1lbWJlcnMudWJ5dGVfbWVtYmVyKSwgMCwgTlVMTH0sCisJeyJUX1NIT1JUIiwgVF9TSE9SVCwgb2Zmc2V0b2YodGVzdF9zdHJ1Y3RtZW1iZXJzLCBzdHJ1Y3RtZW1iZXJzLnNob3J0X21lbWJlciksIDAsIE5VTEx9LAorCXsiVF9VU0hPUlQiLCBUX1VTSE9SVCwgb2Zmc2V0b2YodGVzdF9zdHJ1Y3RtZW1iZXJzLCBzdHJ1Y3RtZW1iZXJzLnVzaG9ydF9tZW1iZXIpLCAwLCBOVUxMfSwKKwl7IlRfSU5UIiwgVF9JTlQsIG9mZnNldG9mKHRlc3Rfc3RydWN0bWVtYmVycywgc3RydWN0bWVtYmVycy5pbnRfbWVtYmVyKSwgMCwgTlVMTH0sCisJeyJUX1VJTlQiLCBUX1VJTlQsIG9mZnNldG9mKHRlc3Rfc3RydWN0bWVtYmVycywgc3RydWN0bWVtYmVycy51aW50X21lbWJlciksIDAsIE5VTEx9LAorCXsiVF9MT05HIiwgVF9MT05HLCBvZmZzZXRvZih0ZXN0X3N0cnVjdG1lbWJlcnMsIHN0cnVjdG1lbWJlcnMubG9uZ19tZW1iZXIpLCAwLCBOVUxMfSwKKwl7IlRfVUxPTkciLCBUX1VMT05HLCBvZmZzZXRvZih0ZXN0X3N0cnVjdG1lbWJlcnMsIHN0cnVjdG1lbWJlcnMudWxvbmdfbWVtYmVyKSwgMCwgTlVMTH0sCisJeyJUX0ZMT0FUIiwgVF9GTE9BVCwgb2Zmc2V0b2YodGVzdF9zdHJ1Y3RtZW1iZXJzLCBzdHJ1Y3RtZW1iZXJzLmZsb2F0X21lbWJlciksIDAsIE5VTEx9LAorCXsiVF9ET1VCTEUiLCBUX0RPVUJMRSwgb2Zmc2V0b2YodGVzdF9zdHJ1Y3RtZW1iZXJzLCBzdHJ1Y3RtZW1iZXJzLmRvdWJsZV9tZW1iZXIpLCAwLCBOVUxMfSwKKwl7TlVMTH0KK307CisKKworc3RhdGljIFB5T2JqZWN0ICp0ZXN0X3N0cnVjdG1lbWJlcnNfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpeworCXN0YXRpYyBjaGFyICprZXl3b3Jkc1tdPXsiVF9CWVRFIiwgIlRfVUJZVEUiLCAiVF9TSE9SVCIsICJUX1VTSE9SVCIsICJUX0lOVCIsICJUX1VJTlQiLAorCQkiVF9MT05HIiwgIlRfVUxPTkciLCAiVF9GTE9BVCIsICJUX0RPVUJMRSIsIE5VTEx9OworCXRlc3Rfc3RydWN0bWVtYmVycyAqb2I9UHlPYmplY3RfTmV3KHRlc3Rfc3RydWN0bWVtYmVycywgdHlwZSk7CisJaWYgKG9iPT1OVUxMKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoJm9iLT5zdHJ1Y3RtZW1iZXJzLCAwLCBzaXplb2YoYWxsX3N0cnVjdG1lbWJlcnMpKTsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8YkJoSGlJbGtmZCIsIGtleXdvcmRzLAorCQkmb2ItPnN0cnVjdG1lbWJlcnMuYnl0ZV9tZW1iZXIsICZvYi0+c3RydWN0bWVtYmVycy51Ynl0ZV9tZW1iZXIsCisJCSZvYi0+c3RydWN0bWVtYmVycy5zaG9ydF9tZW1iZXIsICZvYi0+c3RydWN0bWVtYmVycy51c2hvcnRfbWVtYmVyLAorCQkmb2ItPnN0cnVjdG1lbWJlcnMuaW50X21lbWJlciwgJm9iLT5zdHJ1Y3RtZW1iZXJzLnVpbnRfbWVtYmVyLCAKKwkJJm9iLT5zdHJ1Y3RtZW1iZXJzLmxvbmdfbWVtYmVyLCAmb2ItPnN0cnVjdG1lbWJlcnMudWxvbmdfbWVtYmVyLAorCQkmb2ItPnN0cnVjdG1lbWJlcnMuZmxvYXRfbWVtYmVyLCAmb2ItPnN0cnVjdG1lbWJlcnMuZG91YmxlX21lbWJlcikpeworCQlQeV9ERUNSRUYob2IpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCXJldHVybiAoUHlPYmplY3QgKilvYjsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3RtZW1iZXJzX2ZyZWUoUHlPYmplY3QgKm9iKXsKKwlQeU9iamVjdF9GUkVFKG9iKTsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCB0ZXN0X3N0cnVjdG1lbWJlcnNUeXBlID0geworICAgIFB5T2JqZWN0X0hFQURfSU5JVChOVUxMKQorICAgIDAsCisJInRlc3Rfc3RydWN0bWVtYmVyc1R5cGUiLAorCXNpemVvZih0ZXN0X3N0cnVjdG1lbWJlcnMpLAkvKiB0cF9iYXNpY3NpemUgKi8KKwkwLAkJCQkvKiB0cF9pdGVtc2l6ZSAqLworCXRlc3Rfc3RydWN0bWVtYmVyc19mcmVlLAkvKiBkZXN0cnVjdG9yIHRwX2RlYWxsb2MgKi8KKwkwLAkJCQkvKiB0cF9wcmludCAqLworCTAsCQkJCS8qIHRwX2dldGF0dHIgKi8KKwkwLAkJCQkvKiB0cF9zZXRhdHRyICovCisJMCwJCQkJLyogdHBfY29tcGFyZSAqLworCTAsCQkJCS8qIHRwX3JlcHIgKi8KKwkwLAkJCQkvKiB0cF9hc19udW1iZXIgKi8KKwkwLAkJCQkvKiB0cF9hc19zZXF1ZW5jZSAqLworCTAsCQkJCS8qIHRwX2FzX21hcHBpbmcgKi8KKwkwLAkJCQkvKiB0cF9oYXNoICovCisJMCwJCQkJLyogdHBfY2FsbCAqLworCTAsCQkJCS8qIHRwX3N0ciAqLworCVB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLAorCVB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyLAorCTAsCQkJCS8qIHRwX2FzX2J1ZmZlciAqLworCTAsCQkJCS8qIHRwX2ZsYWdzICovCisJIlR5cGUgY29udGFpbmluZyBhbGwgc3RydWN0bWVtYmVyIHR5cGVzIiwKKwkwLAkJCQkvKiB0cmF2ZXJzZXByb2MgdHBfdHJhdmVyc2UgKi8KKwkwLAkJCQkvKiB0cF9jbGVhciAqLworCTAsCQkJCS8qIHRwX3JpY2hjb21wYXJlICovCisJMCwJCQkJLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKwkwLAkJCQkvKiB0cF9pdGVyICovCisJMCwJCQkJLyogdHBfaXRlcm5leHQgKi8KKwkwLAkJCQkvKiB0cF9tZXRob2RzICovCisJdGVzdF9tZW1iZXJzLAkvKiB0cF9tZW1iZXJzICovCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCXRlc3Rfc3RydWN0bWVtYmVyc19uZXcsCQkJLyogdHBfbmV3ICovCit9OworCisKIFB5TU9ESU5JVF9GVU5DCiBpbml0X3Rlc3RjYXBpKHZvaWQpCiB7CkBAIC03NjUsMTYgKzg2OSwyOCBAQAogCWlmIChtID09IE5VTEwpCiAJCXJldHVybjsKIAorCXRlc3Rfc3RydWN0bWVtYmVyc1R5cGUub2JfdHlwZT0mUHlUeXBlX1R5cGU7CisJUHlfSU5DUkVGKCZ0ZXN0X3N0cnVjdG1lbWJlcnNUeXBlKTsKKwlQeU1vZHVsZV9BZGRPYmplY3QobSwgInRlc3Rfc3RydWN0bWVtYmVyc1R5cGUiLCAoUHlPYmplY3QgKikmdGVzdF9zdHJ1Y3RtZW1iZXJzVHlwZSk7CisKKwlQeU1vZHVsZV9BZGRPYmplY3QobSwgIkNIQVJfTUFYIiwgUHlJbnRfRnJvbUxvbmcoQ0hBUl9NQVgpKTsKKwlQeU1vZHVsZV9BZGRPYmplY3QobSwgIkNIQVJfTUlOIiwgUHlJbnRfRnJvbUxvbmcoQ0hBUl9NSU4pKTsKIAlQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVDSEFSX01BWCIsIFB5SW50X0Zyb21Mb25nKFVDSEFSX01BWCkpOworCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hSVF9NQVgiLCBQeUludF9Gcm9tTG9uZyhTSFJUX01BWCkpOworCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hSVF9NSU4iLCBQeUludF9Gcm9tTG9uZyhTSFJUX01JTikpOwogCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiVVNIUlRfTUFYIiwgUHlJbnRfRnJvbUxvbmcoVVNIUlRfTUFYKSk7CisJUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJJTlRfTUFYIiwgIFB5TG9uZ19Gcm9tTG9uZyhJTlRfTUFYKSk7CisJUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJJTlRfTUlOIiwgIFB5TG9uZ19Gcm9tTG9uZyhJTlRfTUlOKSk7CiAJUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJVSU5UX01BWCIsICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhVSU5UX01BWCkpOwotCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiVUxPTkdfTUFYIiwgUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoVUxPTkdfTUFYKSk7Ci0JUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJJTlRfTUlOIiwgUHlJbnRfRnJvbUxvbmcoSU5UX01JTikpOwotCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiTE9OR19NSU4iLCBQeUludF9Gcm9tTG9uZyhMT05HX01JTikpOwotCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiUFlfU1NJWkVfVF9NSU4iLCBQeUludF9Gcm9tU3NpemVfdChQWV9TU0laRV9UX01JTikpOwotCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiSU5UX01BWCIsIFB5SW50X0Zyb21Mb25nKElOVF9NQVgpKTsKIAlQeU1vZHVsZV9BZGRPYmplY3QobSwgIkxPTkdfTUFYIiwgUHlJbnRfRnJvbUxvbmcoTE9OR19NQVgpKTsKKwlQeU1vZHVsZV9BZGRPYmplY3QobSwgIkxPTkdfTUlOIiwgUHlJbnRfRnJvbUxvbmcoTE9OR19NSU4pKTsKKwlQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVMT05HX01BWCIsIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKFVMT05HX01BWCkpOworCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiRkxUX01BWCIsIFB5RmxvYXRfRnJvbURvdWJsZShGTFRfTUFYKSk7CisJUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJGTFRfTUlOIiwgUHlGbG9hdF9Gcm9tRG91YmxlKEZMVF9NSU4pKTsKKwlQeU1vZHVsZV9BZGRPYmplY3QobSwgIkRCTF9NQVgiLCBQeUZsb2F0X0Zyb21Eb3VibGUoREJMX01BWCkpOworCVB5TW9kdWxlX0FkZE9iamVjdChtLCAiREJMX01JTiIsIFB5RmxvYXRfRnJvbURvdWJsZShEQkxfTUlOKSk7CiAJUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQWV9TU0laRV9UX01BWCIsIFB5SW50X0Zyb21Tc2l6ZV90KFBZX1NTSVpFX1RfTUFYKSk7CisJUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQWV9TU0laRV9UX01JTiIsIFB5SW50X0Zyb21Tc2l6ZV90KFBZX1NTSVpFX1RfTUlOKSk7CiAKIAlUZXN0RXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl90ZXN0Y2FwaS5lcnJvciIsIE5VTEwsIE5VTEwpOwogCVB5X0lOQ1JFRihUZXN0RXJyb3IpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hbG1vZHVsZS5jIGIvTW9kdWxlcy9hbG1vZHVsZS5jCmluZGV4IGZiZWIxM2EuLjBhNDVkMmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYWxtb2R1bGUuYworKysgYi9Nb2R1bGVzL2FsbW9kdWxlLmMKQEAgLTE2ODYsNyArMTY4Niw3IEBACiB7CiAJaW50IHJlcywgcGFyYW07CiAJQUxwYXJhbUluZm8gcGluZm87Ci0JUHlPYmplY3QgKnYsICppdGVtOzsKKwlQeU9iamVjdCAqdiwgKml0ZW07CiAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOkdldFBhcmFtSW5mbyIsICZyZXMsICZwYXJhbSkpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCmluZGV4IDZjZTZiMDcuLjU1MmY4MGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXJyYXltb2R1bGUuYworKysgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKQEAgLTE0OTUsNyArMTQ5NSw3IEBACiAJIGNvcHlfZG9jfSwKIAl7ImNvdW50IiwJKFB5Q0Z1bmN0aW9uKWFycmF5X2NvdW50LAlNRVRIX08sCiAJIGNvdW50X2RvY30sCi0JeyJfX2RlZXBjb3B5X18iLChQeUNGdW5jdGlvbilhcnJheV9jb3B5LAlNRVRIX05PQVJHUywKKwl7Il9fZGVlcGNvcHlfXyIsKFB5Q0Z1bmN0aW9uKWFycmF5X2NvcHksCU1FVEhfTywKIAkgY29weV9kb2N9LAogCXsiZXh0ZW5kIiwgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfZXh0ZW5kLAlNRVRIX08sCiAJIGV4dGVuZF9kb2N9LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdWRpb29wLmMgYi9Nb2R1bGVzL2F1ZGlvb3AuYwppbmRleCA4ZjVkMzBjLi5jZTAwOTc1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F1ZGlvb3AuYworKysgYi9Nb2R1bGVzL2F1ZGlvb3AuYwpAQCAtNDcyLDggKzQ3MiwxMiBAQAogICAgICAgICBkb3VibGUgYWpfbTEsIGFqX2xtMTsKICAgICAgICAgZG91YmxlIHN1bV9yaV8yLCBzdW1fYWlqXzIsIHN1bV9haWpfcmksIHJlc3VsdCwgYmVzdF9yZXN1bHQsIGZhY3RvcjsKIAorCS8qIFBhc3NpbmcgYSBzaG9ydCoqIGZvciBhbiAncycgYXJndW1lbnQgaXMgY29ycmVjdCBvbmx5CisJICAgaWYgdGhlIHN0cmluZyBjb250ZW50cyBpcyBhbGlnbmVkIGZvciBpbnRlcnByZXRhdGlvbgorCSAgIGFzIHNob3J0W10uIER1ZSB0byB0aGUgZGVmaW5pdGlvbiBvZiBQeVN0cmluZ09iamVjdCwKKwkgICB0aGlzIGlzIGN1cnJlbnRseSAoUHl0aG9uIDIuNikgdGhlIGNhc2UuICovCiAgICAgICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyM6ZmluZGZpdCIsCi0JICAgICAgICAgICAgICAgICAgICAgICAmY3AxLCAmbGVuMSwgJmNwMiwgJmxlbjIpICkKKwkgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsIChjaGFyKiopJmNwMiwgJmxlbjIpICkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKCBsZW4xICYgMSB8fCBsZW4yICYgMSApIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU3RyaW5ncyBzaG91bGQgYmUgZXZlbi1zaXplZCIpOwpAQCAtNTMwLDcgKzUzNCw3IEBACiAgICAgICAgIGRvdWJsZSBzdW1fcmlfMiwgc3VtX2Fpal9yaSwgcmVzdWx0OwogCiAgICAgICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyM6ZmluZGZhY3RvciIsCi0JICAgICAgICAgICAgICAgICAgICAgICAmY3AxLCAmbGVuMSwgJmNwMiwgJmxlbjIpICkKKwkgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsIChjaGFyKiopJmNwMiwgJmxlbjIpICkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKCBsZW4xICYgMSB8fCBsZW4yICYgMSApIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU3RyaW5ncyBzaG91bGQgYmUgZXZlbi1zaXplZCIpOwpAQCAtNTYyLDcgKzU2Niw4IEBACiAgICAgICAgIGRvdWJsZSBhal9tMSwgYWpfbG0xOwogICAgICAgICBkb3VibGUgcmVzdWx0LCBiZXN0X3Jlc3VsdDsKIAotICAgICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6ZmluZG1heCIsICZjcDEsICZsZW4xLCAmbGVuMikgKQorICAgICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6ZmluZG1heCIsIAorCQkJICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsICZsZW4yKSApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICggbGVuMSAmIDEgKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvYmluYXNjaWkuYyBiL01vZHVsZXMvYmluYXNjaWkuYwppbmRleCAzYjJjOGIyLi40ZGVlNDUxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2JpbmFzY2lpLmMKKysrIGIvTW9kdWxlcy9iaW5hc2NpaS5jCkBAIC0xMDU3LDggKzEwNTcsNyBAQAogCQkJaW4rKzsKIAkJCWlmIChpbiA+PSBkYXRhbGVuKSBicmVhazsKIAkJCS8qIFNvZnQgbGluZSBicmVha3MgKi8KLQkJCWlmICgoZGF0YVtpbl0gPT0gJ1xuJykgfHwgKGRhdGFbaW5dID09ICdccicpIHx8Ci0JCQkgICAgKGRhdGFbaW5dID09ICcgJykgfHwgKGRhdGFbaW5dID09ICdcdCcpKSB7CisJCQlpZiAoKGRhdGFbaW5dID09ICdcbicpIHx8IChkYXRhW2luXSA9PSAnXHInKSkgewogCQkJCWlmIChkYXRhW2luXSAhPSAnXG4nKSB7CiAJCQkJCXdoaWxlIChpbiA8IGRhdGFsZW4gJiYgZGF0YVtpbl0gIT0gJ1xuJykgaW4rKzsKIAkJCQl9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2J6Mm1vZHVsZS5jIGIvTW9kdWxlcy9iejJtb2R1bGUuYwppbmRleCAxNDZlMmVlLi41YTRlNWQ5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2J6Mm1vZHVsZS5jCisrKyBiL01vZHVsZXMvYnoybW9kdWxlLmMKQEAgLTEwMTYsMTIgKzEwMTYsMTIgQEAKIAkJY2FzZSBNT0RFX0NMT1NFRDoKIAkJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogCQkJCQkiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpOwotCQkJZ290byBjbGVhbnVwOzsKKwkJCWdvdG8gY2xlYW51cDsKIAogCQlkZWZhdWx0OgogCQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCiAJCQkJCSJzZWVrIHdvcmtzIG9ubHkgd2hpbGUgcmVhZGluZyIpOwotCQkJZ290byBjbGVhbnVwOzsKKwkJCWdvdG8gY2xlYW51cDsKIAl9CiAKIAlpZiAod2hlcmUgPT0gMikgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jUGlja2xlLmMgYi9Nb2R1bGVzL2NQaWNrbGUuYwppbmRleCBmYWJjM2NkLi5mMzE3OGFiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2NQaWNrbGUuYworKysgYi9Nb2R1bGVzL2NQaWNrbGUuYwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIHN0YXRpYyBpbnQKIHNhdmVfbG9uZyhQaWNrbGVyb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLQlpbnQgc2l6ZTsKKwlQeV9zc2l6ZV90IHNpemU7CiAJaW50IHJlcyA9IC0xOwogCVB5T2JqZWN0ICpyZXByID0gTlVMTDsKIApAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAkJICogYnl0ZSBhdCB0aGUgc3RhcnQsIGFuZCBjdXQgaXQgYmFjayBsYXRlciBpZiBwb3NzaWJsZS4KIAkJICovCiAJCW5ieXRlcyA9IChuYml0cyA+PiAzKSArIDE7Ci0JCWlmICgoaW50KW5ieXRlcyA8IDAgfHwgKHNpemVfdCkoaW50KW5ieXRlcyAhPSBuYnl0ZXMpIHsKKwkJaWYgKG5ieXRlcyA+IElOVF9NQVgpIHsKIAkJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibG9uZyB0b28gbGFyZ2UgIgogCQkJCSJ0byBwaWNrbGUiKTsKIAkJCWdvdG8gZmluYWxseTsKQEAgLTEyMDgsMTIgKzEyMDgsMTQgQEAKIAkJCWNfc3RyWzFdID0gc2l6ZTsKIAkJCWxlbiA9IDI7CiAJCX0KLQkJZWxzZSB7CisJCWVsc2UgaWYgKHNpemUgPD0gSU5UX01BWCkgewogCQkJY19zdHJbMF0gPSBCSU5TVFJJTkc7CiAJCQlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKQogCQkJCWNfc3RyW2ldID0gKGludCkoc2l6ZSA+PiAoKGkgLSAxKSAqIDgpKTsKIAkJCWxlbiA9IDU7CiAJCX0KKwkJZWxzZQorCQkJcmV0dXJuIC0xOyAgICAvKiBzdHJpbmcgdG9vIGxhcmdlICovCiAKIAkJaWYgKHNlbGYtPndyaXRlX2Z1bmMoc2VsZiwgY19zdHIsIGxlbikgPCAwKQogCQkJcmV0dXJuIC0xOwpAQCAtMTI4Niw3ICsxMjg4LDcgQEAKIHN0YXRpYyBpbnQKIHNhdmVfdW5pY29kZShQaWNrbGVyb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgaW50IGRvcHV0KQogewotCWludCBzaXplLCBsZW47CisJUHlfc3NpemVfdCBzaXplLCBsZW47CiAJUHlPYmplY3QgKnJlcHI9MDsKIAogCWlmICghUHlVbmljb2RlX0NoZWNrKGFyZ3MpKQpAQCAtMTMyNSw2ICsxMzI3LDggQEAKIAogCQlpZiAoKHNpemUgPSBQeVN0cmluZ19TaXplKHJlcHIpKSA8IDApCiAJCQlnb3RvIGVycjsKKwkJaWYgKHNpemUgPiBJTlRfTUFYKQorCQkJcmV0dXJuIC0xOyAgIC8qIHN0cmluZyB0b28gbGFyZ2UgKi8KIAogCQljX3N0clswXSA9IEJJTlVOSUNPREU7CiAJCWZvciAoaSA9IDE7IGkgPCA1OyBpKyspCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NTdHJpbmdJTy5jIGIvTW9kdWxlcy9jU3RyaW5nSU8uYwppbmRleCA0ZGViYjcyLi4zZjc2MmIwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2NTdHJpbmdJTy5jCisrKyBiL01vZHVsZXMvY1N0cmluZ0lPLmMKQEAgLTI4OSw3ICsyODksMTcgQEAKIAkKICAgICAgICAgaWYgKCFJT19fb3BlbmNoZWNrKHNlbGYpKSByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjp0cnVuY2F0ZSIsICZwb3MpKSByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKHBvcyA8IDApIHBvcyA9IHNlbGYtPnBvczsKKworCWlmIChQeVR1cGxlX1NpemUoYXJncykgPT0gMCkgeworCQkvKiBObyBhcmd1bWVudCBwYXNzZWQsIHRydW5jYXRlIHRvIGN1cnJlbnQgcG9zaXRpb24gKi8KKwkJcG9zID0gc2VsZi0+cG9zOworCX0KKworICAgICAgICBpZiAocG9zIDwgMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKICAgICAgICAgaWYgKHNlbGYtPnN0cmluZ19zaXplID4gcG9zKSBzZWxmLT5zdHJpbmdfc2l6ZSA9IHBvczsKICAgICAgICAgc2VsZi0+cG9zID0gc2VsZi0+c3RyaW5nX3NpemU7CkBAIC02NTcsMTEgKzY2Nyw5IEBACiAgIGNoYXIgKmJ1ZjsKICAgUHlfc3NpemVfdCBzaXplOwogCi0gIGlmIChQeU9iamVjdF9Bc1JlYWRCdWZmZXIocywgKGNvbnN0IHZvaWQgKiopJmJ1ZiwgJnNpemUpKSB7Ci0gICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiZXhwZWN0ZWQgcmVhZCBidWZmZXIsICUuMjAwcyBmb3VuZCIsCi0JCSAgIHMtPm9iX3R5cGUtPnRwX25hbWUpOworICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHMsIChjb25zdCBjaGFyICoqKSZidWYsICZzaXplKSAhPSAwKQogICAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KKwogICBzZWxmID0gUHlPYmplY3RfTmV3KElvYmplY3QsICZJdHlwZSk7CiAgIGlmICghc2VsZikgcmV0dXJuIE5VTEw7CiAgIFB5X0lOQ1JFRihzKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYwppbmRleCBmYjUxMjk3Li5jODExYTY3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCkBAIC0xNSwxNCArMTUsMjYgQEAKICN1bmRlZiBoegogI2VuZGlmCiAKLSNkZWZpbmUgR0JLX1BSRURFQ09ERShkYzEsIGRjMiwgYXNzaSkgXAorLyogR0JLIGFuZCBHQjIzMTIgbWFwIGRpZmZlcmVudGx5IGluIGZldyBjb2RlcG9pbnRzIHRoYXQgYXJlIGxpc3RlZCBiZWxvdzoKKyAqCisgKgkJZ2IyMzEyCQkJCWdiaworICogQTFBNAkJVSszMEZCIEtBVEFLQU5BIE1JRERMRSBET1QJVSswMEI3IE1JRERMRSBET1QKKyAqIEExQUEJCVUrMjAxNSBIT1JJWk9OVEFMIEJBUgkJVSsyMDE0IEVNIERBU0gKKyAqIEE4NDQJCXVuZGVmaW5lZAkJCVUrMjAxNSBIT1JJWk9OVEFMIEJBUgorICovCisKKyNkZWZpbmUgR0JLX0RFQ09ERShkYzEsIGRjMiwgYXNzaSkgXAogCWlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YWEpIChhc3NpKSA9IDB4MjAxNDsgXAogCWVsc2UgaWYgKChkYzEpID09IDB4YTggJiYgKGRjMikgPT0gMHg0NCkgKGFzc2kpID0gMHgyMDE1OyBcCi0JZWxzZSBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGE0KSAoYXNzaSkgPSAweDAwYjc7Ci0jZGVmaW5lIEdCS19QUkVFTkNPREUoY29kZSwgYXNzaSkgXAorCWVsc2UgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhNCkgKGFzc2kpID0gMHgwMGI3OyBcCisJZWxzZSBUUllNQVBfREVDKGdiMjMxMiwgYXNzaSwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCk7IFwKKwllbHNlIFRSWU1BUF9ERUMoZ2JrZXh0LCBhc3NpLCBkYzEsIGRjMik7CisKKyNkZWZpbmUgR0JLX0VOQ09ERShjb2RlLCBhc3NpKSBcCiAJaWYgKChjb2RlKSA9PSAweDIwMTQpIChhc3NpKSA9IDB4YTFhYTsgXAogCWVsc2UgaWYgKChjb2RlKSA9PSAweDIwMTUpIChhc3NpKSA9IDB4YTg0NDsgXAotCWVsc2UgaWYgKChjb2RlKSA9PSAweDAwYjcpIChhc3NpKSA9IDB4YTFhNDsKKwllbHNlIGlmICgoY29kZSkgPT0gMHgwMGI3KSAoYXNzaSkgPSAweGExYTQ7IFwKKwllbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkNfQ09ORChnYmNvbW1vbiwgYXNzaSwgY29kZSkpOwogCiAvKgogICogR0IyMzEyIGNvZGVjCkBAIC05OSw4ICsxMTEsNyBAQAogCiAJCVJFUVVJUkVfT1VUQlVGKDIpCiAKLQkJR0JLX1BSRUVOQ09ERShjLCBjb2RlKQotCQllbHNlIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpOworCQlHQktfRU5DT0RFKGMsIGNvZGUpCiAJCWVsc2UgcmV0dXJuIDE7CiAKIAkJT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCkBAIC0xMjksOSArMTQwLDcgQEAKIAogCQlSRVFVSVJFX0lOQlVGKDIpCiAKLQkJR0JLX1BSRURFQ09ERShjLCBJTjIsICoqb3V0YnVmKQotCQllbHNlIFRSWU1BUF9ERUMoZ2IyMzEyLCAqKm91dGJ1ZiwgYyBeIDB4ODAsIElOMiBeIDB4ODApOwotCQllbHNlIFRSWU1BUF9ERUMoZ2JrZXh0LCAqKm91dGJ1ZiwgYywgSU4yKTsKKwkJR0JLX0RFQ09ERShjLCBJTjIsICoqb3V0YnVmKQogCQllbHNlIHJldHVybiAyOwogCiAJCU5FWFQoMiwgMSkKQEAgLTE4Nyw5ICsxOTYsNyBAQAogCiAJCVJFUVVJUkVfT1VUQlVGKDIpCiAKLQkJR0JLX1BSRUVOQ09ERShjLCBjb2RlKQotCQllbHNlIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpOwotCQllbHNlIFRSWU1BUF9FTkMoZ2IxODAzMGV4dCwgY29kZSwgYyk7CisJCUdCS19FTkNPREUoYywgY29kZSkKIAkJZWxzZSB7CiAJCQljb25zdCBzdHJ1Y3QgX2diMTgwMzBfdG9fdW5pYm1wX3JhbmdlcyAqdXRycmFuZ2U7CiAKQEAgLTI4Nyw5ICsyOTQsNyBAQAogCQkJcmV0dXJuIDQ7CiAJCX0KIAotCQlHQktfUFJFREVDT0RFKGMsIGMyLCAqKm91dGJ1ZikKLQkJZWxzZSBUUllNQVBfREVDKGdiMjMxMiwgKipvdXRidWYsIGMgXiAweDgwLCBjMiBeIDB4ODApOwotCQllbHNlIFRSWU1BUF9ERUMoZ2JrZXh0LCAqKm91dGJ1ZiwgYywgYzIpOworCQlHQktfREVDT0RFKGMsIGMyLCAqKm91dGJ1ZikKIAkJZWxzZSBUUllNQVBfREVDKGdiMTgwMzBleHQsICoqb3V0YnVmLCBjLCBjMik7CiAJCWVsc2UgcmV0dXJuIDI7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKaW5kZXggOGEyYWI3ZS4uNTUxOTZhOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKQEAgLTU5Miw5ICs1OTIsMTEgQEAKIHsKIAlEQkNIQVIgY29kZWQ7CiAJYXNzZXJ0KCpsZW5ndGggPT0gMSk7Ci0JVFJZTUFQX0VOQyhjcDk0OSwgY29kZWQsICpkYXRhKQotCQlpZiAoIShjb2RlZCAmIDB4ODAwMCkpCi0JCQlyZXR1cm4gY29kZWQ7CisJaWYgKCpkYXRhIDwgMHgxMDAwMCkgeworCQlUUllNQVBfRU5DKGNwOTQ5LCBjb2RlZCwgKmRhdGEpCisJCQlpZiAoIShjb2RlZCAmIDB4ODAwMCkpCisJCQkJcmV0dXJuIGNvZGVkOworCX0KIAlyZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKQEAgLTYyOCwxMSArNjMwLDEzIEBACiB7CiAJREJDSEFSIGNvZGVkOwogCWFzc2VydCgqbGVuZ3RoID09IDEpOwotCWlmICgqZGF0YSA9PSAweGZmM2MpIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KLQkJcmV0dXJuIDB4MjE0MDsKLQllbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSB7Ci0JCWlmICghKGNvZGVkICYgMHg4MDAwKSkKLQkJCXJldHVybiBjb2RlZDsKKwlpZiAoKmRhdGEgPCAweDEwMDAwKSB7CisJCWlmICgqZGF0YSA9PSAweGZmM2MpIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KKwkJCXJldHVybiAweDIxNDA7CisJCWVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKwkJCWlmICghKGNvZGVkICYgMHg4MDAwKSkKKwkJCQlyZXR1cm4gY29kZWQ7CisJCX0KIAl9CiAJcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQpAQCAtNjY1LDkgKzY2OSwxMSBAQAogewogCURCQ0hBUiBjb2RlZDsKIAlhc3NlcnQoKmxlbmd0aCA9PSAxKTsKLQlUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkgewotCQlpZiAoY29kZWQgJiAweDgwMDApCi0JCQlyZXR1cm4gY29kZWQgJiAweDdmZmY7CisJaWYgKCpkYXRhIDwgMHgxMDAwMCkgeworCQlUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkgeworCQkJaWYgKGNvZGVkICYgMHg4MDAwKQorCQkJCXJldHVybiBjb2RlZCAmIDB4N2ZmZjsKKwkJfQogCX0KIAlyZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CkBAIC04NTQsNyArODYwLDcgQEAKIAlpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQogCQlyZXR1cm4gY29kZWQ7CiAJZWxzZSBpZiAoY29kZWQgJiAweDgwMDApCi0JCXJldHVybiBjb2RlZDsKKwkJcmV0dXJuIGNvZGVkICYgMHg3ZmZmOwogCWVsc2UKIAkJcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQpAQCAtOTAxLDcgKzkwNyw3IEBACiAJaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKIAkJcmV0dXJuIGNvZGVkOwogCWVsc2UgaWYgKGNvZGVkICYgMHg4MDAwKQotCQlyZXR1cm4gY29kZWQ7CisJCXJldHVybiBjb2RlZCAmIDB4N2ZmZjsKIAllbHNlCiAJCXJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KQEAgLTk3MCw5ICs5NzYsMTEgQEAKIHsKIAlEQkNIQVIgY29kZWQ7CiAJYXNzZXJ0KCpsZW5ndGggPT0gMSk7Ci0JVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZWQsICpkYXRhKSB7Ci0JCWlmICghKGNvZGVkICYgMHg4MDAwKSkKLQkJCXJldHVybiBjb2RlZDsKKwlpZiAoKmRhdGEgPCAweDEwMDAwKSB7CisJCVRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGVkLCAqZGF0YSkgeworCQkJaWYgKCEoY29kZWQgJiAweDgwMDApKQorCQkJCXJldHVybiBjb2RlZDsKKwkJfQogCX0KIAlyZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CkBAIC05OTIsNyArMTAwMCwxMCBAQAogCiAvKi0qLSByZWdpc3RyeSB0YWJsZXMgLSotKi8KIAotI2RlZmluZSBSRUdJU1RSWV9LU1gxMDAxCXsgQ0hBUlNFVF9LU1gxMDAxLCAxLCAyLAkJXAorI2RlZmluZSBSRUdJU1RSWV9LU1gxMDAxX0cwCXsgQ0hBUlNFVF9LU1gxMDAxLCAwLCAyLAkJXAorCQkJCSAga3N4MTAwMV9pbml0LAkJCQlcCisJCQkJICBrc3gxMDAxX2RlY29kZXIsIGtzeDEwMDFfZW5jb2RlciB9CisjZGVmaW5lIFJFR0lTVFJZX0tTWDEwMDFfRzEJeyBDSEFSU0VUX0tTWDEwMDEsIDEsIDIsCQlcCiAJCQkJICBrc3gxMDAxX2luaXQsCQkJCVwKIAkJCQkgIGtzeDEwMDFfZGVjb2Rlciwga3N4MTAwMV9lbmNvZGVyIH0KICNkZWZpbmUgUkVHSVNUUllfSklTWDAyMDFfUgl7IENIQVJTRVRfSklTWDAyMDFfUiwgMCwgMSwJCVwKQEAgLTEwMzQsNyArMTA0NSw3IEBACiAJCQkJICBqaXN4MDIxM19pbml0LAkJCVwKIAkJCQkgIGppc3gwMjEzXzIwMDRfMl9kZWNvZGVyLAkJXAogCQkJCSAgamlzeDAyMTNfMjAwNF8yX2VuY29kZXIgfQotI2RlZmluZSBSRUdJU1RSWV9HQjIzMTIJCXsgQ0hBUlNFVF9HQjIzMTIsIDEsIDIsCQkJXAorI2RlZmluZSBSRUdJU1RSWV9HQjIzMTIJCXsgQ0hBUlNFVF9HQjIzMTIsIDAsIDIsCQkJXAogCQkJCSAgZ2IyMzEyX2luaXQsCQkJCVwKIAkJCQkgIGdiMjMxMl9kZWNvZGVyLCBnYjIzMTJfZW5jb2RlciB9CiAjZGVmaW5lIFJFR0lTVFJZX0NOUzExNjQzXzEJeyBDSEFSU0VUX0NOUzExNjQzXzEsIDEsIDIsCQlcCkBAIC0xMDU0LDcgKzEwNjUsNyBAQAogCX07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiBpc28yMDIyX2tyX2Rlc2lnbmF0aW9uc1tdID0gewotCVJFR0lTVFJZX0tTWDEwMDEsIFJFR0lTVFJZX1NFTlRJTkVMCisJUkVHSVNUUllfS1NYMTAwMV9HMSwgUkVHSVNUUllfU0VOVElORUwKIH07CiBDT05GSUdERUYoa3IsIDApCiAKQEAgLTEwNzEsNyArMTA4Miw3IEBACiBDT05GSUdERUYoanBfMSwgTk9fU0hJRlQgfCBVU0VfSklTWDAyMDhfRVhUKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gaXNvMjAyMl9qcF8yX2Rlc2lnbmF0aW9uc1tdID0gewotCVJFR0lTVFJZX0pJU1gwMjA4LCBSRUdJU1RSWV9KSVNYMDIxMiwgUkVHSVNUUllfS1NYMTAwMSwKKwlSRUdJU1RSWV9KSVNYMDIwOCwgUkVHSVNUUllfSklTWDAyMTIsIFJFR0lTVFJZX0tTWDEwMDFfRzAsCiAJUkVHSVNUUllfR0IyMzEyLCBSRUdJU1RSWV9KSVNYMDIwMV9SLCBSRUdJU1RSWV9KSVNYMDIwOF9PLAogCVJFR0lTVFJZX0lTTzg4NTlfMSwgUkVHSVNUUllfSVNPODg1OV83LCBSRUdJU1RSWV9TRU5USU5FTAogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKaW5kZXggYjI2NmM4Zi4uNzFjNTRmMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKQEAgLTE1OSwyOSArMTU5LDMyIEBACiAjZW5kaWYKIAogI2RlZmluZSBfVFJZTUFQX0VOQyhtLCBhc3NpLCB2YWwpCQkJCVwKLQlpZiAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJgkJXAorCSgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmCQlcCiAJICAgICh2YWwpPD0gKG0pLT50b3AgJiYgKChhc3NpKSA9IChtKS0+bWFwWyh2YWwpIC0JXAogCSAgICAobSktPmJvdHRvbV0pICE9IE5PQ0hBUikKLSNkZWZpbmUgVFJZTUFQX0VOQyhjaGFyc2V0LCBhc3NpLCB1bmkpCQkJCVwKKyNkZWZpbmUgVFJZTUFQX0VOQ19DT05EKGNoYXJzZXQsIGFzc2ksIHVuaSkJCQlcCiAJX1RSWU1BUF9FTkMoJmNoYXJzZXQjI19lbmNtYXBbKHVuaSkgPj4gOF0sIGFzc2ksICh1bmkpICYgMHhmZikKKyNkZWZpbmUgVFJZTUFQX0VOQyhjaGFyc2V0LCBhc3NpLCB1bmkpCQkJCVwKKwlpZiBUUllNQVBfRU5DX0NPTkQoY2hhcnNldCwgYXNzaSwgdW5pKQorCiAjZGVmaW5lIF9UUllNQVBfREVDKG0sIGFzc2ksIHZhbCkJCQkJXAotCWlmICgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmCQlcCisJKChtKS0+bWFwICE9IE5VTEwgJiYgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYJCVwKIAkgICAgKHZhbCk8PSAobSktPnRvcCAmJiAoKGFzc2kpID0gKG0pLT5tYXBbKHZhbCkgLQlcCiAJICAgIChtKS0+Ym90dG9tXSkgIT0gVU5JSU5WKQogI2RlZmluZSBUUllNQVBfREVDKGNoYXJzZXQsIGFzc2ksIGMxLCBjMikJCQlcCi0JX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbYzFdLCBhc3NpLCBjMikKKwlpZiBfVFJZTUFQX0RFQygmY2hhcnNldCMjX2RlY21hcFtjMV0sIGFzc2ksIGMyKQogCiAjZGVmaW5lIF9UUllNQVBfRU5DX01QTEFORShtLCBhc3NwbGFuZSwgYXNzaGksIGFzc2xvLCB2YWwpCVwKLQlpZiAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJgkJXAorCSgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmCQlcCiAJICAgICh2YWwpPD0gKG0pLT50b3AgJiYJCQkJCVwKIAkgICAgKChhc3NwbGFuZSkgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqM10pICE9IDAgJiYgXAogCSAgICAoKChhc3NoaSkgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqMyArIDFdKSwgMSkgJiYgXAogCSAgICAoKChhc3NsbykgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqMyArIDJdKSwgMSkpCiAjZGVmaW5lIFRSWU1BUF9FTkNfTVBMQU5FKGNoYXJzZXQsIGFzc3BsYW5lLCBhc3NoaSwgYXNzbG8sIHVuaSkJXAotCV9UUllNQVBfRU5DX01QTEFORSgmY2hhcnNldCMjX2VuY21hcFsodW5pKSA+PiA4XSwgXAorCWlmIF9UUllNQVBfRU5DX01QTEFORSgmY2hhcnNldCMjX2VuY21hcFsodW5pKSA+PiA4XSwgXAogCQkJICAgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgKHVuaSkgJiAweGZmKQogI2RlZmluZSBUUllNQVBfREVDX01QTEFORShjaGFyc2V0LCBhc3NpLCBwbGFuZSwgYzEsIGMyKQkJXAotCV9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW3BsYW5lXVtjMV0sIGFzc2ksIGMyKQorCWlmIF9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW3BsYW5lXVtjMV0sIGFzc2ksIGMyKQogCiAjaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKICNkZWZpbmUgREVDT0RFX1NVUlJPR0FURShjKQkJCQkJXApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9kYXRldGltZW1vZHVsZS5jIGIvTW9kdWxlcy9kYXRldGltZW1vZHVsZS5jCmluZGV4IGI1N2NjYmMuLjdmZmEzMTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYworKysgYi9Nb2R1bGVzL2RhdGV0aW1lbW9kdWxlLmMKQEAgLTExNDksOSArMTE0OSw5IEBACiAKIAlQeU9iamVjdCAqbmV3Zm10ID0gTlVMTDsJLyogcHkgc3RyaW5nLCB0aGUgb3V0cHV0IGZvcm1hdCAqLwogCWNoYXIgKnBuZXc7CS8qIHBvaW50ZXIgdG8gYXZhaWxhYmxlIGJ5dGUgaW4gb3V0cHV0IGZvcm1hdCAqLwotCWNoYXIgdG90YWxuZXc7CS8qIG51bWJlciBieXRlcyB0b3RhbCBpbiBvdXRwdXQgZm9ybWF0IGJ1ZmZlciwKKwlpbnQgdG90YWxuZXc7CS8qIG51bWJlciBieXRlcyB0b3RhbCBpbiBvdXRwdXQgZm9ybWF0IGJ1ZmZlciwKIAkJCSAgIGV4Y2x1c2l2ZSBvZiB0cmFpbGluZyBcMCAqLwotCWNoYXIgdXNlZG5ldzsJLyogbnVtYmVyIGJ5dGVzIHVzZWQgc28gZmFyIGluIG91dHB1dCBmb3JtYXQgYnVmZmVyICovCisJaW50IHVzZWRuZXc7CS8qIG51bWJlciBieXRlcyB1c2VkIHNvIGZhciBpbiBvdXRwdXQgZm9ybWF0IGJ1ZmZlciAqLwogCiAJY2hhciAqcHRvYXBwZW5kOyAvKiBwb2ludGVyIHRvIHN0cmluZyB0byBhcHBlbmQgdG8gb3V0cHV0IGJ1ZmZlciAqLwogCWludCBudG9hcHBlbmQ7CS8qICMgb2YgYnl0ZXMgdG8gYXBwZW5kIHRvIG91dHB1dCBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvZGJtbW9kdWxlLmMgYi9Nb2R1bGVzL2RibW1vZHVsZS5jCmluZGV4IGVlNWE3ZjAuLjgzZjVmNDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZGJtbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9kYm1tb2R1bGUuYwpAQCAtMjQ2LDExICsyNDYsMTMgQEAKIHsKIAlkYXR1bSBrZXksIHZhbDsKIAlQeU9iamVjdCAqZGVmdmFsdWUgPSBQeV9Ob25lOworCWNoYXIgKnRtcF9wdHI7CiAJaW50IHRtcF9zaXplOwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3xPOmdldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LmRwdHIsICZ0bXBfc2l6ZSwgJmRlZnZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfcHRyLCAmdG1wX3NpemUsICZkZWZ2YWx1ZSkpCiAJCXJldHVybiBOVUxMOworCWtleS5kcHRyID0gdG1wX3B0cjsKIAlrZXkuZHNpemUgPSB0bXBfc2l6ZTsKICAgICAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwogCXZhbCA9IGRibV9mZXRjaChkcC0+ZGlfZGJtLCBrZXkpOwpAQCAtMjY3LDExICsyNjksMTMgQEAKIHsKIAlkYXR1bSBrZXksIHZhbDsKIAlQeU9iamVjdCAqZGVmdmFsdWUgPSBOVUxMOworCWNoYXIgKnRtcF9wdHI7CiAJaW50IHRtcF9zaXplOwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3xTOnNldGRlZmF1bHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleS5kcHRyLCAmdG1wX3NpemUsICZkZWZ2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wX3B0ciwgJnRtcF9zaXplLCAmZGVmdmFsdWUpKQogCQlyZXR1cm4gTlVMTDsKKwlrZXkuZHB0ciA9IHRtcF9wdHI7CiAJa2V5LmRzaXplID0gdG1wX3NpemU7CiAgICAgICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKIAl2YWwgPSBkYm1fZmV0Y2goZHAtPmRpX2RibSwga2V5KTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2Ntb2R1bGUuYyBiL01vZHVsZXMvZ2Ntb2R1bGUuYwppbmRleCA5OWYyODk3Li4yZGQwNThlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2djbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9nY21vZHVsZS5jCkBAIC0xMTUzLDYgKzExNTMsNyBAQAogImRpc2FibGUoKSAtLSBEaXNhYmxlIGF1dG9tYXRpYyBnYXJiYWdlIGNvbGxlY3Rpb24uXG4iCiAiaXNlbmFibGVkKCkgLS0gUmV0dXJucyB0cnVlIGlmIGF1dG9tYXRpYyBjb2xsZWN0aW9uIGlzIGVuYWJsZWQuXG4iCiAiY29sbGVjdCgpIC0tIERvIGEgZnVsbCBjb2xsZWN0aW9uIHJpZ2h0IG5vdy5cbiIKKyJnZXRfY291bnQoKSAtLSBSZXR1cm4gdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBjb3VudHMuXG4iCiAic2V0X2RlYnVnKCkgLS0gU2V0IGRlYnVnZ2luZyBmbGFncy5cbiIKICJnZXRfZGVidWcoKSAtLSBHZXQgZGVidWdnaW5nIGZsYWdzLlxuIgogInNldF90aHJlc2hvbGQoKSAtLSBTZXQgdGhlIGNvbGxlY3Rpb24gdGhyZXNob2xkcy5cbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCmluZGV4IGQ5MTM4OTAuLjdmY2JiMTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwpAQCAtNjE4LDExICs2MTgsMTUgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0ZWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotCWludCBpLCBuPTI7CisJUHlfc3NpemVfdCBpLCBuPTI7CiAJUHlPYmplY3QgKml0LCAqaXRlcmFibGUsICpjb3B5YWJsZSwgKnJlc3VsdDsKIAotCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xpIiwgJml0ZXJhYmxlLCAmbikpCisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG4iLCAmaXRlcmFibGUsICZuKSkKIAkJcmV0dXJuIE5VTEw7CisJaWYgKG4gPCAwKSB7CisJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibiBtdXN0IGJlID49IDAiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCXJlc3VsdCA9IFB5VHVwbGVfTmV3KG4pOwogCWlmIChyZXN1bHQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMDY4LDcgKzIwNzIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGNvdW50X25leHQoY291bnRvYmplY3QgKmx6KQogewotCXJldHVybiBQeUludF9Gcm9tU2l6ZV90KGx6LT5jbnQrKyk7CisJcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KGx6LT5jbnQrKyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2xpbnV4YXVkaW9kZXYuYyBiL01vZHVsZXMvbGludXhhdWRpb2Rldi5jCmluZGV4IGMxYzczNjMuLmI0MzVkNzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbGludXhhdWRpb2Rldi5jCisrKyBiL01vZHVsZXMvbGludXhhdWRpb2Rldi5jCkBAIC0yOCw3ICsyOCw5IEBACiAjaWYgZGVmaW5lZChsaW51eCkKICNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KIAorI2lmbmRlZiBIQVZFX1NURElOVF9ICiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDMyX3Q7CisjZW5kaWYKIAogI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKICNpbmNsdWRlIDxtYWNoaW5lL3NvdW5kY2FyZC5oPgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tYWluLmMgYi9Nb2R1bGVzL21haW4uYwppbmRleCAzZjM5YzliLi5hYzZiMzhkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL21haW4uYworKysgYi9Nb2R1bGVzL21haW4uYwpAQCAtNTksMzEgKzU5LDMyIEBACiBzdGF0aWMgY2hhciAqdXNhZ2VfMSA9ICJcCiBPcHRpb25zIGFuZCBhcmd1bWVudHMgKGFuZCBjb3JyZXNwb25kaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyk6XG5cCiAtYyBjbWQgOiBwcm9ncmFtIHBhc3NlZCBpbiBhcyBzdHJpbmcgKHRlcm1pbmF0ZXMgb3B0aW9uIGxpc3QpXG5cCi0tZCAgICAgOiBkZWJ1ZyBvdXRwdXQgZnJvbSBwYXJzZXIgKGFsc28gUFlUSE9OREVCVUc9eClcblwKKy1kICAgICA6IGRlYnVnIG91dHB1dCBmcm9tIHBhcnNlcjsgYWxzbyBQWVRIT05ERUJVRz14XG5cCiAtRSAgICAgOiBpZ25vcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIChzdWNoIGFzIFBZVEhPTlBBVEgpXG5cCiAtaCAgICAgOiBwcmludCB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCAoYWxzbyAtLWhlbHApXG5cCi0taSAgICAgOiBpbnNwZWN0IGludGVyYWN0aXZlbHkgYWZ0ZXIgcnVubmluZyBzY3JpcHQsIChhbHNvIFBZVEhPTklOU1BFQ1Q9eClcblwKLSAgICAgICAgIGFuZCBmb3JjZSBwcm9tcHRzLCBldmVuIGlmIHN0ZGluIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHRlcm1pbmFsXG5cCistaSAgICAgOiBpbnNwZWN0IGludGVyYWN0aXZlbHkgYWZ0ZXIgcnVubmluZyBzY3JpcHQ7IGZvcmNlcyBhIHByb21wdCBldmVuXG5cCisgICAgICAgICBpZiBzdGRpbiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB0ZXJtaW5hbDsgYWxzbyBQWVRIT05JTlNQRUNUPXhcblwKICI7CiBzdGF0aWMgY2hhciAqdXNhZ2VfMiA9ICJcCiAtbSBtb2QgOiBydW4gbGlicmFyeSBtb2R1bGUgYXMgYSBzY3JpcHQgKHRlcm1pbmF0ZXMgb3B0aW9uIGxpc3QpXG5cCi0tTyAgICAgOiBvcHRpbWl6ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgKGEgdGFkOyBhbHNvIFBZVEhPTk9QVElNSVpFPXgpXG5cCistTyAgICAgOiBvcHRpbWl6ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgc2xpZ2h0bHk7IGFsc28gUFlUSE9OT1BUSU1JWkU9eFxuXAogLU9PICAgIDogcmVtb3ZlIGRvYy1zdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSAtTyBvcHRpbWl6YXRpb25zXG5cCiAtUyAgICAgOiBkb24ndCBpbXBseSAnaW1wb3J0IHNpdGUnIG9uIGluaXRpYWxpemF0aW9uXG5cCiAtdCAgICAgOiBpc3N1ZSB3YXJuaW5ncyBhYm91dCBpbmNvbnNpc3RlbnQgdGFiIHVzYWdlICgtdHQ6IGlzc3VlIGVycm9ycylcblwKLS11ICAgICA6IHVuYnVmZmVyZWQgYmluYXJ5IHN0ZG91dCBhbmQgc3RkZXJyIChhbHNvIFBZVEhPTlVOQlVGRkVSRUQ9eClcblwKKy11ICAgICA6IHVuYnVmZmVyZWQgYmluYXJ5IHN0ZG91dCBhbmQgc3RkZXJyOyBhbHNvIFBZVEhPTlVOQlVGRkVSRUQ9eFxuXAogIjsKIHN0YXRpYyBjaGFyICp1c2FnZV8zID0gIlwKICAgICAgICAgIHNlZSBtYW4gcGFnZSBmb3IgZGV0YWlscyBvbiBpbnRlcm5hbCBidWZmZXJpbmcgcmVsYXRpbmcgdG8gJy11J1xuXAotLXYgICAgIDogdmVyYm9zZSAodHJhY2UgaW1wb3J0IHN0YXRlbWVudHMpIChhbHNvIFBZVEhPTlZFUkJPU0U9eClcblwKKy12ICAgICA6IHZlcmJvc2UgKHRyYWNlIGltcG9ydCBzdGF0ZW1lbnRzKTsgYWxzbyBQWVRIT05WRVJCT1NFPXhcblwKKyAgICAgICAgIGNhbiBiZSBzdXBwbGllZCBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSB2ZXJib3NpdHlcblwKIC1WICAgICA6IHByaW50IHRoZSBQeXRob24gdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQgKGFsc28gLS12ZXJzaW9uKVxuXAotLVcgYXJnIDogd2FybmluZyBjb250cm9sIChhcmcgaXMgYWN0aW9uOm1lc3NhZ2U6Y2F0ZWdvcnk6bW9kdWxlOmxpbmVubylcblwKKy1XIGFyZyA6IHdhcm5pbmcgY29udHJvbDsgYXJnIGlzIGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lbm9cblwKIC14ICAgICA6IHNraXAgZmlyc3QgbGluZSBvZiBzb3VyY2UsIGFsbG93aW5nIHVzZSBvZiBub24tVW5peCBmb3JtcyBvZiAjIWNtZFxuXAogZmlsZSAgIDogcHJvZ3JhbSByZWFkIGZyb20gc2NyaXB0IGZpbGVcblwKIC0gICAgICA6IHByb2dyYW0gcmVhZCBmcm9tIHN0ZGluIChkZWZhdWx0OyBpbnRlcmFjdGl2ZSBtb2RlIGlmIGEgdHR5KVxuXAogIjsKIHN0YXRpYyBjaGFyICp1c2FnZV80ID0gIlwKLWFyZyAuLi46IGFyZ3VtZW50cyBwYXNzZWQgdG8gcHJvZ3JhbSBpbiBzeXMuYXJndlsxOl1cblwKK2FyZyAuLi46IGFyZ3VtZW50cyBwYXNzZWQgdG8gcHJvZ3JhbSBpbiBzeXMuYXJndlsxOl1cblxuXAogT3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzOlxuXAogUFlUSE9OU1RBUlRVUDogZmlsZSBleGVjdXRlZCBvbiBpbnRlcmFjdGl2ZSBzdGFydHVwIChubyBkZWZhdWx0KVxuXAogUFlUSE9OUEFUSCAgIDogJyVjJy1zZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyBwcmVmaXhlZCB0byB0aGVcblwKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWF0aG1vZHVsZS5jIGIvTW9kdWxlcy9tYXRobW9kdWxlLmMKaW5kZXggNzMxYjFkOS4uNjMyZGZmZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYXRobW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tYXRobW9kdWxlLmMKQEAgLTQ4LDEwICs0OCwxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotbWF0aF8xKFB5T2JqZWN0ICphcmdzLCBkb3VibGUgKCpmdW5jKSAoZG91YmxlKSwgY2hhciAqYXJnc2ZtdCkKK21hdGhfMShQeU9iamVjdCAqYXJnLCBkb3VibGUgKCpmdW5jKSAoZG91YmxlKSkKIHsKLQlkb3VibGUgeDsKLQlpZiAoISAgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdzZm10LCAmeCkpCisJZG91YmxlIHggPSBQeUZsb2F0X0FzRG91YmxlKGFyZyk7CisJaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogCQlyZXR1cm4gTlVMTDsKIAllcnJubyA9IDA7CiAJUHlGUEVfU1RBUlRfUFJPVEVDVCgiaW4gbWF0aF8xIiwgcmV0dXJuIDApCkBAIC02NSwxMCArNjUsMTUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLW1hdGhfMihQeU9iamVjdCAqYXJncywgZG91YmxlICgqZnVuYykgKGRvdWJsZSwgZG91YmxlKSwgY2hhciAqYXJnc2ZtdCkKK21hdGhfMihQeU9iamVjdCAqYXJncywgZG91YmxlICgqZnVuYykgKGRvdWJsZSwgZG91YmxlKSwgY2hhciAqZnVuY25hbWUpCiB7CisJUHlPYmplY3QgKm94LCAqb3k7CiAJZG91YmxlIHgsIHk7Ci0JaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdzZm10LCAmeCwgJnkpKQorCWlmICghIFB5QXJnX1VucGFja1R1cGxlKGFyZ3MsIGZ1bmNuYW1lLCAyLCAyLCAmb3gsICZveSkpCisJCXJldHVybiBOVUxMOworCXggPSBQeUZsb2F0X0FzRG91YmxlKG94KTsKKwl5ID0gUHlGbG9hdF9Bc0RvdWJsZShveSk7CisJaWYgKCh4ID09IC0xLjAgfHwgeSA9PSAtMS4wKSAmJiBQeUVycl9PY2N1cnJlZCgpKQogCQlyZXR1cm4gTlVMTDsKIAllcnJubyA9IDA7CiAJUHlGUEVfU1RBUlRfUFJPVEVDVCgiaW4gbWF0aF8yIiwgcmV0dXJuIDApCkBAIC04MywxMyArODgsMTMgQEAKIAogI2RlZmluZSBGVU5DMShmdW5jbmFtZSwgZnVuYywgZG9jc3RyaW5nKSBcCiAJc3RhdGljIFB5T2JqZWN0ICogbWF0aF8jI2Z1bmNuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgeyBcCi0JCXJldHVybiBtYXRoXzEoYXJncywgZnVuYywgImQ6IiAjZnVuY25hbWUpOyBcCisJCXJldHVybiBtYXRoXzEoYXJncywgZnVuYyk7IFwKIAl9XAogICAgICAgICBQeURvY19TVFJWQVIobWF0aF8jI2Z1bmNuYW1lIyNfZG9jLCBkb2NzdHJpbmcpOwogCiAjZGVmaW5lIEZVTkMyKGZ1bmNuYW1lLCBmdW5jLCBkb2NzdHJpbmcpIFwKIAlzdGF0aWMgUHlPYmplY3QgKiBtYXRoXyMjZnVuY25hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSB7IFwKLQkJcmV0dXJuIG1hdGhfMihhcmdzLCBmdW5jLCAiZGQ6IiAjZnVuY25hbWUpOyBcCisJCXJldHVybiBtYXRoXzIoYXJncywgZnVuYywgI2Z1bmNuYW1lKTsgXAogCX1cCiAgICAgICAgIFB5RG9jX1NUUlZBUihtYXRoXyMjZnVuY25hbWUjI19kb2MsIGRvY3N0cmluZyk7CiAKQEAgLTEzNSwxMSArMTQwLDExIEBACiAgICAgICAidGFuaCh4KVxuXG5SZXR1cm4gdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiB4LiIpCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1tYXRoX2ZyZXhwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK21hdGhfZnJleHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCiB7Ci0JZG91YmxlIHg7CiAJaW50IGk7Ci0JaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZDpmcmV4cCIsICZ4KSkKKwlkb3VibGUgeCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKKwlpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAJCXJldHVybiBOVUxMOwogCWVycm5vID0gMDsKIAl4ID0gZnJleHAoeCwgJmkpOwpAQCAtMTc5LDEwICsxODQsMTAgQEAKICJsZGV4cCh4LCBpKSAtPiB4ICogKDIqKmkpIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1tYXRoX21vZGYoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorbWF0aF9tb2RmKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewotCWRvdWJsZSB4LCB5OwotCWlmICghIFB5QXJnX1BhcnNlVHVwbGUoYXJncywgImQ6bW9kZiIsICZ4KSkKKwlkb3VibGUgeSwgeCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKKwlpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAJCXJldHVybiBOVUxMOwogCWVycm5vID0gMDsKIAl4ID0gbW9kZih4LCAmeSk7CkBAIC0yMDgsNyArMjEzLDcgQEAKICovCiAKIHN0YXRpYyBQeU9iamVjdCoKLWxvZ2hlbHBlcihQeU9iamVjdCogYXJncywgZG91YmxlICgqZnVuYykoZG91YmxlKSwgY2hhciAqZm9ybWF0LCBQeU9iamVjdCAqYXJnKQorbG9naGVscGVyKFB5T2JqZWN0KiBhcmcsIGRvdWJsZSAoKmZ1bmMpKGRvdWJsZSksIGNoYXIgKmZ1bmNuYW1lKQogewogCS8qIElmIGl0IGlzIGxvbmcsIGRvIGl0IG91cnNlbHZlcy4gKi8KIAlpZiAoUHlMb25nX0NoZWNrKGFyZykpIHsKQEAgLTIyOSw3ICsyMzQsNyBAQAogCX0KIAogCS8qIEVsc2UgbGV0IGxpYm0gaGFuZGxlIGl0IGJ5IGl0c2VsZi4gKi8KLQlyZXR1cm4gbWF0aF8xKGFyZ3MsIGZ1bmMsIGZvcm1hdCk7CisJcmV0dXJuIG1hdGhfMShhcmcsIGZ1bmMpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjM5LDI4ICsyNDQsMTUgQEAKIAlQeU9iamVjdCAqYmFzZSA9IE5VTEw7CiAJUHlPYmplY3QgKm51bSwgKmRlbjsKIAlQeU9iamVjdCAqYW5zOwotCVB5T2JqZWN0ICpuZXdhcmdzOwogCiAJaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAibG9nIiwgMSwgMiwgJmFyZywgJmJhc2UpKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAoYmFzZSA9PSBOVUxMKQotCQlyZXR1cm4gbG9naGVscGVyKGFyZ3MsIGxvZywgImQ6bG9nIiwgYXJnKTsKIAotCW5ld2FyZ3MgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKLQlpZiAobmV3YXJncyA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQludW0gPSBsb2doZWxwZXIobmV3YXJncywgbG9nLCAiZDpsb2ciLCBhcmcpOwotCVB5X0RFQ1JFRihuZXdhcmdzKTsKLQlpZiAobnVtID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCW51bSA9IGxvZ2hlbHBlcihhcmcsIGxvZywgImxvZyIpOworCWlmIChudW0gPT0gTlVMTCB8fCBiYXNlID09IE5VTEwpCisJCXJldHVybiBudW07CiAKLQluZXdhcmdzID0gUHlUdXBsZV9QYWNrKDEsIGJhc2UpOwotCWlmIChuZXdhcmdzID09IE5VTEwpIHsKLQkJUHlfREVDUkVGKG51bSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlkZW4gPSBsb2doZWxwZXIobmV3YXJncywgbG9nLCAiZDpsb2ciLCBiYXNlKTsKLQlQeV9ERUNSRUYobmV3YXJncyk7CisJZGVuID0gbG9naGVscGVyKGJhc2UsIGxvZywgImxvZyIpOwogCWlmIChkZW4gPT0gTlVMTCkgewogCQlQeV9ERUNSRUYobnVtKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNzcsMjUgKzI2OSwyMyBAQAogSWYgdGhlIGJhc2Ugbm90IHNwZWNpZmllZCwgcmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gKGJhc2UgZSkgb2YgeC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLW1hdGhfbG9nMTAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorbWF0aF9sb2cxMChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKIHsKLQlQeU9iamVjdCAqYXJnOwotCi0JaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAibG9nMTAiLCAxLCAxLCAmYXJnKSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGxvZ2hlbHBlcihhcmdzLCBsb2cxMCwgImQ6bG9nMTAiLCBhcmcpOworCXJldHVybiBsb2doZWxwZXIoYXJnLCBsb2cxMCwgImxvZzEwIik7CiB9CiAKIFB5RG9jX1NUUlZBUihtYXRoX2xvZzEwX2RvYywKICJsb2cxMCh4KSAtPiB0aGUgYmFzZSAxMCBsb2dhcml0aG0gb2YgeC4iKTsKIAorLyogWFhYKG5ub3J3aXR6KTogU2hvdWxkIHdlIHVzZSB0aGUgcGxhdGZvcm0gTV9QSSBvciBzb21ldGhpbmcgbW9yZSBhY2N1cmF0ZQorICAgbGlrZTogMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4OCAqLwogc3RhdGljIGNvbnN0IGRvdWJsZSBkZWdUb1JhZCA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzIC8gMTgwLjA7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1tYXRoX2RlZ3JlZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorbWF0aF9kZWdyZWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewotCWRvdWJsZSB4OwotCWlmICghIFB5QXJnX1BhcnNlVHVwbGUoYXJncywgImQ6ZGVncmVlcyIsICZ4KSkKKwlkb3VibGUgeCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKKwlpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAJCXJldHVybiBOVUxMOwogCXJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeCAvIGRlZ1RvUmFkKTsKIH0KQEAgLTMwNCwxMCArMjk0LDEwIEBACiAiZGVncmVlcyh4KSAtPiBjb252ZXJ0cyBhbmdsZSB4IGZyb20gcmFkaWFucyB0byBkZWdyZWVzIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1tYXRoX3JhZGlhbnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorbWF0aF9yYWRpYW5zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewotCWRvdWJsZSB4OwotCWlmICghIFB5QXJnX1BhcnNlVHVwbGUoYXJncywgImQ6cmFkaWFucyIsICZ4KSkKKwlkb3VibGUgeCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKKwlpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAJCXJldHVybiBOVUxMOwogCXJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeCAqIGRlZ1RvUmFkKTsKIH0KQEAgLTMxNiwzMSArMzA2LDMxIEBACiAicmFkaWFucyh4KSAtPiBjb252ZXJ0cyBhbmdsZSB4IGZyb20gZGVncmVlcyB0byByYWRpYW5zIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtYXRoX21ldGhvZHNbXSA9IHsKLQl7ImFjb3MiLAltYXRoX2Fjb3MsCU1FVEhfVkFSQVJHUywJbWF0aF9hY29zX2RvY30sCi0JeyJhc2luIiwJbWF0aF9hc2luLAlNRVRIX1ZBUkFSR1MsCW1hdGhfYXNpbl9kb2N9LAotCXsiYXRhbiIsCW1hdGhfYXRhbiwJTUVUSF9WQVJBUkdTLAltYXRoX2F0YW5fZG9jfSwKKwl7ImFjb3MiLAltYXRoX2Fjb3MsCU1FVEhfTywJCW1hdGhfYWNvc19kb2N9LAorCXsiYXNpbiIsCW1hdGhfYXNpbiwJTUVUSF9PLAkJbWF0aF9hc2luX2RvY30sCisJeyJhdGFuIiwJbWF0aF9hdGFuLAlNRVRIX08sCQltYXRoX2F0YW5fZG9jfSwKIAl7ImF0YW4yIiwJbWF0aF9hdGFuMiwJTUVUSF9WQVJBUkdTLAltYXRoX2F0YW4yX2RvY30sCi0JeyJjZWlsIiwJbWF0aF9jZWlsLAlNRVRIX1ZBUkFSR1MsCW1hdGhfY2VpbF9kb2N9LAotCXsiY29zIiwJCW1hdGhfY29zLAlNRVRIX1ZBUkFSR1MsCW1hdGhfY29zX2RvY30sCi0JeyJjb3NoIiwJbWF0aF9jb3NoLAlNRVRIX1ZBUkFSR1MsCW1hdGhfY29zaF9kb2N9LAotCXsiZGVncmVlcyIsCW1hdGhfZGVncmVlcywJTUVUSF9WQVJBUkdTLAltYXRoX2RlZ3JlZXNfZG9jfSwKLQl7ImV4cCIsCQltYXRoX2V4cCwJTUVUSF9WQVJBUkdTLAltYXRoX2V4cF9kb2N9LAotCXsiZmFicyIsCW1hdGhfZmFicywJTUVUSF9WQVJBUkdTLAltYXRoX2ZhYnNfZG9jfSwKLQl7ImZsb29yIiwJbWF0aF9mbG9vciwJTUVUSF9WQVJBUkdTLAltYXRoX2Zsb29yX2RvY30sCisJeyJjZWlsIiwJbWF0aF9jZWlsLAlNRVRIX08sCQltYXRoX2NlaWxfZG9jfSwKKwl7ImNvcyIsCQltYXRoX2NvcywJTUVUSF9PLAkJbWF0aF9jb3NfZG9jfSwKKwl7ImNvc2giLAltYXRoX2Nvc2gsCU1FVEhfTywJCW1hdGhfY29zaF9kb2N9LAorCXsiZGVncmVlcyIsCW1hdGhfZGVncmVlcywJTUVUSF9PLAkJbWF0aF9kZWdyZWVzX2RvY30sCisJeyJleHAiLAkJbWF0aF9leHAsCU1FVEhfTywJCW1hdGhfZXhwX2RvY30sCisJeyJmYWJzIiwJbWF0aF9mYWJzLAlNRVRIX08sCQltYXRoX2ZhYnNfZG9jfSwKKwl7ImZsb29yIiwJbWF0aF9mbG9vciwJTUVUSF9PLAkJbWF0aF9mbG9vcl9kb2N9LAogCXsiZm1vZCIsCW1hdGhfZm1vZCwJTUVUSF9WQVJBUkdTLAltYXRoX2Ztb2RfZG9jfSwKLQl7ImZyZXhwIiwJbWF0aF9mcmV4cCwJTUVUSF9WQVJBUkdTLAltYXRoX2ZyZXhwX2RvY30sCisJeyJmcmV4cCIsCW1hdGhfZnJleHAsCU1FVEhfTywJCW1hdGhfZnJleHBfZG9jfSwKIAl7Imh5cG90IiwJbWF0aF9oeXBvdCwJTUVUSF9WQVJBUkdTLAltYXRoX2h5cG90X2RvY30sCiAJeyJsZGV4cCIsCW1hdGhfbGRleHAsCU1FVEhfVkFSQVJHUywJbWF0aF9sZGV4cF9kb2N9LAogCXsibG9nIiwJCW1hdGhfbG9nLAlNRVRIX1ZBUkFSR1MsCW1hdGhfbG9nX2RvY30sCi0JeyJsb2cxMCIsCW1hdGhfbG9nMTAsCU1FVEhfVkFSQVJHUywJbWF0aF9sb2cxMF9kb2N9LAotCXsibW9kZiIsCW1hdGhfbW9kZiwJTUVUSF9WQVJBUkdTLAltYXRoX21vZGZfZG9jfSwKKwl7ImxvZzEwIiwJbWF0aF9sb2cxMCwJTUVUSF9PLAkJbWF0aF9sb2cxMF9kb2N9LAorCXsibW9kZiIsCW1hdGhfbW9kZiwJTUVUSF9PLAkJbWF0aF9tb2RmX2RvY30sCiAJeyJwb3ciLAkJbWF0aF9wb3csCU1FVEhfVkFSQVJHUywJbWF0aF9wb3dfZG9jfSwKLQl7InJhZGlhbnMiLAltYXRoX3JhZGlhbnMsCU1FVEhfVkFSQVJHUywJbWF0aF9yYWRpYW5zX2RvY30sCi0JeyJzaW4iLAkJbWF0aF9zaW4sCU1FVEhfVkFSQVJHUywJbWF0aF9zaW5fZG9jfSwKLQl7InNpbmgiLAltYXRoX3NpbmgsCU1FVEhfVkFSQVJHUywJbWF0aF9zaW5oX2RvY30sCi0JeyJzcXJ0IiwJbWF0aF9zcXJ0LAlNRVRIX1ZBUkFSR1MsCW1hdGhfc3FydF9kb2N9LAotCXsidGFuIiwJCW1hdGhfdGFuLAlNRVRIX1ZBUkFSR1MsCW1hdGhfdGFuX2RvY30sCi0JeyJ0YW5oIiwJbWF0aF90YW5oLAlNRVRIX1ZBUkFSR1MsCW1hdGhfdGFuaF9kb2N9LAorCXsicmFkaWFucyIsCW1hdGhfcmFkaWFucywJTUVUSF9PLAkJbWF0aF9yYWRpYW5zX2RvY30sCisJeyJzaW4iLAkJbWF0aF9zaW4sCU1FVEhfTywJCW1hdGhfc2luX2RvY30sCisJeyJzaW5oIiwJbWF0aF9zaW5oLAlNRVRIX08sCQltYXRoX3NpbmhfZG9jfSwKKwl7InNxcnQiLAltYXRoX3NxcnQsCU1FVEhfTywJCW1hdGhfc3FydF9kb2N9LAorCXsidGFuIiwJCW1hdGhfdGFuLAlNRVRIX08sCQltYXRoX3Rhbl9kb2N9LAorCXsidGFuaCIsCW1hdGhfdGFuaCwJTUVUSF9PLAkJbWF0aF90YW5oX2RvY30sCiAJe05VTEwsCQlOVUxMfQkJLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM1OCw2ICszNDgsOCBAQAogCWlmIChtID09IE5VTEwpCiAJCWdvdG8gZmluYWxseTsKIAlkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKKwlpZiAoZCA9PSBOVUxMKQorCQlnb3RvIGZpbmFsbHk7CiAKICAgICAgICAgaWYgKCEodiA9IFB5RmxvYXRfRnJvbURvdWJsZShhdGFuKDEuMCkgKiA0LjApKSkKICAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21tYXBtb2R1bGUuYyBiL01vZHVsZXMvbW1hcG1vZHVsZS5jCmluZGV4IGE3MjhkM2QuLmQzOTE2OWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbW1hcG1vZHVsZS5jCisrKyBiL01vZHVsZXMvbW1hcG1vZHVsZS5jCkBAIC00NzAsNyArNDcwLDcgQEAKIG1tYXBfdGVsbF9tZXRob2QobW1hcF9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAJQ0hFQ0tfVkFMSUQoTlVMTCk7Ci0JcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSBzZWxmLT5wb3MpOworCXJldHVybiBQeUludF9Gcm9tU2l6ZV90KHNlbGYtPnBvcyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMgYi9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKaW5kZXggOTcxNjgzOC4uZWI1OWM0ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCisrKyBiL01vZHVsZXMvb3NzYXVkaW9kZXYuYwpAQCAtMzQsNyArMzQsOSBAQAogCiAjaWYgZGVmaW5lZChsaW51eCkKIAorI2lmbmRlZiBIQVZFX1NURElOVF9ICiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDMyX3Q7CisjZW5kaWYKIAogI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKaW5kZXggMzkzOTRhNS4uNzgxODBiMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCkBAIC03NCw3ICs3NCw4IEBACiBub2RlMnR1cGxlKG5vZGUgKm4sICAgICAgICAgICAgICAgICAgICAgLyogbm9kZSB0byBjb252ZXJ0ICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgU2VxTWFrZXIgbWtzZXEsICAgICAgICAgICAgICAvKiBjcmVhdGUgc2VxdWVuY2UgICAgICAgICAgICAgICAqLwogICAgICAgICAgICBTZXFJbnNlcnRlciBhZGRlbGVtLCAgICAgICAgIC8qIGZ1bmMuIHRvIGFkZCBlbGVtLiBpbiBzZXEuICAgICovCi0gICAgICAgICAgIGludCBsaW5lbm8pICAgICAgICAgICAgICAgICAgLyogaW5jbHVkZSBsaW5lIG51bWJlcnM/ICAgICAgICAgKi8KKyAgICAgICAgICAgaW50IGxpbmVubywgICAgICAgICAgICAgICAgICAvKiBpbmNsdWRlIGxpbmUgbnVtYmVycz8gICAgICAgICAqLworICAgICAgICAgICBpbnQgY29sX29mZnNldCkgICAgICAgICAgICAgIC8qIGluY2x1ZGUgY29sdW1uIG9mZnNldHM/ICAgICAgICovCiB7CiAgICAgaWYgKG4gPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CkBAIC05NSw3ICs5Niw3IEBACiAgICAgICAgIH0KICAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgMCwgdyk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkrKykgewotICAgICAgICAgICAgdyA9IG5vZGUydHVwbGUoQ0hJTEQobiwgaSksIG1rc2VxLCBhZGRlbGVtLCBsaW5lbm8pOworICAgICAgICAgICAgdyA9IG5vZGUydHVwbGUoQ0hJTEQobiwgaSksIG1rc2VxLCBhZGRlbGVtLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwpAQCAtMTA4LDEyICsxMDksMTQgQEAKICAgICAgICAgcmV0dXJuICh2KTsKICAgICB9CiAgICAgZWxzZSBpZiAoSVNURVJNSU5BTChUWVBFKG4pKSkgewotICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gbWtzZXEoMiArIGxpbmVubyk7CisgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBta3NlcSgyICsgbGluZW5vICsgY29sX29mZnNldCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewogICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAwLCBQeUludF9Gcm9tTG9uZyhUWVBFKG4pKSk7CiAgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDEsIFB5U3RyaW5nX0Zyb21TdHJpbmcoU1RSKG4pKSk7CiAgICAgICAgICAgICBpZiAobGluZW5vID09IDEpCiAgICAgICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAyLCBQeUludF9Gcm9tTG9uZyhuLT5uX2xpbmVubykpOworICAgICAgICAgICAgaWYgKGNvbF9vZmZzZXQgPT0gMSkKKyAgICAgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDMsIFB5SW50X0Zyb21Mb25nKG4tPm5fY29sX29mZnNldCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAocmVzdWx0KTsKICAgICB9CkBAIC0yODksMjkgKzI5MiwzNSBAQAogcGFyc2VyX3N0MnR1cGxlKFB5U1RfT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQogewogICAgIFB5T2JqZWN0ICpsaW5lX29wdGlvbiA9IDA7CisgICAgUHlPYmplY3QgKmNvbF9vcHRpb24gPSAwOwogICAgIFB5T2JqZWN0ICpyZXMgPSAwOwogICAgIGludCBvazsKIAotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJhc3QiLCAibGluZV9pbmZvIiwgTlVMTH07CisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImFzdCIsICJsaW5lX2luZm8iLCAiY29sX2luZm8iLCBOVUxMfTsKIAogICAgIGlmIChzZWxmID09IE5VTEwpIHsKLSAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPIXxPOnN0MnR1cGxlIiwga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVNUX1R5cGUsICZzZWxmLCAmbGluZV9vcHRpb24pOworICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk8hfE9POnN0MnR1cGxlIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVNUX1R5cGUsICZzZWxmLCAmbGluZV9vcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb2xfb3B0aW9uKTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOnRvdHVwbGUiLCAma2V5d29yZHNbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lX29wdGlvbik7CisgICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE9POnRvdHVwbGUiLCAma2V5d29yZHNbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lX29wdGlvbiwgJmNvbF9vcHRpb24pOwogICAgIGlmIChvayAhPSAwKSB7CiAgICAgICAgIGludCBsaW5lbm8gPSAwOworICAgICAgICBpbnQgY29sX29mZnNldCA9IDA7CiAgICAgICAgIGlmIChsaW5lX29wdGlvbiAhPSBOVUxMKSB7CiAgICAgICAgICAgICBsaW5lbm8gPSAoUHlPYmplY3RfSXNUcnVlKGxpbmVfb3B0aW9uKSAhPSAwKSA/IDEgOiAwOwogICAgICAgICB9CisgICAgICAgIGlmIChjb2xfb3B0aW9uICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbF9vZmZzZXQgPSAoUHlPYmplY3RfSXNUcnVlKGNvbF9vcHRpb24pICE9IDApID8gMSA6IDA7CisgICAgICAgIH0KICAgICAgICAgLyoKICAgICAgICAgICogIENvbnZlcnQgU1QgaW50byBhIHR1cGxlIHJlcHJlc2VudGF0aW9uLiAgVXNlIEd1aWRvJ3MgZnVuY3Rpb24sCiAgICAgICAgICAqICBzaW5jZSBpdCdzIGtub3duIHRvIHdvcmsgYWxyZWFkeS4KICAgICAgICAgICovCiAgICAgICAgIHJlcyA9IG5vZGUydHVwbGUoKChQeVNUX09iamVjdCopc2VsZiktPnN0X25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9OZXcsIFB5VHVwbGVfU2V0SXRlbSwgbGluZW5vKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX05ldywgUHlUdXBsZV9TZXRJdGVtLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgIH0KICAgICByZXR1cm4gKHJlcyk7CiB9CkBAIC0zMjcsMjggKzMzNiwzNCBAQAogcGFyc2VyX3N0Mmxpc3QoUHlTVF9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpCiB7CiAgICAgUHlPYmplY3QgKmxpbmVfb3B0aW9uID0gMDsKKyAgICBQeU9iamVjdCAqY29sX29wdGlvbiA9IDA7CiAgICAgUHlPYmplY3QgKnJlcyA9IDA7CiAgICAgaW50IG9rOwogCi0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImFzdCIsICJsaW5lX2luZm8iLCBOVUxMfTsKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsiYXN0IiwgImxpbmVfaW5mbyIsICJjb2xfaW5mbyIsIE5VTEx9OwogCiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKLSAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPIXxPOnN0Mmxpc3QiLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5U1RfVHlwZSwgJnNlbGYsICZsaW5lX29wdGlvbik7CisgICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiTyF8T086c3QybGlzdCIsIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlTVF9UeXBlLCAmc2VsZiwgJmxpbmVfb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29sX29wdGlvbik7CiAgICAgZWxzZQotICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOnRvbGlzdCIsICZrZXl3b3Jkc1sxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmVfb3B0aW9uKTsKKyAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8T086dG9saXN0IiwgJmtleXdvcmRzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGluZV9vcHRpb24sICZjb2xfb3B0aW9uKTsKICAgICBpZiAob2spIHsKICAgICAgICAgaW50IGxpbmVubyA9IDA7CisgICAgICAgIGludCBjb2xfb2Zmc2V0ID0gMDsKICAgICAgICAgaWYgKGxpbmVfb3B0aW9uICE9IDApIHsKICAgICAgICAgICAgIGxpbmVubyA9IFB5T2JqZWN0X0lzVHJ1ZShsaW5lX29wdGlvbikgPyAxIDogMDsKICAgICAgICAgfQorICAgICAgICBpZiAoY29sX29wdGlvbiAhPSBOVUxMKSB7CisgICAgICAgICAgICBjb2xfb2Zmc2V0ID0gKFB5T2JqZWN0X0lzVHJ1ZShjb2xfb3B0aW9uKSAhPSAwKSA/IDEgOiAwOworICAgICAgICB9CiAgICAgICAgIC8qCiAgICAgICAgICAqICBDb252ZXJ0IFNUIGludG8gYSB0dXBsZSByZXByZXNlbnRhdGlvbi4gIFVzZSBHdWlkbydzIGZ1bmN0aW9uLAogICAgICAgICAgKiAgc2luY2UgaXQncyBrbm93biB0byB3b3JrIGFscmVhZHkuCiAgICAgICAgICAqLwogICAgICAgICByZXMgPSBub2RlMnR1cGxlKHNlbGYtPnN0X25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X05ldywgUHlMaXN0X1NldEl0ZW0sIGxpbmVubyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X05ldywgUHlMaXN0X1NldEl0ZW0sIGxpbmVubywgY29sX29mZnNldCk7CiAgICAgfQogICAgIHJldHVybiAocmVzKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwppbmRleCA1YzY3YmU2Li4zMjYwYzNkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCkBAIC03OTIsNyArNzkyLDcgQEAKIAkvKiBYWFggZW5kaWFubmVzcyAqLwogCV9faW50NjQgb3V0OwogCW91dCA9IHRpbWVfaW4gKyBzZWNzX2JldHdlZW5fZXBvY2hzOwotCW91dCA9IG91dCAqIDEwMDAwMDAwICsgbnNlY19pbjsKKwlvdXQgPSBvdXQgKiAxMDAwMDAwMCArIG5zZWNfaW4gLyAxMDA7CiAJbWVtY3B5KG91dF9wdHIsICZvdXQsIHNpemVvZihvdXQpKTsKIH0KIApAQCAtODI4LDYgKzgyOCwxMDYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogRW11bGF0ZSBHZXRGaWxlQXR0cmlidXRlc0V4W0FXXSBvbiBXaW5kb3dzIDk1ICovCitzdGF0aWMgaW50IGNoZWNrZWQgPSAwOworc3RhdGljIEJPT0wgKENBTExCQUNLICpnZmF4YSkoTFBDU1RSLCBHRVRfRklMRUVYX0lORk9fTEVWRUxTLCBMUFZPSUQpOworc3RhdGljIEJPT0wgKENBTExCQUNLICpnZmF4dykoTFBDV1NUUiwgR0VUX0ZJTEVFWF9JTkZPX0xFVkVMUywgTFBWT0lEKTsKK3N0YXRpYyB2b2lkCitjaGVja19nZmF4KCkKK3sKKwlISU5TVEFOQ0UgaEtlcm5lbDMyOworCWlmIChjaGVja2VkKQorCSAgICByZXR1cm47CisJY2hlY2tlZCA9IDE7CisJaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlKCJLRVJORUwzMiIpOworCSooRkFSUFJPQyopJmdmYXhhID0gR2V0UHJvY0FkZHJlc3MoaEtlcm5lbDMyLCAiR2V0RmlsZUF0dHJpYnV0ZXNFeEEiKTsKKwkqKEZBUlBST0MqKSZnZmF4dyA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwgIkdldEZpbGVBdHRyaWJ1dGVzRXhXIik7Cit9CisKK3N0YXRpYyBCT09MIFdJTkFQSQorUHlfR2V0RmlsZUF0dHJpYnV0ZXNFeEEoTFBDU1RSIHBzekZpbGUsIAorCQkgICAgICAgR0VUX0ZJTEVFWF9JTkZPX0xFVkVMUyBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIHB2KQoreworCUJPT0wgcmVzdWx0OworCUhBTkRMRSBoRmluZEZpbGU7CisJV0lOMzJfRklORF9EQVRBQSBGaWxlRGF0YTsKKwlMUFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgcGZhZCA9IHB2OworCS8qIEZpcnN0IHRyeSB0byB1c2UgdGhlIHN5c3RlbSdzIGltcGxlbWVudGF0aW9uLCBpZiB0aGF0IGlzCisJICAgYXZhaWxhYmxlIGFuZCBlaXRoZXIgc3VjY2VlZHMgdG8gZ2l2ZXMgYW4gZXJyb3Igb3RoZXIgdGhhbgorCSAgIHRoYXQgaXQgaXNuJ3QgaW1wbGVtZW50ZWQuICovCisJY2hlY2tfZ2ZheCgpOworCWlmIChnZmF4YSkgeworCQlyZXN1bHQgPSBnZmF4YShwc3pGaWxlLCBsZXZlbCwgcHYpOworCQlpZiAocmVzdWx0IHx8IEdldExhc3RFcnJvcigpICE9IEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEKQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9CisJLyogSXQncyBlaXRoZXIgbm90IHByZXNlbnQsIG9yIG5vdCBpbXBsZW1lbnRlZC4KKwkgICBFbXVsYXRlIHVzaW5nIEZpbmRGaXJzdEZpbGUuICovCisJaWYgKGxldmVsICE9IEdldEZpbGVFeEluZm9TdGFuZGFyZCkgeworCQlTZXRMYXN0RXJyb3IoRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCS8qIFVzZSBHZXRGaWxlQXR0cmlidXRlcyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWxlIG5hbWUKKwkgICBkb2VzIG5vdCBjb250YWluIHdpbGRjYXJkcyAod2hpY2ggRmluZEZpcnN0RmlsZSB3b3VsZAorCSAgIGFjY2VwdCkuICovCisJaWYgKEdldEZpbGVBdHRyaWJ1dGVzQShwc3pGaWxlKSA9PSAweEZGRkZGRkZGKQorCQlyZXR1cm4gRkFMU0U7CisJaEZpbmRGaWxlID0gRmluZEZpcnN0RmlsZUEocHN6RmlsZSwgJkZpbGVEYXRhKTsKKwlpZiAoaEZpbmRGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlyZXR1cm4gRkFMU0U7CisJRmluZENsb3NlKGhGaW5kRmlsZSk7CisJcGZhZC0+ZHdGaWxlQXR0cmlidXRlcyA9IEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXM7CisJcGZhZC0+ZnRDcmVhdGlvblRpbWUgICA9IEZpbGVEYXRhLmZ0Q3JlYXRpb25UaW1lOworCXBmYWQtPmZ0TGFzdEFjY2Vzc1RpbWUgPSBGaWxlRGF0YS5mdExhc3RBY2Nlc3NUaW1lOworCXBmYWQtPmZ0TGFzdFdyaXRlVGltZSAgPSBGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWU7CisJcGZhZC0+bkZpbGVTaXplSGlnaCAgICA9IEZpbGVEYXRhLm5GaWxlU2l6ZUhpZ2g7CisJcGZhZC0+bkZpbGVTaXplTG93ICAgICA9IEZpbGVEYXRhLm5GaWxlU2l6ZUxvdzsKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIEJPT0wgV0lOQVBJCitQeV9HZXRGaWxlQXR0cmlidXRlc0V4VyhMUENXU1RSIHBzekZpbGUsIAorCQkgICAgICAgR0VUX0ZJTEVFWF9JTkZPX0xFVkVMUyBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIHB2KQoreworCUJPT0wgcmVzdWx0OworCUhBTkRMRSBoRmluZEZpbGU7CisJV0lOMzJfRklORF9EQVRBVyBGaWxlRGF0YTsKKwlMUFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgcGZhZCA9IHB2OworCS8qIEZpcnN0IHRyeSB0byB1c2UgdGhlIHN5c3RlbSdzIGltcGxlbWVudGF0aW9uLCBpZiB0aGF0IGlzCisJICAgYXZhaWxhYmxlIGFuZCBlaXRoZXIgc3VjY2VlZHMgdG8gZ2l2ZXMgYW4gZXJyb3Igb3RoZXIgdGhhbgorCSAgIHRoYXQgaXQgaXNuJ3QgaW1wbGVtZW50ZWQuICovCisJY2hlY2tfZ2ZheCgpOworCWlmIChnZmF4YSkgeworCQlyZXN1bHQgPSBnZmF4dyhwc3pGaWxlLCBsZXZlbCwgcHYpOworCQlpZiAocmVzdWx0IHx8IEdldExhc3RFcnJvcigpICE9IEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEKQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9CisJLyogSXQncyBlaXRoZXIgbm90IHByZXNlbnQsIG9yIG5vdCBpbXBsZW1lbnRlZC4KKwkgICBFbXVsYXRlIHVzaW5nIEZpbmRGaXJzdEZpbGUuICovCisJaWYgKGxldmVsICE9IEdldEZpbGVFeEluZm9TdGFuZGFyZCkgeworCQlTZXRMYXN0RXJyb3IoRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCS8qIFVzZSBHZXRGaWxlQXR0cmlidXRlcyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWxlIG5hbWUKKwkgICBkb2VzIG5vdCBjb250YWluIHdpbGRjYXJkcyAod2hpY2ggRmluZEZpcnN0RmlsZSB3b3VsZAorCSAgIGFjY2VwdCkuICovCisJaWYgKEdldEZpbGVBdHRyaWJ1dGVzVyhwc3pGaWxlKSA9PSAweEZGRkZGRkZGKQorCQlyZXR1cm4gRkFMU0U7CisJaEZpbmRGaWxlID0gRmluZEZpcnN0RmlsZVcocHN6RmlsZSwgJkZpbGVEYXRhKTsKKwlpZiAoaEZpbmRGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlyZXR1cm4gRkFMU0U7CisJRmluZENsb3NlKGhGaW5kRmlsZSk7CisJcGZhZC0+ZHdGaWxlQXR0cmlidXRlcyA9IEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXM7CisJcGZhZC0+ZnRDcmVhdGlvblRpbWUgICA9IEZpbGVEYXRhLmZ0Q3JlYXRpb25UaW1lOworCXBmYWQtPmZ0TGFzdEFjY2Vzc1RpbWUgPSBGaWxlRGF0YS5mdExhc3RBY2Nlc3NUaW1lOworCXBmYWQtPmZ0TGFzdFdyaXRlVGltZSAgPSBGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWU7CisJcGZhZC0+bkZpbGVTaXplSGlnaCAgICA9IEZpbGVEYXRhLm5GaWxlU2l6ZUhpZ2g7CisJcGZhZC0+bkZpbGVTaXplTG93ICAgICA9IEZpbGVEYXRhLm5GaWxlU2l6ZUxvdzsKKwlyZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIGludCAKIHdpbjMyX3N0YXQoY29uc3QgY2hhciogcGF0aCwgc3RydWN0IHdpbjMyX3N0YXQgKnJlc3VsdCkKIHsKQEAgLTgzNSw3ICs5MzUsNyBAQAogCWludCBjb2RlOwogCWNoYXIgKmRvdDsKIAkvKiBYWFggbm90IHN1cHBvcnRlZCBvbiBXaW45NSBhbmQgTlQgMy54ICovCi0JaWYgKCFHZXRGaWxlQXR0cmlidXRlc0V4QShwYXRoLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZpbmZvKSkgeworCWlmICghUHlfR2V0RmlsZUF0dHJpYnV0ZXNFeEEocGF0aCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmaW5mbykpIHsKIAkJLyogUHJvdG9jb2wgdmlvbGF0aW9uOiB3ZSBleHBsaWNpdGx5IGNsZWFyIGVycm5vLCBpbnN0ZWFkIG9mCiAJCSAgIHNldHRpbmcgaXQgdG8gYSBQT1NJWCBlcnJvci4gQ2FsbGVycyBzaG91bGQgdXNlIEdldExhc3RFcnJvci4gKi8KIAkJZXJybm8gPSAwOwpAQCAtODYzLDcgKzk2Myw3IEBACiAJY29uc3Qgd2NoYXJfdCAqZG90OwogCVdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgaW5mbzsKIAkvKiBYWFggbm90IHN1cHBvcnRlZCBvbiBXaW45NSBhbmQgTlQgMy54ICovCi0JaWYgKCFHZXRGaWxlQXR0cmlidXRlc0V4VyhwYXRoLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZpbmZvKSkgeworCWlmICghUHlfR2V0RmlsZUF0dHJpYnV0ZXNFeFcocGF0aCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmaW5mbykpIHsKIAkJLyogUHJvdG9jb2wgdmlvbGF0aW9uOiB3ZSBleHBsaWNpdGx5IGNsZWFyIGVycm5vLCBpbnN0ZWFkIG9mCiAJCSAgIHNldHRpbmcgaXQgdG8gYSBQT1NJWCBlcnJvci4gQ2FsbGVycyBzaG91bGQgdXNlIEdldExhc3RFcnJvci4gKi8KIAkJZXJybm8gPSAwOwpAQCAtMjQ1OCw3ICsyNTU4LDggQEAKIAkJCXdwYXRoID0gUHlVbmljb2RlX0FTX1VOSUNPREUob2J3cGF0aCk7CiAJCQlQeV9CRUdJTl9BTExPV19USFJFQURTCiAJCQloRmlsZSA9IENyZWF0ZUZpbGVXKHdwYXRoLCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsIDAsCi0JCQkJCSAgICBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKKwkJCQkJICAgIE5VTEwsIE9QRU5fRVhJU1RJTkcsCisJCQkJCSAgICBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUywgTlVMTCk7CiAJCQlQeV9FTkRfQUxMT1dfVEhSRUFEUwogCQkJaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQogCQkJCXJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJ1dGltZSIsIHdwYXRoKTsKQEAgLTI0NzMsNyArMjU3NCw4IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogCQloRmlsZSA9IENyZWF0ZUZpbGVBKGFwYXRoLCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsIDAsCi0JCQkJICAgIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpOworCQkJCSAgICBOVUxMLCBPUEVOX0VYSVNUSU5HLAorCQkJCSAgICBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUywgTlVMTCk7CiAJCVB5X0VORF9BTExPV19USFJFQURTCiAJCWlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogCQkJd2luMzJfZXJyb3IoInV0aW1lIiwgYXBhdGgpOwpAQCAtMjUwMSwxMSArMjYwMywxMSBAQAogCQlpZiAoZXh0cmFjdF90aW1lKFB5VHVwbGVfR0VUX0lURU0oYXJnLCAwKSwKIAkJCQkgJmF0aW1lc2VjLCAmYXVzZWMpID09IC0xKQogCQkJZ290byBkb25lOwotCQl0aW1lX3RfdG9fRklMRV9USU1FKGF0aW1lc2VjLCBhdXNlYywgJmF0aW1lKTsKKwkJdGltZV90X3RvX0ZJTEVfVElNRShhdGltZXNlYywgMTAwMCphdXNlYywgJmF0aW1lKTsKIAkJaWYgKGV4dHJhY3RfdGltZShQeVR1cGxlX0dFVF9JVEVNKGFyZywgMSksCiAJCQkJICZtdGltZXNlYywgJm11c2VjKSA9PSAtMSkKIAkJCWdvdG8gZG9uZTsKLQkJdGltZV90X3RvX0ZJTEVfVElNRShtdGltZXNlYywgbXVzZWMsICZtdGltZSk7CisJCXRpbWVfdF90b19GSUxFX1RJTUUobXRpbWVzZWMsIDEwMDAqbXVzZWMsICZtdGltZSk7CiAJfQogCWlmICghU2V0RmlsZVRpbWUoaEZpbGUsIE5VTEwsICZhdGltZSwgJm10aW1lKSkgewogCQkvKiBBdm9pZCBwdXR0aW5nIHRoZSBmaWxlIG5hbWUgaW50byB0aGUgZXJyb3IgaGVyZSwKQEAgLTU1ODUsMTcgKzU2ODcsNTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9yZWFkbGluayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisJUHlPYmplY3QqIHY7CiAJY2hhciBidWZbTUFYUEFUSExFTl07CiAJY2hhciAqcGF0aDsKIAlpbnQgbjsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6cmVhZGxpbmsiLCAmcGF0aCkpCisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQorCWludCBhcmdfaXNfdW5pY29kZSA9IDA7CisjZW5kaWYKKworCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXQ6cmVhZGxpbmsiLCAKKwkJCQlQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAmcGF0aCkpCiAJCXJldHVybiBOVUxMOworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKKwl2ID0gUHlTZXF1ZW5jZV9HZXRJdGVtKGFyZ3MsIDApOworCWlmICh2ID09IE5VTEwpIHJldHVybiBOVUxMOworCisJaWYgKFB5VW5pY29kZV9DaGVjayh2KSkgeworCQlhcmdfaXNfdW5pY29kZSA9IDE7CisJfQorCVB5X0RFQ1JFRih2KTsKKyNlbmRpZgorCiAJUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogCW4gPSByZWFkbGluayhwYXRoLCBidWYsIChpbnQpIHNpemVvZiBidWYpOwogCVB5X0VORF9BTExPV19USFJFQURTCiAJaWYgKG4gPCAwKQogCQlyZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShwYXRoKTsKLQlyZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCBuKTsKKworCXYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIG4pOworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKKwlpZiAoYXJnX2lzX3VuaWNvZGUpIHsKKwkJUHlPYmplY3QgKnc7CisKKwkJdyA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCh2LAorCQkJCVB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsCisJCQkJInN0cmljdCIpOworCQlpZiAodyAhPSBOVUxMKSB7CisJCQlQeV9ERUNSRUYodik7CisJCQl2ID0gdzsKKwkJfQorCQllbHNlIHsKKwkJCS8qIGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgYnl0ZSBzdHJpbmcsIGFzCisJCQkgICBkaXNjdXNzZWQgaW4gcGF0Y2ggIzY4MzU5MiAqLworCQkJUHlFcnJfQ2xlYXIoKTsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiB2OwogfQogI2VuZGlmIC8qIEhBVkVfUkVBRExJTksgKi8KIApAQCAtNzg3Nyw3ICs4MDE1LDcgQEAKIAogCQlwQ3J5cHRHZW5SYW5kb20gPSAoQ1JZUFRHRU5SQU5ET00pR2V0UHJvY0FkZHJlc3MoCiAJCQkJCQloQWR2QVBJMzIsICJDcnlwdEdlblJhbmRvbSIpOwotCQlpZiAocENyeXB0QWNxdWlyZUNvbnRleHQgPT0gTlVMTCkKKwkJaWYgKHBDcnlwdEdlblJhbmRvbSA9PSBOVUxMKQogCQkJcmV0dXJuIFB5RXJyX0Zvcm1hdChQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAogCQkJCQkgICAgIkNyeXB0R2VuUmFuZG9tIG5vdCBmb3VuZCIpOwogCkBAIC04NjE3LDMgKzg3NTUsNCBAQAogfQogI2VuZGlmCiAKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IDkyZjJkMWYuLjg1Mzg3NGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTc2OCwxMCArNzY4LDE2IEBACiAKIAkJd2hpbGUgKCFoYXNfaW5wdXQpCiAJCXsJc3RydWN0IHRpbWV2YWwgdGltZW91dCA9IHswLCAxMDAwMDB9OyAvKiAwLjEgc2Vjb25kcyAqLworCisJCQkvKiBbQnVnICMxNTUyNzI2XSBPbmx5IGxpbWl0IHRoZSBwYXVzZSBpZiBhbiBpbnB1dCBob29rIGhhcyBiZWVuIAorCQkJICAgZGVmaW5lZC4gICovCisJCSAJc3RydWN0IHRpbWV2YWwgKnRpbWVvdXRwID0gTlVMTDsKKwkJCWlmIChQeU9TX0lucHV0SG9vaykgCisJCQkJdGltZW91dHAgPSAmdGltZW91dDsKIAkJCUZEX1NFVChmaWxlbm8ocmxfaW5zdHJlYW0pLCAmc2VsZWN0c2V0KTsKIAkJCS8qIHNlbGVjdCByZXNldHMgc2VsZWN0c2V0IGlmIG5vIGlucHV0IHdhcyBhdmFpbGFibGUgKi8KIAkJCWhhc19pbnB1dCA9IHNlbGVjdChmaWxlbm8ocmxfaW5zdHJlYW0pICsgMSwgJnNlbGVjdHNldCwKLQkJCQkJICAgTlVMTCwgTlVMTCwgJnRpbWVvdXQpOworCQkJCQkgICBOVUxMLCBOVUxMLCB0aW1lb3V0cCk7CiAJCQlpZihQeU9TX0lucHV0SG9vaykgUHlPU19JbnB1dEhvb2soKTsKIAkJfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Jlc291cmNlLmMgYi9Nb2R1bGVzL3Jlc291cmNlLmMKaW5kZXggZmU2ZjNiNi4uZDM4YzY2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9yZXNvdXJjZS5jCisrKyBiL01vZHVsZXMvcmVzb3VyY2UuYwpAQCAtMjk4LDYgKzI5OCwxMCBAQAogCVB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTUVNTE9DSyIsIFJMSU1JVF9NRU1MT0NLKTsKICNlbmRpZgogCisjaWZkZWYgUkxJTUlUX1NCU0laRQorCVB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfU0JTSVpFIiwgUkxJTUlUX1NCU0laRSk7CisjZW5kaWYKKwogI2lmZGVmIFJVU0FHRV9TRUxGCiAJUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9TRUxGIiwgUlVTQUdFX1NFTEYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwppbmRleCBmMDNiMzRjLi5jOWYwMzg4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKQEAgLTM2NCwxOSArMzY0LDE2IEBACiAjZGVmaW5lIEJUUFJPVE9fUkZDT01NIEJMVUVUT09USF9QUk9UT19SRkNPTU0KICNkZWZpbmUgc29ja2FkZHJfbDIgc29ja2FkZHJfbDJjYXAKICNkZWZpbmUgc29ja2FkZHJfcmMgc29ja2FkZHJfcmZjb21tCi0jZGVmaW5lIF9CVF9TT0NLQUREUl9NRU1CKHMsIHByb3RvKSAmKChzKS0+c29ja19hZGRyKQogI2RlZmluZSBfQlRfTDJfTUVNQihzYSwgbWVtYikgKChzYSktPmwyY2FwXyMjbWVtYikKICNkZWZpbmUgX0JUX1JDX01FTUIoc2EsIG1lbWIpICgoc2EpLT5yZmNvbW1fIyNtZW1iKQogI2VsaWYgZGVmaW5lZChfX05ldEJTRF9fKQogI2RlZmluZSBzb2NrYWRkcl9sMiBzb2NrYWRkcl9idAogI2RlZmluZSBzb2NrYWRkcl9yYyBzb2NrYWRkcl9idAogI2RlZmluZSBzb2NrYWRkcl9zY28gc29ja2FkZHJfYnQKLSNkZWZpbmUgX0JUX1NPQ0tBRERSX01FTUIocywgcHJvdG8pICYoKHMpLT5zb2NrX2FkZHIpCiAjZGVmaW5lIF9CVF9MMl9NRU1CKHNhLCBtZW1iKSAoKHNhKS0+YnRfIyNtZW1iKQogI2RlZmluZSBfQlRfUkNfTUVNQihzYSwgbWVtYikgKChzYSktPmJ0XyMjbWVtYikKICNkZWZpbmUgX0JUX1NDT19NRU1CKHNhLCBtZW1iKSAoKHNhKS0+YnRfIyNtZW1iKQogI2Vsc2UKLSNkZWZpbmUgX0JUX1NPQ0tBRERSX01FTUIocywgcHJvdG8pICgmKChzKS0+c29ja19hZGRyKS5idF8jI3Byb3RvKQogI2RlZmluZSBfQlRfTDJfTUVNQihzYSwgbWVtYikgKChzYSktPmwyXyMjbWVtYikKICNkZWZpbmUgX0JUX1JDX01FTUIoc2EsIG1lbWIpICgoc2EpLT5yY18jI21lbWIpCiAjZGVmaW5lIF9CVF9TQ09fTUVNQihzYSwgbWVtYikgKChzYSktPnNjb18jI21lbWIpCkBAIC0zODgsNiArMzg1LDggQEAKICNkZWZpbmUgU0VHTUVOVF9TSVpFICgzMiAqIDEwMjQgLTEpCiAjZW5kaWYKIAorI2RlZmluZQlTQVMyU0EoeCkJKChzdHJ1Y3Qgc29ja2FkZHIgKikoeCkpCisKIC8qCiAgKiBDb25zdGFudHMgZm9yIGdldG5hbWVpbmZvKCkKICAqLwpAQCAtMTE3NCw3ICsxMTczLDcgQEAKIAogc3RhdGljIGludAogZ2V0c29ja2FkZHJhcmcoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBQeU9iamVjdCAqYXJncywKLQkgICAgICAgc3RydWN0IHNvY2thZGRyICoqYWRkcl9yZXQsIGludCAqbGVuX3JldCkKKwkgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyX3JldCwgaW50ICpsZW5fcmV0KQogewogCXN3aXRjaCAocy0+c29ja19mYW1pbHkpIHsKIApAQCAtMTE4NCw5ICsxMTgzLDEwIEBACiAJCXN0cnVjdCBzb2NrYWRkcl91biogYWRkcjsKIAkJY2hhciAqcGF0aDsKIAkJaW50IGxlbjsKLQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4qKSYocy0+c29ja19hZGRyKS51bjsKIAkJaWYgKCFQeUFyZ19QYXJzZShhcmdzLCAidCMiLCAmcGF0aCwgJmxlbikpCiAJCQlyZXR1cm4gMDsKKworCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl91biopYWRkcl9yZXQ7CiAjaWZkZWYgbGludXgKIAkJaWYgKGxlbiA+IDAgJiYgcGF0aFswXSA9PSAwKSB7CiAJCQkvKiBMaW51eCBhYnN0cmFjdCBuYW1lc3BhY2UgZXh0ZW5zaW9uICovCkBAIC0xMjA5LDcgKzEyMDksNiBAQAogCQl9CiAJCWFkZHItPnN1bl9mYW1pbHkgPSBzLT5zb2NrX2ZhbWlseTsKIAkJbWVtY3B5KGFkZHItPnN1bl9wYXRoLCBwYXRoLCBsZW4pOwotCQkqYWRkcl9yZXQgPSAoc3RydWN0IHNvY2thZGRyICopIGFkZHI7CiAjaWYgZGVmaW5lZChQWU9TX09TMikKIAkJKmxlbl9yZXQgPSBzaXplb2YoKmFkZHIpOwogI2Vsc2UKQEAgLTEyMjQsNyArMTIyMyw3IEBACiAJewogCQlzdHJ1Y3Qgc29ja2FkZHJfbmwqIGFkZHI7CiAJCWludCBwaWQsIGdyb3VwczsKLQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfbmwgKikmKHMtPnNvY2tfYWRkcikubmw7CisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX25sICopYWRkcl9yZXQ7CiAJCWlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewogCQkJUHlFcnJfRm9ybWF0KAogCQkJCVB5RXhjX1R5cGVFcnJvciwKQEAgLTEyMzgsNyArMTIzNyw2IEBACiAJCWFkZHItPm5sX2ZhbWlseSA9IEFGX05FVExJTks7CiAJCWFkZHItPm5sX3BpZCA9IHBpZDsKIAkJYWRkci0+bmxfZ3JvdXBzID0gZ3JvdXBzOwotCQkqYWRkcl9yZXQgPSAoc3RydWN0IHNvY2thZGRyICopIGFkZHI7CiAJCSpsZW5fcmV0ID0gc2l6ZW9mKCphZGRyKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTI0OSw3ICsxMjQ3LDYgQEAKIAkJc3RydWN0IHNvY2thZGRyX2luKiBhZGRyOwogCQljaGFyICpob3N0OwogCQlpbnQgcG9ydCwgcmVzdWx0OwotIAkJYWRkcj0oc3RydWN0IHNvY2thZGRyX2luKikmKHMtPnNvY2tfYWRkcikuaW47CiAJCWlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewogCQkJUHlFcnJfRm9ybWF0KAogCQkJCVB5RXhjX1R5cGVFcnJvciwKQEAgLTEyNjEsNiArMTI1OCw3IEBACiAJCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXRpOmdldHNvY2thZGRyYXJnIiwKIAkJCQkgICAgICAiaWRuYSIsICZob3N0LCAmcG9ydCkpCiAJCQlyZXR1cm4gMDsKKwkJYWRkcj0oc3RydWN0IHNvY2thZGRyX2luKilhZGRyX3JldDsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZXRpcGFkZHIoaG9zdCwgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqYWRkciksICBBRl9JTkVUKTsKICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKGhvc3QpOwpAQCAtMTI2OCw3ICsxMjY2LDYgQEAKIAkJCXJldHVybiAwOwogCQlhZGRyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAkJYWRkci0+c2luX3BvcnQgPSBodG9ucygoc2hvcnQpcG9ydCk7Ci0JCSphZGRyX3JldCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkcjsKIAkJKmxlbl9yZXQgPSBzaXplb2YgKmFkZHI7CiAJCXJldHVybiAxOwogCX0KQEAgLTEyNzksNyArMTI3Niw2IEBACiAJCXN0cnVjdCBzb2NrYWRkcl9pbjYqIGFkZHI7CiAJCWNoYXIgKmhvc3Q7CiAJCWludCBwb3J0LCBmbG93aW5mbywgc2NvcGVfaWQsIHJlc3VsdDsKLSAJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luNiopJihzLT5zb2NrX2FkZHIpLmluNjsKIAkJZmxvd2luZm8gPSBzY29wZV9pZCA9IDA7CiAJCWlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewogCQkJUHlFcnJfRm9ybWF0KApAQCAtMTI5NCw2ICsxMjkwLDcgQEAKIAkJCQkgICAgICAmc2NvcGVfaWQpKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYqKWFkZHJfcmV0OwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNldGlwYWRkcihob3N0LCAoc3RydWN0IHNvY2thZGRyICopYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCphZGRyKSwgQUZfSU5FVDYpOwogICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoaG9zdCk7CkBAIC0xMzAzLDcgKzEzMDAsNiBAQAogCQlhZGRyLT5zaW42X3BvcnQgPSBodG9ucygoc2hvcnQpcG9ydCk7CiAJCWFkZHItPnNpbjZfZmxvd2luZm8gPSBmbG93aW5mbzsKIAkJYWRkci0+c2luNl9zY29wZV9pZCA9IHNjb3BlX2lkOwotCQkqYWRkcl9yZXQgPSAoc3RydWN0IHNvY2thZGRyICopIGFkZHI7CiAJCSpsZW5fcmV0ID0gc2l6ZW9mICphZGRyOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0xMzE1LDkgKzEzMTEsMTAgQEAKIAkJc3dpdGNoIChzLT5zb2NrX3Byb3RvKSB7CiAJCWNhc2UgQlRQUk9UT19MMkNBUDoKIAkJewotCQkJc3RydWN0IHNvY2thZGRyX2wyICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9sMiAqKSBfQlRfU09DS0FERFJfTUVNQihzLCBsMik7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfbDIgKmFkZHI7CiAJCQljaGFyICpzdHJhZGRyOwogCisJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9sMiAqKWFkZHJfcmV0OwogCQkJX0JUX0wyX01FTUIoYWRkciwgZmFtaWx5KSA9IEFGX0JMVUVUT09USDsKIAkJCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic2kiLCAmc3RyYWRkciwKIAkJCQkJICAgICAgJl9CVF9MMl9NRU1CKGFkZHIsIHBzbSkpKSB7CkBAIC0xMzI4LDE1ICsxMzI1LDE1IEBACiAJCQlpZiAoc2V0YmRhZGRyKHN0cmFkZHIsICZfQlRfTDJfTUVNQihhZGRyLCBiZGFkZHIpKSA8IDApCiAJCQkJcmV0dXJuIDA7CiAKLQkJCSphZGRyX3JldCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkcjsKIAkJCSpsZW5fcmV0ID0gc2l6ZW9mICphZGRyOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJY2FzZSBCVFBST1RPX1JGQ09NTToKIAkJewotCQkJc3RydWN0IHNvY2thZGRyX3JjICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9yYyAqKSBfQlRfU09DS0FERFJfTUVNQihzLCByYyk7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfcmMgKmFkZHI7CiAJCQljaGFyICpzdHJhZGRyOwogCisJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9yYyAqKWFkZHJfcmV0OwogCQkJX0JUX1JDX01FTUIoYWRkciwgZmFtaWx5KSA9IEFGX0JMVUVUT09USDsKIAkJCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic2kiLCAmc3RyYWRkciwKIAkJCQkJICAgICAgJl9CVF9SQ19NRU1CKGFkZHIsIGNoYW5uZWwpKSkgewpAQCAtMTM0NywxNiArMTM0NCwxNiBAQAogCQkJaWYgKHNldGJkYWRkcihzdHJhZGRyLCAmX0JUX1JDX01FTUIoYWRkciwgYmRhZGRyKSkgPCAwKQogCQkJCXJldHVybiAwOwogCi0JCQkqYWRkcl9yZXQgPSAoc3RydWN0IHNvY2thZGRyICopIGFkZHI7CiAJCQkqbGVuX3JldCA9IHNpemVvZiAqYWRkcjsKIAkJCXJldHVybiAxOwogCQl9CiAjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCiAJCWNhc2UgQlRQUk9UT19TQ086CiAJCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9zY28gKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX3NjbyAqKSBfQlRfU09DS0FERFJfTUVNQihzLCBzY28pOworCQkJc3RydWN0IHNvY2thZGRyX3NjbyAqYWRkcjsKIAkJCWNoYXIgKnN0cmFkZHI7CiAKKwkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX3NjbyAqKWFkZHJfcmV0OwogCQkJX0JUX1NDT19NRU1CKGFkZHIsIGZhbWlseSkgPSBBRl9CTFVFVE9PVEg7CiAJCQlzdHJhZGRyID0gUHlTdHJpbmdfQXNTdHJpbmcoYXJncyk7CiAJCQlpZiAoc3RyYWRkciA9PSBOVUxMKSB7CkBAIC0xMzY3LDcgKzEzNjQsNiBAQAogCQkJaWYgKHNldGJkYWRkcihzdHJhZGRyLCAmX0JUX1NDT19NRU1CKGFkZHIsIGJkYWRkcikpIDwgMCkKIAkJCQlyZXR1cm4gMDsKIAotCQkJKmFkZHJfcmV0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyOwogCQkJKmxlbl9yZXQgPSBzaXplb2YgKmFkZHI7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtMTQwOSwyMiArMTQwNSwyMSBAQAogCQkgICAgICAgIHMtPmVycm9yaGFuZGxlcigpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJYWRkciA9ICYocy0+c29ja19hZGRyLmxsKTsKLQkJYWRkci0+c2xsX2ZhbWlseSA9IEFGX1BBQ0tFVDsKLQkJYWRkci0+c2xsX3Byb3RvY29sID0gaHRvbnMoKHNob3J0KXByb3RvTnVtYmVyKTsKLQkJYWRkci0+c2xsX2lmaW5kZXggPSBpZnIuaWZyX2lmaW5kZXg7Ci0JCWFkZHItPnNsbF9wa3R0eXBlID0gcGt0dHlwZTsKLQkJYWRkci0+c2xsX2hhdHlwZSA9IGhhdHlwZTsKIAkJaWYgKGhhbGVuID4gOCkgewogCQkgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogCQkJCSAgIkhhcmR3YXJlIGFkZHJlc3MgbXVzdCBiZSA4IGJ5dGVzIG9yIGxlc3MiKTsKIAkJICByZXR1cm4gMDsKIAkJfQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9sbCopYWRkcl9yZXQ7CisJCWFkZHItPnNsbF9mYW1pbHkgPSBBRl9QQUNLRVQ7CisJCWFkZHItPnNsbF9wcm90b2NvbCA9IGh0b25zKChzaG9ydClwcm90b051bWJlcik7CisJCWFkZHItPnNsbF9pZmluZGV4ID0gaWZyLmlmcl9pZmluZGV4OworCQlhZGRyLT5zbGxfcGt0dHlwZSA9IHBrdHR5cGU7CisJCWFkZHItPnNsbF9oYXR5cGUgPSBoYXR5cGU7CiAJCWlmIChoYWxlbiAhPSAwKSB7CiAJCSAgbWVtY3B5KCZhZGRyLT5zbGxfYWRkciwgaGFkZHIsIGhhbGVuKTsKIAkJfQogCQlhZGRyLT5zbGxfaGFsZW4gPSBoYWxlbjsKLQkJKmFkZHJfcmV0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyOwogCQkqbGVuX3JldCA9IHNpemVvZiAqYWRkcjsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTU1MSw4ICsxNTQ2LDcgQEAKIAlQeV9CRUdJTl9BTExPV19USFJFQURTCiAJdGltZW91dCA9IGludGVybmFsX3NlbGVjdChzLCAwKTsKIAlpZiAoIXRpbWVvdXQpCi0JCW5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHJidWYsCi0JCQkgICAgICAgJmFkZHJsZW4pOworCQluZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CiAJUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogCWlmICh0aW1lb3V0ID09IDEpIHsKQEAgLTE1NzgsNyArMTU3Miw3IEBACiAJCVNPQ0tFVENMT1NFKG5ld2ZkKTsKIAkJZ290byBmaW5hbGx5OwogCX0KLQlhZGRyID0gbWFrZXNvY2thZGRyKHMtPnNvY2tfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHJidWYsCisJYWRkciA9IG1ha2Vzb2NrYWRkcihzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLAogCQkJICAgIGFkZHJsZW4sIHMtPnNvY2tfcHJvdG8pOwogCWlmIChhZGRyID09IE5VTEwpCiAJCWdvdG8gZmluYWxseTsKQEAgLTE4MTksMTQgKzE4MTMsMTQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrX2JpbmQoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBQeU9iamVjdCAqYWRkcm8pCiB7Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyOworCXNvY2tfYWRkcl90IGFkZHJidWY7CiAJaW50IGFkZHJsZW47CiAJaW50IHJlczsKIAotCWlmICghZ2V0c29ja2FkZHJhcmcocywgYWRkcm8sICZhZGRyLCAmYWRkcmxlbikpCisJaWYgKCFnZXRzb2NrYWRkcmFyZyhzLCBhZGRybywgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pKQogCQlyZXR1cm4gTlVMTDsKIAlQeV9CRUdJTl9BTExPV19USFJFQURTCi0JcmVzID0gYmluZChzLT5zb2NrX2ZkLCBhZGRyLCBhZGRybGVuKTsKKwlyZXMgPSBiaW5kKHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOwogCVB5X0VORF9BTExPV19USFJFQURTCiAJaWYgKHJlcyA8IDApCiAJCXJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKQEAgLTE5NTIsMTYgKzE5NDYsMTYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrX2Nvbm5lY3QoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBQeU9iamVjdCAqYWRkcm8pCiB7Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyOworCXNvY2tfYWRkcl90IGFkZHJidWY7CiAJaW50IGFkZHJsZW47CiAJaW50IHJlczsKIAlpbnQgdGltZW91dDsKIAotCWlmICghZ2V0c29ja2FkZHJhcmcocywgYWRkcm8sICZhZGRyLCAmYWRkcmxlbikpCisJaWYgKCFnZXRzb2NrYWRkcmFyZyhzLCBhZGRybywgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pKQogCQlyZXR1cm4gTlVMTDsKIAogCVB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLQlyZXMgPSBpbnRlcm5hbF9jb25uZWN0KHMsIGFkZHIsIGFkZHJsZW4sICZ0aW1lb3V0KTsKKwlyZXMgPSBpbnRlcm5hbF9jb25uZWN0KHMsIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4sICZ0aW1lb3V0KTsKIAlQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAJaWYgKHRpbWVvdXQgPT0gMSkgewpAQCAtMTk4NiwxNiArMTk4MCwxNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tfY29ubmVjdF9leChQeVNvY2tldFNvY2tPYmplY3QgKnMsIFB5T2JqZWN0ICphZGRybykKIHsKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisJc29ja19hZGRyX3QgYWRkcmJ1ZjsKIAlpbnQgYWRkcmxlbjsKIAlpbnQgcmVzOwogCWludCB0aW1lb3V0OwogCi0JaWYgKCFnZXRzb2NrYWRkcmFyZyhzLCBhZGRybywgJmFkZHIsICZhZGRybGVuKSkKKwlpZiAoIWdldHNvY2thZGRyYXJnKHMsIGFkZHJvLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbikpCiAJCXJldHVybiBOVUxMOwogCiAJUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotCXJlcyA9IGludGVybmFsX2Nvbm5lY3QocywgYWRkciwgYWRkcmxlbiwgJnRpbWVvdXQpOworCXJlcyA9IGludGVybmFsX2Nvbm5lY3QocywgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbiwgJnRpbWVvdXQpOwogCVB5X0VORF9BTExPV19USFJFQURTCiAKIAkvKiBTaWduYWxzIGFyZSBub3QgZXJyb3JzICh0aG91Z2ggdGhleSBtYXkgcmFpc2UgZXhjZXB0aW9ucykuICBBZGFwdGVkCkBAIC0yMDc1LDExICsyMDY5LDExIEBACiAJCXJldHVybiBOVUxMOwogCW1lbXNldCgmYWRkcmJ1ZiwgMCwgYWRkcmxlbik7CiAJUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotCXJlcyA9IGdldHNvY2tuYW1lKHMtPnNvY2tfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHJidWYsICZhZGRybGVuKTsKKwlyZXMgPSBnZXRzb2NrbmFtZShzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CiAJUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAlpZiAocmVzIDwgMCkKIAkJcmV0dXJuIHMtPmVycm9yaGFuZGxlcigpOwotCXJldHVybiBtYWtlc29ja2FkZHIocy0+c29ja19mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcmJ1ZiwgYWRkcmxlbiwKKwlyZXR1cm4gbWFrZXNvY2thZGRyKHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4sCiAJCQkgICAgcy0+c29ja19wcm90byk7CiB9CiAKQEAgLTIxMDQsMTEgKzIwOTgsMTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAJbWVtc2V0KCZhZGRyYnVmLCAwLCBhZGRybGVuKTsKIAlQeV9CRUdJTl9BTExPV19USFJFQURTCi0JcmVzID0gZ2V0cGVlcm5hbWUocy0+c29ja19mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcmJ1ZiwgJmFkZHJsZW4pOworCXJlcyA9IGdldHBlZXJuYW1lKHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKIAlQeV9FTkRfQUxMT1dfVEhSRUFEUwogCWlmIChyZXMgPCAwKQogCQlyZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7Ci0JcmV0dXJuIG1ha2Vzb2NrYWRkcihzLT5zb2NrX2ZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyYnVmLCBhZGRybGVuLAorCXJldHVybiBtYWtlc29ja2FkZHIocy0+c29ja19mZCwgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbiwKIAkJCSAgICBzLT5zb2NrX3Byb3RvKTsKIH0KIApAQCAtMjQ0MywxNCArMjQzNywxNCBAQAogI2lmbmRlZiBNU19XSU5ET1dTCiAjaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCiAJCW4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAotCQkJICAgICAoc3RydWN0IHNvY2thZGRyICopICZhZGRyYnVmLCAmYWRkcmxlbik7CisJCQkgICAgIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKICNlbHNlCiAJCW4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAogCQkJICAgICAodm9pZCAqKSAmYWRkcmJ1ZiwgJmFkZHJsZW4pOwogI2VuZGlmCiAjZWxzZQogCQluID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKLQkJCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcmJ1ZiwgJmFkZHJsZW4pOworCQkJICAgICBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CiAjZW5kaWYKIAl9CiAJUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTI0NjQsNyArMjQ1OCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCX0KIAotCWlmICghKCphZGRyID0gbWFrZXNvY2thZGRyKHMtPnNvY2tfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHJidWYsCisJaWYgKCEoKmFkZHIgPSBtYWtlc29ja2FkZHIocy0+c29ja19mZCwgU0FTMlNBKCZhZGRyYnVmKSwKIAkJCQkgICBhZGRybGVuLCBzLT5zb2NrX3Byb3RvKSkpCiAJCXJldHVybiAtMTsKIApAQCAtMjY2NCw3ICsyNjU4LDcgQEAKIHsKIAlQeU9iamVjdCAqYWRkcm87CiAJY2hhciAqYnVmOwotCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKwlzb2NrX2FkZHJfdCBhZGRyYnVmOwogCWludCBhZGRybGVuLCBsZW4sIG4gPSAtMSwgZmxhZ3MsIHRpbWVvdXQ7CiAKIAlmbGFncyA9IDA7CkBAIC0yNjc1LDE2ICsyNjY5LDE2IEBACiAJCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoIWdldHNvY2thZGRyYXJnKHMsIGFkZHJvLCAmYWRkciwgJmFkZHJsZW4pKQotCQlyZXR1cm4gTlVMTDsKLQogCWlmICghSVNfU0VMRUNUQUJMRShzKSkKIAkJcmV0dXJuIHNlbGVjdF9lcnJvcigpOwogCisJaWYgKCFnZXRzb2NrYWRkcmFyZyhzLCBhZGRybywgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pKQorCQlyZXR1cm4gTlVMTDsKKwogCVB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKIAl0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0KHMsIDEpOwogCWlmICghdGltZW91dCkKLQkJbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MsIGFkZHIsIGFkZHJsZW4pOworCQluID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncywgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CiAJUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogCWlmICh0aW1lb3V0ID09IDEpIHsKQEAgLTI5NzMsMTAgKzI5NjcsOSBAQAogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdldGhvc3RieW5hbWUiLCAmbmFtZSkpCiAJCXJldHVybiBOVUxMOwotCWlmIChzZXRpcGFkZHIobmFtZSwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyYnVmLCAgc2l6ZW9mKGFkZHJidWYpLCBBRl9JTkVUKSA8IDApCisJaWYgKHNldGlwYWRkcihuYW1lLCBTQVMyU0EoJmFkZHJidWYpLCAgc2l6ZW9mKGFkZHJidWYpLCBBRl9JTkVUKSA8IDApCiAJCXJldHVybiBOVUxMOwotCXJldHVybiBtYWtlaXBhZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmJ1ZiwKLQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXJldHVybiBtYWtlaXBhZGRyKFNBUzJTQSgmYWRkcmJ1ZiksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKIH0KIAogUHlEb2NfU1RSVkFSKGdldGhvc3RieW5hbWVfZG9jLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaCBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKaW5kZXggYWUzOGM4Ni4uODRmMjQyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAorKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCkBAIC0xMTQsNyArMTE0LDYgQEAKIAlpbnQgc29ja19mYW1pbHk7CS8qIEFkZHJlc3MgZmFtaWx5LCBlLmcuLCBBRl9JTkVUICovCiAJaW50IHNvY2tfdHlwZTsJCS8qIFNvY2tldCB0eXBlLCBlLmcuLCBTT0NLX1NUUkVBTSAqLwogCWludCBzb2NrX3Byb3RvOwkJLyogUHJvdG9jb2wgdHlwZSwgdXN1YWxseSAwICovCi0Jc29ja19hZGRyX3Qgc29ja19hZGRyOwkvKiBTb2NrZXQgYWRkcmVzcyAqLwogCVB5T2JqZWN0ICooKmVycm9yaGFuZGxlcikodm9pZCk7IC8qIEVycm9yIGhhbmRsZXI7IGNoZWNrcwogCQkJCQkgICAgZXJybm8sIHJldHVybnMgTlVMTCBhbmQKIAkJCQkJICAgIHNldHMgYSBQeXRob24gZXhjZXB0aW9uICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RocmVhZG1vZHVsZS5jIGIvTW9kdWxlcy90aHJlYWRtb2R1bGUuYwppbmRleCAzNjE0Mjk2Li5iYWY2NjczIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3RocmVhZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvdGhyZWFkbW9kdWxlLmMKQEAgLTI1LDYgKzI1LDcgQEAKIHN0YXRpYyB2b2lkCiBsb2NrX2RlYWxsb2MobG9ja29iamVjdCAqc2VsZikKIHsKKwlhc3NlcnQoc2VsZi0+bG9ja19sb2NrKTsKIAkvKiBVbmxvY2sgdGhlIGxvY2sgc28gaXQncyBzYWZlIHRvIGZyZWUgaXQgKi8KIAlQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+bG9ja19sb2NrLCAwKTsKIAlQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+bG9ja19sb2NrKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGEuYyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwppbmRleCBhMTFhMGI3Li5hMzBkMzBjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIHtOVUxMfQogfTsKIAotLy8gZm9yd2FyZCBkZWNsYXJhdGlvbgorLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogc3RhdGljIFB5VHlwZU9iamVjdCBVQ0RfVHlwZTsKIAogc3RhdGljIFB5T2JqZWN0KgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9hYnN0cmFjdC5jIGIvT2JqZWN0cy9hYnN0cmFjdC5jCmluZGV4IDg4MTA3NjIuLjAzODgzYmUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYWJzdHJhY3QuYworKysgYi9PYmplY3RzL2Fic3RyYWN0LmMKQEAgLTE1MjQsMjAgKzE1MjQsMTggQEAKIAkJaWYgKGNtcCA+IDApIHsKIAkJCXN3aXRjaCAob3BlcmF0aW9uKSB7CiAJCQljYXNlIFBZX0lURVJTRUFSQ0hfQ09VTlQ6Ci0JCQkJKytuOwotCQkJCWlmIChuIDw9IDApIHsKLQkJCQkJLyogWFhYKG5ub3J3aXR6KTogaW50IG1lYW5zIHNzaXplX3QgKi8KKwkJCQlpZiAobiA9PSBQWV9TU0laRV9UX01BWCkgewogCQkJCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLQkJCQkgICAgICAgICAgICAgICAgImNvdW50IGV4Y2VlZHMgQyBpbnQgc2l6ZSIpOworCQkJCQkgICAgICAgImNvdW50IGV4Y2VlZHMgQyBpbnRlZ2VyIHNpemUiKTsKIAkJCQkJZ290byBGYWlsOwogCQkJCX0KKwkJCQkrK247CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUFlfSVRFUlNFQVJDSF9JTkRFWDoKIAkJCQlpZiAod3JhcHBlZCkgewotCQkJCQkvKiBYWFgobm5vcndpdHopOiBpbnQgbWVhbnMgc3NpemVfdCAqLwogCQkJCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLQkJCSAgICAgICAgICAgICAgICAJImluZGV4IGV4Y2VlZHMgQyBpbnQgc2l6ZSIpOworCQkJCQkgICAgICAgImluZGV4IGV4Y2VlZHMgQyBpbnRlZ2VyIHNpemUiKTsKIAkJCQkJZ290byBGYWlsOwogCQkJCX0KIAkJCQlnb3RvIERvbmU7CkBAIC0xNTUyLDkgKzE1NTAsOSBAQAogCQl9CiAKIAkJaWYgKG9wZXJhdGlvbiA9PSBQWV9JVEVSU0VBUkNIX0lOREVYKSB7Ci0JCQkrK247Ci0JCQlpZiAobiA8PSAwKQorCQkJaWYgKG4gPT0gUFlfU1NJWkVfVF9NQVgpCiAJCQkJd3JhcHBlZCA9IDE7CisJCQkrK247CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvY2xhc3NvYmplY3QuYyBiL09iamVjdHMvY2xhc3NvYmplY3QuYwppbmRleCAxMTA3OTc3Li44NTgyNmE5IDEwMDY0NAotLS0gYS9PYmplY3RzL2NsYXNzb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCkBAIC0xNTIsNiArMTUyLDggQEAKIAlQeU9iamVjdCAqc2VsZjsKIAlQeU9iamVjdCAqY2xhc3NPYmogPSBOVUxMOwogCisJaWYgKCFfUHlBcmdfTm9LZXl3b3JkcygiaW5zdGFuY2VtZXRob2QiLCBrdykpCisJCXJldHVybiBOVUxMOwogCWlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgIm1ldGhvZCIsIDIsIDMsCiAJCQkgICAgICAmZnVuYywgJnNlbGYsICZjbGFzc09iaikpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9kaWN0b2JqZWN0LmMgYi9PYmplY3RzL2RpY3RvYmplY3QuYwppbmRleCA2NDU4NWE0Li4wOWFiYTYxIDEwMDY0NAotLS0gYS9PYmplY3RzL2RpY3RvYmplY3QuYworKysgYi9PYmplY3RzL2RpY3RvYmplY3QuYwpAQCAtMTIsNiArMTIsMjAgQEAKIHR5cGVkZWYgUHlEaWN0RW50cnkgZGljdGVudHJ5OwogdHlwZWRlZiBQeURpY3RPYmplY3QgZGljdG9iamVjdDsKIAorLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQorICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKKyAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCitzdGF0aWMgdm9pZAorc2V0X2tleV9lcnJvcihQeU9iamVjdCAqYXJnKQoreworCVB5T2JqZWN0ICp0dXA7CisJdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7CisJaWYgKCF0dXApCisJCXJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KKwlQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7CisJUHlfREVDUkVGKHR1cCk7Cit9CisKIC8qIERlZmluZSB0aGlzIG91dCBpZiB5b3UgZG9uJ3Qgd2FudCBjb252ZXJzaW9uIHN0YXRpc3RpY3Mgb24gZXhpdC4gKi8KICN1bmRlZiBTSE9XX0NPTlZFUlNJT05fQ09VTlRTCiAKQEAgLTMwNyw2ICszMjEsOCBAQAogCQllbHNlIGlmIChlcC0+bWVfa2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCiAJCQlmcmVlc2xvdCA9IGVwOwogCX0KKwlhc3NlcnQoMCk7CS8qIE5PVCBSRUFDSEVEICovCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zNjYsNiArMzgyLDggQEAKIAkJaWYgKGVwLT5tZV9rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKIAkJCWZyZWVzbG90ID0gZXA7CiAJfQorCWFzc2VydCgwKTsJLyogTk9UIFJFQUNIRUQgKi8KKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTY5MSw3ICs3MDksNyBAQAogCWlmIChlcCA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAJaWYgKGVwLT5tZV92YWx1ZSA9PSBOVUxMKSB7Ci0JCVB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKKwkJc2V0X2tleV9lcnJvcihrZXkpOwogCQlyZXR1cm4gLTE7CiAJfQogCW9sZF9rZXkgPSBlcC0+bWVfa2V5OwpAQCAtMTAwMCw3ICsxMDE4LDcgQEAKIAkJCQlyZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhtaXNzaW5nLAogCQkJCQkoUHlPYmplY3QgKiltcCwga2V5LCBOVUxMKTsKIAkJfQotCQlQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGtleSk7CisJCXNldF9rZXlfZXJyb3Ioa2V5KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWVsc2UKQEAgLTE2NDQsNyArMTY2Miw3IEBACiAJCQlQeV9JTkNSRUYoZGVmbHQpOwogCQkJcmV0dXJuIGRlZmx0OwogCQl9Ci0JCVB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKKwkJc2V0X2tleV9lcnJvcihrZXkpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJb2xkX2tleSA9IGVwLT5tZV9rZXk7CmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IGMzZWFkNjkuLjBjZDgxOWMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC04MSw2ICs4MSw3IEBACiBzdGF0aWMgdm9pZAogQmFzZUV4Y2VwdGlvbl9kZWFsbG9jKFB5QmFzZUV4Y2VwdGlvbk9iamVjdCAqc2VsZikKIHsKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBCYXNlRXhjZXB0aW9uX2NsZWFyKHNlbGYpOwogICAgIHNlbGYtPm9iX3R5cGUtPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CkBAIC0xNzQsMjcgKzE3NSwxMCBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi0jaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQotLyogd2hpbGUgdGhpcyBtZXRob2QgZ2VuZXJhdGVzIGZhaXJseSB1bmluc3BpcmVkIG91dHB1dCwgaXQgYSBsZWFzdAotICogZ3VhcmFudGVlcyB0aGF0IHdlIGNhbiBkaXNwbGF5IGV4Y2VwdGlvbnMgdGhhdCBoYXZlIHVuaWNvZGUgYXR0cmlidXRlcwotICovCi1zdGF0aWMgUHlPYmplY3QgKgotQmFzZUV4Y2VwdGlvbl91bmljb2RlKFB5QmFzZUV4Y2VwdGlvbk9iamVjdCAqc2VsZikKLXsKLSAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShzZWxmLT5hcmdzKSA9PSAwKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDApOwotICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKHNlbGYtPmFyZ3MpID09IDEpCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9Vbmljb2RlKFB5VHVwbGVfR0VUX0lURU0oc2VsZi0+YXJncywgMCkpOwotICAgIHJldHVybiBQeU9iamVjdF9Vbmljb2RlKHNlbGYtPmFyZ3MpOwotfQotI2VuZGlmIC8qIFB5X1VTSU5HX1VOSUNPREUgKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIEJhc2VFeGNlcHRpb25fbWV0aG9kc1tdID0gewogICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKUJhc2VFeGNlcHRpb25fcmVkdWNlLCBNRVRIX05PQVJHUyB9LAogICAgeyJfX3NldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pQmFzZUV4Y2VwdGlvbl9zZXRzdGF0ZSwgTUVUSF9PIH0sCi0jaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQotICAgeyJfX3VuaWNvZGVfXyIsIChQeUNGdW5jdGlvbilCYXNlRXhjZXB0aW9uX3VuaWNvZGUsIE1FVEhfTk9BUkdTIH0sCi0jZW5kaWYKICAgIHtOVUxMLCBOVUxMLCAwLCBOVUxMfSwKIH07CiAKQEAgLTIwNiwxMiArMTkwLDE5IEBACiAgICAgcmV0dXJuIFB5U2VxdWVuY2VfR2V0SXRlbShzZWxmLT5hcmdzLCBpbmRleCk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitCYXNlRXhjZXB0aW9uX2dldHNsaWNlKFB5QmFzZUV4Y2VwdGlvbk9iamVjdCAqc2VsZiwKKwkJCVB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3Qgc3RvcCkKK3sKKyAgICByZXR1cm4gUHlTZXF1ZW5jZV9HZXRTbGljZShzZWxmLT5hcmdzLCBzdGFydCwgc3RvcCk7Cit9CisKIHN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBCYXNlRXhjZXB0aW9uX2FzX3NlcXVlbmNlID0gewogICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aDsgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQ7ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogc3FfcmVwZWF0OyAqLwogICAgIChzc2l6ZWFyZ2Z1bmMpQmFzZUV4Y2VwdGlvbl9nZXRpdGVtLCAgLyogc3FfaXRlbTsgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9zbGljZTsgKi8KKyAgICAoc3NpemVzc2l6ZWFyZ2Z1bmMpQmFzZUV4Y2VwdGlvbl9nZXRzbGljZSwgIC8qIHNxX3NsaWNlOyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19pdGVtOyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19zbGljZTsgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb250YWluczsgKi8KQEAgLTQ1Niw2ICs0NDcsNyBAQAogc3RhdGljIHZvaWQKIFN5c3RlbUV4aXRfZGVhbGxvYyhQeVN5c3RlbUV4aXRPYmplY3QgKnNlbGYpCiB7CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgU3lzdGVtRXhpdF9jbGVhcihzZWxmKTsKICAgICBzZWxmLT5vYl90eXBlLT50cF9mcmVlKChQeU9iamVjdCAqKXNlbGYpOwogfQpAQCAtNTE4LDcgKzUxMCw3IEBACiAgICAgaWYgKEJhc2VFeGNlcHRpb25faW5pdCgoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICopc2VsZiwgYXJncywga3dkcykgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIDw9IDEpIHsKKyAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSA8PSAxIHx8IFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPiAzKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNTYyLDYgKzU1NCw3IEBACiBzdGF0aWMgdm9pZAogRW52aXJvbm1lbnRFcnJvcl9kZWFsbG9jKFB5RW52aXJvbm1lbnRFcnJvck9iamVjdCAqc2VsZikKIHsKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBFbnZpcm9ubWVudEVycm9yX2NsZWFyKHNlbGYpOwogICAgIHNlbGYtPm9iX3R5cGUtPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CkBAIC03NjAsNiArNzUzLDcgQEAKIHN0YXRpYyB2b2lkCiBXaW5kb3dzRXJyb3JfZGVhbGxvYyhQeVdpbmRvd3NFcnJvck9iamVjdCAqc2VsZikKIHsKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBXaW5kb3dzRXJyb3JfY2xlYXIoc2VsZik7CiAgICAgc2VsZi0+b2JfdHlwZS0+dHBfZnJlZSgoUHlPYmplY3QgKilzZWxmKTsKIH0KQEAgLTgzNCw5ICs4MjgsOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2VsZi0+bXllcnJubykgewotICAgICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPm15ZXJybm8pOwotICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXBsZSwgMCwgc2VsZi0+bXllcnJubyk7CisgICAgICAgIGlmIChzZWxmLT53aW5lcnJvcikgeworICAgICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPndpbmVycm9yKTsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwbGUsIDAsIHNlbGYtPndpbmVycm9yKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKQEAgLTg1OCw3ICs4NTIsNyBAQAogICAgICAgICBQeV9ERUNSRUYoZm10KTsKICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoc2VsZi0+bXllcnJubyAmJiBzZWxmLT5zdHJlcnJvcikgeworICAgIGVsc2UgaWYgKHNlbGYtPndpbmVycm9yICYmIHNlbGYtPnN0cmVycm9yKSB7CiAgICAgICAgIFB5T2JqZWN0ICpmbXQ7CiAgICAgICAgIFB5T2JqZWN0ICp0dXBsZTsKIApAQCAtODcyLDkgKzg2Niw5IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzZWxmLT5teWVycm5vKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoc2VsZi0+bXllcnJubyk7Ci0gICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cGxlLCAwLCBzZWxmLT5teWVycm5vKTsKKyAgICAgICAgaWYgKHNlbGYtPndpbmVycm9yKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoc2VsZi0+d2luZXJyb3IpOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXBsZSwgMCwgc2VsZi0+d2luZXJyb3IpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwpAQCAtMTAzNSw2ICsxMDI5LDcgQEAKIHN0YXRpYyB2b2lkCiBTeW50YXhFcnJvcl9kZWFsbG9jKFB5U3ludGF4RXJyb3JPYmplY3QgKnNlbGYpCiB7CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgU3ludGF4RXJyb3JfY2xlYXIoc2VsZik7CiAgICAgc2VsZi0+b2JfdHlwZS0+dHBfZnJlZSgoUHlPYmplY3QgKilzZWxmKTsKIH0KQEAgLTE1NTEsNiArMTU0Niw3IEBACiBzdGF0aWMgdm9pZAogVW5pY29kZUVycm9yX2RlYWxsb2MoUHlVbmljb2RlRXJyb3JPYmplY3QgKnNlbGYpCiB7CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgVW5pY29kZUVycm9yX2NsZWFyKHNlbGYpOwogICAgIHNlbGYtPm9iX3R5cGUtPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CkBAIC0xNjM3LDcgKzE2MzMsNyBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBfUHlFeGNfVW5pY29kZUVuY29kZUVycm9yID0gewogICAgIFB5T2JqZWN0X0hFQURfSU5JVChOVUxMKQogICAgIDAsCi0gICAgIlVuaWNvZGVFbmNvZGVFcnJvciIsCisgICAgRVhDX01PRFVMRV9OQU1FICJVbmljb2RlRW5jb2RlRXJyb3IiLAogICAgIHNpemVvZihQeVVuaWNvZGVFcnJvck9iamVjdCksIDAsCiAgICAgKGRlc3RydWN0b3IpVW5pY29kZUVycm9yX2RlYWxsb2MsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgKHJlcHJmdW5jKVVuaWNvZGVFbmNvZGVFcnJvcl9zdHIsIDAsIDAsIDAsCkBAIC0xODEyLDcgKzE4MDgsNyBAQAogICAgIChkZXN0cnVjdG9yKVVuaWNvZGVFcnJvcl9kZWFsbG9jLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogICAgIChyZXByZnVuYylVbmljb2RlVHJhbnNsYXRlRXJyb3Jfc3RyLCAwLCAwLCAwLAogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCi0gICAgUHlEb2NfU1RSKCJVbmljb2RlIGRlY29kaW5nIGVycm9yLiIpLCAodHJhdmVyc2Vwcm9jKVVuaWNvZGVFcnJvcl90cmF2ZXJzZSwKKyAgICBQeURvY19TVFIoIlVuaWNvZGUgdHJhbnNsYXRpb24gZXJyb3IuIiksICh0cmF2ZXJzZXByb2MpVW5pY29kZUVycm9yX3RyYXZlcnNlLAogICAgIChpbnF1aXJ5KVVuaWNvZGVFcnJvcl9jbGVhciwgMCwgMCwgMCwgMCwgMCwgVW5pY29kZUVycm9yX21lbWJlcnMsCiAgICAgMCwgJl9QeUV4Y19Vbmljb2RlRXJyb3IsIDAsIDAsIDAsIG9mZnNldG9mKFB5VW5pY29kZUVycm9yT2JqZWN0LCBkaWN0KSwKICAgICAoaW5pdHByb2MpVW5pY29kZVRyYW5zbGF0ZUVycm9yX2luaXQsIDAsIEJhc2VFeGNlcHRpb25fbmV3LApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9maWxlb2JqZWN0LmMgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwppbmRleCBmYjhhNTQyLi5mMmFlYjlkIDEwMDY0NAotLS0gYS9PYmplY3RzL2ZpbGVvYmplY3QuYworKysgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwpAQCAtNTQwLDcgKzU0MCw3IEBACiAJaW50IHdoZW5jZTsKIAlpbnQgcmV0OwogCVB5X29mZl90IG9mZnNldDsKLQlQeU9iamVjdCAqb2Zmb2JqOworCVB5T2JqZWN0ICpvZmZvYmosICpvZmZfaW5kZXg7CiAKIAlpZiAoZi0+Zl9mcCA9PSBOVUxMKQogCQlyZXR1cm4gZXJyX2Nsb3NlZCgpOwpAQCAtNTQ4LDEyICs1NDgsMjUgQEAKIAl3aGVuY2UgPSAwOwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xpOnNlZWsiLCAmb2Zmb2JqLCAmd2hlbmNlKSkKIAkJcmV0dXJuIE5VTEw7CisJb2ZmX2luZGV4ID0gUHlOdW1iZXJfSW5kZXgob2Zmb2JqKTsKKwlpZiAoIW9mZl9pbmRleCkgeworCQlpZiAoIVB5RmxvYXRfQ2hlY2sob2Zmb2JqKSkKKwkJCXJldHVybiBOVUxMOworCQkvKiBEZXByZWNhdGVkIGluIDIuNiAqLworCQlQeUVycl9DbGVhcigpOworCQlpZiAoUHlFcnJfV2FybihQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisJCQkgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpKQorCQkJcmV0dXJuIE5VTEw7CisJCW9mZl9pbmRleCA9IG9mZm9iajsKKwkJUHlfSU5DUkVGKG9mZm9iaik7CisJfQogI2lmICFkZWZpbmVkKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQpCi0Jb2Zmc2V0ID0gUHlJbnRfQXNMb25nKG9mZm9iaik7CisJb2Zmc2V0ID0gUHlJbnRfQXNMb25nKG9mZl9pbmRleCk7CiAjZWxzZQotCW9mZnNldCA9IFB5TG9uZ19DaGVjayhvZmZvYmopID8KLQkJUHlMb25nX0FzTG9uZ0xvbmcob2Zmb2JqKSA6IFB5SW50X0FzTG9uZyhvZmZvYmopOworCW9mZnNldCA9IFB5TG9uZ19DaGVjayhvZmZfaW5kZXgpID8KKwkJUHlMb25nX0FzTG9uZ0xvbmcob2ZmX2luZGV4KSA6IFB5SW50X0FzTG9uZyhvZmZfaW5kZXgpOwogI2VuZGlmCisJUHlfREVDUkVGKG9mZl9pbmRleCk7CiAJaWYgKFB5RXJyX09jY3VycmVkKCkpCiAJCXJldHVybiBOVUxMOwogCkBAIC05MjcsNyArOTQwLDcgQEAKIAkJbmRvbmUgKz0gbm5vdzsKIAkJbnRvZG8gLT0gbm5vdzsKIAl9Ci0JcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKW5kb25lKTsKKwlyZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QobmRvbmUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwMDYsNiArMTAxOSw3IEBACiAJc2l6ZV90IG5mcmVlOwkvKiAjIG9mIGZyZWUgYnVmZmVyIHNsb3RzOyBwdmVuZC1wdmZyZWUgKi8KIAlzaXplX3QgdG90YWxfdl9zaXplOyAgLyogdG90YWwgIyBvZiBzbG90cyBpbiBidWZmZXIgKi8KIAlzaXplX3QgaW5jcmVtZW50OwkvKiBhbW91bnQgdG8gaW5jcmVtZW50IHRoZSBidWZmZXIgKi8KKwlzaXplX3QgcHJldl92X3NpemU7CiAKIAkvKiBPcHRpbWl6ZSBmb3Igbm9ybWFsIGNhc2U6ICBhdm9pZCBfUHlTdHJpbmdfUmVzaXplIGlmIGF0IGFsbAogCSAqIHBvc3NpYmxlIHZpYSBmaXJzdCByZWFkaW5nIGludG8gc3RhY2sgYnVmZmVyICJidWYiLgpAQCAtMTEyMCw4ICsxMTM0LDExIEBACiAJCS8qIGV4cGFuZCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwogCQlhc3NlcnQoKihwdmVuZC0xKSA9PSAnXDAnKTsKIAkJaW5jcmVtZW50ID0gdG90YWxfdl9zaXplID4+IDI7CS8qIG1pbGQgZXhwb25lbnRpYWwgZ3Jvd3RoICovCisJCXByZXZfdl9zaXplID0gdG90YWxfdl9zaXplOwogCQl0b3RhbF92X3NpemUgKz0gaW5jcmVtZW50OwotCQlpZiAodG90YWxfdl9zaXplID4gUFlfU1NJWkVfVF9NQVgpIHsKKwkJLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCisJCWlmICh0b3RhbF92X3NpemUgPD0gcHJldl92X3NpemUgfHwKKwkJICAgIHRvdGFsX3Zfc2l6ZSA+IFBZX1NTSVpFX1RfTUFYKSB7CiAJCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKIAkJCSAgICAibGluZSBpcyBsb25nZXIgdGhhbiBhIFB5dGhvbiBzdHJpbmcgY2FuIGhvbGQiKTsKIAkJCVB5X0RFQ1JFRih2KTsKQEAgLTExMzAsNyArMTE0Nyw3IEBACiAJCWlmIChfUHlTdHJpbmdfUmVzaXplKCZ2LCAoaW50KXRvdGFsX3Zfc2l6ZSkgPCAwKQogCQkJcmV0dXJuIE5VTEw7CiAJCS8qIG92ZXJ3cml0ZSB0aGUgdHJhaWxpbmcgbnVsbCBieXRlICovCi0JCXB2ZnJlZSA9IEJVRih2KSArICh0b3RhbF92X3NpemUgLSBpbmNyZW1lbnQgLSAxKTsKKwkJcHZmcmVlID0gQlVGKHYpICsgKHByZXZfdl9zaXplIC0gMSk7CiAJfQogCWlmIChCVUYodikgKyB0b3RhbF92X3NpemUgIT0gcCkKIAkJX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgcCAtIEJVRih2KSk7CkBAIC0yMDE0LDcgKzIwMzEsNyBAQAogICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfHNpOmZpbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZvX25hbWUsICZtb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmc2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwogCiAJCWlmIChmaWxsX2ZpbGVfZmllbGRzKGZvc2VsZiwgTlVMTCwgb19uYW1lLCBtb2RlLAogCQkJCSAgICAgZmNsb3NlKSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9pbnRvYmplY3QuYyBiL09iamVjdHMvaW50b2JqZWN0LmMKaW5kZXggYjQyMGMxMi4uMGI3NDZkZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9pbnRvYmplY3QuYworKysgYi9PYmplY3RzL2ludG9iamVjdC5jCkBAIC01NTcsNiArNTU3LDE3IEBACiAJfQogfQogCisvKiBJbnRlZ2VyIG92ZXJmbG93IGNoZWNraW5nIGZvciB1bmFyeSBuZWdhdGlvbjogb24gYSAyJ3MtY29tcGxlbWVudAorICogYm94LCAteCBvdmVyZmxvd3MgaWZmIHggaXMgdGhlIG1vc3QgbmVnYXRpdmUgbG9uZy4gIEluIHRoaXMgY2FzZSB3ZQorICogZ2V0IC14ID09IHguICBIb3dldmVyLCAteCBpcyB1bmRlZmluZWQgKGJ5IEMpIGlmIHggL2lzLyB0aGUgbW9zdAorICogbmVnYXRpdmUgbG9uZyAoaXQncyBhIHNpZ25lZCBvdmVyZmxvdyBjYXNlKSwgYW5kIHNvbWUgY29tcGlsZXJzIGNhcmUuCisgKiBTbyB3ZSBjYXN0IHggdG8gdW5zaWduZWQgbG9uZyBmaXJzdC4gIEhvd2V2ZXIsIHRoZW4gb3RoZXIgY29tcGlsZXJzCisgKiB3YXJuIGFib3V0IGFwcGx5aW5nIHVuYXJ5IG1pbnVzIHRvIGFuIHVuc2lnbmVkIG9wZXJhbmQuICBIZW5jZSB0aGUKKyAqIHdlaXJkICIwLSIuCisgKi8KKyNkZWZpbmUgVU5BUllfTkVHX1dPVUxEX09WRVJGTE9XKHgpCVwKKwkoKHgpIDwgMCAmJiAodW5zaWduZWQgbG9uZykoeCkgPT0gMC0odW5zaWduZWQgbG9uZykoeCkpCisKIC8qIFJldHVybiB0eXBlIG9mIGlfZGl2bW9kICovCiBlbnVtIGRpdm1vZF9yZXN1bHQgewogCURJVk1PRF9PSywJCS8qIENvcnJlY3QgcmVzdWx0ICovCkBAIC01NzYsNyArNTg3LDcgQEAKIAkJcmV0dXJuIERJVk1PRF9FUlJPUjsKIAl9CiAJLyogKC1zeXMubWF4aW50LTEpLy0xIGlzIHRoZSBvbmx5IG92ZXJmbG93IGNhc2UuICovCi0JaWYgKHkgPT0gLTEgJiYgeCA8IDAgJiYgeCA9PSAteCkKKwlpZiAoeSA9PSAtMSAmJiBVTkFSWV9ORUdfV09VTERfT1ZFUkZMT1coeCkpCiAJCXJldHVybiBESVZNT0RfT1ZFUkZMT1c7CiAJeGRpdnkgPSB4IC8geTsKIAl4bW9keSA9IHggLSB4ZGl2eSAqIHk7CkBAIC03NDQsMTAgKzc1NSwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGludF9uZWcoUHlJbnRPYmplY3QgKnYpCiB7Ci0JcmVnaXN0ZXIgbG9uZyBhLCB4OworCXJlZ2lzdGVyIGxvbmcgYTsKIAlhID0gdi0+b2JfaXZhbDsKLQl4ID0gLWE7Ci0JaWYgKGEgPCAwICYmIHggPCAwKSB7CisgICAgICAgIC8qIGNoZWNrIGZvciBvdmVyZmxvdyAqLworCWlmIChVTkFSWV9ORUdfV09VTERfT1ZFUkZMT1coYSkpIHsKIAkJUHlPYmplY3QgKm8gPSBQeUxvbmdfRnJvbUxvbmcoYSk7CiAJCWlmIChvICE9IE5VTEwpIHsKIAkJCVB5T2JqZWN0ICpyZXN1bHQgPSBQeU51bWJlcl9OZWdhdGl2ZShvKTsKQEAgLTc1Niw3ICs3NjcsNyBAQAogCQl9CiAJCXJldHVybiBOVUxMOwogCX0KLQlyZXR1cm4gUHlJbnRfRnJvbUxvbmcoeCk7CisJcmV0dXJuIFB5SW50X0Zyb21Mb25nKC1hKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTk1NSw4ICs5NjYsMjUgQEAKIAkJcmV0dXJuIFB5SW50X0Zyb21Mb25nKDBMKTsKIAlpZiAoYmFzZSA9PSAtOTA5KQogCQlyZXR1cm4gUHlOdW1iZXJfSW50KHgpOwotCWlmIChQeVN0cmluZ19DaGVjayh4KSkKLQkJcmV0dXJuIFB5SW50X0Zyb21TdHJpbmcoUHlTdHJpbmdfQVNfU1RSSU5HKHgpLCBOVUxMLCBiYXNlKTsKKwlpZiAoUHlTdHJpbmdfQ2hlY2soeCkpIHsKKwkJLyogU2luY2UgUHlJbnRfRnJvbVN0cmluZyBkb2Vzbid0IGhhdmUgYSBsZW5ndGggcGFyYW1ldGVyLAorCQkgKiBjaGVjayBoZXJlIGZvciBwb3NzaWJsZSBOVUxzIGluIHRoZSBzdHJpbmcuICovCisJCWNoYXIgKnN0cmluZyA9IFB5U3RyaW5nX0FTX1NUUklORyh4KTsKKwkJaWYgKHN0cmxlbihzdHJpbmcpICE9IFB5U3RyaW5nX1NpemUoeCkpIHsKKwkJCS8qIGNyZWF0ZSBhIHJlcHIoKSBvZiB0aGUgaW5wdXQgc3RyaW5nLAorCQkJICoganVzdCBsaWtlIFB5SW50X0Zyb21TdHJpbmcgZG9lcyAqLworCQkJUHlPYmplY3QgKnNyZXByOworCQkJc3JlcHIgPSBQeU9iamVjdF9SZXByKHgpOworCQkJaWYgKHNyZXByID09IE5VTEwpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKwkJCSAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlcyIsCisJCQkgICAgIGJhc2UsIFB5U3RyaW5nX0FTX1NUUklORyhzcmVwcikpOworCQkJUHlfREVDUkVGKHNyZXByKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXJldHVybiBQeUludF9Gcm9tU3RyaW5nKHN0cmluZywgTlVMTCwgYmFzZSk7CisJfQogI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKIAlpZiAoUHlVbmljb2RlX0NoZWNrKHgpKQogCQlyZXR1cm4gUHlJbnRfRnJvbVVuaWNvZGUoUHlVbmljb2RlX0FTX1VOSUNPREUoeCksCmRpZmYgLS1naXQgYS9PYmplY3RzL2xpc3RvYmplY3QuYyBiL09iamVjdHMvbGlzdG9iamVjdC5jCmluZGV4IDlhMTE2ODAuLjRjOWM0YzMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbGlzdG9iamVjdC5jCisrKyBiL09iamVjdHMvbGlzdG9iamVjdC5jCkBAIC04NjMsMTcgKzg2MywxMiBAQAogbGlzdHBvcChQeUxpc3RPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogCVB5X3NzaXplX3QgaSA9IC0xOwotCVB5T2JqZWN0ICp2LCAqYXJnID0gTlVMTDsKKwlQeU9iamVjdCAqdjsKIAlpbnQgc3RhdHVzOwogCi0JaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAicG9wIiwgMCwgMSwgJmFyZykpCisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwb3AiLCAmaSkpCiAJCXJldHVybiBOVUxMOwotCWlmIChhcmcgIT0gTlVMTCkgewotCQlpZiAoUHlJbnRfQ2hlY2soYXJnKSkKLQkJCWkgPSBQeUludF9BU19MT05HKChQeUludE9iamVjdCopIGFyZyk7Ci0JCWVsc2UgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwb3AiLCAmaSkpCi0gICAJCQlyZXR1cm4gTlVMTDsKLQl9CisKIAlpZiAoc2VsZi0+b2Jfc2l6ZSA9PSAwKSB7CiAJCS8qIFNwZWNpYWwtY2FzZSBtb3N0IGNvbW1vbiBmYWlsdXJlIGNhdXNlICovCiAJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAicG9wIGZyb20gZW1wdHkgbGlzdCIpOwpAQCAtOTUxLDkgKzk0NiwxMCBAQAogCWlmIChyZXMgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCWlmICghUHlJbnRfQ2hlY2socmVzKSkgeworCQlQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorCQkJICAgICAiY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IHJldHVybiBpbnQsIG5vdCAlLjIwMHMiLAorCQkJICAgICByZXMtPm9iX3R5cGUtPnRwX25hbWUpOwogCQlQeV9ERUNSRUYocmVzKTsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLQkJCQkiY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IHJldHVybiBpbnQiKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlpID0gUHlJbnRfQXNMb25nKHJlcyk7CkBAIC0yNTA3LDggKzI1MDMsOSBAQAogCQl9CiAJfQogCWVsc2UgewotCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotCQkJCSJsaXN0IGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyIpOworCQlQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorCQkJICAgICAibGlzdCBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMsIG5vdCAlLjIwMHMiLAorCQkJICAgICBpdGVtLT5vYl90eXBlLT50cF9uYW1lKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogfQpAQCAtMjYyNCw2ICsyNjIxLDExIEBACiAKIAkJCWdhcmJhZ2UgPSAoUHlPYmplY3QqKikKIAkJCQlQeU1lbV9NQUxMT0Moc2xpY2VsZW5ndGgqc2l6ZW9mKFB5T2JqZWN0KikpOworCQkJaWYgKCFnYXJiYWdlKSB7CisJCQkJUHlfREVDUkVGKHNlcSk7CisJCQkJUHlFcnJfTm9NZW1vcnkoKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CiAKIAkJCXNlbGZpdGVtcyA9IHNlbGYtPm9iX2l0ZW07CiAJCQlzZXFpdGVtcyA9IFB5U2VxdWVuY2VfRmFzdF9JVEVNUyhzZXEpOwpAQCAtMjY0Niw4ICsyNjQ4LDkgQEAKIAkJfQogCX0KIAllbHNlIHsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLQkJCQkibGlzdCBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMiKTsKKwkJUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKwkJCSAgICAgImxpc3QgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzLCBub3QgJS4yMDBzIiwKKwkJCSAgICAgaXRlbS0+b2JfdHlwZS0+dHBfbmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2xvbmdvYmplY3QuYyBiL09iamVjdHMvbG9uZ29iamVjdC5jCmluZGV4IDU2NmU2YTcuLmY2ODY1NmIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbG9uZ29iamVjdC5jCisrKyBiL09iamVjdHMvbG9uZ29iamVjdC5jCkBAIC0xOTEsNiArMTkxLDE4IEBACiAJcmV0dXJuIChQeU9iamVjdCAqKXY7CiB9CiAKKy8qIENoZWNraW5nIGZvciBvdmVyZmxvdyBpbiBQeUxvbmdfQXNMb25nIGlzIGEgUElUQSBzaW5jZSBDIGRvZXNuJ3QgZGVmaW5lCisgKiBhbnl0aGluZyBhYm91dCB3aGF0IGhhcHBlbnMgd2hlbiBhIHNpZ25lZCBpbnRlZ2VyIG9wZXJhdGlvbiBvdmVyZmxvd3MsCisgKiBhbmQgc29tZSBjb21waWxlcnMgdGhpbmsgdGhleSdyZSBkb2luZyB5b3UgYSBmYXZvciBieSBiZWluZyAiY2xldmVyIgorICogdGhlbi4gIFRoZSBiaXQgcGF0dGVybiBmb3IgdGhlIGxhcmdlc3QgcG9zdGl2ZSBzaWduZWQgbG9uZyBpcworICogKHVuc2lnbmVkIGxvbmcpTE9OR19NQVgsIGFuZCBmb3IgdGhlIHNtYWxsZXN0IG5lZ2F0aXZlIHNpZ25lZCBsb25nCisgKiBpdCBpcyBhYnMoTE9OR19NSU4pLCB3aGljaCB3ZSBjb3VsZCB3cml0ZSAtKHVuc2lnbmVkIGxvbmcpTE9OR19NSU4uCisgKiBIb3dldmVyLCBzb21lIG90aGVyIGNvbXBpbGVycyB3YXJuIGFib3V0IGFwcGx5aW5nIHVuYXJ5IG1pbnVzIHRvIGFuCisgKiB1bnNpZ25lZCBvcGVyYW5kLiAgSGVuY2UgdGhlIHdlaXJkICIwLSIuCisgKi8KKyNkZWZpbmUgUFlfQUJTX0xPTkdfTUlOCQkoMC0odW5zaWduZWQgbG9uZylMT05HX01JTikKKyNkZWZpbmUgUFlfQUJTX1NTSVpFX1RfTUlOCSgwLShzaXplX3QpUFlfU1NJWkVfVF9NSU4pCisKIC8qIEdldCBhIEMgbG9uZyBpbnQgZnJvbSBhIGxvbmcgaW50IG9iamVjdC4KICAgIFJldHVybnMgLTEgYW5kIHNldHMgYW4gZXJyb3IgY29uZGl0aW9uIGlmIG92ZXJmbG93IG9jY3Vycy4gKi8KIApAQCAtMjIzLDE0ICsyMzUsMTYgQEAKIAkJaWYgKCh4ID4+IFNISUZUKSAhPSBwcmV2KQogCQkJZ290byBvdmVyZmxvdzsKIAl9Ci0JLyogSGF2ZW4ndCBsb3N0IGFueSBiaXRzLCBidXQgaWYgdGhlIHNpZ24gYml0IGlzIHNldCB3ZSdyZSBpbgotCSAqIHRyb3VibGUgKnVubGVzcyogdGhpcyBpcyB0aGUgbWluIG5lZ2F0aXZlIG51bWJlci4gIFNvLAotCSAqIHRyb3VibGUgaWZmIHNpZ24gYml0IHNldCAmJiAocG9zaXRpdmUgfHwgc29tZSBiaXQgc2V0IG90aGVyCi0JICogdGhhbiB0aGUgc2lnbiBiaXQpLgotCSAqLwotCWlmICgobG9uZyl4IDwgMCAmJiAoc2lnbiA+IDAgfHwgKHggPDwgMSkgIT0gMCkpCi0JCWdvdG8gb3ZlcmZsb3c7Ci0JcmV0dXJuIChsb25nKXggKiBzaWduOworCS8qIEhhdmVuJ3QgbG9zdCBhbnkgYml0cywgYnV0IGNhc3RpbmcgdG8gbG9uZyByZXF1aXJlcyBleHRyYSBjYXJlCisJICogKHNlZSBjb21tZW50IGFib3ZlKS4KKyAgICAgICAgICovCisJaWYgKHggPD0gKHVuc2lnbmVkIGxvbmcpTE9OR19NQVgpIHsKKwkJcmV0dXJuIChsb25nKXggKiBzaWduOworCX0KKwllbHNlIGlmIChzaWduIDwgMCAmJiB4ID09IFBZX0FCU19MT05HX01JTikgeworCQlyZXR1cm4gTE9OR19NSU47CisJfQorCS8qIGVsc2Ugb3ZlcmZsb3cgKi8KIAogIG92ZXJmbG93OgogCVB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLApAQCAtMjY2LDE0ICsyODAsMTYgQEAKIAkJaWYgKCh4ID4+IFNISUZUKSAhPSBwcmV2KQogCQkJZ290byBvdmVyZmxvdzsKIAl9Ci0JLyogSGF2ZW4ndCBsb3N0IGFueSBiaXRzLCBidXQgaWYgdGhlIHNpZ24gYml0IGlzIHNldCB3ZSdyZSBpbgotCSAqIHRyb3VibGUgKnVubGVzcyogdGhpcyBpcyB0aGUgbWluIG5lZ2F0aXZlIG51bWJlci4gIFNvLAotCSAqIHRyb3VibGUgaWZmIHNpZ24gYml0IHNldCAmJiAocG9zaXRpdmUgfHwgc29tZSBiaXQgc2V0IG90aGVyCi0JICogdGhhbiB0aGUgc2lnbiBiaXQpLgorCS8qIEhhdmVuJ3QgbG9zdCBhbnkgYml0cywgYnV0IGNhc3RpbmcgdG8gYSBzaWduZWQgdHlwZSByZXF1aXJlcworCSAqIGV4dHJhIGNhcmUgKHNlZSBjb21tZW50IGFib3ZlKS4KIAkgKi8KLQlpZiAoKFB5X3NzaXplX3QpeCA8IDAgJiYgKHNpZ24gPiAwIHx8ICh4IDw8IDEpICE9IDApKQotCQlnb3RvIG92ZXJmbG93OwotCXJldHVybiAoUHlfc3NpemVfdCl4ICogc2lnbjsKKwlpZiAoeCA8PSAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKSB7CisJCXJldHVybiAoUHlfc3NpemVfdCl4ICogc2lnbjsKKwl9CisJZWxzZSBpZiAoc2lnbiA8IDAgJiYgeCA9PSBQWV9BQlNfU1NJWkVfVF9NSU4pIHsKKwkJcmV0dXJuIFBZX1NTSVpFX1RfTUlOOworCX0KKwkvKiBlbHNlIG92ZXJmbG93ICovCiAKICBvdmVyZmxvdzoKIAlQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKQEAgLTExNjUsNyArMTE4MSw3IEBACiB7CiAJcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICphID0gKFB5TG9uZ09iamVjdCAqKWFhOwogCVB5U3RyaW5nT2JqZWN0ICpzdHI7Ci0JUHlfc3NpemVfdCBpOworCVB5X3NzaXplX3QgaSwgaiwgc3o7CiAJUHlfc3NpemVfdCBzaXplX2E7CiAJY2hhciAqcDsKIAlpbnQgYml0czsKQEAgLTExODUsMTEgKzEyMDEsMTggQEAKIAkJKytiaXRzOwogCQlpID4+PSAxOwogCX0KLQlpID0gNSArIChzaXplX2EqU0hJRlQgKyBiaXRzLTEpIC8gYml0czsKLQlzdHIgPSAoUHlTdHJpbmdPYmplY3QgKikgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKikwLCBpKTsKKwlpID0gNTsKKwlqID0gc2l6ZV9hKlNISUZUICsgYml0cy0xOworCXN6ID0gaSArIGogLyBiaXRzOworCWlmIChqIC8gU0hJRlQgPCBzaXplX2EgfHwgc3ogPCBpKSB7CisJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorCQkJCSJsb25nIGlzIHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXN0ciA9IChQeVN0cmluZ09iamVjdCAqKSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKTAsIHN6KTsKIAlpZiAoc3RyID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCXAgPSBQeVN0cmluZ19BU19TVFJJTkcoc3RyKSArIGk7CisJcCA9IFB5U3RyaW5nX0FTX1NUUklORyhzdHIpICsgc3o7CiAJKnAgPSAnXDAnOwogCWlmIChhLT5vYl9zaXplIDwgMCkKIAkJc2lnbiA9ICctJzsKQEAgLTEzMDEsNyArMTMyNCw3IEBACiAJCX0gd2hpbGUgKCgqcSsrID0gKnArKykgIT0gJ1wwJyk7CiAJCXEtLTsKIAkJX1B5U3RyaW5nX1Jlc2l6ZSgoUHlPYmplY3QgKiopJnN0ciwKLQkJCQkgKGludCkgKHEgLSBQeVN0cmluZ19BU19TVFJJTkcoc3RyKSkpOworCQkJCSAoUHlfc3NpemVfdCkgKHEgLSBQeVN0cmluZ19BU19TVFJJTkcoc3RyKSkpOwogCX0KIAlyZXR1cm4gKFB5T2JqZWN0ICopc3RyOwogfQpAQCAtMTM1OSwxNCArMTM4MiwxNCBAQAogCXdoaWxlIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soKnApXSA8IGJhc2UpCiAJCSsrcDsKIAkqc3RyID0gcDsKLQluID0gKHAgLSBzdGFydCkgKiBiaXRzX3Blcl9jaGFyOwotCWlmIChuIC8gYml0c19wZXJfY2hhciAhPSBwIC0gc3RhcnQpIHsKKwkvKiBuIDwtICMgb2YgUHl0aG9uIGRpZ2l0cyBuZWVkZWQsID0gY2VpbGluZyhuL1NISUZUKS4gKi8KKwluID0gKHAgLSBzdGFydCkgKiBiaXRzX3Blcl9jaGFyICsgU0hJRlQgLSAxOworCWlmIChuIC8gYml0c19wZXJfY2hhciA8IHAgLSBzdGFydCkgewogCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKIAkJCQkibG9uZyBzdHJpbmcgdG9vIGxhcmdlIHRvIGNvbnZlcnQiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCS8qIG4gPC0gIyBvZiBQeXRob24gZGlnaXRzIG5lZWRlZCwgPSBjZWlsaW5nKG4vU0hJRlQpLiAqLwotCW4gPSAobiArIFNISUZUIC0gMSkgLyBTSElGVDsKKwluID0gbiAvIFNISUZUOwogCXogPSBfUHlMb25nX05ldyhuKTsKIAlpZiAoeiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL09iamVjdHMvb2JtYWxsb2MuYyBiL09iamVjdHMvb2JtYWxsb2MuYwppbmRleCAwY2E4ZjJiLi44NDA1NzBlIDEwMDY0NAotLS0gYS9PYmplY3RzL29ibWFsbG9jLmMKKysrIGIvT2JqZWN0cy9vYm1hbGxvYy5jCkBAIC02OTEsNyArNjkxLDggQEAKIAogI3VuZGVmIFB5X0FERFJFU1NfSU5fUkFOR0UKIAotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMSkKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAxKSB8fCBcCisJCQkgIChfX0dOVUNfXyA+PSA0KSkKICNkZWZpbmUgUHlfTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpCiAjZWxzZQogI2RlZmluZSBQeV9OT19JTkxJTkUKZGlmZiAtLWdpdCBhL09iamVjdHMvc2V0b2JqZWN0LmMgYi9PYmplY3RzL3NldG9iamVjdC5jCmluZGV4IGQ0ODk3MTEuLjBhZjFmMTUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2V0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zZXRvYmplY3QuYwpAQCAtMTAsNiArMTAsMjAgQEAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAorLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQorICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKKyAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCitzdGF0aWMgdm9pZAorc2V0X2tleV9lcnJvcihQeU9iamVjdCAqYXJnKQoreworCVB5T2JqZWN0ICp0dXA7CisJdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7CisJaWYgKCF0dXApCisJCXJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KKwlQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7CisJUHlfREVDUkVGKHR1cCk7Cit9CisKIC8qIFRoaXMgbXVzdCBiZSA+PSAxLiAqLwogI2RlZmluZSBQRVJUVVJCX1NISUZUIDUKIApAQCAtMTc5LDExICsxOTMsMTMgQEAKIAkJaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKIAkJCWZyZWVzbG90ID0gZW50cnk7CiAJfQorCWFzc2VydCgwKTsJLyogTk9UIFJFQUNIRUQgKi8KKwlyZXR1cm4gMDsKIH0KIAogLyoKIEludGVybmFsIHJvdXRpbmUgdG8gaW5zZXJ0IGEgbmV3IGtleSBpbnRvIHRoZSB0YWJsZS4KLVVzZWQgYm90aCBieSB0aGUgaW50ZXJuYWwgcmVzaXplIHJvdXRpbmUgYW5kIGJ5IHRoZSBwdWJsaWMgaW5zZXJ0IHJvdXRpbmUuCitVc2VkIGJ5IHRoZSBwdWJsaWMgaW5zZXJ0IHJvdXRpbmUuCiBFYXRzIGEgcmVmZXJlbmNlIHRvIGtleS4KICovCiBzdGF0aWMgaW50CkBAIC0yMTYsNiArMjMyLDM1IEBACiB9CiAKIC8qCitJbnRlcm5hbCByb3V0aW5lIHVzZWQgYnkgc2V0X3RhYmxlX3Jlc2l6ZSgpIHRvIGluc2VydCBhbiBpdGVtIHdoaWNoIGlzCitrbm93biB0byBiZSBhYnNlbnQgZnJvbSB0aGUgc2V0LiAgVGhpcyByb3V0aW5lIGFsc28gYXNzdW1lcyB0aGF0Cit0aGUgc2V0IGNvbnRhaW5zIG5vIGRlbGV0ZWQgZW50cmllcy4gIEJlc2lkZXMgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQsCit1c2luZyBzZXRfaW5zZXJ0X2NsZWFuKCkgaW4gc2V0X3RhYmxlX3Jlc2l6ZSgpIGlzIGRhbmdlcm91cyAoU0YgYnVnICMxNDU2MjA5KS4KK05vdGUgdGhhdCBubyByZWZjb3VudHMgYXJlIGNoYW5nZWQgYnkgdGhpcyByb3V0aW5lOyBpZiBuZWVkZWQsIHRoZSBjYWxsZXIKK2lzIHJlc3BvbnNpYmxlIGZvciBpbmNyZWYnaW5nIGBrZXlgLgorKi8KK3N0YXRpYyB2b2lkCitzZXRfaW5zZXJ0X2NsZWFuKHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgbG9uZyBoYXNoKQoreworCXJlZ2lzdGVyIHNpemVfdCBpOworCXJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOworCXJlZ2lzdGVyIHNpemVfdCBtYXNrID0gKHNpemVfdClzby0+bWFzazsKKwlzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7CisJcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworCisJaSA9IGhhc2ggJiBtYXNrOworCWVudHJ5ID0gJnRhYmxlW2ldOworCWZvciAocGVydHVyYiA9IGhhc2g7IGVudHJ5LT5rZXkgIT0gTlVMTDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgeworCQlpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7CisJCWVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKwl9CisJc28tPmZpbGwrKzsKKwllbnRyeS0+a2V5ID0ga2V5OworCWVudHJ5LT5oYXNoID0gaGFzaDsKKwlzby0+dXNlZCsrOworfQorCisvKgogUmVzdHJ1Y3R1cmUgdGhlIHRhYmxlIGJ5IGFsbG9jYXRpbmcgYSBuZXcgdGFibGUgYW5kIHJlaW5zZXJ0aW5nIGFsbAoga2V5cyBhZ2Fpbi4gIFdoZW4gZW50cmllcyBoYXZlIGJlZW4gZGVsZXRlZCwgdGhlIG5ldyB0YWJsZSBtYXkKIGFjdHVhbGx5IGJlIHNtYWxsZXIgdGhhbiB0aGUgb2xkIG9uZS4KQEAgLTI5NiwxMSArMzQxLDcgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIEFDVElWRSAqLwogCQkJLS1pOwotCQkJaWYoc2V0X2luc2VydF9rZXkoc28sIGVudHJ5LT5rZXksIGVudHJ5LT5oYXNoKSA9PSAtMSkgewotCQkJCWlmIChpc19vbGR0YWJsZV9tYWxsb2NlZCkKLQkJCQkJUHlNZW1fREVMKG9sZHRhYmxlKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9CisJCQlzZXRfaW5zZXJ0X2NsZWFuKHNvLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCk7CiAJCX0KIAl9CiAKQEAgLTMxOSw4ICszNjAsMTAgQEAKIAlhc3NlcnQoc28tPmZpbGwgPD0gc28tPm1hc2spOyAgLyogYXQgbGVhc3Qgb25lIGVtcHR5IHNsb3QgKi8KIAluX3VzZWQgPSBzby0+dXNlZDsKIAlQeV9JTkNSRUYoZW50cnktPmtleSk7Ci0JaWYgKHNldF9pbnNlcnRfa2V5KHNvLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCkgPT0gLTEpCisJaWYgKHNldF9pbnNlcnRfa2V5KHNvLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCkgPT0gLTEpIHsKKwkJUHlfREVDUkVGKGVudHJ5LT5rZXkpOwogCQlyZXR1cm4gLTE7CisJfQogCWlmICghKHNvLT51c2VkID4gbl91c2VkICYmIHNvLT5maWxsKjMgPj0gKHNvLT5tYXNrKzEpKjIpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gc2V0X3RhYmxlX3Jlc2l6ZShzbywgc28tPnVzZWQ+NTAwMDAgPyBzby0+dXNlZCoyIDogc28tPnVzZWQqNCk7CkBAIC0xMTU1LDcgKzExOTgsMTIgQEAKIAkJfQogCiAJCXdoaWxlIChzZXRfbmV4dCgoUHlTZXRPYmplY3QgKilvdGhlciwgJnBvcywgJmVudHJ5KSkgewotCQkJaWYgKHNldF9jb250YWluc19lbnRyeShzbywgZW50cnkpKSB7CisJCQlpbnQgcnYgPSBzZXRfY29udGFpbnNfZW50cnkoc28sIGVudHJ5KTsKKwkJCWlmIChydiA9PSAtMSkgeworCQkJCVB5X0RFQ1JFRihyZXN1bHQpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJaWYgKHJ2KSB7CiAJCQkJaWYgKHNldF9hZGRfZW50cnkocmVzdWx0LCBlbnRyeSkgPT0gLTEpIHsKIAkJCQkJUHlfREVDUkVGKHJlc3VsdCk7CiAJCQkJCXJldHVybiBOVUxMOwpAQCAtMTE3Miw4ICsxMjIwLDI3IEBACiAJfQogCiAJd2hpbGUgKChrZXkgPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKLQkJaWYgKHNldF9jb250YWluc19rZXkoc28sIGtleSkpIHsKLQkJCWlmIChzZXRfYWRkX2tleShyZXN1bHQsIGtleSkgPT0gLTEpIHsKKwkJaW50IHJ2OworCQlzZXRlbnRyeSBlbnRyeTsKKwkJbG9uZyBoYXNoID0gUHlPYmplY3RfSGFzaChrZXkpOworCisJCWlmIChoYXNoID09IC0xKSB7CisJCQlQeV9ERUNSRUYoaXQpOworCQkJUHlfREVDUkVGKHJlc3VsdCk7CisJCQlQeV9ERUNSRUYoa2V5KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWVudHJ5Lmhhc2ggPSBoYXNoOworCQllbnRyeS5rZXkgPSBrZXk7CisJCXJ2ID0gc2V0X2NvbnRhaW5zX2VudHJ5KHNvLCAmZW50cnkpOworCQlpZiAocnYgPT0gLTEpIHsKKwkJCVB5X0RFQ1JFRihpdCk7CisJCQlQeV9ERUNSRUYocmVzdWx0KTsKKwkJCVB5X0RFQ1JFRihrZXkpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKHJ2KSB7CisJCQlpZiAoc2V0X2FkZF9lbnRyeShyZXN1bHQsICZlbnRyeSkgPT0gLTEpIHsKIAkJCQlQeV9ERUNSRUYoaXQpOwogCQkJCVB5X0RFQ1JFRihyZXN1bHQpOwogCQkJCVB5X0RFQ1JFRihrZXkpOwpAQCAtMTI0OSw3ICsxMzE2LDggQEAKIAkJUHlfc3NpemVfdCBwb3MgPSAwOwogCiAJCXdoaWxlIChzZXRfbmV4dCgoUHlTZXRPYmplY3QgKilvdGhlciwgJnBvcywgJmVudHJ5KSkKLQkJCXNldF9kaXNjYXJkX2VudHJ5KHNvLCBlbnRyeSk7CisJCQlpZiAoc2V0X2Rpc2NhcmRfZW50cnkoc28sIGVudHJ5KSA9PSAtMSkKKwkJCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKIAkJUHlPYmplY3QgKmtleSwgKml0OwogCQlpdCA9IFB5T2JqZWN0X0dldEl0ZXIob3RoZXIpOwpAQCAtMTMxMiwxNyArMTM4MCwyNiBAQAogCQkJZW50cnljb3B5Lmhhc2ggPSBlbnRyeS0+aGFzaDsKIAkJCWVudHJ5Y29weS5rZXkgPSBlbnRyeS0+a2V5OwogCQkJaWYgKCFQeURpY3RfQ29udGFpbnMob3RoZXIsIGVudHJ5LT5rZXkpKSB7Ci0JCQkJaWYgKHNldF9hZGRfZW50cnkoKFB5U2V0T2JqZWN0ICopcmVzdWx0LCAmZW50cnljb3B5KSA9PSAtMSkKKwkJCQlpZiAoc2V0X2FkZF9lbnRyeSgoUHlTZXRPYmplY3QgKilyZXN1bHQsICZlbnRyeWNvcHkpID09IC0xKSB7CisJCQkJCVB5X0RFQ1JFRihyZXN1bHQpOwogCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CiAJCQl9CiAJCX0KIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKIAl3aGlsZSAoc2V0X25leHQoc28sICZwb3MsICZlbnRyeSkpIHsKLQkJaWYgKCFzZXRfY29udGFpbnNfZW50cnkoKFB5U2V0T2JqZWN0ICopb3RoZXIsIGVudHJ5KSkgewotCQkJaWYgKHNldF9hZGRfZW50cnkoKFB5U2V0T2JqZWN0ICopcmVzdWx0LCBlbnRyeSkgPT0gLTEpCisJCWludCBydiA9IHNldF9jb250YWluc19lbnRyeSgoUHlTZXRPYmplY3QgKilvdGhlciwgZW50cnkpOworCQlpZiAocnYgPT0gLTEpIHsKKwkJCVB5X0RFQ1JFRihyZXN1bHQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKCFydikgeworCQkJaWYgKHNldF9hZGRfZW50cnkoKFB5U2V0T2JqZWN0ICopcmVzdWx0LCBlbnRyeSkgPT0gLTEpIHsKKwkJCQlQeV9ERUNSRUYocmVzdWx0KTsKIAkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KIAkJfQogCX0KIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTM3NCwxMSArMTQ1MSwxOCBAQAogCQlQeU9iamVjdCAqdmFsdWU7CiAJCWludCBydjsKIAkJd2hpbGUgKFB5RGljdF9OZXh0KG90aGVyLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7Ci0JCQlydiA9IHNldF9kaXNjYXJkX2tleShzbywga2V5KTsKKwkJCXNldGVudHJ5IGFuX2VudHJ5OworCQkJbG9uZyBoYXNoID0gUHlPYmplY3RfSGFzaChrZXkpOworCisJCQlpZiAoaGFzaCA9PSAtMSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWFuX2VudHJ5Lmhhc2ggPSBoYXNoOworCQkJYW5fZW50cnkua2V5ID0ga2V5OworCQkJcnYgPSBzZXRfZGlzY2FyZF9lbnRyeShzbywgJmFuX2VudHJ5KTsKIAkJCWlmIChydiA9PSAtMSkKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCWlmIChydiA9PSBESVNDQVJEX05PVEZPVU5EKSB7Ci0JCQkJaWYgKHNldF9hZGRfa2V5KHNvLCBrZXkpID09IC0xKQorCQkJCWlmIChzZXRfYWRkX2VudHJ5KHNvLCAmYW5fZW50cnkpID09IC0xKQogCQkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQpAQCAtMTQ4MSw3ICsxNTY1LDEwIEBACiAJCVB5X1JFVFVSTl9GQUxTRTsKIAogCXdoaWxlIChzZXRfbmV4dChzbywgJnBvcywgJmVudHJ5KSkgewotCQlpZiAoIXNldF9jb250YWluc19lbnRyeSgoUHlTZXRPYmplY3QgKilvdGhlciwgZW50cnkpKQorCQlpbnQgcnYgPSBzZXRfY29udGFpbnNfZW50cnkoKFB5U2V0T2JqZWN0ICopb3RoZXIsIGVudHJ5KTsKKwkJaWYgKHJ2ID09IC0xKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICghcnYpCiAJCQlQeV9SRVRVUk5fRkFMU0U7CiAJfQogCVB5X1JFVFVSTl9UUlVFOwpAQCAtMTYyOCw3ICsxNzE1LDcgQEAKIAkJUHlfREVDUkVGKHRtcGtleSk7CiAJCXJldHVybiByZXN1bHQ7CiAJfSBlbHNlIGlmIChydiA9PSBESVNDQVJEX05PVEZPVU5EKSB7Ci0JCVB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKKwkJc2V0X2tleV9lcnJvcihrZXkpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJUHlfUkVUVVJOX05PTkU7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaCBiL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCmluZGV4IDE0ODYzNDcuLjEwNWJhMzEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCkBAIC03OCwxMiArNzgsMTIgQEAKICAgICAgICAgICAgIH0KIAogICAgIGlmIChwb3MgPCAwKSB7Ci0JUHlfSU5DUkVGKHN0cl9vYmopOwotCVB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBzdHJfb2JqKTsKKwlQeV9JTkNSRUYoU1RSSU5HTElCX0VNUFRZKTsKKwlQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKIAlQeV9JTkNSRUYoU1RSSU5HTElCX0VNUFRZKTsKIAlQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKLQlQeV9JTkNSRUYoU1RSSU5HTElCX0VNUFRZKTsKLQlQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKKwlQeV9JTkNSRUYoc3RyX29iaik7ICAgICAgICAKKwlQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgKFB5T2JqZWN0Kikgc3RyX29iaik7CiAJcmV0dXJuIG91dDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nb2JqZWN0LmMgYi9PYmplY3RzL3N0cmluZ29iamVjdC5jCmluZGV4IDAyOGIzNzUuLjYxZTZhZjUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zdHJpbmdvYmplY3QuYwpAQCAtODA0LDEwICs4MDQsMjIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKGZsYWdzICYgUHlfUFJJTlRfUkFXKSB7CisJCWNoYXIgKmRhdGEgPSBvcC0+b2Jfc3ZhbDsKKwkJUHlfc3NpemVfdCBzaXplID0gb3AtPm9iX3NpemU7CisJCXdoaWxlIChzaXplID4gSU5UX01BWCkgeworCQkJLyogVmVyeSBsb25nIHN0cmluZ3MgY2Fubm90IGJlIHdyaXR0ZW4gYXRvbWljYWxseS4KKwkJCSAqIEJ1dCBkb24ndCB3cml0ZSBleGFjdGx5IElOVF9NQVggYnl0ZXMgYXQgYSB0aW1lCisJCQkgKiB0byBhdm9pZCBtZW1vcnkgYWxpZ21lbnQgaXNzdWVzLgorCQkJICovCisJCQljb25zdCBpbnQgY2h1bmtfc2l6ZSA9IElOVF9NQVggJiB+MHgzRkZGOworCQkJZndyaXRlKGRhdGEsIDEsIGNodW5rX3NpemUsIGZwKTsKKwkJCWRhdGEgKz0gY2h1bmtfc2l6ZTsKKwkJCXNpemUgLT0gY2h1bmtfc2l6ZTsKKwkJfQogI2lmZGVmIF9fVk1TCi0gICAgICAgICAgICAgICAgaWYgKG9wLT5vYl9zaXplKSBmd3JpdGUob3AtPm9iX3N2YWwsIChpbnQpIG9wLT5vYl9zaXplLCAxLCBmcCk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUpIGZ3cml0ZShkYXRhLCAoaW50KXNpemUsIDEsIGZwKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZndyaXRlKG9wLT5vYl9zdmFsLCAxLCAoaW50KSBvcC0+b2Jfc2l6ZSwgZnApOworICAgICAgICAgICAgICAgIGZ3cml0ZShkYXRhLCAxLCAoaW50KXNpemUsIGZwKTsKICNlbmRpZgogCQlyZXR1cm4gMDsKIAl9CkBAIC04NDQsNyArODU2LDcgQEAKIAlyZWdpc3RlciBQeVN0cmluZ09iamVjdCogb3AgPSAoUHlTdHJpbmdPYmplY3QqKSBvYmo7CiAJc2l6ZV90IG5ld3NpemUgPSAyICsgNCAqIG9wLT5vYl9zaXplOwogCVB5T2JqZWN0ICp2OwotCWlmIChuZXdzaXplID4gUFlfU1NJWkVfVF9NQVgpIHsKKwlpZiAobmV3c2l6ZSA+IFBZX1NTSVpFX1RfTUFYIHx8IG5ld3NpemUgLyA0ICE9IG9wLT5vYl9zaXplKSB7CiAJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogCQkJInN0cmluZyBpcyB0b28gbGFyZ2UgdG8gbWFrZSByZXByIik7CiAJfQpAQCAtMTA1OSw4ICsxMDcxLDkgQEAKIAkJCXJldHVybiBQeVVuaWNvZGVfQ29udGFpbnMoc3RyX29iaiwgc3ViX29iaik7CiAjZW5kaWYKIAkJaWYgKCFQeVN0cmluZ19DaGVjayhzdWJfb2JqKSkgewotCQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLQkJCSAgICAiJ2luIDxzdHJpbmc+JyByZXF1aXJlcyBzdHJpbmcgYXMgbGVmdCBvcGVyYW5kIik7CisJCQlQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorCQkJICAgICInaW4gPHN0cmluZz4nIHJlcXVpcmVzIHN0cmluZyBhcyBsZWZ0IG9wZXJhbmQsICIKKwkJCSAgICAibm90ICUuMjAwcyIsIHN1Yl9vYmotPm9iX3R5cGUtPnRwX25hbWUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtMTIyOCw4ICsxMjQxLDkgQEAKIAkJfQogCX0KIAllbHNlIHsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLQkJCQkic3RyaW5nIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyIpOworCQlQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorCQkJICAgICAic3RyaW5nIGluZGljZXMgbXVzdCBiZSBpbnRlZ2Vycywgbm90ICUuMjAwcyIsCisJCQkgICAgIGl0ZW0tPm9iX3R5cGUtPnRwX25hbWUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiB9CkBAIC0xNTQzLDExICsxNTU3LDExIEBACiB9CiAKIFB5RG9jX1NUUlZBUihycGFydGl0aW9uX19kb2NfXywKLSJTLnJwYXJ0aXRpb24oc2VwKSAtPiAoaGVhZCwgc2VwLCB0YWlsKVxuXAorIlMucnBhcnRpdGlvbihzZXApIC0+ICh0YWlsLCBzZXAsIGhlYWQpXG5cCiBcblwKIFNlYXJjaGVzIGZvciB0aGUgc2VwYXJhdG9yIHNlcCBpbiBTLCBzdGFydGluZyBhdCB0aGUgZW5kIG9mIFMsIGFuZCByZXR1cm5zXG5cCiB0aGUgcGFydCBiZWZvcmUgaXQsIHRoZSBzZXBhcmF0b3IgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuICBJZiB0aGVcblwKLXNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybnMgUyBhbmQgdHdvIGVtcHR5IHN0cmluZ3MuIik7CitzZXBhcmF0b3IgaXMgbm90IGZvdW5kLCByZXR1cm5zIHR3byBlbXB0eSBzdHJpbmdzIGFuZCBTLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogc3RyaW5nX3JwYXJ0aXRpb24oUHlTdHJpbmdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZXBfb2JqKQpAQCAtNDEzNiw3ICs0MTUwLDggQEAKIAlkb3VibGUgeDsKIAl4ID0gUHlGbG9hdF9Bc0RvdWJsZSh2KTsKIAlpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImZsb2F0IGFyZ3VtZW50IHJlcXVpcmVkIik7CisJCVB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJmbG9hdCBhcmd1bWVudCByZXF1aXJlZCwgIgorCQkJICAgICAibm90ICUuMjAwcyIsIHYtPm9iX3R5cGUtPnRwX25hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChwcmVjIDwgMCkKQEAgLTQyMzcsNyArNDI1Miw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlsbGVuID0gUHlTdHJpbmdfU2l6ZShyZXN1bHQpOwotCWlmIChsbGVuID4gUFlfU1NJWkVfVF9NQVgpIHsKKwlpZiAobGxlbiA+IElOVF9NQVgpIHsKIAkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzdHJpbmcgdG9vIGxhcmdlIGluIF9QeVN0cmluZ19Gb3JtYXRMb25nIik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTQzMzEsNyArNDM0Niw4IEBACiAKIAl4ID0gUHlJbnRfQXNMb25nKHYpOwogCWlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImludCBhcmd1bWVudCByZXF1aXJlZCIpOworCQlQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiaW50IGFyZ3VtZW50IHJlcXVpcmVkLCBub3QgJS4yMDBzIiwKKwkJCSAgICAgdi0+b2JfdHlwZS0+dHBfbmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKHggPCAwICYmIHR5cGUgPT0gJ3UnKSB7CkBAIC00NzI2LDkgKzQ3NDIsMTAgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAJCQkJICAidW5zdXBwb3J0ZWQgZm9ybWF0IGNoYXJhY3RlciAnJWMnICgweCV4KSAiCi0JCQkJICAiYXQgaW5kZXggJWkiLAorCQkJCSAgImF0IGluZGV4ICV6ZCIsCiAJCQkJICBjLCBjLAotCQkJCSAgKGludCkoZm10IC0gMSAtIFB5U3RyaW5nX0FzU3RyaW5nKGZvcm1hdCkpKTsKKwkJCQkgIChQeV9zc2l6ZV90KShmbXQgLSAxIC0KKwkJCQkJICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGZvcm1hdCkpKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCQkJaWYgKHNpZ24pIHsKZGlmZiAtLWdpdCBhL09iamVjdHMvdHVwbGVvYmplY3QuYyBiL09iamVjdHMvdHVwbGVvYmplY3QuYwppbmRleCA2ZjM3MTFmLi5jODViMzVhIDEwMDY0NAotLS0gYS9PYmplY3RzL3R1cGxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCkBAIC02MjAsOCArNjIwLDkgQEAKIAkJfQogCX0KIAllbHNlIHsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgCi0JCQkJInR1cGxlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyIpOworCQlQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAKKwkJCSAgICAgInR1cGxlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2Vycywgbm90ICUuMjAwcyIsCisJCQkgICAgIGl0ZW0tPm9iX3R5cGUtPnRwX25hbWUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL3R5cGVvYmplY3QuYyBiL09iamVjdHMvdHlwZW9iamVjdC5jCmluZGV4IGVhMWQxYTIuLjFiZWYyMDggMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHlwZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHlwZW9iamVjdC5jCkBAIC05OCw3ICs5OCw3IEBACiAJCXMgPSBzdHJyY2hyKHR5cGUtPnRwX25hbWUsICcuJyk7CiAJCWlmIChzICE9IE5VTEwpCiAJCQlyZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoCi0JCQkJdHlwZS0+dHBfbmFtZSwgKGludCkocyAtIHR5cGUtPnRwX25hbWUpKTsKKwkJCSAgICB0eXBlLT50cF9uYW1lLCAoUHlfc3NpemVfdCkocyAtIHR5cGUtPnRwX25hbWUpKTsKIAkJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIl9fYnVpbHRpbl9fIik7CiAJfQogfQpAQCAtMzY0NCw3ICszNjQ0LDcgQEAKIAl3aGlsZSAodHlwZSAmJiB0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpCiAJCXR5cGUgPSB0eXBlLT50cF9iYXNlOwogICAgICAgICAvKiBJZiB0eXBlIGlzIE5VTEwgbm93LCB0aGlzIGlzIGEgcmVhbGx5IHdlaXJkIHR5cGUuCi0gICAgICAgICAgIEluIHRoZSBzYW1lIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICg/KSwganVzdCBzaHV0IHVwLiAqLworICAgICAgICAgICBJbiB0aGUgc3Bpcml0IG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICg/KSwganVzdCBzaHV0IHVwLiAqLwogCWlmICh0eXBlICYmIHR5cGUtPnRwX3NldGF0dHJvICE9IGZ1bmMpIHsKIAkJUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKIAkJCSAgICAgImNhbid0IGFwcGx5IHRoaXMgJXMgdG8gJXMgb2JqZWN0IiwKQEAgLTM4NjEsNyArMzg2MSw3IEBACiAJd2hpbGUgKHN0YXRpY2Jhc2UgJiYgKHN0YXRpY2Jhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkpCiAJCXN0YXRpY2Jhc2UgPSBzdGF0aWNiYXNlLT50cF9iYXNlOwogICAgICAgICAvKiBJZiBzdGF0aWNiYXNlIGlzIE5VTEwgbm93LCBpdCBpcyBhIHJlYWxseSB3ZWlyZCB0eXBlLgotICAgICAgICAgICBJbiB0aGUgc2FtZSBvZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAoPyksIGp1c3Qgc2h1dCB1cC4gKi8KKyAgICAgICAgICAgSW4gdGhlIHNwaXJpdCBvZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAoPyksIGp1c3Qgc2h1dCB1cC4gKi8KIAlpZiAoc3RhdGljYmFzZSAmJiBzdGF0aWNiYXNlLT50cF9uZXcgIT0gdHlwZS0+dHBfbmV3KSB7CiAJCVB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAJCQkgICAgICIlcy5fX25ld19fKCVzKSBpcyBub3Qgc2FmZSwgdXNlICVzLl9fbmV3X18oKSIsCkBAIC00MDE3LDE5ICs0MDE3LDEwIEBACiAJCXJldHVybiAtMTsKIAlsZW4gPSBQeUludF9Bc1NzaXplX3QocmVzKTsKIAlQeV9ERUNSRUYocmVzKTsKLQlpZiAobGVuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0JCXJldHVybiAtMTsKLSNpZiBTSVpFT0ZfU0laRV9UIDwgU0laRU9GX0lOVAotCS8qIE92ZXJmbG93IGNoZWNrIC0tIHJhbmdlIG9mIFB5SW50IGlzIG1vcmUgdGhhbiBDIHNzaXplX3QgKi8KLQlpZiAobGVuICE9IChpbnQpbGVuKSB7Ci0JCVB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotCQkJIl9fbGVuX18oKSBzaG91bGQgcmV0dXJuIDAgPD0gb3V0Y29tZSA8IDIqKjMxIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0jZW5kaWYKIAlpZiAobGVuIDwgMCkgewotCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLQkJCQkiX19sZW5fXygpIHNob3VsZCByZXR1cm4gPj0gMCIpOworCQlpZiAoIVB5RXJyX09jY3VycmVkKCkpCisJCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKwkJCQkJIl9fbGVuX18oKSBzaG91bGQgcmV0dXJuID49IDAiKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gbGVuOwpAQCAtNTU4Myw2ICs1NTc0LDggQEAKIAlQeU9iamVjdCAqb2JqID0gTlVMTDsKIAlQeVR5cGVPYmplY3QgKm9ial90eXBlID0gTlVMTDsKIAorCWlmICghX1B5QXJnX05vS2V5d29yZHMoInN1cGVyIiwga3dkcykpCisJCXJldHVybiAtMTsKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hfE86c3VwZXIiLCAmUHlUeXBlX1R5cGUsICZ0eXBlLCAmb2JqKSkKIAkJcmV0dXJuIC0xOwogCWlmIChvYmogPT0gUHlfTm9uZSkKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jIGIvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKaW5kZXggOTIzMDFjMC4uYmRlMzQ1NCAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKQEAgLTIwNDAsNyArMjA0MCwzMiBAQAogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmhleGRpZ2l0ID0gIjAxMjM0NTY3ODlhYmNkZWYiOwogCi0gICAgcmVwciA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDIgKyA2KnNpemUgKyAxKTsKKyAgICAvKiBYWFgobm5vcndpdHopOiByYXRoZXIgdGhhbiBvdmVyLWFsbG9jYXRpbmcsIGl0IHdvdWxkIGJlCisgICAgICAgYmV0dGVyIHRvIGNob29zZSBhIGRpZmZlcmVudCBzY2hlbWUuICBQZXJoYXBzIHNjYW4gdGhlCisgICAgICAgZmlyc3QgTi1jaGFycyBvZiB0aGUgc3RyaW5nIGFuZCBhbGxvY2F0ZSBiYXNlZCBvbiB0aGF0IHNpemUuCisgICAgKi8KKyAgICAvKiBJbml0aWFsIGFsbG9jYXRpb24gaXMgYmFzZWQgb24gdGhlIGxvbmdlc3QtcG9zc2libGUgdW5pY2hyCisgICAgICAgZXNjYXBlLgorCisgICAgICAgSW4gd2lkZSAoVVRGLTMyKSBidWlsZHMgJ1xVMDB4eHh4eHgnIGlzIDEwIGNoYXJzIHBlciBzb3VyY2UKKyAgICAgICB1bmljaHIsIHNvIGluIHRoaXMgY2FzZSBpdCdzIHRoZSBsb25nZXN0IHVuaWNociBlc2NhcGUuIEluCisgICAgICAgbmFycm93IChVVEYtMTYpIGJ1aWxkcyB0aGlzIGlzIGZpdmUgY2hhcnMgcGVyIHNvdXJjZSB1bmljaHIKKyAgICAgICBzaW5jZSB0aGVyZSBhcmUgdHdvIHVuaWNocnMgaW4gdGhlIHN1cnJvZ2F0ZSBwYWlyLCBzbyBpbiBuYXJyb3cKKyAgICAgICAoVVRGLTE2KSBidWlsZHMgaXQncyBub3QgdGhlIGxvbmdlc3QgdW5pY2hyIGVzY2FwZS4KKworICAgICAgIEluIHdpZGUgb3IgbmFycm93IGJ1aWxkcyAnXHV4eHh4JyBpcyA2IGNoYXJzIHBlciBzb3VyY2UgdW5pY2hyLAorICAgICAgIHNvIGluIHRoZSBuYXJyb3cgKFVURi0xNikgYnVpbGQgY2FzZSBpdCdzIHRoZSBsb25nZXN0IHVuaWNocgorICAgICAgIGVzY2FwZS4KKyAgICAqLworCisgICAgcmVwciA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsCisgICAgICAgIDIKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICAgICAgKyAxMCpzaXplCisjZWxzZQorICAgICAgICArIDYqc2l6ZQorI2VuZGlmCisgICAgICAgICsgMSk7CiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIwNjUsMTUgKzIwOTAsNiBAQAogI2lmZGVmIFB5X1VOSUNPREVfV0lERQogICAgICAgICAvKiBNYXAgMjEtYml0IGNoYXJhY3RlcnMgdG8gJ1xVMDB4eHh4eHgnICovCiAgICAgICAgIGVsc2UgaWYgKGNoID49IDB4MTAwMDApIHsKLQkgICAgUHlfc3NpemVfdCBvZmZzZXQgPSBwIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHJlcHIpOwotCi0JICAgIC8qIFJlc2l6ZSB0aGUgc3RyaW5nIGlmIG5lY2Vzc2FyeSAqLwotCSAgICBpZiAob2Zmc2V0ICsgMTIgPiBQeVN0cmluZ19HRVRfU0laRShyZXByKSkgewotCQlpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVwciwgUHlTdHJpbmdfR0VUX1NJWkUocmVwcikgKyAxMDApKQotCQkgICAgcmV0dXJuIE5VTEw7Ci0JCXAgPSBQeVN0cmluZ19BU19TVFJJTkcocmVwcikgKyBvZmZzZXQ7Ci0JICAgIH0KLQogICAgICAgICAgICAgKnArKyA9ICdcXCc7CiAgICAgICAgICAgICAqcCsrID0gJ1UnOwogICAgICAgICAgICAgKnArKyA9IGhleGRpZ2l0WyhjaCA+PiAyOCkgJiAweDAwMDAwMDBGXTsKQEAgLTIwODYsOCArMjEwMiw4IEBACiAgICAgICAgICAgICAqcCsrID0gaGV4ZGlnaXRbY2ggJiAweDAwMDAwMDBGXTsKIAkgICAgY29udGludWU7CiAgICAgICAgIH0KLSNlbmRpZgotCS8qIE1hcCBVVEYtMTYgc3Vycm9nYXRlIHBhaXJzIHRvIFVuaWNvZGUgXFVYWFhYWFhYWCBlc2NhcGVzICovCisjZWxzZQorCS8qIE1hcCBVVEYtMTYgc3Vycm9nYXRlIHBhaXJzIHRvICdcVTAweHh4eHh4JyAqLwogCWVsc2UgaWYgKGNoID49IDB4RDgwMCAmJiBjaCA8IDB4REMwMCkgewogCSAgICBQeV9VTklDT0RFIGNoMjsKIAkgICAgUHlfVUNTNCB1Y3M7CkBAIC0yMTEyLDYgKzIxMjgsNyBAQAogCSAgICBzLS07CiAJICAgIHNpemUrKzsKIAl9CisjZW5kaWYKIAogICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KICAgICAgICAgaWYgKGNoID49IDI1NikgewpAQCAtMjM2Nyw2ICsyMzg0LDcgQEAKICAgICBQeV9VTklDT0RFIHVuaW1heCA9IFB5VW5pY29kZV9HZXRNYXgoKTsKICNlbmRpZgogCisgICAgLyogWFhYIG92ZXJmbG93IGRldGVjdGlvbiBtaXNzaW5nICovCiAgICAgdiA9IF9QeVVuaWNvZGVfTmV3KChzaXplK1B5X1VOSUNPREVfU0laRS0xKS8gUHlfVU5JQ09ERV9TSVpFKTsKICAgICBpZiAodiA9PSBOVUxMKQogCWdvdG8gb25FcnJvcjsKQEAgLTMxNTMsNiArMzE3MSw3IEBACiAJCQlQeV9zc2l6ZV90IG5lZWRlZCA9ICh0YXJnZXRzaXplIC0gZXh0cmFjaGFycykgKyBcCiAJCQkJICAgICAodGFyZ2V0c2l6ZSA8PCAyKTsKIAkJCWV4dHJhY2hhcnMgKz0gbmVlZGVkOworCQkJLyogWFhYIG92ZXJmbG93IGRldGVjdGlvbiBtaXNzaW5nICovCiAJCQlpZiAoX1B5VW5pY29kZV9SZXNpemUoJnYsCiAJCQkJCSAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHYpICsgbmVlZGVkKSA8IDApIHsKIAkJCSAgICBQeV9ERUNSRUYoeCk7CkBAIC02Njk1LDExICs2NzE0LDExIEBACiB9CiAKIFB5RG9jX1NUUlZBUihycGFydGl0aW9uX19kb2NfXywKLSJTLnJwYXJ0aXRpb24oc2VwKSAtPiAoaGVhZCwgc2VwLCB0YWlsKVxuXAorIlMucnBhcnRpdGlvbihzZXApIC0+ICh0YWlsLCBzZXAsIGhlYWQpXG5cCiBcblwKIFNlYXJjaGVzIGZvciB0aGUgc2VwYXJhdG9yIHNlcCBpbiBTLCBzdGFydGluZyBhdCB0aGUgZW5kIG9mIFMsIGFuZCByZXR1cm5zXG5cCiB0aGUgcGFydCBiZWZvcmUgaXQsIHRoZSBzZXBhcmF0b3IgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuICBJZiB0aGVcblwKLXNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybnMgUyBhbmQgdHdvIGVtcHR5IHN0cmluZ3MuIik7CitzZXBhcmF0b3IgaXMgbm90IGZvdW5kLCByZXR1cm5zIHR3byBlbXB0eSBzdHJpbmdzIGFuZCBTLiIpOwogCiBzdGF0aWMgUHlPYmplY3QqCiB1bmljb2RlX3JwYXJ0aXRpb24oUHlVbmljb2RlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwYXJhdG9yKQpAQCAtNzc0NCwxMCArNzc2MywxMSBAQAogCSAgICBkZWZhdWx0OgogCQlQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKIAkJCSAgICAgInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXIgJyVjJyAoMHgleCkgIgotCQkJICAgICAiYXQgaW5kZXggJWkiLAorCQkJICAgICAiYXQgaW5kZXggJXpkIiwKIAkJCSAgICAgKDMxPD1jICYmIGM8PTEyNikgPyAoY2hhciljIDogJz8nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWMsCi0JCQkgICAgIChpbnQpKGZtdCAtMSAtIFB5VW5pY29kZV9BU19VTklDT0RFKHVmb3JtYXQpKSk7CisJCQkgICAgIChQeV9zc2l6ZV90KShmbXQgLSAxIC0KKwkJCQkJICBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1Zm9ybWF0KSkpOwogCQlnb3RvIG9uRXJyb3I7CiAJICAgIH0KIAkgICAgaWYgKHNpZ24pIHsKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fYnNkZGIuZHNwIGIvUEMvVkM2L19ic2RkYi5kc3AKaW5kZXggMmExNmMzNS4uMGVkZTAxMSAxMDA2NDQKLS0tIGEvUEMvVkM2L19ic2RkYi5kc3AKKysrIGIvUEMvVkM2L19ic2RkYi5kc3AKQEAgLTQ0LDcgKzQ0LDcgQEAKICMgUFJPUCBUYXJnZXRfRGlyICIiDQogRjkwPWRmLmV4ZQ0KICMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cZGItNC4xLjI1XGJ1aWxkX3dpbjMyIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGRiLTQuNC4yMFxidWlsZF93aW4zMiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCiAjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQogIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCkBAIC01NCw3ICs1NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXGRiLTQuMS4yNVxidWlsZF93aW4zMlxSZWxlYXNlX3N0YXRpY1xsaWJkYjQxcy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvb3V0OiIuL19ic2RkYi5weWQiDQorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXGRiLTQuNC4yMFxidWlsZF93aW4zMlxSZWxlYXNlXGxpYmRiNDRzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJtc3ZjcnQiIC9vdXQ6Ii4vX2JzZGRiLnB5ZCINCiAjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiX2JzZGRiIC0gV2luMzIgRGVidWciDQpAQCAtNzIsNyArNzIsNyBAQAogIyBQUk9QIFRhcmdldF9EaXIgIiINCiBGOTA9ZGYuZXhlDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGRiLTQuMS4yNVxidWlsZF93aW4zMiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGRiLTQuNC4yMFxidWlsZF93aW4zMiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCiAjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQogIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCkBAIC04Miw3ICs4Miw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXGRiLTQuMS4yNVxidWlsZF93aW4zMlxSZWxlYXNlX3N0YXRpY1xsaWJkYjQxcy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibXN2Y3J0ZCIgL291dDoiLi9fYnNkZGJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgLi5cLi5cLi5cZGItNC40LjIwXGJ1aWxkX3dpbjMyXFJlbGVhc2VcbGliZGI0NHMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6Im1zdmNydGQiIC9vdXQ6Ii4vX2JzZGRiX2QucHlkIiAvcGRidHlwZTpzZXB0DQogIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQogDQogIUVORElGIA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzLmRzcCBiL1BDL1ZDNi9fY3R5cGVzLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGYxODZhCi0tLSAvZGV2L251bGwKKysrIGIvUEMvVkM2L19jdHlwZXMuZHNwCkBAIC0wLDAgKzEsMTMxIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXMiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisNCitDRkc9X2N0eXBlcyAtIFdpbjMyIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIgQ0ZHPSJfY3R5cGVzIC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXMiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KK0NQUD1jbC5leGUNCitNVEw9bWlkbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICIuIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0Y5MD1kZi5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzLnB5ZCINCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICIuIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitGOTA9ZGYuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX2QucHlkIiAvcGRidHlwZTpzZXB0DQorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQorDQorIUVORElGIA0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi96bGliLmRzcCBiL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIFBDL1ZDNi96bGliLmRzcApyZW5hbWUgdG8gUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AKaW5kZXggNDJmZTY3NC4uOTQyYjMwYyAxMDA2NDQKLS0tIGEvUEMvVkM2L3psaWIuZHNwCisrKyBiL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCkBAIC0xLDM1ICsxLDM1IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InpsaWIiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXNfdGVzdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KICMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCiAjICoqIERPIE5PVCBFRElUICoqDQogDQogIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KIA0KLUNGRz16bGliIC0gV2luMzIgRGVidWcNCitDRkc9X2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWcNCiAhTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQogIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQogIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInpsaWIubWFrIi4NCishTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIuDQogIU1FU1NBR0UgDQogIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCiAhTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KICFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ6bGliLm1hayIgQ0ZHPSJ6bGliIC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiIENGRz0iX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQogIU1FU1NBR0UgDQogIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQogIU1FU1NBR0UgDQotIU1FU1NBR0UgInpsaWIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiemxpYiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCiAhTUVTU0FHRSANCiANCiAjIEJlZ2luIFByb2plY3QNCiAjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInpsaWIiDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlc190ZXN0Ig0KICMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCiBDUFA9Y2wuZXhlDQogTVRMPW1pZGwuZXhlDQogUlNDPXJjLmV4ZQ0KIA0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWIgLSBXaW4zMiBSZWxlYXNlIg0KKyFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQogDQogIyBQUk9QIEJBU0UgVXNlX01GQyAwDQogIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQpAQCAtMzksMTIgKzM5LDEyIEBACiAjIFBST1AgVXNlX01GQyAwDQogIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KICMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHpsaWIiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiBGOTA9ZGYuZXhlDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlx6bGliLTEuMS40IiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCiAjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQogIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCkBAIC01NCwxNSArNTQsMTAgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cemxpYi0xLjEuNFx6bGliLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUIwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3psaWIucHlkIg0KKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc190ZXN0LnB5ZCINCiAjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0jIEJlZ2luIFNwZWNpYWwgQnVpbGQgVG9vbA0KLVNPVVJDRT0iJChJbnB1dFBhdGgpIg0KLVByZUxpbmtfRGVzYz1DaGVja2luZyBzdGF0aWMgemxpYiBoYXMgYmVlbiBidWlsdA0KLVByZUxpbmtfQ21kcz1jZCAuLlwuLlwuLlx6bGliLTEuMS40CW5tYWtlIC1ub2xvZ28gLWYgbXNkb3NcbWFrZWZpbGUudzMyIHpsaWIubGliDQotIyBFbmQgU3BlY2lhbCBCdWlsZCBUb29sDQogDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWIgLSBXaW4zMiBEZWJ1ZyINCishRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQogDQogIyBQUk9QIEJBU0UgVXNlX01GQyAwDQogIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQpAQCAtNzIsMTIgKzY3LDEyIEBACiAjIFBST1AgVXNlX01GQyAwDQogIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KICMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x6bGliIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiDQogIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCiAjIFBST1AgVGFyZ2V0X0RpciAiIg0KIEY5MD1kZi5leGUNCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cemxpYi0xLjEuNCIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCiAjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQogIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCkBAIC04NywyMyArODIsMTggQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cemxpYi0xLjEuNFx6bGliLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUIwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3psaWJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KICMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLSMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQotU09VUkNFPSIkKElucHV0UGF0aCkiDQotUHJlTGlua19EZXNjPUNoZWNraW5nIHN0YXRpYyB6bGliIGhhcyBiZWVuIGJ1aWx0DQotUHJlTGlua19DbWRzPWNkIC4uXC4uXC4uXHpsaWItMS4xLjQJbm1ha2UgLW5vbG9nbyAtZiBtc2Rvc1xtYWtlZmlsZS53MzIgemxpYi5saWINCi0jIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wNCiANCiAhRU5ESUYgDQogDQogIyBCZWdpbiBUYXJnZXQNCiANCi0jIE5hbWUgInpsaWIgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiemxpYiAtIFdpbjMyIERlYnVnIg0KKyMgTmFtZSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBUYXJnZXQNCiAjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AgYi9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzlhMDhiCi0tLSAvZGV2L251bGwKKysrIGIvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AKQEAgLTAsMCArMSwxMTEgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2VsZW1lbnR0cmVlIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgKiogRE8gTk9UIEVESVQgKioNCisNCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQorDQorQ0ZHPV9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIi4NCishTUVTU0FHRSANCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgIl9lbGVtZW50dHJlZS5tYWsiIENGRz0iX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgDQorDQorIyBCZWdpbiBQcm9qZWN0DQorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCisjIFBST1AgU2NjX1Byb2pOYW1lICJfZWxlbWVudHRyZWUiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KK0NQUD1jbC5leGUNCitNVEw9bWlkbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIi4iDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitGOTA9ZGYuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EICJCWVRFT1JERVI9MTIzNCIgL0QgIlhNTF9DT05URVhUX0JZVEVTPTEwMjQiIC9EICJVU0VfUFlFWFBBVF9DQVBJIiAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19lbGVtZW50dHJlZS5weWQiDQorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICIuIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0Y5MD1kZi5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWVfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQorIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NxbGl0ZTMuZHNwIGIvUEMvVkM2L19zcWxpdGUzLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDhlZjcyCi0tLSAvZGV2L251bGwKKysrIGIvUEMvVkM2L19zcWxpdGUzLmRzcApAQCAtMCwwICsxLDEzMSBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc3FsaXRlMyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KKw0KK0NGRz1fc3FsaXRlMyAtIFdpbjMyIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJfc3FsaXRlMy5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAiX3NxbGl0ZTMubWFrIiBDRkc9Il9zcWxpdGUzIC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgIl9zcWxpdGUzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFIA0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3NxbGl0ZTMiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KK0NQUD1jbC5leGUNCitNVEw9bWlkbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiLiINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorRjkwPWRmLmV4ZQ0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiIgL1lYIC9GRCAvYw0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KKyMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NxbGl0ZTMucHlkIg0KKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KKw0KKyFFTFNFSUYgICIkKENGRykiID09ICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICIuIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorRjkwPWRmLmV4ZQ0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIk1PRFVMRV9OQU1FPVwic3FsaXRlM1wiIiAvWVggL0ZEIC9jDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlM19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIg0KKyMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3NsLm1hayBiL1BDL1ZDNi9fc3NsLm1hawppbmRleCBjZTc4NTI2Li5mOGJhMDMzIDEwMDY0NAotLS0gYS9QQy9WQzYvX3NzbC5tYWsKKysrIGIvUEMvVkM2L19zc2wubWFrCkBAIC0yLDE3ICsyLDE3IEBACiAhSUZERUYgREVCVUcKIE1PRFVMRT1fc3NsX2QucHlkCiBURU1QX0RJUj14ODYtdGVtcC1kZWJ1Zy9fc3NsCi1DRkxBR1M9L09kIC9aaSAvTURkIC9MRGQgL0RERUJVRyAvRF9ERUJVRworQ0ZMQUdTPS9PZCAvWmkgL01EZCAvTERkIC9EREVCVUcgL0RfREVCVUcgL0RXSU4zMgogU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMi5kYmcKICFFTFNFCiBNT0RVTEU9X3NzbC5weWQKIFRFTVBfRElSPXg4Ni10ZW1wLXJlbGVhc2UvX3NzbAotQ0ZMQUdTPS9PeCAvTUQgL0xECitDRkxBR1M9L094IC9NRCAvTEQgL0RXSU4zMgogU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMgogIUVORElGCiAKIElOQ0xVREVTPS1JIC4uLy4uL0luY2x1ZGUgLUkgLi4gLUkgJChTU0xfRElSKS9pbmMzMgotTElCUz1nZGkzMi5saWIgd3NvY2szMi5saWIgL2xpYnBhdGg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliIHNzbGVheTMyLmxpYgorTElCUz1nZGkzMi5saWIgd3NvY2szMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL2xpYnBhdGg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliIHNzbGVheTMyLmxpYgogCiBTT1VSQ0U9Li4vLi4vTW9kdWxlcy9fc3NsLmMgJChTU0xfTElCX0RJUikvbGliZWF5MzIubGliICQoU1NMX0xJQl9ESVIpL3NzbGVheTMyLmxpYgogCmRpZmYgLS1naXQgYS9QQy9WQzYvX3RraW50ZXIuZHNwIGIvUEMvVkM2L190a2ludGVyLmRzcAppbmRleCAxODEwNGUzLi5kMDYxOThjIDEwMDY0NAotLS0gYS9QQy9WQzYvX3RraW50ZXIuZHNwCisrKyBiL1BDL1ZDNi9fdGtpbnRlci5kc3AKQEAgLTE3LDggKzE3LDggQEAKICFNRVNTQUdFIA0KICFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KICFNRVNTQUdFIA0KLSFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCiAhTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQogIU1FU1NBR0UgDQogDQogIyBCZWdpbiBQcm9qZWN0DQpAQCAtNDQsNyArNDQsNyBAQAogIyBQUk9QIFRhcmdldF9EaXIgIiINCiBGOTA9ZGYuZXhlDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXHRjbDg0XGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiV0lUSF9BUFBJTklUIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlIiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYw0KICMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KICMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KQEAgLTU0LDcgKzU0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsODRcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbDg0XGxpYlx0Y2w4NC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlcl9kLnB5ZCIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiQzpcUHJvZ3JhbSBGaWxlc1xUY2xcbGliIg0KKyMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyX2QucHlkIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiJDOlxQcm9ncmFtIEZpbGVzXFRjbFxsaWIiDQogIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCkBAIC03Miw3ICs3Miw3IEBACiAjIFBST1AgVGFyZ2V0X0RpciAiIg0KIEY5MD1kZi5leGUNCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXC4uXHRjbDg0XGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiV0lUSF9BUFBJTklUIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MNCiAjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQogIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCkBAIC04MiwxNSArODIsMTUgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsODRcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbDg0XGxpYlx0Y2w4NC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlci5weWQiIC9saWJwYXRoOiJDOlxQcm9ncmFtIEZpbGVzXFRjbFxsaWIiDQorIyBBREQgTElOSzMyIC4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxOTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3RraW50ZXIucHlkIiAvbGlicGF0aDoiQzpcUHJvZ3JhbSBGaWxlc1xUY2xcbGliIg0KICMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KIA0KICFFTkRJRiANCiANCiAjIEJlZ2luIFRhcmdldA0KIA0KLSMgTmFtZSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyINCiAjIE5hbWUgIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgIl90a2ludGVyIC0gV2luMzIgRGVidWciDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlxNb2R1bGVzXF90a2ludGVyLmMNCmRpZmYgLS1naXQgYS9QQy9WQzYvYnoyLmRzcCBiL1BDL1ZDNi9iejIuZHNwCmluZGV4IDA2NTcwMzQuLmZhMTA2NGQgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9iejIuZHNwCisrKyBiL1BDL1ZDNi9iejIuZHNwCkBAIC00NCw3ICs0NCw3IEBACiAjIFBST1AgVGFyZ2V0X0RpciAiIg0KIEY5MD1kZi5leGUNCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC4yIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC4zIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KICMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KICMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KQEAgLTU0LDEyICs1NCw4IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXGJ6aXAyLTEuMC4yXGxpYmJ6Mi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE3MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejIucHlkIg0KKyMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyLnB5ZCINCiAjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUgL25vZGVmYXVsdGxpYg0KLSMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQotU09VUkNFPSIkKElucHV0UGF0aCkiDQotUHJlTGlua19DbWRzPWNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4yCW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjDQotIyBFbmQgU3BlY2lhbCBCdWlsZCBUb29sDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImJ6MiAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc2LDcgKzcyLDcgQEAKICMgUFJPUCBUYXJnZXRfRGlyICIiDQogRjkwPWRmLmV4ZQ0KICMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxiemlwMi0xLjAuMiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC4zIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KICMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KICMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KQEAgLTg2LDEyICs4Miw4IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXGJ6aXAyLTEuMC4yXGxpYmJ6Mi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE3MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL2J6Ml9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KKyMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCiAjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0jIEJlZ2luIFNwZWNpYWwgQnVpbGQgVG9vbA0KLVNPVVJDRT0iJChJbnB1dFBhdGgpIg0KLVByZUxpbmtfQ21kcz1jZCAuLlwuLlwuLlxiemlwMi0xLjAuMglubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYw0KLSMgRW5kIFNwZWNpYWwgQnVpbGQgVG9vbA0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS9QQy9WQzYvcGNidWlsZC5kc3cgYi9QQy9WQzYvcGNidWlsZC5kc3cKaW5kZXggYTc2MjI2MC4uZGFmMTUzNSAxMDA2NDQKLS0tIGEvUEMvVkM2L3BjYnVpbGQuZHN3CisrKyBiL1BDL1ZDNi9wY2J1aWxkLmRzdwpAQCAtMyw3ICszLDcgQEAKIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiANCi1Qcm9qZWN0OiAiX2JzZGRiIj0uXF9ic2RkYi5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KK1Byb2plY3Q6ICJfYnNkZGIiPSIuXF9ic2RkYi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCiANCiBQYWNrYWdlPTw1Pg0KIHt7ew0KQEAgLTE4LDcgKzE4LDQzIEBACiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogDQotUHJvamVjdDogIl9zb2NrZXQiPS5cX3NvY2tldC5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KK1Byb2plY3Q6ICJfY3R5cGVzIj0iLlxfY3R5cGVzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogIl9jdHlwZXNfdGVzdCI9Ii5cX2N0eXBlc190ZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogIl9lbGVtZW50dHJlZSI9Ii5cX2VsZW1lbnR0cmVlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogIl9zb2NrZXQiPSIuXF9zb2NrZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQogDQogUGFja2FnZT08NT4NCiB7e3sNCkBAIC0zMyw3ICs2OSwxOSBAQAogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIA0KLVByb2plY3Q6ICJfc3NsIj0uXF9zc2wuZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCitQcm9qZWN0OiAiX3NxbGl0ZTMiPSIuXF9zcWxpdGUzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogIl9zc2wiPSIuXF9zc2wuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQogDQogUGFja2FnZT08NT4NCiB7e3sNCkBAIC01NCw3ICsxMDIsNyBAQAogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIA0KLVByb2plY3Q6ICJfdGVzdGNhcGkiPS5cX3Rlc3RjYXBpLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorUHJvamVjdDogIl90ZXN0Y2FwaSI9Ii5cX3Rlc3RjYXBpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KIA0KIFBhY2thZ2U9PDU+DQoge3t7DQpAQCAtNjksNyArMTE3LDcgQEAKIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiANCi1Qcm9qZWN0OiAiX3RraW50ZXIiPS5cX3RraW50ZXIuZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCitQcm9qZWN0OiAiX3RraW50ZXIiPSIuXF90a2ludGVyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KIA0KIFBhY2thZ2U9PDU+DQoge3t7DQpAQCAtODQsNyArMTMyLDcgQEAKIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiANCi1Qcm9qZWN0OiAiYnoyIj0uXGJ6Mi5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KK1Byb2plY3Q6ICJiejIiPSIuXGJ6Mi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCiANCiBQYWNrYWdlPTw1Pg0KIHt7ew0KQEAgLTk2LDcgKzE0NCw3IEBACiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogDQotUHJvamVjdDogIm1ha2VfdmVyc2lvbmluZm8iPS5cbWFrZV92ZXJzaW9uaW5mby5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KK1Byb2plY3Q6ICJtYWtlX3ZlcnNpb25pbmZvIj0iLlxtYWtlX3ZlcnNpb25pbmZvLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KIA0KIFBhY2thZ2U9PDU+DQoge3t7DQpAQCAtMTA4LDcgKzE1Niw3IEBACiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogDQotUHJvamVjdDogInB5ZXhwYXQiPS5ccHlleHBhdC5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KK1Byb2plY3Q6ICJweWV4cGF0Ij0iLlxweWV4cGF0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KIA0KIFBhY2thZ2U9PDU+DQoge3t7DQpAQCAtMTIzLDcgKzE3MSw3IEBACiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogDQotUHJvamVjdDogInB5dGhvbiI9LlxweXRob24uZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCitQcm9qZWN0OiAicHl0aG9uIj0iLlxweXRob24uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQogDQogUGFja2FnZT08NT4NCiB7e3sNCkBAIC0xMzgsNyArMTg2LDcgQEAKIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiANCi1Qcm9qZWN0OiAicHl0aG9uY29yZSI9LlxweXRob25jb3JlLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorUHJvamVjdDogInB5dGhvbmNvcmUiPSIuXHB5dGhvbmNvcmUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQogDQogUGFja2FnZT08NT4NCiB7e3sNCkBAIC0xNTMsNyArMjAxLDcgQEAKIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiANCi1Qcm9qZWN0OiAicHl0aG9udyI9LlxweXRob253LmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorUHJvamVjdDogInB5dGhvbnciPSIuXHB5dGhvbncuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQogDQogUGFja2FnZT08NT4NCiB7e3sNCkBAIC0xNjgsNyArMjE2LDcgQEAKIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiANCi1Qcm9qZWN0OiAic2VsZWN0Ij0uXHNlbGVjdC5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KK1Byb2plY3Q6ICJzZWxlY3QiPSIuXHNlbGVjdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCiANCiBQYWNrYWdlPTw1Pg0KIHt7ew0KQEAgLTE4Myw3ICsyMzEsNyBAQAogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIA0KLVByb2plY3Q6ICJ1bmljb2RlZGF0YSI9Llx1bmljb2RlZGF0YS5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KK1Byb2plY3Q6ICJ1bmljb2RlZGF0YSI9Ii5cdW5pY29kZWRhdGEuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQogDQogUGFja2FnZT08NT4NCiB7e3sNCkBAIC0xOTgsNyArMjQ2LDcgQEAKIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiANCi1Qcm9qZWN0OiAidzl4cG9wZW4iPS5cdzl4cG9wZW4uZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCitQcm9qZWN0OiAidzl4cG9wZW4iPSIuXHc5eHBvcGVuLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KIA0KIFBhY2thZ2U9PDU+DQoge3t7DQpAQCAtMjEwLDIyICsyNTgsNyBAQAogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIA0KLVByb2plY3Q6ICJ3aW5zb3VuZCI9Llx3aW5zb3VuZC5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ6bGliIj0uXHpsaWIuZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCitQcm9qZWN0OiAid2luc291bmQiPSIuXHdpbnNvdW5kLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KIA0KIFBhY2thZ2U9PDU+DQoge3t7DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbmNvcmUuZHNwIGIvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCmluZGV4IGVjMmVjM2UuLmNhNTA0ZDYgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9weXRob25jb3JlLmRzcAorKysgYi9QQy9WQzYvcHl0aG9uY29yZS5kc3AKQEAgLTQ0LDcgKzQ0LDcgQEAKICMgUFJPUCBUYXJnZXRfRGlyICIiDQogRjkwPWRmLmV4ZQ0KICMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9ZWCAvRkQgL1ptMjAwIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cbW9kdWxlc1x6bGliIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9ZWCAvRkQgL1ptMjAwIC9jDQogIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQogIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KICMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQpAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMjUuZGxsIg0KKyMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMjYuZGxsIg0KICMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgRGVidWciDQpAQCAtNzIsNyArNzIsNyBAQAogIyBQUk9QIFRhcmdldF9EaXIgIiINCiBGOTA9ZGYuZXhlDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIl9ERUJVRyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9abTIwMCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cbW9kdWxlc1x6bGliIiAvRCAiX0RFQlVHIiAvRCAiVVNFX0RMX0VYUE9SVCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL1ptMjAwIC9jDQogIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQogIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KICMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQpAQCAtODIsNyArODIsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMjVfZC5kbGwiIC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjI2X2QuZGxsIiAvcGRidHlwZTpzZXB0DQogIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQogDQogIUVORElGIA0KQEAgLTEyOSw2ICsxMjksMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTQxLDYgKzE0NSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTQ5LDEwICsxNTcsMTggQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxQQ1xfc3VicHJvY2Vzcy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcX3R5cGVzbW9kdWxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTY5LDYgKzE4NSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjQ1LDYgKzI2NSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXGNvbmZpZy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjUzLDYgKzI3NywxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXE1vZHVsZXNcY1N0cmluZ0lPLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yNjEsNiArMjg5LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yODksNyArMzIxLDcgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxQeXRob25cZXhjZXB0aW9ucy5jDQorU09VUkNFPS4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMzEzLDEwICszNDUsNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPS4uXC4uXFB5dGhvblxmdXR1cmUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTM5MSw2ICs0MTksMTggQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cT2JqZWN0c1xpbnRvYmplY3QuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTQyNyw3ICs0NjcsNyBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWQ1Yy5jDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcbWQ1LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC01MDMsMTAgKzU0MywxOCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXFB5dGhvblxwZWVwaG9sZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxQeXRob25ccHlhcmVuYS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXFB5dGhvblxweWZwZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtNTE5LDExICs1NjcsMTEgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlxweXRob25fbnQucmMNCitTT1VSQ0U9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMNCitTT1VSQ0U9Li5ccHl0aG9uX250LnJjDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtNTM5LDExICs1ODcsMTEgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHNldG9iamVjdC5jDQorU09VUkNFPS4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGFtb2R1bGUuYw0KK1NPVVJDRT0uLlwuLlxPYmplY3RzXHNldG9iamVjdC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtNTU1LDYgKzYwMywxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhbW9kdWxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTU3NSwxMCArNjI3LDYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHN0cnVjdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPS4uXC4uXE9iamVjdHNcc3RydWN0c2VxLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC02MTUsNiArNjYzLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtNjQ1LDUgKzY5NywxMyBAQAogDQogU09VUkNFPS4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIFRhcmdldA0KICMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcmVhZG1lLnR4dCBiL1BDL1ZDNi9yZWFkbWUudHh0CmluZGV4IDM5NGI1NjEuLmNmYTU0OWYgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9yZWFkbWUudHh0CisrKyBiL1BDL1ZDNi9yZWFkbWUudHh0CkBAIC02Miw0MCArNjIsMzcgQEAKIAogX3RraW50ZXIKICAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBSZXF1aXJlcyBidWlsZGluZwotICAgIFRjbC9UayBmaXJzdC4gIEZvbGxvd2luZyBhcmUgaW5zdHJ1Y3Rpb25zIGZvciBUY2wvVGsgOC40LjM6CisgICAgVGNsL1RrIGZpcnN0LiAgRm9sbG93aW5nIGFyZSBpbnN0cnVjdGlvbnMgZm9yIFRjbC9UayA4LjQuMTIuCiAKICAgICBHZXQgc291cmNlCiAgICAgLS0tLS0tLS0tLQotICAgIEdvIHRvCi0gICAgICAgIGh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvdGNsLwotICAgIGFuZCBkb3dubG9hZAotICAgICAgICB0Y2w4NDMtc3JjLnppcAotICAgICAgICB0azg0My1zcmMuemlwCi0gICAgVW56aXAgaW50bwotICAgICAgICBkaXN0XHRjbDguNC4zXAotICAgICAgICBkaXN0XHRrOC40LjNcCi0gICAgcmVzcGVjdGl2ZWx5LgorICAgIEluIHRoZSBkaXN0IGRpcmVjdG9yeSwgcnVuCisgICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsOC40LjEyCisgICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGs4LjQuMTIKKyAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90aXgtOC40LjAKIAotICAgIEJ1aWxkIFRjbCBmaXJzdCAoZG9uZSBoZXJlIHcvIE1TVkMgNiBvbiBXaW45OFNFKQorICAgIEJ1aWxkIFRjbCBmaXJzdCAoZG9uZSBoZXJlIHcvIE1TVkMgNiBvbiBXaW4ySykKICAgICAtLS0tLS0tLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRjbDguNC4zXHdpbgotICAgIHJ1biB2Y3ZhcnMzMi5iYXQgW25lY2Vzc2FyeSBldmVuIG9uIFdpbjJLXQorICAgIGNkIGRpc3RcdGNsOC40LjEyXHdpbgorICAgIHJ1biB2Y3ZhcnMzMi5iYXQKICAgICBubWFrZSAtZiBtYWtlZmlsZS52YwotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIElOU1RBTExESVI9Li5cLi5cdGNsODQgaW5zdGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAogCiAgICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwogCi0gICAgWFhYIFNvbWUgdGVzdHMgZmFpbGVkIGluICJubWFrZSAtZiBtYWtlZmlsZS52YyB0ZXN0Ii4KLSAgICBYWFggYWxsLnRjbDogIFRvdGFsIDEwNDgwICAgUGFzc2VkIDk3NDMgICAgU2tpcHBlZCA3MTkgICAgIEZhaWxlZCAxOAotICAgIFhYWAotICAgIFhYWCBUaGF0IHdhcyBvbiBXaW45OFNFLiAgT24gV2luMks6Ci0gICAgWFhYIGFsbC50Y2wgICBUb3RhbCAxMDQ4MCAgIFBhc3NlZCA5NzgxICAgIFNraXBwZWQgNjk4ICAgICBGYWlsZWQgIDEKKyAgICBPcHRpb25hbDogIHJ1biB0ZXN0cywgdmlhCisgICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIHRlc3QKKworICAgICAgICBhbGwudGNsOiAgICAgICAgVG90YWwgICAxMDgzNSAgIFBhc3NlZCAgMTAwOTYgICBTa2lwcGVkIDczMiAgICAgRmFpbGVkICA3CisgICAgICAgIFNvdXJjZWQgMTI5IFRlc3QgRmlsZXMuCisgICAgICAgIEZpbGVzIHdpdGggZmFpbGluZyB0ZXN0czogZXhlYy50ZXN0IGV4cHIudGVzdCBpby50ZXN0IG1haW4udGVzdCBzdHJpbmcudGVzdCBzdHJpCisgICAgICAgIG5nT2JqLnRlc3QKIAogICAgIEJ1aWxkIFRrCiAgICAgLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRrOC40LjNcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4zCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4zIElOU1RBTExESVI9Li5cLi5cdGNsODQgaW5zdGFsbAorICAgIGNkIGRpc3RcdGs4LjQuMTJcd2luCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCiAKICAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/CiAKQEAgLTEwMyw5NiArMTAwLDU5IEBACiAgICAgWFhYIGZhaWxlZC4gIEl0IHBvcHBlZCB1cCB0b25zIG9mIGxpdHRsZSB3aW5kb3dzLCBhbmQgZGlkIGxvdHMgb2YKICAgICBYWFggc3R1ZmYsIGFuZCBub3RoaW5nIGJsZXcgdXAuCiAKLSAgICBYWFggT3VyIGluc3RhbGxlciBjb3BpZXMgYSBsb3Qgb2Ygc3R1ZmYgb3V0IG9mIHRoZSBUY2wvVGsgaW5zdGFsbAotICAgIFhYWCBkaXJlY3RvcnkuICBJcyBhbGwgb2YgdGhhdCByZWFsbHkgbmVlZGVkIGZvciBQeXRob24gdXNlIG9mIFRjbC9Uaz8KLQotICAgIE1ha2Ugc3VyZSB0aGUgaW5zdGFsbGVyIG1hdGNoZXMKLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgRW5zdXJlIHRoYXQgdGhlIFdpc2UgY29tcGlsZXIgdnJibCBfVENMRElSXyBpcyBzZXQgdG8gdGhlIG5hbWUgb2YKLSAgICB0aGUgY29tbW9uIFRjbC9UayBpbnN0YWxsYXRpb24gZGlyZWN0b3J5ICh0Y2w4NCBmb3IgdGhlIGluc3RydWN0aW9ucwotICAgIGFib3ZlKS4gIFRoaXMgaXMgbmVlZGVkIHNvIHRoZSBpbnN0YWxsZXIgY2FuIGNvcHkgdmFyaW91cyBUY2wvVGsKLSAgICBmaWxlcyBpbnRvIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgotCi0KLXpsaWIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeS4gIEdldCB0aGUgc291cmNlIGNvZGUKLSAgICBmb3IgdmVyc2lvbiAxLjEuNCBmcm9tIGEgY29udmVuaWVudCBtaXJyb3IgYXQ6Ci0gICAgICAgIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8KLSAgICBVbnBhY2sgaW50byBkaXN0XHpsaWItMS4xLjQuCi0gICAgQSBjdXN0b20gcHJlLWxpbmsgc3RlcCBpbiB0aGUgemxpYiBwcm9qZWN0IHNldHRpbmdzIHNob3VsZCBtYW5hZ2UgdG8KLSAgICBidWlsZCB6bGliLTEuMS40XHpsaWIubGliIGJ5IG1hZ2ljIGJlZm9yZSB6bGliLnB5ZCAob3IgemxpYl9kLnB5ZCkgaXMKLSAgICBsaW5rZWQgaW4gUENidWlsZFwuCi0gICAgSG93ZXZlciwgdGhlIHpsaWIgcHJvamVjdCBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIHJlbW92ZSBhbnl0aGluZyB1bmRlcgotICAgIHpsaWItMS4xLjRcIHdoZW4geW91IGRvIGEgY2xlYW4sIHNvIGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgemxpYi5saWIKLSAgICB5b3UgbmVlZCB0byBjbGVhbiB1cCB6bGliLTEuMS40XCBieSBoYW5kLgorICAgQnVpbHQgVGl4CisgICAtLS0tLS0tLS0KKyAgIGNkIGRpc3RcdGl4LTguNC4wXHdpbgorICAgbm1ha2UgLWYgcHl0aG9uLm1haworICAgbm1ha2UgLWYgcHl0aG9uLm1hayBpbnN0YWxsCiAKIGJ6MgogICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnoyIGNvbXByZXNzaW9uIGxpYnJhcnkuICBIb21lcGFnZQogICAgICAgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J6aXAyLwotICAgIERvd25sb2FkIHRoZSBzb3VyY2UgdGFyYmFsbCwgYnppcDItMS4wLjIudGFyLmd6LgotICAgIFVucGFjayBpbnRvIGRpc3RcYnppcDItMS4wLjIuICBXQVJOSU5HOiAgSWYgeW91J3JlIHVzaW5nIFdpblppcCwgeW91Ci0gICAgbXVzdCBkaXNhYmxlIGl0cyAiVEFSIGZpbGUgc21hcnQgQ1IvTEYgY29udmVyc2lvbiIgZmVhdHVyZSAodW5kZXIKLSAgICBPcHRpb25zIC0+IENvbmZpZ3VyYXRpb24gLT4gTWlzY2VsbGFuZW91cyAtPiBPdGhlcikgZm9yIHRoZSBkdXJhdGlvbi4KKyAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0CisgICAgZGlyZWN0b3J5OgogCi0gICAgQSBjdXN0b20gcHJlLWxpbmsgc3RlcCBpbiB0aGUgYnoyIHByb2plY3Qgc2V0dGluZ3Mgc2hvdWxkIG1hbmFnZSB0bwotICAgIGJ1aWxkIGJ6aXAyLTEuMC4yXGxpYmJ6Mi5saWIgYnkgbWFnaWMgYmVmb3JlIGJ6Mi5weWQgKG9yIGJ6Ml9kLnB5ZCkgaXMKLSAgICBsaW5rZWQgaW4gUENidWlsZFwuCi0gICAgSG93ZXZlciwgdGhlIGJ6MiBwcm9qZWN0IGlzIG5vdCBzbWFydCBlbm91Z2ggdG8gcmVtb3ZlIGFueXRoaW5nIHVuZGVyCi0gICAgYnppcDItMS4wLjJcIHdoZW4geW91IGRvIGEgY2xlYW4sIHNvIGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgYnppcDIubGliCi0gICAgeW91IG5lZWQgdG8gY2xlYW4gdXAgYnppcDItMS4wLjJcIGJ5IGhhbmQuCisgICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjMKIAotICAgIFRoZSBidWlsZCBzdGVwIHNob3VsZG4ndCB5aWVsZCBhbnkgd2FybmluZ3Mgb3IgZXJyb3JzLCBhbmQgc2hvdWxkIGVuZAotICAgIGJ5IGRpc3BsYXlpbmcgNiBibG9ja3MgZWFjaCB0ZXJtaW5hdGVkIHdpdGgKLSAgICAgICAgRkM6IG5vIGRpZmZlcmVuY2VzIGVuY291bnRlcmVkCi0gICAgSWYgRkMgZmluZHMgZGlmZmVyZW5jZXMsIHNlZSB0aGUgd2FybmluZyBhYm91IFdpblppcCBhYm92ZSAod2hlbiBJCi0gICAgZmlyc3QgdHJpZWQgaXQsIHNhbXBsZTMucmVmIGZhaWxlZCBkdWUgdG8gQ1JMRiBjb252ZXJzaW9uKS4KKyAgICBBbmQgcmVxdWlyZXMgYnVpbGRpbmcgYnoyIGZpcnN0LgogCi0gICAgQWxsIG9mIHRoaXMgbWFuYWdlZCB0byBidWlsZCBiemlwMi0xLjAuMlxsaWJiejIubGliLCB3aGljaCB0aGUgUHl0aG9uCisgICAgY2QgZGlzdFxiemlwMi0xLjAuMworICAgIG5tYWtlIC1mIG1ha2VmaWxlLm1zYworCisgICAgQWxsIG9mIHRoaXMgbWFuYWdlZCB0byBidWlsZCBiemlwMi0xLjAuM1xsaWJiejIubGliLCB3aGljaCB0aGUgUHl0aG9uCiAgICAgcHJvamVjdCBsaW5rcyBpbi4KIAogCiBfYnNkZGIKLSAgICBHbyB0byBTbGVlcHljYXQncyBkb3dubG9hZCBwYWdlOgotICAgICAgICBodHRwOi8vd3d3LnNsZWVweWNhdC5jb20vZG93bmxvYWQvCisgICAgVG8gdXNlIHRoZSB2ZXJzaW9uIG9mIGJzZGRiIHRoYXQgUHl0aG9uIGlzIGJ1aWx0IHdpdGggYnkgZGVmYXVsdCwgaW52b2tlCisgICAgKGluIHRoZSBkaXN0IGRpcmVjdG9yeSkKIAotICAgIGFuZCBkb3dubG9hZCB2ZXJzaW9uIDQuMS4yNS4gIFRoZSBmaWxlIG5hbWUgaXMgZGItNC4xLjI1Lk5DLnppcC4KLSAgICBYWFggd2l0aCBvciB3aXRob3V0IHN0cm9uZyBjcnlwdG9ncmFwaHk/ICBJIHBpY2tlZCAid2l0aG91dCIuCisgICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2RiLTQuNC4yMAogCi0gICAgVW5wYWNrIGludG8KLSAgICAgICAgZGlzdFxkYi00LjEuMjUKKyAgICBUaGVuIG9wZW4gZGItNC40LjIwXGJ1aWxkX3dpbjMyXEJlcmtlbGV5X0RCLmRzdyBhbmQgYnVpbGQgdGhlICJkYl9zdGF0aWMiCisgICAgcHJvamVjdCBmb3IgIlJlbGVhc2UiIG1vZGUuCiAKLSAgICBbSWYgdXNpbmcgV2luWmlwIHRvIHVucGFjayB0aGUgZGItNC4xLjI1Lk5DIGRpc3RybywgdGhhdCByZXF1aXJlcwotICAgICByZW5hbWluZyB0aGUgZGlyZWN0b3J5ICh0byByZW1vdmUgIi5OQyIpIGFmdGVyIHVucGFja2luZy4KLSAgICBdCisgICAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IHdhbnQgdG8gc3RhcnQgd2l0aCB0aGUgb3JpZ2luYWwgc291cmNlcywKKyAgICBnbyB0byBTbGVlcHljYXQncyBkb3dubG9hZCBwYWdlOgorICAgICAgICBodHRwOi8vd3d3LnNsZWVweWNhdC5jb20vZG93bmxvYWRzL3JlbGVhc2VoaXN0b3J5YmRiLmh0bWwKIAotICAgIE9wZW4KLSAgICAgICAgZGlzdFxkYi00LjEuMjVcZG9jc1xpbmRleC5odG1sCisgICAgYW5kIGRvd25sb2FkIHZlcnNpb24gNC40LjIwLgogCi0gICAgYW5kIGZvbGxvdyB0aGUgV2luZG93cyBpbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIHRoZSBTbGVlcHljYXQKLSAgICBzb2Z0d2FyZS4gIE5vdGUgdGhhdCBCZXJrZWxleV9EQi5kc3cgaXMgaW4gdGhlIGJ1aWxkX3dpbjMyIHN1YmRpcmVjdG9yeS4KLSAgICBCdWlsZCB0aGUgUmVsZWFzZSB2ZXJzaW9uICgiYnVpbGRfYWxsIC0tIFdpbjMyIFJlbGVhc2UiKS4KKyAgICBXaXRoIG9yIHdpdGhvdXQgc3Ryb25nIGNyeXB0b2dyYXBoeT8gWW91IGNhbiBjaG9vc2UgZWl0aGVyIHdpdGggb3IKKyAgICB3aXRob3V0IHN0cm9uZyBjcnlwdG9ncmFwaHksIGFzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93LiAgQnkKKyAgICBkZWZhdWx0LCBQeXRob24gaXMgYnVpbHQgYW5kIGRpc3RyaWJ1dGVkIFdJVEhPVVQgc3Ryb25nIGNyeXB0by4KIAotICAgIFhYWCBXZSdyZSBhY3R1YWxseSBsaW5raW5nIGFnYWluc3QgUmVsZWFzZV9zdGF0aWNcbGliZGI0MXMubGliLgotICAgIFhYWCBUaGlzIHlpZWxkcyB0aGUgZm9sbG93aW5nIHdhcm5pbmdzOgotIiIiCi1Db21waWxpbmcuLi4KLV9ic2RkYi5jCi1MaW5raW5nLi4uCi0gICBDcmVhdGluZyBsaWJyYXJ5IC4vX2JzZGRiLmxpYiBhbmQgb2JqZWN0IC4vX2JzZGRiLmV4cAotTElOSyA6IHdhcm5pbmcgTE5LNDA0OTogbG9jYWxseSBkZWZpbmVkIHN5bWJvbCAiX21hbGxvYyIgaW1wb3J0ZWQKLUxJTksgOiB3YXJuaW5nIExOSzQwNDk6IGxvY2FsbHkgZGVmaW5lZCBzeW1ib2wgIl9mcmVlIiBpbXBvcnRlZAotTElOSyA6IHdhcm5pbmcgTE5LNDA0OTogbG9jYWxseSBkZWZpbmVkIHN5bWJvbCAiX2ZjbG9zZSIgaW1wb3J0ZWQKLUxJTksgOiB3YXJuaW5nIExOSzQwNDk6IGxvY2FsbHkgZGVmaW5lZCBzeW1ib2wgIl9mb3BlbiIgaW1wb3J0ZWQKLV9ic2RkYi5weWQgLSAwIGVycm9yKHMpLCA0IHdhcm5pbmcocykKLSIiIgotICAgIFhYWCBUaGlzIGlzbid0IGVuY291cmFnaW5nLCBidXQgSSBkb24ndCBrbm93IHdoYXQgdG8gZG8gYWJvdXQgaXQuCisgICAgVW5wYWNrIHRoZSBzb3VyY2VzOyBpZiB5b3UgZG93bmxvYWRlZCB0aGUgbm9uLWNyeXB0byB2ZXJzaW9uLCByZW5hbWUKKyAgICB0aGUgZGlyZWN0b3J5IGZyb20gZGItNC40LjIwLk5DIHRvIGRiLTQuNC4yMC4KKworICAgIE5vdyBhcHBseSBhbnkgcGF0Y2hlcyB0aGF0IGFwcGx5IHRvIHlvdXIgdmVyc2lvbi4KIAogICAgIFRvIHJ1biBleHRlbnNpdmUgdGVzdHMsIHBhc3MgIi11IGJzZGRiIiB0byByZWdydGVzdC5weS4gIHRlc3RfYnNkZGIzLnB5CiAgICAgaXMgdGhlbiBlbmFibGVkLiAgUnVubmluZyBpbiB2ZXJib3NlIG1vZGUgbWF5IGJlIGhlbHBmdWwuCiAKICAgICBYWFggVGhlIHRlc3RfYnNkZGIzIHRlc3RzIGRvbid0IGFsd2F5cyBwYXNzLCBvbiBXaW5kb3dzIChhY2NvcmRpbmcgdG8KLSAgICBYWFggbWUpIG9yIG9uIExpbnV4IChhY2NvcmRpbmcgdG8gQmFycnkpLiAgSSBoYWQgbXVjaCBiZXR0ZXIgbHVjawotICAgIFhYWCBvbiBXaW4ySyB0aGFuIG9uIFdpbjk4U0UuICBUaGUgY29tbW9uIGZhaWx1cmUgbW9kZSBhY3Jvc3MgcGxhdGZvcm1zCisgICAgWFhYIG1lKSBvciBvbiBMaW51eCAoYWNjb3JkaW5nIHRvIEJhcnJ5KS4gIChJIGhhZCBtdWNoIGJldHRlciBsdWNrCisgICAgWFhYIG9uIFdpbjJLIHRoYW4gb24gV2luOThTRS4pICBUaGUgY29tbW9uIGZhaWx1cmUgbW9kZSBhY3Jvc3MgcGxhdGZvcm1zCiAgICAgWFhYIGlzCiAgICAgWFhYICAgICBEQkFnYWluRXJyb3I6ICgxMSwgJ1Jlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIC0tIHVuYWJsZQogICAgIFhYWCAgICAgICAgICAgICAgICAgICAgICAgICB0byBqb2luIHRoZSBlbnZpcm9ubWVudCcpCmRpZmYgLS1naXQgYS9QQy9fbXNpLmMgYi9QQy9fbXNpLmMKaW5kZXggMzVmMTM3YS4uZjRhZjkyYSAxMDA2NDQKLS0tIGEvUEMvX21zaS5jCisrKyBiL1BDL19tc2kuYwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAKICAgICBzdGF0dXMgPSBNc2lTdW1tYXJ5SW5mb0dldFByb3BlcnR5KHNpLT5oLCBmaWVsZCwgJnR5cGUsICZpdmFsLCAKIAkmZnZhbCwgc3ZhbCwgJnNzaXplKTsKLSAgICBpZiAoc3RhdHVzID0gRVJST1JfTU9SRV9EQVRBKSB7CisgICAgaWYgKHN0YXR1cyA9PSBFUlJPUl9NT1JFX0RBVEEpIHsKIAlzdmFsID0gbWFsbG9jKHNzaXplKTsKICAgICAgICAgc3RhdHVzID0gTXNpU3VtbWFyeUluZm9HZXRQcm9wZXJ0eShzaS0+aCwgZmllbGQsICZ0eXBlLCAmaXZhbCwgCiAgICAgCSAgICAmZnZhbCwgc3ZhbCwgJnNzaXplKTsKZGlmZiAtLWdpdCBhL1BDL2JkaXN0X3dpbmluc3Qvd2luaW5zdC04LnNsbiBiL1BDL2JkaXN0X3dpbmluc3Qvd2luaW5zdC04LnNsbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGVjOGEyCi0tLSAvZGV2L251bGwKKysrIGIvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LTguc2xuCkBAIC0wLDAgKzEsMTkgQEAKK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDkuMDAKKyMgVmlzdWFsIFN0dWRpbyAyMDA1CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbmluc3QiLCAid2luaW5zdC04LnZjcHJvaiIsICJ7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfSIKK0VuZFByb2plY3QKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzIKKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzIKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQorCUVuZEdsb2JhbFNlY3Rpb24KK0VuZEdsb2JhbApkaWZmIC0tZ2l0IGEvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LTgudmNwcm9qIGIvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LTgudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Yjg2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9QQy9iZGlzdF93aW5pbnN0L3dpbmluc3QtOC52Y3Byb2oKQEAgLTAsMCArMSwzMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9Indpbmluc3QiCisJUHJvamVjdEdVSUQ9IntFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9IgorCVJvb3ROYW1lc3BhY2U9Indpbmluc3QiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxlcz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZCIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx0ZW1wLXJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZC93aW5pbnN0LnRsYiIKKwkJCQlIZWFkZXJGaWxlTmFtZT0iIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjEiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxNb2R1bGVzXHpsaWIiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyIKKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlx0ZW1wLXJlbGVhc2Uvd2luaW5zdC5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHRlbXAtcmVsZWFzZS8iCisJCQkJT2JqZWN0RmlsZT0iLlx0ZW1wLXJlbGVhc2UvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHRlbXAtcmVsZWFzZS8iCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImltYWdlaGxwLmxpYiBjb21jdGwzMi5saWIiCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kL3dpbmluc3QtOC5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kL3dpbmluc3QtNi5wZGIiCisJCQkJU3ViU3lzdGVtPSIyIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx0ZW1wLWRlYnVnIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCisJCQlVc2VPZk1GQz0iMCIKKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIKKwkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIgorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlwuL3dpbmluc3QudGxiIgorCQkJCUhlYWRlckZpbGVOYW1lPSIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXE1vZHVsZXNcemxpYiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlx0ZW1wLWRlYnVnL3dpbmluc3QucGNoIgorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlx0ZW1wLWRlYnVnLyIKKwkJCQlPYmplY3RGaWxlPSIuXHRlbXAtZGVidWcvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHRlbXAtZGVidWcvIgorCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMSIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImltYWdlaGxwLmxpYiBjb21jdGwzMi5saWIiCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kL3dpbmluc3QtOF9kLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkMiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSJleHRyYWN0LmMiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJT3B0aW1pemF0aW9uPSIxIgorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Imluc3RhbGwuYyIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQlPcHRpbWl6YXRpb249IjEiCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iaW5zdGFsbC5yYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsdGVyCisJCQkJTmFtZT0iemxpYiIKKwkJCQk+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQk8L0ZpbHRlcj4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IkhlYWRlciBGaWxlcyIKKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubCIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSJhcmNoaXZlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSJQeXRob25Qb3dlcmVkLmJtcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvaiBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKaW5kZXggN2MwZDRiYi4uMTc3MTRlMyAxMDA2NDQKLS0tIGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagorKysgYi9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qCkBAIC0zOSw3ICszOSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24yNS5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMjYubGliIgogCQkJCU91dHB1dEZpbGU9Ii5cUmVsZWFzZS9leGFtcGxlLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIgpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24yNV9kLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24yNl9kLmxpYiIKIAkJCQlPdXRwdXRGaWxlPSIuXERlYnVnL2V4YW1wbGVfZC5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIKZGlmZiAtLWdpdCBhL1BDL3B5Y29uZmlnLmggYi9QQy9weWNvbmZpZy5oCmluZGV4IDRhZWRjZTcuLmYyZWY3ZjkgMTAwNjQ0Ci0tLSBhL1BDL3B5Y29uZmlnLmgKKysrIGIvUEMvcHljb25maWcuaApAQCAtMzksOCArMzksMTIgQEAKICAgIHdvdWxkIGJlIElTTyBDIGNvbmZvcm1pbmcpLiBOZWl0aGVyIHJlbmFtaW5nIGlzIGZlYXNpYmxlLCBzbwogICAgd2UganVzdCBzaWxlbmNlIHRoZSB3YXJuaW5ncy4gKi8KIAorI2lmbmRlZiBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUKICNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorI2lmbmRlZiBfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFCiAjZGVmaW5lIF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUgMQorI2VuZGlmCiAKIC8qIFdpbmRvd3MgQ0UgZG9lcyBub3QgaGF2ZSB0aGVzZSAqLwogI2lmbmRlZiBNU19XSU5DRQpkaWZmIC0tZ2l0IGEvUENidWlsZC9fY3R5cGVzLnZjcHJvaiBiL1BDYnVpbGQvX2N0eXBlcy52Y3Byb2oKaW5kZXggYTc3ZmRkNC4uNzQ4ZWU0NCAxMDA2NDQKLS0tIGEvUENidWlsZC9fY3R5cGVzLnZjcHJvagorKysgYi9QQ2J1aWxkL19jdHlwZXMudmNwcm9qCkBAIC00LDYgKzQsNyBAQAogCVZlcnNpb249IjcuMTAiCiAJTmFtZT0iX2N0eXBlcyIKIAlQcm9qZWN0R1VJRD0ie0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0iCisJUm9vdE5hbWVzcGFjZT0iX2N0eXBlcyIKIAlLZXl3b3JkPSJXaW4zMlByb2oiPgogCTxQbGF0Zm9ybXM+CiAJCTxQbGF0Zm9ybQpAQCAtMTI4LDcgKzEyOSw3IEBACiAJCQlDaGFyYWN0ZXJTZXQ9IjIiPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMsLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiCkBAIC0yNjgsNiArMjY5LDQxIEBACiAJCTwvRmlsZT4KIAkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjMyLmMiPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIgorCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIi8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW42NC5hc20iPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCQlDb21tYW5kTGluZT0iYW1kNjRfbWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OworIgorCQkJCQlPdXRwdXRzPSImcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7Ii8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiCisJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQk8L0ZpbGU+CiAJPC9GaWxlcz4KIAk8R2xvYmFscz4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvYW1kNjRfbWw2NC5iYXQgYi9QQ2J1aWxkL2FtZDY0X21sNjQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOWFjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL2FtZDY0X21sNjQuYmF0CkBAIC0wLDAgKzEsMTcgQEAKK0BlY2hvIG9mZgorcmVtIFRyeSB0byBmaW5kIHRoZSBBTUQ2NCBhc3NlbWJsZXIgYW5kIGNhbGwgaXQgd2l0aCB0aGUgc3VwcGxpZWQgYXJndW1lbnRzLgorCitzZXQgTUxFWEU9TWljcm9zb2Z0IFBsYXRmb3JtIFNES1xCaW5cV2luNjRceDg2XEFNRDY0XG1sNjQuRVhFCisKK3JlbSBGb3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZWUgYWxzbworcmVtIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9lbi11cy93aW42NC93aW42NC93b3c2NF9pbXBsZW1lbnRhdGlvbl9kZXRhaWxzLmFzcAorCitpZiBleGlzdCAiJVByb2dyYW1GaWxlcyVcJU1MRVhFJSIgKAorICBzZXQgTUw2ND0iJVByb2dyYW1GaWxlcyVcJU1MRVhFJSIKKykgZWxzZSBpZiBleGlzdCAiJVByb2dyYW1XNjQzMiVcJU1MRVhFJSIgKAorICBzZXQgTUw2ND0iJVByb2dyYW1XNjQzMiVcJU1MRVhFJSIKKykgZWxzZSAoCisgIHNldCBNTDY0PW1sNjQuZXhlCispCisKKyVNTDY0JSAlKgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob25jb3JlLnZjcHJvaiBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3Byb2oKaW5kZXggZjBmNzFiOC4uZWJhYTc4ZiAxMDA2NDQKLS0tIGEvUENidWlsZC9weXRob25jb3JlLnZjcHJvagorKysgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmNwcm9qCkBAIC02ODMsNiArNjgzLDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cUGFyc2VyXHBhcnNldG9rLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxwZWVwaG9sZS5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC03MjUsMTggKzcyOCwxMiBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jIj4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNoYW1vZHVsZS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIj4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkOC9fY3R5cGVzLnZjcHJvaiBiL1BDYnVpbGQ4L19jdHlwZXMudmNwcm9qCmluZGV4IGIwOWY1YzIuLjgwYjljNjQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQ4L19jdHlwZXMudmNwcm9qCisrKyBiL1BDYnVpbGQ4L19jdHlwZXMudmNwcm9qCkBAIC00LDIwICs0LDI0IEBACiAJVmVyc2lvbj0iOCwwMCIKIAlOYW1lPSJfY3R5cGVzIgogCVByb2plY3RHVUlEPSJ7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSIKKwlSb290TmFtZXNwYWNlPSJfY3R5cGVzIgogCUtleXdvcmQ9IldpbjMyUHJvaiIKIAk+CiAJPFBsYXRmb3Jtcz4KIAkJPFBsYXRmb3JtCiAJCQlOYW1lPSJXaW4zMiIKIAkJLz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJ4NjQiCisJCS8+CiAJPC9QbGF0Zm9ybXM+CiAJPFRvb2xGaWxlcz4KIAk8L1Rvb2xGaWxlcz4KIAk8Q29uZmlndXJhdGlvbnM+CiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9jdHlwZXMiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXF9jdHlwZXMiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMiIKQEAgLTYzLDE0ICs2NywxNSBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIgotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc19kLnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcX2N0eXBlc19kLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfZC5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMCIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc19kLmxpYiIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMSIKIAkJCS8+CiAJCQk8VG9vbApAQCAtOTksOSArMTA0LDk1IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3x4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXF9jdHlwZXMiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDLC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJmYWxzZSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxfY3R5cGVzX2QucHlkIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCisJCQkJU3ViU3lzdGVtPSIwIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIgorCQkJCUltcG9ydExpYnJhcnk9IiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVxfY3R5cGVzIgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCiAJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjIiCkBAIC0xNDcsMTYgKzIzOCwxNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIgotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXF9jdHlwZXMucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJU3ViU3lzdGVtPSIwIgogCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCIKIAkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzLmxpYiIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMSIKIAkJCS8+CiAJCQk8VG9vbApAQCAtMTg1LDkgKzI3Nyw5IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzIgorCQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXF9jdHlwZXMiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMiIKQEAgLTIwNiwyMiArMjk4LDIwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMsLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCiAJCQkJV2FybmluZ0xldmVsPSIzIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIKIAkJCQlDb21waWxlQXM9IjAiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTIzNSwxMDcgKzMyNSwxOSBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIC9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIgotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxfY3R5cGVzLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXMucGRiIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMCIKIAkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiCiAJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NC10ZW1wLXJlbGVhc2VcX2N0eXBlcyIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgotCQkJQ2hhcmFjdGVyU2V0PSIyIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSIKLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDLC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIgotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iMyIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlDb21waWxlQXM9IjAiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyAvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSIKLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXMucHlkIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiCi0JCQkJU3ViU3lzdGVtPSIwIgotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCIKLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIgotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzLmxpYiIKLQkJCQlUYXJnZXRNYWNoaW5lPSIwIgorCQkJCUltcG9ydExpYnJhcnk9IiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpkaWZmIC0tZ2l0IGEvUENidWlsZDgvX2N0eXBlc190ZXN0LnZjcHJvaiBiL1BDYnVpbGQ4L19jdHlwZXNfdGVzdC52Y3Byb2oKaW5kZXggZTQ1MDNlYS4uZjI1MjkwMSAxMDA2NDQKLS0tIGEvUENidWlsZDgvX2N0eXBlc190ZXN0LnZjcHJvagorKysgYi9QQ2J1aWxkOC9fY3R5cGVzX3Rlc3QudmNwcm9qCkBAIC00LDIwICs0LDI0IEBACiAJVmVyc2lvbj0iOCwwMCIKIAlOYW1lPSJfY3R5cGVzX3Rlc3QiCiAJUHJvamVjdEdVSUQ9Ins4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9IgorCVJvb3ROYW1lc3BhY2U9Il9jdHlwZXNfdGVzdCIKIAlLZXl3b3JkPSJXaW4zMlByb2oiCiAJPgogCTxQbGF0Zm9ybXM+CiAJCTxQbGF0Zm9ybQogCQkJTmFtZT0iV2luMzIiCiAJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgogCTwvUGxhdGZvcm1zPgogCTxUb29sRmlsZXM+CiAJPC9Ub29sRmlsZXM+CiAJPENvbmZpZ3VyYXRpb25zPgogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXF9jdHlwZXNfdGVzdCIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJQ2hhcmFjdGVyU2V0PSIyIgpAQCAtNjIsMTMgKzY2LDE0IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3RfZC5weWQiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXF9jdHlwZXNfdGVzdF9kLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdF9kLnBkYiIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJU3ViU3lzdGVtPSIwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5saWIiCisJCQkJSW1wb3J0TGlicmFyeT0iIgogCQkJCVRhcmdldE1hY2hpbmU9IjEiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTk3LDkgKzEwMiw5MyBAQAogCQkJLz4KIAkJPC9Db25maWd1cmF0aW9uPgogCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVxfY3R5cGVzX3Rlc3QiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1MiCisJCQkJTWluaW1hbFJlYnVpbGQ9ImZhbHNlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJQ29tcGlsZUFzPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9fY3R5cGVzX3Rlc3RfZC5weWQiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKKwkJCQlTdWJTeXN0ZW09IjAiCisJCQkJSW1wb3J0TGlicmFyeT0iIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcX2N0eXBlc190ZXN0IgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCiAJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjIiCkBAIC0xNDQsMTUgKzIzMywxNiBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0LnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcX2N0eXBlc190ZXN0LnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdC5wZGIiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJU3ViU3lzdGVtPSIwIgogCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCIKIAkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3QubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC0xODEsOSArMjcxLDkgQEAKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJpYTY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcX2N0eXBlc190ZXN0IgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCiAJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjIiCkBAIC0yMDIsMTA3ICsyOTIsMjAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iCi0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyIKLQkJCQlNaW5pbWFsUmVidWlsZD0iZmFsc2UiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iMyIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlDb21waWxlQXM9IjAiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyIKLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdF9kLnB5ZCIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0X2QucGRiIgotCQkJCVN1YlN5c3RlbT0iMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0X2QubGliIgotCQkJCVRhcmdldE1hY2hpbmU9IjAiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0IgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCiAJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCiAJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIKIAkJCQlDb21waWxlQXM9IjAiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTMxNiwxNyArMzE5LDE3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3QucHlkIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxfY3R5cGVzX3Rlc3QucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0LnBkYiIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjAiCiAJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIgogCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdC5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKZGlmZiAtLWdpdCBhL1BDYnVpbGQ4L19lbGVtZW50dHJlZS52Y3Byb2ogYi9QQ2J1aWxkOC9fZWxlbWVudHRyZWUudmNwcm9qCmluZGV4IGE0OTZmN2EuLmQ4OGM4NWYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQ4L19lbGVtZW50dHJlZS52Y3Byb2oKKysrIGIvUENidWlsZDgvX2VsZW1lbnR0cmVlLnZjcHJvagpAQCAtNCwxOSArNCwyMyBAQAogCVZlcnNpb249IjgsMDAiCiAJTmFtZT0iX2VsZW1lbnR0cmVlIgogCVByb2plY3RHVUlEPSJ7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfSIKKwlSb290TmFtZXNwYWNlPSJfZWxlbWVudHRyZWUiCiAJPgogCTxQbGF0Zm9ybXM+CiAJCTxQbGF0Zm9ybQogCQkJTmFtZT0iV2luMzIiCiAJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgogCTwvUGxhdGZvcm1zPgogCTxUb29sRmlsZXM+CiAJPC9Ub29sRmlsZXM+CiAJPENvbmZpZ3VyYXRpb25zPgogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXF9lbGVtZW50dHJlZSIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC02MSwxNCArNjUsMTUgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiIKLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZV9kLnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcX2VsZW1lbnR0cmVlX2QucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlX2QucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZV9kLmxpYiIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMSIKIAkJCS8+CiAJCQk8VG9vbApAQCAtOTcsOSArMTAyLDk0IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3x4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXF9lbGVtZW50dHJlZSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSwuLlxQQywuLlxNb2R1bGVzXGV4cGF0IgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJQ29tcGlsZUFzPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcX2VsZW1lbnR0cmVlX2QucHlkIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCisJCQkJU3ViU3lzdGVtPSIyIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIgorCQkJCUltcG9ydExpYnJhcnk9IiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXF9lbGVtZW50dHJlZSIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC0xNDcsMTQgKzIzNywxNSBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlLnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcX2VsZW1lbnR0cmVlLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZS5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMiIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlLmxpYiIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMSIKIAkJCS8+CiAJCQk8VG9vbApAQCAtMTgzLDkgKzI3NCw5IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSIKKwkJCU5hbWU9IlJlbGVhc2V8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVxfZWxlbWVudHRyZWUiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMjA1LDIzICsyOTYsMjEgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iCiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMsLi5cTW9kdWxlc1xleHBhdCIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKIAkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKIAkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgogCQkJCUNvbXBpbGVBcz0iMCIKIAkJCS8+CkBAIC0yMzYsMTA4ICszMjUsMTcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiIKLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZS5weWQiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXF9lbGVtZW50dHJlZS5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWUucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKLQkJCVVzZU9mTUZDPSIwIgotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDLC4uXE1vZHVsZXNcZXhwYXQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSIzIgotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlDb21waWxlQXM9IjAiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlLnB5ZCIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKZGlmZiAtLWdpdCBhL1BDYnVpbGQ4L19tc2kudmNwcm9qIGIvUENidWlsZDgvX21zaS52Y3Byb2oKaW5kZXggMTI1ZGI3ZC4uYWM5ZTA3OSAxMDA2NDQKLS0tIGEvUENidWlsZDgvX21zaS52Y3Byb2oKKysrIGIvUENidWlsZDgvX21zaS52Y3Byb2oKQEAgLTQsMTkgKzQsMjMgQEAKIAlWZXJzaW9uPSI4LDAwIgogCU5hbWU9Il9tc2kiCiAJUHJvamVjdEdVSUQ9InsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9IgorCVJvb3ROYW1lc3BhY2U9Il9tc2kiCiAJPgogCTxQbGF0Zm9ybXM+CiAJCTxQbGF0Zm9ybQogCQkJTmFtZT0iV2luMzIiCiAJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgogCTwvUGxhdGZvcm1zPgogCTxUb29sRmlsZXM+CiAJPC9Ub29sRmlsZXM+CiAJPENvbmZpZ3VyYXRpb25zPgogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfbXNpIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVxfbXNpIgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCiAJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCiAJCQlVc2VPZk1GQz0iMCIKQEAgLTYzLDEzICs2NywxNCBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcX21zaS5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpLnBkYiIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC05OCw5ICsxMDMsOTUgQEAKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcX21zaSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSwuLlxQQyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEwiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXF9tc2kucHlkIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiCisJCQkJSW1wb3J0TGlicmFyeT0iIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9tc2kiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXF9tc2kiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMTQ4LDEyICsyMzksMTQgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vX21zaS5weWQiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXF9tc2kucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpLmxpYiIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMSIKIAkJCS8+CiAJCQk8VG9vbApAQCAtMTgyLDkgKzI3NSw5IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9tc2kiCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcX21zaSIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC0yMDUsMjQgKzI5OCwyMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSIKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSwuLlxQQyIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiCiAJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCiAJCQkJV2FybmluZ0xldmVsPSIzIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKIAkJCQlDb21waWxlQXM9IjAiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTIzNiwxMDUgKzMyNSwxNiBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcX21zaS5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaS5wZGIiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIgotCQkJCVRhcmdldE1hY2hpbmU9IjAiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX21zaSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgotCQkJVXNlT2ZNRkM9IjAiCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIgotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iMyIKLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJQ29tcGlsZUFzPSIwIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIGJ1ZmZlcm92ZXJmbG93VS5saWIiCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpLnBkYiIKLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaS5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKZGlmZiAtLWdpdCBhL1BDYnVpbGQ4L19zcWxpdGUzLnZjcHJvaiBiL1BDYnVpbGQ4L19zcWxpdGUzLnZjcHJvagppbmRleCBjZDI2YjhiLi4zZWRlNDhmIDEwMDY0NAotLS0gYS9QQ2J1aWxkOC9fc3FsaXRlMy52Y3Byb2oKKysrIGIvUENidWlsZDgvX3NxbGl0ZTMudmNwcm9qCkBAIC00LDE5ICs0LDIzIEBACiAJVmVyc2lvbj0iOCwwMCIKIAlOYW1lPSJfc3FsaXRlMyIKIAlQcm9qZWN0R1VJRD0iezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0iCisJUm9vdE5hbWVzcGFjZT0iX3NxbGl0ZTMiCiAJPgogCTxQbGF0Zm9ybXM+CiAJCTxQbGF0Zm9ybQogCQkJTmFtZT0iV2luMzIiCiAJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgogCTwvUGxhdGZvcm1zPgogCTxUb29sRmlsZXM+CiAJPC9Ub29sRmlsZXM+CiAJPENvbmZpZ3VyYXRpb25zPgogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcX3NxbGl0ZTMiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtNjEsMTUgKzY1LDE2IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTNfZC5weWQiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXF9zcWxpdGUzX2QucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzX2QucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzX2QubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC05OCw5ICsxMDMsOTUgQEAKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcX3NxbGl0ZSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZTsuLlxQQzsuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7IgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcX3NxbGl0ZTNfZC5weWQiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCisJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCisJCQkJU3ViU3lzdGVtPSIyIgorCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIgorCQkJCUltcG9ydExpYnJhcnk9IiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcX3NxbGl0ZTMiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMTQ4LDE1ICsyMzksMTYgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIiCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlMy5weWQiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXF9zcWxpdGUzLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMiIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTMubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC0xODUsOSArMjc3LDkgQEAKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcX3NxbGl0ZTMiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMjA3LDIzICsyOTksMjAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iCiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGU7Li5cUEM7Li5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKIAkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgogCQkJCUNvbXBpbGVBcz0iMCIKIAkJCS8+CkBAIC0yMzgsMTEwICszMjcsMTggQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcaWE2NFxzcWxpdGUzLmxpYiIKLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzLnB5ZCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxfc3FsaXRlMy5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTMucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzLmxpYiIKLQkJCQlUYXJnZXRNYWNoaW5lPSIwIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCi0JCQlVc2VPZk1GQz0iMCIKLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGU7Li5cUEM7Li5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKLQkJCQlSdW50aW1lTGlicmFyeT0iMiIKLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjMiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCUNvbXBpbGVBcz0iMCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XGFtZDY0XHNxbGl0ZTMubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTMucGRiIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTMubGliIgotCQkJCVRhcmdldE1hY2hpbmU9IjAiCisJCQkJSW1wb3J0TGlicmFyeT0iIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCmRpZmYgLS1naXQgYS9QQ2J1aWxkOC9tYWtlX2J1aWxkaW5mby5jIGIvUENidWlsZDgvbWFrZV9idWlsZGluZm8uYwppbmRleCA0Y2ViZjQ1Li44NTQxNmVkIDEwMDY0NAotLS0gYS9QQ2J1aWxkOC9tYWtlX2J1aWxkaW5mby5jCisrKyBiL1BDYnVpbGQ4L21ha2VfYnVpbGRpbmZvLmMKQEAgLTMsMTkgKzMsMjMgQEAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLS8qIFRoaXMgZmlsZSBjcmVhdGVzIHRoZSBnZXRidWlsZGluZm8ubyBvYmplY3QsIGJ5IGZpcnN0Ci0gICBpbnZva2luZyBzdWJ3Y3Jldi5leGUgKGlmIGZvdW5kKSwgYW5kIHRoZW4gaW52b2tpbmcgY2wuZXhlLgotICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgbWlnaHQgZ2VuZXJhdGUgUENCdWlsZFxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyBpbnN0ZWFkLgorLyogVGhpcyBmaWxlIGNyZWF0ZXMgdGhlIGdldGJ1aWxkaW5mbzIuYyBmaWxlLCBieQorICAgaW52b2tpbmcgc3Vid2NyZXYuZXhlIChpZiBmb3VuZCkuCisgICBJZiB0aGlzIGlzbid0IGEgc3VidmVyc2lvbiBjaGVja291dCwgb3Igc3Vid2NyZXYgaXNuJ3QKKyAgIGZvdW5kLCBpdCBjb3BpZXMgLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGluc3RlYWQuCisKKyAgIEEgZmlsZSwgZ2V0YnVpbGRpbmZvMi5oIGlzIHRoZW4gdXBkYXRlZCB0byBkZWZpbmUKKyAgIFNVQldDUkVWIGlmIGl0IHdhcyBhIHN1YnZlcnNpb24gY2hlY2tvdXQuCisKKyAgIGdldGJ1aWxkaW5mbzIuYyBpcyBwYXJ0IG9mIHRoZSBweXRob25jb3JlIHByb2plY3Qgd2l0aAorICAgZ2V0YnVpbGRpbmZvMi5oIGFzIGEgZm9yY2VkIGluY2x1ZGUuICBUaGlzIGhlbHBzCisgICBWaXN1YWxTdHVkaW8gcmVmcmFpbiBmcm9tIHVubmVjZXNzYXJ5IGNvbXBpbGVzIG11Y2ggb2YgdGhlCisgICB0aW1lLgogCiAgICBDdXJyZW50bHksIHN1YndjcmV2LmV4ZSBpcyBmb3VuZCBmcm9tIHRoZSByZWdpc3RyeSBlbnRyaWVzCiAgICBvZiBUb3J0b2lzZVNWTi4KIAotICAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHBsYWNlIGdldGJ1aWxkaW5mby5vIGludG8gdGhlIHByb3BlcgotICAgYmluYXJ5IGRpcmVjdG9yeS4gVGhpcyBpc24ndCBuZWNlc3NhcnksIGFzIHRoaXMgdG9vbCBpcwotICAgaW52b2tlZCBhcyBhIHByZS1saW5rIHN0ZXAgZm9yIHB5dGhvbmNvcmUsIHNvIHRoYXQgb3ZlcndyaXRlcwotICAgYW55IHByZXZpb3VzIGdldGJ1aWxkaW5mby5vLgorICAgbWFrZV9idWlsZGluZm8uZXhlIGlzIGNhbGxlZCBhcyBhIHByZS1idWlsZCBzdGVwIGZvciBweXRob25jb3JlLgogCiAqLwogCkBAIC00MCwxMSArNDQsMTEgQEAKIAkgICAgdHlwZSAhPSBSRUdfU1opCiAJCS8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwogCQlyZXR1cm4gMDsKLQlzdHJjYXQoY29tbWFuZCwgImJpblxcc3Vid2NyZXYuZXhlIik7CisJc3RyY2F0X3MoY29tbWFuZCwgc2l6ZW9mKGNvbW1hbmQpLCAiYmluXFxzdWJ3Y3Jldi5leGUiKTsKIAlpZiAoX3N0YXQoY29tbWFuZCsxLCAmc3QpIDwgMCkKIAkJLyogc3Vid2NyZXYuZXhlIG5vdCBwYXJ0IG9mIHRoZSByZWxlYXNlICovCiAJCXJldHVybiAwOwotCXN0cmNhdChjb21tYW5kLCAiXCIgLi4gLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGdldGJ1aWxkaW5mbzIuYyIpOworCXN0cmNhdF9zKGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSwgIlwiIC4uIC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyBnZXRidWlsZGluZm8yLmMiKTsKIAlwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKIAlpZiAoc3lzdGVtKGNvbW1hbmQpIDwgMCkKIAkJcmV0dXJuIDA7CkBAIC01Myw0MCArNTcsMjUgQEAKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQogewotCWNoYXIgY29tbWFuZFs1MDBdID0gImNsLmV4ZSAtYyAtRF9XSU4zMiAtRFVTRV9ETF9FWFBPUlQgLURfV0lORE9XUyAtRFdJTjMyIC1EX1dJTkRMTCAiOwotCWludCBkb191bmxpbmssIHJlc3VsdDsKLQlpZiAoYXJnYyAhPSAyKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAibWFrZV9idWlsZGluZm8gJChDb25maWd1cmF0aW9uTmFtZSlcbiIpOwotCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwotCX0KLQlpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlIikgPT0gMCkgewotCQlzdHJjYXQoY29tbWFuZCwgIi1NRCAiKTsKLQl9Ci0JZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJEZWJ1ZyIpID09IDApIHsKLQkJc3RyY2F0KGNvbW1hbmQsICItRF9ERUJVRyAtTURkICIpOwotCX0KLQllbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VJdGFuaXVtIikgPT0gMCkgewotCQlzdHJjYXQoY29tbWFuZCwgIi1NRCAvVVNFQ0w6TVNfSVRBTklVTSAiKTsKLQl9Ci0JZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlQU1ENjQiKSA9PSAwKSB7Ci0JCXN0cmNhdChjb21tYW5kLCAiLU1EICIpOwotCQlzdHJjYXQoY29tbWFuZCwgIi1NRCAvVVNFQ0w6TVNfT1BURVJPTiAiKTsKLQl9Ci0JZWxzZSB7Ci0JCWZwcmludGYoc3RkZXJyLCAidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbiAlc1xuIiwgYXJndlsxXSk7Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0JfQorCWNoYXIgY29tbWFuZFs1MDBdID0gIiI7CisJaW50IHN2bjsKKwlGSUxFICpmOwogCi0JaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIoKSkpCi0JCXN0cmNhdChjb21tYW5kLCAiZ2V0YnVpbGRpbmZvMi5jIC1EU1VCV0NSRVYgIik7Ci0JZWxzZQotCQlzdHJjYXQoY29tbWFuZCwgIi4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotCXN0cmNhdChjb21tYW5kLCAiIC1Gb2dldGJ1aWxkaW5mby5vIC1JLi5cXEluY2x1ZGUgLUkuLlxcUEMiKTsKLQlwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLQlyZXN1bHQgPSBzeXN0ZW0oY29tbWFuZCk7Ci0JaWYgKGRvX3VubGluaykKLQkJdW5saW5rKCJnZXRidWlsZGluZm8yLmMiKTsKLQlpZiAocmVzdWx0IDwgMCkKKwlpZiAoZm9wZW5fcygmZiwgImdldGJ1aWxkaW5mbzIuaCIsICJ3IikpCiAJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJLyogR2V0IGdldGJ1aWxkaW5mby5jIGZyb20gc3ZuIGFzIGdldGJ1aWxkaW5mbzIuYyAqLworCXN2biA9IG1ha2VfYnVpbGRpbmZvMigpOworCWlmIChzdm4pIHsKKwkJcHV0cygiZ290IGdldGJ1aWxkaW5mbzIuYyBmcm9tIHN2bi4gIFVwZGF0aW5nIGdldGJ1aWxkaW5mbzIuaCIpOworCQkvKiB5ZXMuICBtYWtlIHN1cmUgU1VCV0NSRVYgaXMgZGVmaW5lZCAqLworCQlmcHJpbnRmKGYsICIjZGVmaW5lIFNVQldDUkVWXG4iKTsKKwl9IGVsc2UgeworCQlwdXRzKCJkaWRuJ3QgZ2V0IGdldGJ1aWxkaW5mbzIuYyBmcm9tIHN2bi4gIENvcHlpbmcgZnJvbSBNb2R1bGVzIGFuZCBjbGVhcmluZyBnZXRidWlsZGluZm8yLmgiKTsKKwkJc3RyY2F0X3MoY29tbWFuZCwgc2l6ZW9mKGNvbW1hbmQpLCAiY29weSAuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgZ2V0YnVpbGRpbmZvMi5jIik7CisJCXB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOworCQlpZiAoc3lzdGVtKGNvbW1hbmQpIDwgMCkKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCWZjbG9zZShmKTsKIAlyZXR1cm4gMDsKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkOC9tYWtlX2J1aWxkaW5mby52Y3Byb2ogYi9QQ2J1aWxkOC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKaW5kZXggNWRjNmJjYS4uNThlZDAwMCAxMDA2NDQKLS0tIGEvUENidWlsZDgvbWFrZV9idWlsZGluZm8udmNwcm9qCisrKyBiL1BDYnVpbGQ4L21ha2VfYnVpbGRpbmZvLnZjcHJvagpAQCAtNCw2ICs0LDcgQEAKIAlWZXJzaW9uPSI4LDAwIgogCU5hbWU9Im1ha2VfYnVpbGRpbmZvIgogCVByb2plY3RHVUlEPSJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSIKKwlSb290TmFtZXNwYWNlPSJtYWtlX2J1aWxkaW5mbyIKIAlLZXl3b3JkPSJXaW4zMlByb2oiCiAJPgogCTxQbGF0Zm9ybXM+CkBAIC00MCw3ICs0MSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCiAJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgpAQCAtOTAsODIgKzkxLDggQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXG1ha2VfYnVpbGRpbmZvIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIKLQkJCQlSdW50aW1lTGlicmFyeT0iMCIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjMiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLmV4ZSIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMSIKLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlEZXNjcmlwdGlvbj0iTWFraW5nIGdldGJ1aWxkaW5mbzIuYyIKKwkJCQlDb21tYW5kTGluZT0iJChUYXJnZXRQYXRoKSIKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAk8L0NvbmZpZ3VyYXRpb25zPgpkaWZmIC0tZ2l0IGEvUENidWlsZDgvcGNidWlsZC5zbG4gYi9QQ2J1aWxkOC9wY2J1aWxkLnNsbgppbmRleCA5ZjQ3NjI2Li4zNWQ2NWEwIDEwMDY0NAotLS0gYS9QQ2J1aWxkOC9wY2J1aWxkLnNsbgorKysgYi9QQ2J1aWxkOC9wY2J1aWxkLnNsbgpAQCAtMiw4ICsyLDggQEAKICMgVmlzdWFsIFN0dWRpbyAyMDA1CiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbmNvcmUiLCAicHl0aG9uY29yZS52Y3Byb2oiLCAie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iCiAJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSA9IHtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9CiAJCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9ID0ge0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0KKwkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0gPSB7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfQogCUVuZFByb2plY3RTZWN0aW9uCiBFbmRQcm9qZWN0CiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbnciLCAicHl0aG9udy52Y3Byb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iCkBAIC02MSwxMzcgKzYxLDI0NCBAQAogCQlyZWFkbWUudHh0ID0gcmVhZG1lLnR4dAogCUVuZFByb2plY3RTZWN0aW9uCiBFbmRQcm9qZWN0Ci1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbmNvcmVfcGdvIiwgInB5dGhvbmNvcmVfcGdvLnZjcHJvaiIsICJ7OEI1OUMxRkYtMjQzOS00QkU5LTlGMjQtODRENDk4MkQyOEQ0fSIKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iCiAJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9CiAJRW5kUHJvamVjdFNlY3Rpb24KIEVuZFByb2plY3QKLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iCi1FbmRQcm9qZWN0CiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfdmVyc2lvbmluZm8iLCAibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiLCAie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iCiBFbmRQcm9qZWN0CiBHbG9iYWwKIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgogCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyCisJCURlYnVnfHg2NCA9IERlYnVnfHg2NAorCQlQR0lSZWxlYXNlfFdpbjMyID0gUEdJUmVsZWFzZXxXaW4zMgorCQlQR0lSZWxlYXNlfHg2NCA9IFBHSVJlbGVhc2V8eDY0CisJCVBHT1JlbGVhc2V8V2luMzIgPSBQR09SZWxlYXNlfFdpbjMyCisJCVBHT1JlbGVhc2V8eDY0ID0gUEdPUmVsZWFzZXx4NjQKIAkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzIKLQkJUmVsZWFzZUFNRDY0fFdpbjMyID0gUmVsZWFzZUFNRDY0fFdpbjMyCi0JCVJlbGVhc2VJdGFuaXVtfFdpbjMyID0gUmVsZWFzZUl0YW5pdW18V2luMzIKKwkJUmVsZWFzZXx4NjQgPSBSZWxlYXNlfHg2NAogCUVuZEdsb2JhbFNlY3Rpb24KIAlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0lSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHSVJlbGVhc2V8V2luMzIKKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdJUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUEdJUmVsZWFzZXxXaW4zMgorCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0lSZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBQR0lSZWxlYXNlfHg2NAorCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0lSZWxlYXNlfHg2NC5CdWlsZC4wID0gUEdJUmVsZWFzZXx4NjQKKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdPUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBQR09SZWxlYXNlfFdpbjMyCisJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHT1JlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFBHT1JlbGVhc2V8V2luMzIKKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdPUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUEdPUmVsZWFzZXx4NjQKKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdPUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFBHT1JlbGVhc2V8eDY0CiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VBTUQ2NHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUFNRDY0fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUl0YW5pdW18V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzIKLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUl0YW5pdW18V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyCisJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0lSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0lSZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0lSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdPUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHT1JlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdPUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdPUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CiAJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VBTUQ2NHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUFNRDY0fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUl0YW5pdW18V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzIKLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUl0YW5pdW18V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyCisJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5QR0lSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUEdJUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5QR0lSZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5QR0lSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUEdPUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlBHT1JlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUEdPUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUEdPUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CiAJCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgogCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VBTUQ2NHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUFNRDY0fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUl0YW5pdW18V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzIKLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUl0YW5pdW18V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyCisJCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5QR0lSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUEdJUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5QR0lSZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5QR0lSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUEdPUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlBHT1JlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUEdPUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUEdPUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CiAJCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgogCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VBTUQ2NHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUFNRDY0fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUl0YW5pdW18V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzIKLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUl0YW5pdW18V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyCisJCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0lSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0lSZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0lSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdPUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHT1JlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdPUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdPUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CiAJCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgogCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2VBTUQ2NHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2VJdGFuaXVtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CiAJCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCiAJCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlBHSVJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5QR0lSZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlBHSVJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlBHSVJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5QR09SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUEdPUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5QR09SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5QR09SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKIAkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCiAJCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUFNRDY0fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMgotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlQU1ENjR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMgotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlSXRhbml1bXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMgotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlSXRhbml1bXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzIKKwkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CiAJCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCiAJCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlBHSVJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5QR0lSZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlBHSVJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlBHSVJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5QR09SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUEdPUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5QR09SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5QR09SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKIAkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCiAJCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUFNRDY0fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMgotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlQU1ENjR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMgotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlSXRhbml1bXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMgotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlSXRhbml1bXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzIKKwkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlQU1ENjR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlQU1ENjR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUl0YW5pdW18V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlSXRhbml1bXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0lSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSVJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSVJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHT1JlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdPUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdPUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gRGVidWd8V2luMzIKIAkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKIAkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUEdJUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlBHSVJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUEdJUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUEdJUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlBHT1JlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5QR09SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlBHT1JlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlBHT1JlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKIAkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlQU1ENjR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VBTUQ2NHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VJdGFuaXVtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VJdGFuaXVtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMgorCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKIAkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKIAkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUEdJUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlBHSVJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUEdJUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUEdJUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlBHT1JlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5QR09SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlBHT1JlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlBHT1JlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKIAkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlQU1ENjR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VJdGFuaXVtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyCisJCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CiAJCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCiAJCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlBHSVJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5QR0lSZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlBHSVJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlBHSVJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5QR09SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUEdPUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5QR09SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5QR09SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKIAkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCiAJCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZUFNRDY0fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMgotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlSXRhbml1bXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMgorCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKIAkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKIAkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUEdJUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlBHSVJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUEdJUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUEdJUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlBHT1JlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5QR09SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlBHT1JlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlBHT1JlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKIAkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlQU1ENjR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VBTUQ2NHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VJdGFuaXVtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VJdGFuaXVtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMgotCQl7OEI1OUMxRkYtMjQzOS00QkU5LTlGMjQtODRENDk4MkQyOEQ0fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXs4QjU5QzFGRi0yNDM5LTRCRTktOUYyNC04NEQ0OTgyRDI4RDR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXs4QjU5QzFGRi0yNDM5LTRCRTktOUYyNC04NEQ0OTgyRDI4RDR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgotCQl7OEI1OUMxRkYtMjQzOS00QkU5LTlGMjQtODRENDk4MkQyOEQ0fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXs4QjU5QzFGRi0yNDM5LTRCRTktOUYyNC04NEQ0OTgyRDI4RDR9LlJlbGVhc2VBTUQ2NHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXs4QjU5QzFGRi0yNDM5LTRCRTktOUYyNC04NEQ0OTgyRDI4RDR9LlJlbGVhc2VBTUQ2NHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7OEI1OUMxRkYtMjQzOS00QkU5LTlGMjQtODRENDk4MkQyOEQ0fS5SZWxlYXNlSXRhbml1bXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXs4QjU5QzFGRi0yNDM5LTRCRTktOUYyNC04NEQ0OTgyRDI4RDR9LlJlbGVhc2VJdGFuaXVtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0lSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdJUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0lSZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0lSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdPUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHT1JlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdPUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdPUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CiAJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgogCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VBTUQ2NHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUFNRDY0fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzIKLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUl0YW5pdW18V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzIKLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUl0YW5pdW18V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyCisJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSVJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR09SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdPUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR09SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCiAJCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgogCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VBTUQ2NHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VBTUQ2NHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlSXRhbml1bXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VJdGFuaXVtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKIAlFbmRHbG9iYWxTZWN0aW9uCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KIAkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCmRpZmYgLS1naXQgYS9QQ2J1aWxkOC9weXRob24udmNwcm9qIGIvUENidWlsZDgvcHl0aG9uLnZjcHJvagppbmRleCA1NTVkZjkxLi43ZmE4ZDA0IDEwMDY0NAotLS0gYS9QQ2J1aWxkOC9weXRob24udmNwcm9qCisrKyBiL1BDYnVpbGQ4L3B5dGhvbi52Y3Byb2oKQEAgLTQsMTkgKzQsMjMgQEAKIAlWZXJzaW9uPSI4LDAwIgogCU5hbWU9InB5dGhvbiIKIAlQcm9qZWN0R1VJRD0ie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iCisJUm9vdE5hbWVzcGFjZT0icHl0aG9uIgogCT4KIAk8UGxhdGZvcm1zPgogCQk8UGxhdGZvcm0KIAkJCU5hbWU9IldpbjMyIgogCQkvPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9Ing2NCIKKwkJLz4KIAk8L1BsYXRmb3Jtcz4KIAk8VG9vbEZpbGVzPgogCTwvVG9vbEZpbGVzPgogCTxDb25maWd1cmF0aW9ucz4KIAkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlccHl0aG9uIgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCiAJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCiAJCQlVc2VPZk1GQz0iMCIKQEAgLTY3LDExICs3MSwxMiBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uLnBkYiIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJU3ViU3lzdGVtPSIxIgogCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiCkBAIC0xMDMsOSArMTA4LDEwMCBAQAogCQkJLz4KIAkJPC9Db25maWd1cmF0aW9uPgogCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbiIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSwuLlxQQyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIgorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiCisJCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob24iCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbiIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC0xNTUsMTEgKzI1MSwxMiBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uX2QuZXhlIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob25fZC5leGUiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob25fZC5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMSIKIAkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIgogCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIgpAQCAtMTkxLDkgKzI4OCw5IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbiIKKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlccHl0aG9uIgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCiAJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCiAJCQlVc2VPZk1GQz0iMCIKQEAgLTIxNCwyMyArMzExLDE4IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9WU0VYVENPTVBfVkVSQk9TRSIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSIKLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKLQkJCQlSdW50aW1lTGlicmFyeT0iMiIKLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIgogCQkJCVdhcm5pbmdMZXZlbD0iMyIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgogCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCiAJCQkJQ29tcGlsZUFzPSIwIgogCQkJLz4KQEAgLTIzOSwxMTkgKzMzMSwyNiBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciCiAJCQkJQ3VsdHVyZT0iMTAzMyIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsgL1ZTRVhUQ09NUF9WRVJCT1NFIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiIKLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9uLmV4ZSIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIgcHl0aG9uMjZfZC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbl9kLmV4ZSIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbi5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMSIKIAkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIgogCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIgotCQkJCVRhcmdldE1hY2hpbmU9IjAiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VccHl0aG9uIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCi0JCQlVc2VPZk1GQz0iMCIKLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKLQkJCUNoYXJhY3RlclNldD0iMiIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSIKLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKLQkJCQlSdW50aW1lTGlicmFyeT0iMiIKLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjMiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCUNvbXBpbGVBcz0iMCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgotCQkJCUN1bHR1cmU9IjEwMzMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24ucGRiIgotCQkJCVN1YlN5c3RlbT0iMSIKLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIgotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIgotCQkJCVRhcmdldE1hY2hpbmU9IjAiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKZGlmZiAtLWdpdCBhL1BDYnVpbGQ4L3B5dGhvbmNvcmUudmNwcm9qIGIvUENidWlsZDgvcHl0aG9uY29yZS52Y3Byb2oKaW5kZXggNWZhMTU0Yi4uZjMzNTg3OSAxMDA2NDQKLS0tIGEvUENidWlsZDgvcHl0aG9uY29yZS52Y3Byb2oKKysrIGIvUENidWlsZDgvcHl0aG9uY29yZS52Y3Byb2oKQEAgLTEwLDE0ICsxMCwxNyBAQAogCQk8UGxhdGZvcm0KIAkJCU5hbWU9IldpbjMyIgogCQkvPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9Ing2NCIKKwkJLz4KIAk8L1BsYXRmb3Jtcz4KIAk8VG9vbEZpbGVzPgogCTwvVG9vbEZpbGVzPgogCTxDb25maWd1cmF0aW9ucz4KIAkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbmNvcmUiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMjUsNiArMjgsNyBAQAogCQkJPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSIiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKQEAgLTY2LDIyICs3MCwyMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSYjeDBEOyYjeDBBOyIKKwkJCQlDb21tYW5kTGluZT0iIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIgotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjUuZGxsIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24yNi5kbGwiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMjUucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iMCIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMjUubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC0xMTAsOSArMTEyLDEwNiBAQAogCQkJLz4KIAkJPC9Db25maWd1cmF0aW9uPgogCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbmNvcmUiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJmYWxzZSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0iIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24yNi5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCisJCQkJU3ViU3lzdGVtPSIyIgorCQkJCUxpbmtUaW1lQ29kZUdlbmVyYXRpb249IjAiCisJCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiCisJCQkJSW1wb3J0TGlicmFyeT0iIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHl0aG9uY29yZSIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlccHl0aG9uY29yZSIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC0xNjIsMTYgKzI2MSwxNSBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIgotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjVfZC5kbGwiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbjI2X2QuZGxsIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjI1X2QucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjI1X2QubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC0yMDAsOSArMjk4LDkgQEAKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSIKKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlccHl0aG9uY29yZSIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC0yMjIsMjMgKzMyMCwxOCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiCisJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIgotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7VVNFX0RMX0VYUE9SVDtXSU4zMjtfV0lORE9XUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCiAJCQkJV2FybmluZ0xldmVsPSIzIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCiAJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKIAkJCQlDb21waWxlQXM9IjAiCiAJCQkvPgpAQCAtMjQ3LDI5ICszNDAsMjYgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIgogCQkJCUN1bHR1cmU9IjEwMzMiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIgotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQkJQ29tbWFuZExpbmU9IiIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIgotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjUuZGxsIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24yNl9kLmRsbCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJmYWxzZSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjI1LnBkYiIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJU3ViU3lzdGVtPSIyIgogCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24yNS5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTI5Nyw5ICszODcsOSBAQAogCQkJLz4KIAkJPC9Db25maWd1cmF0aW9uPgogCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cYW1kNjQtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiCisJCQlOYW1lPSJQR0lSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlccHl0aG9uY29yZSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbmNvcmUiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMzA3LDYgKzM5NywyMDEgQEAKIAkJCT4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCQlEZXNjcmlwdGlvbj0iR2V0IGdldGJ1aWxkaW5mbzIuYyIKKwkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiCisJCQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJQ29tcGlsZUFzPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciCisJCQkJQ3VsdHVyZT0iMTAzMyIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3B5dGhvbjI2LmRsbCIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iMiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9IiIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlBHSVJlbGVhc2V8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlccHl0aG9uY29yZSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbmNvcmUiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJCURlc2NyaXB0aW9uPSJHZXQgZ2V0YnVpbGRpbmZvMi5jIgorCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIKKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMzIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9IiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvcHl0aG9uMjYuZGxsIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgorCQkJCVN1YlN5c3RlbT0iMiIKKwkJCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSIyIgorCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIgorCQkJCUltcG9ydExpYnJhcnk9IiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9IiIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlBHT1JlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXFBHSVJlbGVhc2VccHl0aG9uY29yZSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlCdWlsZExvZ0ZpbGU9IiQoT3V0RGlyKVxCdWlsZExvZy5odG0iCisJCQlFeGNsdWRlQnVja2V0cz0iNyIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgpAQCAtMzIyLDIwICs2MDcsMTggQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAgL1VTRUNMOk1TX09QVEVST04gL0dTLSIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICIKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCiAJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCiAJCQkJV2FybmluZ0xldmVsPSIzIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCiAJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKIAkJCQlDb21waWxlQXM9IjAiCiAJCQkvPgpAQCAtMzUwLDIzICs2MzMsMTE5IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyIKLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJCUNvbW1hbmRMaW5lPSJjb3B5ICQoUGxhdGZvcm1OYW1lKVxweXRob24uZXhlICQoSW50RGlyKSYjeDBEOyYjeDBBOyQoSW50RGlyKVxweXRob24uZXhlIC4uL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weSAtbiAxJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIgotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjUuZGxsIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24yNi5kbGwiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMjUucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCisJCQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iMyIKKwkJCQlQcm9maWxlR3VpZGVkRGF0YWJhc2U9IiQoSW50RGlyKVwkKFRhcmdldE5hbWUpLnBnZCIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMjUubGliIgotCQkJCVRhcmdldE1hY2hpbmU9IjAiCisJCQkJSW1wb3J0TGlicmFyeT0iIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUEdPUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbmNvcmUiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQnVpbGRMb2dGaWxlPSIkKE91dERpcilcQnVpbGRMb2cuaHRtIgorCQkJRXhjbHVkZUJ1Y2tldHM9IjciCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIKKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMzIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgJChQbGF0Zm9ybU5hbWUpXHB5dGhvbi5leGUgJChJbnREaXIpJiN4MEQ7JiN4MEE7JChJbnREaXIpXHB5dGhvbi5leGUgLi4vVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5IC1uIDEmI3gwRDsmI3gwQTsiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbjI2LmRsbCIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iMyIKKwkJCQlQcm9maWxlR3VpZGVkRGF0YWJhc2U9IiQoSW50RGlyKVwkKFRhcmdldE5hbWUpLnBnZCIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTQ1Niw2ICs4MzUsMTQgQEAKIAkJCQkJLz4KIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXE1vZHVsZXNcemxpYiIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKIAkJCQkJPgogCQkJCQk8VG9vbApAQCAtNDY0LDcgKzg1MSw3IEBACiAJCQkJCS8+CiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiCisJCQkJCU5hbWU9IkRlYnVnfHg2NCIKIAkJCQkJPgogCQkJCQk8VG9vbAogCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKQEAgLTQ3Miw3ICs4NTksMzEgQEAKIAkJCQkJLz4KIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiCisJCQkJCU5hbWU9IlBHSVJlbGVhc2V8V2luMzIiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxNb2R1bGVzXHpsaWIiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUEdJUmVsZWFzZXx4NjQiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxNb2R1bGVzXHpsaWIiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUEdPUmVsZWFzZXxXaW4zMiIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXE1vZHVsZXNcemxpYiIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQR09SZWxlYXNlfHg2NCIKIAkJCQkJPgogCQkJCQk8VG9vbAogCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKQEAgLTQ4NSw2ICs4OTYsMzM0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iaW5jbHVkZSBmaWxlcyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGFic3RyYWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcYXNkbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGFzdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGJpdHNldC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGJvb2xvYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxidWZmZXJvYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxjZWxsb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcY2V2YWwuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxjbGFzc29iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGNvYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxjb2RlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcY29kZWNzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcY29tcGlsZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGNvbXBsZXhvYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxjU3RyaW5nSU8uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxkYXRldGltZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGRlc2Nyb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcZGljdG9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGVudW1vYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxlcnJjb2RlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcZXZhbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGZpbGVvYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxmbG9hdG9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGZyYW1lb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcZnVuY29iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGdlbm9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGdyYW1pbml0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcZ3JhbW1hci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGltcG9ydC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGludG9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGludHJjaGVjay5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGl0ZXJvYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxsaXN0b2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcbG9uZ2ludHJlcHIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxsb25nb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcbWFyc2hhbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXG1ldGFncmFtbWFyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcbWV0aG9kb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcbW9kc3VwcG9ydC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXG1vZHVsZW9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXG5vZGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxvYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxvYmppbXBsLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcb3Bjb2RlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcb3NkZWZzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccGFyc2V0b2suaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxwYXRjaGxldmVsLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccGdlbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHBnZW5oZWFkZXJzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHlfY3Vyc2VzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHlhcmVuYS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxQQ1xweWNvbmZpZy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHB5ZGVidWcuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxweWVycm9ycy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHB5ZXhwYXQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxweWZwZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHB5Z2V0b3B0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHltYWN0b29sYm94LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHltZW0uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxweXBvcnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxweXN0YXRlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHlzdHJ0b2QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxQeXRob24tYXN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcUHl0aG9uLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHl0aG9ucnVuLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHl0aHJlYWQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxyYW5nZW9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHNldG9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHNsaWNlb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcc3RyaW5nb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcc3RydWN0bWVtYmVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcc3RydWN0c2VxLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcc3ltdGFibGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxzeXNtb2R1bGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVx0aW1lZnVuY3MuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVx0b2tlbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHRyYWNlYmFjay5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHR1cGxlb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcdWNuaGFzaC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXHVuaWNvZGVvYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVx3ZWFrcmVmb2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KIAkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiCiAJCQk+CkBAIC01NTgsNiArMTI5NywxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX3R5cGVzbW9kdWxlLmMiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfd2Vha3JlZi5jIgogCQkJPgogCQk8L0ZpbGU+CkBAIC03MzgsNiArMTQ4MSw3NCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2V0YnVpbGRpbmZvMi5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJnZXRidWlsZGluZm8yLmgiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJnZXRidWlsZGluZm8yLmgiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJnZXRidWlsZGluZm8yLmgiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3x4NjQiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iZ2V0YnVpbGRpbmZvMi5oIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUEdJUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJnZXRidWlsZGluZm8yLmgiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJQR0lSZWxlYXNlfHg2NCIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJnZXRidWlsZGluZm8yLmgiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJQR09SZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlGb3JjZWRJbmNsdWRlRmlsZXM9ImdldGJ1aWxkaW5mbzIuaCIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlBHT1JlbGVhc2V8eDY0IgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlGb3JjZWRJbmNsdWRlRmlsZXM9ImdldGJ1aWxkaW5mbzIuaCIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cZ2V0Y29tcGlsZXIuYyIKIAkJCT4KIAkJPC9GaWxlPgpAQCAtNzk3LDYgKzE2MDgsMTQgQEAKIAkJCQkvPgogCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8eDY0IgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxQeXRob24iCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKIAkJCQk+CiAJCQkJPFRvb2wKQEAgLTgwNSw3ICsxNjI0LDcgQEAKIAkJCQkvPgogCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIgorCQkJCU5hbWU9IkRlYnVnfHg2NCIKIAkJCQk+CiAJCQkJPFRvb2wKIAkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKQEAgLTgxMyw3ICsxNjMyLDMxIEBACiAJCQkJLz4KIAkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiCisJCQkJTmFtZT0iUEdJUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cUHl0aG9uIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUEdJUmVsZWFzZXx4NjQiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXFB5dGhvbiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlBHT1JlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXFB5dGhvbiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlBHT1JlbGVhc2V8eDY0IgogCQkJCT4KIAkJCQk8VG9vbAogCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgpAQCAtOTM4LDYgKzE3ODEsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25ccGVlcGhvbGUuYyIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQ4L3B5dGhvbmNvcmVfcGdvLnZjcHJvaiBiL1BDYnVpbGQ4L3B5dGhvbmNvcmVfcGdvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzMTJhZC4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkOC9weXRob25jb3JlX3Bnby52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw3ODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Ci08VmlzdWFsU3R1ZGlvUHJvamVjdAotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgotCVZlcnNpb249IjgsMDAiCi0JTmFtZT0icHl0aG9uY29yZV9wZ28iCi0JUHJvamVjdEdVSUQ9Ins4QjU5QzFGRi0yNDM5LTRCRTktOUYyNC04NEQ0OTgyRDI4RDR9IgotCVJvb3ROYW1lc3BhY2U9InB5dGhvbmNvcmVfcGdvIgotCUtleXdvcmQ9IldpbjMyUHJvaiIKLQk+Ci0JPFBsYXRmb3Jtcz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJXaW4zMiIKLQkJLz4KLQk8L1BsYXRmb3Jtcz4KLQk8VG9vbEZpbGVzPgotCTwvVG9vbEZpbGVzPgotCTxDb25maWd1cmF0aW9ucz4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoUHJvamVjdE5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcJChQcm9qZWN0TmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKLQkJCVVzZU9mTUZDPSIwIgotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgotCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlSdW50aW1lTGlicmFyeT0iMiIKLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjMiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJQ29tcGlsZUFzPSIwIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciCi0JCQkJQ3VsdHVyZT0iMTAzMyIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZGluZm8gJmFtcDsgcHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9ucyAocGxlYXNlIGJlIHBhdGllbnQpIgotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkmI3gwRDsmI3gwQTtsaW5rIEAkKFByb2plY3ROYW1lKV9saW5rLnR4dCYjeDBEOyYjeDBBOyQoT3V0RGlyKVxweXRob24gLi4vVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5IC1uIDEmI3gwRDsmI3gwQTsiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3B5dGhvbjI1LmRsbCIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS9weXRob24yNS5wZGIiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCUxpbmtUaW1lQ29kZUdlbmVyYXRpb249IjMiCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpL3B5dGhvbjI1LmxpYiIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQk8L0NvbmZpZ3VyYXRpb25zPgotCTxSZWZlcmVuY2VzPgotCTwvUmVmZXJlbmNlcz4KLQk8RmlsZXM+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9InpsaWIiCi0JCQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcemxpYlxjcmMzMi5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x6bGliXHRyZWVzLmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcemxpYlx1bmNvbXByLmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcemxpYm1vZHVsZS5jIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXE1vZHVsZXNcemxpYiIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcemxpYlx6dXRpbC5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfY3N2LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9ob3RzaG90LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfbHNwcm9mLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfc3JlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfc3RydWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUGNcX3N1YnByb2Nlc3MuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF93ZWFrcmVmLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUGNcX3dpbnJlZy5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcYWJzdHJhY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQYXJzZXJcYWNjZWxlci5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cYXNkbC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxhc3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGF1ZGlvb3AuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGJpbmFzY2lpLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUGFyc2VyXGJpdHNldC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxibHRpbm1vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcYm9vbG9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcYnVmZmVyb2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGNldmFsLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXGNvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cY29kZWNzLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xjb2xsZWN0aW9uc21vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxjb21waWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUENcY29uZmlnLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xjUGlja2xlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xjU3RyaW5nSU8uYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGRhdGV0aW1lbW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcZGljdG9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFBDXGRsX250LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxlcnJvcnMuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXGZpbGVvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQYXJzZXJcZmlyc3RzZXRzLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcZnJhbWVvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cZnJvemVuLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGZ1dHVyZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXGdlbm9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxnZXRhcmdzLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxnZXRtdGltZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxnZXRvcHQuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQQ1xnZXRwYXRocC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxnZXR2ZXJzaW9uLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGdyYW1pbml0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUGFyc2VyXGdyYW1tYXIuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQYXJzZXJcZ3JhbW1hcjEuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGltYWdlb3AuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25caW1wb3J0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUENcaW1wb3J0X250LmMiCi0JCQk+Ci0JCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCT4KLQkJCQk8VG9vbAotCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxQeXRob24iCi0JCQkJLz4KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGltcG9ydGRsLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xpbnRvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXGl0ZXJvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFBhcnNlclxsaXN0bm9kZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcbGlzdG9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcbG9uZ29iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcbWFpbi5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxtYXJzaGFsLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xtZDUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXG1kNW1vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFBhcnNlclxtZXRhZ3JhbW1hci5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXG1vZHN1cHBvcnQuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFBDXG1zdmNydG1vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUGFyc2VyXG15cmVhZGxpbmUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cbXlzbnByaW50Zi5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxteXN0cnRvdWwuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQYXJzZXJcbm9kZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcb2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xvYm1hbGxvYy5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcb3BlcmF0b3IuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQYXJzZXJccGFyc2VyLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQYXJzZXJccGFyc2V0b2suYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXHB5YXJlbmEuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25ccHlmcGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25ccHlzdGF0ZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxweXN0cnRvZC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxQeXRob24tYXN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUENidWlsZDhccHl0aG9uLmV4ZSIKLQkJCT4KLQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJPgotCQkJCTxUb29sCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJCQlDb21tYW5kTGluZT0ieGNvcHkgJChJbnB1dEZpbGVOYW1lKSogJChPdXREaXIpIC9GIC9JIC9ZJiN4MEQ7JiN4MEE7IgotCQkJCQlPdXRwdXRzPSIkKE91dERpcilcJChJbnB1dEZpbGVOYW1lKSIKLQkJCQkvPgotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQQ1xweXRob25fbnQucmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXHB5dGhvbnJ1bi5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNccmFuZ2VvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHJnYmltZ21vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xzZXRvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNoYTI1Nm1vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNoYW1vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xzdHJpbmdvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHN0cm9wbW9kdWxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcc3RydWN0c2VxLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXHN5bXRhYmxlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxzeXNtb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cdGhyZWFkLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x0aHJlYWRtb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxQYXJzZXJcdG9rZW5pemVyLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXHRyYWNlYmFjay5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcdHVwbGVvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHR5cGVvYmplY3QuYyIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcd2Vha3JlZm9iamVjdC5jIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x5dXZjb252ZXJ0LmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyIKLQkJCT4KLQkJPC9GaWxlPgotCTwvRmlsZXM+Ci0JPEdsb2JhbHM+Ci0JPC9HbG9iYWxzPgotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZDgvcHl0aG9uY29yZV9wZ29fbGluay50eHQgYi9QQ2J1aWxkOC9weXRob25jb3JlX3Bnb19saW5rLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y0M2U2Zi4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkOC9weXRob25jb3JlX3Bnb19saW5rLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMxMSArMCwwIEBACi0vT1VUOiIuXHB5dGhvbmNvcmVfcGdvL3B5dGhvbjI1LmRsbCIgL0lOQ1JFTUVOVEFMOk5PIC9ETEwgL01BTklGRVNUIC9NQU5JRkVTVEZJTEU6Ii5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xweXRob24yNS5kbGwuaW50ZXJtZWRpYXRlLm1hbmlmZXN0IiAvTk9ERUZBVUxUTElCOiJsaWJjIiAvREVCVUcgL1BEQjoiLlxweXRob25jb3JlX3Bnby9weXRob24yNS5wZGIiIC9TVUJTWVNURU06V0lORE9XUyAvTFRDRzpQR0lOU1RSVU1FTlQgL1BHRDoiLlxweXRob25jb3JlX3Bnb1xweXRob24yNS5wZ2QiIC9CQVNFOiIweDFlMDAwMDAwIiAvSU1QTElCOiJweXRob25jb3JlX3Bnby9weXRob24yNS5saWIiIC9NQUNISU5FOlg4NiBnZXRidWlsZGluZm8ubyBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGFkbGVyMzIub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGNvbXByZXNzLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xjcmMzMi5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZGVmbGF0ZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZ3ppby5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29caW5mYmFjay5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29caW5mZmFzdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29caW5mbGF0ZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29caW5mdHJlZXMub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHRyZWVzLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1x1bmNvbXByLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1x6bGlibW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1x6dXRpbC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cX2Jpc2VjdG1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cX2NvZGVjc19jbi5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cX2NvZGVjc19oay5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cX2NvZGVjc19pc28yMDIyLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfY29kZWNzX2pwLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfY29kZWNzX2tyLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfY29kZWNzX3R3Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfY29kZWNzbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfY3N2Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfZnVuY3Rvb2xzbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfaGVhcHFtb2R1bGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXF9ob3RzaG90Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfbG9jYWxlbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfbHNwcm9mLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfcmFuZG9tbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfc3JlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfc3RydWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xfc3VicHJvY2Vzcy5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cX3dlYWtyZWYub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXF93aW5yZWcub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGFic3RyYWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xhY2NlbGVyLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xhcnJheW1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cYXNkbC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cYXN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xhdWRpb29wLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xiaW5hc2NpaS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cYml0c2V0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xibHRpbm1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cYm9vbG9iamVjdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cYnVmZmVyb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xjZWxsb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xjZXZhbC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cY2xhc3NvYmplY3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGNtYXRobW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xjb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xjb2RlY3Mub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGNvZGVvYmplY3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGNvbGxlY3Rpb25zbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xjb21waWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xjb21wbGV4b2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xjb25maWcub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGNQaWNrbGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGNTdHJpbmdJTy5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZGF0ZXRpbWVtb2R1bGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGRlc2Nyb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xkaWN0b2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xkbF9udC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZHlubG9hZF93aW4ub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGVudW1vYmplY3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGVycm5vbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xlcnJvcnMub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGV4Y2VwdGlvbnMub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGZpbGVvYmplY3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGZpcnN0c2V0cy5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZmxvYXRvYmplY3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGZyYW1lb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xmcm96ZW4ub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGZ1bmNvYmplY3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGZ1dHVyZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZ2Ntb2R1bGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGdlbm9iamVjdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZ2V0YXJncy5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZ2V0Y29tcGlsZXIub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGdldGNvcHlyaWdodC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZ2V0bXRpbWUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGdldG9wdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZ2V0cGF0aHAub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGdldHBsYXRmb3JtLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xnZXR2ZXJzaW9uLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xncmFtaW5pdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZ3JhbW1hci5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cZ3JhbW1hcjEub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGltYWdlb3Aub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGltcG9ydC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29caW1wb3J0X250Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xpbXBvcnRkbC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29caW50b2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xpdGVyb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xpdGVydG9vbHNtb2R1bGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXGxpc3Rub2RlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xsaXN0b2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xsb25nb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xtYWluLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xtYXJzaGFsLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xtYXRobW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xtZDUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXG1kNW1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cbWV0YWdyYW1tYXIub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXG1ldGhvZG9iamVjdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cbW1hcG1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cbW9kc3VwcG9ydC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cbW9kdWxlb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xtc3ZjcnRtb2R1bGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXG11bHRpYnl0ZWNvZGVjLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xteXJlYWRsaW5lLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xteXNucHJpbnRmLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xteXN0cnRvdWwub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXG5vZGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXG9iamVjdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cb2JtYWxsb2Mub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXG9wZXJhdG9yLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xwYXJzZXIub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHBhcnNlcm1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29ccGFyc2V0b2sub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHBvc2l4bW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xweWFyZW5hLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xweWZwZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29ccHlzdGF0ZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29ccHlzdHJ0b2Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXFB5dGhvbi1hc3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHB5dGhvbl9udC5yZXMiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29ccHl0aG9ucnVuLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xyYW5nZW9iamVjdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29ccmdiaW1nbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xyb3RhdGluZ3RyZWUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHNldG9iamVjdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cc2hhMjU2bW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xzaGE1MTJtb2R1bGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHNoYW1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cc2lnbmFsbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xzbGljZW9iamVjdC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cc3RyaW5nb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xzdHJvcG1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cc3RydWN0bWVtYmVyLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xzdHJ1Y3RzZXEub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHN5bXRhYmxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1xzeW10YWJsZW1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cc3lzbW9kdWxlLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1x0aHJlYWQub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHRocmVhZG1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cdGltZW1vZHVsZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cdG9rZW5pemVyLm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1x0cmFjZWJhY2sub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHR1cGxlb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1x0eXBlb2JqZWN0Lm9iaiIKLQotIi5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlX3Bnb1x1bmljb2RlY3R5cGUub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHVuaWNvZGVvYmplY3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHdlYWtyZWZvYmplY3Qub2JqIgotCi0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmVfcGdvXHh4c3VidHlwZS5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29ceXV2Y29udmVydC5vYmoiCi0KLSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZV9wZ29cemlwaW1wb3J0Lm9iaiIKZGlmZiAtLWdpdCBhL1BDYnVpbGQ4L3B5dGhvbncudmNwcm9qIGIvUENidWlsZDgvcHl0aG9udy52Y3Byb2oKaW5kZXggNDI3MTY3My4uZjY5MjM2MyAxMDA2NDQKLS0tIGEvUENidWlsZDgvcHl0aG9udy52Y3Byb2oKKysrIGIvUENidWlsZDgvcHl0aG9udy52Y3Byb2oKQEAgLTQsMTkgKzQsMjMgQEAKIAlWZXJzaW9uPSI4LDAwIgogCU5hbWU9InB5dGhvbnciCiAJUHJvamVjdEdVSUQ9IntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9IgorCVJvb3ROYW1lc3BhY2U9InB5dGhvbnciCiAJPgogCTxQbGF0Zm9ybXM+CiAJCTxQbGF0Zm9ybQogCQkJTmFtZT0iV2luMzIiCiAJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgogCTwvUGxhdGZvcm1zPgogCTxUb29sRmlsZXM+CiAJPC9Ub29sRmlsZXM+CiAJPENvbmZpZ3VyYXRpb25zPgogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob253IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVxweXRob253IgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCiAJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCiAJCQlVc2VPZk1GQz0iMCIKQEAgLTYyLDExICs2NiwxMiBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9ud19kLmV4ZSIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9ud19kLmV4ZSIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbndfZC5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMiIKIAkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIgogCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIgpAQCAtOTgsOSArMTAzLDk1IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3x4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbnciCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJQ29tcGlsZUFzPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciCisJCQkJQ3VsdHVyZT0iMTAzMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9ud19kLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgorCQkJCVN1YlN5c3RlbT0iMiIKKwkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIgorCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbnciCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHB5dGhvbnciCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMTQ5LDExICsyNDAsMTIgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9udy5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMiIKIAkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIgogCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIgpAQCAtMTg1LDkgKzI3Nyw5IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbnciCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlccHl0aG9udyIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC0yMDcsMjMgKzI5OSwyMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSIKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSwuLlxQQyIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgogCQkJCVdhcm5pbmdMZXZlbD0iMyIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgogCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCiAJCQkJQ29tcGlsZUFzPSIwIgogCQkJLz4KQEAgLTI0MCwxMDggKzMyOSwxNiBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbncuZXhlIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIwIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHB5dGhvbnciCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKLQkJCVVzZU9mTUZDPSIwIgotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIgotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iMyIKLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJQ29tcGlsZUFzPSIwIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciCi0JCQkJQ3VsdHVyZT0iMTAzMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyIKLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIgotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIgotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIgotCQkJCVRhcmdldE1hY2hpbmU9IjAiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKZGlmZiAtLWdpdCBhL1BDYnVpbGQ4L3JlYWRtZS50eHQgYi9QQ2J1aWxkOC9yZWFkbWUudHh0CmluZGV4IGU1MjFmZWUuLmZhNGZjYjUgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQ4L3JlYWRtZS50eHQKKysrIGIvUENidWlsZDgvcmVhZG1lLnR4dApAQCAtMTIsNyArMTIsNyBAQAogVGhlIHByb3BlciBvcmRlciB0byBidWlsZCBzdWJwcm9qZWN0czoKIAogMSkgcHl0aG9uY29yZSAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIERMTCBhbmQgbGlicmFyeSBmaWxlcywKLSAgICAgICAgICAgICAgIHB5dGhvbjI1LntkbGwsIGxpYn0gaW4gUmVsZWFzZSBtb2RlKQorICAgICAgICAgICAgICAgcHl0aG9uMjYue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCiAgICAgICAgICAgICAgIE5PVEU6ICBpbiBwcmV2aW91cyByZWxlYXNlcywgdGhpcyBzdWJwcm9qZWN0IHdhcwogICAgICAgICAgICAgICBuYW1lZCBhZnRlciB0aGUgcmVsZWFzZSBudW1iZXIsIGUuZy4gcHl0aG9uMjAuCiAKQEAgLTI1LDggKzI1LDIxIEBACiAgICB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudCwgb3IgYXJlIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdAogICAgdGVzdCBzbGF2ZTsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQogCitCaW5hcnkgZmlsZXMgZ28gaW50byBQQ0J1aWxkOFxXaW4zMiBvciBceDY0IGRpcmVjdG9yaWVzIGFuZCBkb24ndAoraW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci4KKwogV2hlbiB1c2luZyB0aGUgRGVidWcgc2V0dGluZywgdGhlIG91dHB1dCBmaWxlcyBoYXZlIGEgX2QgYWRkZWQgdG8KLXRoZWlyIG5hbWU6ICBweXRob24yNV9kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4KK3RoZWlyIG5hbWU6ICBweXRob24yNl9kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4KKworVGhlcmUgYXJlIHR3byBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgcHl0aG9uY29yZSBwcm9qZWN0IGFuZAordGhlIHNvbHV0aW9uLiAgVGhlc2UgYXJlIFBHSVJlbGVhc2UgYW5kIFBHT1JlbGVhc2UuICBUaGV5IGFyZSBmb3IKK2NyZWF0ZWluZyBwcm9maWxlLWd1aWRlZCBvcHRpbWl6ZWQgdmVyc2lvbnMgb2YgcHl0aG9uLmRsbC4KK1RoZSBmb3JtZXIgY3JlYXRlcyB0aGUgaW5zdHJ1bWVudGVkIGJpbmFyaWVzLCBhbmQgdGhlIGxhdHRlcgorcnVucyBweXRob24uZXhlIHdpdGggdGhlIGluc3RydW1lbnRlZCBweXRob24uZGxsIG9uIHRoZSBwZXJmb3JtYW5jZQordGVzdHN1aXRlLCBhbmQgY3JlYXRlcyBhIG5ldywgb3B0aW1pemVkLCBweXRob24uZGxsIGluCitQQ0J1aWxkOFxXaW4zMlxQR09SZWxlYXNlLCBvciBpbiB0aGUgeDY0IGZvbGRlci4gIE5vdGUgdGhhdCBhbHRob3VnaAord2UgY2FuIGNyb3NzLWNvbXBpbGUgeDY0IGJpbmFyaWVzIG9uIGEgMzIgYml0IG1hY2hpbmUsIHdlIGNhbm5vdAorY3JlYXRlIHRoZSBQR08gYmluYXJpZXMsIHNpbmNlIHRoZXkgcmVxdWlyZSBhY3R1YWxseSBydW5uaW5nIHRoZSBjb2RlLgogCiBTVUJQUk9KRUNUUwogLS0tLS0tLS0tLS0KQEAgLTM3LDEyICs1MCw2IEBACiAKIHB5dGhvbmNvcmUKICAgICAuZGxsIGFuZCAubGliCi1weXRob25jb3JlX3BnbwotCS5kbGwgYW5kIC5saWIsIGEgdmFyaWFudCBvZiBweXRob25jb3JlIHRoYXQgaXMgb3B0aW1pemVkIHRocm91Z2ggYSAKLQlQcm9maWxlIEd1aWRlZCBPcHRpbWl6YXRpb24gKFBHTyksIGVtcGxveWluZyBweWJlbmNoIGFzIHRoZSBwcm9maWxlCi0JY2FzZSB0byBvcHRpbWl6ZSBmb3IuIFRoZSByZXN1bHRzIGFyZSBwcm9kdWNlZCBhcyBhIHB5dGhvbjI1LntkbGwsbGlifQotCWluIHRoZSBzdWJmb2xkZXIgJ3B5dGhvbmNvcmVfcGdvJy4gVG8gdXNlIHRoaXMgaW5zdGVhZCBvZiB0aGUgCi0Jc3RhbmRhcmQgUHl0aG9uIGRsbCBwbGFjZSB0aGlzIGRsbCB3aXRoIHRoZSBweXRob24uZXhlLgogcHl0aG9uCiAgICAgLmV4ZQogcHl0aG9udwpkaWZmIC0tZ2l0IGEvUENidWlsZDgvc2VsZWN0LnZjcHJvaiBiL1BDYnVpbGQ4L3NlbGVjdC52Y3Byb2oKaW5kZXggOTdhNTU0Yi4uNzI4ODhjYiAxMDA2NDQKLS0tIGEvUENidWlsZDgvc2VsZWN0LnZjcHJvagorKysgYi9QQ2J1aWxkOC9zZWxlY3QudmNwcm9qCkBAIC00LDE5ICs0LDIzIEBACiAJVmVyc2lvbj0iOCwwMCIKIAlOYW1lPSJzZWxlY3QiCiAJUHJvamVjdEdVSUQ9Ins5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9IgorCVJvb3ROYW1lc3BhY2U9InNlbGVjdCIKIAk+CiAJPFBsYXRmb3Jtcz4KIAkJPFBsYXRmb3JtCiAJCQlOYW1lPSJXaW4zMiIKIAkJLz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJ4NjQiCisJCS8+CiAJPC9QbGF0Zm9ybXM+CiAJPFRvb2xGaWxlcz4KIAk8L1Rvb2xGaWxlcz4KIAk8Q29uZmlndXJhdGlvbnM+CiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxzZWxlY3QiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHNlbGVjdCIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC02NCwxNSArNjgsMTYgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcc2VsZWN0LnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0LnBkYiIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJU3ViU3lzdGVtPSIyIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC0xMDEsOSArMTA2LDk4IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcc2VsZWN0IgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCisJCQlVc2VPZk1GQz0iMCIKKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJQ29tcGlsZUFzPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxzZWxlY3QucHlkIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCisJCQkJSW1wb3J0TGlicmFyeT0iIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcc2VsZWN0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVxzZWxlY3QiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMTQ4LDE1ICsyNDIsMTYgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0X2QucHlkIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxzZWxlY3RfZC5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyxtc3ZjcnQiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3RfZC5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCVN1YlN5c3RlbT0iMiIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0X2QubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC0xODUsOSArMjgwLDkgQEAKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2Vcc2VsZWN0IgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVxzZWxlY3QiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMjA3LDIzICszMDIsMTcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1MiCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKIAkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgogCQkJCUNvbXBpbGVBcz0iMCIKIAkJCS8+CkBAIC0yMzgsMTEwICszMjcsMTggQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcc2VsZWN0X2QucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCisJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyxtc3ZjcnQiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3QucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdC5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxzZWxlY3QiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKLQkJCVVzZU9mTUZDPSIwIgotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cSW5jbHVkZSwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iMyIKLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJQ29tcGlsZUFzPSIwIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3QucGRiIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0LmxpYiIKLQkJCQlUYXJnZXRNYWNoaW5lPSIwIgorCQkJCUltcG9ydExpYnJhcnk9IiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpkaWZmIC0tZ2l0IGEvUENidWlsZDgvdW5pY29kZWRhdGEudmNwcm9qIGIvUENidWlsZDgvdW5pY29kZWRhdGEudmNwcm9qCmluZGV4IGQ2YzM3NWIuLjc1ZDc0ODMgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQ4L3VuaWNvZGVkYXRhLnZjcHJvagorKysgYi9QQ2J1aWxkOC91bmljb2RlZGF0YS52Y3Byb2oKQEAgLTQsMTkgKzQsMjMgQEAKIAlWZXJzaW9uPSI4LDAwIgogCU5hbWU9InVuaWNvZGVkYXRhIgogCVByb2plY3RHVUlEPSJ7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfSIKKwlSb290TmFtZXNwYWNlPSJ1bmljb2RlZGF0YSIKIAk+CiAJPFBsYXRmb3Jtcz4KIAkJPFBsYXRmb3JtCiAJCQlOYW1lPSJXaW4zMiIKIAkJLz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJ4NjQiCisJCS8+CiAJPC9QbGF0Zm9ybXM+CiAJPFRvb2xGaWxlcz4KIAk8L1Rvb2xGaWxlcz4KIAk8Q29uZmlndXJhdGlvbnM+CiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcdW5pY29kZWRhdGEiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtNjMsMTIgKzY3LDE0IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YS5weWQiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHVuaWNvZGVkYXRhLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhLmxpYiIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMSIKIAkJCS8+CiAJCQk8VG9vbApAQCAtOTcsOSArMTAzLDk1IEBACiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcdW5pY29kZWRhdGEiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQ29tcGlsZUFzPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx1bmljb2RlZGF0YS5weWQiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1x1bmljb2RlZGF0YSIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcdW5pY29kZWRhdGEiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMTQ1LDEzICsyMzcsMTQgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhX2QucHlkIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx1bmljb2RlZGF0YV9kLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhX2QucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGFfZC5saWIiCisJCQkJSW1wb3J0TGlicmFyeT0iIgogCQkJCVRhcmdldE1hY2hpbmU9IjEiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTE4MCw5ICsyNzMsOSBAQAogCQkJLz4KIAkJPC9Db25maWd1cmF0aW9uPgogCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSIKKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcdW5pY29kZWRhdGEiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMjAzLDIzICsyOTYsMTggQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCiAJCQkJV2FybmluZ0xldmVsPSIzIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCiAJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKIAkJCQlDb21waWxlQXM9IjAiCiAJCQkvPgpAQCAtMjM0LDEwMyArMzIyLDE1IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyIKLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcdW5pY29kZWRhdGFfZC5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGEucGRiIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YS5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgotCQkJVXNlT2ZNRkM9IjAiCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKLQkJCQlSdW50aW1lTGlicmFyeT0iMiIKLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjMiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCUNvbXBpbGVBcz0iMCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyIKLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhLmxpYiIKLQkJCQlUYXJnZXRNYWNoaW5lPSIwIgorCQkJCUltcG9ydExpYnJhcnk9IiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpkaWZmIC0tZ2l0IGEvUENidWlsZDgvdzl4cG9wZW4udmNwcm9qIGIvUENidWlsZDgvdzl4cG9wZW4udmNwcm9qCmluZGV4IDM1MzllY2MuLmMxNTk3NTAgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQ4L3c5eHBvcGVuLnZjcHJvagorKysgYi9QQ2J1aWxkOC93OXhwb3Blbi52Y3Byb2oKQEAgLTQsMTkgKzQsMjMgQEAKIAlWZXJzaW9uPSI4LDAwIgogCU5hbWU9Inc5eHBvcGVuIgogCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSIKKwlSb290TmFtZXNwYWNlPSJ3OXhwb3BlbiIKIAk+CiAJPFBsYXRmb3Jtcz4KIAkJPFBsYXRmb3JtCiAJCQlOYW1lPSJXaW4zMiIKIAkJLz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJ4NjQiCisJCS8+CiAJPC9QbGF0Zm9ybXM+CiAJPFRvb2xGaWxlcz4KIAk8L1Rvb2xGaWxlcz4KIAk8Q29uZmlndXJhdGlvbnM+CiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHc5eHBvcGVuIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVx3OXhwb3BlbiIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgogCQkJVXNlT2ZNRkM9IjAiCkBAIC02MCwxMSArNjQsMTIgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlPdXRwdXRGaWxlPSIuL3c5eHBvcGVuX2QuZXhlIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx3OXhwb3Blbl9kLmV4ZSIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3c5eHBvcGVuX2QucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC05Myw5ICs5OCw4OSBAQAogCQkJLz4KIAkJPC9Db25maWd1cmF0aW9uPgogCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVx3OXhwb3BlbiIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx3OXhwb3Blbl9kLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2Vcdzl4cG9wZW4iCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpXHc5eHBvcGVuIgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCiAJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCiAJCQlVc2VPZk1GQz0iMCIKQEAgLTE0MCwxMCArMjI1LDEyIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3c5eHBvcGVuLmV4ZSIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcdzl4cG9wZW4uZXhlIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3c5eHBvcGVuLnBkYiIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC0xNzEsNiArMjU4LDg3IEBACiAJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCiAJCQkvPgogCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcdzl4cG9wZW4iCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx3OXhwb3Blbi5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KIAk8L0NvbmZpZ3VyYXRpb25zPgogCTxSZWZlcmVuY2VzPgogCTwvUmVmZXJlbmNlcz4KZGlmZiAtLWdpdCBhL1BDYnVpbGQ4L3dpbnNvdW5kLnZjcHJvaiBiL1BDYnVpbGQ4L3dpbnNvdW5kLnZjcHJvagppbmRleCA2YTg0ZWJiLi42Y2NiNDNiIDEwMDY0NAotLS0gYS9QQ2J1aWxkOC93aW5zb3VuZC52Y3Byb2oKKysrIGIvUENidWlsZDgvd2luc291bmQudmNwcm9qCkBAIC00LDE5ICs0LDIzIEBACiAJVmVyc2lvbj0iOCwwMCIKIAlOYW1lPSJ3aW5zb3VuZCIKIAlQcm9qZWN0R1VJRD0iezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30iCisJUm9vdE5hbWVzcGFjZT0id2luc291bmQiCiAJPgogCTxQbGF0Zm9ybXM+CiAJCTxQbGF0Zm9ybQogCQkJTmFtZT0iV2luMzIiCiAJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgogCTwvUGxhdGZvcm1zPgogCTxUb29sRmlsZXM+CiAJPC9Ub29sRmlsZXM+CiAJPENvbmZpZ3VyYXRpb25zPgogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1x3aW5zb3VuZCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcd2luc291bmQiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtNjMsMTMgKzY3LDE0IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZF9kLnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcd2luc291bmRfZC5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZF9kLnBkYiIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kX2QubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC05OCw5ICsxMDMsOTUgQEAKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcd2luc291bmQiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx3aW5zb3VuZF9kLnB5ZCIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIgorCQkJCUltcG9ydExpYnJhcnk9IiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcd2luc291bmQiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMTQ4LDEyICsyMzksMTQgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiIKLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kLnB5ZCIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcd2luc291bmQucHlkIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kLnBkYiIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIgorCQkJCUltcG9ydExpYnJhcnk9IiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIgogCQkJLz4KIAkJCTxUb29sCkBAIC0xODIsOSArMjc1LDkgQEAKIAkJCS8+CiAJCTwvQ29uZmlndXJhdGlvbj4KIAkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2Vcd2luc291bmQiCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSlcd2luc291bmQiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKIAkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKIAkJCVVzZU9mTUZDPSIwIgpAQCAtMjA1LDI0ICsyOTgsMjAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iCiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCiAJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiCiAJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCiAJCQkJV2FybmluZ0xldmVsPSIzIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKIAkJCQlDb21waWxlQXM9IjAiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTIzNiwxMDUgKzMyNSwxNiBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmQucHlkIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx3aW5zb3VuZC5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZC5saWIiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgotCQkJVXNlT2ZNRkM9IjAiCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSIzIgotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlDb21waWxlQXM9IjAiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIgotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmQucHlkIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kLnBkYiIKLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIgotCQkJCVRhcmdldE1hY2hpbmU9IjAiCisJCQkJSW1wb3J0TGlicmFyeT0iIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2VyLmMgYi9QYXJzZXIvcGFyc2VyLmMKaW5kZXggNDUzMDJlZC4uMTM0ZTE0YyAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNlci5jCisrKyBiL1BhcnNlci9wYXJzZXIuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiBmdXR1cmVfaGFjayhwYXJzZXJfc3RhdGUgKnBzKQogewogCW5vZGUgKm4gPSBwcy0+cF9zdGFjay5zX3RvcC0+c19wYXJlbnQ7Ci0Jbm9kZSAqY2g7CisJbm9kZSAqY2gsICpjY2g7CiAJaW50IGk7CiAKIAkvKiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IC4uLiwgbXVzdCBoYXZlIGF0IGxlYXN0IDQgY2hpbGRyZW4gKi8KQEAgLTE5NywxNSArMTk3LDE3IEBACiAJaWYgKE5DSChjaCkgPT0gMSAmJiBTVFIoQ0hJTEQoY2gsIDApKSAmJgogCSAgICBzdHJjbXAoU1RSKENISUxEKGNoLCAwKSksICJfX2Z1dHVyZV9fIikgIT0gMCkKIAkJcmV0dXJuOwotCWZvciAoaSA9IDM7IGkgPCBOQ0gobik7IGkgKz0gMikgewotCQkvKiBYWFg6IGFzc3VtZSB3ZSBkb24ndCBoYXZlIHBhcmVudGhlc2VzIGluIGltcG9ydDoKLQkJICAgICAgICBmcm9tIF9fZnV0dXJlX18gaW1wb3J0ICh4LCB5LCB6KQotCQkqLwotCQljaCA9IENISUxEKG4sIGkpOwotCQlpZiAoTkNIKGNoKSA9PSAxKQotCQkJY2ggPSBDSElMRChjaCwgMCk7Ci0JCWlmIChOQ0goY2gpID49IDEgJiYgVFlQRShDSElMRChjaCwgMCkpID09IE5BTUUgJiYKLQkJICAgIHN0cmNtcChTVFIoQ0hJTEQoY2gsIDApKSwgIndpdGhfc3RhdGVtZW50IikgPT0gMCkgeworCWNoID0gQ0hJTEQobiwgMyk7CisJLyogY2ggY2FuIGJlIGEgc3RhciwgYSBwYXJlbnRoZXNpcyBvciBpbXBvcnRfYXNfbmFtZXMgKi8KKwlpZiAoVFlQRShjaCkgPT0gU1RBUikKKwkJcmV0dXJuOworCWlmIChUWVBFKGNoKSA9PSBMUEFSKQorCQljaCA9IENISUxEKG4sIDQpOworCQorCWZvciAoaSA9IDA7IGkgPCBOQ0goY2gpOyBpICs9IDIpIHsKKwkJY2NoID0gQ0hJTEQoY2gsIGkpOworCQlpZiAoTkNIKGNjaCkgPj0gMSAmJiBUWVBFKENISUxEKGNjaCwgMCkpID09IE5BTUUgJiYKKwkJICAgIHN0cmNtcChTVFIoQ0hJTEQoY2NoLCAwKSksICJ3aXRoX3N0YXRlbWVudCIpID09IDApIHsKIAkJCXBzLT5wX2ZsYWdzIHw9IENPX0ZVVFVSRV9XSVRIX1NUQVRFTUVOVDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2V0b2suYyBiL1BhcnNlci9wYXJzZXRvay5jCmluZGV4IDAxYTMwNTEuLjcxYmVkMjkgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wYXJzZXRvay5jCisrKyBiL1BhcnNlci9wYXJzZXRvay5jCkBAIC04Miw5ICs4Miw2IEBACiAJcmV0dXJuIHBhcnNldG9rKHRvaywgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKIH0KIAotLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gdGhlIGdpdmVuIHRva2VuaXplciBzdHJ1Y3R1cmUuCi0gICBSZXR1cm4gZXJyb3IgY29kZS4gKi8KLQogI2lmZGVmIFBZX1BBUlNFUl9SRVFVSVJFU19GVVRVUkVfS0VZV09SRAogc3RhdGljIGNoYXIgd2l0aF9tc2dbXSA9CiAiJXM6JWQ6IFdhcm5pbmc6ICd3aXRoJyB3aWxsIGJlY29tZSBhIHJlc2VydmVkIGtleXdvcmQgaW4gUHl0aG9uIDIuNlxuIjsKQEAgLTEwMSw2ICs5OCw5IEBACiB9CiAjZW5kaWYKIAorLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gdGhlIGdpdmVuIHRva2VuaXplciBzdHJ1Y3R1cmUuCisgICBSZXR1cm4gZXJyb3IgY29kZS4gKi8KKwogc3RhdGljIG5vZGUgKgogcGFyc2V0b2soc3RydWN0IHRva19zdGF0ZSAqdG9rLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsIHBlcnJkZXRhaWwgKmVycl9yZXQsCiAJIGludCBmbGFncykKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuYyBiL1BhcnNlci90b2tlbml6ZXIuYwppbmRleCAyYTczMTA2Li45NDdhZDljIDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmMKKysrIGIvUGFyc2VyL3Rva2VuaXplci5jCkBAIC04OTYsNyArODk2LDcgQEAKIAkJCQl0b2stPmN1ciA9IHRvay0+YnVmICsgY3VyOwogCQkJCXRvay0+bGluZV9zdGFydCA9IHRvay0+Y3VyOwogCQkJCS8qIHJlcGxhY2UgIlxyXG4iIHdpdGggIlxuIiAqLwotCQkJCS8qIEZvciBNYWMgbGVhdmUgdGhlIFxyLCBnaXZpbmcgc3ludGF4IGVycm9yICovCisJCQkJLyogRm9yIE1hYyBsZWF2ZSB0aGUgXHIsIGdpdmluZyBhIHN5bnRheCBlcnJvciAqLwogCQkJCXB0ID0gdG9rLT5pbnAgLSAyOwogCQkJCWlmIChwdCA+PSB0b2stPmJ1ZiAmJiAqcHQgPT0gJ1xyJykgewogCQkJCQkqcHQrKyA9ICdcbic7CmRpZmYgLS1naXQgYS9QeXRob24vYXN0LmMgYi9QeXRob24vYXN0LmMKaW5kZXggNjcyYTcxNS4uNDExYzQyZiAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzdC5jCisrKyBiL1B5dGhvbi9hc3QuYwpAQCAtMTUsMTIgKzE1LDYgQEAKIAogI2luY2x1ZGUgPGFzc2VydC5oPgogCi0vKiBYWFggVE8gRE8KLSAgIC0gcmUtaW5kZW50IHRoaXMgZmlsZSAoc2hvdWxkIGJlIGRvbmUpCi0gICAtIGludGVybmFsIGVycm9yIGNoZWNraW5nIChmcmVlaW5nIG1lbW9yeSwgZXRjLikKLSAgIC0gc3ludGF4IGVycm9ycwotKi8KLQogLyogRGF0YSBzdHJ1Y3R1cmUgdXNlZCBpbnRlcm5hbGx5ICovCiBzdHJ1Y3QgY29tcGlsaW5nIHsKICAgICBjaGFyICpjX2VuY29kaW5nOyAvKiBzb3VyY2UgZW5jb2RpbmcgKi8KQEAgLTQzLDcgKzM3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqcGFyc2VzdHJwbHVzKHN0cnVjdCBjb21waWxpbmcgKiwgY29uc3Qgbm9kZSAqbik7CiAKICNpZm5kZWYgTElORU5PCi0jZGVmaW5lIExJTkVOTyhuKQkoKG4pLT5uX2xpbmVubykKKyNkZWZpbmUgTElORU5PKG4pICAgICAgICgobiktPm5fbGluZW5vKQogI2VuZGlmCiAKIHN0YXRpYyBpZGVudGlmaWVyCkBAIC02OCw3ICs2Miw3IEBACiB7CiAgICAgUHlPYmplY3QgKnUgPSBQeV9CdWlsZFZhbHVlKCJ6aSIsIGVycnN0ciwgTElORU5PKG4pKTsKICAgICBpZiAoIXUpCi0JcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAwOwogICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19TeW50YXhFcnJvciwgdSk7CiAgICAgUHlfREVDUkVGKHUpOwogICAgIHJldHVybiAwOwpAQCAtODIsMzYgKzc2LDM2IEBACiAKICAgICBhc3NlcnQoUHlFcnJfT2NjdXJyZWQoKSk7CiAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N5bnRheEVycm9yKSkKLQlyZXR1cm47CisgICAgICAgIHJldHVybjsKIAogICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0YmFjayk7CiAgICAgZXJyc3RyID0gUHlUdXBsZV9HZXRJdGVtKHZhbHVlLCAwKTsKICAgICBpZiAoIWVycnN0cikKLQlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICBQeV9JTkNSRUYoZXJyc3RyKTsKICAgICBsaW5lbm8gPSBQeUludF9Bc0xvbmcoUHlUdXBsZV9HZXRJdGVtKHZhbHVlLCAxKSk7CiAgICAgaWYgKGxpbmVubyA9PSAtMSkgewotCVB5X0RFQ1JFRihlcnJzdHIpOwotCXJldHVybjsKKyAgICAgICAgUHlfREVDUkVGKGVycnN0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKIAogICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0KGZpbGVuYW1lLCBsaW5lbm8pOwogICAgIGlmICghbG9jKSB7Ci0JUHlfSU5DUkVGKFB5X05vbmUpOwotCWxvYyA9IFB5X05vbmU7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgbG9jID0gUHlfTm9uZTsKICAgICB9CiAgICAgdG1wID0gUHlfQnVpbGRWYWx1ZSgiKHpsT08pIiwgZmlsZW5hbWUsIGxpbmVubywgUHlfTm9uZSwgbG9jKTsKICAgICBQeV9ERUNSRUYobG9jKTsKICAgICBpZiAoIXRtcCkgewotCVB5X0RFQ1JFRihlcnJzdHIpOwotCXJldHVybjsKKyAgICAgICAgUHlfREVDUkVGKGVycnN0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdmFsdWUgPSBQeVR1cGxlX1BhY2soMiwgZXJyc3RyLCB0bXApOwogICAgIFB5X0RFQ1JFRihlcnJzdHIpOwogICAgIFB5X0RFQ1JFRih0bXApOwogICAgIGlmICghdmFsdWUpCi0JcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdGJhY2spOwogfQogCkBAIC0yNDYsNyArMjQwLDcgQEAKICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBORVdMSU5FKSB7CiAgICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcoMSwgYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghc3RtdHMpCi0JCSAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChzdG10cywgMCwgUGFzcyhuLT5uX2xpbmVubywgbi0+bl9jb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVuYSkpOwogICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcmFjdGl2ZShzdG10cywgYXJlbmEpOwpAQCAtMjU2LDExICsyNTAsMTEgQEAKICAgICAgICAgICAgICAgICBudW0gPSBudW1fc3RtdHMobik7CiAgICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcobnVtLCBhcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG10cykKLQkJICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgaWYgKG51bSA9PSAxKSB7Ci0JCSAgICBzID0gYXN0X2Zvcl9zdG10KCZjLCBuKTsKLQkJICAgIGlmICghcykKLQkJCWdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHMgPSBhc3RfZm9yX3N0bXQoJmMsIG4pOworICAgICAgICAgICAgICAgICAgICBpZiAoIXMpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoc3RtdHMsIDAsIHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTM0NywzOCArMzQxLDM4IEBACiAKICAgICBzd2l0Y2ggKGUtPmtpbmQpIHsKICAgICAgICAgY2FzZSBBdHRyaWJ1dGVfa2luZDoKLQkgICAgaWYgKGN0eCA9PSBTdG9yZSAmJgotCQkgICAgIXN0cmNtcChQeVN0cmluZ19BU19TVFJJTkcoZS0+di5BdHRyaWJ1dGUuYXR0ciksICJOb25lIikpIHsKLQkJICAgIHJldHVybiBhc3RfZXJyb3IobiwgImFzc2lnbm1lbnQgdG8gTm9uZSIpOwotCSAgICB9Ci0JICAgIGUtPnYuQXR0cmlidXRlLmN0eCA9IGN0eDsKLQkgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoY3R4ID09IFN0b3JlICYmCisgICAgICAgICAgICAgICAgICAgICFzdHJjbXAoUHlTdHJpbmdfQVNfU1RSSU5HKGUtPnYuQXR0cmlidXRlLmF0dHIpLCAiTm9uZSIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhc3RfZXJyb3IobiwgImFzc2lnbm1lbnQgdG8gTm9uZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZS0+di5BdHRyaWJ1dGUuY3R4ID0gY3R4OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3Vic2NyaXB0X2tpbmQ6Ci0JICAgIGUtPnYuU3Vic2NyaXB0LmN0eCA9IGN0eDsKLQkgICAgYnJlYWs7CisgICAgICAgICAgICBlLT52LlN1YnNjcmlwdC5jdHggPSBjdHg7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOYW1lX2tpbmQ6Ci0JICAgIGlmIChjdHggPT0gU3RvcmUgJiYKLQkJIXN0cmNtcChQeVN0cmluZ19BU19TVFJJTkcoZS0+di5OYW1lLmlkKSwgIk5vbmUiKSkgewotCQkgICAgcmV0dXJuIGFzdF9lcnJvcihuLCAiYXNzaWdubWVudCB0byBOb25lIik7Ci0JICAgIH0KLQkgICAgZS0+di5OYW1lLmN0eCA9IGN0eDsKLQkgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoY3R4ID09IFN0b3JlICYmCisgICAgICAgICAgICAgICAgIXN0cmNtcChQeVN0cmluZ19BU19TVFJJTkcoZS0+di5OYW1lLmlkKSwgIk5vbmUiKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXN0X2Vycm9yKG4sICJhc3NpZ25tZW50IHRvIE5vbmUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGUtPnYuTmFtZS5jdHggPSBjdHg7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMaXN0X2tpbmQ6Ci0JICAgIGUtPnYuTGlzdC5jdHggPSBjdHg7Ci0JICAgIHMgPSBlLT52Lkxpc3QuZWx0czsKLQkgICAgYnJlYWs7CisgICAgICAgICAgICBlLT52Lkxpc3QuY3R4ID0gY3R4OworICAgICAgICAgICAgcyA9IGUtPnYuTGlzdC5lbHRzOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHVwbGVfa2luZDoKICAgICAgICAgICAgIGlmIChhc2RsX3NlcV9MRU4oZS0+di5UdXBsZS5lbHRzKSA9PSAwKSAKICAgICAgICAgICAgICAgICByZXR1cm4gYXN0X2Vycm9yKG4sICJjYW4ndCBhc3NpZ24gdG8gKCkiKTsKLQkgICAgZS0+di5UdXBsZS5jdHggPSBjdHg7Ci0JICAgIHMgPSBlLT52LlR1cGxlLmVsdHM7Ci0JICAgIGJyZWFrOworICAgICAgICAgICAgZS0+di5UdXBsZS5jdHggPSBjdHg7CisgICAgICAgICAgICBzID0gZS0+di5UdXBsZS5lbHRzOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGFtYmRhX2tpbmQ6CiAgICAgICAgICAgICBleHByX25hbWUgPSAibGFtYmRhIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENhbGxfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJmdW5jdGlvbiBjYWxsIjsKLQkgICAgYnJlYWs7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb29sT3Bfa2luZDoKICAgICAgICAgY2FzZSBCaW5PcF9raW5kOgogICAgICAgICBjYXNlIFVuYXJ5T3Bfa2luZDoKQEAgLTQyOCwxMiArNDIyLDEyIEBACiAgICAgICAgY29udGV4dCBmb3IgYWxsIHRoZSBjb250YWluZWQgZWxlbWVudHMuICAKICAgICAqLwogICAgIGlmIChzKSB7Ci0JaW50IGk7CisgICAgICAgIGludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGFzZGxfc2VxX0xFTihzKTsgaSsrKSB7Ci0JICAgIGlmICghc2V0X2NvbnRleHQoKGV4cHJfdHkpYXNkbF9zZXFfR0VUKHMsIGkpLCBjdHgsIG4pKQotCQlyZXR1cm4gMDsKLQl9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4ocyk7IGkrKykgeworICAgICAgICAgICAgaWYgKCFzZXRfY29udGV4dCgoZXhwcl90eSlhc2RsX3NlcV9HRVQocywgaSksIGN0eCwgbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIDE7CiB9CkBAIC00ODQsMTMgKzQ3OCwxMyBAQAogICAgICovCiAgICAgUkVRKG4sIGNvbXBfb3ApOwogICAgIGlmIChOQ0gobikgPT0gMSkgewotCW4gPSBDSElMRChuLCAwKTsKLQlzd2l0Y2ggKFRZUEUobikpIHsKKyAgICAgICAgbiA9IENISUxEKG4sIDApOworICAgICAgICBzd2l0Y2ggKFRZUEUobikpIHsKICAgICAgICAgICAgIGNhc2UgTEVTUzoKICAgICAgICAgICAgICAgICByZXR1cm4gTHQ7CiAgICAgICAgICAgICBjYXNlIEdSRUFURVI6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEd0OwotICAgICAgICAgICAgY2FzZSBFUUVRVUFMOgkJCS8qID09ICovCisgICAgICAgICAgICBjYXNlIEVRRVFVQUw6ICAgICAgICAgICAgICAgICAgICAgICAvKiA9PSAqLwogICAgICAgICAgICAgICAgIHJldHVybiBFcTsKICAgICAgICAgICAgIGNhc2UgTEVTU0VRVUFMOgogICAgICAgICAgICAgICAgIHJldHVybiBMdEU7CkBAIC01MDcsMTEgKzUwMSwxMSBAQAogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwgImludmFsaWQgY29tcF9vcDogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFIobikpOwogICAgICAgICAgICAgICAgIHJldHVybiAoY21wb3BfdHkpMDsKLQl9CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoTkNIKG4pID09IDIpIHsKLQkvKiBoYW5kbGUgIm5vdCBpbiIgYW5kICJpcyBub3QiICovCi0Jc3dpdGNoIChUWVBFKENISUxEKG4sIDApKSkgeworICAgICAgICAvKiBoYW5kbGUgIm5vdCBpbiIgYW5kICJpcyBub3QiICovCisgICAgICAgIHN3aXRjaCAoVFlQRShDSElMRChuLCAwKSkpIHsKICAgICAgICAgICAgIGNhc2UgTkFNRToKICAgICAgICAgICAgICAgICBpZiAoc3RyY21wKFNUUihDSElMRChuLCAxKSksICJpbiIpID09IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbjsKQEAgLTUyMSw3ICs1MTUsNyBAQAogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwgImludmFsaWQgY29tcF9vcDogJXMgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFIoQ0hJTEQobiwgMCkpLCBTVFIoQ0hJTEQobiwgMSkpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gKGNtcG9wX3R5KTA7Ci0JfQorICAgICAgICB9CiAgICAgfQogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwgImludmFsaWQgY29tcF9vcDogaGFzICVkIGNoaWxkcmVuIiwKICAgICAgICAgICAgICAgICAgTkNIKG4pKTsKQEAgLTUzNiwxMCArNTMwLDExIEBACiAgICAgZXhwcl90eSBleHByZXNzaW9uOwogICAgIGludCBpOwogICAgIGFzc2VydChUWVBFKG4pID09IHRlc3RsaXN0Ci0JICAgfHwgVFlQRShuKSA9PSBsaXN0bWFrZXIKLQkgICB8fCBUWVBFKG4pID09IHRlc3RsaXN0X2dleHAKLQkgICB8fCBUWVBFKG4pID09IHRlc3RsaXN0X3NhZmUKLQkgICApOworICAgICAgICAgICB8fCBUWVBFKG4pID09IGxpc3RtYWtlcgorICAgICAgICAgICB8fCBUWVBFKG4pID09IHRlc3RsaXN0X2dleHAKKyAgICAgICAgICAgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9zYWZlCisgICAgICAgICAgIHx8IFRZUEUobikgPT0gdGVzdGxpc3QxCisgICAgICAgICAgICk7CiAKICAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzZXEpCkBAIC01NjcsMjAgKzU2MiwzNyBAQAogICAgIGlmICghYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICAvKiBmcGRlZjogTkFNRSB8ICcoJyBmcGxpc3QgJyknCisgICAgICAgZnBsaXN0OiBmcGRlZiAoJywnIGZwZGVmKSogWycsJ10KKyAgICAqLwogICAgIFJFUShuLCBmcGxpc3QpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICBjb25zdCBub2RlICpjaGlsZCA9IENISUxEKENISUxEKG4sIDIqaSksIDApOworICAgICAgICBjb25zdCBub2RlICpmcGRlZl9ub2RlID0gQ0hJTEQobiwgMippKTsKKyAgICAgICAgY29uc3Qgbm9kZSAqY2hpbGQ7CiAgICAgICAgIGV4cHJfdHkgYXJnOworc2V0X25hbWU6CisgICAgICAgIC8qIGZwZGVmX25vZGUgaXMgZWl0aGVyIGEgTkFNRSBvciBhbiBmcGxpc3QgKi8KKyAgICAgICAgY2hpbGQgPSBDSElMRChmcGRlZl9ub2RlLCAwKTsKICAgICAgICAgaWYgKFRZUEUoY2hpbGQpID09IE5BTUUpIHsKLSAgICAJCWlmICghc3RyY21wKFNUUihjaGlsZCksICJOb25lIikpIHsKLQkgICAgCQlhc3RfZXJyb3IoY2hpbGQsICJhc3NpZ25tZW50IHRvIE5vbmUiKTsKLQkJICAgIAlyZXR1cm4gTlVMTDsKLQkJICAgIH0gICAKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChTVFIoY2hpbGQpLCAiTm9uZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3RfZXJyb3IoY2hpbGQsICJhc3NpZ25tZW50IHRvIE5vbmUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICBhcmcgPSBOYW1lKE5FV19JREVOVElGSUVSKGNoaWxkKSwgU3RvcmUsIExJTkVOTyhjaGlsZCksCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwotCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXJnID0gY29tcGlsZXJfY29tcGxleF9hcmdzKGMsIENISUxEKENISUxEKG4sIDIqaSksIDEpKTsKKyAgICAgICAgICAgIGFzc2VydChUWVBFKGZwZGVmX25vZGUpID09IGZwZGVmKTsKKyAgICAgICAgICAgIC8qIGZwZGVmX25vZGVbMF0gaXMgbm90IGEgbmFtZSwgc28gaXQgbXVzdCBiZSBhICcoJywgZ2V0IENISUxEWzFdICovCisgICAgICAgICAgICBjaGlsZCA9IENISUxEKGZwZGVmX25vZGUsIDEpOworICAgICAgICAgICAgYXNzZXJ0KFRZUEUoY2hpbGQpID09IGZwbGlzdCk7CisgICAgICAgICAgICAvKiBOQ0ggPT0gMSBtZWFucyB3ZSBoYXZlICh4KSwgd2UgbmVlZCB0byBlbGlkZSB0aGUgZXh0cmEgcGFyZW5zICovCisgICAgICAgICAgICBpZiAoTkNIKGNoaWxkKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgZnBkZWZfbm9kZSA9IENISUxEKGNoaWxkLCAwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoVFlQRShmcGRlZl9ub2RlKSA9PSBmcGRlZik7CisgICAgICAgICAgICAgICAgZ290byBzZXRfbmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFyZyA9IGNvbXBpbGVyX2NvbXBsZXhfYXJncyhjLCBjaGlsZCk7CiAgICAgICAgIH0KICAgICAgICAgYXNkbF9zZXFfU0VUKGFyZ3MsIGksIGFyZyk7CiAgICAgfQpAQCAtNzMxLDYgKzc0Myw3IEBACiAgICAgICAgIGNoID0gQ0hJTEQobiwgaSk7CiAgICAgICAgIHN3aXRjaCAoVFlQRShjaCkpIHsKICAgICAgICAgICAgIGNhc2UgZnBkZWY6CisgICAgICAgICAgICBoYW5kbGVfZnBkZWY6CiAgICAgICAgICAgICAgICAgLyogWFhYIE5lZWQgdG8gd29ycnkgYWJvdXQgY2hlY2tpbmcgaWYgVFlQRShDSElMRChuLCBpKzEpKSBpcwogICAgICAgICAgICAgICAgICAgIGFueXRoaW5nIG90aGVyIHRoYW4gRVFVQUwgb3IgYSBjb21tYT8gKi8KICAgICAgICAgICAgICAgICAvKiBYWFggU2hvdWxkIE5DSChuKSBjaGVjayBiZSBtYWRlIGEgc2VwYXJhdGUgY2hlY2s/ICovCkBAIC03NTgsNyArNzcxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY29tcGxleF9hcmdzKGMsIGNoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWYgZm9vKCh4KSk6IHNldHVwIGZvciBjaGVja2luZyBOQU1FIGJlbG93LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCBiZWNhdXNlIHRoZXJlIGNhbiBiZSBtYW55IHBhcmVucyBhbmQgdHVwbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucGFja2luZyBtaXhlZCBpbi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFRZUEUoY2gpID09IGZwZGVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2ZwZGVmOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKGNoLCAwKSkgPT0gTkFNRSkgewpAQCAtNzczLDcgKzc5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChwb3NhcmdzLCBrKyssIG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpICs9IDI7IC8qIHRoZSBuYW1lIGFuZCB0aGUgY29tbWEgKi8KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg0NywxNSArODY0LDE1IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGUgPSBOYW1lKGlkLCBMb2FkLCBsaW5lbm8sIGNvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIGlmICghZSkKLQlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKGkgPSAyOyBpIDwgTkNIKG4pOyBpKz0yKSB7CiAgICAgICAgIGlkID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgaSkpOwotCWlmICghaWQpCi0JICAgIHJldHVybiBOVUxMOwotCWUgPSBBdHRyaWJ1dGUoZSwgaWQsIExvYWQsIGxpbmVubywgY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Ci0JaWYgKCFlKQotCSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKCFpZCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBlID0gQXR0cmlidXRlKGUsIGlkLCBMb2FkLCBsaW5lbm8sIGNvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gZTsKQEAgLTg3NCwyNCArODkxLDI0IEBACiAgICAgCiAgICAgbmFtZV9leHByID0gYXN0X2Zvcl9kb3R0ZWRfbmFtZShjLCBDSElMRChuLCAxKSk7CiAgICAgaWYgKCFuYW1lX2V4cHIpCi0JcmV0dXJuIE5VTEw7Ci0JCisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAKICAgICBpZiAoTkNIKG4pID09IDMpIHsgLyogTm8gYXJndW1lbnRzICovCi0JZCA9IG5hbWVfZXhwcjsKLQluYW1lX2V4cHIgPSBOVUxMOworICAgICAgICBkID0gbmFtZV9leHByOworICAgICAgICBuYW1lX2V4cHIgPSBOVUxMOwogICAgIH0KICAgICBlbHNlIGlmIChOQ0gobikgPT0gNSkgeyAvKiBDYWxsIHdpdGggbm8gYXJndW1lbnRzICovCi0JZCA9IENhbGwobmFtZV9leHByLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBMSU5FTk8obiksCisgICAgICAgIGQgPSBDYWxsKG5hbWVfZXhwciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTElORU5PKG4pLAogICAgICAgICAgICAgICAgICBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwotCWlmICghZCkKLQkgICAgcmV0dXJuIE5VTEw7Ci0JbmFtZV9leHByID0gTlVMTDsKKyAgICAgICAgaWYgKCFkKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG5hbWVfZXhwciA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgewotCWQgPSBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMyksIG5hbWVfZXhwcik7Ci0JaWYgKCFkKQotCSAgICByZXR1cm4gTlVMTDsKLQluYW1lX2V4cHIgPSBOVUxMOworICAgICAgICBkID0gYXN0X2Zvcl9jYWxsKGMsIENISUxEKG4sIDMpLCBuYW1lX2V4cHIpOworICAgICAgICBpZiAoIWQpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbmFtZV9leHByID0gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gZDsKQEAgLTkwOCwxMiArOTI1LDEyIEBACiAgICAgZGVjb3JhdG9yX3NlcSA9IGFzZGxfc2VxX25ldyhOQ0gobiksIGMtPmNfYXJlbmEpOwogICAgIGlmICghZGVjb3JhdG9yX3NlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JCisgICAgICAgIAogICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkrKykgewogICAgICAgICBkID0gYXN0X2Zvcl9kZWNvcmF0b3IoYywgQ0hJTEQobiwgaSkpOwotCSAgICBpZiAoIWQpCi0JICAgICAgICByZXR1cm4gTlVMTDsKLQkgICAgYXNkbF9zZXFfU0VUKGRlY29yYXRvcl9zZXEsIGksIGQpOworICAgICAgICAgICAgaWYgKCFkKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGRlY29yYXRvcl9zZXEsIGksIGQpOwogICAgIH0KICAgICByZXR1cm4gZGVjb3JhdG9yX3NlcTsKIH0KQEAgLTkzMSwyOCArOTQ4LDI4IEBACiAgICAgUkVRKG4sIGZ1bmNkZWYpOwogCiAgICAgaWYgKE5DSChuKSA9PSA2KSB7IC8qIGRlY29yYXRvcnMgYXJlIHByZXNlbnQgKi8KLQlkZWNvcmF0b3Jfc2VxID0gYXN0X2Zvcl9kZWNvcmF0b3JzKGMsIENISUxEKG4sIDApKTsKLQlpZiAoIWRlY29yYXRvcl9zZXEpCi0JICAgIHJldHVybiBOVUxMOwotCW5hbWVfaSA9IDI7CisgICAgICAgIGRlY29yYXRvcl9zZXEgPSBhc3RfZm9yX2RlY29yYXRvcnMoYywgQ0hJTEQobiwgMCkpOworICAgICAgICBpZiAoIWRlY29yYXRvcl9zZXEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbmFtZV9pID0gMjsKICAgICB9CiAgICAgZWxzZSB7Ci0JbmFtZV9pID0gMTsKKyAgICAgICAgbmFtZV9pID0gMTsKICAgICB9CiAKICAgICBuYW1lID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgbmFtZV9pKSk7CiAgICAgaWYgKCFuYW1lKQotCXJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBlbHNlIGlmICghc3RyY21wKFNUUihDSElMRChuLCBuYW1lX2kpKSwgIk5vbmUiKSkgewotCWFzdF9lcnJvcihDSElMRChuLCBuYW1lX2kpLCAiYXNzaWdubWVudCB0byBOb25lIik7Ci0JcmV0dXJuIE5VTEw7CisgICAgICAgIGFzdF9lcnJvcihDSElMRChuLCBuYW1lX2kpLCAiYXNzaWdubWVudCB0byBOb25lIik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBhcmdzID0gYXN0X2Zvcl9hcmd1bWVudHMoYywgQ0hJTEQobiwgbmFtZV9pICsgMSkpOwogICAgIGlmICghYXJncykKLQlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYm9keSA9IGFzdF9mb3Jfc3VpdGUoYywgQ0hJTEQobiwgbmFtZV9pICsgMykpOwogICAgIGlmICghYm9keSkKLQlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXR1cm4gRnVuY3Rpb25EZWYobmFtZSwgYXJncywgYm9keSwgZGVjb3JhdG9yX3NlcSwgTElORU5PKG4pLAogICAgICAgICAgICAgICAgICAgICAgICBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwpAQCAtOTk0LDE3ICsxMDExLDIyIEBACiAgICAgYXNzZXJ0KE5DSChuKSA9PSA1KTsKICAgICBib2R5ID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDApKTsKICAgICBpZiAoIWJvZHkpCi0gICAgCXJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDIpKTsKICAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgCXJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBvcmVsc2UgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgNCkpOwogICAgIGlmICghb3JlbHNlKQotCXJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gSWZFeHAoZXhwcmVzc2lvbiwgYm9keSwgb3JlbHNlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSk7CiB9CiAKKy8qIFhYWChubm9yd2l0eik6IHRoZSBsaXN0Y29tcCBhbmQgZ2VuZXhwciBjb2RlIHNob3VsZCBiZSByZWZhY3RvcmVkCisgICBzbyB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHZlcnNpb24uICBQb3NzaWJseSBmb3IgbG9vcHMgY2FuIGFsc28gcmUtdXNlCisgICB0aGUgY29kZS4KKyovCisKIC8qIENvdW50IHRoZSBudW1iZXIgb2YgJ2ZvcicgbG9vcCBpbiBhIGxpc3QgY29tcHJlaGVuc2lvbi4KIAogICAgSGVscGVyIGZvciBhc3RfZm9yX2xpc3Rjb21wKCkuCkBAIC0xMDIwLDE0ICsxMDQyLDE0IEBACiAgICAgbl9mb3JzKys7CiAgICAgUkVRKGNoLCBsaXN0X2Zvcik7CiAgICAgaWYgKE5DSChjaCkgPT0gNSkKLQljaCA9IENISUxEKGNoLCA0KTsKKyAgICAgICAgY2ggPSBDSElMRChjaCwgNCk7CiAgICAgZWxzZQotCXJldHVybiBuX2ZvcnM7CisgICAgICAgIHJldHVybiBuX2ZvcnM7CiAgY291bnRfbGlzdF9pdGVyOgogICAgIFJFUShjaCwgbGlzdF9pdGVyKTsKICAgICBjaCA9IENISUxEKGNoLCAwKTsKICAgICBpZiAoVFlQRShjaCkgPT0gbGlzdF9mb3IpCi0JZ290byBjb3VudF9saXN0X2ZvcjsKKyAgICAgICAgZ290byBjb3VudF9saXN0X2ZvcjsKICAgICBlbHNlIGlmIChUWVBFKGNoKSA9PSBsaXN0X2lmKSB7CiAgICAgICAgIGlmIChOQ0goY2gpID09IDMpIHsKICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDIpOwpAQCAtMTA1NSwxMiArMTA3NywxMiBAQAogIGNvdW50X2xpc3RfaXRlcjoKICAgICBSRVEobiwgbGlzdF9pdGVyKTsKICAgICBpZiAoVFlQRShDSElMRChuLCAwKSkgPT0gbGlzdF9mb3IpCi0JcmV0dXJuIG5faWZzOworICAgICAgICByZXR1cm4gbl9pZnM7CiAgICAgbiA9IENISUxEKG4sIDApOwogICAgIFJFUShuLCBsaXN0X2lmKTsKICAgICBuX2lmcysrOwogICAgIGlmIChOQ0gobikgPT0gMikKLQlyZXR1cm4gbl9pZnM7CisgICAgICAgIHJldHVybiBuX2lmczsKICAgICBuID0gQ0hJTEQobiwgMik7CiAgICAgZ290byBjb3VudF9saXN0X2l0ZXI7CiB9CkBAIC0xMDkyLDYxICsxMTE0LDY1IEBACiAKICAgICBsaXN0Y29tcHMgPSBhc2RsX3NlcV9uZXcobl9mb3JzLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWxpc3Rjb21wcykKLSAgICAJcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgY2ggPSBDSElMRChuLCAxKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbl9mb3JzOyBpKyspIHsKLQljb21wcmVoZW5zaW9uX3R5IGxjOwotCWFzZGxfc2VxICp0OworICAgICAgICBjb21wcmVoZW5zaW9uX3R5IGxjOworICAgICAgICBhc2RsX3NlcSAqdDsKICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uOworICAgICAgICBub2RlICpmb3JfY2g7CiAKLQlSRVEoY2gsIGxpc3RfZm9yKTsKKyAgICAgICAgUkVRKGNoLCBsaXN0X2Zvcik7CiAKLQl0ID0gYXN0X2Zvcl9leHBybGlzdChjLCBDSElMRChjaCwgMSksIFN0b3JlKTsKKyAgICAgICAgZm9yX2NoID0gQ0hJTEQoY2gsIDEpOworICAgICAgICB0ID0gYXN0X2Zvcl9leHBybGlzdChjLCBmb3JfY2gsIFN0b3JlKTsKICAgICAgICAgaWYgKCF0KQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIENISUxEKGNoLCAzKSk7CiAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0JaWYgKGFzZGxfc2VxX0xFTih0KSA9PSAxKQotCSAgICBsYyA9IGNvbXByZWhlbnNpb24oKGV4cHJfdHkpYXNkbF9zZXFfR0VUKHQsIDApLCBleHByZXNzaW9uLCBOVUxMLAorICAgICAgICAvKiBDaGVjayB0aGUgIyBvZiBjaGlsZHJlbiByYXRoZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHQsIHNpbmNlCisgICAgICAgICAgIFt4IGZvciB4LCBpbiAuLi4gXSBoYXMgMSBlbGVtZW50IGluIHQsIGJ1dCBzdGlsbCByZXF1aXJlcyBhIFR1cGxlLiAqLworICAgICAgICBpZiAoTkNIKGZvcl9jaCkgPT0gMSkKKyAgICAgICAgICAgIGxjID0gY29tcHJlaGVuc2lvbigoZXhwcl90eSlhc2RsX3NlcV9HRVQodCwgMCksIGV4cHJlc3Npb24sIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSk7Ci0JZWxzZQotCSAgICBsYyA9IGNvbXByZWhlbnNpb24oVHVwbGUodCwgU3RvcmUsIExJTkVOTyhjaCksIGNoLT5uX2NvbF9vZmZzZXQsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxjID0gY29tcHJlaGVuc2lvbihUdXBsZSh0LCBTdG9yZSwgTElORU5PKGNoKSwgY2gtPm5fY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFsYykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0JaWYgKE5DSChjaCkgPT0gNSkgewotCSAgICBpbnQgaiwgbl9pZnM7Ci0JICAgIGFzZGxfc2VxICppZnM7CisgICAgICAgIGlmIChOQ0goY2gpID09IDUpIHsKKyAgICAgICAgICAgIGludCBqLCBuX2lmczsKKyAgICAgICAgICAgIGFzZGxfc2VxICppZnM7CiAKLQkgICAgY2ggPSBDSElMRChjaCwgNCk7Ci0JICAgIG5faWZzID0gY291bnRfbGlzdF9pZnMoY2gpOworICAgICAgICAgICAgY2ggPSBDSElMRChjaCwgNCk7CisgICAgICAgICAgICBuX2lmcyA9IGNvdW50X2xpc3RfaWZzKGNoKTsKICAgICAgICAgICAgIGlmIChuX2lmcyA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotCSAgICBpZnMgPSBhc2RsX3NlcV9uZXcobl9pZnMsIGMtPmNfYXJlbmEpOwotCSAgICBpZiAoIWlmcykKLQkJcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBpZnMgPSBhc2RsX3NlcV9uZXcobl9pZnMsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFpZnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLQkgICAgZm9yIChqID0gMDsgaiA8IG5faWZzOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuX2lmczsgaisrKSB7CiAgICAgICAgICAgICBSRVEoY2gsIGxpc3RfaXRlcik7Ci0JCSAgICBjaCA9IENISUxEKGNoLCAwKTsKLQkJICAgIFJFUShjaCwgbGlzdF9pZik7CisgICAgICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOworICAgICAgICAgICAgICAgICAgICBSRVEoY2gsIGxpc3RfaWYpOwogCi0gICAgCQlhc2RsX3NlcV9TRVQoaWZzLCBqLCBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDEpKSk7Ci0gICAgCQlpZiAoTkNIKGNoKSA9PSAzKQotCSAgICAJICAgIGNoID0gQ0hJTEQoY2gsIDIpOwotCSAgICAgICAgfQotCSAgICAgICAgLyogb24gZXhpdCwgbXVzdCBndWFyYW50ZWUgdGhhdCBjaCBpcyBhIGxpc3RfZm9yICovCi0JICAgICAgICBpZiAoVFlQRShjaCkgPT0gbGlzdF9pdGVyKQotCQkgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOworICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChpZnMsIGosIGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMSkpKTsKKyAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBjaCA9IENISUxEKGNoLCAyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogb24gZXhpdCwgbXVzdCBndWFyYW50ZWUgdGhhdCBjaCBpcyBhIGxpc3RfZm9yICovCisgICAgICAgICAgICAgICAgaWYgKFRZUEUoY2gpID09IGxpc3RfaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOwogICAgICAgICAgICAgbGMtPmlmcyA9IGlmczsKLQkgICAgfQotCSAgICBhc2RsX3NlcV9TRVQobGlzdGNvbXBzLCBpLCBsYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc2RsX3NlcV9TRVQobGlzdGNvbXBzLCBpLCBsYyk7CiAgICAgfQogCiAgICAgcmV0dXJuIExpc3RDb21wKGVsdCwgbGlzdGNvbXBzLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CkBAIC0xMTYxLDM0ICsxMTg3LDM0IEBACiBzdGF0aWMgaW50CiBjb3VudF9nZW5fZm9ycyhjb25zdCBub2RlICpuKQogewotCWludCBuX2ZvcnMgPSAwOwotCW5vZGUgKmNoID0gQ0hJTEQobiwgMSk7CisgICAgICAgIGludCBuX2ZvcnMgPSAwOworICAgICAgICBub2RlICpjaCA9IENISUxEKG4sIDEpOwogCiAgY291bnRfZ2VuX2ZvcjoKLQluX2ZvcnMrKzsKLQlSRVEoY2gsIGdlbl9mb3IpOwotCWlmIChOQ0goY2gpID09IDUpCi0JCWNoID0gQ0hJTEQoY2gsIDQpOwotCWVsc2UKLQkJcmV0dXJuIG5fZm9yczsKKyAgICAgICAgbl9mb3JzKys7CisgICAgICAgIFJFUShjaCwgZ2VuX2Zvcik7CisgICAgICAgIGlmIChOQ0goY2gpID09IDUpCisgICAgICAgICAgICAgICAgY2ggPSBDSElMRChjaCwgNCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbl9mb3JzOwogIGNvdW50X2dlbl9pdGVyOgotCVJFUShjaCwgZ2VuX2l0ZXIpOwotCWNoID0gQ0hJTEQoY2gsIDApOwotCWlmIChUWVBFKGNoKSA9PSBnZW5fZm9yKQotCQlnb3RvIGNvdW50X2dlbl9mb3I7Ci0JZWxzZSBpZiAoVFlQRShjaCkgPT0gZ2VuX2lmKSB7Ci0JCWlmIChOQ0goY2gpID09IDMpIHsKLQkJCWNoID0gQ0hJTEQoY2gsIDIpOwotCQkJZ290byBjb3VudF9nZW5faXRlcjsKLQkJfQotCQllbHNlCi0JCSAgICByZXR1cm4gbl9mb3JzOwotCX0KKyAgICAgICAgUkVRKGNoLCBnZW5faXRlcik7CisgICAgICAgIGNoID0gQ0hJTEQoY2gsIDApOworICAgICAgICBpZiAoVFlQRShjaCkgPT0gZ2VuX2ZvcikKKyAgICAgICAgICAgICAgICBnb3RvIGNvdW50X2dlbl9mb3I7CisgICAgICAgIGVsc2UgaWYgKFRZUEUoY2gpID09IGdlbl9pZikgeworICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjb3VudF9nZW5faXRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbl9mb3JzOworICAgICAgICB9CiAKLQkvKiBTaG91bGQgbmV2ZXIgYmUgcmVhY2hlZCAqLwotCVB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLQkJCSJsb2dpYyBlcnJvciBpbiBjb3VudF9nZW5fZm9ycyIpOwotCXJldHVybiAtMTsKKyAgICAgICAgLyogU2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQgKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImxvZ2ljIGVycm9yIGluIGNvdW50X2dlbl9mb3JzIik7CisgICAgICAgIHJldHVybiAtMTsKIH0KIAogLyogQ291bnQgdGhlIG51bWJlciBvZiAnaWYnIHN0YXRlbWVudHMgaW4gYSBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KQEAgLTExOTksMTkgKzEyMjUsMTkgQEAKIHN0YXRpYyBpbnQKIGNvdW50X2dlbl9pZnMoY29uc3Qgbm9kZSAqbikKIHsKLQlpbnQgbl9pZnMgPSAwOworICAgICAgICBpbnQgbl9pZnMgPSAwOwogCi0Jd2hpbGUgKDEpIHsKLQkJUkVRKG4sIGdlbl9pdGVyKTsKLQkJaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IGdlbl9mb3IpCi0JCQlyZXR1cm4gbl9pZnM7Ci0JCW4gPSBDSElMRChuLCAwKTsKLQkJUkVRKG4sIGdlbl9pZik7Ci0JCW5faWZzKys7Ci0JCWlmIChOQ0gobikgPT0gMikKLQkJCXJldHVybiBuX2lmczsKLQkJbiA9IENISUxEKG4sIDIpOwotCX0KKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBSRVEobiwgZ2VuX2l0ZXIpOworICAgICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBnZW5fZm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5faWZzOworICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKKyAgICAgICAgICAgICAgICBSRVEobiwgZ2VuX2lmKTsKKyAgICAgICAgICAgICAgICBuX2lmcysrOworICAgICAgICAgICAgICAgIGlmIChOQ0gobikgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuX2lmczsKKyAgICAgICAgICAgICAgICBuID0gQ0hJTEQobiwgMik7CisgICAgICAgIH0KIH0KIAogLyogVE9ETyhqaHlsdG9uKTogQ29tYmluZSB3aXRoIGxpc3QgY29tcHJlaGVuc2lvbiBjb2RlPyAqLwpAQCAtMTIxOSw3ICsxMjQ1LDcgQEAKIGFzdF9mb3JfZ2VuZXhwKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7CiAgICAgLyogdGVzdGxpc3RfZ2V4cDogdGVzdCAoIGdlbl9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApCi0gICAgICAgYXJndW1lbnQ6IFt0ZXN0ICc9J10gdGVzdCBbZ2VuX2Zvcl0JICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdCAqLworICAgICAgIGFyZ3VtZW50OiBbdGVzdCAnPSddIHRlc3QgW2dlbl9mb3JdICAgICAgICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdCAqLwogICAgIGV4cHJfdHkgZWx0OwogICAgIGFzZGxfc2VxICpnZW5leHBzOwogICAgIGludCBpLCBuX2ZvcnM7CkBAIC0xMjQ1LDE3ICsxMjcxLDIxIEBACiAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgZ2U7CiAgICAgICAgIGFzZGxfc2VxICp0OwogICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CisgICAgICAgIG5vZGUgKmZvcl9jaDsKICAgICAgICAgCiAgICAgICAgIFJFUShjaCwgZ2VuX2Zvcik7CiAgICAgICAgIAotICAgICAgICB0ID0gYXN0X2Zvcl9leHBybGlzdChjLCBDSElMRChjaCwgMSksIFN0b3JlKTsKKyAgICAgICAgZm9yX2NoID0gQ0hJTEQoY2gsIDEpOworICAgICAgICB0ID0gYXN0X2Zvcl9leHBybGlzdChjLCBmb3JfY2gsIFN0b3JlKTsKICAgICAgICAgaWYgKCF0KQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDMpKTsKICAgICAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgaWYgKGFzZGxfc2VxX0xFTih0KSA9PSAxKQorICAgICAgICAvKiBDaGVjayB0aGUgIyBvZiBjaGlsZHJlbiByYXRoZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHQsIHNpbmNlCisgICAgICAgICAgICh4IGZvciB4LCBpbiAuLi4pIGhhcyAxIGVsZW1lbnQgaW4gdCwgYnV0IHN0aWxsIHJlcXVpcmVzIGEgVHVwbGUuICovCisgICAgICAgIGlmIChOQ0goZm9yX2NoKSA9PSAxKQogICAgICAgICAgICAgZ2UgPSBjb21wcmVoZW5zaW9uKChleHByX3R5KWFzZGxfc2VxX0dFVCh0LCAwKSwgZXhwcmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgZWxzZQpAQCAtMTMxMiw1NyArMTM0Miw1NyBAQAogICAgIAogICAgIHN3aXRjaCAoVFlQRShjaCkpIHsKICAgICBjYXNlIE5BTUU6Ci0JLyogQWxsIG5hbWVzIHN0YXJ0IGluIExvYWQgY29udGV4dCwgYnV0IG1heSBsYXRlciBiZQotCSAgIGNoYW5nZWQuICovCi0JcmV0dXJuIE5hbWUoTkVXX0lERU5USUZJRVIoY2gpLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIC8qIEFsbCBuYW1lcyBzdGFydCBpbiBMb2FkIGNvbnRleHQsIGJ1dCBtYXkgbGF0ZXIgYmUKKyAgICAgICAgICAgY2hhbmdlZC4gKi8KKyAgICAgICAgcmV0dXJuIE5hbWUoTkVXX0lERU5USUZJRVIoY2gpLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgY2FzZSBTVFJJTkc6IHsKLQlQeU9iamVjdCAqc3RyID0gcGFyc2VzdHJwbHVzKGMsIG4pOwotCWlmICghc3RyKQotCSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlPYmplY3QgKnN0ciA9IHBhcnNlc3RycGx1cyhjLCBuKTsKKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotCVB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKTsKLQlyZXR1cm4gU3RyKHN0ciwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgIHJldHVybiBTdHIoc3RyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgTlVNQkVSOiB7Ci0JUHlPYmplY3QgKnB5bnVtID0gcGFyc2VudW1iZXIoU1RSKGNoKSk7Ci0JaWYgKCFweW51bSkKLQkgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5T2JqZWN0ICpweW51bSA9IHBhcnNlbnVtYmVyKFNUUihjaCkpOworICAgICAgICBpZiAoIXB5bnVtKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLQlQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHB5bnVtKTsKLQlyZXR1cm4gTnVtKHB5bnVtLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgcHludW0pOworICAgICAgICByZXR1cm4gTnVtKHB5bnVtLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgRE9UOgogICAgIAkvKiBFbGxpcHNpcyAqLwogCXJldHVybiBFbGxpcHNpcyhMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgY2FzZSBMUEFSOiAvKiBzb21lIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbnMgKi8KLQljaCA9IENISUxEKG4sIDEpOwotCQotCWlmIChUWVBFKGNoKSA9PSBSUEFSKQotCSAgICByZXR1cm4gVHVwbGUoTlVMTCwgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwotCQotCWlmIChUWVBFKGNoKSA9PSB5aWVsZF9leHByKQotCSAgICByZXR1cm4gYXN0X2Zvcl9leHByKGMsIGNoKTsKLQkKLQlpZiAoKE5DSChjaCkgPiAxKSAmJiAoVFlQRShDSElMRChjaCwgMSkpID09IGdlbl9mb3IpKQotCSAgICByZXR1cm4gYXN0X2Zvcl9nZW5leHAoYywgY2gpOwotCQotCXJldHVybiBhc3RfZm9yX3Rlc3RsaXN0X2dleHAoYywgY2gpOworICAgICAgICBjaCA9IENISUxEKG4sIDEpOworICAgICAgICAKKyAgICAgICAgaWYgKFRZUEUoY2gpID09IFJQQVIpCisgICAgICAgICAgICByZXR1cm4gVHVwbGUoTlVMTCwgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAKKyAgICAgICAgaWYgKFRZUEUoY2gpID09IHlpZWxkX2V4cHIpCisgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9leHByKGMsIGNoKTsKKyAgICAgICAgCisgICAgICAgIGlmICgoTkNIKGNoKSA+IDEpICYmIChUWVBFKENISUxEKGNoLCAxKSkgPT0gZ2VuX2ZvcikpCisgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9nZW5leHAoYywgY2gpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFzdF9mb3JfdGVzdGxpc3RfZ2V4cChjLCBjaCk7CiAgICAgY2FzZSBMU1FCOiAvKiBsaXN0IChvciBsaXN0IGNvbXByZWhlbnNpb24pICovCi0JY2ggPSBDSElMRChuLCAxKTsKLQkKLQlpZiAoVFlQRShjaCkgPT0gUlNRQikKLQkgICAgcmV0dXJuIExpc3QoTlVMTCwgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwotCQotCVJFUShjaCwgbGlzdG1ha2VyKTsKLQlpZiAoTkNIKGNoKSA9PSAxIHx8IFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBDT01NQSkgewotCSAgICBhc2RsX3NlcSAqZWx0cyA9IHNlcV9mb3JfdGVzdGxpc3QoYywgY2gpOwotCSAgICBpZiAoIWVsdHMpCi0JCXJldHVybiBOVUxMOworICAgICAgICBjaCA9IENISUxEKG4sIDEpOworICAgICAgICAKKyAgICAgICAgaWYgKFRZUEUoY2gpID09IFJTUUIpCisgICAgICAgICAgICByZXR1cm4gTGlzdChOVUxMLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIAorICAgICAgICBSRVEoY2gsIGxpc3RtYWtlcik7CisgICAgICAgIGlmIChOQ0goY2gpID09IDEgfHwgVFlQRShDSElMRChjaCwgMSkpID09IENPTU1BKSB7CisgICAgICAgICAgICBhc2RsX3NlcSAqZWx0cyA9IHNlcV9mb3JfdGVzdGxpc3QoYywgY2gpOworICAgICAgICAgICAgaWYgKCFlbHRzKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0JICAgIHJldHVybiBMaXN0KGVsdHMsIExvYWQsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKLQl9Ci0JZWxzZQotCSAgICByZXR1cm4gYXN0X2Zvcl9saXN0Y29tcChjLCBjaCk7CisgICAgICAgICAgICByZXR1cm4gTGlzdChlbHRzLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfbGlzdGNvbXAoYywgY2gpOwogICAgIGNhc2UgTEJSQUNFOiB7CiAJLyogZGljdHNldG1ha2VyOiB0ZXN0ICc6JyB0ZXN0ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddIHwKIAkgKiAgICAgICAgICAgICAgIHRlc3QgKCcsJyB0ZXN0KSogWycsJ10gICovCkBAIC0xNDE1LDggKzE0NDUsOCBAQAogICAgICAgICB9CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0JUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLCAidW5oYW5kbGVkIGF0b20gJWQiLCBUWVBFKGNoKSk7Ci0JcmV0dXJuIE5VTEw7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwgInVuaGFuZGxlZCBhdG9tICVkIiwgVFlQRShjaCkpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiB9CiAKQEAgLTE0NDAsMzEgKzE0NzAsMzEgQEAKICAgICAgICAgaWYgKCFzdGVwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAKLQlyZXR1cm4gSW5kZXgoc3RlcCwgYy0+Y19hcmVuYSk7CisgICAgICAgIHJldHVybiBJbmRleChzdGVwLCBjLT5jX2FyZW5hKTsKICAgICB9CiAKICAgICBpZiAoVFlQRShjaCkgPT0gdGVzdCkgewotCWxvd2VyID0gYXN0X2Zvcl9leHByKGMsIGNoKTsKKyAgICAgICAgbG93ZXIgPSBhc3RfZm9yX2V4cHIoYywgY2gpOwogICAgICAgICBpZiAoIWxvd2VyKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogSWYgdGhlcmUncyBhbiB1cHBlciBib3VuZCBpdCdzIGluIHRoZSBzZWNvbmQgb3IgdGhpcmQgcG9zaXRpb24uICovCiAgICAgaWYgKFRZUEUoY2gpID09IENPTE9OKSB7Ci0JaWYgKE5DSChuKSA+IDEpIHsKLQkgICAgbm9kZSAqbjIgPSBDSElMRChuLCAxKTsKKyAgICAgICAgaWYgKE5DSChuKSA+IDEpIHsKKyAgICAgICAgICAgIG5vZGUgKm4yID0gQ0hJTEQobiwgMSk7CiAKLQkgICAgaWYgKFRZUEUobjIpID09IHRlc3QpIHsKLQkJdXBwZXIgPSBhc3RfZm9yX2V4cHIoYywgbjIpOworICAgICAgICAgICAgaWYgKFRZUEUobjIpID09IHRlc3QpIHsKKyAgICAgICAgICAgICAgICB1cHBlciA9IGFzdF9mb3JfZXhwcihjLCBuMik7CiAgICAgICAgICAgICAgICAgaWYgKCF1cHBlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0JfQorICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChOQ0gobikgPiAyKSB7Ci0Jbm9kZSAqbjIgPSBDSElMRChuLCAyKTsKKyAgICAgICAgbm9kZSAqbjIgPSBDSElMRChuLCAyKTsKIAotCWlmIChUWVBFKG4yKSA9PSB0ZXN0KSB7Ci0JICAgIHVwcGVyID0gYXN0X2Zvcl9leHByKGMsIG4yKTsKKyAgICAgICAgaWYgKFRZUEUobjIpID09IHRlc3QpIHsKKyAgICAgICAgICAgIHVwcGVyID0gYXN0X2Zvcl9leHByKGMsIG4yKTsKICAgICAgICAgICAgIGlmICghdXBwZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTE0OTUsMTMgKzE1MjUsMTMgQEAKIHN0YXRpYyBleHByX3R5CiBhc3RfZm9yX2Jpbm9wKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7Ci0JLyogTXVzdCBhY2NvdW50IGZvciBhIHNlcXVlbmNlIG9mIGV4cHJlc3Npb25zLgotCSAgIEhvdyBzaG91bGQgQSBvcCBCIG9wIEMgYnkgcmVwcmVzZW50ZWQ/ICAKLQkgICBCaW5PcChCaW5PcChBLCBvcCwgQiksIG9wLCBDKS4KLQkqLworICAgICAgICAvKiBNdXN0IGFjY291bnQgZm9yIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnMuCisgICAgICAgICAgIEhvdyBzaG91bGQgQSBvcCBCIG9wIEMgYnkgcmVwcmVzZW50ZWQ/ICAKKyAgICAgICAgICAgQmluT3AoQmluT3AoQSwgb3AsIEIpLCBvcCwgQykuCisgICAgICAgICovCiAKLQlpbnQgaSwgbm9wczsKLQlleHByX3R5IGV4cHIxLCBleHByMiwgcmVzdWx0OworICAgICAgICBpbnQgaSwgbm9wczsKKyAgICAgICAgZXhwcl90eSBleHByMSwgZXhwcjIsIHJlc3VsdDsKICAgICAgICAgb3BlcmF0b3JfdHkgbmV3b3BlcmF0b3I7CiAKICAgICAgICAgZXhwcjEgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMCkpOwpAQCAtMTUxNiwxNyArMTU0NiwxNyBAQAogICAgICAgICBpZiAoIW5ld29wZXJhdG9yKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLQlyZXN1bHQgPSBCaW5PcChleHByMSwgbmV3b3BlcmF0b3IsIGV4cHIyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwKKyAgICAgICAgcmVzdWx0ID0gQmluT3AoZXhwcjEsIG5ld29wZXJhdG9yLCBleHByMiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpOwotCWlmICghcmVzdWx0KQorICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0Jbm9wcyA9IChOQ0gobikgLSAxKSAvIDI7Ci0JZm9yIChpID0gMTsgaSA8IG5vcHM7IGkrKykgewotCQlleHByX3R5IHRtcF9yZXN1bHQsIHRtcDsKLQkJY29uc3Qgbm9kZSogbmV4dF9vcGVyID0gQ0hJTEQobiwgaSAqIDIgKyAxKTsKKyAgICAgICAgbm9wcyA9IChOQ0gobikgLSAxKSAvIDI7CisgICAgICAgIGZvciAoaSA9IDE7IGkgPCBub3BzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBleHByX3R5IHRtcF9yZXN1bHQsIHRtcDsKKyAgICAgICAgICAgICAgICBjb25zdCBub2RlKiBuZXh0X29wZXIgPSBDSElMRChuLCBpICogMiArIDEpOwogCi0JCW5ld29wZXJhdG9yID0gZ2V0X29wZXJhdG9yKG5leHRfb3Blcik7CisgICAgICAgICAgICAgICAgbmV3b3BlcmF0b3IgPSBnZXRfb3BlcmF0b3IobmV4dF9vcGVyKTsKICAgICAgICAgICAgICAgICBpZiAoIW5ld29wZXJhdG9yKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTUzNSwxMyArMTU2NSwxMyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICAgICAgICAgIHRtcF9yZXN1bHQgPSBCaW5PcChyZXN1bHQsIG5ld29wZXJhdG9yLCB0bXAsIAotCQkJCSAgIExJTkVOTyhuZXh0X29wZXIpLCBuZXh0X29wZXItPm5fY29sX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKG5leHRfb3BlciksIG5leHRfb3Blci0+bl9jb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKLQkJaWYgKCF0bXApIAotCQkJcmV0dXJuIE5VTEw7Ci0JCXJlc3VsdCA9IHRtcF9yZXN1bHQ7Ci0JfQotCXJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgaWYgKCF0bXApIAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdG1wX3Jlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgZXhwcl90eQpAQCAtMTY4OCw4ICsxNzE4LDggQEAKICAgICAgICAgdG1wID0gYXN0X2Zvcl90cmFpbGVyKGMsIGNoLCBlKTsKICAgICAgICAgaWYgKCF0bXApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQl0bXAtPmxpbmVubyA9IGUtPmxpbmVubzsKLQl0bXAtPmNvbF9vZmZzZXQgPSBlLT5jb2xfb2Zmc2V0OworICAgICAgICB0bXAtPmxpbmVubyA9IGUtPmxpbmVubzsKKyAgICAgICAgdG1wLT5jb2xfb2Zmc2V0ID0gZS0+Y29sX29mZnNldDsKICAgICAgICAgZSA9IHRtcDsKICAgICB9CiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgTkNIKG4pIC0gMSkpID09IGZhY3RvcikgewpAQCAtMTc0Nyw4ICsxNzc3LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9sYW1iZGVmKGMsIENISUxEKG4sIDApKTsKICAgICAgICAgICAgIGVsc2UgaWYgKE5DSChuKSA+IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfaWZleHByKGMsIG4pOwotCSAgICAvKiBGYWxsdGhyb3VnaCAqLwotCWNhc2Ugb3JfdGVzdDoKKyAgICAgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2Ugb3JfdGVzdDoKICAgICAgICAgY2FzZSBhbmRfdGVzdDoKICAgICAgICAgICAgIGlmIChOQ0gobikgPT0gMSkgewogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKQEAgLTE3ODksNyArMTgxOSw3IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CiAgICAgICAgICAgICAgICAgYXNkbF9pbnRfc2VxICpvcHM7Ci0JCWFzZGxfc2VxICpjbXBzOworICAgICAgICAgICAgICAgIGFzZGxfc2VxICpjbXBzOwogICAgICAgICAgICAgICAgIG9wcyA9IGFzZGxfaW50X3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFvcHMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTgwMywxMiArMTgzMywxMiBAQAogICAgICAgICAgICAgICAgICAgICBuZXdvcGVyYXRvciA9IGFzdF9mb3JfY29tcF9vcChDSElMRChuLCBpKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3b3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCQkgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpICsgMSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCQkgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKG9wcywgaSAvIDIsIG5ld29wZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGNtcHMsIGkgLyAyLCBleHByZXNzaW9uKTsKQEAgLTE4MTYsNyArMTg0Niw3IEBACiAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAwKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCQl9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGFyZShleHByZXNzaW9uLCBvcHMsIGNtcHMsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwpAQCAtMTgzOSwyMCArMTg2OSwyMCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfYmlub3AoYywgbik7CiAgICAgICAgIGNhc2UgeWllbGRfZXhwcjogewotCSAgICBleHByX3R5IGV4cCA9IE5VTEw7Ci0JICAgIGlmIChOQ0gobikgPT0gMikgewotCQlleHAgPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIENISUxEKG4sIDEpKTsKLQkJaWYgKCFleHApCi0JCSAgICByZXR1cm4gTlVMTDsKLQkgICAgfQotCSAgICByZXR1cm4gWWllbGQoZXhwLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Ci0JfQorICAgICAgICAgICAgZXhwcl90eSBleHAgPSBOVUxMOworICAgICAgICAgICAgaWYgKE5DSChuKSA9PSAyKSB7CisgICAgICAgICAgICAgICAgZXhwID0gYXN0X2Zvcl90ZXN0bGlzdChjLCBDSElMRChuLCAxKSk7CisgICAgICAgICAgICAgICAgaWYgKCFleHApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFlpZWxkKGV4cCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICB9CiAgICAgICAgIGNhc2UgZmFjdG9yOgogICAgICAgICAgICAgaWYgKE5DSChuKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIGdvdG8gbG9vcDsKICAgICAgICAgICAgIH0KLQkgICAgcmV0dXJuIGFzdF9mb3JfZmFjdG9yKGMsIG4pOworICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfZmFjdG9yKGMsIG4pOwogICAgICAgICBjYXNlIHBvd2VyOgogICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfcG93ZXIoYywgbik7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xODY5LDcgKzE4OTksNyBAQAogICAgIC8qCiAgICAgICBhcmdsaXN0OiAoYXJndW1lbnQgJywnKSogKGFyZ3VtZW50IFsnLCddfCAnKicgdGVzdCBbJywnICcqKicgdGVzdF0KICAgICAgICAgICAgICAgIHwgJyoqJyB0ZXN0KQotICAgICAgYXJndW1lbnQ6IFt0ZXN0ICc9J10gdGVzdCBbZ2VuX2Zvcl0JICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdAorICAgICAgYXJndW1lbnQ6IFt0ZXN0ICc9J10gdGVzdCBbZ2VuX2Zvcl0gICAgICAgICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdAogICAgICovCiAKICAgICBpbnQgaSwgbmFyZ3MsIG5rZXl3b3JkcywgbmdlbnM7CkBAIC0xODgzLDIwICsxOTEzLDIwIEBACiAgICAgbmtleXdvcmRzID0gMDsKICAgICBuZ2VucyA9IDA7CiAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSsrKSB7Ci0Jbm9kZSAqY2ggPSBDSElMRChuLCBpKTsKLQlpZiAoVFlQRShjaCkgPT0gYXJndW1lbnQpIHsKLQkgICAgaWYgKE5DSChjaCkgPT0gMSkKLQkJbmFyZ3MrKzsKLQkgICAgZWxzZSBpZiAoVFlQRShDSElMRChjaCwgMSkpID09IGdlbl9mb3IpCi0JCW5nZW5zKys7CisgICAgICAgIG5vZGUgKmNoID0gQ0hJTEQobiwgaSk7CisgICAgICAgIGlmIChUWVBFKGNoKSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgaWYgKE5DSChjaCkgPT0gMSkKKyAgICAgICAgICAgICAgICBuYXJncysrOworICAgICAgICAgICAgZWxzZSBpZiAoVFlQRShDSElMRChjaCwgMSkpID09IGdlbl9mb3IpCisgICAgICAgICAgICAgICAgbmdlbnMrKzsKICAgICAgICAgICAgIGVsc2UKLQkJbmtleXdvcmRzKys7Ci0JfQorICAgICAgICAgICAgICAgIG5rZXl3b3JkcysrOworICAgICAgICB9CiAgICAgfQogICAgIGlmIChuZ2VucyA+IDEgfHwgKG5nZW5zICYmIChuYXJncyB8fCBua2V5d29yZHMpKSkgewogICAgICAgICBhc3RfZXJyb3IobiwgIkdlbmVyYXRvciBleHByZXNzaW9uIG11c3QgYmUgcGFyZW50aGVzaXplZCAiCi0JCSAgImlmIG5vdCBzb2xlIGFyZ3VtZW50Iik7Ci0JcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAiaWYgbm90IHNvbGUgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKG5hcmdzICsgbmtleXdvcmRzICsgbmdlbnMgPiAyNTUpIHsKQEAgLTE5MTMsMzIgKzE5NDMsMzIgQEAKICAgICBuYXJncyA9IDA7CiAgICAgbmtleXdvcmRzID0gMDsKICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpKyspIHsKLQlub2RlICpjaCA9IENISUxEKG4sIGkpOwotCWlmIChUWVBFKGNoKSA9PSBhcmd1bWVudCkgewotCSAgICBleHByX3R5IGU7Ci0JICAgIGlmIChOQ0goY2gpID09IDEpIHsKLQkJaWYgKG5rZXl3b3JkcykgewotCQkgICAgYXN0X2Vycm9yKENISUxEKGNoLCAwKSwKLQkJCSAgICAgICJub24ta2V5d29yZCBhcmcgYWZ0ZXIga2V5d29yZCBhcmciKTsKLQkJICAgIHJldHVybiBOVUxMOwotCQl9Ci0JCWUgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDApKTsKKyAgICAgICAgbm9kZSAqY2ggPSBDSElMRChuLCBpKTsKKyAgICAgICAgaWYgKFRZUEUoY2gpID09IGFyZ3VtZW50KSB7CisgICAgICAgICAgICBleHByX3R5IGU7CisgICAgICAgICAgICBpZiAoTkNIKGNoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKG5rZXl3b3JkcykgeworICAgICAgICAgICAgICAgICAgICBhc3RfZXJyb3IoQ0hJTEQoY2gsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1rZXl3b3JkIGFyZyBhZnRlciBrZXl3b3JkIGFyZyIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZSA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMCkpOwogICAgICAgICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JCWFzZGxfc2VxX1NFVChhcmdzLCBuYXJncysrLCBlKTsKLQkgICAgfSAgCi0JICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBnZW5fZm9yKSB7Ci0gICAgICAgIAllID0gYXN0X2Zvcl9nZW5leHAoYywgY2gpOworICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChhcmdzLCBuYXJncysrLCBlKTsKKyAgICAgICAgICAgIH0gIAorICAgICAgICAgICAgZWxzZSBpZiAoVFlQRShDSElMRChjaCwgMSkpID09IGdlbl9mb3IpIHsKKyAgICAgICAgICAgICAgICBlID0gYXN0X2Zvcl9nZW5leHAoYywgY2gpOwogICAgICAgICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JCWFzZGxfc2VxX1NFVChhcmdzLCBuYXJncysrLCBlKTsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoYXJncywgbmFyZ3MrKywgZSk7CiAgICAgICAgICAgICB9Ci0JICAgIGVsc2UgewotCQlrZXl3b3JkX3R5IGt3OwotCQlpZGVudGlmaWVyIGtleTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGtleXdvcmRfdHkga3c7CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciBrZXk7CiAKLQkJLyogQ0hJTEQoY2gsIDApIGlzIHRlc3QsIGJ1dCBtdXN0IGJlIGFuIGlkZW50aWZpZXI/ICovIAotCQllID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAwKSk7CisgICAgICAgICAgICAgICAgLyogQ0hJTEQoY2gsIDApIGlzIHRlc3QsIGJ1dCBtdXN0IGJlIGFuIGlkZW50aWZpZXI/ICovIAorICAgICAgICAgICAgICAgIGUgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDApKTsKICAgICAgICAgICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIC8qIGYobGFtYmRhIHg6IHhbMF0gPSAzKSBlbmRzIHVwIGdldHRpbmcgcGFyc2VkIHdpdGgKQEAgLTE5NTMsMjQgKzE5ODMsMjQgQEAKICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihDSElMRChjaCwgMCksICJrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24iKTsKICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KLQkJa2V5ID0gZS0+di5OYW1lLmlkOwotCQllID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAyKSk7CisgICAgICAgICAgICAgICAga2V5ID0gZS0+di5OYW1lLmlkOworICAgICAgICAgICAgICAgIGUgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDIpKTsKICAgICAgICAgICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCQlrdyA9IGtleXdvcmQoa2V5LCBlLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgICAgICBrdyA9IGtleXdvcmQoa2V5LCBlLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIWt3KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQkJYXNkbF9zZXFfU0VUKGtleXdvcmRzLCBua2V5d29yZHMrKywga3cpOwotCSAgICB9Ci0JfQotCWVsc2UgaWYgKFRZUEUoY2gpID09IFNUQVIpIHsKLQkgICAgdmFyYXJnID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIGkrMSkpOwotCSAgICBpKys7Ci0JfQotCWVsc2UgaWYgKFRZUEUoY2gpID09IERPVUJMRVNUQVIpIHsKLQkgICAga3dhcmcgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgaSsxKSk7Ci0JICAgIGkrKzsKLQl9CisgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGtleXdvcmRzLCBua2V5d29yZHMrKywga3cpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFRZUEUoY2gpID09IFNUQVIpIHsKKyAgICAgICAgICAgIHZhcmFyZyA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpKzEpKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChUWVBFKGNoKSA9PSBET1VCTEVTVEFSKSB7CisgICAgICAgICAgICBrd2FyZyA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpKzEpKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBDYWxsKGZ1bmMsIGFyZ3MsIGtleXdvcmRzLCB2YXJhcmcsIGt3YXJnLCBmdW5jLT5saW5lbm8sIGZ1bmMtPmNvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwpAQCAtMTk5NCwxMiArMjAyNCwxMiBAQAogICAgICAgICAgICAgICAgVFlQRShuKSA9PSB0ZXN0bGlzdDEpOwogICAgIH0KICAgICBpZiAoTkNIKG4pID09IDEpCi0JcmV0dXJuIGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAwKSk7CisgICAgICAgIHJldHVybiBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMCkpOwogICAgIGVsc2UgewogICAgICAgICBhc2RsX3NlcSAqdG1wID0gc2VxX2Zvcl90ZXN0bGlzdChjLCBuKTsKICAgICAgICAgaWYgKCF0bXApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQlyZXR1cm4gVHVwbGUodG1wLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIHJldHVybiBUdXBsZSh0bXAsIExvYWQsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiB9CiAKQEAgLTIwMTAsNyArMjA0MCw3IEBACiAgICAgLyogYXJndW1lbnQ6IHRlc3QgWyBnZW5fZm9yIF0gKi8KICAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZXN0bGlzdF9nZXhwIHx8IFRZUEUobikgPT0gYXJndW1lbnQpOwogICAgIGlmIChOQ0gobikgPiAxICYmIFRZUEUoQ0hJTEQobiwgMSkpID09IGdlbl9mb3IpCi0JcmV0dXJuIGFzdF9mb3JfZ2VuZXhwKGMsIG4pOworICAgICAgICByZXR1cm4gYXN0X2Zvcl9nZW5leHAoYywgbik7CiAgICAgcmV0dXJuIGFzdF9mb3JfdGVzdGxpc3QoYywgbik7CiB9CiAKQEAgLTIwNDQsMjMgKzIwNzQsMjMgQEAKICAgICAgICAgICAgICAgICB8ICgnPScgKHlpZWxkX2V4cHJ8dGVzdGxpc3QpKSopCiAgICAgICAgdGVzdGxpc3Q6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10KICAgICAgICBhdWdhc3NpZ246ICcrPScgfCAnLT0nIHwgJyo9JyB8ICcvPScgfCAnJT0nIHwgJyY9JyB8ICd8PScgfCAnXj0nCi0JICAgICAgICB8ICc8PD0nIHwgJz4+PScgfCAnKio9JyB8ICcvLz0nCisgICAgICAgICAgICAgICAgfCAnPDw9JyB8ICc+Pj0nIHwgJyoqPScgfCAnLy89JwogICAgICAgIHRlc3Q6IC4uLiBoZXJlIHN0YXJ0cyB0aGUgb3BlcmF0b3IgcHJlY2VuZGVuY2UgZGFuY2UKICAgICAgKi8KIAogICAgIGlmIChOQ0gobikgPT0gMSkgewotCWV4cHJfdHkgZSA9IGFzdF9mb3JfdGVzdGxpc3QoYywgQ0hJTEQobiwgMCkpOworICAgICAgICBleHByX3R5IGUgPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIENISUxEKG4sIDApKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gRXhwcihlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIHJldHVybiBFeHByKGUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgZWxzZSBpZiAoVFlQRShDSElMRChuLCAxKSkgPT0gYXVnYXNzaWduKSB7CiAgICAgICAgIGV4cHJfdHkgZXhwcjEsIGV4cHIyOwogICAgICAgICBvcGVyYXRvcl90eSBuZXdvcGVyYXRvcjsKLQlub2RlICpjaCA9IENISUxEKG4sIDApOworICAgICAgICBub2RlICpjaCA9IENISUxEKG4sIDApOwogCi0JZXhwcjEgPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIGNoKTsKKyAgICAgICAgZXhwcjEgPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIGNoKTsKICAgICAgICAgaWYgKCFleHByMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAvKiBUT0RPKG5hcyk6IFJlbW92ZSBkdXBsaWNhdGVkIGVycm9yIGNoZWNrcyAoc2V0X2NvbnRleHQgZG9lcyBpdCkgKi8KQEAgLTIwODksMTMgKzIxMTksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzc2lnbm1lbnQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotCXNldF9jb250ZXh0KGV4cHIxLCBTdG9yZSwgY2gpOworICAgICAgICBzZXRfY29udGV4dChleHByMSwgU3RvcmUsIGNoKTsKIAotCWNoID0gQ0hJTEQobiwgMik7Ci0JaWYgKFRZUEUoY2gpID09IHRlc3RsaXN0KQotCSAgICBleHByMiA9IGFzdF9mb3JfdGVzdGxpc3QoYywgY2gpOwotCWVsc2UKLQkgICAgZXhwcjIgPSBhc3RfZm9yX2V4cHIoYywgY2gpOworICAgICAgICBjaCA9IENISUxEKG4sIDIpOworICAgICAgICBpZiAoVFlQRShjaCkgPT0gdGVzdGxpc3QpCisgICAgICAgICAgICBleHByMiA9IGFzdF9mb3JfdGVzdGxpc3QoYywgY2gpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHByMiA9IGFzdF9mb3JfZXhwcihjLCBjaCk7CiAgICAgICAgIGlmICghZXhwcjIpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjEwMyw0NSArMjEzMyw0NSBAQAogICAgICAgICBpZiAoIW5ld29wZXJhdG9yKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gQXVnQXNzaWduKGV4cHIxLCBuZXdvcGVyYXRvciwgZXhwcjIsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgcmV0dXJuIEF1Z0Fzc2lnbihleHByMSwgbmV3b3BlcmF0b3IsIGV4cHIyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGVsc2UgewotCWludCBpOwotCWFzZGxfc2VxICp0YXJnZXRzOwotCW5vZGUgKnZhbHVlOworICAgICAgICBpbnQgaTsKKyAgICAgICAgYXNkbF9zZXEgKnRhcmdldHM7CisgICAgICAgIG5vZGUgKnZhbHVlOwogICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CiAKLQkvKiBhIG5vcm1hbCBhc3NpZ25tZW50ICovCi0JUkVRKENISUxEKG4sIDEpLCBFUVVBTCk7Ci0JdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKLQlpZiAoIXRhcmdldHMpCi0JICAgIHJldHVybiBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBOQ0gobikgLSAyOyBpICs9IDIpIHsKLQkgICAgZXhwcl90eSBlOwotCSAgICBub2RlICpjaCA9IENISUxEKG4sIGkpOwotCSAgICBpZiAoVFlQRShjaCkgPT0geWllbGRfZXhwcikgewotCQlhc3RfZXJyb3IoY2gsICJhc3NpZ25tZW50IHRvIHlpZWxkIGV4cHJlc3Npb24gbm90IHBvc3NpYmxlIik7Ci0JCXJldHVybiBOVUxMOwotCSAgICB9Ci0JICAgIGUgPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIGNoKTsKKyAgICAgICAgLyogYSBub3JtYWwgYXNzaWdubWVudCAqLworICAgICAgICBSRVEoQ0hJTEQobiwgMSksIEVRVUFMKTsKKyAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgaWYgKCF0YXJnZXRzKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobikgLSAyOyBpICs9IDIpIHsKKyAgICAgICAgICAgIGV4cHJfdHkgZTsKKyAgICAgICAgICAgIG5vZGUgKmNoID0gQ0hJTEQobiwgaSk7CisgICAgICAgICAgICBpZiAoVFlQRShjaCkgPT0geWllbGRfZXhwcikgeworICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjaCwgImFzc2lnbm1lbnQgdG8geWllbGQgZXhwcmVzc2lvbiBub3QgcG9zc2libGUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGUgPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIGNoKTsKIAotCSAgICAvKiBzZXQgY29udGV4dCB0byBhc3NpZ24gKi8KLQkgICAgaWYgKCFlKSAKLQkgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIC8qIHNldCBjb250ZXh0IHRvIGFzc2lnbiAqLworICAgICAgICAgICAgaWYgKCFlKSAKKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLQkgICAgaWYgKCFzZXRfY29udGV4dChlLCBTdG9yZSwgQ0hJTEQobiwgaSkpKQotCSAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgaWYgKCFzZXRfY29udGV4dChlLCBTdG9yZSwgQ0hJTEQobiwgaSkpKQorICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotCSAgICBhc2RsX3NlcV9TRVQodGFyZ2V0cywgaSAvIDIsIGUpOwotCX0KLQl2YWx1ZSA9IENISUxEKG4sIE5DSChuKSAtIDEpOwotCWlmIChUWVBFKHZhbHVlKSA9PSB0ZXN0bGlzdCkKLQkgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfdGVzdGxpc3QoYywgdmFsdWUpOwotCWVsc2UKLQkgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCB2YWx1ZSk7Ci0JaWYgKCFleHByZXNzaW9uKQotCSAgICByZXR1cm4gTlVMTDsKLQlyZXR1cm4gQXNzaWduKHRhcmdldHMsIGV4cHJlc3Npb24sIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGFzZGxfc2VxX1NFVCh0YXJnZXRzLCBpIC8gMiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSBDSElMRChuLCBOQ0gobikgLSAxKTsKKyAgICAgICAgaWYgKFRZUEUodmFsdWUpID09IHRlc3RsaXN0KQorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfdGVzdGxpc3QoYywgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBBc3NpZ24odGFyZ2V0cywgZXhwcmVzc2lvbiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KIH0KIApAQCAtMjE1OCwxOSArMjE4OCwxOSBAQAogCiAgICAgUkVRKG4sIHByaW50X3N0bXQpOwogICAgIGlmIChOQ0gobikgPj0gMiAmJiBUWVBFKENISUxEKG4sIDEpKSA9PSBSSUdIVFNISUZUKSB7Ci0JZGVzdCA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAyKSk7CisgICAgICAgIGRlc3QgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMikpOwogICAgICAgICBpZiAoIWRlc3QpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQkgICAgc3RhcnQgPSA0OworICAgICAgICAgICAgc3RhcnQgPSA0OwogICAgIH0KICAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEgLSBzdGFydCkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKLSAgICAJcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gMDsgaSA8IE5DSChuKTsgaSArPSAyLCArK2opIHsKICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpKSk7CiAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIAlhc2RsX3NlcV9TRVQoc2VxLCBqLCBleHByZXNzaW9uKTsKKyAgICAgICAgYXNkbF9zZXFfU0VUKHNlcSwgaiwgZXhwcmVzc2lvbik7CiAgICAgfQogICAgIG5sID0gKFRZUEUoQ0hJTEQobiwgTkNIKG4pIC0gMSkpID09IENPTU1BKSA/IGZhbHNlIDogdHJ1ZTsKICAgICByZXR1cm4gUHJpbnQoZGVzdCwgc2VxLCBubCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwpAQCAtMjE4NywxNCArMjIxNywxNCBAQAogCiAgICAgc2VxID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQotCXJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKLQllID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIGkpKTsKLQlpZiAoIWUpCi0JICAgIHJldHVybiBOVUxMOwotCWFzZGxfc2VxX1NFVChzZXEsIGkgLyAyLCBlKTsKLQlpZiAoY29udGV4dCAmJiAhc2V0X2NvbnRleHQoZSwgY29udGV4dCwgQ0hJTEQobiwgaSkpKQotCSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZSA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpKSk7CisgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBhc2RsX3NlcV9TRVQoc2VxLCBpIC8gMiwgZSk7CisgICAgICAgIGlmIChjb250ZXh0ICYmICFzZXRfY29udGV4dChlLCBjb250ZXh0LCBDSElMRChuLCBpKSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIHNlcTsKIH0KQEAgLTIyMzYsOSArMjI2Niw5IEBACiAgICAgICAgIGNhc2UgY29udGludWVfc3RtdDoKICAgICAgICAgICAgIHJldHVybiBDb250aW51ZShMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGNhc2UgeWllbGRfc3RtdDogeyAvKiB3aWxsIHJlZHVjZSB0byB5aWVsZF9leHByICovCi0JICAgIGV4cHJfdHkgZXhwID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAwKSk7Ci0JICAgIGlmICghZXhwKQotCQlyZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGV4cHJfdHkgZXhwID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAwKSk7CisgICAgICAgICAgICBpZiAoIWV4cCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHJldHVybiBFeHByKGV4cCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgcmV0dXJuX3N0bXQ6CkBAIC0yMzExLDEwICsyMzQxLDYgQEAKICAgICAgICAgY2FzZSBpbXBvcnRfYXNfbmFtZToKICAgICAgICAgICAgIHN0ciA9IE5VTEw7CiAgICAgICAgICAgICBpZiAoTkNIKG4pID09IDMpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wKFNUUihDSElMRChuLCAxKSksICJhcyIpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKG4sICJtdXN0IHVzZSAnYXMnIGluIGltcG9ydCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RyID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFsaWFzKE5FV19JREVOVElGSUVSKENISUxEKG4sIDApKSwgc3RyLCBjLT5jX2FyZW5hKTsKQEAgLTIzMjcsMTAgKzIzNTMsNiBAQAogICAgICAgICAgICAgICAgIGFsaWFzX3R5IGEgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgMCkpOwogICAgICAgICAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNtcChTVFIoQ0hJTEQobiwgMSkpLCAiYXMiKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihuLCAibXVzdCB1c2UgJ2FzJyBpbiBpbXBvcnQiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFzc2VydCghYS0+YXNuYW1lKTsKICAgICAgICAgICAgICAgICBhLT5hc25hbWUgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAyKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CkBAIC0yMzY1LDEzICsyMzg3LDEzIEBACiAgICAgICAgICAgICAgICAgLS1zOwogICAgICAgICAgICAgICAgICpzID0gJ1wwJzsKICAgICAgICAgICAgICAgICBQeVN0cmluZ19JbnRlcm5JblBsYWNlKCZzdHIpOwotCQlQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBhbGlhcyhzdHIsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU1RBUjoKLQkgICAgc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiKiIpOwotCSAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICBzdHIgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCIqIik7CisgICAgICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CiAgICAgICAgICAgICByZXR1cm4gYWxpYXMoc3RyLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTI0MDMsNjkgKzI0MjUsNjkgQEAKICAgICBuID0gQ0hJTEQobiwgMCk7CiAgICAgaWYgKFRZUEUobikgPT0gaW1wb3J0X25hbWUpIHsKICAgICAgICAgbiA9IENISUxEKG4sIDEpOwotCVJFUShuLCBkb3R0ZWRfYXNfbmFtZXMpOwotCWFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7Ci0JaWYgKCFhbGlhc2VzKQotCQlyZXR1cm4gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKKyAgICAgICAgUkVRKG4sIGRvdHRlZF9hc19uYW1lcyk7CisgICAgICAgIGFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGlmICghYWxpYXNlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7CiAgICAgICAgICAgICBhbGlhc190eSBpbXBvcnRfYWxpYXMgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgaSkpOwogICAgICAgICAgICAgaWYgKCFpbXBvcnRfYWxpYXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JICAgIGFzZGxfc2VxX1NFVChhbGlhc2VzLCBpIC8gMiwgaW1wb3J0X2FsaWFzKTsKKyAgICAgICAgICAgIGFzZGxfc2VxX1NFVChhbGlhc2VzLCBpIC8gMiwgaW1wb3J0X2FsaWFzKTsKICAgICAgICAgfQotCXJldHVybiBJbXBvcnQoYWxpYXNlcywgbGluZW5vLCBjb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgcmV0dXJuIEltcG9ydChhbGlhc2VzLCBsaW5lbm8sIGNvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBlbHNlIGlmIChUWVBFKG4pID09IGltcG9ydF9mcm9tKSB7CiAgICAgICAgIGludCBuX2NoaWxkcmVuOwotCWludCBpZHgsIG5kb3RzID0gMDsKLQlhbGlhc190eSBtb2QgPSBOVUxMOwotCWlkZW50aWZpZXIgbW9kbmFtZTsKLQkKKyAgICAgICAgaW50IGlkeCwgbmRvdHMgPSAwOworICAgICAgICBhbGlhc190eSBtb2QgPSBOVUxMOworICAgICAgICBpZGVudGlmaWVyIG1vZG5hbWU7CisgICAgICAgIAogICAgICAgIC8qIENvdW50IHRoZSBudW1iZXIgb2YgZG90cyAoZm9yIHJlbGF0aXZlIGltcG9ydHMpIGFuZCBjaGVjayBmb3IgdGhlCiAgICAgICAgICAgb3B0aW9uYWwgbW9kdWxlIG5hbWUgKi8KLQlmb3IgKGlkeCA9IDE7IGlkeCA8IE5DSChuKTsgaWR4KyspIHsKLQkgICAgaWYgKFRZUEUoQ0hJTEQobiwgaWR4KSkgPT0gZG90dGVkX25hbWUpIHsKLQkgICAgCW1vZCA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBDSElMRChuLCBpZHgpKTsKLQkgICAgCWlkeCsrOwotCSAgICAJYnJlYWs7Ci0JICAgIH0gZWxzZSBpZiAoVFlQRShDSElMRChuLCBpZHgpKSAhPSBET1QpIHsKLQkgICAgICAgIGJyZWFrOwotCSAgICB9Ci0JICAgIG5kb3RzKys7Ci0JfQotCWlkeCsrOyAvKiBza2lwIG92ZXIgdGhlICdpbXBvcnQnIGtleXdvcmQgKi8KKyAgICAgICAgZm9yIChpZHggPSAxOyBpZHggPCBOQ0gobik7IGlkeCsrKSB7CisgICAgICAgICAgICBpZiAoVFlQRShDSElMRChuLCBpZHgpKSA9PSBkb3R0ZWRfbmFtZSkgeworICAgICAgICAgICAgICAgIG1vZCA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBDSElMRChuLCBpZHgpKTsKKyAgICAgICAgICAgICAgICBpZHgrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoVFlQRShDSElMRChuLCBpZHgpKSAhPSBET1QpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5kb3RzKys7CisgICAgICAgIH0KKyAgICAgICAgaWR4Kys7IC8qIHNraXAgb3ZlciB0aGUgJ2ltcG9ydCcga2V5d29yZCAqLwogICAgICAgICBzd2l0Y2ggKFRZUEUoQ0hJTEQobiwgaWR4KSkpIHsKICAgICAgICAgY2FzZSBTVEFSOgogICAgICAgICAgICAgLyogZnJvbSAuLi4gaW1wb3J0ICogKi8KLQkgICAgbiA9IENISUxEKG4sIGlkeCk7Ci0JICAgIG5fY2hpbGRyZW4gPSAxOwotCSAgICBpZiAobmRvdHMpIHsKLQkgICAgICAgIGFzdF9lcnJvcihuLCAiJ2ltcG9ydCAqJyBub3QgYWxsb3dlZCB3aXRoICdmcm9tIC4nIik7Ci0JICAgICAgICByZXR1cm4gTlVMTDsKLQkgICAgfQotCSAgICBicmVhazsKLQljYXNlIExQQVI6Ci0JICAgIC8qIGZyb20gLi4uIGltcG9ydCAoeCwgeSwgeikgKi8KLQkgICAgbiA9IENISUxEKG4sIGlkeCArIDEpOwotCSAgICBuX2NoaWxkcmVuID0gTkNIKG4pOwotCSAgICBicmVhazsKLQljYXNlIGltcG9ydF9hc19uYW1lczoKLQkgICAgLyogZnJvbSAuLi4gaW1wb3J0IHgsIHksIHogKi8KLQkgICAgbiA9IENISUxEKG4sIGlkeCk7Ci0JICAgIG5fY2hpbGRyZW4gPSBOQ0gobik7CisgICAgICAgICAgICBuID0gQ0hJTEQobiwgaWR4KTsKKyAgICAgICAgICAgIG5fY2hpbGRyZW4gPSAxOworICAgICAgICAgICAgaWYgKG5kb3RzKSB7CisgICAgICAgICAgICAgICAgYXN0X2Vycm9yKG4sICInaW1wb3J0IConIG5vdCBhbGxvd2VkIHdpdGggJ2Zyb20gLiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExQQVI6CisgICAgICAgICAgICAvKiBmcm9tIC4uLiBpbXBvcnQgKHgsIHksIHopICovCisgICAgICAgICAgICBuID0gQ0hJTEQobiwgaWR4ICsgMSk7CisgICAgICAgICAgICBuX2NoaWxkcmVuID0gTkNIKG4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgaW1wb3J0X2FzX25hbWVzOgorICAgICAgICAgICAgLyogZnJvbSAuLi4gaW1wb3J0IHgsIHksIHogKi8KKyAgICAgICAgICAgIG4gPSBDSElMRChuLCBpZHgpOworICAgICAgICAgICAgbl9jaGlsZHJlbiA9IE5DSChuKTsKICAgICAgICAgICAgIGlmIChuX2NoaWxkcmVuICUgMiA9PSAwKSB7CiAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKG4sICJ0cmFpbGluZyBjb21tYSBub3QgYWxsb3dlZCB3aXRob3V0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHN1cnJvdW5kaW5nIHBhcmVudGhlc2VzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGFzdF9lcnJvcihuLCAiVW5leHBlY3RlZCBub2RlLXR5cGUgaW4gZnJvbS1pbXBvcnQiKTsKLQkgICAgcmV0dXJuIE5VTEw7Ci0JfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3RfZXJyb3IobiwgIlVuZXhwZWN0ZWQgbm9kZS10eXBlIGluIGZyb20taW1wb3J0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogCi0JYWxpYXNlcyA9IGFzZGxfc2VxX25ldygobl9jaGlsZHJlbiArIDEpIC8gMiwgYy0+Y19hcmVuYSk7Ci0JaWYgKCFhbGlhc2VzKQorICAgICAgICBhbGlhc2VzID0gYXNkbF9zZXFfbmV3KChuX2NoaWxkcmVuICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgaWYgKCFhbGlhc2VzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgLyogaGFuZGxlICJmcm9tIC4uLiBpbXBvcnQgKiIgc3BlY2lhbCBiL2MgdGhlcmUncyBubyBjaGlsZHJlbiAqLwpAQCAtMjQ3MywxNCArMjQ5NSwxNCBAQAogICAgICAgICAgICAgYWxpYXNfdHkgaW1wb3J0X2FsaWFzID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIG4pOwogICAgICAgICAgICAgaWYgKCFpbXBvcnRfYWxpYXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JICAgICAgICBhc2RsX3NlcV9TRVQoYWxpYXNlcywgMCwgaW1wb3J0X2FsaWFzKTsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoYWxpYXNlcywgMCwgaW1wb3J0X2FsaWFzKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAJICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7CiAgICAgICAgICAgICAgICAgYWxpYXNfdHkgaW1wb3J0X2FsaWFzID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGkpKTsKICAgICAgICAgICAgICAgICBpZiAoIWltcG9ydF9hbGlhcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFsaWFzZXMsIGkgLyAyLCBpbXBvcnRfYWxpYXMpOworICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoYWxpYXNlcywgaSAvIDIsIGltcG9ydF9hbGlhcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1vZCAhPSBOVUxMKQpAQCAtMjUwNywxMiArMjUyOSwxMiBAQAogICAgIFJFUShuLCBnbG9iYWxfc3RtdCk7CiAgICAgcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXMpCi0gICAgCXJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKLQluYW1lID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgaSkpOwotCWlmICghbmFtZSkKLQkgICAgcmV0dXJuIE5VTEw7Ci0JYXNkbF9zZXFfU0VUKHMsIGkgLyAyLCBuYW1lKTsKKyAgICAgICAgbmFtZSA9IE5FV19JREVOVElGSUVSKENISUxEKG4sIGkpKTsKKyAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGFzZGxfc2VxX1NFVChzLCBpIC8gMiwgbmFtZSk7CiAgICAgfQogICAgIHJldHVybiBHbG9iYWwocywgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogfQpAQCAtMjUyNiw3ICsyNTQ4LDcgQEAKICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDEpKTsKICAgICAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIEFzc2VydChleHByZXNzaW9uLCBOVUxMLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIHJldHVybiBBc3NlcnQoZXhwcmVzc2lvbiwgTlVMTCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBlbHNlIGlmIChOQ0gobikgPT0gNCkgewogICAgICAgICBleHByX3R5IGV4cHIxLCBleHByMjsKQEAgLTI1MzgsNyArMjU2MCw3IEBACiAgICAgICAgIGlmICghZXhwcjIpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIAotCXJldHVybiBBc3NlcnQoZXhwcjEsIGV4cHIyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIHJldHVybiBBc3NlcnQoZXhwcjEsIGV4cHIyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgImltcHJvcGVyIG51bWJlciBvZiBwYXJ0cyB0byAnYXNzZXJ0JyBzdGF0ZW1lbnQ6ICVkIiwKQEAgLTI1NjAsNTMgKzI1ODIsNTMgQEAKICAgICB0b3RhbCA9IG51bV9zdG10cyhuKTsKICAgICBzZXEgPSBhc2RsX3NlcV9uZXcodG90YWwsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQotICAgIAlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IHNpbXBsZV9zdG10KSB7Ci0JbiA9IENISUxEKG4sIDApOwotCS8qIHNpbXBsZV9zdG10IGFsd2F5cyBlbmRzIHdpdGggYSBORVdMSU5FLAotCSAgIGFuZCBtYXkgaGF2ZSBhIHRyYWlsaW5nIFNFTUkgCi0JKi8KLQllbmQgPSBOQ0gobikgLSAxOwotCWlmIChUWVBFKENISUxEKG4sIGVuZCAtIDEpKSA9PSBTRU1JKQotCSAgICBlbmQtLTsKKyAgICAgICAgbiA9IENISUxEKG4sIDApOworICAgICAgICAvKiBzaW1wbGVfc3RtdCBhbHdheXMgZW5kcyB3aXRoIGEgTkVXTElORSwKKyAgICAgICAgICAgYW5kIG1heSBoYXZlIGEgdHJhaWxpbmcgU0VNSSAKKyAgICAgICAgKi8KKyAgICAgICAgZW5kID0gTkNIKG4pIC0gMTsKKyAgICAgICAgaWYgKFRZUEUoQ0hJTEQobiwgZW5kIC0gMSkpID09IFNFTUkpCisgICAgICAgICAgICBlbmQtLTsKICAgICAgICAgLyogbG9vcCBieSAyIHRvIHNraXAgc2VtaS1jb2xvbnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZW5kOyBpICs9IDIpIHsKLQkgICAgY2ggPSBDSElMRChuLCBpKTsKLQkgICAgcyA9IGFzdF9mb3Jfc3RtdChjLCBjaCk7Ci0JICAgIGlmICghcykKLQkJcmV0dXJuIE5VTEw7Ci0JICAgIGFzZGxfc2VxX1NFVChzZXEsIHBvcysrLCBzKTsKLQl9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbmQ7IGkgKz0gMikgeworICAgICAgICAgICAgY2ggPSBDSElMRChuLCBpKTsKKyAgICAgICAgICAgIHMgPSBhc3RfZm9yX3N0bXQoYywgY2gpOworICAgICAgICAgICAgaWYgKCFzKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgYXNkbF9zZXFfU0VUKHNlcSwgcG9zKyssIHMpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotCWZvciAoaSA9IDI7IGkgPCAoTkNIKG4pIC0gMSk7IGkrKykgewotCSAgICBjaCA9IENISUxEKG4sIGkpOwotCSAgICBSRVEoY2gsIHN0bXQpOwotCSAgICBudW0gPSBudW1fc3RtdHMoY2gpOwotCSAgICBpZiAobnVtID09IDEpIHsKLQkJLyogc21hbGxfc3RtdCBvciBjb21wb3VuZF9zdG10IHdpdGggb25seSBvbmUgY2hpbGQgKi8KLQkJcyA9IGFzdF9mb3Jfc3RtdChjLCBjaCk7Ci0JCWlmICghcykKLQkJICAgIHJldHVybiBOVUxMOwotCQlhc2RsX3NlcV9TRVQoc2VxLCBwb3MrKywgcyk7Ci0JICAgIH0KLQkgICAgZWxzZSB7Ci0JCWludCBqOwotCQljaCA9IENISUxEKGNoLCAwKTsKLQkJUkVRKGNoLCBzaW1wbGVfc3RtdCk7Ci0JCWZvciAoaiA9IDA7IGogPCBOQ0goY2gpOyBqICs9IDIpIHsKLQkJICAgIC8qIHN0YXRlbWVudCB0ZXJtaW5hdGVzIHdpdGggYSBzZW1pLWNvbG9uICc7JyAqLwotCQkgICAgaWYgKE5DSChDSElMRChjaCwgaikpID09IDApIHsKLQkJCWFzc2VydCgoaiArIDEpID09IE5DSChjaCkpOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBzID0gYXN0X2Zvcl9zdG10KGMsIENISUxEKGNoLCBqKSk7Ci0JCSAgICBpZiAoIXMpCi0JCQlyZXR1cm4gTlVMTDsKLQkJICAgIGFzZGxfc2VxX1NFVChzZXEsIHBvcysrLCBzKTsKLQkJfQotCSAgICB9Ci0JfQorICAgICAgICBmb3IgKGkgPSAyOyBpIDwgKE5DSChuKSAtIDEpOyBpKyspIHsKKyAgICAgICAgICAgIGNoID0gQ0hJTEQobiwgaSk7CisgICAgICAgICAgICBSRVEoY2gsIHN0bXQpOworICAgICAgICAgICAgbnVtID0gbnVtX3N0bXRzKGNoKTsKKyAgICAgICAgICAgIGlmIChudW0gPT0gMSkgeworICAgICAgICAgICAgICAgIC8qIHNtYWxsX3N0bXQgb3IgY29tcG91bmRfc3RtdCB3aXRoIG9ubHkgb25lIGNoaWxkICovCisgICAgICAgICAgICAgICAgcyA9IGFzdF9mb3Jfc3RtdChjLCBjaCk7CisgICAgICAgICAgICAgICAgaWYgKCFzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoc2VxLCBwb3MrKywgcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgajsKKyAgICAgICAgICAgICAgICBjaCA9IENISUxEKGNoLCAwKTsKKyAgICAgICAgICAgICAgICBSRVEoY2gsIHNpbXBsZV9zdG10KTsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTkNIKGNoKTsgaiArPSAyKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHN0YXRlbWVudCB0ZXJtaW5hdGVzIHdpdGggYSBzZW1pLWNvbG9uICc7JyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoTkNIKENISUxEKGNoLCBqKSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KChqICsgMSkgPT0gTkNIKGNoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzID0gYXN0X2Zvcl9zdG10KGMsIENISUxEKGNoLCBqKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoc2VxLCBwb3MrKywgcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIGFzc2VydChwb3MgPT0gc2VxLT5zaXplKTsKICAgICByZXR1cm4gc2VxOwpAQCAtMjYzMyw3ICsyNjU1LDcgQEAKICAgICAgICAgaWYgKCFzdWl0ZV9zZXEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIAotCXJldHVybiBJZihleHByZXNzaW9uLCBzdWl0ZV9zZXEsIE5VTEwsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgcmV0dXJuIElmKGV4cHJlc3Npb24sIHN1aXRlX3NlcSwgTlVMTCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KIAogICAgIHMgPSBTVFIoQ0hJTEQobiwgNCkpOwpAQCAtMjY1NSwyOCArMjY3NywyOCBAQAogICAgICAgICBpZiAoIXNlcTIpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotCXJldHVybiBJZihleHByZXNzaW9uLCBzZXExLCBzZXEyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIHJldHVybiBJZihleHByZXNzaW9uLCBzZXExLCBzZXEyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGVsc2UgaWYgKHNbMl0gPT0gJ2knKSB7Ci0JaW50IGksIG5fZWxpZiwgaGFzX2Vsc2UgPSAwOwotCWFzZGxfc2VxICpvcmVsc2UgPSBOVUxMOwotCW5fZWxpZiA9IE5DSChuKSAtIDQ7CisgICAgICAgIGludCBpLCBuX2VsaWYsIGhhc19lbHNlID0gMDsKKyAgICAgICAgYXNkbF9zZXEgKm9yZWxzZSA9IE5VTEw7CisgICAgICAgIG5fZWxpZiA9IE5DSChuKSAtIDQ7CiAgICAgICAgIC8qIG11c3QgcmVmZXJlbmNlIHRoZSBjaGlsZCBuX2VsaWYrMSBzaW5jZSAnZWxzZScgdG9rZW4gaXMgdGhpcmQsCiAgICAgICAgICAgIG5vdCBmb3VydGgsIGNoaWxkIGZyb20gdGhlIGVuZC4gKi8KLQlpZiAoVFlQRShDSElMRChuLCAobl9lbGlmICsgMSkpKSA9PSBOQU1FCi0JICAgICYmIFNUUihDSElMRChuLCAobl9lbGlmICsgMSkpKVsyXSA9PSAncycpIHsKLQkgICAgaGFzX2Vsc2UgPSAxOwotCSAgICBuX2VsaWYgLT0gMzsKLQl9Ci0Jbl9lbGlmIC89IDQ7CisgICAgICAgIGlmIChUWVBFKENISUxEKG4sIChuX2VsaWYgKyAxKSkpID09IE5BTUUKKyAgICAgICAgICAgICYmIFNUUihDSElMRChuLCAobl9lbGlmICsgMSkpKVsyXSA9PSAncycpIHsKKyAgICAgICAgICAgIGhhc19lbHNlID0gMTsKKyAgICAgICAgICAgIG5fZWxpZiAtPSAzOworICAgICAgICB9CisgICAgICAgIG5fZWxpZiAvPSA0OwogCi0JaWYgKGhhc19lbHNlKSB7CisgICAgICAgIGlmIChoYXNfZWxzZSkgewogICAgICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uOwogICAgICAgICAgICAgYXNkbF9zZXEgKnNlcTEsICpzZXEyOwogCi0JICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKLQkgICAgaWYgKCFvcmVsc2UpCi0JCXJldHVybiBOVUxMOworICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFvcmVsc2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIE5DSChuKSAtIDYpKTsKICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI2ODcsMjAgKzI3MDksMjAgQEAKICAgICAgICAgICAgIGlmICghc2VxMikKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotCSAgICBhc2RsX3NlcV9TRVQob3JlbHNlLCAwLCBJZihleHByZXNzaW9uLCBzZXExLCBzZXEyLCAKLQkJCQkgICAgICAgTElORU5PKENISUxEKG4sIE5DSChuKSAtIDYpKSwgQ0hJTEQobiwgTkNIKG4pIC0gNiktPm5fY29sX29mZnNldCwKKyAgICAgICAgICAgIGFzZGxfc2VxX1NFVChvcmVsc2UsIDAsIElmKGV4cHJlc3Npb24sIHNlcTEsIHNlcTIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKENISUxEKG4sIE5DSChuKSAtIDYpKSwgQ0hJTEQobiwgTkNIKG4pIC0gNiktPm5fY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpKTsKLQkgICAgLyogdGhlIGp1c3QtY3JlYXRlZCBvcmVsc2UgaGFuZGxlZCB0aGUgbGFzdCBlbGlmICovCi0JICAgIG5fZWxpZi0tOwotCX0KKyAgICAgICAgICAgIC8qIHRoZSBqdXN0LWNyZWF0ZWQgb3JlbHNlIGhhbmRsZWQgdGhlIGxhc3QgZWxpZiAqLworICAgICAgICAgICAgbl9lbGlmLS07CisgICAgICAgIH0KIAotCWZvciAoaSA9IDA7IGkgPCBuX2VsaWY7IGkrKykgewotCSAgICBpbnQgb2ZmID0gNSArIChuX2VsaWYgLSBpIC0gMSkgKiA0OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbl9lbGlmOyBpKyspIHsKKyAgICAgICAgICAgIGludCBvZmYgPSA1ICsgKG5fZWxpZiAtIGkgLSAxKSAqIDQ7CiAgICAgICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CiAgICAgICAgICAgICBhc2RsX3NlcSAqc3VpdGVfc2VxOwotCSAgICBhc2RsX3NlcSAqbmV3b2JqID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwotCSAgICBpZiAoIW5ld29iaikKLQkJcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBhc2RsX3NlcSAqbmV3b2JqID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFuZXdvYmopCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIG9mZikpOwogICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjcwOCwxNCArMjczMCwxNCBAQAogICAgICAgICAgICAgaWYgKCFzdWl0ZV9zZXEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLQkgICAgYXNkbF9zZXFfU0VUKG5ld29iaiwgMCwKLQkJCSBJZihleHByZXNzaW9uLCBzdWl0ZV9zZXEsIG9yZWxzZSwgCi0JCQkgICAgTElORU5PKENISUxEKG4sIG9mZikpLCBDSElMRChuLCBvZmYpLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpKTsKLQkgICAgb3JlbHNlID0gbmV3b2JqOwotCX0KLQlyZXR1cm4gSWYoYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDEpKSwKLQkJICBhc3RfZm9yX3N1aXRlKGMsIENISUxEKG4sIDMpKSwKLQkJICBvcmVsc2UsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGFzZGxfc2VxX1NFVChuZXdvYmosIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYoZXhwcmVzc2lvbiwgc3VpdGVfc2VxLCBvcmVsc2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhDSElMRChuLCBvZmYpKSwgQ0hJTEQobiwgb2ZmKS0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKSk7CisgICAgICAgICAgICBvcmVsc2UgPSBuZXdvYmo7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElmKGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAxKSksCisgICAgICAgICAgICAgICAgICBhc3RfZm9yX3N1aXRlKGMsIENISUxEKG4sIDMpKSwKKyAgICAgICAgICAgICAgICAgIG9yZWxzZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KIAogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTI3MzksNyArMjc2MSw3IEBACiAgICAgICAgIHN1aXRlX3NlcSA9IGFzdF9mb3Jfc3VpdGUoYywgQ0hJTEQobiwgMykpOwogICAgICAgICBpZiAoIXN1aXRlX3NlcSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCXJldHVybiBXaGlsZShleHByZXNzaW9uLCBzdWl0ZV9zZXEsIE5VTEwsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgcmV0dXJuIFdoaWxlKGV4cHJlc3Npb24sIHN1aXRlX3NlcSwgTlVMTCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBlbHNlIGlmIChOQ0gobikgPT0gNykgewogICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CkBAIC0yNzU1LDcgKzI3NzcsNyBAQAogICAgICAgICBpZiAoIXNlcTIpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotCXJldHVybiBXaGlsZShleHByZXNzaW9uLCBzZXExLCBzZXEyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIHJldHVybiBXaGlsZShleHByZXNzaW9uLCBzZXExLCBzZXEyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogCiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLApAQCAtMjc3NSw3ICsyNzk3LDcgQEAKICAgICBSRVEobiwgZm9yX3N0bXQpOwogCiAgICAgaWYgKE5DSChuKSA9PSA5KSB7Ci0Jc2VxID0gYXN0X2Zvcl9zdWl0ZShjLCBDSElMRChuLCA4KSk7CisgICAgICAgIHNlcSA9IGFzdF9mb3Jfc3VpdGUoYywgQ0hJTEQobiwgOCkpOwogICAgICAgICBpZiAoIXNlcSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI3ODcsOSArMjgwOSw5IEBACiAgICAgLyogQ2hlY2sgdGhlICMgb2YgY2hpbGRyZW4gcmF0aGVyIHRoYW4gdGhlIGxlbmd0aCBvZiBfdGFyZ2V0LCBzaW5jZQogICAgICAgIGZvciB4LCBpbiAuLi4gaGFzIDEgZWxlbWVudCBpbiBfdGFyZ2V0LCBidXQgc3RpbGwgcmVxdWlyZXMgYSBUdXBsZS4gKi8KICAgICBpZiAoTkNIKG5vZGVfdGFyZ2V0KSA9PSAxKQotCXRhcmdldCA9IChleHByX3R5KWFzZGxfc2VxX0dFVChfdGFyZ2V0LCAwKTsKKyAgICAgICAgdGFyZ2V0ID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKF90YXJnZXQsIDApOwogICAgIGVsc2UKLQl0YXJnZXQgPSBUdXBsZShfdGFyZ2V0LCBTdG9yZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICB0YXJnZXQgPSBUdXBsZShfdGFyZ2V0LCBTdG9yZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogCiAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfdGVzdGxpc3QoYywgQ0hJTEQobiwgMykpOwogICAgIGlmICghZXhwcmVzc2lvbikKQEAgLTI4MTQsNyArMjgzNiw3IEBACiAgICAgICAgIGlmICghc3VpdGVfc2VxKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gZXhjZXB0aGFuZGxlcihOVUxMLCBOVUxMLCBzdWl0ZV9zZXEsIExJTkVOTyhleGMpLAorICAgICAgICByZXR1cm4gZXhjZXB0aGFuZGxlcihOVUxMLCBOVUxMLCBzdWl0ZV9zZXEsIExJTkVOTyhleGMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGVsc2UgaWYgKE5DSChleGMpID09IDIpIHsKQEAgLTI4MjgsMTYgKzI4NTAsMTYgQEAKICAgICAgICAgaWYgKCFzdWl0ZV9zZXEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotCXJldHVybiBleGNlcHRoYW5kbGVyKGV4cHJlc3Npb24sIE5VTEwsIHN1aXRlX3NlcSwgTElORU5PKGV4YyksCisgICAgICAgIHJldHVybiBleGNlcHRoYW5kbGVyKGV4cHJlc3Npb24sIE5VTEwsIHN1aXRlX3NlcSwgTElORU5PKGV4YyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgZWxzZSBpZiAoTkNIKGV4YykgPT0gNCkgewogICAgICAgICBhc2RsX3NlcSAqc3VpdGVfc2VxOwogICAgICAgICBleHByX3R5IGV4cHJlc3Npb247Ci0JZXhwcl90eSBlID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGV4YywgMykpOwotCWlmICghZSkKKyAgICAgICAgZXhwcl90eSBlID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGV4YywgMykpOworICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQlpZiAoIXNldF9jb250ZXh0KGUsIFN0b3JlLCBDSElMRChleGMsIDMpKSkKKyAgICAgICAgaWYgKCFzZXRfY29udGV4dChlLCBTdG9yZSwgQ0hJTEQoZXhjLCAzKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChleGMsIDEpKTsKICAgICAgICAgaWYgKCFleHByZXNzaW9uKQpAQCAtMjg0Niw3ICsyODY4LDcgQEAKICAgICAgICAgaWYgKCFzdWl0ZV9zZXEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotCXJldHVybiBleGNlcHRoYW5kbGVyKGV4cHJlc3Npb24sIGUsIHN1aXRlX3NlcSwgTElORU5PKGV4YyksCisgICAgICAgIHJldHVybiBleGNlcHRoYW5kbGVyKGV4cHJlc3Npb24sIGUsIHN1aXRlX3NlcSwgTElORU5PKGV4YyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAKQEAgLTI5MDEsOCArMjkyMyw4IEBACiAgICAgfQogICAgIAogICAgIGlmIChuX2V4Y2VwdCA+IDApIHsKLQlpbnQgaTsKLQlzdG10X3R5IGV4Y2VwdF9zdDsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHN0bXRfdHkgZXhjZXB0X3N0OwogICAgICAgICAvKiBwcm9jZXNzIGV4Y2VwdCBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBhIHRyeSAuLi4gZXhjZXB0ICovCiAgICAgICAgIGFzZGxfc2VxICpoYW5kbGVycyA9IGFzZGxfc2VxX25ldyhuX2V4Y2VwdCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmIChoYW5kbGVycyA9PSBOVUxMKQpAQCAtMjkxNiwxNyArMjkzOCwxNyBAQAogICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGhhbmRsZXJzLCBpLCBlKTsKICAgICAgICAgfQogCi0JZXhjZXB0X3N0ID0gVHJ5RXhjZXB0KGJvZHksIGhhbmRsZXJzLCBvcmVsc2UsIExJTkVOTyhuKSwKKyAgICAgICAgZXhjZXB0X3N0ID0gVHJ5RXhjZXB0KGJvZHksIGhhbmRsZXJzLCBvcmVsc2UsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghZmluYWxseSkKLQkgICAgcmV0dXJuIGV4Y2VwdF9zdDsKKyAgICAgICAgICAgIHJldHVybiBleGNlcHRfc3Q7CiAKICAgICAgICAgLyogaWYgYSAnZmluYWxseScgaXMgcHJlc2VudCB0b28sIHdlIG5lc3QgdGhlIFRyeUV4Y2VwdCB3aXRoaW4gYQogICAgICAgICAgICBUcnlGaW5hbGx5IHRvIGVtdWxhdGUgdHJ5IC4uLiBleGNlcHQgLi4uIGZpbmFsbHkgKi8KLQlib2R5ID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwotCWlmIChib2R5ID09IE5VTEwpCi0JICAgIHJldHVybiBOVUxMOwotCWFzZGxfc2VxX1NFVChib2R5LCAwLCBleGNlcHRfc3QpOworICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOworICAgICAgICBpZiAoYm9keSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGFzZGxfc2VxX1NFVChib2R5LCAwLCBleGNlcHRfc3QpOwogICAgIH0KIAogICAgIC8qIG11c3QgYmUgYSB0cnkgLi4uIGZpbmFsbHkgKGV4Y2VwdCBjbGF1c2VzIGFyZSBpbiBib2R5LCBpZiBhbnkgZXhpc3QpICovCkBAIC0yOTM4LDEwICsyOTYwLDYgQEAKIGFzdF9mb3Jfd2l0aF92YXIoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKICAgICBSRVEobiwgd2l0aF92YXIpOwotICAgIGlmIChzdHJjbXAoU1RSKENISUxEKG4sIDApKSwgImFzIikgIT0gMCkgewotICAgICAgICBhc3RfZXJyb3IobiwgImV4cGVjdGVkIFwid2l0aCBbZXhwcl0gYXMgW3Zhcl1cIiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgcmV0dXJuIGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAxKSk7CiB9CiAKQEAgLTI5NjEsOSArMjk3OSw5IEBACiAgICAgICAgIGlmICghb3B0aW9uYWxfdmFycykgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLQlpZiAoIXNldF9jb250ZXh0KG9wdGlvbmFsX3ZhcnMsIFN0b3JlLCBuKSkgewotCSAgICByZXR1cm4gTlVMTDsKLQl9CisgICAgICAgIGlmICghc2V0X2NvbnRleHQob3B0aW9uYWxfdmFycywgU3RvcmUsIG4pKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBzdWl0ZV9pbmRleCA9IDQ7CiAgICAgfQogCkBAIC0yOTcyLDcgKzI5OTAsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIFdpdGgoY29udGV4dF9leHByLCBvcHRpb25hbF92YXJzLCBzdWl0ZV9zZXEsIExJTkVOTyhuKSwgCi0JCW4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICAgICAgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKIH0KIAogc3RhdGljIHN0bXRfdHkKQEAgLTI5ODQsMjMgKzMwMDIsMjMgQEAKICAgICBSRVEobiwgY2xhc3NkZWYpOwogCiAgICAgaWYgKCFzdHJjbXAoU1RSKENISUxEKG4sIDEpKSwgIk5vbmUiKSkgewotCSAgICBhc3RfZXJyb3IobiwgImFzc2lnbm1lbnQgdG8gTm9uZSIpOwotCSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGFzdF9lcnJvcihuLCAiYXNzaWdubWVudCB0byBOb25lIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpZiAoTkNIKG4pID09IDQpIHsKICAgICAgICAgcyA9IGFzdF9mb3Jfc3VpdGUoYywgQ0hJTEQobiwgMykpOwogICAgICAgICBpZiAoIXMpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQlyZXR1cm4gQ2xhc3NEZWYoTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMSkpLCBOVUxMLCBzLCBMSU5FTk8obiksCisgICAgICAgIHJldHVybiBDbGFzc0RlZihORVdfSURFTlRJRklFUihDSElMRChuLCAxKSksIE5VTEwsIHMsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIC8qIGNoZWNrIGZvciBlbXB0eSBiYXNlIGxpc3QgKi8KICAgICBpZiAoVFlQRShDSElMRChuLDMpKSA9PSBSUEFSKSB7Ci0JcyA9IGFzdF9mb3Jfc3VpdGUoYywgQ0hJTEQobiw1KSk7Ci0JaWYgKCFzKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gQ2xhc3NEZWYoTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMSkpLCBOVUxMLCBzLCBMSU5FTk8obiksCisgICAgICAgIHMgPSBhc3RfZm9yX3N1aXRlKGMsIENISUxEKG4sNSkpOworICAgICAgICBpZiAoIXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBDbGFzc0RlZihORVdfSURFTlRJRklFUihDSElMRChuLCAxKSksIE5VTEwsIHMsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogCkBAIC0zMDIwLDIwICszMDM4LDIwIEBACiBhc3RfZm9yX3N0bXQoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKICAgICBpZiAoVFlQRShuKSA9PSBzdG10KSB7Ci0JYXNzZXJ0KE5DSChuKSA9PSAxKTsKLQluID0gQ0hJTEQobiwgMCk7CisgICAgICAgIGFzc2VydChOQ0gobikgPT0gMSk7CisgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICB9CiAgICAgaWYgKFRZUEUobikgPT0gc2ltcGxlX3N0bXQpIHsKLQlhc3NlcnQobnVtX3N0bXRzKG4pID09IDEpOwotCW4gPSBDSElMRChuLCAwKTsKKyAgICAgICAgYXNzZXJ0KG51bV9zdG10cyhuKSA9PSAxKTsKKyAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgIH0KICAgICBpZiAoVFlQRShuKSA9PSBzbWFsbF9zdG10KSB7CiAJUkVRKG4sIHNtYWxsX3N0bXQpOwogCW4gPSBDSElMRChuLCAwKTsKIAkvKiBzbWFsbF9zdG10OiBleHByX3N0bXQgfCBwcmludF9zdG10ICB8IGRlbF9zdG10IHwgcGFzc19zdG10CiAJICAgICAgICAgICAgIHwgZmxvd19zdG10IHwgaW1wb3J0X3N0bXQgfCBnbG9iYWxfc3RtdCB8IGFzc2VydF9zdG10Ci0JKi8KLQlzd2l0Y2ggKFRZUEUobikpIHsKKyAgICAgICAgKi8KKyAgICAgICAgc3dpdGNoIChUWVBFKG4pKSB7CiAgICAgICAgICAgICBjYXNlIGV4cHJfc3RtdDoKICAgICAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9leHByX3N0bXQoYywgbik7CiAgICAgICAgICAgICBjYXNlIHByaW50X3N0bXQ6CkBAIC0zMDU5LDExICszMDc3LDExIEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBjb21wb3VuZF9zdG10OiBpZl9zdG10IHwgd2hpbGVfc3RtdCB8IGZvcl9zdG10IHwgdHJ5X3N0bXQKLQkgICAgICAgICAgICAgICAgfCBmdW5jZGVmIHwgY2xhc3NkZWYKLQkqLwotCW5vZGUgKmNoID0gQ0hJTEQobiwgMCk7Ci0JUkVRKG4sIGNvbXBvdW5kX3N0bXQpOwotCXN3aXRjaCAoVFlQRShjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZiB8IGNsYXNzZGVmCisgICAgICAgICovCisgICAgICAgIG5vZGUgKmNoID0gQ0hJTEQobiwgMCk7CisgICAgICAgIFJFUShuLCBjb21wb3VuZF9zdG10KTsKKyAgICAgICAgc3dpdGNoIChUWVBFKGNoKSkgewogICAgICAgICAgICAgY2FzZSBpZl9zdG10OgogICAgICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2lmX3N0bXQoYywgY2gpOwogICAgICAgICAgICAgY2FzZSB3aGlsZV9zdG10OgpAQCAtMzA4MywxNDQgKzMxMDEsMTQ0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmhhbmRsZWQgc21hbGxfc3RtdDogVFlQRT0lZCBOQ0g9JWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEUobiksIE5DSChuKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JfQorICAgICAgICB9CiAgICAgfQogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcGFyc2VudW1iZXIoY29uc3QgY2hhciAqcykKIHsKLQljb25zdCBjaGFyICplbmQ7Ci0JbG9uZyB4OwotCWRvdWJsZSBkeDsKKyAgICAgICAgY29uc3QgY2hhciAqZW5kOworICAgICAgICBsb25nIHg7CisgICAgICAgIGRvdWJsZSBkeDsKICNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCi0JUHlfY29tcGxleCBjOwotCWludCBpbWZsYWc7CisgICAgICAgIFB5X2NvbXBsZXggYzsKKyAgICAgICAgaW50IGltZmxhZzsKICNlbmRpZgogCi0JZXJybm8gPSAwOwotCWVuZCA9IHMgKyBzdHJsZW4ocykgLSAxOworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGVuZCA9IHMgKyBzdHJsZW4ocykgLSAxOwogI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKLQlpbWZsYWcgPSAqZW5kID09ICdqJyB8fCAqZW5kID09ICdKJzsKKyAgICAgICAgaW1mbGFnID0gKmVuZCA9PSAnaicgfHwgKmVuZCA9PSAnSic7CiAjZW5kaWYKLQlpZiAoKmVuZCA9PSAnbCcgfHwgKmVuZCA9PSAnTCcpCi0JCXJldHVybiBQeUxvbmdfRnJvbVN0cmluZygoY2hhciAqKXMsIChjaGFyICoqKTAsIDApOwotCWlmIChzWzBdID09ICcwJykgewotCQl4ID0gKGxvbmcpIFB5T1Nfc3RydG91bCgoY2hhciAqKXMsIChjaGFyICoqKSZlbmQsIDApOwotIAkJaWYgKHggPCAwICYmIGVycm5vID09IDApIHsKLQkgCQkJcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywKLQkJCQkJCQkgKGNoYXIgKiopMCwKLQkJCQkJCQkgMCk7Ci0JCX0KLQl9Ci0JZWxzZQotCQl4ID0gUHlPU19zdHJ0b2woKGNoYXIgKilzLCAoY2hhciAqKikmZW5kLCAwKTsKLQlpZiAoKmVuZCA9PSAnXDAnKSB7Ci0JCWlmIChlcnJubyAhPSAwKQotCQkJcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywgKGNoYXIgKiopMCwgMCk7Ci0JCXJldHVybiBQeUludF9Gcm9tTG9uZyh4KTsKLQl9Ci0JLyogWFhYIEh1Z2UgZmxvYXRzIG1heSBzaWxlbnRseSBmYWlsICovCisgICAgICAgIGlmICgqZW5kID09ICdsJyB8fCAqZW5kID09ICdMJykKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcoKGNoYXIgKilzLCAoY2hhciAqKikwLCAwKTsKKyAgICAgICAgaWYgKHNbMF0gPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgeCA9IChsb25nKSBQeU9TX3N0cnRvdWwoKGNoYXIgKilzLCAoY2hhciAqKikmZW5kLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoeCA8IDAgJiYgZXJybm8gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcoKGNoYXIgKilzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeCA9IFB5T1Nfc3RydG9sKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIGlmICgqZW5kID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXJybm8gIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZygoY2hhciAqKXMsIChjaGFyICoqKTAsIDApOworICAgICAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyh4KTsKKyAgICAgICAgfQorICAgICAgICAvKiBYWFggSHVnZSBmbG9hdHMgbWF5IHNpbGVudGx5IGZhaWwgKi8KICNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCi0JaWYgKGltZmxhZykgewotCQljLnJlYWwgPSAwLjsKLQkJUHlGUEVfU1RBUlRfUFJPVEVDVCgiYXRvZiIsIHJldHVybiAwKQotCQljLmltYWcgPSBQeU9TX2FzY2lpX2F0b2Yocyk7Ci0JCVB5RlBFX0VORF9QUk9URUNUKGMpCi0JCXJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGMpOwotCX0KLQllbHNlCisgICAgICAgIGlmIChpbWZsYWcpIHsKKyAgICAgICAgICAgICAgICBjLnJlYWwgPSAwLjsKKyAgICAgICAgICAgICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJhdG9mIiwgcmV0dXJuIDApCisgICAgICAgICAgICAgICAgYy5pbWFnID0gUHlPU19hc2NpaV9hdG9mKHMpOworICAgICAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKGMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQogI2VuZGlmCi0JewotCQlQeUZQRV9TVEFSVF9QUk9URUNUKCJhdG9mIiwgcmV0dXJuIDApCi0JCWR4ID0gUHlPU19hc2NpaV9hdG9mKHMpOwotCQlQeUZQRV9FTkRfUFJPVEVDVChkeCkKLQkJcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShkeCk7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiYXRvZiIsIHJldHVybiAwKQorICAgICAgICAgICAgICAgIGR4ID0gUHlPU19hc2NpaV9hdG9mKHMpOworICAgICAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKGR4KQorICAgICAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoZHgpOworICAgICAgICB9CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZWNvZGVfdXRmOChjb25zdCBjaGFyICoqc1B0ciwgY29uc3QgY2hhciAqZW5kLCBjaGFyKiBlbmNvZGluZykKIHsKICNpZm5kZWYgUHlfVVNJTkdfVU5JQ09ERQotCVB5X0ZhdGFsRXJyb3IoImRlY29kZV91dGY4IHNob3VsZCBub3QgYmUgY2FsbGVkIGluIHRoaXMgYnVpbGQuIik7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoImRlY29kZV91dGY4IHNob3VsZCBub3QgYmUgY2FsbGVkIGluIHRoaXMgYnVpbGQuIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogI2Vsc2UKLQlQeU9iamVjdCAqdSwgKnY7Ci0JY2hhciAqcywgKnQ7Ci0JdCA9IHMgPSAoY2hhciAqKSpzUHRyOwotCS8qIHdoaWxlIChzIDwgZW5kICYmICpzICE9ICdcXCcpIHMrKzsgKi8gLyogaW5lZmZpY2llbnQgZm9yIHUiLi4iICovCi0Jd2hpbGUgKHMgPCBlbmQgJiYgKCpzICYgMHg4MCkpIHMrKzsKLQkqc1B0ciA9IHM7Ci0JdSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHQsIHMgLSB0LCBOVUxMKTsKLQlpZiAodSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQl2ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh1LCBlbmNvZGluZywgTlVMTCk7Ci0JUHlfREVDUkVGKHUpOwotCXJldHVybiB2OworICAgICAgICBQeU9iamVjdCAqdSwgKnY7CisgICAgICAgIGNoYXIgKnMsICp0OworICAgICAgICB0ID0gcyA9IChjaGFyICopKnNQdHI7CisgICAgICAgIC8qIHdoaWxlIChzIDwgZW5kICYmICpzICE9ICdcXCcpIHMrKzsgKi8gLyogaW5lZmZpY2llbnQgZm9yIHUiLi4iICovCisgICAgICAgIHdoaWxlIChzIDwgZW5kICYmICgqcyAmIDB4ODApKSBzKys7CisgICAgICAgICpzUHRyID0gczsKKyAgICAgICAgdSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHQsIHMgLSB0LCBOVUxMKTsKKyAgICAgICAgaWYgKHUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgdiA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodSwgZW5jb2RpbmcsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgIHJldHVybiB2OwogI2VuZGlmCiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZWNvZGVfdW5pY29kZShjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuLCBpbnQgcmF3bW9kZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpCiB7Ci0JUHlPYmplY3QgKnYsICp1OwotCWNoYXIgKmJ1ZjsKLQljaGFyICpwOwotCWNvbnN0IGNoYXIgKmVuZDsKLQlpZiAoZW5jb2RpbmcgPT0gTlVMTCkgewotCSAgICAgCWJ1ZiA9IChjaGFyICopczsKLQkJdSA9IE5VTEw7Ci0JfSBlbHNlIGlmIChzdHJjbXAoZW5jb2RpbmcsICJpc28tODg1OS0xIikgPT0gMCkgewotCSAgICAgCWJ1ZiA9IChjaGFyICopczsKLQkJdSA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyogIlxYWCIgbWF5IGJlY29tZSAiXHUwMDVjXHVISExMIiAoMTIgYnl0ZXMpICovCi0JCXUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKU5VTEwsIGxlbiAqIDQpOwotCQlpZiAodSA9PSBOVUxMKQotCQkJcmV0dXJuIE5VTEw7Ci0JCXAgPSBidWYgPSBQeVN0cmluZ19Bc1N0cmluZyh1KTsKLQkJZW5kID0gcyArIGxlbjsKLQkJd2hpbGUgKHMgPCBlbmQpIHsKLQkJCWlmICgqcyA9PSAnXFwnKSB7Ci0JCQkJKnArKyA9ICpzKys7Ci0JCQkJaWYgKCpzICYgMHg4MCkgewotCQkJCQlzdHJjcHkocCwgInUwMDVjIik7Ci0JCQkJCXAgKz0gNTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoKnMgJiAweDgwKSB7IC8qIFhYWCBpbmVmZmljaWVudCAqLwotCQkJCVB5T2JqZWN0ICp3OwotCQkJCWNoYXIgKnI7Ci0JCQkJUHlfc3NpemVfdCBybiwgaTsKLQkJCQl3ID0gZGVjb2RlX3V0ZjgoJnMsIGVuZCwgInV0Zi0xNi1iZSIpOwotCQkJCWlmICh3ID09IE5VTEwpIHsKLQkJCQkJUHlfREVDUkVGKHUpOwotCQkJCQlyZXR1cm4gTlVMTDsKLQkJCQl9Ci0JCQkJciA9IFB5U3RyaW5nX0FzU3RyaW5nKHcpOwotCQkJCXJuID0gUHlTdHJpbmdfU2l6ZSh3KTsKLQkJCQlhc3NlcnQocm4gJSAyID09IDApOwotCQkJCWZvciAoaSA9IDA7IGkgPCBybjsgaSArPSAyKSB7Ci0JCQkJCXNwcmludGYocCwgIlxcdSUwMnglMDJ4IiwKLQkJCQkJCXJbaSArIDBdICYgMHhGRiwKLQkJCQkJCXJbaSArIDFdICYgMHhGRik7Ci0JCQkJCXAgKz0gNjsKLQkJCQl9Ci0JCQkJUHlfREVDUkVGKHcpOwotCQkJfSBlbHNlIHsKLQkJCQkqcCsrID0gKnMrKzsKLQkJCX0KLQkJfQotCQlsZW4gPSBwIC0gYnVmOwotCQlzID0gYnVmOwotCX0KLQlpZiAocmF3bW9kZSkKLQkJdiA9IFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlKHMsIGxlbiwgTlVMTCk7Ci0JZWxzZQotCQl2ID0gUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGUocywgbGVuLCBOVUxMKTsKLQlQeV9YREVDUkVGKHUpOwotCXJldHVybiB2OworICAgICAgICBQeU9iamVjdCAqdiwgKnU7CisgICAgICAgIGNoYXIgKmJ1ZjsKKyAgICAgICAgY2hhciAqcDsKKyAgICAgICAgY29uc3QgY2hhciAqZW5kOworICAgICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJ1ZiA9IChjaGFyICopczsKKyAgICAgICAgICAgICAgICB1ID0gTlVMTDsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZW5jb2RpbmcsICJpc28tODg1OS0xIikgPT0gMCkgeworICAgICAgICAgICAgICAgIGJ1ZiA9IChjaGFyICopczsKKyAgICAgICAgICAgICAgICB1ID0gTlVMTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiAiXFhYIiBtYXkgYmVjb21lICJcdTAwNWNcdUhITEwiICgxMiBieXRlcykgKi8KKyAgICAgICAgICAgICAgICB1ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBsZW4gKiA0KTsKKyAgICAgICAgICAgICAgICBpZiAodSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgcCA9IGJ1ZiA9IFB5U3RyaW5nX0FzU3RyaW5nKHUpOworICAgICAgICAgICAgICAgIGVuZCA9IHMgKyBsZW47CisgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAqcysrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnMgJiAweDgwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHAsICJ1MDA1YyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzICYgMHg4MCkgeyAvKiBYWFggaW5lZmZpY2llbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgcm4sIGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBkZWNvZGVfdXRmOCgmcywgZW5kLCAidXRmLTE2LWJlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFB5U3RyaW5nX0FzU3RyaW5nKHcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybiA9IFB5U3RyaW5nX1NpemUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChybiAlIDIgPT0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBybjsgaSArPSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihwLCAiXFx1JTAyeCUwMngiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpICsgMF0gJiAweEZGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpICsgMV0gJiAweEZGKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IDY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICpzKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxlbiA9IHAgLSBidWY7CisgICAgICAgICAgICAgICAgcyA9IGJ1ZjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmF3bW9kZSkKKyAgICAgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUocywgbGVuLCBOVUxMKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZShzLCBsZW4sIE5VTEwpOworICAgICAgICBQeV9YREVDUkVGKHUpOworICAgICAgICByZXR1cm4gdjsKIH0KIAogLyogcyBpcyBhIFB5dGhvbiBzdHJpbmcgbGl0ZXJhbCwgaW5jbHVkaW5nIHRoZSBicmFja2V0aW5nIHF1b3RlIGNoYXJhY3RlcnMsCkBAIC0zMjMwLDc1ICszMjQ4LDc1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcGFyc2VzdHIoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZW5jb2RpbmcpCiB7Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgcXVvdGUgPSBQeV9DSEFSTUFTSygqcyk7Ci0JaW50IHJhd21vZGUgPSAwOwotCWludCBuZWVkX2VuY29kaW5nOwotCWludCB1bmljb2RlID0gMDsKKyAgICAgICAgc2l6ZV90IGxlbjsKKyAgICAgICAgaW50IHF1b3RlID0gUHlfQ0hBUk1BU0soKnMpOworICAgICAgICBpbnQgcmF3bW9kZSA9IDA7CisgICAgICAgIGludCBuZWVkX2VuY29kaW5nOworICAgICAgICBpbnQgdW5pY29kZSA9IDA7CiAKLQlpZiAoaXNhbHBoYShxdW90ZSkgfHwgcXVvdGUgPT0gJ18nKSB7Ci0JCWlmIChxdW90ZSA9PSAndScgfHwgcXVvdGUgPT0gJ1UnKSB7Ci0JCQlxdW90ZSA9ICorK3M7Ci0JCQl1bmljb2RlID0gMTsKLQkJfQotCQlpZiAocXVvdGUgPT0gJ3InIHx8IHF1b3RlID09ICdSJykgewotCQkJcXVvdGUgPSAqKytzOwotCQkJcmF3bW9kZSA9IDE7Ci0JCX0KLQl9Ci0JaWYgKHF1b3RlICE9ICdcJycgJiYgcXVvdGUgIT0gJ1wiJykgewotCQlQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXMrKzsKLQlsZW4gPSBzdHJsZW4ocyk7Ci0JaWYgKGxlbiA+IElOVF9NQVgpIHsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsIAotCQkJCSJzdHJpbmcgdG8gcGFyc2UgaXMgdG9vIGxvbmciKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmIChzWy0tbGVuXSAhPSBxdW90ZSkgewotCQlQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmIChsZW4gPj0gNCAmJiBzWzBdID09IHF1b3RlICYmIHNbMV0gPT0gcXVvdGUpIHsKLQkJcyArPSAyOwotCQlsZW4gLT0gMjsKLQkJaWYgKHNbLS1sZW5dICE9IHF1b3RlIHx8IHNbLS1sZW5dICE9IHF1b3RlKSB7Ci0JCQlQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JfQorICAgICAgICBpZiAoaXNhbHBoYShxdW90ZSkgfHwgcXVvdGUgPT0gJ18nKSB7CisgICAgICAgICAgICAgICAgaWYgKHF1b3RlID09ICd1JyB8fCBxdW90ZSA9PSAnVScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlID0gKisrczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocXVvdGUgPT0gJ3InIHx8IHF1b3RlID09ICdSJykgeworICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAqKytzOworICAgICAgICAgICAgICAgICAgICAgICAgcmF3bW9kZSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChxdW90ZSAhPSAnXCcnICYmIHF1b3RlICE9ICdcIicpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzKys7CisgICAgICAgIGxlbiA9IHN0cmxlbihzKTsKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG8gcGFyc2UgaXMgdG9vIGxvbmciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc1stLWxlbl0gIT0gcXVvdGUpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVuID49IDQgJiYgc1swXSA9PSBxdW90ZSAmJiBzWzFdID09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgcyArPSAyOworICAgICAgICAgICAgICAgIGxlbiAtPSAyOworICAgICAgICAgICAgICAgIGlmIChzWy0tbGVuXSAhPSBxdW90ZSB8fCBzWy0tbGVuXSAhPSBxdW90ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KICNpZmRlZiBQeV9VU0lOR19VTklDT0RFCi0JaWYgKHVuaWNvZGUgfHwgUHlfVW5pY29kZUZsYWcpIHsKLQkJcmV0dXJuIGRlY29kZV91bmljb2RlKHMsIGxlbiwgcmF3bW9kZSwgZW5jb2RpbmcpOwotCX0KKyAgICAgICAgaWYgKHVuaWNvZGUgfHwgUHlfVW5pY29kZUZsYWcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3VuaWNvZGUocywgbGVuLCByYXdtb2RlLCBlbmNvZGluZyk7CisgICAgICAgIH0KICNlbmRpZgotCW5lZWRfZW5jb2RpbmcgPSAoZW5jb2RpbmcgIT0gTlVMTCAmJgotCQkJIHN0cmNtcChlbmNvZGluZywgInV0Zi04IikgIT0gMCAmJgotCQkJIHN0cmNtcChlbmNvZGluZywgImlzby04ODU5LTEiKSAhPSAwKTsKLQlpZiAocmF3bW9kZSB8fCBzdHJjaHIocywgJ1xcJykgPT0gTlVMTCkgewotCQlpZiAobmVlZF9lbmNvZGluZykgeworICAgICAgICBuZWVkX2VuY29kaW5nID0gKGVuY29kaW5nICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoZW5jb2RpbmcsICJ1dGYtOCIpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoZW5jb2RpbmcsICJpc28tODg1OS0xIikgIT0gMCk7CisgICAgICAgIGlmIChyYXdtb2RlIHx8IHN0cmNocihzLCAnXFwnKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKG5lZWRfZW5jb2RpbmcpIHsKICNpZm5kZWYgUHlfVVNJTkdfVU5JQ09ERQotCQkJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAtIHdlIG5ldmVyIHNlZSBhbnkgb3RoZXIKLQkJCSAgIGVuY29kaW5nLiAqLwotCQkJUHlfRmF0YWxFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gLSB3ZSBuZXZlciBzZWUgYW55IG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBkZWFsIHdpdGggZW5jb2RpbmdzIGluIHRoaXMgYnVpbGQuIik7CiAjZWxzZQotCQkJUHlPYmplY3QgKnYsICp1ID0gUHlVbmljb2RlX0RlY29kZVVURjgocywgbGVuLCBOVUxMKTsKLQkJCWlmICh1ID09IE5VTEwpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl2ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh1LCBlbmNvZGluZywgTlVMTCk7Ci0JCQlQeV9ERUNSRUYodSk7Ci0JCQlyZXR1cm4gdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2LCAqdSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHMsIGxlbiwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHUsIGVuY29kaW5nLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2OwogI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUocywgbGVuKTsKLQkJfQotCX0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHMsIGxlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQlyZXR1cm4gUHlTdHJpbmdfRGVjb2RlRXNjYXBlKHMsIGxlbiwgTlVMTCwgdW5pY29kZSwKLQkJCQkgICAgIG5lZWRfZW5jb2RpbmcgPyBlbmNvZGluZyA6IE5VTEwpOworICAgICAgICByZXR1cm4gUHlTdHJpbmdfRGVjb2RlRXNjYXBlKHMsIGxlbiwgTlVMTCwgdW5pY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX2VuY29kaW5nID8gZW5jb2RpbmcgOiBOVUxMKTsKIH0KIAogLyogQnVpbGQgYSBQeXRob24gc3RyaW5nIG9iamVjdCBvdXQgb2YgYSBTVFJJTkcgYXRvbS4gIFRoaXMgdGFrZXMgY2FyZSBvZgpAQCAtMzMwOCwzNiArMzMyNiwzNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBhcnNlc3RycGx1cyhzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewotCVB5T2JqZWN0ICp2OwotCWludCBpOwotCVJFUShDSElMRChuLCAwKSwgU1RSSU5HKTsKLQlpZiAoKHYgPSBwYXJzZXN0cihTVFIoQ0hJTEQobiwgMCkpLCBjLT5jX2VuY29kaW5nKSkgIT0gTlVMTCkgewotCQkvKiBTdHJpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9uICovCi0JCWZvciAoaSA9IDE7IGkgPCBOQ0gobik7IGkrKykgewotCQkJUHlPYmplY3QgKnM7Ci0JCQlzID0gcGFyc2VzdHIoU1RSKENISUxEKG4sIGkpKSwgYy0+Y19lbmNvZGluZyk7Ci0JCQlpZiAocyA9PSBOVUxMKQotCQkJCWdvdG8gb25FcnJvcjsKLQkJCWlmIChQeVN0cmluZ19DaGVjayh2KSAmJiBQeVN0cmluZ19DaGVjayhzKSkgewotCQkJCVB5U3RyaW5nX0NvbmNhdEFuZERlbCgmdiwgcyk7Ci0JCQkJaWYgKHYgPT0gTlVMTCkKLQkJCQkgICAgZ290byBvbkVycm9yOwotCQkJfQorICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgaW50IGk7CisgICAgICAgIFJFUShDSElMRChuLCAwKSwgU1RSSU5HKTsKKyAgICAgICAgaWYgKCh2ID0gcGFyc2VzdHIoU1RSKENISUxEKG4sIDApKSwgYy0+Y19lbmNvZGluZykpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAvKiBTdHJpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9uICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IE5DSChuKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBwYXJzZXN0cihTVFIoQ0hJTEQobiwgaSkpLCBjLT5jX2VuY29kaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeVN0cmluZ19DaGVjayh2KSAmJiBQeVN0cmluZ19DaGVjayhzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Db25jYXRBbmREZWwoJnYsIHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgfQogI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKLQkJCWVsc2UgewotCQkJCVB5T2JqZWN0ICp0ZW1wID0gUHlVbmljb2RlX0NvbmNhdCh2LCBzKTsKLQkJCQlQeV9ERUNSRUYocyk7Ci0JCQkJUHlfREVDUkVGKHYpOwotCQkJCXYgPSB0ZW1wOwotCQkJCWlmICh2ID09IE5VTEwpCi0JCQkJICAgIGdvdG8gb25FcnJvcjsKLQkJCX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGVtcCA9IFB5VW5pY29kZV9Db25jYXQodiwgcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gdGVtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICNlbmRpZgotCQl9Ci0JfQotCXJldHVybiB2OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjsKIAogIG9uRXJyb3I6Ci0JUHlfWERFQ1JFRih2KTsKLQlyZXR1cm4gTlVMTDsKKyAgICAgICAgUHlfWERFQ1JFRih2KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vYmx0aW5tb2R1bGUuYyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCmluZGV4IDhkNzE0N2IuLjczYjAyMjAgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jCisrKyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCkBAIC01MzksNyArNTM5LDcgQEAKIEV2YWx1YXRlIHRoZSBzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgZ2xvYmFscyBhbmQgbG9jYWxzLlxuXAogVGhlIHNvdXJjZSBtYXkgYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgUHl0aG9uIGV4cHJlc3Npb25cblwKIG9yIGEgY29kZSBvYmplY3QgYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpLlxuXAotVGhlIGdsb2JhbHMgbXVzdCBiZSBhIGRpY3Rpb25hcnkgYW5kIGxvY2FscyBjYW4gYmUgYW55IG1hcHBwaW5nLFxuXAorVGhlIGdsb2JhbHMgbXVzdCBiZSBhIGRpY3Rpb25hcnkgYW5kIGxvY2FscyBjYW4gYmUgYW55IG1hcHBpbmcsXG5cCiBkZWZhdWx0aW5nIHRvIHRoZSBjdXJyZW50IGdsb2JhbHMgYW5kIGxvY2Fscy5cblwKIElmIG9ubHkgZ2xvYmFscyBpcyBnaXZlbiwgbG9jYWxzIGRlZmF1bHRzIHRvIGl0LlxuIik7CiAKQEAgLTE5NzIsMTAgKzE5NzIsMTEgQEAKIH0KIAogUHlEb2NfU1RSVkFSKHN1bV9kb2MsCi0ic3VtKHNlcXVlbmNlLCBzdGFydD0wKSAtPiB2YWx1ZVxuXAorInN1bShzZXF1ZW5jZVssIHN0YXJ0XSkgLT4gdmFsdWVcblwKIFxuXAogUmV0dXJucyB0aGUgc3VtIG9mIGEgc2VxdWVuY2Ugb2YgbnVtYmVycyAoTk9UIHN0cmluZ3MpIHBsdXMgdGhlIHZhbHVlXG5cCi1vZiBwYXJhbWV0ZXIgJ3N0YXJ0Jy4gIFdoZW4gdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCByZXR1cm5zIHN0YXJ0LiIpOworb2YgcGFyYW1ldGVyICdzdGFydCcgKHdoaWNoIGRlZmF1bHRzIHRvIDApLiAgV2hlbiB0aGUgc2VxdWVuY2UgaXNcblwKK2VtcHR5LCByZXR1cm5zIHN0YXJ0LiIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCmRpZmYgLS1naXQgYS9QeXRob24vY2V2YWwuYyBiL1B5dGhvbi9jZXZhbC5jCmluZGV4IDJhZTEyYzMuLjgyYWE2NjggMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jZXZhbC5jCisrKyBiL1B5dGhvbi9jZXZhbC5jCkBAIC0xODQsMTAgKzE4NCwxMCBAQAogUHlPYmplY3QgKgogUHlFdmFsX0dldENhbGxTdGF0cyhQeU9iamVjdCAqc2VsZikKIHsKLQlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaWlpaWlpaWlpaSIsCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlpaWlpaWlpaWlpIiwKIAkJCSAgICAgcGNhbGxbMF0sIHBjYWxsWzFdLCBwY2FsbFsyXSwgcGNhbGxbM10sCiAJCQkgICAgIHBjYWxsWzRdLCBwY2FsbFs1XSwgcGNhbGxbNl0sIHBjYWxsWzddLAotCQkJICAgICBwY2FsbFs4XSwgcGNhbGxbOV0pOworCQkJICAgICBwY2FsbFs4XSwgcGNhbGxbOV0sIHBjYWxsWzEwXSk7CiB9CiAjZWxzZQogI2RlZmluZSBQQ0FMTChPKQpAQCAtNDA0Myw4ICs0MDQzLDEwIEBACiAJCXZhbHVlID0gUHlPYmplY3RfR2V0QXR0cih2LCBuYW1lKTsKIAkJaWYgKHZhbHVlID09IE5VTEwpCiAJCQllcnIgPSAtMTsKLQkJZWxzZQorCQllbHNlIGlmIChQeURpY3RfQ2hlY2tFeGFjdChsb2NhbHMpKQogCQkJZXJyID0gUHlEaWN0X1NldEl0ZW0obG9jYWxzLCBuYW1lLCB2YWx1ZSk7CisJCWVsc2UKKwkJCWVyciA9IFB5T2JqZWN0X1NldEl0ZW0obG9jYWxzLCBuYW1lLCB2YWx1ZSk7CiAJCVB5X0RFQ1JFRihuYW1lKTsKIAkJUHlfWERFQ1JFRih2YWx1ZSk7CiAJCWlmIChlcnIgIT0gMCkKZGlmZiAtLWdpdCBhL1B5dGhvbi9jb21waWxlLmMgYi9QeXRob24vY29tcGlsZS5jCmluZGV4IDFhYjMxNWIuLmJkYWZkOTIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jb21waWxlLmMKKysrIGIvUHl0aG9uL2NvbXBpbGUuYwpAQCAtNiw5ICs2LDEwIEBACiAgKiBvYmplY3Q6CiAgKiAgIDEuIENoZWNrcyBmb3IgZnV0dXJlIHN0YXRlbWVudHMuICBTZWUgZnV0dXJlLmMKICAqICAgMi4gQnVpbGRzIGEgc3ltYm9sIHRhYmxlLglTZWUgc3ltdGFibGUuYy4KLSAqICAgMy4gR2VuZXJhdGUgY29kZSBmb3IgYmFzaWMgYmxvY2tzLgkgU2VlIGNvbXBpbGVyX21vZCgpIGluIHRoaXMgZmlsZS4KKyAqICAgMy4gR2VuZXJhdGUgY29kZSBmb3IgYmFzaWMgYmxvY2tzLiAgU2VlIGNvbXBpbGVyX21vZCgpIGluIHRoaXMgZmlsZS4KICAqICAgNC4gQXNzZW1ibGUgdGhlIGJhc2ljIGJsb2NrcyBpbnRvIGZpbmFsIGNvZGUuICBTZWUgYXNzZW1ibGUoKSBpbgotICogICB0aGlzIGZpbGUuCSAKKyAqICAgICAgdGhpcyBmaWxlLgkgCisgKiAgIDUuIE9wdGltaXplIHRoZSBieXRlIGNvZGUgKHBlZXBob2xlIG9wdGltaXphdGlvbnMpLiAgU2VlIHBlZXBob2xlLmMKICAqCiAgKiBOb3RlIHRoYXQgY29tcGlsZXJfbW9kKCkgc3VnZ2VzdHMgbW9kdWxlLCBidXQgdGhlIG1vZHVsZSBhc3QgdHlwZQogICogKG1vZF90eSkgaGFzIGNhc2VzIGZvciBleHByZXNzaW9ucyBhbmQgaW50ZXJhY3RpdmUgc3RhdGVtZW50cy4KQEAgLTE2LDcgKzE3LDggQEAKICAqIENBVVRJT046IFRoZSBWSVNJVF8qIG1hY3JvcyBhYm9ydCB0aGUgY3VycmVudCBmdW5jdGlvbiB3aGVuIHRoZXkKICAqIGVuY291bnRlciBhIHByb2JsZW0uIFNvIGRvbid0IGludm9rZSB0aGVtIHdoZW4gdGhlcmUgaXMgbWVtb3J5CiAgKiB3aGljaCBuZWVkcyB0byBiZSByZWxlYXNlZC4gQ29kZSBibG9ja3MgYXJlIE9LLCBhcyB0aGUgY29tcGlsZXIKLSAqIHN0cnVjdHVyZSB0YWtlcyBjYXJlIG9mIHJlbGVhc2luZyB0aG9zZS4KKyAqIHN0cnVjdHVyZSB0YWtlcyBjYXJlIG9mIHJlbGVhc2luZyB0aG9zZS4gIFVzZSB0aGUgYXJlbmEgdG8gbWFuYWdlCisgKiBvYmplY3RzLgogICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKQEAgLTMyLDE2ICszNCw2IEBACiAKIGludCBQeV9PcHRpbWl6ZUZsYWcgPSAwOwogCi0vKgotICBJU1NVRVM6Ci0KLSAgb3Bjb2RlX3N0YWNrX2VmZmVjdCgpIGZ1bmN0aW9uIHNob3VsZCBiZSByZXZpZXdlZCBzaW5jZSBzdGFjayBkZXB0aCBidWdzCi0gIGNvdWxkIGJlIHJlYWxseSBoYXJkIHRvIGZpbmQgbGF0ZXIuCi0KLSAgRGVhZCBjb2RlIGlzIGJlaW5nIGdlbmVyYXRlZCAoaS5lLiBhZnRlciB1bmNvbmRpdGlvbmFsIGp1bXBzKS4KLSAgICBYWFgobm5vcndpdHopOiBub3Qgc3VyZSB0aGlzIGlzIHN0aWxsIHRydWUKLSovCi0KICNkZWZpbmUgREVGQVVMVF9CTE9DS19TSVpFIDE2CiAjZGVmaW5lIERFRkFVTFRfQkxPQ0tTIDgKICNkZWZpbmUgREVGQVVMVF9DT0RFX1NJWkUgMTI4CkBAIC0xMTYsMTEgKzEwOCwxMSBAQAogCiAJaW50IHVfYXJnY291bnQ7CSAgIC8qIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGJsb2NrICovIAogCWludCB1X2t3b25seWFyZ2NvdW50OyAvKiBudW1iZXIgb2Yga2V5d29yZCBvbmx5IGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KLSAgICAvKiBQb2ludGVyIHRvIHRoZSBtb3N0IHJlY2VudGx5IGFsbG9jYXRlZCBibG9jay4gIEJ5IGZvbGxvd2luZyBiX2xpc3QKLSAgICAgICBtZW1iZXJzLCB5b3UgY2FuIHJlYWNoIGFsbCBlYXJseSBhbGxvY2F0ZWQgYmxvY2tzLiAqLworCS8qIFBvaW50ZXIgdG8gdGhlIG1vc3QgcmVjZW50bHkgYWxsb2NhdGVkIGJsb2NrLiAgQnkgZm9sbG93aW5nIGJfbGlzdAorCSAgIG1lbWJlcnMsIHlvdSBjYW4gcmVhY2ggYWxsIGVhcmx5IGFsbG9jYXRlZCBibG9ja3MuICovCiAJYmFzaWNibG9jayAqdV9ibG9ja3M7CiAJYmFzaWNibG9jayAqdV9jdXJibG9jazsgLyogcG9pbnRlciB0byBjdXJyZW50IGJsb2NrICovCi0JaW50IHVfdG1wbmFtZTsJICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyBmb3IgbGlzdCBjb21wcyAqLworCWludCB1X3RtcG5hbWU7CQkvKiB0ZW1wb3JhcnkgdmFyaWFibGVzIGZvciBsaXN0IGNvbXBzICovCiAKIAlpbnQgdV9uZmJsb2NrczsKIAlzdHJ1Y3QgZmJsb2NraW5mbyB1X2ZibG9ja1tDT19NQVhCTE9DS1NdOwpAQCAtMTUzLDE3ICsxNDUsNiBAQAogCVB5QXJlbmEgKmNfYXJlbmE7CSAvKiBwb2ludGVyIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFyZW5hICovCiB9OwogCi1zdHJ1Y3QgYXNzZW1ibGVyIHsKLQlQeU9iamVjdCAqYV9ieXRlY29kZTsgIC8qIHN0cmluZyBjb250YWluaW5nIGJ5dGVjb2RlICovCi0JaW50IGFfb2Zmc2V0OwkgICAgICAgLyogb2Zmc2V0IGludG8gYnl0ZWNvZGUgKi8KLQlpbnQgYV9uYmxvY2tzOwkgICAgICAgLyogbnVtYmVyIG9mIHJlYWNoYWJsZSBibG9ja3MgKi8KLQliYXNpY2Jsb2NrICoqYV9wb3N0b3JkZXI7IC8qIGxpc3Qgb2YgYmxvY2tzIGluIGRmcyBwb3N0b3JkZXIgKi8KLQlQeU9iamVjdCAqYV9sbm90YWI7ICAgIC8qIHN0cmluZyBjb250YWluaW5nIGxub3RhYiAqLwotCWludCBhX2xub3RhYl9vZmY7ICAgICAgLyogb2Zmc2V0IGludG8gbG5vdGFiICovCi0JaW50IGFfbGluZW5vOwkgICAgICAgLyogbGFzdCBsaW5lbm8gb2YgZW1pdHRlZCBpbnN0cnVjdGlvbiAqLwotCWludCBhX2xpbmVub19vZmY7ICAgICAgLyogYnl0ZWNvZGUgb2Zmc2V0IG9mIGxhc3QgbGluZW5vICovCi19OwotCiBzdGF0aWMgaW50IGNvbXBpbGVyX2VudGVyX3Njb3BlKHN0cnVjdCBjb21waWxlciAqLCBpZGVudGlmaWVyLCB2b2lkICosIGludCk7CiBzdGF0aWMgdm9pZCBjb21waWxlcl9mcmVlKHN0cnVjdCBjb21waWxlciAqKTsKIHN0YXRpYyBiYXNpY2Jsb2NrICpjb21waWxlcl9uZXdfYmxvY2soc3RydWN0IGNvbXBpbGVyICopOwpAQCAtMTg4LDYgKzE2OSw4IEBACiAJCQkJYmFzaWNibG9jayAqKTsKIHN0YXRpYyB2b2lkIGNvbXBpbGVyX3BvcF9mYmxvY2soc3RydWN0IGNvbXBpbGVyICosIGVudW0gZmJsb2NrdHlwZSwKIAkJCQliYXNpY2Jsb2NrICopOworLyogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgbG9vcCBvbiB0aGUgZmJsb2NrIHN0YWNrLiAqLworc3RhdGljIGludCBjb21waWxlcl9pbl9sb29wKHN0cnVjdCBjb21waWxlciAqKTsKIAogc3RhdGljIGludCBpbnBsYWNlX2Jpbm9wKHN0cnVjdCBjb21waWxlciAqLCBvcGVyYXRvcl90eSk7CiBzdGF0aWMgaW50IGV4cHJfY29uc3RhbnQoZXhwcl90eSBlKTsKQEAgLTM5NSw0NyArMzc4LDYgQEAKIAlyZXR1cm4gZGVzdDsKIH0KIAotLyoKLQotTGVhdmUgdGhpcyBkZWJ1Z2dpbmcgY29kZSBmb3IganVzdCBhIGxpdHRsZSBsb25nZXIuCi0KLXN0YXRpYyB2b2lkCi1jb21waWxlcl9kaXNwbGF5X3N5bWJvbHMoUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpzeW1ib2xzKQotewotUHlPYmplY3QgKmtleSwgKnZhbHVlOwotaW50IGZsYWdzOwotUHlfc3NpemVfdCBwb3MgPSAwOwotCi1mcHJpbnRmKHN0ZGVyciwgImJsb2NrICVzXG4iLCBQeVN0cmluZ19BU19TVFJJTkcobmFtZSkpOwotd2hpbGUgKFB5RGljdF9OZXh0KHN5bWJvbHMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKLWZsYWdzID0gUHlJbnRfQXNMb25nKHZhbHVlKTsKLWZwcmludGYoc3RkZXJyLCAidmFyICVzOiIsIFB5U3RyaW5nX0FTX1NUUklORyhrZXkpKTsKLWlmIChmbGFncyAmIERFRl9HTE9CQUwpCi1mcHJpbnRmKHN0ZGVyciwgIiBkZWNsYXJlZF9nbG9iYWwiKTsKLWlmIChmbGFncyAmIERFRl9MT0NBTCkKLWZwcmludGYoc3RkZXJyLCAiIGxvY2FsIik7Ci1pZiAoZmxhZ3MgJiBERUZfUEFSQU0pCi1mcHJpbnRmKHN0ZGVyciwgIiBwYXJhbSIpOwotaWYgKGZsYWdzICYgREVGX1NUQVIpCi1mcHJpbnRmKHN0ZGVyciwgIiBzdGFyYXJnIik7Ci1pZiAoZmxhZ3MgJiBERUZfRE9VQkxFU1RBUikKLWZwcmludGYoc3RkZXJyLCAiIHN0YXJzdGFyIik7Ci1pZiAoZmxhZ3MgJiBERUZfSU5UVVBMRSkKLWZwcmludGYoc3RkZXJyLCAiIHR1cGxlIik7Ci1pZiAoZmxhZ3MgJiBERUZfRlJFRSkKLWZwcmludGYoc3RkZXJyLCAiIGZyZWUiKTsKLWlmIChmbGFncyAmIERFRl9GUkVFX0dMT0JBTCkKLWZwcmludGYoc3RkZXJyLCAiIGdsb2JhbCIpOwotaWYgKGZsYWdzICYgREVGX0ZSRUVfQ0xBU1MpCi1mcHJpbnRmKHN0ZGVyciwgIiBmcmVlL2NsYXNzIik7Ci1pZiAoZmxhZ3MgJiBERUZfSU1QT1JUKQotZnByaW50ZihzdGRlcnIsICIgaW1wb3J0Iik7Ci1mcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci19Ci0JZnByaW50ZihzdGRlcnIsICJcbiIpOwotfQotKi8KLQogc3RhdGljIHZvaWQKIGNvbXBpbGVyX3VuaXRfY2hlY2soc3RydWN0IGNvbXBpbGVyX3VuaXQgKnUpCiB7CkBAIC02MTAsNyArNTUyLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW1lbXNldCgodm9pZCAqKWIsIDAsIHNpemVvZihiYXNpY2Jsb2NrKSk7Ci0gICAgLyogRXh0ZW5kIHRoZSBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgYmxvY2tzIHdpdGggbmV3IGJsb2NrLiAqLworCS8qIEV4dGVuZCB0aGUgc2luZ2x5IGxpbmtlZCBsaXN0IG9mIGJsb2NrcyB3aXRoIG5ldyBibG9jay4gKi8KIAliLT5iX2xpc3QgPSB1LT51X2Jsb2NrczsKIAl1LT51X2Jsb2NrcyA9IGI7CiAJcmV0dXJuIGI7CkBAIC02NDksNyArNTkxLDcgQEAKIC8qIFJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpbiB0aGUgY3VycmVudCBibG9jaydzCiAgICBiX2luc3RyIGFycmF5LiAgUmVzaXplcyB0aGUgYl9pbnN0ciBhcyBuZWNlc3NhcnkuCiAgICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuCi0gKi8KKyovCiAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX25leHRfaW5zdHIoc3RydWN0IGNvbXBpbGVyICpjLCBiYXNpY2Jsb2NrICpiKQpAQCAtNjkzLDcgKzYzNSw3IEBACiAgICBhbHJlYWR5IGJlZW4gc2V0LiAgSWYgaXQgaGFzIGJlZW4gc2V0LCB0aGUgY2FsbCBoYXMgbm8gZWZmZWN0LgogCiAgICBFdmVyeSB0aW1lIGEgbmV3IG5vZGUgaXMgYgotICAgKi8KKyovCiAKIHN0YXRpYyB2b2lkCiBjb21waWxlcl9zZXRfbGluZW5vKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9mZikKQEAgLTEwNTMsOCArOTk1LDggQEAKICAgIGZyb20gdGhlIGN1cnJlbnQgYmxvY2sgdG8gdGhlIG5ldyBibG9jay4KICovCiAKLS8qIFhYWCBUaGUgcmV0dXJucyBpbnNpZGUgdGhlc2UgbWFjcm9zIG1ha2UgaXQgaW1wb3NzaWJsZSB0byBkZWNyZWYKLSAgIG9iamVjdHMgY3JlYXRlZCBpbiB0aGUgbG9jYWwgZnVuY3Rpb24uCisvKiBUaGUgcmV0dXJucyBpbnNpZGUgdGhlc2UgbWFjcm9zIG1ha2UgaXQgaW1wb3NzaWJsZSB0byBkZWNyZWYgb2JqZWN0cworICAgY3JlYXRlZCBpbiB0aGUgbG9jYWwgZnVuY3Rpb24uICBMb2NhbCBvYmplY3RzIHNob3VsZCB1c2UgdGhlIGFyZW5hLgogKi8KIAogCkBAIC0xNzIyLDYgKzE2NjQsOCBAQAogY29tcGlsZXJfY29udGludWUoc3RydWN0IGNvbXBpbGVyICpjKQogewogCXN0YXRpYyBjb25zdCBjaGFyIExPT1BfRVJST1JfTVNHW10gPSAiJ2NvbnRpbnVlJyBub3QgcHJvcGVybHkgaW4gbG9vcCI7CisJc3RhdGljIGNvbnN0IGNoYXIgSU5fRklOQUxMWV9FUlJPUl9NU0dbXSA9IAorCQkJIidjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZSI7CiAJaW50IGk7CiAKIAlpZiAoIWMtPnUtPnVfbmZibG9ja3MpCkBAIC0xNzMzLDE1ICsxNjc3LDE4IEBACiAJCWJyZWFrOwogCWNhc2UgRVhDRVBUOgogCWNhc2UgRklOQUxMWV9UUlk6Ci0JCXdoaWxlICgtLWkgPj0gMCAmJiBjLT51LT51X2ZibG9ja1tpXS5mYl90eXBlICE9IExPT1ApCi0JCQk7CisJCXdoaWxlICgtLWkgPj0gMCAmJiBjLT51LT51X2ZibG9ja1tpXS5mYl90eXBlICE9IExPT1ApIHsKKwkJCS8qIFByZXZlbnQgY29udGludWUgYW55d2hlcmUgdW5kZXIgYSBmaW5hbGx5CisJCQkgICAgICBldmVuIGlmIGhpZGRlbiBpbiBhIHN1Yi10cnkgb3IgZXhjZXB0LiAqLworCQkJaWYgKGMtPnUtPnVfZmJsb2NrW2ldLmZiX3R5cGUgPT0gRklOQUxMWV9FTkQpCisJCQkJcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsIElOX0ZJTkFMTFlfRVJST1JfTVNHKTsKKwkJfQogCQlpZiAoaSA9PSAtMSkKIAkJCXJldHVybiBjb21waWxlcl9lcnJvcihjLCBMT09QX0VSUk9SX01TRyk7CiAJCUFERE9QX0pBQlMoYywgQ09OVElOVUVfTE9PUCwgYy0+dS0+dV9mYmxvY2tbaV0uZmJfYmxvY2spOwogCQlicmVhazsKIAljYXNlIEZJTkFMTFlfRU5EOgotCQlyZXR1cm4gY29tcGlsZXJfZXJyb3IoYywKLQkJCSInY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UiKTsKKwkJcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsIElOX0ZJTkFMTFlfRVJST1JfTVNHKTsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTIwODQsNyArMjAzMSw3IEBACiB7CiAJaW50IGksIG47CiAKLSAgICAvKiBBbHdheXMgYXNzaWduIGEgbGluZW5vIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIGZvciBhIHN0bXQuICovCisJLyogQWx3YXlzIGFzc2lnbiBhIGxpbmVubyB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiBmb3IgYSBzdG10LiAqLwogCWMtPnUtPnVfbGluZW5vID0gcy0+bGluZW5vOwogCWMtPnUtPnVfbGluZW5vX3NldCA9IGZhbHNlOwogCkBAIC0yMTY4LDcgKzIxMTUsNyBAQAogCWNhc2UgUGFzc19raW5kOgogCQlicmVhazsKIAljYXNlIEJyZWFrX2tpbmQ6Ci0JCWlmICghYy0+dS0+dV9uZmJsb2NrcykKKyAgICAgICAgICAgICAgICBpZiAoIWNvbXBpbGVyX2luX2xvb3AoYykpCiAJCQlyZXR1cm4gY29tcGlsZXJfZXJyb3IoYywgIidicmVhaycgb3V0c2lkZSBsb29wIik7CiAJCUFERE9QKGMsIEJSRUFLX0xPT1ApOwogCQlicmVhazsKQEAgLTI1MjIsNyArMjQ2OSw2IEBACiAJfQogCXJldHVybiAxOwogfQotI3VuZGVmIENNUENBU1QKIAogc3RhdGljIGludAogY29tcGlsZXJfY2FsbChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKQEAgLTI2MjIsNyArMjU2OCw3IEBACiAJfSAKIAlBRERPUF9KQUJTKGMsIEpVTVBfQUJTT0xVVEUsIHN0YXJ0KTsKIAljb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBhbmNob3IpOwotCS8qIGRlbGV0ZSB0aGUgYXBwZW5kIG1ldGhvZCBhZGRlZCB0byBsb2NhbHMgKi8KKwkvKiBkZWxldGUgdGhlIHRlbXBvcmFyeSBsaXN0IG5hbWUgYWRkZWQgdG8gbG9jYWxzICovCiAJaWYgKGdlbl9pbmRleCA9PSAxKQogCSAgICBpZiAoIWNvbXBpbGVyX25hbWVvcChjLCB0bXBuYW1lLCBEZWwpKQogCQlyZXR1cm4gMDsKQEAgLTI2MzUsMTUgKzI1ODEsOSBAQAogewogCWlkZW50aWZpZXIgdG1wOwogCWludCByYyA9IDA7Ci0Jc3RhdGljIGlkZW50aWZpZXIgYXBwZW5kOwogCWFzZGxfc2VxICpnZW5lcmF0b3JzID0gZS0+di5MaXN0Q29tcC5nZW5lcmF0b3JzOwogCiAJYXNzZXJ0KGUtPmtpbmQgPT0gTGlzdENvbXBfa2luZCk7Ci0JaWYgKCFhcHBlbmQpIHsKLQkJYXBwZW5kID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiYXBwZW5kIik7Ci0JCWlmICghYXBwZW5kKQotCQkJcmV0dXJuIDA7Ci0JfQogCXRtcCA9IGNvbXBpbGVyX25ld190bXBuYW1lKGMpOwogCWlmICghdG1wKQogCQlyZXR1cm4gMDsKQEAgLTI5NDQsOSArMjg4NCw5IEBACiB7CiAJaW50IGksIG47CiAKLSAgICAvKiBJZiBleHByIGUgaGFzIGEgZGlmZmVyZW50IGxpbmUgbnVtYmVyIHRoYW4gdGhlIGxhc3QgZXhwci9zdG10LAotICAgICAgIHNldCBhIG5ldyBsaW5lIG51bWJlciBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCi0gICAgICAgKi8KKwkvKiBJZiBleHByIGUgaGFzIGEgZGlmZmVyZW50IGxpbmUgbnVtYmVyIHRoYW4gdGhlIGxhc3QgZXhwci9zdG10LAorICAgICAgICAgICBzZXQgYSBuZXcgbGluZSBudW1iZXIgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uLgorICAgICAgICAqLwogCWlmIChlLT5saW5lbm8gPiBjLT51LT51X2xpbmVubykgewogCQljLT51LT51X2xpbmVubyA9IGUtPmxpbmVubzsKIAkJYy0+dS0+dV9saW5lbm9fc2V0ID0gZmFsc2U7CkBAIC0yOTk1LDE0ICsyOTM1LDYgQEAKIAljYXNlIFlpZWxkX2tpbmQ6CiAJCWlmIChjLT51LT51X3N0ZS0+c3RlX3R5cGUgIT0gRnVuY3Rpb25CbG9jaykKIAkJCXJldHVybiBjb21waWxlcl9lcnJvcihjLCAiJ3lpZWxkJyBvdXRzaWRlIGZ1bmN0aW9uIik7Ci0JCS8qCi0JCWZvciAoaSA9IDA7IGkgPCBjLT51LT51X25mYmxvY2tzOyBpKyspIHsKLQkJCWlmIChjLT51LT51X2ZibG9ja1tpXS5mYl90eXBlID09IEZJTkFMTFlfVFJZKQotCQkJCXJldHVybiBjb21waWxlcl9lcnJvcigKLQkJCQkJYywgIid5aWVsZCcgbm90IGFsbG93ZWQgaW4gYSAndHJ5JyAiCi0JCQkJCSJibG9jayB3aXRoIGEgJ2ZpbmFsbHknIGNsYXVzZSIpOwotCQl9Ci0JCSovCiAJCWlmIChlLT52LllpZWxkLnZhbHVlKSB7CiAJCQlWSVNJVChjLCBleHByLCBlLT52LllpZWxkLnZhbHVlKTsKIAkJfQpAQCAtMzE0MCw4ICszMDcyLDExIEBACiBjb21waWxlcl9wdXNoX2ZibG9jayhzdHJ1Y3QgY29tcGlsZXIgKmMsIGVudW0gZmJsb2NrdHlwZSB0LCBiYXNpY2Jsb2NrICpiKQogewogCXN0cnVjdCBmYmxvY2tpbmZvICpmOwotCWlmIChjLT51LT51X25mYmxvY2tzID49IENPX01BWEJMT0NLUykKKwlpZiAoYy0+dS0+dV9uZmJsb2NrcyA+PSBDT19NQVhCTE9DS1MpIHsKKwkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorCQkJCSJ0b28gbWFueSBzdGF0aWNhbGx5IG5lc3RlZCBibG9ja3MiKTsKIAkJcmV0dXJuIDA7CisJfQogCWYgPSAmYy0+dS0+dV9mYmxvY2tbYy0+dS0+dV9uZmJsb2NrcysrXTsKIAlmLT5mYl90eXBlID0gdDsKIAlmLT5mYl9ibG9jayA9IGI7CkBAIC0zMTU4LDYgKzMwOTMsMTYgQEAKIAlhc3NlcnQodS0+dV9mYmxvY2tbdS0+dV9uZmJsb2Nrc10uZmJfYmxvY2sgPT0gYik7CiB9CiAKK3N0YXRpYyBpbnQKK2NvbXBpbGVyX2luX2xvb3Aoc3RydWN0IGNvbXBpbGVyICpjKSB7CisgICAgICAgIGludCBpOworICAgICAgICBzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqdSA9IGMtPnU7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB1LT51X25mYmxvY2tzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAodS0+dV9mYmxvY2tbaV0uZmJfdHlwZSA9PSBMT09QKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CiAvKiBSYWlzZXMgYSBTeW50YXhFcnJvciBhbmQgcmV0dXJucyAwLgogICAgSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIGEgZGlmZmVyZW50IGV4Y2VwdGlvbiBtYXkgYmUgcmFpc2VkLgogKi8KQEAgLTMzMTYsNyArMzI2MSw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLQogc3RhdGljIGludAogY29tcGlsZXJfdmlzaXRfc2xpY2Uoc3RydWN0IGNvbXBpbGVyICpjLCBzbGljZV90eSBzLCBleHByX2NvbnRleHRfdHkgY3R4KQogewpAQCAtMzM1OCwxMiArMzMwMiwyNiBAQAogCXJldHVybiBjb21waWxlcl9oYW5kbGVfc3Vic2NyKGMsIGtpbmRuYW1lLCBjdHgpOwogfQogCisKKy8qIEVuZCBvZiB0aGUgY29tcGlsZXIgc2VjdGlvbiwgYmVnaW5uaW5nIG9mIHRoZSBhc3NlbWJsZXIgc2VjdGlvbiAqLworCiAvKiBkbyBkZXB0aC1maXJzdCBzZWFyY2ggb2YgYmFzaWMgYmxvY2sgZ3JhcGgsIHN0YXJ0aW5nIHdpdGggYmxvY2suCiAgICBwb3N0IHJlY29yZHMgdGhlIGJsb2NrIGluZGljZXMgaW4gcG9zdC1vcmRlci4KIAogICAgWFhYIG11c3QgaGFuZGxlIGltcGxpY2l0IGp1bXBzIGZyb20gb25lIGJsb2NrIHRvIG5leHQKICovCiAKK3N0cnVjdCBhc3NlbWJsZXIgeworCVB5T2JqZWN0ICphX2J5dGVjb2RlOyAgLyogc3RyaW5nIGNvbnRhaW5pbmcgYnl0ZWNvZGUgKi8KKwlpbnQgYV9vZmZzZXQ7CSAgICAgICAvKiBvZmZzZXQgaW50byBieXRlY29kZSAqLworCWludCBhX25ibG9ja3M7CSAgICAgICAvKiBudW1iZXIgb2YgcmVhY2hhYmxlIGJsb2NrcyAqLworCWJhc2ljYmxvY2sgKiphX3Bvc3RvcmRlcjsgLyogbGlzdCBvZiBibG9ja3MgaW4gZGZzIHBvc3RvcmRlciAqLworCVB5T2JqZWN0ICphX2xub3RhYjsgICAgLyogc3RyaW5nIGNvbnRhaW5pbmcgbG5vdGFiICovCisJaW50IGFfbG5vdGFiX29mZjsgICAgICAvKiBvZmZzZXQgaW50byBsbm90YWIgKi8KKwlpbnQgYV9saW5lbm87CSAgICAgICAvKiBsYXN0IGxpbmVubyBvZiBlbWl0dGVkIGluc3RydWN0aW9uICovCisJaW50IGFfbGluZW5vX29mZjsgICAgICAvKiBieXRlY29kZSBvZmZzZXQgb2YgbGFzdCBsaW5lbm8gKi8KK307CisKIHN0YXRpYyB2b2lkCiBkZnMoc3RydWN0IGNvbXBpbGVyICpjLCBiYXNpY2Jsb2NrICpiLCBzdHJ1Y3QgYXNzZW1ibGVyICphKQogewpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Vycm9ycy5jIGIvUHl0aG9uL2Vycm9ycy5jCmluZGV4IDQ4ZWQwNWMuLjI4YzFlYTUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9lcnJvcnMuYworKysgYi9QeXRob24vZXJyb3JzLmMKQEAgLTU2MCw3ICs1NjAsOCBAQAogCQkJZ290byBmYWlsdXJlOwogCX0KIAlpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZGljdCwgIl9fbW9kdWxlX18iKSA9PSBOVUxMKSB7Ci0JCW1vZHVsZW5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShuYW1lLCAoaW50KShkb3QtbmFtZSkpOworCQltb2R1bGVuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUobmFtZSwKKwkJCQkJCSAgICAgKFB5X3NzaXplX3QpKGRvdC1uYW1lKSk7CiAJCWlmIChtb2R1bGVuYW1lID09IE5VTEwpCiAJCQlnb3RvIGZhaWx1cmU7CiAJCWlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19tb2R1bGVfXyIsIG1vZHVsZW5hbWUpICE9IDApCmRpZmYgLS1naXQgYS9QeXRob24vZ2V0YXJncy5jIGIvUHl0aG9uL2dldGFyZ3MuYwppbmRleCA4ZGM1ZTc4Li5mNmRkZmFhIDEwMDY0NAotLS0gYS9QeXRob24vZ2V0YXJncy5jCisrKyBiL1B5dGhvbi9nZXRhcmdzLmMKQEAgLTgxNiw3ICs4MTYsNyBAQAogI2VuZGlmCiAJCQllbHNlCiAJCQkJcmV0dXJuIGNvbnZlcnRlcnIoInN0cmluZyIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKLQkJCWlmICgoaW50KXN0cmxlbigqcCkgIT0gUHlTdHJpbmdfU2l6ZShhcmcpKQorCQkJaWYgKChQeV9zc2l6ZV90KXN0cmxlbigqcCkgIT0gUHlTdHJpbmdfU2l6ZShhcmcpKQogCQkJCXJldHVybiBjb252ZXJ0ZXJyKCJzdHJpbmcgd2l0aG91dCBudWxsIGJ5dGVzIiwKIAkJCQkJCSAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogCQl9CkBAIC04ODMsNyArODgzLDcgQEAKIAkJCQlmb3JtYXQrKzsKIAkJCX0KIAkJCWVsc2UgaWYgKCpwICE9IE5VTEwgJiYKLQkJCQkgKGludClzdHJsZW4oKnApICE9IFB5U3RyaW5nX1NpemUoYXJnKSkKKwkJCQkgKFB5X3NzaXplX3Qpc3RybGVuKCpwKSAhPSBQeVN0cmluZ19TaXplKGFyZykpCiAJCQkJcmV0dXJuIGNvbnZlcnRlcnIoCiAJCQkJCSJzdHJpbmcgd2l0aG91dCBudWxsIGJ5dGVzIG9yIE5vbmUiLCAKIAkJCQkJYXJnLCBtc2didWYsIGJ1ZnNpemUpOwpAQCAtMTAzMCw3ICsxMDMwLDggQEAKIAkJCSAgIFB5TWVtX0ZyZWUoKWluZyBpdCBhZnRlciB1c2FnZQogCiAJCQkqLwotCQkJaWYgKChpbnQpc3RybGVuKFB5U3RyaW5nX0FTX1NUUklORyhzKSkgIT0gc2l6ZSkgeworCQkJaWYgKChQeV9zc2l6ZV90KXN0cmxlbihQeVN0cmluZ19BU19TVFJJTkcocykpCisJCQkJCQkJCSE9IHNpemUpIHsKIAkJCQlQeV9ERUNSRUYocyk7CiAJCQkJcmV0dXJuIGNvbnZlcnRlcnIoCiAJCQkJCSIoZW5jb2RlZCBzdHJpbmcgd2l0aG91dCBOVUxMIGJ5dGVzKSIsCkBAIC0xNzQ2LDcgKzE3NDcsNyBAQAogLyogRm9yIHR5cGUgY29uc3RydWN0b3JzIHRoYXQgZG9uJ3QgdGFrZSBrZXl3b3JkIGFyZ3MKICAqCiAgKiBTZXRzIGEgVHlwZUVycm9yIGFuZCByZXR1cm5zIDAgaWYgdGhlIGt3ZHMgZGljdCBpcyAKLSAqIG5vdCBlbXRweSwgcmV0dXJucyAxIG90aGVyd2lzZQorICogbm90IGVtcHR5LCByZXR1cm5zIDEgb3RoZXJ3aXNlCiAgKi8KIGludAogX1B5QXJnX05vS2V5d29yZHMoY29uc3QgY2hhciAqZnVuY25hbWUsIFB5T2JqZWN0ICprdykKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnQuYyBiL1B5dGhvbi9pbXBvcnQuYwppbmRleCA0YzZjMDVhLi45ZTQ2ZTAyIDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0LmMKKysrIGIvUHl0aG9uL2ltcG9ydC5jCkBAIC02NCw2ICs2NCw4IEBACiAgICAgICAgUHl0aG9uIDIuNWIzOiA2MjExMSAoZml4IHdyb25nIGNvZGU6IHggKz0geWllbGQpCiAgICAgICAgUHl0aG9uIDIuNWMxOiA2MjEyMSAoZml4IHdyb25nIGxub3RhYiB3aXRoIGZvciBsb29wcyBhbmQKICAgICAgICAJCQkgICAgc3RvcmluZyBjb25zdGFudHMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQpCisgICAgICAgUHl0aG9uIDIuNWMyOiA2MjEzMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4gaW4gbGlzdGNvbXAvZ2VuZXhwKQorICAgICAgIFB5dGhvbiAyLjZhMDogNjIxNDEgKHBlZXBob2xlIG9wdGltaXphdGlvbnMpCiAgICAgICAgUHl0aG9uIDMwMDA6ICAgMzAwMAogICAgICAgIAkgICAgICAgICAgICAgIDMwMTAgKHJlbW92ZWQgVU5BUllfQ09OVkVSVCkKIAkJICAgICAgMzAyMCAoYWRkZWQgQlVJTERfU0VUKQpAQCAtNzk5LDE0ICs4MDEsMTYgQEAKIHsKIAlQeUNvZGVPYmplY3QgKmNvID0gTlVMTDsKIAltb2RfdHkgbW9kOwotICAgICAgICBQeUFyZW5hICphcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisJUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOworCWlmIChhcmVuYSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCW1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlKGZwLCBwYXRobmFtZSwgUHlfZmlsZV9pbnB1dCwgMCwgMCwgMCwgCiAJCQkJICAgTlVMTCwgYXJlbmEpOwogCWlmIChtb2QpIHsKIAkJY28gPSBQeUFTVF9Db21waWxlKG1vZCwgcGF0aG5hbWUsIE5VTEwsIGFyZW5hKTsKIAl9Ci0gICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CisJUHlBcmVuYV9GcmVlKGFyZW5hKTsKIAlyZXR1cm4gY287CiB9CiAKQEAgLTEwMzAsNyArMTAzNCw3IEBACiAKIC8qIFJldHVybiBhbiBpbXBvcnRlciBvYmplY3QgZm9yIGEgc3lzLnBhdGgvcGtnLl9fcGF0aF9fIGl0ZW0gJ3AnLAogICAgcG9zc2libHkgYnkgZmV0Y2hpbmcgaXQgZnJvbSB0aGUgcGF0aF9pbXBvcnRlcl9jYWNoZSBkaWN0LiBJZiBpdAotICAgd2Fzbid0IHlldCBjYWNoZWQsIHRyYXZlcnNlIHBhdGhfaG9va3MgdW50aWwgaXQgYSBob29rIGlzIGZvdW5kCisgICB3YXNuJ3QgeWV0IGNhY2hlZCwgdHJhdmVyc2UgcGF0aF9ob29rcyB1bnRpbCBhIGhvb2sgaXMgZm91bmQKICAgIHRoYXQgY2FuIGhhbmRsZSB0aGUgcGF0aCBpdGVtLiBSZXR1cm4gTm9uZSBpZiBubyBob29rIGNvdWxkOwogICAgdGhpcyB0ZWxscyBvdXIgY2FsbGVyIGl0IHNob3VsZCBmYWxsIGJhY2sgdG8gdGhlIGJ1aWx0aW4KICAgIGltcG9ydCBtZWNoYW5pc20uIENhY2hlIHRoZSByZXN1bHQgaW4gcGF0aF9pbXBvcnRlcl9jYWNoZS4KQEAgLTE4MDIsNyArMTgwNiw3IEBACiAKIAogLyogSW5pdGlhbGl6ZSBhIGJ1aWx0LWluIG1vZHVsZS4KLSAgIFJldHVybiAxIGZvciBzdWNjZXMsIDAgaWYgdGhlIG1vZHVsZSBpcyBub3QgZm91bmQsIGFuZCAtMSB3aXRoCisgICBSZXR1cm4gMSBmb3Igc3VjY2VzcywgMCBpZiB0aGUgbW9kdWxlIGlzIG5vdCBmb3VuZCwgYW5kIC0xIHdpdGgKICAgIGFuIGV4Y2VwdGlvbiBzZXQgaWYgdGhlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4gKi8KIAogc3RhdGljIGludApAQCAtMjExNyw3ICsyMTIxLDcgQEAKIAkJc2l6ZV90IGxlbjsKIAkJaWYgKGxhc3Rkb3QgPT0gTlVMTCAmJiBsZXZlbCA+IDApIHsKIAkJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotCQkJCQkiUmVsYXRpdmUgaW1wb3J0cGF0aCB0b28gZGVlcCIpOworCQkJCSJBdHRlbXB0ZWQgcmVsYXRpdmUgaW1wb3J0IGluIG5vbi1wYWNrYWdlIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlpZiAobGFzdGRvdCA9PSBOVUxMKQpAQCAtMjEzNiw3ICsyMTQwLDggQEAKIAkJY2hhciAqZG90ID0gc3RycmNocihidWYsICcuJyk7CiAJCWlmIChkb3QgPT0gTlVMTCkgewogCQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0JCQkJCSJSZWxhdGl2ZSBpbXBvcnRwYXRoIHRvbyBkZWVwIik7CisJCQkJIkF0dGVtcHRlZCByZWxhdGl2ZSBpbXBvcnQgYmV5b25kICIKKwkJCQkidG9wbGV2ZWwgcGFja2FnZSIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJKmRvdCA9ICdcMCc7CmRpZmYgLS1naXQgYS9QeXRob24vbWFyc2hhbC5jIGIvUHl0aG9uL21hcnNoYWwuYwppbmRleCAyNjY3YjY1Li40ZTAyYWM2IDEwMDY0NAotLS0gYS9QeXRob24vbWFyc2hhbC5jCisrKyBiL1B5dGhvbi9tYXJzaGFsLmMKQEAgLTU0Nyw2ICs1NDcsMTEgQEAKIAkJCWludCBzaXplOwogCQkJUHlMb25nT2JqZWN0ICpvYjsKIAkJCW4gPSByX2xvbmcocCk7CisJCQlpZiAobiA8IC1JTlRfTUFYIHx8IG4gPiBJTlRfTUFYKSB7CisJCQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisJCQkJCQkiYmFkIG1hcnNoYWwgZGF0YSIpOworCQkJCXJldHVybiBOVUxMOworCQkJfQogCQkJc2l6ZSA9IG48MCA/IC1uIDogbjsKIAkJCW9iID0gX1B5TG9uZ19OZXcoc2l6ZSk7CiAJCQlpZiAob2IgPT0gTlVMTCkKQEAgLTY1NSw3ICs2NjAsNyBAQAogCWNhc2UgVFlQRV9JTlRFUk5FRDoKIAljYXNlIFRZUEVfU1RSSU5HOgogCQluID0gcl9sb25nKHApOwotCQlpZiAobiA8IDApIHsKKwkJaWYgKG4gPCAwIHx8IG4gPiBJTlRfTUFYKSB7CiAJCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC02OTAsNyArNjk1LDcgQEAKIAkJY2hhciAqYnVmZmVyOwogCiAJCW4gPSByX2xvbmcocCk7Ci0JCWlmIChuIDwgMCkgeworCQlpZiAobiA8IDAgfHwgbiA+IElOVF9NQVgpIHsKIAkJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KQEAgLTcxMSw3ICs3MTYsNyBAQAogCiAJY2FzZSBUWVBFX1RVUExFOgogCQluID0gcl9sb25nKHApOwotCQlpZiAobiA8IDApIHsKKwkJaWYgKG4gPCAwIHx8IG4gPiBJTlRfTUFYKSB7CiAJCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC03MzQsNyArNzM5LDcgQEAKIAogCWNhc2UgVFlQRV9MSVNUOgogCQluID0gcl9sb25nKHApOwotCQlpZiAobiA8IDApIHsKKwkJaWYgKG4gPCAwIHx8IG4gPiBJTlRfTUFYKSB7CiAJCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC04MzMsMTEgKzgzOCwxMiBAQAogCQkJCiAJCQl2ID0gTlVMTDsKIAotCQkJYXJnY291bnQgPSByX2xvbmcocCk7Ci0JCQlrd29ubHlhcmdjb3VudCA9IHJfbG9uZyhwKTsKLQkJCW5sb2NhbHMgPSByX2xvbmcocCk7Ci0JCQlzdGFja3NpemUgPSByX2xvbmcocCk7Ci0JCQlmbGFncyA9IHJfbG9uZyhwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBpZ25vcmUgbG9uZy0+aW50IG92ZXJmbG93cyBmb3Igbm93ICovCisJCQlhcmdjb3VudCA9IChpbnQpcl9sb25nKHApOworCQkJa3dvbmx5YXJnY291bnQgPSAoaW50KXJfbG9uZyhwKTsKKwkJCW5sb2NhbHMgPSAoaW50KXJfbG9uZyhwKTsKKwkJCXN0YWNrc2l6ZSA9IChpbnQpcl9sb25nKHApOworCQkJZmxhZ3MgPSAoaW50KXJfbG9uZyhwKTsKIAkJCWNvZGUgPSByX29iamVjdChwKTsKIAkJCWlmIChjb2RlID09IE5VTEwpCiAJCQkJZ290byBjb2RlX2Vycm9yOwpAQCAtODYyLDcgKzg2OCw3IEBACiAJCQluYW1lID0gcl9vYmplY3QocCk7CiAJCQlpZiAobmFtZSA9PSBOVUxMKQogCQkJCWdvdG8gY29kZV9lcnJvcjsKLQkJCWZpcnN0bGluZW5vID0gcl9sb25nKHApOworCQkJZmlyc3RsaW5lbm8gPSAoaW50KXJfbG9uZyhwKTsKIAkJCWxub3RhYiA9IHJfb2JqZWN0KHApOwogCQkJaWYgKGxub3RhYiA9PSBOVUxMKQogCQkJCWdvdG8gY29kZV9lcnJvcjsKQEAgLTEwMzUsMTAgKzEwNDEsMTYgQEAKIAl3Zi5zdHJpbmdzID0gKHZlcnNpb24gPiAwKSA/IFB5RGljdF9OZXcoKSA6IE5VTEw7CiAJd19vYmplY3QoeCwgJndmKTsKIAlQeV9YREVDUkVGKHdmLnN0cmluZ3MpOwotCWlmICh3Zi5zdHIgIT0gTlVMTCkKLQkJX1B5U3RyaW5nX1Jlc2l6ZSgmd2Yuc3RyLAotCQkgICAgKGludCkgKHdmLnB0ciAtCi0JCQkgICBQeVN0cmluZ19BU19TVFJJTkcoKFB5U3RyaW5nT2JqZWN0ICopd2Yuc3RyKSkpOworCWlmICh3Zi5zdHIgIT0gTlVMTCkgeworCQljaGFyICpiYXNlID0gUHlTdHJpbmdfQVNfU1RSSU5HKChQeVN0cmluZ09iamVjdCAqKXdmLnN0cik7CisJCWlmICh3Zi5wdHIgLSBiYXNlID4gUFlfU1NJWkVfVF9NQVgpIHsKKwkJCVB5X0RFQ1JFRih3Zi5zdHIpOworCQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisJCQkJCSJ0b28gbXVjaCBtYXJzaGFsbCBkYXRhIGZvciBhIHN0cmluZyIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJX1B5U3RyaW5nX1Jlc2l6ZSgmd2Yuc3RyLCAoUHlfc3NpemVfdCkod2YucHRyIC0gYmFzZSkpOworCX0KIAlpZiAod2YuZXJyb3IpIHsKIAkJUHlfWERFQ1JFRih3Zi5zdHIpOwogCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKZGlmZiAtLWdpdCBhL1B5dGhvbi9tb2RzdXBwb3J0LmMgYi9QeXRob24vbW9kc3VwcG9ydC5jCmluZGV4IGUyOTEwMTQuLjFhYTNkZjIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9tb2RzdXBwb3J0LmMKKysrIGIvUHl0aG9uL21vZHN1cHBvcnQuYwpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCQkJCQkJInN0cmluZyB0b28gbG9uZyBmb3IgUHl0aG9uIHN0cmluZyIpOwogCQkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJCX0KLQkJCQkJbiA9IChpbnQpbTsKKwkJCQkJbiA9IChQeV9zc2l6ZV90KW07CiAJCQkJfQogCQkJCXYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShzdHIsIG4pOwogCQkJfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL215c3RydG91bC5jIGIvUHl0aG9uL215c3RydG91bC5jCmluZGV4IDBkZGE0YmUuLmYwMDcwNTcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9teXN0cnRvdWwuYworKysgYi9QeXRob24vbXlzdHJ0b3VsLmMKQEAgLTE5NSwxMyArMTk1LDEwIEBACiAJcmV0dXJuICh1bnNpZ25lZCBsb25nKS0xOwogfQogCi0vKiBDaGVja2luZyBmb3Igb3ZlcmZsb3cgaW4gUHlPU19zdHJ0b2wgaXMgYSBQSVRBIHNpbmNlIEMgZG9lc24ndCBkZWZpbmUKLSAqIGFueXRoaW5nIGFib3V0IHdoYXQgaGFwcGVucyB3aGVuIGEgc2lnbmVkIGludGVnZXIgb3BlcmF0aW9uIG92ZXJmbG93cywKLSAqIGFuZCBzb21lIGNvbXBpbGVycyB0aGluayB0aGV5J3JlIGRvaW5nIHlvdSBhIGZhdm9yIGJ5IGJlaW5nICJjbGV2ZXIiCi0gKiB0aGVuLiAgUHl0aG9uIGFzc3VtZXMgYSAyJ3MtY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiwgc28gdGhhdCB0aGUgYml0Ci0gKiBwYXR0ZXJuIGZvciB0aGUgbGFyZ2VzdCBwb3N0aXZlIHNpZ25lZCBsb25nIGlzIExPTkdfTUFYLCBhbmQgZm9yCi0gKiB0aGUgc21hbGxlc3QgbmVnYXRpdmUgc2lnbmVkIGxvbmcgaXMgTE9OR19NQVggKyAxLgorLyogQ2hlY2tpbmcgZm9yIG92ZXJmbG93IGluIFB5T1Nfc3RydG9sIGlzIGEgUElUQTsgc2VlIGNvbW1lbnRzCisgKiBhYm91dCBQWV9BQlNfTE9OR19NSU4gaW4gbG9uZ29iamVjdC5jLgogICovCisjZGVmaW5lIFBZX0FCU19MT05HX01JTgkJKDAtKHVuc2lnbmVkIGxvbmcpTE9OR19NSU4pCiAKIGxvbmcKIFB5T1Nfc3RydG9sKGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCkBAIC0yMjQsOCArMjIxLDcgQEAKIAkJaWYgKHNpZ24gPT0gJy0nKQogCQkJcmVzdWx0ID0gLXJlc3VsdDsKIAl9Ci0JZWxzZSBpZiAoc2lnbiA9PSAnLScgJiYgdXJlc3VsdCA9PSAodW5zaWduZWQgbG9uZylMT05HX01BWCArIDEpIHsKLQkJYXNzZXJ0KExPTkdfTUlOID09IC1MT05HX01BWC0xKTsKKwllbHNlIGlmIChzaWduID09ICctJyAmJiB1cmVzdWx0ID09IFBZX0FCU19MT05HX01JTikgewogCQlyZXN1bHQgPSBMT05HX01JTjsKIAl9CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9QeXRob24vcGVlcGhvbGUuYyBiL1B5dGhvbi9wZWVwaG9sZS5jCmluZGV4IDE0NTk5NjAuLjI4ZTRjNGMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9wZWVwaG9sZS5jCisrKyBiL1B5dGhvbi9wZWVwaG9sZS5jCkBAIC01MTQsNiArNTE0LDEzIEBACiAJCQljYXNlIFNFVFVQX0VYQ0VQVDoKIAkJCWNhc2UgU0VUVVBfRklOQUxMWToKIAkJCQl0Z3QgPSBHRVRKVU1QVEdUKGNvZGVzdHIsIGkpOworCQkJCS8qIFJlcGxhY2UgSlVNUF8qIHRvIGEgUkVUVVJOIGludG8ganVzdCBhIFJFVFVSTiAqLworCQkJCWlmIChVTkNPTkRJVElPTkFMX0pVTVAob3Bjb2RlKSAmJgorCQkJCSAgICBjb2Rlc3RyW3RndF0gPT0gUkVUVVJOX1ZBTFVFKSB7CisJCQkJCWNvZGVzdHJbaV0gPSBSRVRVUk5fVkFMVUU7CisJCQkJCW1lbXNldChjb2Rlc3RyK2krMSwgTk9QLCAyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQogCQkJCWlmICghVU5DT05ESVRJT05BTF9KVU1QKGNvZGVzdHJbdGd0XSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCXRndHRndCA9IEdFVEpVTVBUR1QoY29kZXN0ciwgdGd0KTsKQEAgLTUzMSwxMiArNTM4LDE2IEBACiAJCQkJZ290byBleGl0VW5jaGFuZ2VkOwogCiAJCQkJLyogUmVwbGFjZSBSRVRVUk4gTE9BRF9DT05TVCBOb25lIFJFVFVSTiB3aXRoIGp1c3QgUkVUVVJOICovCisJCQkJLyogUmVtb3ZlIHVucmVhY2hhYmxlIEpVTVBzIGFmdGVyIFJFVFVSTiAqLwogCQkJY2FzZSBSRVRVUk5fVkFMVUU6Ci0JCQkJaWYgKGkrNCA+PSBjb2RlbGVuICB8fAotCQkJCSAgICBjb2Rlc3RyW2krNF0gIT0gUkVUVVJOX1ZBTFVFCSB8fAotCQkJCSAgICAhSVNCQVNJQ0JMT0NLKGJsb2NrcyxpLDUpKQorCQkJCWlmIChpKzQgPj0gY29kZWxlbikKIAkJCQkJY29udGludWU7Ci0JCQkJbWVtc2V0KGNvZGVzdHIraSsxLCBOT1AsIDQpOworCQkJCWlmIChjb2Rlc3RyW2krNF0gPT0gUkVUVVJOX1ZBTFVFICYmCisJCQkJICAgIElTQkFTSUNCTE9DSyhibG9ja3MsaSw1KSkKKwkJCQkJbWVtc2V0KGNvZGVzdHIraSsxLCBOT1AsIDQpOworCQkJCWVsc2UgaWYgKFVOQ09ORElUSU9OQUxfSlVNUChjb2Rlc3RyW2krMV0pICYmCisJCQkJICAgICAgICAgSVNCQVNJQ0JMT0NLKGJsb2NrcyxpLDQpKQorCQkJCQltZW1zZXQoY29kZXN0citpKzEsIE5PUCwgMyk7CiAJCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9QeXRob24vcHlzdGF0ZS5jIGIvUHl0aG9uL3B5c3RhdGUuYwppbmRleCBmNTkxYTU5Li5jYzI1ZTNlIDEwMDY0NAotLS0gYS9QeXRob24vcHlzdGF0ZS5jCisrKyBiL1B5dGhvbi9weXN0YXRlLmMKQEAgLTMwOSw5ICszMDksMTQgQEAKIAkqLwogI2lmIGRlZmluZWQoUHlfREVCVUcpICYmIGRlZmluZWQoV0lUSF9USFJFQUQpCiAJaWYgKG5ld3RzKSB7CisJCS8qIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIFB5RXZhbF9SZXN0b3JlVGhyZWFkKCkuIFNpbWlsYXIKKwkJICAgdG8gaXQsIHdlIG5lZWQgdG8gZW5zdXJlIGVycm5vIGRvZXNuJ3QgY2hhbmdlLgorCQkqLworCQlpbnQgZXJyID0gZXJybm87CiAJCVB5VGhyZWFkU3RhdGUgKmNoZWNrID0gUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKTsKIAkJaWYgKGNoZWNrICYmIGNoZWNrLT5pbnRlcnAgPT0gbmV3dHMtPmludGVycCAmJiBjaGVjayAhPSBuZXd0cykKIAkJCVB5X0ZhdGFsRXJyb3IoIkludmFsaWQgdGhyZWFkIHN0YXRlIGZvciB0aGlzIHRocmVhZCIpOworCQllcnJubyA9IGVycjsKIAl9CiAjZW5kaWYKIAlyZXR1cm4gb2xkdHM7CkBAIC00OTYsNyArNTAxLDcgQEAKIHsKIAlQeVRocmVhZF9kZWxldGVfa2V5KGF1dG9UTFNrZXkpOwogCWF1dG9UTFNrZXkgPSAwOwotCWF1dG9JbnRlcnByZXRlclN0YXRlID0gTlVMTDs7CisJYXV0b0ludGVycHJldGVyU3RhdGUgPSBOVUxMOwogfQogCiAvKiBXaGVuIGEgdGhyZWFkIHN0YXRlIGlzIGNyZWF0ZWQgZm9yIGEgdGhyZWFkIGJ5IHNvbWUgbWVjaGFuaXNtIG90aGVyIHRoYW4KQEAgLTUwNCw3ICs1MDksNyBAQAogICAgaXQgc28gaXQgZG9lc24ndCB0cnkgdG8gY3JlYXRlIGFub3RoZXIgdGhyZWFkIHN0YXRlIGZvciB0aGUgdGhyZWFkICh0aGlzIGlzCiAgICBhIGJldHRlciBmaXggZm9yIFNGIGJ1ZyAjMTAxMDY3NyB0aGFuIHRoZSBmaXJzdCBvbmUgYXR0ZW1wdGVkKS4KICovCi12b2lkCitzdGF0aWMgdm9pZAogX1B5R0lMU3RhdGVfTm90ZVRocmVhZFN0YXRlKFB5VGhyZWFkU3RhdGUqIHRzdGF0ZSkKIHsKIAkvKiBJZiBhdXRvVExTa2V5IGlzIDAsIHRoaXMgbXVzdCBiZSB0aGUgdmVyeSBmaXJzdCB0aHJlYWRzdGF0ZSBjcmVhdGVkCmRpZmYgLS1naXQgYS9QeXRob24vcHl0aG9ucnVuLmMgYi9QeXRob24vcHl0aG9ucnVuLmMKaW5kZXggZTE3MDA5MC4uMTVmYWQ4MSAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5dGhvbnJ1bi5jCisrKyBiL1B5dGhvbi9weXRob25ydW4uYwpAQCAtNTI3LDExICs1MjcsMTUgQEAKIAliaW1vZCA9IF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uKCJfX2J1aWx0aW5fXyIsICJfX2J1aWx0aW5fXyIpOwogCWlmIChiaW1vZCAhPSBOVUxMKSB7CiAJCWludGVycC0+YnVpbHRpbnMgPSBQeU1vZHVsZV9HZXREaWN0KGJpbW9kKTsKKwkJaWYgKGludGVycC0+YnVpbHRpbnMgPT0gTlVMTCkKKwkJCWdvdG8gaGFuZGxlX2Vycm9yOwogCQlQeV9JTkNSRUYoaW50ZXJwLT5idWlsdGlucyk7CiAJfQogCXN5c21vZCA9IF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uKCJzeXMiLCAic3lzIik7CiAJaWYgKGJpbW9kICE9IE5VTEwgJiYgc3lzbW9kICE9IE5VTEwpIHsKIAkJaW50ZXJwLT5zeXNkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChzeXNtb2QpOworCQlpZiAoaW50ZXJwLT5zeXNkaWN0ID09IE5VTEwpCisJCQlnb3RvIGhhbmRsZV9lcnJvcjsKIAkJUHlfSU5DUkVGKGludGVycC0+c3lzZGljdCk7CiAJCVB5U3lzX1NldFBhdGgoUHlfR2V0UGF0aCgpKTsKIAkJUHlEaWN0X1NldEl0ZW1TdHJpbmcoaW50ZXJwLT5zeXNkaWN0LCAibW9kdWxlcyIsCkBAIC01NDUsNiArNTQ5LDcgQEAKIAlpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAJCXJldHVybiB0c3RhdGU7CiAKK2hhbmRsZV9lcnJvcjoKIAkvKiBPb3BzLCBpdCBkaWRuJ3Qgd29yay4gIFVuZG8gaXQgYWxsLiAqLwogCiAJUHlFcnJfUHJpbnQoKTsKQEAgLTcxOCw2ICs3MjMsMTUgQEAKIAkoKGZsYWdzKSA/ICgoKChmbGFncyktPmNmX2ZsYWdzICYgUHlDRl9ET05UX0lNUExZX0RFREVOVCkgPyBcCiAJCSAgICAgIFB5UEFSU0VfRE9OVF9JTVBMWV9ERURFTlQgOiAwKSkgOiAwKQogCisjaWYgMAorLyogS2VlcCBhbiBleGFtcGxlIG9mIGZsYWdzIHdpdGggZnV0dXJlIGtleXdvcmQgc3VwcG9ydC4gKi8KKyNkZWZpbmUgUEFSU0VSX0ZMQUdTKGZsYWdzKSBcCisJKChmbGFncykgPyAoKCgoZmxhZ3MpLT5jZl9mbGFncyAmIFB5Q0ZfRE9OVF9JTVBMWV9ERURFTlQpID8gXAorCQkgICAgICBQeVBBUlNFX0RPTlRfSU1QTFlfREVERU5UIDogMCkgXAorCQkgICAgfCAoKGZsYWdzKS0+Y2ZfZmxhZ3MgJiBDT19GVVRVUkVfV0lUSF9TVEFURU1FTlQgPyBcCisJCSAgICAgICBQeVBBUlNFX1dJVEhfSVNfS0VZV09SRCA6IDApKSA6IDApCisjZW5kaWYKKwogaW50CiBQeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKZGlmZiAtLWdpdCBhL1B5dGhvbi9zdHJ1Y3RtZW1iZXIuYyBiL1B5dGhvbi9zdHJ1Y3RtZW1iZXIuYwppbmRleCA2ODhhNGI4Li4yYmI2ZTRlIDEwMDY0NAotLS0gYS9QeXRob24vc3RydWN0bWVtYmVyLmMKKysrIGIvUHl0aG9uL3N0cnVjdG1lbWJlci5jCkBAIC02MiwyOSArNjIsMjggQEAKIAlhZGRyICs9IGwtPm9mZnNldDsKIAlzd2l0Y2ggKGwtPnR5cGUpIHsKIAljYXNlIFRfQllURToKLQkJdiA9IFB5SW50X0Zyb21Mb25nKAotCQkJKGxvbmcpICgoKCooY2hhciopYWRkciAmIDB4ZmYpIF4gMHg4MCkgLSAweDgwKSk7CisJCXYgPSBQeUludF9Gcm9tTG9uZygqKGNoYXIqKWFkZHIpOwogCQlicmVhazsKIAljYXNlIFRfVUJZVEU6Ci0JCXYgPSBQeUludF9Gcm9tTG9uZygobG9uZykgKihjaGFyKilhZGRyICYgMHhmZik7CisJCXYgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygqKHVuc2lnbmVkIGNoYXIqKWFkZHIpOwogCQlicmVhazsKIAljYXNlIFRfU0hPUlQ6Ci0JCXYgPSBQeUludF9Gcm9tTG9uZygobG9uZykgKihzaG9ydCopYWRkcik7CisJCXYgPSBQeUludF9Gcm9tTG9uZygqKHNob3J0KilhZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBUX1VTSE9SVDoKLQkJdiA9IFB5SW50X0Zyb21Mb25nKChsb25nKSAqKHVuc2lnbmVkIHNob3J0KilhZGRyKTsKKwkJdiA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCoodW5zaWduZWQgc2hvcnQqKWFkZHIpOwogCQlicmVhazsKIAljYXNlIFRfSU5UOgotCQl2ID0gUHlJbnRfRnJvbUxvbmcoKGxvbmcpICooaW50KilhZGRyKTsKKwkJdiA9IFB5SW50X0Zyb21Mb25nKCooaW50KilhZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBUX1VJTlQ6Ci0JCXYgPSBQeUludF9Gcm9tTG9uZygobG9uZykgKih1bnNpZ25lZCBpbnQqKWFkZHIpOworCQl2ID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKih1bnNpZ25lZCBpbnQqKWFkZHIpOwogCQlicmVhazsKIAljYXNlIFRfTE9ORzoKIAkJdiA9IFB5SW50X0Zyb21Mb25nKCoobG9uZyopYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgVF9VTE9ORzoKLQkJdiA9IFB5TG9uZ19Gcm9tRG91YmxlKChkb3VibGUpICoodW5zaWduZWQgbG9uZyopYWRkcik7CisJCXYgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygqKHVuc2lnbmVkIGxvbmcqKWFkZHIpOwogCQlicmVhazsKIAljYXNlIFRfRkxPQVQ6CiAJCXYgPSBQeUZsb2F0X0Zyb21Eb3VibGUoKGRvdWJsZSkqKGZsb2F0KilhZGRyKTsKQEAgLTE3OSw2OCArMTc4LDEwNyBAQAogCX0KIAlhZGRyICs9IGwtPm9mZnNldDsKIAlzd2l0Y2ggKGwtPnR5cGUpIHsKLQljYXNlIFRfQllURToKLQljYXNlIFRfVUJZVEU6Ci0JCWlmICghUHlJbnRfQ2hlY2sodikpIHsKLQkJCVB5RXJyX0JhZEFyZ3VtZW50KCk7CisJY2FzZSBUX0JZVEU6eworCQlsb25nIGxvbmdfdmFsOworCQlsb25nX3ZhbCA9IFB5SW50X0FzTG9uZyh2KTsKKwkJaWYgKChsb25nX3ZhbCA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKIAkJCXJldHVybiAtMTsKLQkJfQotCQkqKGNoYXIqKWFkZHIgPSAoY2hhcikgUHlJbnRfQXNMb25nKHYpOworCQkvKiBYWFg6IEZvciBjb21wYXRpYmlsaXR5LCBvbmx5IHdhcm4gYWJvdXQgdHJ1bmNhdGlvbnMKKwkJICAgZm9yIG5vdy4gKi8KKwkJaWYgKChsb25nX3ZhbCA+IENIQVJfTUFYKSB8fCAobG9uZ192YWwgPCBDSEFSX01JTikpCisJCQlQeUVycl9XYXJuKFB5RXhjX1J1bnRpbWVXYXJuaW5nLCAiVHJ1bmNhdGlvbiBvZiB2YWx1ZSB0byBjaGFyIik7CisJCSooY2hhciopYWRkciA9IChjaGFyKWxvbmdfdmFsOwogCQlicmVhazsKLQljYXNlIFRfU0hPUlQ6Ci0JY2FzZSBUX1VTSE9SVDoKLQkJaWYgKCFQeUludF9DaGVjayh2KSkgewotCQkJUHlFcnJfQmFkQXJndW1lbnQoKTsKLQkJCXJldHVybiAtMTsKIAkJfQotCQkqKHNob3J0KilhZGRyID0gKHNob3J0KSBQeUludF9Bc0xvbmcodik7Ci0JCWJyZWFrOwotCWNhc2UgVF9VSU5UOgotCWNhc2UgVF9JTlQ6Ci0JCWlmICghUHlJbnRfQ2hlY2sodikpIHsKLQkJCVB5RXJyX0JhZEFyZ3VtZW50KCk7CisJY2FzZSBUX1VCWVRFOnsKKwkJbG9uZyBsb25nX3ZhbDsKKwkJbG9uZ192YWwgPSBQeUludF9Bc0xvbmcodik7CisJCWlmICgobG9uZ192YWwgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCiAJCQlyZXR1cm4gLTE7CisJCWlmICgobG9uZ192YWwgPiBVQ0hBUl9NQVgpIHx8IChsb25nX3ZhbCA8IDApKQorCQkJUHlFcnJfV2FybihQeUV4Y19SdW50aW1lV2FybmluZywgIlRydW5jYXRpb24gb2YgdmFsdWUgdG8gdW5zaWduZWQgY2hhciIpOworCQkqKHVuc2lnbmVkIGNoYXIqKWFkZHIgPSAodW5zaWduZWQgY2hhcilsb25nX3ZhbDsKKwkJYnJlYWs7CiAJCX0KLQkJKihpbnQqKWFkZHIgPSAoaW50KSBQeUludF9Bc0xvbmcodik7Ci0JCWJyZWFrOwotCWNhc2UgVF9MT05HOgotCQlpZiAoIVB5SW50X0NoZWNrKHYpKSB7Ci0JCQlQeUVycl9CYWRBcmd1bWVudCgpOworCWNhc2UgVF9TSE9SVDp7CisJCWxvbmcgbG9uZ192YWw7CisJCWxvbmdfdmFsID0gUHlJbnRfQXNMb25nKHYpOworCQlpZiAoKGxvbmdfdmFsID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQogCQkJcmV0dXJuIC0xOworCQlpZiAoKGxvbmdfdmFsID4gU0hSVF9NQVgpIHx8IChsb25nX3ZhbCA8IFNIUlRfTUlOKSkKKwkJCVB5RXJyX1dhcm4oUHlFeGNfUnVudGltZVdhcm5pbmcsICJUcnVuY2F0aW9uIG9mIHZhbHVlIHRvIHNob3J0Iik7CisJCSooc2hvcnQqKWFkZHIgPSAoc2hvcnQpbG9uZ192YWw7CisJCWJyZWFrOwogCQl9Ci0JCSoobG9uZyopYWRkciA9IFB5SW50X0FzTG9uZyh2KTsKLQkJYnJlYWs7Ci0JY2FzZSBUX1VMT05HOgotCQlpZiAoUHlJbnRfQ2hlY2sodikpCi0JCQkqKGxvbmcqKWFkZHIgPSBQeUludF9Bc0xvbmcodik7Ci0JCWVsc2UgaWYgKFB5TG9uZ19DaGVjayh2KSkKLQkJCSoobG9uZyopYWRkciA9IFB5TG9uZ19Bc0xvbmcodik7Ci0JCWVsc2UgewotCQkJUHlFcnJfQmFkQXJndW1lbnQoKTsKKwljYXNlIFRfVVNIT1JUOnsKKwkJbG9uZyBsb25nX3ZhbDsKKwkJbG9uZ192YWwgPSBQeUludF9Bc0xvbmcodik7CisJCWlmICgobG9uZ192YWwgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCiAJCQlyZXR1cm4gLTE7CisJCWlmICgobG9uZ192YWwgPiBVU0hSVF9NQVgpIHx8IChsb25nX3ZhbCA8IDApKQorCQkJUHlFcnJfV2FybihQeUV4Y19SdW50aW1lV2FybmluZywgIlRydW5jYXRpb24gb2YgdmFsdWUgdG8gdW5zaWduZWQgc2hvcnQiKTsKKwkJKih1bnNpZ25lZCBzaG9ydCopYWRkciA9ICh1bnNpZ25lZCBzaG9ydClsb25nX3ZhbDsKKwkJYnJlYWs7CisJCX0KKyAgCWNhc2UgVF9JTlQ6eworCQlsb25nIGxvbmdfdmFsOworCQlsb25nX3ZhbCA9IFB5SW50X0FzTG9uZyh2KTsKKwkJaWYgKChsb25nX3ZhbCA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKChsb25nX3ZhbCA+IElOVF9NQVgpIHx8IChsb25nX3ZhbCA8IElOVF9NSU4pKQorCQkJUHlFcnJfV2FybihQeUV4Y19SdW50aW1lV2FybmluZywgIlRydW5jYXRpb24gb2YgdmFsdWUgdG8gaW50Iik7CisJCSooaW50ICopYWRkciA9IChpbnQpbG9uZ192YWw7CisJCWJyZWFrOworCQl9CisJY2FzZSBUX1VJTlQ6eworCQl1bnNpZ25lZCBsb25nIHVsb25nX3ZhbDsKKwkJdWxvbmdfdmFsID0gUHlMb25nX0FzVW5zaWduZWRMb25nKHYpOworCQlpZiAoKHVsb25nX3ZhbCA9PSAodW5zaWduZWQgaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisJCQkvKiBYWFg6IEZvciBjb21wYXRpYmlsaXR5LCBhY2NlcHQgbmVnYXRpdmUgaW50IHZhbHVlcworCQkJICAgYXMgd2VsbC4gKi8KKwkJCVB5RXJyX0NsZWFyKCk7CisJCQl1bG9uZ192YWwgPSBQeUxvbmdfQXNMb25nKHYpOworCQkJaWYgKCh1bG9uZ192YWwgPT0gKHVuc2lnbmVkIGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKwkJCQlyZXR1cm4gLTE7CisJCQlQeUVycl9XYXJuKFB5RXhjX1J1bnRpbWVXYXJuaW5nLCAiV3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSBpbnRvIHVuc2lnbmVkIGZpZWxkIik7CisJCX0KKwkJaWYgKHVsb25nX3ZhbCA+IFVJTlRfTUFYKQorCQkJUHlFcnJfV2FybihQeUV4Y19SdW50aW1lV2FybmluZywgIlRydW5jYXRpb24gb2YgdmFsdWUgdG8gdW5zaWduZWQgaW50Iik7CisJCSoodW5zaWduZWQgaW50ICopYWRkciA9ICh1bnNpZ25lZCBpbnQpdWxvbmdfdmFsOworCQlicmVhazsKKwkJfQorCWNhc2UgVF9MT05HOnsKKwkJKihsb25nKilhZGRyID0gUHlMb25nX0FzTG9uZyh2KTsKKwkJaWYgKCgqKGxvbmcqKWFkZHIgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisJCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCQl9CisJY2FzZSBUX1VMT05HOnsKKwkJKih1bnNpZ25lZCBsb25nKilhZGRyID0gUHlMb25nX0FzVW5zaWduZWRMb25nKHYpOworCQlpZiAoKCoodW5zaWduZWQgbG9uZyopYWRkciA9PSAodW5zaWduZWQgbG9uZyktMSkKKwkJICAgICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKwkJCS8qIFhYWDogRm9yIGNvbXBhdGliaWxpdHksIGFjY2VwdCBuZWdhdGl2ZSBpbnQgdmFsdWVzCisJCQkgICBhcyB3ZWxsLiAqLworCQkJUHlFcnJfQ2xlYXIoKTsKKwkJCSoodW5zaWduZWQgbG9uZyopYWRkciA9IFB5TG9uZ19Bc0xvbmcodik7CisJCQlpZiAoKCoodW5zaWduZWQgbG9uZyopYWRkciA9PSAodW5zaWduZWQgaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorCQkJCXJldHVybiAtMTsKKwkJCVB5RXJyX1dhcm4oUHlFeGNfUnVudGltZVdhcm5pbmcsICJXcml0aW5nIG5lZ2F0aXZlIHZhbHVlIGludG8gdW5zaWduZWQgZmllbGQiKTsKIAkJfQogCQlicmVhazsKLQljYXNlIFRfRkxPQVQ6Ci0JCWlmIChQeUludF9DaGVjayh2KSkKLQkJCSooZmxvYXQqKWFkZHIgPQotCQkJCShmbG9hdCkgUHlJbnRfQXNMb25nKHYpOwotCQllbHNlIGlmIChQeUZsb2F0X0NoZWNrKHYpKQotCQkJKihmbG9hdCopYWRkciA9Ci0JCQkJKGZsb2F0KSBQeUZsb2F0X0FzRG91YmxlKHYpOwotCQllbHNlIHsKLQkJCVB5RXJyX0JhZEFyZ3VtZW50KCk7Ci0JCQlyZXR1cm4gLTE7CiAJCX0KKwljYXNlIFRfRkxPQVQ6eworCQlkb3VibGUgZG91YmxlX3ZhbDsKKwkJZG91YmxlX3ZhbCA9IFB5RmxvYXRfQXNEb3VibGUodik7CisJCWlmICgoZG91YmxlX3ZhbCA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKwkJCXJldHVybiAtMTsKKwkJKihmbG9hdCopYWRkciA9IChmbG9hdClkb3VibGVfdmFsOwogCQlicmVhazsKKwkJfQogCWNhc2UgVF9ET1VCTEU6Ci0JCWlmIChQeUludF9DaGVjayh2KSkKLQkJCSooZG91YmxlKilhZGRyID0gKGRvdWJsZSkgUHlJbnRfQXNMb25nKHYpOwotCQllbHNlIGlmIChQeUZsb2F0X0NoZWNrKHYpKQotCQkJKihkb3VibGUqKWFkZHIgPSBQeUZsb2F0X0FzRG91YmxlKHYpOwotCQllbHNlIHsKLQkJCVB5RXJyX0JhZEFyZ3VtZW50KCk7CisJCSooZG91YmxlKilhZGRyID0gUHlGbG9hdF9Bc0RvdWJsZSh2KTsKKwkJaWYgKCgqKGRvdWJsZSopYWRkciA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKIAkJCXJldHVybiAtMTsKLQkJfQogCQlicmVhazsKIAljYXNlIFRfT0JKRUNUOgogCWNhc2UgVF9PQkpFQ1RfRVg6CmRpZmYgLS1naXQgYS9QeXRob24vc3lzbW9kdWxlLmMgYi9QeXRob24vc3lzbW9kdWxlLmMKaW5kZXggYTJkZjY2OS4uYjc0YTQ0MCAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5c21vZHVsZS5jCisrKyBiL1B5dGhvbi9zeXNtb2R1bGUuYwpAQCAtOTc5LDYgKzk3OSw4IEBACiAKIAlicl9zdGFydCA9IHB5dGhvbiArIDg7CiAJYnJfZW5kID0gc3RyY2hyKGJyX3N0YXJ0LCAnLycpOworCWFzc2VydChicl9lbmQpOworCiAJLyogV29ya3MgZXZlbiBmb3IgdHJ1bmssCiAJICAgYXMgd2UgYXJlIGluIHRydW5rL1B5dGhvbi9zeXNtb2R1bGUuYyAqLwogCWJyX2VuZDIgPSBzdHJjaHIoYnJfZW5kKzEsICcvJyk7CkBAIC05OTEsNiArOTkzLDggQEAKIAl9CiAJZWxzZSBpZiAoaXN0YWcgfHwgc3RybmNtcChicl9zdGFydCwgImJyYW5jaGVzIiwgOCkgPT0gMCkgewogCQlsZW4gPSBicl9lbmQyIC0gYnJfc3RhcnQ7CisJCWFzc2VydChsZW4gPj0gMTMpOworCQlhc3NlcnQobGVuIDwgKHNpemVvZihwYXRjaGxldmVsX3JldmlzaW9uKSAtIDEzKSk7CiAJCXN0cm5jcHkoYnJhbmNoLCBicl9zdGFydCwgbGVuKTsKIAkJYnJhbmNoW2xlbl0gPSAnXDAnOwogCkBAIC0xMjIxLDcgKzEyMjUsNyBAQAogCQlwID0gc3RyY2hyKHBhdGgsIGRlbGltKTsKIAkJaWYgKHAgPT0gTlVMTCkKIAkJCXAgPSBzdHJjaHIocGF0aCwgJ1wwJyk7IC8qIEVuZCBvZiBzdHJpbmcgKi8KLQkJdyA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHBhdGgsIChpbnQpIChwIC0gcGF0aCkpOworCQl3ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUocGF0aCwgKFB5X3NzaXplX3QpIChwIC0gcGF0aCkpOwogCQlpZiAodyA9PSBOVUxMKSB7CiAJCQlQeV9ERUNSRUYodik7CiAJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCBjMWYwYTQ4Li5lZDZiMTM5IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0yMzEsNiArMjMxLDExIEBACiBhdmFpbGFibGUgZm9yIGFsbCBtb2Rlcm4gc3lzdGVtcywgZWl0aGVyIGluIHRoZSBmb3JtIG9mIHVwZGF0ZWQKIGNvbXBpbGVycyBmcm9tIHRoZSB2ZW5kb3IsIG9yIG9uZSBvZiB0aGUgZnJlZSBjb21waWxlcnMgKGdjYykuCiAKK0lmICJtYWtlIGluc3RhbGwiIGZhaWxzIG15c3RlcmlvdXNseSBkdXJpbmcgdGhlICJjb21waWxpbmcgdGhlIGxpYnJhcnkiCitzdGVwLCBtYWtlIHN1cmUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBhbnkgb2YgdGhlIFBZVEhPTlBBVEggb3IgUFlUSE9OSE9NRQorZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCwgYXMgdGhleSBtYXkgaW50ZXJmZXJlIHdpdGggdGhlIG5ld2x5IGJ1aWx0CitleGVjdXRhYmxlIHdoaWNoIGlzIGNvbXBpbGluZyB0aGUgbGlicmFyeS4KKwogVW5zdXBwb3J0ZWQgc3lzdGVtcwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpLnB5IGIvVG9vbHMvbXNpL21zaS5weQppbmRleCA4YTcyZWI5Li5jNDliYjg0IDEwMDY0NAotLS0gYS9Ub29scy9tc2kvbXNpLnB5CisrKyBiL1Rvb2xzL21zaS9tc2kucHkKQEAgLTg3Miw2ICs4NzIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj12ZXJzaW9uLCBsYW5ndWFnZT1sYW5nKQogICAgIHRtcGZpbGVzLmFwcGVuZCgibXN2Y3I3MS5kbGwiKQogCisgICAgIyBDaGVjayBpZiBfY3R5cGVzLnB5ZCBleGlzdHMKKyAgICBoYXZlX2N0eXBlcyA9IG9zLnBhdGguZXhpc3RzKHNyY2RpcisiL1BDQnVpbGQvX2N0eXBlcy5weWQiKQorICAgIGlmIG5vdCBoYXZlX2N0eXBlczoKKyAgICAgICAgcHJpbnQgIldBUk5JTkc6IF9jdHlwZXMucHlkIG5vdCBmb3VuZCwgY3R5cGVzIHdpbGwgbm90IGJlIGluY2x1ZGVkIgorICAgICAgICBleHRlbnNpb25zLnJlbW92ZSgiX2N0eXBlcy5weWQiKQorCiAgICAgIyBBZGQgYWxsIC5weSBmaWxlcyBpbiBMaWIsIGV4Y2VwdCBsaWItdGssIHRlc3QKICAgICBkaXJzPXt9CiAgICAgcHlkaXJzID0gWyhyb290LCJMaWIiKV0KQEAgLTg4OSw2ICs4OTUsOCBAQAogICAgICAgICAgICAgIyBkYXRhOiBMaWIvZW1haWwvdGVzdAogICAgICAgICAgICAgIyBvdXRwdXQ6IExpYi90ZXN0CiAgICAgICAgICAgICB0ZXN0c3VpdGUuc2V0X2N1cnJlbnQoKQorICAgICAgICBlbGlmIG5vdCBoYXZlX2N0eXBlcyBhbmQgZGlyID09ICJjdHlwZXMiOgorICAgICAgICAgICAgY29udGludWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRlZmF1bHRfZmVhdHVyZS5zZXRfY3VycmVudCgpCiAgICAgICAgIGxpYiA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHBhcmVudCwgZGlyLCBkaXIsICIlc3wlcyIgJSAocGFyZW50Lm1ha2Vfc2hvcnQoZGlyKSwgZGlyKSkKQEAgLTkxMyw2ICs5MjEsNyBAQAogICAgICAgICAgICAgbGliLmFkZF9maWxlKCIxODV0ZXN0LmRiIikKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiYXVkaW90ZXN0LmF1IikKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiY2ZncGFyc2VyLjEiKQorICAgICAgICAgICAgbGliLmFkZF9maWxlKCJzZ21sX2lucHV0Lmh0bWwiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ0ZXN0LnhtbCIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInRlc3QueG1sLm91dCIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInRlc3R0YXIudGFyIikKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS91dWlkcy5weSBiL1Rvb2xzL21zaS91dWlkcy5weQppbmRleCAzMDY0OTc1Li4wOTM5NjQ5IDEwMDY0NAotLS0gYS9Ub29scy9tc2kvdXVpZHMucHkKKysrIGIvVG9vbHMvbXNpL3V1aWRzLnB5CkBAIC0yMiw2ICsyMiw4IEBACiAgICAgJzIuNC4yMTUwJzone2IxOTFlNDljLWVhMjMtNDNiMi1iMjhhLTE0ZTA3ODQwNjliOH0nLCAjIDIuNC4yCiAgICAgJzIuNC4zMTIxJzone2Y2NjllZDRkLTFkY2UtNDFjNC05NjE3LWQ5ODUzOTcxODdhMX0nLCAjIDIuNC4zYzEKICAgICAnMi40LjMxNTAnOid7NzVlNzFhZGQtMDQyYy00ZjMwLWJmYWMtYTllYzQyMzUxMzEzfScsICMgMi40LjMKKyAgICAnMi40LjQxMjEnOid7Y2QyODYyZGItMjJhNC00Njg4LTg3NzItODU0MDdlYTIxNTUwfScsICMgMi40LjRjMQorICAgICcyLjQuNDE1MCc6J3s2MGUyYzhjOS02Y2YzLTRiMWEtOTYxOC1lMzA0OTQ2Yzk0ZTZ9JywgIyAyLjQuNAogICAgICcyLjUuMTAxJzogJ3tiYzE0Y2UzZS01ZTcyLTRhNjQtYWMxZi1iZjU5YTU3MTg5OGN9JywgIyAyLjVhMQogICAgICcyLjUuMTAyJzogJ3s1ZWVkNTFjMS04ZTlkLTQwNzEtOTRjNS1iNDBkZTVkNDliYTV9JywgIyAyLjVhMgogICAgICcyLjUuMTAzJzogJ3s3M2RjZDk2Ni1mZmVjLTQxNWYtYmIzOS04MzQyYzFmNDcwMTd9JywgIyAyLjVhMwpkaWZmIC0tZ2l0IGEvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5IGIvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5CmluZGV4IDM3MDE3NWEuLjM5MmZmNTAgMTAwNzU1Ci0tLSBhL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weQorKysgYi9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkKQEAgLTg4NSw3ICs4ODUsNyBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGJlbmNoLnByaW50X2JlbmNobWFyayhoaWRlbm9pc2U9aGlkZW5vaXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRuYW1lcz1saW1pdG5hbWVzKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgcmVhc29uOgogICAgICAgICAgICAgICAgIHByaW50ICcqIEVycm9yIG9wZW5pbmcvcmVhZGluZyBmaWxlICVzOiAlcycgJSAoCiAgICAgICAgICAgICAgICAgICAgIHJlcHIoc2hvd19iZW5jaCksCiAgICAgICAgICAgICAgICAgICAgIHJlYXNvbikKQEAgLTkzMSw4ICs5MzEsMTMgQEAKICAgICAgICAgICAgICAgICBiZW5jaC5uYW1lID0gcmVwb3J0ZmlsZQogICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wKGJlbmNoLGYpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCByZWFzb246CiAgICAgICAgICAgICAgICAgcHJpbnQgJyogRXJyb3Igb3BlbmluZy93cml0aW5nIHJlcG9ydGZpbGUnCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgcmVhc29uOgorICAgICAgICAgICAgICAgIHByaW50ICcqIEVycm9yIG9wZW5pbmcvd3JpdGluZyByZXBvcnRmaWxlICVzOiAlcycgJSAoCisgICAgICAgICAgICAgICAgICAgIHJlcG9ydGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHJlYXNvbikKKyAgICAgICAgICAgICAgICBwcmludAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIFB5QmVuY2hDbWRsaW5lKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkgYi9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZmluZG5vY29kaW5nLnB5IGIvVG9vbHMvc2NyaXB0cy9maW5kbm9jb2RpbmcucHkKaW5kZXggZThmYzYxOS4uNTM3ZjBhMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kbm9jb2RpbmcucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maW5kbm9jb2RpbmcucHkKQEAgLTUsNyArNSw3IEBACiBVc2FnZTogbm9jb2RpbmcucHkgZGlyMSBbZGlyMi4uLl0KICIiIgogCi1fX2F1dGhvcl9fID0gIk9sZWcgQnJveXRtYW5uLCBSZWluaG9sZCBCaXJrZW5mZWxkIgorX19hdXRob3JfXyA9ICJPbGVnIEJyb3l0bWFubiwgR2VvcmcgQnJhbmRsIgogCiBpbXBvcnQgc3lzLCBvcywgcmUsIGdldG9wdAogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3B5c291cmNlLnB5IGIvVG9vbHMvc2NyaXB0cy9weXNvdXJjZS5weQppbmRleCBkNWViNTE1Li43MWUwZGVkIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL3B5c291cmNlLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcHlzb3VyY2UucHkKQEAgLTE1LDcgKzE1LDcgQEAKIAogd2Fsa19weXRob25fZmlsZXMoKSByZWN1cnNpdmVseSBsaXN0cyBhbGwgUHl0aG9uIGZpbGVzIHVuZGVyIHRoZSBnaXZlbiBkaXJlY3Rvcmllcy4KICIiIgotX19hdXRob3JfXyA9ICJPbGVnIEJyb3l0bWFubiwgUmVpbmhvbGQgQmlya2VuZmVsZCIKK19fYXV0aG9yX18gPSAiT2xlZyBCcm95dG1hbm4sIEdlb3JnIEJyYW5kbCIKIAogX19hbGxfXyA9IFsiaGFzX3B5dGhvbl9leHQiLCAibG9va3NfbGlrZV9weXRob24iLCAiY2FuX2JlX2NvbXBpbGVkIiwgIndhbGtfcHl0aG9uX2ZpbGVzIl0KIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDAzM2JiNjguLjlmMTUzZjYgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsNyArMSw3IEBACiAjISAvYmluL3NoCi0jIEZyb20gY29uZmlndXJlLmluIFJldmlzaW9uOiA0Njc1NCAuCisjIEZyb20gY29uZmlndXJlLmluIFJldmlzaW9uOiA1MTIxMSAuCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MCBmb3IgcHl0aG9uIDMuMC4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxIGZvciBweXRob24gMy4wLgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL3d3dy5weXRob24ub3JnL3B5dGhvbi1idWdzPi4KICMKQEAgLTEzLDcgKzEzLDggQEAKICMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAogaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06CkBAIC0yMiwxMCArMjMsMTMgQEAKICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKK2VzYWMKKwogZmkKLUJJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0Ci1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKwogCiAKICMgUEFUSCBuZWVkcyBDUgpAQCAtMjE4LDcgKzIyMiw3IEBACiBlbHNlCiAgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9CiAgICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAvdXNyL2Jpbi9wb3NpeCRQQVRIX1NFUEFSQVRPUi9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCkBAIC0yMzYsNyArMjQwLDYgQEAKIAkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgogCSBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKIAkJeyAoIiRhc19zaGVsbCIpIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgpAQCAtMjQ1LDEwICsyNDgsMTIgQEAKICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKK2VzYWMKKwogZmkKLUJJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0Ci1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKIAogOgogX0FTRU9GCkBAIC0yNTYsNyArMjYxLDYgQEAKICAgQ09ORklHX1NIRUxMPSRhc19zaGVsbAogCSAgICAgICBhc19oYXZlX3JlcXVpcmVkPXllcwogCSAgICAgICBpZiB7ICIkYXNfc2hlbGwiIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgpAQCAtMjY1LDEwICsyNjksMTIgQEAKICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKK2VzYWMKKwogZmkKLUJJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0Ci1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKIAogOgogKGFzX2Z1bmNfcmV0dXJuICgpIHsKQEAgLTUxNSwxOSArNTIxLDI4IEBACiAgIGFzX21rZGlyX3A9ZmFsc2UKIGZpCiAKLSMgRmluZCBvdXQgd2hldGhlciBgYHRlc3QgLXgnJyB3b3Jrcy4gIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLCBhcwotIyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KLWNhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKLSMhIC9iaW4vc2gKLWV4aXQgMAotX0FTRU9GCi1jaG1vZCAreCBjb25mJCQuZmlsZQotaWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgoraWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCiBlbHNlCi0gIGFzX2V4ZWN1dGFibGVfcD06CisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisgICAgICAgIHRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4KKyAgICAgICAgLSopc2V0ICIuLyQxIjs7CisJZXNhYzsKKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKIGZpCi1ybSAtZiBjb25mJCQuZmlsZQorYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKIAogIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgogYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKQEAgLTU2OCwzNiArNTgzLDM2IEBACiAjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCiBhY19pbmNsdWRlc19kZWZhdWx0PSJcCiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpZiBIQVZFX1NZU19UWVBFU19ICisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAogIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRfSAorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAogIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2VuZGlmCi0jaWYgU1REQ19IRUFERVJTCisjaWZkZWYgU1REQ19IRUFERVJTCiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgogIyBpbmNsdWRlIDxzdGRkZWYuaD4KICNlbHNlCi0jIGlmIEhBVkVfU1RETElCX0gKKyMgaWZkZWYgSEFWRV9TVERMSUJfSAogIyAgaW5jbHVkZSA8c3RkbGliLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1NUUklOR19ICi0jIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAogIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CiAjIGVuZGlmCiAjIGluY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCi0jaWYgSEFWRV9TVFJJTkdTX0gKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAogIyBpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX0lOVFRZUEVTX0gKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKICMgaW5jbHVkZSA8aW50dHlwZXMuaD4KICNlbmRpZgotI2lmIEhBVkVfU1RESU5UX0gKKyNpZmRlZiBIQVZFX1NURElOVF9ICiAjIGluY2x1ZGUgPHN0ZGludC5oPgogI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAorI2lmZGVmIEhBVkVfVU5JU1REX0gKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYiCiAKQEAgLTcyNCw2ICs3MzksNyBAQAogQ0MKIENGTEFHUwogTERGTEFHUworTElCUwogQ1BQRkxBR1MKIENQUCcKIApAQCAtODMxLDEwICs4NDcsMTAgQEAKICAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQogICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKICAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvLS9fL2cnYAorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAogICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPW5vIDs7CiAKICAgLWRvY2RpciB8IC0tZG9jZGlyIHwgLS1kb2NkaSB8IC0tZG9jIHwgLS1kbykKQEAgLTg1MCwxMCArODY2LDEwIEBACiAgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCiAgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCiAgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzL1stLl0vXy9nJ2AKICAgICBldmFsIGVuYWJsZV8kYWNfZmVhdHVyZT1cJGFjX29wdGFyZyA7OwogCiAgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKQEAgLTEwNDcsMTkgKzEwNjMsMTkgQEAKICAgLXdpdGgtKiB8IC0td2l0aC0qKQogICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKICAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZSB8IHNlZCAncy9bLS5dL18vZydgCiAgICAgZXZhbCB3aXRoXyRhY19wYWNrYWdlPVwkYWNfb3B0YXJnIDs7CiAKICAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQogICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKICAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvLS9fL2cnYAorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvWy0uXS9fL2cnYAogICAgIGV2YWwgd2l0aF8kYWNfcGFja2FnZT1ubyA7OwogCiAgIC0teCkKQEAgLTEzMzksNiArMTM1NSw3IEBACiAgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKICAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCiAgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgogICBDUFBGTEFHUyAgICBDL0MrKy9PYmplY3RpdmUgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCiAgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgogICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgpAQCAtMTQwOCw3ICsxNDI1LDcgQEAKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgogcHl0aG9uIGNvbmZpZ3VyZSAzLjAKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MAorZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxCiAKIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC0xNDIyLDcgKzE0MzksNyBAQAogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAogSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjAsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYwLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACiAKQEAgLTE5ODYsNyArMjAwMywxMiBAQAogICAjIE9uIE9wZW5CU0QsIHNlbGVjdCgyKSBpcyBub3QgYXZhaWxhYmxlIGlmIF9YT1BFTl9TT1VSQ0UgaXMgZGVmaW5lZCwKICAgIyBldmVuIHRob3VnaCBzZWxlY3QgaXMgYSBQT1NJWCBmdW5jdGlvbi4gUmVwb3J0ZWQgYnkgSi4gUmliYmVucy4KICAgIyBSZWNvbmZpcm1lZCBmb3IgT3BlbkJTRCAzLjMgYnkgWmFjaGFyeSBIYW1tLCBmb3IgMy40IGJ5IEphc29uIElzaC4KLSAgT3BlbkJTRC8yLiogfCBPcGVuQlNELzMuWzAxMjM0NTY3ODldKQorICBPcGVuQlNELzIuKiB8IE9wZW5CU0QvMy5bMDEyMzQ1Njc4OV0gfCBPcGVuQlNELzQuWzBdKQorICAgIGRlZmluZV94b3Blbl9zb3VyY2U9bm87OworICAjIERlZmluaW5nIF9YT1BFTl9TT1VSQ0Ugb24gTmV0QlNEIHZlcnNpb24gcHJpb3IgdG8gdGhlIGludHJvZHVjdGlvbiBvZgorICAjIF9ORVRCU0RfU09VUkNFIGRpc2FibGVzIGNlcnRhaW4gZmVhdHVyZXMgKGVnLiBzZXRncm91cHMpLiBSZXBvcnRlZCBieQorICAjIE1hcmMgUmVjaHQKKyAgTmV0QlNELzEuNSB8IE5ldEJTRC8xLjUuKiB8IE5ldEJTRC8xLjYgfCBOZXRCU0QvMS42LiogfCBOZXRCU0QvMS42QS1TKQogICAgIGRlZmluZV94b3Blbl9zb3VyY2U9bm87OwogICAjIE9uIFNvbGFyaXMgMi42LCBzeXMvd2FpdC5oIGlzIGluY29uc2lzdGVudCBpbiB0aGUgdXNhZ2UKICAgIyBvZiB1bmlvbiBfXz9zaWd2YWwuIFJlcG9ydGVkIGJ5IFN0dWFydCBCaXNob3AuCkBAIC0yMjE4LDcgKzIyNDAsNyBAQAogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgpAQCAtMjI1OCw3ICsyMjgwLDcgQEAKICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgogICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCkBAIC0yMzE1LDcgKzIzMzcsNyBAQAogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgogICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCkBAIC0yMzU2LDcgKzIzNzgsNyBAQAogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KICAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwogICAgICAgIGNvbnRpbnVlCkBAIC0yNDE0LDcgKzI0MzYsNyBAQAogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgpAQCAtMjQ1OCw3ICsyNDgwLDcgQEAKICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCiAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKQEAgLTI1OTksNyArMjYyMSw3IEBACiAjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAogIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KICMgQXV0b2NvbmYuCi1mb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJwogZG8KICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCiAgIGNhc2UgJGFjX2ZpbGUgaW4KQEAgLTI2MjcsNiArMjY0OSwxMiBAQAogdGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CiAKIGVsc2UKKyAgYWNfZmlsZT0nJworZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2OyB9CitpZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4KICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIApAQCAtMjYzOCw4ICsyNjY2LDYgQEAKIGZpCiAKIGFjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjY7IH0KIAogIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKICMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KQEAgLTI4MTcsMjcgKzI4NDMsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY29tcGlsZXJfZ251PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjg5MiwyNyArMjkwMSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9wcm9nX2NjX2c9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yOTQ3LDI3ICsyOTM5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIDoKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTMwMDMsMjcgKzI5NzgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfcHJvZ19jY19nPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMzEzOSwyNyArMzA5NywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0zMjUwLDcgKzMxOTEsNyBAQAogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wYXRoX0NYWD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgpAQCAtMzI5MSw3ICszMjMyLDcgQEAKICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcGF0aF9DWFg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCiAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKQEAgLTMzNDAsNyArMzI4MSw3IEBACiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfcHJvZyIKICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgpAQCAtMzQzOSwxNyArMzM4MCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCiAgIDoKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTM0ODMsMTcgKzM0MTcsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgogICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgogY29udGludWUKIGVsc2UKQEAgLTM1NTgsMTcgKzM0ODUsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgogICA6CiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0zNjAyLDE3ICszNTIyLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBlbHNlCkBAIC0zNjY3LDcgKzM1ODAsNyBAQAogICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbwogICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKICAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCiAgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCiBjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCkBAIC0zNzQ5LDcgKzM2NjIsNyBAQAogICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0VHUkVQIiAmJiAkYXNfZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9FR1JFUCI7IH0gfHwgY29udGludWUKKyAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0VHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9FR1JFUCI7IH0gfHwgY29udGludWUKICAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgogICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKIGNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCkBAIC00MTU5LDcgKzQwNzIsNyBAQAogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCiAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKQEAgLTQxOTksNyArNDExMiw3IEBACiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCiAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKQEAgLTQyNTcsNyArNDE3MCw3IEBACiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQVI9IiRhY19wcm9nIgogICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCkBAIC00MzAwLDcgKzQyMTMsNyBAQAogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX1NWTlZFUlNJT049ImZvdW5kIgogICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCkBAIC00NDA0LDcgKzQzMTcsNyBAQAogICAgICMgYnkgZGVmYXVsdC4KICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCiAgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLQlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKIAkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgogCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCkBAIC00Nzg1LDYgKzQ2OTgsNjcgQEAKICAgZmkKIGZpCiAKKyMgQ2hlY2sgd2hldGhlciBHQ0Mgc3VwcG9ydHMgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQKK2lmIHRlc3QgIiRHQ0MiID0gInllcyIKK3RoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fLi4uICRFQ0hPX0MiID4mNjsgfQorICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgIHZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpOworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFIDEKK19BQ0VPRgorCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENGTEFHUz0kc2F2ZV9DRkxBR1MKK2ZpCisKICMgT24gc29tZSBjb21waWxlcnMsIHB0aHJlYWRzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBmdXJ0aGVyIG9wdGlvbnMKICMgKGUuZy4gTWFjT1MgWCkuIE9uIHNvbWUgb2YgdGhlc2Ugc3lzdGVtcywgdGhlIGNvbXBpbGVyIHdpbGwgbm90CiAjIGNvbXBsYWluIGlmIHVuYWNjZXB0ZWQgb3B0aW9ucyBhcmUgcGFzc2VkIChlLmcuIGdjYyBvbiBNYWMgT1MgWCkuCkBAIC01MTc1LDI3ICs1MTQ5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X2hlYWRlcl9zdGRjPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNTM3MSwyNyArNTMyOCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTU0NjMsMTAgKzU0MDMsMTEgQEAKIAogCiAKKwogZm9yIGFjX2hlYWRlciBpbiBhc20vdHlwZXMuaCBjb25pby5oIGN1cnNlcy5oIGRpcmVjdC5oIGRsZmNuLmggZXJybm8uaCBcCiBmY250bC5oIGdycC5oIFwKLXNoYWRvdy5oIGlvLmggbGFuZ2luZm8uaCBsaWJpbnRsLmggbmN1cnNlcy5oIHBvbGwuaCBwcm9jZXNzLmggcHRocmVhZC5oIFwKLXNpZ25hbC5oIHN0cm9wdHMuaCB0ZXJtaW9zLmggdGhyZWFkLmggXAoraW8uaCBsYW5naW5mby5oIGxpYmludGwuaCBuY3Vyc2VzLmggcG9sbC5oIHByb2Nlc3MuaCBwdGhyZWFkLmggXAorc2hhZG93Lmggc2lnbmFsLmggc3RkaW50Lmggc3Ryb3B0cy5oIHRlcm1pb3MuaCB0aHJlYWQuaCBcCiB1bmlzdGQuaCB1dGltZS5oIFwKIHN5cy9hdWRpb2lvLmggc3lzL2JzZHR0eS5oIHN5cy9maWxlLmggc3lzL2xvYWRhdmcuaCBzeXMvbG9jay5oIHN5cy9ta2Rldi5oIFwKIHN5cy9tb2RlbS5oIFwKQEAgLTU1MTIsMjcgKzU0NTMsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNTU2OCwxNyArNTQ5MiwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCiAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNTY4NiwyNyArNTYwMywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTU3NzksMjcgKzU2NzksMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9JGFjX3JlcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNTgwOCw3ICs1NjkyLDcgQEAKIAogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0CiAgIGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KICAgYnJlYWsKQEAgLTU4NzksMjcgKzU3NjMsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9JGFjX3JlcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNTkwOCw3ICs1Nzc2LDcgQEAKIAogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0CiAgIGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KICAgYnJlYWsKQEAgLTU5NjUsMjcgKzU4MzMsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oX21ha2VkZXY9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC01OTk0LDcgKzU4NDYsNyBAQAogCWFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaF9tYWtlZGV2PW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogCiBmaQpAQCAtNjAzNiwyNyArNTg4OCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC02MDkyLDE3ICs1OTI3LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC02MjAxLDI3ICs2MDI5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTYyNTcsMTcgKzYwNjgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgogICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTYzNzEsMjcgKzYxNzUsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC02NDU1LDI3ICs2MjQyLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNjU2MCwyNyArNjMzMCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9oYXNfbWFrZWRldj15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTY1ODksNyArNjM0Myw3IEBACiAJYWNfY3ZfaGFzX21ha2VkZXY9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBpZiB0ZXN0ICIkYWNfY3ZfaGFzX21ha2VkZXYiID0gIm5vIjsgdGhlbgogICAgICMgd2UgZGlkbid0IGxpbmssIHRyeSBpZiBfT1NGX1NPVVJDRSB3aWxsIGFsbG93IHVzIHRvIGxpbmsKQEAgLTY2MjQsMjcgKzYzNzgsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfaGFzX21ha2VkZXY9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC02NjUzLDcgKzYzOTEsNyBAQAogCWFjX2N2X2hhc19tYWtlZGV2PW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogICAgIGlmIHRlc3QgIiRhY19jdl9oYXNfbWFrZWRldiIgPSAieWVzIjsgdGhlbgogCkBAIC02NzE1LDI3ICs2NDUzLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIHNvbF9sZnNfYnVnPW5vCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC02ODExLDI3ICs2NTMyLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X3R5cGVfbW9kZV90PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNjg5MSwyNyArNjU5NSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl90eXBlX29mZl90PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNjk3MSwyNyArNjY1OCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl90eXBlX3BpZF90PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNzA0OSwyNyArNjcxOSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl90eXBlX3NpZ25hbD1pbnQKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTcxMjUsMjcgKzY3NzgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfdHlwZV9zaXplX3Q9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC03MjQzLDI3ICs2ODc5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X3R5cGVfc3NpemVfdD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTczMjQsMjcgKzY5NDMsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfdHlwZV9pbnQ9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC03MzU4LDE2ICs2OTYwLDE1IEBACiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludCIgPiY1CiBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnQiID4mNjsgfQogCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBpbnQiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGludC4uLiAkRUNIT19DIiA+JjY7IH0KIGlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2ludCtzZXR9IiA9IHNldDsgdGhlbgogICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnQiID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCiAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTczNzcsNyArNjk3OCw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIGludCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBpbnQgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtNzQwMSwyNyArNzAwMiwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19sbz0wIGFjX21pZD0wCiAgIHdoaWxlIDo7IGRvCiAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC03NDMxLDcgKzcwMTUsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBpbnQgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgaW50IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTc0NTUsMjcgKzcwMzksMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGk9JGFjX21pZDsgYnJlYWsKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTc1MDIsNyArNzA2OSw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIGludCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBpbnQgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtNzUyNiwyNyArNzA5MywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0tMSBhY19taWQ9LTEKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTc1NTYsNyArNzEwNiw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIGludCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBpbnQgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtNzU4MCwyNyArNzEzMCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19sbz0kYWNfbWlkOyBicmVhawogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNzYzNyw3ICs3MTcwLDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgaW50IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGludCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC03NjYxLDI3ICs3MTk0LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTc2OTQsMTEgKzcyMTAsMTUgQEAKIGRvbmUKIGNhc2UgJGFjX2xvIGluCiA/KikgYWNfY3Zfc2l6ZW9mX2ludD0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KQorJycpIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CiBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0gOzsKKyAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9pbnQ9MAorICAgZmkgOzsKIGVzYWMKIGVsc2UKICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC03NzA4LDcgKzcyMjgsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBpbnQgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgaW50IGFjX190eXBlX3NpemVvZl87CiBzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTc3NjcsMjEgKzcyODcsMjUgQEAKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAogKCBleGl0ICRhY19zdGF0dXMgKQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnQiID0geWVzOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQogZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KICAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9pbnQ9MAorICAgZmkKIGZpCiBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiBybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX2ludD0wCi1maQogZmkKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9pbnQiID4mNQogZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9pbnQiID4mNjsgfQorCisKKwogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfSU5UICRhY19jdl9zaXplb2ZfaW50CiBfQUNFT0YKQEAgLTc4MjQsMjcgKzczNDgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfdHlwZV9sb25nPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtNzg1OCwxNiArNzM2NSwxNSBAQAogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9sb25nIiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2xvbmciID4mNjsgfQogCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIiA+JjUKIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nLi4uICRFQ0hPX0MiID4mNjsgfQogaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZytzZXR9IiA9IHNldDsgdGhlbgogICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nIiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgogY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC03ODc3LDcgKzczODMsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBsb25nIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtNzkwMSwyNyArNzQwNywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19sbz0wIGFjX21pZD0wCiAgIHdoaWxlIDo7IGRvCiAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC03OTMxLDcgKzc0MjAsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBsb25nIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtNzk1NSwyNyArNzQ0NCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0kYWNfbWlkOyBicmVhawogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtODAwMiw3ICs3NDc0LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgbG9uZyBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBsb25nIGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTgwMjYsMjcgKzc0OTgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGk9LTEgYWNfbWlkPS0xCiAgIHdoaWxlIDo7IGRvCiAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC04MDU2LDcgKzc1MTEsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBsb25nIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtODA4MCwyNyArNzUzNSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19sbz0kYWNfbWlkOyBicmVhawogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtODEzNyw3ICs3NTc1LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgbG9uZyBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBsb25nIGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTgxNjEsMjcgKzc1OTksMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGk9JGFjX21pZAogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtODE5NCwxMSArNzYxNSwxNSBAQAogZG9uZQogY2FzZSAkYWNfbG8gaW4KID8qKSBhY19jdl9zaXplb2ZfbG9uZz0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKKycnKSBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nIiA9IHllczsgdGhlbgorICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CiBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9IDs7CisgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfbG9uZz0wCisgICBmaSA7OwogZXNhYwogZWxzZQogICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTgyMDgsNyArNzYzMyw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgbG9uZyBhY19fdHlwZV9zaXplb2ZfOwogc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC04MjY3LDIxICs3NjkyLDI1IEBACiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKICggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKK2lmIHRlc3QgIiRhY19jdl90eXBlX2xvbmciID0geWVzOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQogICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2xvbmc9MAorICAgZmkKIGZpCiBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiBybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX2xvbmc9MAotZmkKIGZpCiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZyIgPiY1CiBlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2xvbmciID4mNjsgfQorCisKKwogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfTE9ORyAkYWNfY3Zfc2l6ZW9mX2xvbmcKIF9BQ0VPRgpAQCAtODMyNCwyNyArNzc1MywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl90eXBlX3ZvaWRfcD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTgzNTgsMTYgKzc3NzAsMTUgQEAKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdm9pZF9wIiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3ZvaWRfcCIgPiY2OyB9CiAKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIHZvaWQgKiIgPiY1CiBlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2Ygdm9pZCAqLi4uICRFQ0hPX0MiID4mNjsgfQogaWYgdGVzdCAiJHthY19jdl9zaXplb2Zfdm9pZF9wK3NldH0iID0gc2V0OyB0aGVuCiAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRhY19jdl90eXBlX3ZvaWRfcCIgPSB5ZXM7IHRoZW4KLSAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtODM3Nyw3ICs3Nzg4LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgdm9pZCAqIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHZvaWQgKiBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC04NDAxLDI3ICs3ODEyLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPTAgYWNfbWlkPTAKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTg0MzEsNyArNzgyNSw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIHZvaWQgKiBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiB2b2lkICogYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtODQ1NSwyNyArNzg0OSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0kYWNfbWlkOyBicmVhawogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtODUwMiw3ICs3ODc5LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgdm9pZCAqIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHZvaWQgKiBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC04NTI2LDI3ICs3OTAzLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPS0xIGFjX21pZD0tMQogICB3aGlsZSA6OyBkbwogICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtODU1Niw3ICs3OTE2LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgdm9pZCAqIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHZvaWQgKiBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC04NTgwLDI3ICs3OTQwLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC04NjM3LDcgKzc5ODAsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiB2b2lkICogYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgdm9pZCAqIGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTg2NjEsMjcgKzgwMDQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGk9JGFjX21pZAogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtODY5NCwxMSArODAyMCwxNSBAQAogZG9uZQogY2FzZSAkYWNfbG8gaW4KID8qKSBhY19jdl9zaXplb2Zfdm9pZF9wPSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh2b2lkICopCisnJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdm9pZF9wIiA9IHllczsgdGhlbgorICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHZvaWQgKikKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAodm9pZCAqKQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfSA7OworICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0wCisgICBmaSA7OwogZXNhYwogZWxzZQogICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTg3MDgsNyArODAzOCw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIHZvaWQgKiBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiB2b2lkICogYWNfX3R5cGVfc2l6ZW9mXzsKIHN0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtODc2NywyMSArODA5NywyNSBAQAogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCiAoIGV4aXQgJGFjX3N0YXR1cyApCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHZvaWQgKikKK2lmIHRlc3QgIiRhY19jdl90eXBlX3ZvaWRfcCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh2b2lkICopCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CiBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHZvaWQgKikKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQogICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0wCisgICBmaQogZmkKIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIHJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2Zfdm9pZF9wPTAKLWZpCiBmaQogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3ZvaWRfcCIgPiY1CiBlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX3ZvaWRfcCIgPiY2OyB9CisKKworCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9WT0lEX1AgJGFjX2N2X3NpemVvZl92b2lkX3AKIF9BQ0VPRgpAQCAtODgyNCwyNyArODE1OCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl90eXBlX3Nob3J0PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtODg1OCwxNiArODE3NSwxNSBAQAogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaG9ydCIgPiY1CiBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaG9ydCIgPiY2OyB9CiAKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIHNob3J0IiA+JjUKIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydC4uLiAkRUNIT19DIiA+JjY7IH0KIGlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3Nob3J0K3NldH0iID0gc2V0OyB0aGVuCiAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRhY19jdl90eXBlX3Nob3J0IiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgogY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC04ODc3LDcgKzgxOTMsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBzaG9ydCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBzaG9ydCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC04OTAxLDI3ICs4MjE3LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPTAgYWNfbWlkPTAKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTg5MzEsNyArODIzMCw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIHNob3J0IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHNob3J0IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTg5NTUsMjcgKzgyNTQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGk9JGFjX21pZDsgYnJlYWsKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTkwMDIsNyArODI4NCw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIHNob3J0IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHNob3J0IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTkwMjYsMjcgKzgzMDgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGk9LTEgYWNfbWlkPS0xCiAgIHdoaWxlIDo7IGRvCiAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC05MDU2LDcgKzgzMjEsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBzaG9ydCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBzaG9ydCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC05MDgwLDI3ICs4MzQ1LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC05MTM3LDcgKzgzODUsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBzaG9ydCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBzaG9ydCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC05MTYxLDI3ICs4NDA5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTkxOTQsMTEgKzg0MjUsMTUgQEAKIGRvbmUKIGNhc2UgJGFjX2xvIGluCiA/KikgYWNfY3Zfc2l6ZW9mX3Nob3J0PSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKKycnKSBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaG9ydCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9IDs7CisgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfc2hvcnQ9MAorICAgZmkgOzsKIGVzYWMKIGVsc2UKICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC05MjA4LDcgKzg0NDMsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBzaG9ydCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBzaG9ydCBhY19fdHlwZV9zaXplb2ZfOwogc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC05MjY3LDIxICs4NTAyLDI1IEBACiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKICggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpCitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaG9ydCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KICAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9zaG9ydD0wCisgICBmaQogZmkKIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIHJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2Zfc2hvcnQ9MAotZmkKIGZpCiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfc2hvcnQiID4mNQogZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9zaG9ydCIgPiY2OyB9CisKKworCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9TSE9SVCAkYWNfY3Zfc2l6ZW9mX3Nob3J0CiBfQUNFT0YKQEAgLTkzMjQsMjcgKzg1NjMsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfdHlwZV9mbG9hdD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTkzNTgsMTYgKzg1ODAsMTUgQEAKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfZmxvYXQiID4mNQogZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfZmxvYXQiID4mNjsgfQogCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBmbG9hdCIgPiY1CiBlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgZmxvYXQuLi4gJEVDSE9fQyIgPiY2OyB9CiBpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9mbG9hdCtzZXR9IiA9IHNldDsgdGhlbgogICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9mbG9hdCIgPSB5ZXM7IHRoZW4KLSAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtOTM3Nyw3ICs4NTk4LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZmxvYXQgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZmxvYXQgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtOTQwMSwyNyArODYyMiwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19sbz0wIGFjX21pZD0wCiAgIHdoaWxlIDo7IGRvCiAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC05NDMxLDcgKzg2MzUsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBmbG9hdCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBmbG9hdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC05NDU1LDI3ICs4NjU5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC05NTAyLDcgKzg2ODksNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBmbG9hdCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBmbG9hdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC05NTI2LDI3ICs4NzEzLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPS0xIGFjX21pZD0tMQogICB3aGlsZSA6OyBkbwogICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtOTU1Niw3ICs4NzI2LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZmxvYXQgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZmxvYXQgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtOTU4MCwyNyArODc1MCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19sbz0kYWNfbWlkOyBicmVhawogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtOTYzNyw3ICs4NzkwLDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZmxvYXQgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZmxvYXQgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtOTY2MSwyNyArODgxNCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0kYWNfbWlkCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC05Njk0LDExICs4ODMwLDE1IEBACiBkb25lCiBjYXNlICRhY19sbyBpbgogPyopIGFjX2N2X3NpemVvZl9mbG9hdD0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZmxvYXQpCisnJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZmxvYXQiID0geWVzOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZmxvYXQpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CiBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZsb2F0KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfSA7OworICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2Zsb2F0PTAKKyAgIGZpIDs7CiBlc2FjCiBlbHNlCiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtOTcwOCw3ICs4ODQ4LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZmxvYXQgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZmxvYXQgYWNfX3R5cGVfc2l6ZW9mXzsKIHN0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtOTc2NywyMSArODkwNywyNSBAQAogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCiAoIGV4aXQgJGFjX3N0YXR1cyApCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZsb2F0KQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfZmxvYXQiID0geWVzOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZmxvYXQpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CiBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZsb2F0KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CiAgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfZmxvYXQ9MAorICAgZmkKIGZpCiBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiBybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX2Zsb2F0PTAKLWZpCiBmaQogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2Zsb2F0IiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfZmxvYXQiID4mNjsgfQorCisKKwogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfRkxPQVQgJGFjX2N2X3NpemVvZl9mbG9hdAogX0FDRU9GCkBAIC05ODI0LDI3ICs4OTY4LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X3R5cGVfZG91YmxlPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtOTg1OCwxNiArODk4NSwxNSBAQAogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9kb3VibGUiID4mNQogZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfZG91YmxlIiA+JjY7IH0KIAorIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgZG91YmxlIiA+JjUKIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBkb3VibGUuLi4gJEVDSE9fQyIgPiY2OyB9CiBpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4KICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgogY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC05ODc3LDcgKzkwMDMsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTk5MDEsMjcgKzkwMjcsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfbG89MCBhY19taWQ9MAogICB3aGlsZSA6OyBkbwogICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtOTkzMSw3ICs5MDQwLDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC05OTU1LDI3ICs5MDY0LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMDAwMiw3ICs5MDk0LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0xMDAyNiwyNyArOTExOCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0tMSBhY19taWQ9LTEKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEwMDU2LDcgKzkxMzEsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTEwMDgwLDI3ICs5MTU1LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMDEzNyw3ICs5MTk1LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0xMDE2MSwyNyArOTIxOSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0kYWNfbWlkCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMDE5NCwxMSArOTIzNSwxNSBAQAogZG9uZQogY2FzZSAkYWNfbG8gaW4KID8qKSBhY19jdl9zaXplb2ZfZG91YmxlPSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpCisnJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgorICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRvdWJsZSkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfSA7OworICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2RvdWJsZT0wCisgICBmaSA7OwogZXNhYwogZWxzZQogICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEwMjA4LDcgKzkyNTMsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87CiBzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTEwMjY3LDIxICs5MzEyLDI1IEBACiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKICggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgorICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRvdWJsZSkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CiAgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfZG91YmxlPTAKKyAgIGZpCiBmaQogcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogcm0gLWYgY29uZnRlc3QudmFsCi1lbHNlCi0gIGFjX2N2X3NpemVvZl9kb3VibGU9MAotZmkKIGZpCiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfZG91YmxlIiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfZG91YmxlIiA+JjY7IH0KKworCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX0RPVUJMRSAkYWNfY3Zfc2l6ZW9mX2RvdWJsZQogX0FDRU9GCkBAIC0xMDMyNCwyNyArOTM3MywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl90eXBlX2Zwb3NfdD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTEwMzU4LDE2ICs5MzkwLDE1IEBACiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2Zwb3NfdCIgPiY1CiBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9mcG9zX3QiID4mNjsgfQogCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBmcG9zX3QiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGZwb3NfdC4uLiAkRUNIT19DIiA+JjY7IH0KIGlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2Zwb3NfdCtzZXR9IiA9IHNldDsgdGhlbgogICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9mcG9zX3QiID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCiAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEwMzc3LDcgKzk0MDgsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBmcG9zX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZnBvc190IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTEwNDAxLDI3ICs5NDMyLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPTAgYWNfbWlkPTAKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEwNDMxLDcgKzk0NDUsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBmcG9zX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZnBvc190IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTEwNDU1LDI3ICs5NDY5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMDUwMiw3ICs5NDk5LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZnBvc190IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGZwb3NfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0xMDUyNiwyNyArOTUyMywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0tMSBhY19taWQ9LTEKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEwNTU2LDcgKzk1MzYsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBmcG9zX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZnBvc190IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTEwNTgwLDI3ICs5NTYwLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMDYzNyw3ICs5NjAwLDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgZnBvc190IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIGZwb3NfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0xMDY2MSwyNyArOTYyNCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0kYWNfbWlkCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMDY5NCwxMSArOTY0MCwxNSBAQAogZG9uZQogY2FzZSAkYWNfbG8gaW4KID8qKSBhY19jdl9zaXplb2ZfZnBvc190PSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChmcG9zX3QpCisnJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZnBvc190IiA9IHllczsgdGhlbgorICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZwb3NfdCkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZnBvc190KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfSA7OworICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2Zwb3NfdD0wCisgICBmaSA7OwogZXNhYwogZWxzZQogICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEwNzA4LDcgKzk2NTgsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBmcG9zX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgZnBvc190IGFjX190eXBlX3NpemVvZl87CiBzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTEwNzY3LDIxICs5NzE3LDI1IEBACiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKICggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZnBvc190KQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfZnBvc190IiA9IHllczsgdGhlbgorICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZwb3NfdCkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZnBvc190KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CiAgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfZnBvc190PTAKKyAgIGZpCiBmaQogcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogcm0gLWYgY29uZnRlc3QudmFsCi1lbHNlCi0gIGFjX2N2X3NpemVvZl9mcG9zX3Q9MAotZmkKIGZpCiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfZnBvc190IiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfZnBvc190IiA+JjY7IH0KKworCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX0ZQT1NfVCAkYWNfY3Zfc2l6ZW9mX2Zwb3NfdAogX0FDRU9GCkBAIC0xMDgyNCwyNyArOTc3OCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl90eXBlX3NpemVfdD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTEwODU4LDE2ICs5Nzk1LDE1IEBACiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpemVfdCIgPiY1CiBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaXplX3QiID4mNjsgfQogCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBzaXplX3QiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIHNpemVfdC4uLiAkRUNIT19DIiA+JjY7IH0KIGlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgogICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaXplX3QiID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCiAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEwODc3LDcgKzk4MTMsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBzaXplX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgc2l6ZV90IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTEwOTAxLDI3ICs5ODM3LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPTAgYWNfbWlkPTAKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEwOTMxLDcgKzk4NTAsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBzaXplX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgc2l6ZV90IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTEwOTU1LDI3ICs5ODc0LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMTAwMiw3ICs5OTA0LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgc2l6ZV90IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHNpemVfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0xMTAyNiwyNyArOTkyOCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0tMSBhY19taWQ9LTEKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTExMDU2LDcgKzk5NDEsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBzaXplX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgc2l6ZV90IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTExMDgwLDI3ICs5OTY1LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2xvPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMTEzNyw3ICsxMDAwNSw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIHNpemVfdCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBzaXplX3QgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtMTExNjEsMjcgKzEwMDI5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTExMTk0LDExICsxMDA0NSwxNSBAQAogZG9uZQogY2FzZSAkYWNfbG8gaW4KID8qKSBhY19jdl9zaXplb2Zfc2l6ZV90PSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaXplX3QpCisnJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfc2l6ZV90IiA9IHllczsgdGhlbgorICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNpemVfdCkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2l6ZV90KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfSA7OworICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3NpemVfdD0wCisgICBmaSA7OwogZXNhYwogZWxzZQogICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTExMjA4LDcgKzEwMDYzLDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgc2l6ZV90IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHNpemVfdCBhY19fdHlwZV9zaXplb2ZfOwogc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xMTI2NywyMSArMTAxMjIsMjUgQEAKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAogKCBleGl0ICRhY19zdGF0dXMgKQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaXplX3QpCitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaXplX3QiID0geWVzOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2l6ZV90KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQogZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaXplX3QpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KICAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9zaXplX3Q9MAorICAgZmkKIGZpCiBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiBybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX3NpemVfdD0wCi1maQogZmkKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zaXplX3QiID4mNQogZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9zaXplX3QiID4mNjsgfQorCisKKwogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfU0laRV9UICRhY19jdl9zaXplb2Zfc2l6ZV90CiBfQUNFT0YKQEAgLTExMzE5LDI3ICsxMDE3OCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCkBAIC0xMTM5NiwyNyArMTAyMzgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMTQzMCwxNiArMTAyNTUsMTUgQEAKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbG9uZ19sb25nIiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2xvbmdfbG9uZyIgPiY2OyB9CiAKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZyIgPiY1CiBlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nLi4uICRFQ0hPX0MiID4mNjsgfQogaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZ19sb25nK3NldH0iID0gc2V0OyB0aGVuCiAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmdfbG9uZyIgPSB5ZXM7IHRoZW4KLSAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtMTE0NDksNyArMTAyNzMsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBsb25nIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgbG9uZyBsb25nIGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTExNDczLDI3ICsxMDI5NywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19sbz0wIGFjX21pZD0wCiAgIHdoaWxlIDo7IGRvCiAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC0xMTUwMyw3ICsxMDMxMCw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIGxvbmcgbG9uZyBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBsb25nIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtMTE1MjcsMjcgKzEwMzM0LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMTU3NCw3ICsxMDM2NCw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIGxvbmcgbG9uZyBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBsb25nIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtMTE1OTgsMjcgKzEwMzg4LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPS0xIGFjX21pZD0tMQogICB3aGlsZSA6OyBkbwogICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtMTE2MjgsNyArMTA0MDEsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBsb25nIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgbG9uZyBsb25nIGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTExNjUyLDI3ICsxMDQyNSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19sbz0kYWNfbWlkOyBicmVhawogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTE3MDksNyArMTA0NjUsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiBsb25nIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgbG9uZyBsb25nIGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTExNzMzLDI3ICsxMDQ4OSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0kYWNfbWlkCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMTc2NiwxMSArMTA1MDUsMTUgQEAKIGRvbmUKIGNhc2UgJGFjX2xvIGluCiA/KikgYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKQorJycpIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmdfbG9uZyIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CiBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZykKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0gOzsKKyAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9MAorICAgZmkgOzsKIGVzYWMKIGVsc2UKICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC0xMTc4MCw3ICsxMDUyMyw3IEBACiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICB0eXBlZGVmIGxvbmcgbG9uZyBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiBsb25nIGxvbmcgYWNfX3R5cGVfc2l6ZW9mXzsKIHN0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTE4MzksMjEgKzEwNTgyLDI1IEBACiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKICggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZ19sb25nIiA9IHllczsgdGhlbgorICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZykKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CiAgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKKyAgIGZpCiBmaQogcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogcm0gLWYgY29uZnRlc3QudmFsCi1lbHNlCi0gIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9MAotZmkKIGZpCiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZ19sb25nIiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfbG9uZ19sb25nIiA+JjY7IH0KKworCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyAkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZwogX0FDRU9GCkBAIC0xMTg2MSwyMCArMTA2MDgsMjkgQEAKIAogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnRwdHJfdCBzdXBwb3J0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpbnRwdHJfdCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQotaGF2ZV91aW50cHRyX3Q9bm8KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnRwdHJfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50cHRyX3QuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludHB0cl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogY29uZmRlZnMuaC4gICovCiBfQUNFT0YKIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIEhBVkVfU1RESU5UX0gKKyAgICAgICAgI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICAgICAjZW5kaWYKIAordHlwZWRlZiB1aW50cHRyX3QgYWNfX3R5cGVfbmV3XzsKIGludAogbWFpbiAoKQogewotdWludHB0cl90IHg7IHggPSAodWludHB0cl90KTA7CitpZiAoKGFjX190eXBlX25ld18gKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKKyAgcmV0dXJuIDA7CiAgIDsKICAgcmV0dXJuIDA7CiB9CkBAIC0xMTg5Miw0NiArMTA2NDgsMjggQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKLV9BQ0VPRgotCi0gIGhhdmVfdWludHB0cl90PXllcwotCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl90eXBlX3VpbnRwdHJfdD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotCisJYWNfY3ZfdHlwZV91aW50cHRyX3Q9bm8KIGZpCiAKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGF2ZV91aW50cHRyX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhdmVfdWludHB0cl90IiA+JjY7IH0KLWlmIHRlc3QgIiRoYXZlX3VpbnRwdHJfdCIgPSB5ZXMgOyB0aGVuCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50cHRyX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludHB0cl90IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X3R5cGVfdWludHB0cl90ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9VSU5UUFRSX1QgMQorX0FDRU9GCisKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50cHRyX3QiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludHB0cl90Li4uICRFQ0hPX0MiID4mNjsgfQogaWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnRwdHJfdCtzZXR9IiA9IHNldDsgdGhlbgpAQCAtMTE5NjksMjcgKzEwNzA3LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X3R5cGVfdWludHB0cl90PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTIwMDMsMTYgKzEwNzI0LDE1IEBACiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnRwdHJfdCIgPiY1CiBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50cHRyX3QiID4mNjsgfQogCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiB1aW50cHRyX3QiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIHVpbnRwdHJfdC4uLiAkRUNIT19DIiA+JjY7IH0KIGlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCtzZXR9IiA9IHNldDsgdGhlbgogICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV91aW50cHRyX3QiID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCiAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEyMDIyLDcgKzEwNzQyLDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgdWludHB0cl90IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHVpbnRwdHJfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0xMjA0NiwyNyArMTA3NjYsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfbG89MCBhY19taWQ9MAogICB3aGlsZSA6OyBkbwogICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtMTIwNzYsNyArMTA3NzksNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiB1aW50cHRyX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgdWludHB0cl90IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTEyMTAwLDI3ICsxMDgwMywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0kYWNfbWlkOyBicmVhawogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTIxNDcsNyArMTA4MzMsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiB1aW50cHRyX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgdWludHB0cl90IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTEyMTcxLDI3ICsxMDg1NywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0tMSBhY19taWQ9LTEKICAgd2hpbGUgOjsgZG8KICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKQEAgLTEyMjAxLDcgKzEwODcwLDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgdWludHB0cl90IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHVpbnRwdHJfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0xMjIyNSwyNyArMTA4OTQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfbG89JGFjX21pZDsgYnJlYWsKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTEyMjgyLDcgKzEwOTM0LDcgQEAKIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0JCSAgIHR5cGVkZWYgdWludHB0cl90IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHVpbnRwdHJfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0xMjMwNiwyNyArMTA5NTgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGk9JGFjX21pZAogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTIzMzksMTEgKzEwOTc0LDE1IEBACiBkb25lCiBjYXNlICRhY19sbyBpbgogPyopIGFjX2N2X3NpemVvZl91aW50cHRyX3Q9JGFjX2xvOzsKLScnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVpbnRwdHJfdCkKKycnKSBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV91aW50cHRyX3QiID0geWVzOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAodWludHB0cl90KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQogZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh1aW50cHRyX3QpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9IDs7CisgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfdWludHB0cl90PTAKKyAgIGZpIDs7CiBlc2FjCiBlbHNlCiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtMTIzNTMsNyArMTA5OTIsNyBAQAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQkJICAgdHlwZWRlZiB1aW50cHRyX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgdWludHB0cl90IGFjX190eXBlX3NpemVvZl87CiBzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTEyNDEyLDIxICsxMTA1MSwyNSBAQAogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCiAoIGV4aXQgJGFjX3N0YXR1cyApCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVpbnRwdHJfdCkKK2lmIHRlc3QgIiRhY19jdl90eXBlX3VpbnRwdHJfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh1aW50cHRyX3QpCiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CiBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVpbnRwdHJfdCkKIFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQogICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdD0wCisgICBmaQogZmkKIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIHJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2ZfdWludHB0cl90PTAKLWZpCiBmaQogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCIgPiY1CiBlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCIgPiY2OyB9CisKKworCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9VSU5UUFRSX1QgJGFjX2N2X3NpemVvZl91aW50cHRyX3QKIF9BQ0VPRgpAQCAtMTI0MzQsNiArMTEwNzcsOCBAQAogCiBmaQogCisKKwogIyBIbXBoLiBBQ19DSEVDS19TSVpFT0YoKSBkb2Vzbid0IGluY2x1ZGUgPHN5cy90eXBlcy5oPi4KIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2Ygb2ZmX3QiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIG9mZl90Li4uICRFQ0hPX0MiID4mNjsgfQpAQCAtMTI2MzAsMjcgKzExMjc1LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGhhdmVfcHRocmVhZF90PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTMxNjgsMjcgKzExNzk2LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMzE5Nyw3ICsxMTgwOSw3IEBACiAJYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCkBAIC0xMzI1NSwyNyArMTE4NjcsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTEzMjg0LDcgKzExODgwLDcgQEAKIAlhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTEzMzUwLDI3ICsxMTk0NiwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9zZWFyY2hfc2VtX2luaXQ9JGFjX3JlcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTMzNzksNyArMTE5NTksNyBAQAogCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQKICAgaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfc2VtX2luaXQrc2V0fSIgPSBzZXQ7IHRoZW4KICAgYnJlYWsKQEAgLTEzNDQ4LDI3ICsxMjAyOCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfaW50bF90ZXh0ZG9tYWluPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTM0NzcsNyArMTIwNDEsNyBAQAogCWFjX2N2X2xpYl9pbnRsX3RleHRkb21haW49bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQpAQCAtMTM1MjQsMjcgKzEyMDg4LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiAjZGVmaW5lIEFJWF9HRU5VSU5FX0NQTFVTUExVUyAxCkBAIC0xMzU2MCw3ICsxMjEwOCw3IEBACiBlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dDs7CiAJKikgOzsKIGVzYWMKQEAgLTEzNjA5LDI3ICsxMjE1NywxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfbnNsX3Rfb3Blbj15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTEzNjM4LDcgKzEyMTcwLDcgQEAKIAlhY19jdl9saWJfbnNsX3Rfb3Blbj1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCkBAIC0xMzY5MCwyNyArMTIyMjIsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQ9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xMzcxOSw3ICsxMjIzNSw3IEBACiAJYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQ9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQpAQCAtMTM3NzQsMjcgKzEyMjkwLDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGFjX2N2X2xpYl9uZXRfc29ja2V0PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTM4MDMsNyArMTIzMDMsNyBAQAogCWFjX2N2X2xpYl9uZXRfc29ja2V0PW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTE0MDU3LDI3ICsxMjU1NywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xNDExMywxNyArMTI1OTYsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgogICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE0MjI5LDI3ICsxMjcwNSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xNDI4NSwxNyArMTI3NDQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgogICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE0NDI2LDI3ICsxMjg3OCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCiAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQogZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KQEAgLTE0NTI1LDI3ICsxMjk2MSwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9mdW5jX3B0aHJlYWRfZGV0YWNoPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTQ1NTQsNyArMTI5NzQsNyBAQAogCWFjX2N2X2Z1bmNfcHRocmVhZF9kZXRhY2g9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19wdGhyZWFkX2RldGFjaCIgPiY1CkBAIC0xNDYwMiwyNyArMTMwMjIsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTQ2NTgsMTcgKzEzMDYxLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xNDc2OSwyNyArMTMxNjUsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTQ4MjUsMTcgKzEzMjA0LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xNDk0NCwyNyArMTMzMTYsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX3B0aHJlYWRzX3B0aHJlYWRfY3JlYXRlPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTQ5NzMsNyArMTMzMjksNyBAQAogCWFjX2N2X2xpYl9wdGhyZWFkc19wdGhyZWFkX2NyZWF0ZT1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCkBAIC0xNTAzMSwyNyArMTMzODcsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2NyZWF0ZT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE1MDYwLDcgKzEzNDAwLDcgQEAKIAlhY19jdl9saWJfY19yX3B0aHJlYWRfY3JlYXRlPW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTE1MTE4LDI3ICsxMzQ1OCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfcHRocmVhZF9fX3B0aHJlYWRfY3JlYXRlX3N5c3RlbT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE1MTQ3LDcgKzEzNDcxLDcgQEAKIAlhY19jdl9saWJfcHRocmVhZF9fX3B0aHJlYWRfY3JlYXRlX3N5c3RlbT1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCkBAIC0xNTIwNSwyNyArMTM1MjksMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX2NtYV9wdGhyZWFkX2NyZWF0ZT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE1MjM0LDcgKzEzNTQyLDcgQEAKIAlhY19jdl9saWJfY21hX3B0aHJlYWRfY3JlYXRlPW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTE1MjcwLDcgKzEzNTc4LDcgQEAKIAogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKQEAgLTE1MzIzLDI3ICsxMzYzMSwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfbXBjX3VzY29uZmlnPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTUzNTIsNyArMTM2NDQsNyBAQAogCWFjX2N2X2xpYl9tcGNfdXNjb25maWc9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQpAQCAtMTU0MTIsMjcgKzEzNzA0LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGFjX2N2X2xpYl90aHJlYWRfdGhyX2NyZWF0ZT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE1NDQxLDcgKzEzNzE3LDcgQEAKIAlhY19jdl9saWJfdGhyZWFkX3Rocl9jcmVhdGU9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQpAQCAtMTU2MzMsMjcgKzEzOTA5LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTU2NjIsNyArMTM5MjIsNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMTU4MDYsMjcgKzE0MDY2LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKIGVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CiAJCWlwdjY9eWVzCkBAIC0xNjIwNSwyNyArMTQ0NDgsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xNjIzNCw3ICsxNDQ2MSw3IEBACiAJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCkBAIC0xNjQ1NywyNyArMTQ2ODQsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xNjQ4Niw3ICsxNDY5Nyw3IEBACiAJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCkBAIC0xNjUzMywyNyArMTQ3NDQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9DSFJPT1QgMQpAQCAtMTY2MDEsMjcgKzE0Nzk1LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiAjZGVmaW5lIEhBVkVfTElOSyAxCkBAIC0xNjY2OSwyNyArMTQ4NDYsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9TWU1MSU5LIDEKQEAgLTE2NzM3LDI3ICsxNDg5NywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX0ZDSERJUiAxCkBAIC0xNjgwNSwyNyArMTQ5NDgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9GU1lOQyAxCkBAIC0xNjg3MywyNyArMTQ5OTksMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9GREFUQVNZTkMgMQpAQCAtMTY5NTEsMjcgKzE1MDYwLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiAjZGVmaW5lIEhBVkVfQ1RFUk1JRF9SIDEKQEAgLTE3MDIzLDI3ICsxNTExNSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX0ZMT0NLIDEKQEAgLTE3MDk1LDI3ICsxNTE3MCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEKQEAgLTE3MTUyLDcgKzE1MjEwLDcgQEAKICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19UUlVFPSIkYWNfcHJvZyIKICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgpAQCAtMTcyMjAsMjcgKzE1Mjc4LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGFjX2N2X2xpYl9jX2luZXRfYXRvbj15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE3MjQ5LDcgKzE1MjkxLDcgQEAKIAlhY19jdl9saWJfY19pbmV0X2F0b249bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQpAQCAtMTczMDEsMjcgKzE1MzQzLDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGFjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTczMzAsNyArMTUzNTYsNyBAQAogCWFjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uPW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTE3NDAwLDI3ICsxNTQyNiwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfel9pbmZsYXRlQ29weT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE3NDI5LDcgKzE1NDM5LDcgQEAKIAlhY19jdl9saWJfel9pbmZsYXRlQ29weT1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCkBAIC0xNzQ4NCwyNyArMTU0OTQsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9IU1RSRVJST1IgMQpAQCAtMTc1MjEsNyArMTU1MTUsNyBAQAogCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogCiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW5ldF9hdG9uIiA+JjUKQEAgLTE3NTYwLDI3ICsxNTU1NCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX0lORVRfQVRPTiAxCkBAIC0xNzU5Nyw3ICsxNTU3NSw3IEBACiAKIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbmV0X3B0b24iID4mNQpAQCAtMTc2MzYsMjcgKzE1NjE0LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiAjZGVmaW5lIEhBVkVfSU5FVF9QVE9OIDEKQEAgLTE3NzEyLDI3ICsxNTY3MywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX1NFVEdST1VQUyAxCkBAIC0xNzgyMCwyNyArMTU3NjQsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xNzg0OSw3ICsxNTc3Nyw3IEBACiAJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCkBAIC0xNzkwMywyNyArMTU4MzEsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX3V0aWxfb3BlbnB0eT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE3OTMyLDcgKzE1ODQ0LDcgQEAKIAlhY19jdl9saWJfdXRpbF9vcGVucHR5PW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTE3OTg2LDI3ICsxNTg5OCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfYnNkX29wZW5wdHk9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xODAxNSw3ICsxNTkxMSw3IEBACiAJYWNfY3ZfbGliX2JzZF9vcGVucHR5PW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTE4MTAyLDI3ICsxNTk5OCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBldmFsICIkYXNfYWNfdmFyPXllcyIKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE4MTMxLDcgKzE2MDExLDcgQEAKIAlldmFsICIkYXNfYWNfdmFyPW5vIgogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiBhY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKQEAgLTE4MTg1LDI3ICsxNjA2NSwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfdXRpbF9mb3JrcHR5PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTgyMTQsNyArMTYwNzgsNyBAQAogCWFjX2N2X2xpYl91dGlsX2ZvcmtwdHk9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQpAQCAtMTgyNjgsMjcgKzE2MTMyLDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGFjX2N2X2xpYl9ic2RfZm9ya3B0eT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE4Mjk3LDcgKzE2MTQ1LDcgQEAKIAlhY19jdl9saWJfYnNkX2ZvcmtwdHk9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQpAQCAtMTgzOTEsMjcgKzE2MjM5LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTg0MjAsNyArMTYyNTIsNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMTg1MDYsMjcgKzE2MzM4LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTg1MzUsNyArMTYzNTEsNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMTg2MjQsMjcgKzE2NDQwLDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTg2NTMsNyArMTY0NTMsNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMTg2OTEsMjcgKzE2NDkxLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiAjZGVmaW5lIEdFVFBHUlBfSEFWRV9BUkcgMQpAQCAtMTg3OTcsMjcgKzE2NTgwLDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTg4MjYsNyArMTY1OTMsNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMTg4NjQsMjcgKzE2NjMxLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiAjZGVmaW5lIFNFVFBHUlBfSEFWRV9BUkcgMQpAQCAtMTg5NzAsMjcgKzE2NzIwLDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTg5OTksNyArMTY3MzMsNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMTkwMzcsMjcgKzE2NzcxLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIDoKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE5MTE3LDI3ICsxNjgzNCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCkBAIC0xOTE1Nyw3ICsxNjg1OCw3IEBACiAKIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAKICMgT24gT1NGLzEgVjUuMSwgZ2V0YWRkcmluZm8gaXMgYXZhaWxhYmxlLCBidXQgYSBkZWZpbmUKQEAgLTE5MTk5LDI3ICsxNjkwMCwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CiBlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQpAQCAtMTkzNzIsNyArMTcwNTcsNyBAQAogCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogCiBpZiB0ZXN0ICIkYnVnZ3lnZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgpAQCAtMTk0NTUsMjcgKzE3MTQwLDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTk0ODQsNyArMTcxNTMsNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMTk1MzcsMjcgKzE3MjA2LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X2hlYWRlcl90aW1lPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTk1OTUsNyArMTcyNDcsOSBAQAogaW50CiBtYWluICgpCiB7Ci1zdHJ1Y3QgdG0gKnRwOyB0cC0+dG1fc2VjOworc3RydWN0IHRtIHRtOworCQkJCSAgICAgaW50ICpwID0gJnRtLnRtX3NlYzsKKyAJCQkJICAgICByZXR1cm4gIXA7CiAgIDsKICAgcmV0dXJuIDA7CiB9CkBAIC0xOTYxMywyNyArMTcyNjcsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3Zfc3RydWN0X3RtPXRpbWUuaAogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTk2OTIsMjcgKzE3MzI5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fem9uZT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE5NzUxLDI3ICsxNzM3MSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmU9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0xOTgyMCw4ICsxNzQyMyw3IEBACiBtYWluICgpCiB7CiAjaWZuZGVmIHR6bmFtZQotICBjaGFyICpwID0gKGNoYXIgKikgdHpuYW1lOwotICByZXR1cm4gIXA7CisgICh2b2lkKSB0em5hbWU7CiAjZW5kaWYKIAogICA7CkBAIC0xOTg0MSwyNyArMTc0NDMsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfaGF2ZV9kZWNsX3R6bmFtZT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTE5OTI3LDI3ICsxNzUxMiwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl92YXJfdHpuYW1lPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMTk5NTYsNyArMTc1MjUsNyBAQAogCWFjX2N2X3Zhcl90em5hbWU9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX3R6bmFtZSIgPiY1CkBAIC0yMDAwNSwyNyArMTc1NzQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X3JkZXY9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMDA2MSwyNyArMTc2MTMsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X3JkZXY9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMDE0MSwyNyArMTc2NzYsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2Jsa3NpemU9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMDE5NywyNyArMTc3MTUsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2Jsa3NpemU9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMDI3NywyNyArMTc3NzgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2ZsYWdzPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjAzMzMsMjcgKzE3ODE3LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9mbGFncz15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTIwNDEzLDI3ICsxNzg4MCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfZ2VuPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjA0NjksMjcgKzE3OTE5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9nZW49eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMDU0OSwyNyArMTc5ODIsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2JpcnRodGltZT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTIwNjA1LDI3ICsxODAyMSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmlydGh0aW1lPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjA2ODUsMjcgKzE4MDg0LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibG9ja3M9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMDc0MSwyNyArMTgxMjMsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2Jsb2Nrcz15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTIwODMyLDI3ICsxODE5NywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9oZWFkZXJfdGltZV9hbHR6b25lPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjA5MDksMjcgKzE4MjU3LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKQEAgLTIwOTgzLDI3ICsxODMxNCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9zdHJ1Y3RfYWRkcmluZm89eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMTA2MCwyNyArMTgzNzQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMTE0MCwyNyArMTg0MzcsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfY19jaGFyX3Vuc2lnbmVkPW5vCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMTE5OSwxMCArMTg0NzksMTAgQEAKICNpZm5kZWYgX19jcGx1c3BsdXMKICAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KICAgdHlwZWRlZiBpbnQgY2hhcnNldFsyXTsKLSAgY29uc3QgY2hhcnNldCB4OworICBjb25zdCBjaGFyc2V0IGNzOwogICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLwotICBjaGFyIGNvbnN0ICpjb25zdCAqY2NwOwotICBjaGFyICoqcDsKKyAgY2hhciBjb25zdCAqY29uc3QgKnBjcGNjOworICBjaGFyICoqcHBjOwogICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLwogICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CiAgIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OwpAQCAtMjEyMTEsMTEgKzE4NDkxLDExIEBACiAgICAgIGFuIGFybSBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQKICAgICAgZXhwcmVzc2lvbiAqLwogICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7Ci0gIGNjcCA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgcGNwY2MgPSAmZyArIChnID8gZy1nIDogMCk7CiAgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCi0gICsrY2NwOwotICBwID0gKGNoYXIqKikgY2NwOwotICBjY3AgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcDsKKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKICAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KICAgICBjaGFyICp0OwogICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CkBAIC0yMTI0Miw3ICsxODUyMiw3IEBACiAgICAgY29uc3QgaW50IGZvbyA9IDEwOwogICAgIGlmICghZm9vKSByZXR1cm4gMDsKICAgfQotICByZXR1cm4gIXhbMF0gJiYgIXplcm8ueDsKKyAgcmV0dXJuICFjc1swXSAmJiAhemVyby54OwogI2VuZGlmCiAKICAgOwpAQCAtMjEyNjIsMjcgKzE4NTQyLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X2NfY29uc3Q9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMTMzNSwyNyArMTg1OTgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgd29ya3M9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMTQwNCwyNyArMTg2NTAsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgd29ya3M9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMTQ3MywyNyArMTg3MDIsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgpAQCAtMjE1NTQsMjcgKzE4NzY2LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKQEAgLTIxNjI4LDI3ICsxODgyMywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX1NPQ0tFVFBBSVIgMQpAQCAtMjE3MDAsMjcgKzE4ODc4LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKIGVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CiAKQEAgLTIxNzc1LDI3ICsxODkzNiwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICA6CiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMTg4MiwyNyArMTkwMjYsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lX3I9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMTkxMSw3ICsxOTAzOSw3IEBACiAJYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lX3I9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lX3IiID4mNQpAQCAtMjE5NjQsMjcgKzE5MDkyLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUiAxCkBAIC0yMjA0NSwyNyArMTkxNTYsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMQpAQCAtMjIxMjQsMjcgKzE5MjE4LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAKICAgICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMQpAQCAtMjIyNDgsMjcgKzE5MzI1LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjIyNzcsNyArMTkzMzgsNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMjIzNjcsMjcgKzE5NDI4LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGFjX2N2X2Z1bmNfX19mcHVfY29udHJvbD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTIyMzk2LDcgKzE5NDQxLDcgQEAKIAlhY19jdl9mdW5jX19fZnB1X2NvbnRyb2w9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19fX2ZwdV9jb250cm9sIiA+JjUKQEAgLTIyNDQ3LDI3ICsxOTQ5MiwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfaWVlZV9fX2ZwdV9jb250cm9sPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjI0NzYsNyArMTk1MDUsNyBAQAogCWFjX2N2X2xpYl9pZWVlX19fZnB1X2NvbnRyb2w9bm8KIGZpCiAKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQpAQCAtMjI2NDcsMjcgKzE5Njc2LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGV2YWwgIiRhc19hY192YXI9eWVzIgogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjI2NzYsNyArMTk2ODksNyBAQAogCWV2YWwgIiRhc19hY192YXI9bm8iCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIGFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYApAQCAtMjI3MzUsMjcgKzE5NzQ4LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTIyNzkxLDE3ICsxOTc4NywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCiAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjI5MTIsMjcgKzE5OTAxLDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X3R5cGVfd2NoYXJfdD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTIyOTQ2LDE2ICsxOTkxOCwxNSBAQAogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV93Y2hhcl90IiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3djaGFyX3QiID4mNjsgfQogCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90IiA+JjUKIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90Li4uICRFQ0hPX0MiID4mNjsgfQogaWYgdGVzdCAiJHthY19jdl9zaXplb2Zfd2NoYXJfdCtzZXR9IiA9IHNldDsgdGhlbgogICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV93Y2hhcl90IiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgogY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC0yMjk2Niw3ICsxOTkzNyw3IEBACiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8d2NoYXIuaD4KIAotCQkgICB0eXBlZGVmIHdjaGFyX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgd2NoYXJfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0yMjk5MCwyNyArMTk5NjEsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfbG89MCBhY19taWQ9MAogICB3aGlsZSA6OyBkbwogICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgpAQCAtMjMwMjEsNyArMTk5NzUsNyBAQAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHdjaGFyLmg+CiAKLQkJICAgdHlwZWRlZiB3Y2hhcl90IGFjX190eXBlX3NpemVvZl87CisgICB0eXBlZGVmIHdjaGFyX3QgYWNfX3R5cGVfc2l6ZW9mXzsKIGludAogbWFpbiAoKQogewpAQCAtMjMwNDUsMjcgKzE5OTk5LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMzA5Myw3ICsyMDAzMCw3IEBACiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8d2NoYXIuaD4KIAotCQkgICB0eXBlZGVmIHdjaGFyX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgd2NoYXJfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0yMzExNywyNyArMjAwNTQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfaGk9LTEgYWNfbWlkPS0xCiAgIHdoaWxlIDo7IGRvCiAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC0yMzE0OCw3ICsyMDA2OCw3IEBACiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8d2NoYXIuaD4KIAotCQkgICB0eXBlZGVmIHdjaGFyX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgd2NoYXJfdCBhY19fdHlwZV9zaXplb2ZfOwogaW50CiBtYWluICgpCiB7CkBAIC0yMzE3MiwyNyArMjAwOTIsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfbG89JGFjX21pZDsgYnJlYWsKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTIzMjMwLDcgKzIwMTMzLDcgQEAKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDx3Y2hhci5oPgogCi0JCSAgIHR5cGVkZWYgd2NoYXJfdCBhY19fdHlwZV9zaXplb2ZfOworICAgdHlwZWRlZiB3Y2hhcl90IGFjX190eXBlX3NpemVvZl87CiBpbnQKIG1haW4gKCkKIHsKQEAgLTIzMjU0LDI3ICsyMDE1NywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19oaT0kYWNfbWlkCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMzI4NywxMSArMjAxNzMsMTUgQEAKIGRvbmUKIGNhc2UgJGFjX2xvIGluCiA/KikgYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9JGFjX2xvOzsKLScnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHdjaGFyX3QpCisnJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfd2NoYXJfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh3Y2hhcl90KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQogZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh3Y2hhcl90KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfSA7OworICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9MAorICAgZmkgOzsKIGVzYWMKIGVsc2UKICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCkBAIC0yMzMwMiw3ICsyMDE5Miw3IEBACiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8d2NoYXIuaD4KIAotCQkgICB0eXBlZGVmIHdjaGFyX3QgYWNfX3R5cGVfc2l6ZW9mXzsKKyAgIHR5cGVkZWYgd2NoYXJfdCBhY19fdHlwZV9zaXplb2ZfOwogc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0yMzM2MSwyMSArMjAyNTEsMjUgQEAKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAogKCBleGl0ICRhY19zdGF0dXMgKQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh3Y2hhcl90KQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfd2NoYXJfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh3Y2hhcl90KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQogZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh3Y2hhcl90KQogU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CiAgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfd2NoYXJfdD0wCisgICBmaQogZmkKIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKIHJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2Zfd2NoYXJfdD0wCi1maQogZmkKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl93Y2hhcl90IiA+JjUKIGVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2Zfd2NoYXJfdCIgPiY2OyB9CisKKworCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9XQ0hBUl9UICRhY19jdl9zaXplb2Zfd2NoYXJfdAogX0FDRU9GCkBAIC0yMzQxOCwyNyArMjAzMTIsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgpAQCAtMjM2MzQsNyArMjA1MTEsOCBAQAogaW50CiBtYWluICgpCiB7Ci0jaWYgIUJZVEVfT1JERVIgfHwgIUJJR19FTkRJQU4gfHwgIUxJVFRMRV9FTkRJQU4KKyNpZiAgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gXAorCSYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiAmJiBMSVRUTEVfRU5ESUFOKQogIGJvZ3VzIGVuZGlhbiBtYWNyb3MKICNlbmRpZgogCkBAIC0yMzY1NSwyNyArMjA1MzMsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4KIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogY29uZmRlZnMuaC4gICovCkBAIC0yMzcxMCwyNyArMjA1NzEsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yMzc4MSwyNyArMjA2MjUsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgogICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKIGZpCkBAIC0yNDAxNSwyNyArMjA4NDIsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfaGF2ZV9nZXRjX3VubG9ja2VkPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjQwNDQsNyArMjA4NTUsNyBAQAogCWFjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZD1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKQEAgLTI0MTA1LDI3ICsyMDkxNiwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmU9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yNDEzNCw3ICsyMDkyOSw3IEBACiAJYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lPW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTI0MTk0LDI3ICsyMDk4OSwxMSBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICBhY19jdl9saWJfdGVybWNhcF9yZWFkbGluZT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTI0MjIzLDcgKzIxMDAyLDcgQEAKIAlhY19jdl9saWJfdGVybWNhcF9yZWFkbGluZT1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCkBAIC0yNDI4MywyNyArMjEwNjIsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbD15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTI0MzEyLDcgKzIxMDc1LDcgQEAKIAlhY19jdl9saWJfcmVhZGxpbmVfcmxfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsPW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTI0MzQ4LDE3ICsyMTExMSwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCiAgIGhhdmVfcmVhZGxpbmU9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yNDQzNCwyNyArMjExOTAsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX3JlYWRsaW5lX3JsX3ByZV9pbnB1dF9ob29rPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjQ0NjMsNyArMjEyMDMsNyBAQAogCWFjX2N2X2xpYl9yZWFkbGluZV9ybF9wcmVfaW5wdXRfaG9vaz1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCkBAIC0yNDUyMSwyNyArMjEyNjEsMTEgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fbWF0Y2hlcz15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTI0NTUwLDcgKzIxMjc0LDcgQEAKIAlhY19jdl9saWJfcmVhZGxpbmVfcmxfY29tcGxldGlvbl9tYXRjaGVzPW5vCiBmaQogCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKQEAgLTI0NTg2LDE3ICsyMTMxMCwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCiAgIGhhdmVfcmVhZGxpbmU9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yNDgyNSwyNyArMjE1NDIsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3ZfbWVtYmVyX3N0cnVjdF90bV90bV96b25lPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjQ4ODQsMjcgKzIxNTg0LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fem9uZT15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTI0OTUzLDggKzIxNjM2LDcgQEAKIG1haW4gKCkKIHsKICNpZm5kZWYgdHpuYW1lCi0gIGNoYXIgKnAgPSAoY2hhciAqKSB0em5hbWU7Ci0gIHJldHVybiAhcDsKKyAgKHZvaWQpIHR6bmFtZTsKICNlbmRpZgogCiAgIDsKQEAgLTI0OTc0LDI3ICsyMTY1NiwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9oYXZlX2RlY2xfdHpuYW1lPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjUwNjAsMjcgKzIxNzI1LDExIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAgIGFjX2N2X3Zhcl90em5hbWU9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yNTA4OSw3ICsyMTczOCw3IEBACiAJYWNfY3ZfdmFyX3R6bmFtZT1ubwogZmkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAogICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl92YXJfdHpuYW1lIiA+JjUKQEAgLTI1MjY4LDI3ICsyMTkxNywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9zdGF0X3R2X25zZWM9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yNTM0OCwyNyArMjE5ODAsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KICAgYWNfY3Zfc3RhdF90dl9uc2VjMj15ZXMKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKQEAgLTI1NDI4LDI3ICsyMjA0MywxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogICBhY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uPXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjU1MDgsMjcgKzIyMTA2LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X3dpbmRvd19oYXNfZmxhZ3M9eWVzCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CkBAIC0yNTU4MywyNyArMjIxNjQsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9DVVJTRVNfSVNfVEVSTV9SRVNJWkVEIDEKQEAgLTI1NjUyLDI3ICsyMjIxNiwxMCBAQAogICBybSAtZiBjb25mdGVzdC5lcjEKICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX0NVUlNFU19SRVNJWkVfVEVSTSAxCkBAIC0yNTcyMSwyNyArMjIyNjgsMTAgQEAKICAgcm0gLWYgY29uZnRlc3QuZXIxCiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKICNkZWZpbmUgSEFWRV9DVVJTRVNfUkVTSVpFVEVSTSAxCkBAIC0yNTc2Miw1NSArMjIyOTIsMzggQEAKIAogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC9kZXYvcHRteCIgPiY1CiBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAvZGV2L3B0bXguLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2ZpbGVfX2Rldl9wdG14K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzICYmCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmciID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotaWYgdGVzdCAtciAiL2Rldi9wdG14IjsgdGhlbgotICBhY19jdl9maWxlX19kZXZfcHRteD15ZXMKLWVsc2UKLSAgYWNfY3ZfZmlsZV9fZGV2X3B0bXg9bm8KLWZpCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fZGV2X3B0bXgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2ZpbGVfX2Rldl9wdG14IiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2ZpbGVfX2Rldl9wdG14ID0geWVzOyB0aGVuCisKK2lmIHRlc3QgLXIgL2Rldi9wdG14Cit0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiAjZGVmaW5lIEhBVkVfREVWX1BUTVggMQogX0FDRU9GCiAKK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CiBmaQogCiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgL2Rldi9wdGMiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgL2Rldi9wdGMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2ZpbGVfX2Rldl9wdGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgJiYKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1pZiB0ZXN0IC1yICIvZGV2L3B0YyI7IHRoZW4KLSAgYWNfY3ZfZmlsZV9fZGV2X3B0Yz15ZXMKLWVsc2UKLSAgYWNfY3ZfZmlsZV9fZGV2X3B0Yz1ubwotZmkKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9maWxlX19kZXZfcHRjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9maWxlX19kZXZfcHRjIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2ZpbGVfX2Rldl9wdGMgPSB5ZXM7IHRoZW4KKworaWYgdGVzdCAtciAvZGV2L3B0YwordGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQogCiBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgogI2RlZmluZSBIQVZFX0RFVl9QVEMgMQogX0FDRU9GCiAKK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CiBmaQogCi0KIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAlemQgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnQiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJXpkIHByaW50ZigpIGZvcm1hdCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQogaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KQEAgLTI1ODMyLDEyICsyMjM0NSwyNiBAQAogCiBpbnQgbWFpbigpCiB7Ci0gICAgY2hhciBidWZmZXJbNF07CisgICAgY2hhciBidWZmZXJbMjU2XTsKKworI2lmZGVmIEhBVkVfU1NJWkVfVAordHlwZWRlZiBzc2l6ZV90IFB5X3NzaXplX3Q7CisjZWxpZiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9MT05HCit0eXBlZGVmIGxvbmcgUHlfc3NpemVfdDsKKyNlbHNlCit0eXBlZGVmIGludCBQeV9zc2l6ZV90OworI2VuZGlmCiAKICAgICBpZihzcHJpbnRmKGJ1ZmZlciwgIiV6ZCIsIChzaXplX3QpMTIzKSA8IDApCiAgICAgICAgCXJldHVybiAxOwogCi0gICAgaWYgKHN0cm5jbXAoYnVmZmVyLCAiMTIzIiwgMykpCisgICAgaWYgKHN0cmNtcChidWZmZXIsICIxMjMiKSkKKwlyZXR1cm4gMTsKKworICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiV6ZCIsIChQeV9zc2l6ZV90KS0xMjMpIDwgMCkKKyAgICAgICAJcmV0dXJuIDE7CisKKyAgICBpZiAoc3RyY21wKGJ1ZmZlciwgIi0xMjMiKSkKIAlyZXR1cm4gMTsKIAogICAgIHJldHVybiAwOwpAQCAtMjU5MjksMjcgKzIyNDU2LDEwIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQogICBjYXQgY29uZnRlc3QuZXJyID4mNQogICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiAgIGFjX2N2X3R5cGVfc29ja2xlbl90PXllcwogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQpAQCAtMjYxMTUsNyArMjI2MjUsOCBAQAogIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAotIyBCZSBCb3VybmUgY29tcGF0aWJsZQorIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCiBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKQEAgLTI2MTI0LDEwICsyMjYzNSwxMyBAQAogICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworZXNhYworCiBmaQotQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworCiAKIAogIyBQQVRIIG5lZWRzIENSCkBAIC0yNjM1MSwxOSArMjI4NjUsMjggQEAKICAgYXNfbWtkaXJfcD1mYWxzZQogZmkKIAotIyBGaW5kIG91dCB3aGV0aGVyIGBgdGVzdCAteCcnIHdvcmtzLiAgRG9uJ3QgdXNlIGEgemVyby1ieXRlIGZpbGUsIGFzCi0jIHN5c3RlbXMgbWF5IHVzZSBtZXRob2RzIG90aGVyIHRoYW4gbW9kZSBiaXRzIHRvIGRldGVybWluZSBleGVjdXRhYmlsaXR5LgotY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgotIyEgL2Jpbi9zaAotZXhpdCAwCi1fQVNFT0YKLWNobW9kICt4IGNvbmYkJC5maWxlCi1pZiB0ZXN0IC14IGNvbmYkJC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19leGVjdXRhYmxlX3A9InRlc3QgLXgiCitpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Rlc3RfeD0ndGVzdCAteCcKIGVsc2UKLSAgYXNfZXhlY3V0YWJsZV9wPToKKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYXNfbHNfTF9vcHRpb249TAorICBlbHNlCisgICAgYXNfbHNfTF9vcHRpb249CisgIGZpCisgIGFzX3Rlc3RfeD0nCisgICAgZXZhbCBzaCAtYyAnXCcnCisgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKyAgICAgICAgdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbgorICAgICAgICAtKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJwogZmkKLXJtIC1mIGNvbmYkJC5maWxlCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAogCiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCiBhc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgpAQCAtMjYzNzksNyArMjI5MDIsNyBAQAogIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KIGFjX2xvZz0iCiBUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy4wLCB3aGljaCB3YXMKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MC4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwogICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKQEAgLTI2NDA3LDcgKzIyOTMwLDcgQEAKIFVzYWdlOiAkMCBbT1BUSU9OU10gW0ZJTEVdLi4uCiAKICAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CiAgIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCiAgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcwogICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCkBAIC0yNjQyOCw3ICsyMjk1MSw3IEBACiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgogYWNfY3NfdmVyc2lvbj0iXFwKIHB5dGhvbiBjb25maWcuc3RhdHVzIDMuMAotY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYwLAorY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLAogICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgogCiBDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCmRpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KaW5kZXggNWQ0NGNjZS4uODJiYzkwZSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmluCisrKyBiL2NvbmZpZ3VyZS5pbgpAQCAtMjAxLDcgKzIwMSwxMiBAQAogICAjIE9uIE9wZW5CU0QsIHNlbGVjdCgyKSBpcyBub3QgYXZhaWxhYmxlIGlmIF9YT1BFTl9TT1VSQ0UgaXMgZGVmaW5lZCwKICAgIyBldmVuIHRob3VnaCBzZWxlY3QgaXMgYSBQT1NJWCBmdW5jdGlvbi4gUmVwb3J0ZWQgYnkgSi4gUmliYmVucy4KICAgIyBSZWNvbmZpcm1lZCBmb3IgT3BlbkJTRCAzLjMgYnkgWmFjaGFyeSBIYW1tLCBmb3IgMy40IGJ5IEphc29uIElzaC4KLSAgT3BlbkJTRC8yLiogfCBPcGVuQlNELzMuQDw6QDAxMjM0NTY3ODlAOj5AKSAKKyAgT3BlbkJTRC8yLiogfCBPcGVuQlNELzMuQDw6QDAxMjM0NTY3ODlAOj5AIHwgT3BlbkJTRC80LkA8OkAwQDo+QCkgCisgICAgZGVmaW5lX3hvcGVuX3NvdXJjZT1ubzs7CisgICMgRGVmaW5pbmcgX1hPUEVOX1NPVVJDRSBvbiBOZXRCU0QgdmVyc2lvbiBwcmlvciB0byB0aGUgaW50cm9kdWN0aW9uIG9mCisgICMgX05FVEJTRF9TT1VSQ0UgZGlzYWJsZXMgY2VydGFpbiBmZWF0dXJlcyAoZWcuIHNldGdyb3VwcykuIFJlcG9ydGVkIGJ5CisgICMgTWFyYyBSZWNodAorICBOZXRCU0QvMS41IHwgTmV0QlNELzEuNS4qIHwgTmV0QlNELzEuNiB8IE5ldEJTRC8xLjYuKiB8IE5ldEJTRC8xLjZbQS1TXSkKICAgICBkZWZpbmVfeG9wZW5fc291cmNlPW5vOzsKICAgIyBPbiBTb2xhcmlzIDIuNiwgc3lzL3dhaXQuaCBpcyBpbmNvbnNpc3RlbnQgaW4gdGhlIHVzYWdlCiAgICMgb2YgdW5pb24gX18/c2lndmFsLiBSZXBvcnRlZCBieSBTdHVhcnQgQmlzaG9wLgpAQCAtODkwLDYgKzg5NSwyMiBAQAogICBmaQogZmkKIAorIyBDaGVjayB3aGV0aGVyIEdDQyBzdXBwb3J0cyBQeUFyZ19QYXJzZVR1cGxlIGZvcm1hdAoraWYgdGVzdCAiJEdDQyIgPSAieWVzIgordGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fKQorICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorICBBQ19UUllfQ09NUElMRShbCisgICAgdm9pZCBmKGNoYXIqLC4uLilfX2F0dHJpYnV0ZSgoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDEsIDIpKSk7CisgIF0sLAorICBBQ19ERUZJTkUoSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUsIDEsIFtEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpXSkKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpLAorICBBQ19NU0dfUkVTVUxUKG5vKQorICApCisgIENGTEFHUz0kc2F2ZV9DRkxBR1MKK2ZpCisKICMgT24gc29tZSBjb21waWxlcnMsIHB0aHJlYWRzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBmdXJ0aGVyIG9wdGlvbnMKICMgKGUuZy4gTWFjT1MgWCkuIE9uIHNvbWUgb2YgdGhlc2Ugc3lzdGVtcywgdGhlIGNvbXBpbGVyIHdpbGwgbm90CiAjIGNvbXBsYWluIGlmIHVuYWNjZXB0ZWQgb3B0aW9ucyBhcmUgcGFzc2VkIChlLmcuIGdjYyBvbiBNYWMgT1MgWCkuCkBAIC0xMDY4LDggKzEwODksOCBAQAogQUNfSEVBREVSX1NUREMKIEFDX0NIRUNLX0hFQURFUlMoYXNtL3R5cGVzLmggY29uaW8uaCBjdXJzZXMuaCBkaXJlY3QuaCBkbGZjbi5oIGVycm5vLmggXAogZmNudGwuaCBncnAuaCBcCi1zaGFkb3cuaCBpby5oIGxhbmdpbmZvLmggbGliaW50bC5oIG5jdXJzZXMuaCBwb2xsLmggcHJvY2Vzcy5oIHB0aHJlYWQuaCBcCi1zaWduYWwuaCBzdHJvcHRzLmggdGVybWlvcy5oIHRocmVhZC5oIFwKK2lvLmggbGFuZ2luZm8uaCBsaWJpbnRsLmggbmN1cnNlcy5oIHBvbGwuaCBwcm9jZXNzLmggcHRocmVhZC5oIFwKK3NoYWRvdy5oIHNpZ25hbC5oIHN0ZGludC5oIHN0cm9wdHMuaCB0ZXJtaW9zLmggdGhyZWFkLmggXAogdW5pc3RkLmggdXRpbWUuaCBcCiBzeXMvYXVkaW9pby5oIHN5cy9ic2R0dHkuaCBzeXMvZmlsZS5oIHN5cy9sb2FkYXZnLmggc3lzL2xvY2suaCBzeXMvbWtkZXYuaCBcCiBzeXMvbW9kZW0uaCBcCkBAIC0xMTk3LDE2ICsxMjE4LDEyIEBACiBBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nLCA4KQogZmkKIAotQUNfTVNHX0NIRUNLSU5HKGZvciB1aW50cHRyX3Qgc3VwcG9ydCkKLWhhdmVfdWludHB0cl90PW5vCi1BQ19UUllfQ09NUElMRShbXSwgW3VpbnRwdHJfdCB4OyB4ID0gKHVpbnRwdHJfdCkwO10sIFsKLSAgQUNfREVGSU5FKEhBVkVfVUlOVFBUUl9ULCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgdWludHB0cl90Ll0pIAotICBoYXZlX3VpbnRwdHJfdD15ZXMKLV0pCi1BQ19NU0dfUkVTVUxUKCRoYXZlX3VpbnRwdHJfdCkKLWlmIHRlc3QgIiRoYXZlX3VpbnRwdHJfdCIgPSB5ZXMgOyB0aGVuCi1BQ19DSEVDS19TSVpFT0YodWludHB0cl90LCA0KQotZmkKK0FDX0NIRUNLX1RZUEVTKHVpbnRwdHJfdCwgCisgICBbQUNfQ0hFQ0tfU0laRU9GKHVpbnRwdHJfdCwgNCldLCAKKyAgIFtdLCBbI2lmZGVmIEhBVkVfU1RESU5UX0gKKyAgICAgICAgI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICAgICAjZW5kaWZdKQorCiAKICMgSG1waC4gQUNfQ0hFQ0tfU0laRU9GKCkgZG9lc24ndCBpbmNsdWRlIDxzeXMvdHlwZXMuaD4uCiBBQ19NU0dfQ0hFQ0tJTkcoc2l6ZSBvZiBvZmZfdCkKQEAgLTMzNDIsOCArMzM1OSwyNyBAQAogICBBQ19NU0dfUkVTVUxUKG5vKQogKQogCi1BQ19DSEVDS19GSUxFKC9kZXYvcHRteCwgQUNfREVGSU5FKEhBVkVfREVWX1BUTVgsIDEsIFtEZWZpbmUgaWYgd2UgaGF2ZSAvZGV2L3B0bXguXSkpCi1BQ19DSEVDS19GSUxFKC9kZXYvcHRjLCBBQ19ERUZJTkUoSEFWRV9ERVZfUFRDLCAxLCBbRGVmaW5lIGlmIHdlIGhhdmUgL2Rldi9wdGMuXSkpCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIC9kZXYvcHRteCkKKworaWYgdGVzdCAtciAvZGV2L3B0bXgKK3RoZW4KKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIEFDX0RFRklORShIQVZFX0RFVl9QVE1YLCAxLAorICBbRGVmaW5lIGlmIHdlIGhhdmUgL2Rldi9wdG14Ll0pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIC9kZXYvcHRjKQorCitpZiB0ZXN0IC1yIC9kZXYvcHRjCit0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorICBBQ19ERUZJTkUoSEFWRV9ERVZfUFRDLCAxLAorICBbRGVmaW5lIGlmIHdlIGhhdmUgL2Rldi9wdGMuXSkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCiAKIEFDX01TR19DSEVDS0lORyhmb3IgJXpkIHByaW50ZigpIGZvcm1hdCBzdXBwb3J0KQogQUNfVFJZX1JVTihbI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0zMzUyLDE0ICszMzg4LDI4IEBACiAKIGludCBtYWluKCkKIHsKLSAgICBjaGFyIGJ1ZmZlcls0XTsKKyAgICBjaGFyIGJ1ZmZlclsyNTZdOworCisjaWZkZWYgSEFWRV9TU0laRV9UCit0eXBlZGVmIHNzaXplX3QgUHlfc3NpemVfdDsKKyNlbGlmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkcKK3R5cGVkZWYgbG9uZyBQeV9zc2l6ZV90OworI2Vsc2UKK3R5cGVkZWYgaW50IFB5X3NzaXplX3Q7CisjZW5kaWYKIAogICAgIGlmKHNwcmludGYoYnVmZmVyLCAiJXpkIiwgKHNpemVfdCkxMjMpIDwgMCkKICAgICAgICAJcmV0dXJuIDE7CiAKLSAgICBpZiAoc3RybmNtcChidWZmZXIsICIxMjMiLCAzKSkKKyAgICBpZiAoc3RyY21wKGJ1ZmZlciwgIjEyMyIpKQogCXJldHVybiAxOwotICAgIAorCisgICAgaWYgKHNwcmludGYoYnVmZmVyLCAiJXpkIiwgKFB5X3NzaXplX3QpLTEyMykgPCAwKQorICAgICAgIAlyZXR1cm4gMTsKKworICAgIGlmIChzdHJjbXAoYnVmZmVyLCAiLTEyMyIpKQorCXJldHVybiAxOworCiAgICAgcmV0dXJuIDA7CiB9XSwKIFtBQ19NU0dfUkVTVUxUKHllcykKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IGEzZDdmNmUuLjY0MDc4NzEgMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtNDAsNiArNDAsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc20vdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9BU01fVFlQRVNfSAogCisvKiBEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpICovCisjdW5kZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiaW5kX3RleHRkb21haW5fY29kZXNldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVAogCkBAIC02NzcsNyArNjgwLDcgQEAKIC8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRjbCBhbmQgVENMX1VURl9NQVg9PTYgKi8KICN1bmRlZiBIQVZFX1VDUzRfVENMCiAKLS8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSB0eXBlIHVpbnRwdHJfdC4gKi8KKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50cHRyX3QnLiAqLwogI3VuZGVmIEhBVkVfVUlOVFBUUl9UCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQppbmRleCAxZTU4YTJmLi4zOTAwMTA3IDEwMDY0NAotLS0gYS9zZXR1cC5weQorKysgYi9zZXR1cC5weQpAQCAtNjc5LDcgKzY3OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzYXZlIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSB3aXRoIHRoZSBkYi5oIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChmaXJzdCBvY2N1cnJhbmNlIG9ubHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJfdmVyX2luY19tYXBbZGJfdmVyXSA9IGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiZGIuaDogZm91bmQiLCBkYl92ZXIsICJpbiIsIGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYl9zZXR1cF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImRiLmg6IGZvdW5kIiwgZGJfdmVyLCAiaW4iLCBkCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgYWxyZWFkeSBmb3VuZCBhIGhlYWRlciBmb3IgdGhpcyBsaWJyYXJ5IHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYl9zZXR1cF9kZWJ1ZzogcHJpbnQgImRiLmg6IGlnbm9yaW5nIiwgZApAQCAtNzE5LDggKzcyMCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYl9zZXR1cF9kZWJ1ZzogcHJpbnQgImRiIGxpYjogIiwgZGJsaWIsICJub3QgZm91bmQiCiAKICAgICAgICAgZXhjZXB0IGRiX2ZvdW5kOgotICAgICAgICAgICAgcHJpbnQgImRiIGxpYjogdXNpbmciLCBkYl92ZXIsIGRibGliCi0gICAgICAgICAgICBpZiBkYl9zZXR1cF9kZWJ1ZzogcHJpbnQgImRiOiBsaWIgZGlyIiwgZGJsaWJfZGlyLCAiaW5jIGRpciIsIGRiX2luY2RpcgorICAgICAgICAgICAgaWYgZGJfc2V0dXBfZGVidWc6CisgICAgICAgICAgICAgICAgcHJpbnQgImRiIGxpYjogdXNpbmciLCBkYl92ZXIsIGRibGliCisgICAgICAgICAgICAgICAgcHJpbnQgImRiOiBsaWIgZGlyIiwgZGJsaWJfZGlyLCAiaW5jIGRpciIsIGRiX2luY2RpcgogICAgICAgICAgICAgZGJfaW5jcyA9IFtkYl9pbmNkaXJdCiAgICAgICAgICAgICBkYmxpYnMgPSBbZGJsaWJdCiAgICAgICAgICAgICAjIFdlIGFkZCB0aGUgcnVudGltZV9saWJyYXJ5X2RpcnMgYXJndW1lbnQgYmVjYXVzZSB0aGUKQEAgLTc0MSw3ICs3NDMsNyBAQAogICAgICAgICAgICAgZGJsaWJfZGlyID0gTm9uZQogCiAgICAgICAgICMgVGhlIHNxbGl0ZSBpbnRlcmZhY2UKLSAgICAgICAgc3FsaXRlX3NldHVwX2RlYnVnID0gVHJ1ZSAgICMgdmVyYm9zZSBkZWJ1ZyBwcmludHMgZnJvbSB0aGlzIHNjcmlwdD8KKyAgICAgICAgc3FsaXRlX3NldHVwX2RlYnVnID0gRmFsc2UgICAjIHZlcmJvc2UgZGVidWcgcHJpbnRzIGZyb20gdGhpcyBzY3JpcHQ/CiAKICAgICAgICAgIyBXZSBodW50IGZvciAjZGVmaW5lIFNRTElURV9WRVJTSU9OICJuLm4ubiIKICAgICAgICAgIyBXZSBuZWVkIHRvIGZpbmQgPj0gc3FsaXRlIHZlcnNpb24gMy4wLjgKQEAgLTc3Myw3ICs3NzUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHNxbGl0ZV92ZXJzaW9uLnNwbGl0KCIuIildKQogICAgICAgICAgICAgICAgICAgICBpZiBzcWxpdGVfdmVyc2lvbl90dXBsZSA+PSBNSU5fU1FMSVRFX1ZFUlNJT05fTlVNQkVSOgogICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSB3aW4hCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJXMvc3FsaXRlMy5oOiB2ZXJzaW9uICVzIiUoZCwgc3FsaXRlX3ZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcWxpdGVfc2V0dXBfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzL3NxbGl0ZTMuaDogdmVyc2lvbiAlcyIlKGQsIHNxbGl0ZV92ZXJzaW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlX2luY2RpciA9IGQKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Cg==