ZGlmZiAtLWdpdCBhL3J1bnRpbWUvYXV0b2xvYWQvdG9odG1sLnZpbSBiL3J1bnRpbWUvYXV0b2xvYWQvdG9odG1sLnZpbQppbmRleCBhZDMzY2VlLi4yZTkwMjFhIDEwMDY0NAotLS0gYS9ydW50aW1lL2F1dG9sb2FkL3RvaHRtbC52aW0KKysrIGIvcnVudGltZS9hdXRvbG9hZC90b2h0bWwudmltCkBAIC0xLDYgKzEsNiBAQAogIiBWaW0gYXV0b2xvYWQgZmlsZSBmb3IgdGhlIHRvaHRtbCBwbHVnaW4uCiAiIE1haW50YWluZXI6IEJlbiBGcml0eiA8ZnJpdHpvcGhyZW5pY0BnbWFpbC5jb20+Ci0iIExhc3QgQ2hhbmdlOiAyMDExIEFwciAwNQorIiBMYXN0IENoYW5nZTogMjAxMiBKdW4gMzAKICIKICIgQWRkaXRpb25hbCBjb250cmlidXRvcnM6CiAiCkBAIC0xMSw3ICsxMSw3IEBACiAKICIgdGhpcyBmaWxlIHVzZXMgbGluZSBjb250aW51YXRpb25zCiBsZXQgczpjcG9fc2F2ID0gJmNwbwotc2V0IGNwby09Qworc2V0IGNwbyZ2aW0KIAogIiBBdXRvbWF0aWNhbGx5IGZpbmQgY2hhcnNldHMgZnJvbSBhbGwgZW5jb2RpbmdzIHN1cHBvcnRlZCBuYXRpdmVseSBieSBWaW0uIFdpdGgKICIgdGhlIDhiaXQtIGFuZCAyYnl0ZS0gcHJlZml4ZXMsIFZpbSBjYW4gYWN0dWFsbHkgc3VwcG9ydCBtb3JlIGVuY29kaW5ncyB0aGFuCkBAIC0zOTEsMTIgKzM5MSwyNSBAQAogICBjYWxsIGFkZChodG1sLCAnPG1ldGEgbmFtZT0icGx1Z2luLXZlcnNpb24iIGNvbnRlbnQ9IicuZzpsb2FkZWRfMmh0bWxfcGx1Z2luLiciJy50YWdfY2xvc2UpCiAgIGNhbGwgYWRkKGh0bWwsICc8bWV0YSBuYW1lPSJzZXR0aW5ncyIgY29udGVudD0iJy4KIAlcIGpvaW4oZmlsdGVyKGtleXMoczpzZXR0aW5ncyksJ3M6c2V0dGluZ3Nbdjp2YWxdJyksJywnKS4KKwlcICcscHJldmVudF9jb3B5PScuczpzZXR0aW5ncy5wcmV2ZW50X2NvcHkuCiAJXCAnIicudGFnX2Nsb3NlKQorICBjYWxsIGFkZChodG1sLCAnPG1ldGEgbmFtZT0iY29sb3JzY2hlbWUiIGNvbnRlbnQ9IicuCisJXCAoZXhpc3RzKCdnOmNvbG9yc19uYW1lJykKKwlcID8gZzpjb2xvcnNfbmFtZQorCVwgOiAnbm9uZScpLiAnIicudGFnX2Nsb3NlKQogCiAgIGNhbGwgYWRkKGh0bWwsICc8L2hlYWQ+JykKICAgbGV0IGJvZHlfbGluZV9udW0gPSBsZW4oaHRtbCkKLSAgY2FsbCBhZGQoaHRtbCwgJzxib2R5PicpCi0gIGNhbGwgYWRkKGh0bWwsICc8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+JykKKyAgaWYgIWVtcHR5KHM6c2V0dGluZ3MucHJldmVudF9jb3B5KQorICAgIGNhbGwgYWRkKGh0bWwsICI8Ym9keSBvbmxvYWQ9J0ZpeENoYXJXaWR0aCgpOyc+IikKKyAgICBjYWxsIGFkZChodG1sLCAiPCEtLSBoaWRkZW4gZGl2cyB1c2VkIGJ5IGphdmFzY3JpcHQgdG8gZ2V0IHRoZSB3aWR0aCBvZiBhIGNoYXIgLS0+IikKKyAgICBjYWxsIGFkZChodG1sLCAiPGRpdiBpZD0nb25lQ2hhcldpZHRoJz4wPC9kaXY+IikKKyAgICBjYWxsIGFkZChodG1sLCAiPGRpdiBpZD0nb25lSW5wdXRXaWR0aCc+PGlucHV0IHNpemU9JzEnIHZhbHVlPScwJyIudGFnX2Nsb3NlLiI8L2Rpdj4iKQorICAgIGNhbGwgYWRkKGh0bWwsICI8ZGl2IGlkPSdvbmVFbVdpZHRoJyBzdHlsZT0nd2lkdGg6IDFlbTsnPjwvZGl2PiIpCisgIGVsc2UKKyAgICBjYWxsIGFkZChodG1sLCAnPGJvZHk+JykKKyAgZW5kaWYKKyAgY2FsbCBhZGQoaHRtbCwgIjx0YWJsZSBib3JkZXI9JzEnIHdpZHRoPScxMDAlJyBpZD0ndmltQ29kZUVsZW1lbnQnPiIpCiAKICAgY2FsbCBhZGQoaHRtbCwgJzx0cj4nKQogICBmb3IgYnVmIGluIGE6d2luX2xpc3QKQEAgLTQ1NCwxNiArNDY3LDE5IEBACiAgICAgICBsZXQgaW5zZXJ0X2luZGV4ID0gZGlmZl9zdHlsZV9zdGFydAogICAgIGVuZGlmCiAKLSAgICAiIERlbGV0ZSB0aG9zZSBwYXJ0cyB0aGF0IGFyZSBub3QgbmVlZGVkIHNvCi0gICAgIiB3ZSBjYW4gaW5jbHVkZSB0aGUgcmVzdCBpbnRvIHRoZSByZXN1bHRpbmcgdGFibGUKLSAgICAxLC9ePGJvZHkvZF8KKyAgICAiIERlbGV0ZSB0aG9zZSBwYXJ0cyB0aGF0IGFyZSBub3QgbmVlZGVkIHNvIHdlIGNhbiBpbmNsdWRlIHRoZSByZXN0IGludG8gdGhlCisgICAgIiByZXN1bHRpbmcgdGFibGUuCisgICAgMSwvXjxib2R5LipcJShcbjwhLS0uKi0tPlxfc1wrLippZD0nb25lQ2hhcldpZHRoJy4qXF9zXCsuKmlkPSdvbmVJbnB1dFdpZHRoJy4qXF9zXCsuKmlkPSdvbmVFbVdpZHRoJ1wpXD9cenMvZF8KICAgICAkCiAgICAgPzwvYm9keT4/LCRkXwogICAgIGxldCB0ZW1wID0gZ2V0bGluZSgxLCckJykKKyAgICAiIGNsZWFuIG91dCBpZCBvbiB0aGUgbWFpbiBjb250ZW50IGNvbnRhaW5lciBiZWNhdXNlIHdlIGFscmVhZHkgc2V0IGl0IG9uCisgICAgIiB0aGUgdGFibGUKKyAgICBsZXQgdGVtcFswXSA9IHN1YnN0aXR1dGUodGVtcFswXSwgIiBpZD0ndmltQ29kZUVsZW1lbnQnIiwgIiIsICIiKQogICAgICIgdW5kbyBkZWxldGlvbiBvZiBzdGFydCBhbmQgZW5kIHBhcnQKICAgICAiIHNvIHdlIGNhbiBsYXRlciBzYXZlIHRoZSBmaWxlIGFzIHZhbGlkIGh0bWwKICAgICAiIFRPRE86IHJlc3RvcmUgdXNpbmcgZ3JhYmJlZCBsaW5lcyBpZiB1bmRvbGV2ZWwgaXMgMT8KLSAgICBub3JtYWwgMnUKKyAgICBub3JtYWwhIDJ1CiAgICAgaWYgczpzZXR0aW5ncy51c2VfY3NzCiAgICAgICBjYWxsIGFkZChodG1sLCAnPHRkIHZhbGlnbj0idG9wIj48ZGl2PicpCiAgICAgZWxzZWlmIHM6c2V0dGluZ3MudXNlX3hodG1sCkBAIC01MjAsMTIgKzUzNiw0NyBAQAogICAgIDEKICAgICBsZXQgc3R5bGVfc3RhcnQgPSBzZWFyY2goJ148L2hlYWQ+JyktMQogCisgICAgIiBhZGQgcmVxdWlyZWQgamF2YXNjcmlwdCBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIGNhbiBqdXN0IGNhbGwgYXBwZW5kIGFnYWluCisgICAgIiBhbmQgYWdhaW4gd2l0aG91dCBhZGp1c3Rpbmcge3t7CisKKyAgICAiIGluc2VydCBzY3JpcHQgY2xvc2luZyB0YWcgaWYgYW55IGphdmFzY3JpcHQgaXMgbmVlZGVkCisgICAgaWYgczpzZXR0aW5ncy5keW5hbWljX2ZvbGRzIHx8ICFlbXB0eShzOnNldHRpbmdzLnByZXZlbnRfY29weSkKKyAgICAgIGNhbGwgYXBwZW5kKHN0eWxlX3N0YXJ0LCBbCisJICAgIFwgJycsCisJICAgIFwgczpzZXR0aW5ncy51c2VfeGh0bWwgPyAnLy9dXT4nIDogJy0tPicsCisJICAgIFwgIjwvc2NyaXB0PiIKKwkgICAgXCBdKQorICAgIGVuZGlmCisKKyAgICAiIGluc2VydCBzY3JpcHQgd2hpY2ggY29ycmVjdHMgdGhlIHNpemUgb2Ygc21hbGwgaW5wdXQgZWxlbWVudHMgaW4KKyAgICAiIHByZXZlbnRfY29weSBtb2RlLiBTZWUgMmh0bWwudmltIGZvciBkZXRhaWxzIG9uIHdoeSB0aGlzIGlzIG5lZWRlZCBhbmQgaG93CisgICAgIiBpdCB3b3Jrcy4KKyAgICBpZiAhZW1wdHkoczpzZXR0aW5ncy5wcmV2ZW50X2NvcHkpCisgICAgICBjYWxsIGFwcGVuZChzdHlsZV9zdGFydCwgWworCSAgICBcICcnLAorCSAgICBcICcvKiBzaW11bGF0ZSBhICJjaCIgdW5pdCBieSBhc2tpbmcgdGhlIGJyb3dzZXIgaG93IGJpZyBhIHplcm8gY2hhcmFjdGVyIGlzICovJywKKwkgICAgXCAnZnVuY3Rpb24gRml4Q2hhcldpZHRoKCkgeycsCisJICAgIFwgJyAgLyogZ2V0IHRoZSBoaWRkZW4gZWxlbWVudCB3aGljaCBnaXZlcyB0aGUgd2lkdGggb2YgYSBzaW5nbGUgY2hhcmFjdGVyICovJywKKwkgICAgXCAnICB2YXIgZ29vZFdpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9uZUNoYXJXaWR0aCIpLmNsaWVudFdpZHRoOycsCisJICAgIFwgJyAgLyogZ2V0IGFsbCBpbnB1dCBlbGVtZW50cywgd2UnJ2xsIGZpbHRlciBvbiBjbGFzcyBsYXRlciAqLycsCisJICAgIFwgJyAgdmFyIGlucHV0VGFncyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOycsCisJICAgIFwgJyAgdmFyIHJhdGlvID0gNTsnLAorCSAgICBcICcgIHZhciBpbnB1dFdpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9uZUlucHV0V2lkdGgiKS5jbGllbnRXaWR0aDsnLAorCSAgICBcICcgIHZhciBlbVdpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9uZUVtV2lkdGgiKS5jbGllbnRXaWR0aDsnLAorCSAgICBcICcgIGlmIChpbnB1dFdpZHRoID4gZ29vZFdpZHRoKSB7JywKKwkgICAgXCAnICAgIHdoaWxlIChyYXRpbyA8IDEwMCpnb29kV2lkdGgvZW1XaWR0aCAmJiByYXRpbyA8IDEwMCkgeycsCisJICAgIFwgJyAgICByYXRpbyArPSA1OycsCisJICAgIFwgJyAgfScsCisJICAgIFwgJyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZpbUNvZGVFbGVtZW50IikuY2xhc3NOYW1lID0gImVtIityYXRpbzsnLAorCSAgICBcICcgIH0nLAorCSAgICBcICd9JworCSAgICBcIF0pCisgICAgZW5kaWYKKwogICAgICIgSW5zZXJ0IGphdmFzY3JpcHQgdG8gdG9nZ2xlIG1hdGNoaW5nIGZvbGRzIG9wZW4gYW5kIGNsb3NlZCBpbiBhbGwgd2luZG93cywKLSAgICAiIGlmIGR5bmFtaWMgZm9sZGluZyBpcyBhY3RpdmUuIHt7eworICAgICIgaWYgZHluYW1pYyBmb2xkaW5nIGlzIGFjdGl2ZS4KICAgICBpZiBzOnNldHRpbmdzLmR5bmFtaWNfZm9sZHMKICAgICAgIGNhbGwgYXBwZW5kKHN0eWxlX3N0YXJ0LCBbCi0JICAgIFwgICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IiwKLQkgICAgXCAgczpzZXR0aW5ncy51c2VfeGh0bWwgPyAnLy88IVtDREFUQVsnIDogIiAgPCEtLSIsCiAJICAgIFwgICIgIGZ1bmN0aW9uIHRvZ2dsZUZvbGQob2JqSUQpIiwKIAkgICAgXCAgIiAgeyIsCiAJICAgIFwgICIgICAgZm9yICh3aW5fbnVtID0gMTsgd2luX251bSA8PSAiLmxlbihhOmJ1Zl9saXN0KS4iOyB3aW5fbnVtKyspIiwKQEAgLTU0Miw5ICs1OTMsMTQgQEAKIAkgICAgXCAgIiAgICAgIH0iLAogCSAgICBcICAiICAgIH0iLAogCSAgICBcICAiICB9IiwKLQkgICAgXCAgczpzZXR0aW5ncy51c2VfeGh0bWwgPyAnLy9dXT4nIDogIiAgLS0+IiwKLQkgICAgXCAgIjwvc2NyaXB0PiIKIAkgICAgXCBdKQorICAgIGVuZGlmCisKKyAgICAiIGluc2VydCBzY3JpcHQgdGFnIGlmIGFueSBqYXZhc2NyaXB0IGlzIG5lZWRlZAorICAgIGlmIHM6c2V0dGluZ3MuZHluYW1pY19mb2xkcyB8fCBzOnNldHRpbmdzLnByZXZlbnRfY29weSAhPSAiIgorICAgICAgY2FsbCBhcHBlbmQoc3R5bGVfc3RhcnQsIFsKKwkgICAgXCAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiIsCisJICAgIFwgczpzZXR0aW5ncy51c2VfeGh0bWwgPyAnLy88IVtDREFUQVsnIDogIjwhLS0iXSkKICAgICBlbmRpZiAifX19CiAKICAgICAiIEluc2VydCBzdHlsZXMgZnJvbSBhbGwgdGhlIGdlbmVyYXRlZCBodG1sIGRvY3VtZW50cyBhbmQgYWRkaXRpb25hbCBzdHlsZXMKQEAgLTYwOSw5ICs2NjUsMTAgQEAKICAgICBjYWxsIHRvaHRtbCNHZXRPcHRpb24odXNlcl9zZXR0aW5ncywgJ2lnbm9yZV9jb25jZWFsJywgMCApCiAgICAgY2FsbCB0b2h0bWwjR2V0T3B0aW9uKHVzZXJfc2V0dGluZ3MsICdpZ25vcmVfZm9sZGluZycsIDAgKQogICAgIGNhbGwgdG9odG1sI0dldE9wdGlvbih1c2VyX3NldHRpbmdzLCAgJ2R5bmFtaWNfZm9sZHMnLCAwICkKLSAgICBjYWxsIHRvaHRtbCNHZXRPcHRpb24odXNlcl9zZXR0aW5ncywgICdub19mb2xkY29sdW1uJywgMCApCisgICAgY2FsbCB0b2h0bWwjR2V0T3B0aW9uKHVzZXJfc2V0dGluZ3MsICAnbm9fZm9sZGNvbHVtbicsIHVzZXJfc2V0dGluZ3MuaWdub3JlX2ZvbGRpbmcpCiAgICAgY2FsbCB0b2h0bWwjR2V0T3B0aW9uKHVzZXJfc2V0dGluZ3MsICAgJ2hvdmVyX3VuZm9sZCcsIDAgKQogICAgIGNhbGwgdG9odG1sI0dldE9wdGlvbih1c2VyX3NldHRpbmdzLCAgICAgICAgICdub19wcmUnLCAwICkKKyAgICBjYWxsIHRvaHRtbCNHZXRPcHRpb24odXNlcl9zZXR0aW5ncywgICAgICdub19pbnZhbGlkJywgMCApCiAgICAgY2FsbCB0b2h0bWwjR2V0T3B0aW9uKHVzZXJfc2V0dGluZ3MsICAgJ3dob2xlX2ZpbGxlcicsIDAgKQogICAgIGNhbGwgdG9odG1sI0dldE9wdGlvbih1c2VyX3NldHRpbmdzLCAgICAgICd1c2VfeGh0bWwnLCAwICkKICAgICAiIH19fQpAQCAtNjM3LDYgKzY5NCw4IEBACiAgICAgIiBkeW5hbWljIGZvbGRpbmcgaW1wbGllcyBjc3MKICAgICBpZiB1c2VyX3NldHRpbmdzLmR5bmFtaWNfZm9sZHMKICAgICAgIGxldCB1c2VyX3NldHRpbmdzLnVzZV9jc3MgPSAxCisgICAgZWxzZQorICAgICAgbGV0IHVzZXJfc2V0dGluZ3Mubm9fZm9sZGNvbHVtbiA9IDEgIiB3b24ndCBkbyBhbnl0aGluZyBidXQgZm9yIGNvbnNpc3RlbmN5IGFuZCBmb3IgdGhlIHRlc3Qgc3VpdGUKICAgICBlbmRpZgogCiAgICAgIiBpZiB3ZSdyZSBub3QgdXNpbmcgQ1NTIHdlIGNhbm5vdCB1c2UgYSBwcmUgc2VjdGlvbiBiZWNhdXNlIDxmb250PiB0YWdzCkBAIC02NjMsNiArNzIyLDcgQEAKICAgICBlbmRpZgogICAgICIgfX19CiAKKyAgICAiIHRleHR1YWwgb3B0aW9ucwogICAgIGlmIGV4aXN0cygiZzpodG1sX3VzZV9lbmNvZGluZyIpICJ7e3sKICAgICAgICIgdXNlciBzcGVjaWZpZWQgdGhlIGRlc2lyZWQgTUlNRSBjaGFyc2V0LCBmaWd1cmUgb3V0IHByb3BlcgogICAgICAgIiAnZmlsZWVuY29kaW5nJyBmcm9tIGl0IG9yIHdhcm4gdGhlIHVzZXIgaWYgd2UgY2Fubm90CkBAIC03MDUsNiArNzY1LDQ1IEBACiAgICAgICBlbmRpZgogICAgIGVuZGlmICJ9fX0KIAorICAgICIgRGVmYXVsdCB0byBtYWtpbmcgbm90aGluZyB1bmNvcHlhYmxlLCBiZWNhdXNlIHdlIGRlZmF1bHQgdG8KKyAgICAiIG5vdC1zdGFuZGFyZHMgd2F5IG9mIGRvaW5nIHRoaW5ncywgYW5kIGFsc28gYmVjYXVzZSBNaWNyb3NvZnQgV29yZCBhbmQKKyAgICAiIG90aGVycyBwYXN0ZSB0aGUgPGlucHV0PiBlbGVtZW50cyBhbnl3YXkuCisgICAgIgorICAgICIgaHRtbF9wcmV2ZW50X2NvcHkgb25seSBoYXMgYW4gZWZmZWN0IHdoZW4gdXNpbmcgQ1NTLgorICAgICIKKyAgICAiIEFsbCBvcHRpb25zOgorICAgICIJICBmIC0gZm9sZCBjb2x1bW4KKyAgICAiCSAgbiAtIGxpbmUgbnVtYmVycyAoYWxzbyB3aXRoaW4gZm9sZCB0ZXh0KQorICAgICIJICB0IC0gZm9sZCB0ZXh0CisgICAgIgkgIGQgLSBkaWZmIGZpbGxlcgorICAgICIJICBjIC0gY29uY2VhbGVkIHRleHQgKHJlc2VydmVkIGZ1dHVyZSkKKyAgICAiCSAgbCAtIGxpc3RjaGFycyAocmVzZXJ2ZWQgcG9zc2libGUgZnV0dXJlKQorICAgICIJICBzIC0gc2lnbnMgKHJlc2VydmVkIHBvc3NpYmxlIGZ1dHVyZSkKKyAgICAiCisgICAgIiBOb3JtYWwgdGV4dCBpcyBhbHdheXMgc2VsZWN0YWJsZS4KKyAgICBsZXQgdXNlcl9zZXR0aW5ncy5wcmV2ZW50X2NvcHkgPSAiIgorICAgIGlmIHVzZXJfc2V0dGluZ3MudXNlX2NzcworICAgICAgaWYgZXhpc3RzKCJnOmh0bWxfcHJldmVudF9jb3B5IikKKwlpZiB1c2VyX3NldHRpbmdzLmR5bmFtaWNfZm9sZHMgJiYgIXVzZXJfc2V0dGluZ3Mubm9fZm9sZGNvbHVtbiAmJiBnOmh0bWxfcHJldmVudF9jb3B5ID1+IyAnZicKKwkgIGxldCB1c2VyX3NldHRpbmdzLnByZXZlbnRfY29weSAuPSAnZicKKwllbmRpZgorCWlmIHVzZXJfc2V0dGluZ3MubnVtYmVyX2xpbmVzICYmIGc6aHRtbF9wcmV2ZW50X2NvcHkgPX4jICduJworCSAgbGV0IHVzZXJfc2V0dGluZ3MucHJldmVudF9jb3B5IC49ICduJworCWVuZGlmCisJaWYgJmRpZmYgJiYgZzpodG1sX3ByZXZlbnRfY29weSA9fiMgJ2QnCisJICBsZXQgdXNlcl9zZXR0aW5ncy5wcmV2ZW50X2NvcHkgLj0gJ2QnCisJZW5kaWYKKwlpZiAhdXNlcl9zZXR0aW5ncy5pZ25vcmVfZm9sZGluZyAmJiBnOmh0bWxfcHJldmVudF9jb3B5ID1+IyAndCcKKwkgIGxldCB1c2VyX3NldHRpbmdzLnByZXZlbnRfY29weSAuPSAndCcKKwllbmRpZgorICAgICAgZWxzZQorCWxldCB1c2VyX3NldHRpbmdzLnByZXZlbnRfY29weSA9ICIiCisgICAgICBlbmRpZgorICAgIGVuZGlmCisgICAgaWYgZW1wdHkodXNlcl9zZXR0aW5ncy5wcmV2ZW50X2NvcHkpCisgICAgICBsZXQgdXNlcl9zZXR0aW5ncy5ub19pbnZhbGlkID0gMAorICAgIGVuZGlmCisKICAgICAiIFRPRE86IGZvbnQKIAogICAgIHJldHVybiB1c2VyX3NldHRpbmdzCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL21jcy52aW0gYi9ydW50aW1lL2NvbXBpbGVyL21jcy52aW0KaW5kZXggZDg1ZGE3ZC4uYzYwNjU4NiAxMDA2NDQKLS0tIGEvcnVudGltZS9jb21waWxlci9tY3MudmltCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvbWNzLnZpbQpAQCAtMSw3ICsxLDggQEAKICIgVmltIGNvbXBpbGVyIGZpbGUKICIgQ29tcGlsZXI6ICAgIE1vbm8gQyMgQ29tcGlsZXIKICIgTWFpbnRhaW5lcjogIEphcmVrIFNvYmllY2tpIDxoYXJpamFyaUBnbzIucGw+Ci0iIExhdGVzdCBSZXZpc2lvbjogMjAwNi0wNi0xOAorIiBMYXN0IFVwZGF0ZWQgQnk6IFBldGVyIENvbGxpbmdib3VybmUKKyIgTGF0ZXN0IFJldmlzaW9uOiAyMDEyIEp1bCAxOQogCiBpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQogICBmaW5pc2gKQEAgLTEyLDEzICsxMywxOCBAQAogc2V0IGNwby09QwogCiBzZXRsb2NhbCBlcnJvcmZvcm1hdD0KKyAgICAgICAgIFwlRCUuJSNQcm9qZWN0XCBcIiVmLyVbJV4vXCJdJSNcIiUuJSMsCisgICAgICAgICBcJVglLiUjRG9uZVwgYnVpbGRpbmdcIHByb2plY3RcIFwiJWYvJVslXi9cIl0lI1wiJS4lIywKKyAgICAgICAgIFwlLUclXFxzJS4lIywKKyAgICAgICAgIFwlRSVmKCVsKTpcIGVycm9yXCBDUyVuOiVtLAorICAgICAgICAgXCVXJWYoJWwpOlwgd2FybmluZ1wgQ1MlbjolbSwKICAgICAgICAgIFwlRSVmKCVsXFwsJWMpOlwgZXJyb3JcIENTJW46JW0sCiAgICAgICAgICBcJVclZiglbFxcLCVjKTpcIHdhcm5pbmdcIENTJW46JW0sCiAgICAgICAgICBcJUUlPnN5bnRheFwgZXJyb3JcXCwlbSwlWiVmKCVsXFwsJWMpOlwgZXJyb3JcIENTJW46JW0sCiAgICAgICAgICBcJUQlKlxcYVslKlxcZF06XCBFbnRlcmluZ1wgZGlyZWN0b3J5XCBgJWYnLAogICAgICAgICAgXCVYJSpcXGFbJSpcXGRdOlwgTGVhdmluZ1wgZGlyZWN0b3J5XCBgJWYnLAogICAgICAgICAgXCVETWFraW5nXCAlKlxcYVwgaW5cICVmLAotICAgICAgICAgXCVHLSUuJSMKKyAgICAgICAgIFwlLUclLiUjCiAKIGxldCAmY3BvID0gczpjcG9fc2F2ZQogdW5sZXQgczpjcG9fc2F2ZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaW5kZXgudHh0IGIvcnVudGltZS9kb2MvaW5kZXgudHh0CmluZGV4IDMzODA2YmIuLjQyM2U3YjkgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2luZGV4LnR4dAorKysgYi9ydW50aW1lL2RvYy9pbmRleC50eHQKQEAgLTEsNCArMSw0IEBACi0qaW5kZXgudHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDExIEF1ZyAwNgorKmluZGV4LnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMiBKdWwgMjUKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTcxOSw2ICs3MTksOCBAQAogfGdIfAkJZ0gJCSAgIHN0YXJ0IFNlbGVjdCBsaW5lIG1vZGUKIHxnSXwJCWdJCQkyICBsaWtlICJJIiwgYnV0IGFsd2F5cyBzdGFydCBpbiBjb2x1bW4gMQogfGdKfAkJZ0oJCTIgIGpvaW4gbGluZXMgd2l0aG91dCBpbnNlcnRpbmcgc3BhY2UKK3xnTnwJCWdOCSAgICAgIDEsMiAgZmluZCB0aGUgcHJldmlvdXMgbWF0Y2ggd2l0aCB0aGUgbGFzdCB1c2VkCisJCQkJICAgc2VhcmNoIHBhdHRlcm4gYW5kIFZpc3VhbGx5IHNlbGVjdCBpdAogfGdQfAkJWyJ4XWdQCQkyICBwdXQgdGhlIHRleHQgW2Zyb20gcmVnaXN0ZXIgeF0gYmVmb3JlIHRoZQogCQkJCSAgIGN1cnNvciBOIHRpbWVzLCBsZWF2ZSB0aGUgY3Vyc29yIGFmdGVyIGl0CiB8Z1F8CQlnUQkJICAgIHN3aXRjaCB0byAiRXgiIG1vZGUgd2l0aCBWaW0gZWRpdGluZwpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbW90aW9uLnR4dCBiL3J1bnRpbWUvZG9jL21vdGlvbi50eHQKaW5kZXggOWIwYWY4Yy4uZTFjOTM3MiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvbW90aW9uLnR4dAorKysgYi9ydW50aW1lL2RvYy9tb3Rpb24udHh0CkBAIC0xLDQgKzEsNCBAQAotKm1vdGlvbi50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMiBKdWwgMDYKKyptb3Rpb24udHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTIgSnVsIDI1CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC01Nyw3ICs1Nyw3IEBACiAJfD58CT4Jc2hpZnQgcmlnaHQKIAl8PHwJPAlzaGlmdCBsZWZ0CiAJfHpmfAl6ZglkZWZpbmUgYSBmb2xkCi0JfGdAfCAgICBnQCAgICAgIGNhbGwgZnVuY3Rpb24gc2V0IHdpdGggdGhlICdvcGVyYXRvcmZ1bmMnIG9wdGlvbgorCXxnQHwJZ0AJY2FsbCBmdW5jdGlvbiBzZXQgd2l0aCB0aGUgJ29wZXJhdG9yZnVuYycgb3B0aW9uCiAKIElmIHRoZSBtb3Rpb24gaW5jbHVkZXMgYSBjb3VudCBhbmQgdGhlIG9wZXJhdG9yIGFsc28gaGFkIGEgY291bnQgYmVmb3JlIGl0LAogdGhlIHR3byBjb3VudHMgYXJlIG11bHRpcGxpZWQuICBGb3IgZXhhbXBsZTogIjJkM3ciIGRlbGV0ZXMgc2l4IHdvcmRzLgpAQCAtNTEzLDYgKzUxMyw4IEBACiBUaGVzZSBjb21tYW5kcyBhcmUge25vdCBpbiBWaX0uCiBUaGVzZSBjb21tYW5kcyBhcmUgbm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3RleHRvYmplY3RzfCBmZWF0dXJlIGhhcyBiZWVuCiBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCitBbHNvIHNlZSBgZ25gIGFuZCBgZ05gLCBvcGVyYXRpbmcgb24gdGhlIGxhc3Qgc2VhcmNoIHBhdHRlcm4uCisKIAkJCQkJCQkqdl9hdyogKmF3KgogYXcJCQkiYSB3b3JkIiwgc2VsZWN0IFtjb3VudF0gd29yZHMgKHNlZSB8d29yZHwpLgogCQkJTGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZSBzcGFjZSBpcyBpbmNsdWRlZCwgYnV0IG5vdApAQCAtNjg5LDYgKzY5MSw3IEBACiAJImRhdyIJZGVsZXRlIGEgd29yZAkJCQkqZGF3KgogCSJkaVciCWRlbGV0ZSBpbm5lciBXT1JEIChzZWUgfFdPUkR8KQkJKmRpVyoKIAkiZGFXIglkZWxldGUgYSBXT1JEIChzZWUgfFdPUkR8KQkJKmRhVyoKKwkiZGduIiAgIGRlbGV0ZSB0aGUgbmV4dCBzZWFyY2ggcGF0dGVybiBtYXRjaCAgICAqZGduKgogCSJkZCIJZGVsZXRlIG9uZSBsaW5lCQkJCXxkZHwKIAkiZGlzIglkZWxldGUgaW5uZXIgc2VudGVuY2UJCQkqZGlzKgogCSJkYXMiCWRlbGV0ZSBhIHNlbnRlbmNlCQkJKmRhcyoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3BpX2d6aXAudHh0IGIvcnVudGltZS9kb2MvcGlfZ3ppcC50eHQKaW5kZXggMzg5NzlkYy4uZjliNjQ0MiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvcGlfZ3ppcC50eHQKKysrIGIvcnVudGltZS9kb2MvcGlfZ3ppcC50eHQKQEAgLTEsNCArMSw0IEBACi0qcGlfZ3ppcC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDAyIE9jdCAyOQorKnBpX2d6aXAudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMiBKdWwgMTkKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTI1LDYgKzI1LDggQEAKIAkqLloJCWNvbXByZXNzIChMZW1wZWwtWml2KQogCSouZ3oJCWd6aXAKIAkqLmJ6MgkJYnppcDIKKwkqLmx6bWEJCWx6bWEKKwkqLnh6CQl4egogCiBUaGF0J3MgYWN0dWFsbHkgdGhlIG9ubHkgdGhpbmcgeW91IG5lZWQgdG8ga25vdy4gIFRoZXJlIGFyZSBubyBvcHRpb25zLgogCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9zeW50YXgudHh0IGIvcnVudGltZS9kb2Mvc3ludGF4LnR4dAppbmRleCA0ZTZmOTJkLi5kM2FiMGFiIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9zeW50YXgudHh0CisrKyBiL3J1bnRpbWUvZG9jL3N5bnRheC50eHQKQEAgLTEsNCArMSw0IEBACi0qc3ludGF4LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDEyIEp1biAxMworKnN5bnRheC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMiBKdWwgMTYKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtMzgwLDE5NCArMzgwLDIzIEBACiBUaGlzIGlzIG5vdCBhIHN5bnRheCBmaWxlIGl0c2VsZiwgYnV0IGEgc2NyaXB0IHRoYXQgY29udmVydHMgdGhlIGN1cnJlbnQKIHdpbmRvdyBpbnRvIEhUTUwuICBWaW0gb3BlbnMgYSBuZXcgd2luZG93IGluIHdoaWNoIGl0IGJ1aWxkcyB0aGUgSFRNTCBmaWxlLgogCitBZnRlciB5b3Ugc2F2ZSB0aGUgcmVzdWx0aW5nIGZpbGUsIHlvdSBjYW4gdmlldyBpdCB3aXRoIGFueSBicm93c2VyLiAgVGhlCitjb2xvcnMgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgeW91IHNlZSB0aGVtIGluIFZpbS4KKwogWW91IGFyZSBub3Qgc3VwcG9zZWQgdG8gc2V0IHRoZSAnZmlsZXR5cGUnIG9yICdzeW50YXgnIG9wdGlvbiB0byAiMmh0bWwiIQogU291cmNlIHRoZSBzY3JpcHQgdG8gY29udmVydCB0aGUgY3VycmVudCBmaWxlOiA+CiAKIAk6cnVudGltZSEgc3ludGF4LzJodG1sLnZpbQogPAotCQkJCQkJCSo6VE9odG1sKgotT3IgdXNlIHRoZSAiOlRPaHRtbCIgdXNlciBjb21tYW5kLiAgSXQgaXMgZGVmaW5lZCBpbiBhIHN0YW5kYXJkIHBsdWdpbi4KLSI6VE9odG1sIiBhbHNvIHdvcmtzIHdpdGggYSByYW5nZSBhbmQgaW4gYSBWaXN1YWwgYXJlYTogPgotCi0JOjEwLDQwVE9odG1sCi0KLVdhcm5pbmc6IFRoaXMgY2FuIGJlIHNsb3chIFRoZSBzY3JpcHQgbXVzdCBwcm9jZXNzIGV2ZXJ5IGNoYXJhY3RlciBvZiBldmVyeQotbGluZS4gQmVjYXVzZSBpdCBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYnkgZGVmYXVsdCBhIHByb2dyZXNzIGJhciBpcyBkaXNwbGF5ZWQKLWluIHRoZSBzdGF0dXNsaW5lIGZvciBlYWNoIG1ham9yIHN0ZXAgaW4gdGhlIGNvbnZlcnNpb24gcHJvY2Vzcy4gSWYgeW91IGRvbid0Ci1saWtlIHNlZWluZyB0aGlzIHByb2dyZXNzIGJhciwgeW91IGNhbiBkaXNhYmxlIGl0IGFuZCBnZXQgYSB2ZXJ5IG1pbm9yIHNwZWVkCi1pbXByb3ZlbWVudCB3aXRoOiA+Ci0KLQlsZXQgZzpodG1sX25vX3Byb2dyZXNzID0gMQotCi0iOlRPaHRtbCIgaGFzIGFub3RoZXIgc3BlY2lhbCBmZWF0dXJlOiBpZiB0aGUgd2luZG93IGlzIGluIGRpZmYgbW9kZSwgaXQgd2lsbAotZ2VuZXJhdGUgSFRNTCB0aGF0IHNob3dzIGFsbCB0aGUgcmVsYXRlZCB3aW5kb3dzLiAgVGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkKLXNldHRpbmcgdGhlIGc6aHRtbF9kaWZmX29uZV9maWxlIHZhcmlhYmxlOiA+Ci0KLQlsZXQgZzpodG1sX2RpZmZfb25lX2ZpbGUgPSAxCi0KLUFmdGVyIHlvdSBzYXZlIHRoZSByZXN1bHRpbmcgZmlsZSwgeW91IGNhbiB2aWV3IGl0IHdpdGggYW55IGJyb3dzZXIuICBUaGUKLWNvbG9ycyBzaG91bGQgYmUgZXhhY3RseSB0aGUgc2FtZSBhcyB5b3Ugc2VlIHRoZW0gaW4gVmltLgotCi1UbyByZXN0cmljdCB0aGUgY29udmVyc2lvbiB0byBhIHJhbmdlIG9mIGxpbmVzLCB1c2UgYSByYW5nZSB3aXRoIHRoZSB8OlRPaHRtbHwKLWNvbW1hbmQsIG9yIHNldCAiZzpodG1sX3N0YXJ0X2xpbmUiIGFuZCAiZzpodG1sX2VuZF9saW5lIiB0byB0aGUgZmlyc3QgYW5kCi1sYXN0IGxpbmUgdG8gYmUgY29udmVydGVkLiAgRXhhbXBsZSwgdXNpbmcgdGhlIGxhc3Qgc2V0IFZpc3VhbCBhcmVhOiA+Ci0KLQk6bGV0IGc6aHRtbF9zdGFydF9saW5lID0gbGluZSgiJzwiKQotCTpsZXQgZzpodG1sX2VuZF9saW5lID0gbGluZSgiJz4iKQotCi1UaGUgbGluZXMgYXJlIG51bWJlcmVkIGFjY29yZGluZyB0byAnbnVtYmVyJyBvcHRpb24gYW5kIHRoZSBOdW1iZXIKLWhpZ2hsaWdodGluZy4gIFlvdSBjYW4gZm9yY2UgbGluZXMgdG8gYmUgbnVtYmVyZWQgaW4gdGhlIEhUTUwgb3V0cHV0IGJ5Ci1zZXR0aW5nICJodG1sX251bWJlcl9saW5lcyIgdG8gbm9uLXplcm8gdmFsdWU6ID4KLSAgIDpsZXQgZzpodG1sX251bWJlcl9saW5lcyA9IDEKLUZvcmNlIHRvIG9taXQgdGhlIGxpbmUgbnVtYmVycyBieSB1c2luZyBhIHplcm8gdmFsdWU6ID4KLSAgIDpsZXQgZzpodG1sX251bWJlcl9saW5lcyA9IDAKLUdvIGJhY2sgdG8gdGhlIGRlZmF1bHQgdG8gdXNlICdudW1iZXInIGJ5IGRlbGV0aW5nIHRoZSB2YXJpYWJsZTogPgotICAgOnVubGV0IGc6aHRtbF9udW1iZXJfbGluZXMKLQotQnkgZGVmYXVsdCwgdmFsaWQgSFRNTCA0LjAxIHVzaW5nIGNhc2NhZGluZyBzdHlsZSBzaGVldHMgKENTUzEpIGlzIGdlbmVyYXRlZC4KLUlmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIG1hcmt1cCBmb3IgcmVhbGx5IG9sZCBicm93c2VycyBvciBzb21lIG90aGVyIHVzZXIKLWFnZW50IHRoYXQgbGFja3MgYmFzaWMgQ1NTIHN1cHBvcnQsIHVzZTogPgotICAgOmxldCBnOmh0bWxfdXNlX2NzcyA9IDAKLQotQ29uY2VhbGVkIHRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBIVE1MIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQotY2hhcmFjdGVyIGZyb20gfDpzeW4tY2NoYXJ8IG9yICdsaXN0Y2hhcnMnIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCB2YWx1ZSBvZgotJ2NvbmNlYWxsZXZlbCcuIElmIHlvdSBhbHdheXMgd2FudCB0byBkaXNwbGF5IGFsbCB0ZXh0IGluIHlvdXIgZG9jdW1lbnQsCi1laXRoZXIgc2V0ICdjb25jZWFsbGV2ZWwnIHRvIHplcm8gYmVmb3JlIGludm9raW5nIDJodG1sLCBvciB1c2U6ID4KLSAgIDpsZXQgZzpodG1sX2lnbm9yZV9jb25jZWFsID0gMQotCi1TaW1pbGFybHksIGNsb3NlZCBmb2xkcyBhcmUgcHV0IGluIHRoZSBIVE1MIGFzIHRoZXkgYXJlIGRpc3BsYXllZC4gIElmIHlvdQotZG9uJ3Qgd2FudCB0aGlzLCB1c2UgdGhlIHx6UnwgY29tbWFuZCBiZWZvcmUgaW52b2tpbmcgMmh0bWwsIG9yIHVzZTogPgotICAgOmxldCBnOmh0bWxfaWdub3JlX2ZvbGRpbmcgPSAxCi0KLVlvdSBtYXkgd2FudCB0byBnZW5lcmF0ZSBIVE1MIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBkYXRhIHdpdGhpbiB0aGUgZm9sZHMsIGFuZAotYWxsb3cgdGhlIHVzZXIgdG8gdmlldyB0aGUgZm9sZGVkIGRhdGEgc2ltaWxhciB0byBob3cgdGhleSB3b3VsZCBpbiBWaW0uIFRvCi1nZW5lcmF0ZSB0aGlzIGR5bmFtaWMgZm9sZCBpbmZvcm1hdGlvbiwgdXNlOiA+Ci0gICA6bGV0IGc6aHRtbF9keW5hbWljX2ZvbGRzID0gMQotCi1Vc2luZyBodG1sX2R5bmFtaWNfZm9sZHMgd2lsbCBpbXBseSBodG1sX3VzZV9jc3MsIGJlY2F1c2UgaXQgd291bGQgYmUgZmFyIHRvbwotZGlmZmljdWx0IHRvIGRvIGl0IGZvciBvbGQgYnJvd3NlcnMuIEhvd2V2ZXIsIGh0bWxfaWdub3JlX2ZvbGRpbmcgb3ZlcnJpZGVzCi1odG1sX2R5bmFtaWNfZm9sZHMuCi0KLVVzaW5nIGh0bWxfZHluYW1pY19mb2xkcyB3aWxsIGRlZmF1bHQgdG8gZ2VuZXJhdGluZyBhIGZvbGRjb2x1bW4gaW4gdGhlIGh0bWwKLXNpbWlsYXIgdG8gVmltJ3MgZm9sZGNvbHVtbiwgdGhhdCB3aWxsIHVzZSBqYXZhc2NyaXB0IHRvIG9wZW4gYW5kIGNsb3NlIHRoZQotZm9sZHMgaW4gdGhlIEhUTUwgZG9jdW1lbnQuIFRoZSB3aWR0aCBvZiB0aGlzIGZvbGRjb2x1bW4gc3RhcnRzIGF0IHRoZSBjdXJyZW50Ci1zZXR0aW5nIG9mIHwnZm9sZGNvbHVtbid8IGJ1dCBncm93cyB0byBmaXQgdGhlIGdyZWF0ZXN0IGZvbGRsZXZlbCBpbiB5b3VyCi1kb2N1bWVudC4gSWYgeW91IGRvIG5vdCB3YW50IHRvIHNob3cgYSBmb2xkY29sdW1uIGF0IGFsbCwgdXNlOiA+Ci0gICA6bGV0IGc6aHRtbF9ub19mb2xkY29sdW1uID0gMQotCi1Vc2luZyB0aGlzIG9wdGlvbiwgdGhlcmUgd2lsbCBiZSBubyBmb2xkY29sdW1uIGF2YWlsYWJsZSB0byBvcGVuIHRoZSBmb2xkcyBpbgotdGhlIEhUTUwuIEZvciB0aGlzIHJlYXNvbiwgYW5vdGhlciBvcHRpb24gaXMgcHJvdmlkZWQ6IGh0bWxfaG92ZXJfdW5mb2xkLgotRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCB1c2UgQ1NTIDIuMCB0byBhbGxvdyBhIHVzZXIgdG8gb3BlbiBhIGZvbGQgYnkKLWhvdmVyaW5nIHRoZSBtb3VzZSBwb2ludGVyIG92ZXIgaXQuIE5vdGUgdGhhdCBvbGQgYnJvd3NlcnMgKG5vdGFibHkgSW50ZXJuZXQKLUV4cGxvcmVyIDYpIHdpbGwgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLiAgQnJvd3Nlci1zcGVjaWZpYyBtYXJrdXAgZm9yIElFNiBpcwotaW5jbHVkZWQgdG8gZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgQ1NTMSBjb2RlIHNvIHRoYXQgdGhlIGZvbGRzIHNob3cgdXAKLWNvcnJlY3RseSBmb3IgdGhpcyBicm93c2VyLCBidXQgdGhleSB3aWxsIG5vdCBiZSBvcGVuYWJsZSB3aXRob3V0IGEKLWZvbGRjb2x1bW4uIE5vdGUgdGhhdCB1c2luZyBodG1sX2hvdmVyX3VuZm9sZCB3aWxsIGFsbG93IG1vZGVybiBicm93c2VycyB3aXRoCi1kaXNhYmxlZCBqYXZhc2NyaXB0IHRvIHZpZXcgY2xvc2VkIGZvbGRzLiBUbyB1c2UgdGhpcyBvcHRpb24sIHVzZTogPgotICAgOmxldCBnOmh0bWxfaG92ZXJfdW5mb2xkID0gMQotCi1TZXR0aW5nIGh0bWxfbm9fZm9sZGNvbHVtbiB3aXRoIGh0bWxfZHluYW1pY19mb2xkcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0Ci1odG1sX2hvdmVyX3VuZm9sZCwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGZvbGRzIHdvdWxkbid0IGJlIGR5bmFtaWMuCi0KLUJ5IGRlZmF1bHQgIjxwcmU+IiBhbmQgIjwvcHJlPiIgYXJlIHVzZWQgYXJvdW5kIHRoZSB0ZXh0LiBXaGVuICd3cmFwJyBpcyBzZXQKLWluIHRoZSB3aW5kb3cgYmVpbmcgY29udmVydGVkLCB0aGUgQ1NTIDIuMCAid2hpdGUtc3BhY2U6cHJlLXdyYXAiIHZhbHVlIGlzCi11c2VkIHRvIHdyYXAgdGhlIHRleHQuIFlvdSBjYW4gZXhwbGljaXRseSBlbmFibGUgdGhlIHdyYXBwaW5nIHdpdGg6ID4KLSAgIDpsZXQgZzpodG1sX3ByZV93cmFwID0gMQotb3IgZGlzYWJsZSB3aXRoID4KLSAgIDpsZXQgZzpodG1sX3ByZV93cmFwID0gMAotVGhpcyBnZW5lcmF0ZXMgSFRNTCB0aGF0IGxvb2tzIHZlcnkgY2xvc2UgdG8gdGhlIFZpbSB3aW5kb3csIGJ1dCB1bmZvcnR1bmF0ZWx5Ci10aGVyZSBjYW4gYmUgbWlub3IgZGlmZmVyZW5jZXMgc3VjaCBhcyB0aGUgbGFjayBvZiBhICdzaG93YnJlYWsnIG9wdGlvbiBpbiBpbgotdGhlIEhUTUwsIG9yIHdoZXJlIGxpbmUgYnJlYWtzIGNhbiBvY2N1ci4KLQotQW5vdGhlciB3YXkgdG8gb2J0YWluIHRleHQgd3JhcHBpbmcgaW4gdGhlIEhUTUwsIGF0IHRoZSByaXNrIG9mIG1ha2luZyBzb21lCi10aGluZ3MgbG9vayBldmVuIG1vcmUgZGlmZmVyZW50LCBpcyB0byB1c2U6ID4KLSAgIDpsZXQgZzpodG1sX25vX3ByZSA9IDEKLVRoaXMgd2lsbCB1c2UgPGJyPiBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSBhbmQgdXNlICImbmJzcDsiIGZvciByZXBlYXRlZAotc3BhY2VzLiBEb2luZyBpdCB0aGlzIHdheSBpcyBtb3JlIGNvbXBhdGlibGUgd2l0aCBvbGQgYnJvd3NlcnMsIGJ1dCBtb2Rlcm4KLWJyb3dzZXJzIHN1cHBvcnQgdGhlICJ3aGl0ZS1zcGFjZSIgbWV0aG9kLgotCi1JZiB5b3UgZG8gc3RpY2sgd2l0aCB0aGUgZGVmYXVsdCAiPHByZT4iIHRhZ3MsIDxUYWI+IGNoYXJhY3RlcnMgaW4gdGhlIHRleHQKLWFyZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dCBpZiB0aGV5IHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gdGhlCi1hcHBlYXJhbmNlIG9mIHRoZSB0ZXh0IGFuZCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIGluIHRoZSBkb2N1bWVudAotaW50ZW50aW9uYWxseS4gVGhpcyBhbGxvd3MgZm9yIHRoZSBIVE1MIG91dHB1dCB0byBiZSBjb3BpZWQgYW5kIHBhc3RlZCBmcm9tIGEKLWJyb3dzZXIgd2l0aG91dCBsb3NpbmcgdGhlIGFjdHVhbCB3aGl0ZXNwYWNlIHVzZWQgaW4gdGhlIGRvY3VtZW50LgotCi1TcGVjaWZpY2FsbHksIDxUYWI+IGNoYXJhY3RlcnMgd2lsbCBiZSBpbmNsdWRlZCBpZiB0aGUgJ3RhYnN0b3AnIG9wdGlvbiBpcyBzZXQKLXRvIHRoZSBkZWZhdWx0IG9mIDgsICdleHBhbmR0YWInIGlzIG5vdCBzZXQsIGFuZCBpZiBuZWl0aGVyIHRoZSBmb2xkY29sdW1uIG5vcgotdGhlIGxpbmUgbnVtYmVycyBhcmUgaW5jbHVkZWQgaW4gdGhlIEhUTUwgb3V0cHV0IChzZWUgb3B0aW9ucyBhYm92ZSkuIFdoZW4gYW55Ci1vZiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3QgbWV0LCBhbnkgPFRhYj4gY2hhcmFjdGVycyBpbiB0aGUgdGV4dCBhcmUgZXhwYW5kZWQKLXRvIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2Ygc3BhY2VzIGluIHRoZSBIVE1MIG91dHB1dC4KLQotV2hlbiAiPHByZT4iIGlzIGluY2x1ZGVkLCB5b3UgY2FuIGZvcmNlIHw6VE9odG1sfCB0byBrZWVwIHRoZSB0YWJzIGV2ZW4gaWYgdGhlCi1vdGhlciBjb25kaXRpb25zIGFyZSBub3QgbWV0IHdpdGg6ID4KLSAgIDpsZXQgZzpodG1sX2V4cGFuZF90YWJzID0gMAotTm90ZSB0aGF0IHRoaXMgY2FuIGVhc2lseSBicmVhayB0ZXh0IGFsaWdubWVudCBhbmQgaW5kZW50YXRpb24gaW4gdGhlIEhUTUwuCi0KLUZvcmNlIHRhYnMgdG8gYmUgZXhwYW5kZWQgZXZlbiB3aGVuIHRoZXkgd291bGQgYmUga2VwdCB1c2luZzogPgotICAgOmxldCBnOmh0bWxfZXhwYW5kX3RhYnMgPSAxCi0KLUZvciBkaWZmIG1vZGUgb24gYSBzaW5nbGUgZmlsZSAod2l0aCBnOmh0bWxfZGlmZl9vbmVfZmlsZSkgYSBzZXF1ZW5jZSBvZiBtb3JlCi10aGFuIDMgZmlsbGVyIGxpbmVzIGlzIGRpc3BsYXllZCBhcyB0aHJlZSBsaW5lcyB3aXRoIHRoZSBtaWRkbGUgbGluZQotbWVudGlvbmluZyB0aGUgdG90YWwgbnVtYmVyIG9mIGluc2VydGVkIGxpbmVzLiAgSWYgeW91IHByZWZlciB0byBzZWUgYWxsIHRoZQotaW5zZXJ0ZWQgbGluZXMgYXMgd2l0aCB0aGUgc2lkZS1ieS1zaWRlIGRpZmYsIHVzZTogPgotICAgIDpsZXQgZzpodG1sX3dob2xlX2ZpbGxlciA9IDEKLUFuZCB0byBnbyBiYWNrIHRvIGRpc3BsYXlpbmcgdXAgdG8gdGhyZWUgbGluZXMgYWdhaW46ID4KLSAgICA6dW5sZXQgZzpodG1sX3dob2xlX2ZpbGxlcgotCi1Gb3IgbW9zdCBidWZmZXJzLCBUT2h0bWwgdXNlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiAnZmlsZWVuY29kaW5nJyBpZiBzZXQsIG9yCi0nZW5jb2RpbmcnIGlmIG5vdCwgdG8gZGV0ZXJtaW5lIHRoZSBjaGFyc2V0IGFuZCAnZmlsZWVuY29kaW5nJyBvZiB0aGUgSFRNTAotZmlsZS4gJ2VuY29kaW5nJyBpcyBhbHdheXMgdXNlZCBmb3IgY2VydGFpbiAnYnVmdHlwZScgdmFsdWVzLiBJbiBnZW5lcmFsLCB0aGlzCi13b3JrcyBmb3IgdGhlIGVuY29kaW5ncyBtZW50aW9uZWQgc3BlY2lmaWNhbGx5IGJ5IG5hbWUgaW4gfGVuY29kaW5nLW5hbWVzfCwKLWJ1dCBUT2h0bWwgd2lsbCBvbmx5IGF1dG9tYXRpY2FsbHkgdXNlIHRob3NlIGVuY29kaW5ncyB3aGljaCBhcmUgd2lkZWx5Ci1zdXBwb3J0ZWQuIEhvd2V2ZXIsIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB0byBzdXBwb3J0IHNwZWNpZmljIGVuY29kaW5ncyB0aGF0Ci1tYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgYnkgZGVmYXVsdC4KLQotVG8gb3ZlcnJ1bGUgYWxsIGF1dG9tYXRpYyBjaGFyc2V0IGRldGVjdGlvbiwgc2V0IGc6aHRtbF91c2VfZW5jb2RpbmcgdG8gdGhlCi1uYW1lIG9mIHRoZSBjaGFyc2V0IHRvIGJlIHVzZWQuIFRPaHRtbCB3aWxsIHRyeSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlCi0nZmlsZWVuY29kaW5nJyBzZXR0aW5nIGZyb20gdGhlIGNoYXJzZXQsIGJ1dCB5b3UgbWF5IG5lZWQgdG8gc2V0IGl0IG1hbnVhbGx5Ci1pZiBUT2h0bWwgY2Fubm90IGRldGVybWluZSB0aGUgZW5jb2RpbmcuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNldCB0aGlzCi12YXJpYWJsZSB0byBzb21ldGhpbmcgd2lkZWx5IHN1cHBvcnRlZCwgbGlrZSBVVEYtOCwgZm9yIGFueXRoaW5nIHlvdSB3aWxsIGJlCi1ob3N0aW5nIG9uIGEgd2Vic2VydmVyOiA+Ci0gICA6bGV0IGc6aHRtbF91c2VfZW5jb2RpbmcgPSAiVVRGLTgiCi1Zb3UgY2FuIGFsc28gdXNlIHRoaXMgb3B0aW9uIHRvIG9taXQgdGhlIGxpbmUgdGhhdCBzcGVjaWZpZXMgdGhlIGNoYXJzZXQKLWVudGlyZWx5LCBieSBzZXR0aW5nIGc6aHRtbF91c2VfZW5jb2RpbmcgdG8gYW4gZW1wdHkgc3RyaW5nOiA+Ci0gICA6bGV0IGc6aHRtbF91c2VfZW5jb2RpbmcgPSAiIgotVG8gZ28gYmFjayB0byB0aGUgYXV0b21hdGljIG1lY2hhbmlzbSwgZGVsZXRlIHRoZSBnOmh0bWxfdXNlX2VuY29kaW5nCi12YXJpYWJsZTogPgotICAgOnVubGV0IGc6aHRtbF91c2VfZW5jb2RpbmcKLQotSWYgeW91IHNwZWNpZnkgYSBjaGFyc2V0IHdpdGggZzpodG1sX3VzZV9lbmNvZGluZyBmb3Igd2hpY2ggVE9odG1sIGNhbm5vdAotYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIGNvcnJlc3BvbmRpbmcgJ2ZpbGVlbmNvZGluZycgc2V0dGluZywgeW91IGNhbiB1c2UKLWc6aHRtbF9lbmNvZGluZ19vdmVycmlkZSB0byBhbGxvdyBUT2h0bWwgdG8gZGV0ZWN0IHRoZSBjb3JyZWN0IGVuY29kaW5nLgotVGhpcyBpcyBhIGRpY3Rpb25hcnkgb2YgY2hhcnNldC1lbmNvZGluZyBwYWlycyB0aGF0IHdpbGwgcmVwbGFjZSBleGlzdGluZwotcGFpcnMgYXV0b21hdGljYWxseSBkZXRlY3RlZCBieSBUT2h0bWwsIG9yIHN1cHBsZW1lbnQgd2l0aCBuZXcgcGFpcnMuIEZvcgotZXhhbXBsZSwgdG8gYWxsb3cgVE9odG1sIHRvIGRldGVjdCB0aGUgSFRNTCBjaGFyc2V0ICJ3aW5kb3dzLTEyNTIiIHByb3Blcmx5IGFzCi10aGUgZW5jb2RpbmcgIjhiaXQtY3AxMjUyIiwgdXNlOiA+Ci0gICA6bGV0IGc6aHRtbF9lbmNvZGluZ19vdmVycmlkZSA9IHsnd2luZG93cy0xMjUyJzogJzhiaXQtY3AxMjUyJ30KLTwKLVRoZSBnOmh0bWxfY2hhcnNldF9vdmVycmlkZSBpcyBzaW1pbGFyLCBpdCBhbGxvd3MgVE9odG1sIHRvIGRldGVjdCB0aGUgSFRNTAotY2hhcnNldCBmb3IgYW55ICdmaWxlZW5jb2RpbmcnIG9yICdlbmNvZGluZycgd2hpY2ggaXMgbm90IGRldGVjdGVkCi1hdXRvbWF0aWNhbGx5LiBZb3UgY2FuIGFsc28gdXNlIGl0IHRvIG92ZXJyaWRlIHNwZWNpZmljIGV4aXN0aW5nCi1lbmNvZGluZy1jaGFyc2V0IHBhaXJzLiBGb3IgZXhhbXBsZSwgVE9odG1sIHdpbGwgYnkgZGVmYXVsdCB1c2UgVVRGLTggZm9yIGFsbAotVW5pY29kZS9VQ1MgZW5jb2RpbmdzLiBUbyB1c2UgVVRGLTE2IGFuZCBVVEYtMzIgaW5zdGVhZCwgdXNlOiA+Ci0gICA6bGV0IGc6aHRtbF9jaGFyc2V0X292ZXJyaWRlID0geyd1Y3MtNCc6ICdVVEYtMzInLCAndXRmLTE2JzogJ1VURi0xNid9Ci0KLU5vdGUgdGhhdCBkb2N1bWVudHMgZW5jb2RlZCBpbiBlaXRoZXIgVVRGLTMyIG9yIFVURi0xNiBoYXZlIGtub3duCi1jb21wYXRpYmlsaXR5IHByb2JsZW1zIHdpdGggYXQgbGVhc3Qgb25lIG1ham9yIGJyb3dzZXIuCi0KLQkJCQkJICAgICpjb252ZXJ0LXRvLVhNTCogKmNvbnZlcnQtdG8tWEhUTUwqCi1JZiB5b3UgZG8gbm90IGxpa2UgcGxhaW4gSFRNTCwgYW4gYWx0ZXJuYXRpdmUgaXMgdG8gaGF2ZSB0aGUgc2NyaXB0IGdlbmVyYXRlCi1YSFRNTCAoWE1MIGNvbXBsaWFudCBIVE1MKS4gVG8gZG8gdGhpcyBzZXQgdGhlICJodG1sX3VzZV94aHRtbCIgdmFyaWFibGU6ID4KLSAgICA6bGV0IGc6aHRtbF91c2VfeGh0bWwgPSAxCi0KLUFueSBvZiB0aGUgb24vb2ZmIG9wdGlvbnMgbGlzdGVkIGFib3ZlIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IHNldHRpbmcKLXRoZW0gZXhwbGljaXRseSB0byB0aGUgZGVzaXJlZCB2YWx1ZSwgb3IgcmVzdG9yZWQgdG8gdGhlaXIgZGVmYXVsdCBieSByZW1vdmluZwotdGhlIHZhcmlhYmxlIHVzaW5nIHw6dW5sZXR8LgorTWFueSB2YXJpYWJsZXMgYWZmZWN0IHRoZSBvdXRwdXQgb2YgMmh0bWwudmltOyBzZWUgYmVsb3cuIEFueSBvZiB0aGUgb24vb2ZmCitvcHRpb25zIGxpc3RlZCBiZWxvdyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseSB0bwordGhlIGRlc2lyZWQgdmFsdWUsIG9yIHJlc3RvcmVkIHRvIHRoZWlyIGRlZmF1bHQgYnkgcmVtb3ZpbmcgdGhlIHZhcmlhYmxlIHVzaW5nCit8OnVubGV0fC4KIAogUmVtYXJrczoKIC0gU29tZSB0cnVseSBhbmNpZW50IGJyb3dzZXJzIG1heSBub3Qgc2hvdyB0aGUgYmFja2dyb3VuZCBjb2xvcnMuCiAtIEZyb20gbW9zdCBicm93c2VycyB5b3UgY2FuIGFsc28gcHJpbnQgdGhlIGZpbGUgKGluIGNvbG9yKSEKLS0gVGhpcyB2ZXJzaW9uIG9mIFRPaHRtbCBtYXkgd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFZpbSwgYnV0IHNvbWUKKy0gVGhlIGxhdGVzdCBUT2h0bWwgbWF5IGFjdHVhbGx5IHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBWaW0sIGJ1dCBzb21lCiAgIGZlYXR1cmVzIHN1Y2ggYXMgY29uY2VhbCBzdXBwb3J0IHdpbGwgbm90IGZ1bmN0aW9uLCBhbmQgdGhlIGNvbG9ycyBtYXkgYmUKICAgaW5jb3JyZWN0IGZvciBhbiBvbGQgVmltIHdpdGhvdXQgR1VJIHN1cHBvcnQgY29tcGlsZWQgaW4uCiAKQEAgLTU3NSw2ICs0MDQsMzExIEBACiBVbml4IHNoZWxsOiA+CiAgICBmb3IgZiBpbiAqLltjaF07IGRvIGd2aW0gLWYgKyJzeW4gb24iICsicnVuISBzeW50YXgvMmh0bWwudmltIiArIndxIiArInEiICRmOyBkb25lCiA8CisJCQkJCSpnOmh0bWxfc3RhcnRfbGluZSogKmc6aHRtbF9lbmRfbGluZSoKK1RvIHJlc3RyaWN0IHRoZSBjb252ZXJzaW9uIHRvIGEgcmFuZ2Ugb2YgbGluZXMsIHVzZSBhIHJhbmdlIHdpdGggdGhlIHw6VE9odG1sfAorY29tbWFuZCBiZWxvdywgb3Igc2V0ICJnOmh0bWxfc3RhcnRfbGluZSIgYW5kICJnOmh0bWxfZW5kX2xpbmUiIHRvIHRoZSBmaXJzdAorYW5kIGxhc3QgbGluZSB0byBiZSBjb252ZXJ0ZWQuICBFeGFtcGxlLCB1c2luZyB0aGUgbGFzdCBzZXQgVmlzdWFsIGFyZWE6ID4KKworCTpsZXQgZzpodG1sX3N0YXJ0X2xpbmUgPSBsaW5lKCInPCIpCisJOmxldCBnOmh0bWxfZW5kX2xpbmUgPSBsaW5lKCInPiIpCisJOnJ1bnRpbWUhIHN5bnRheC8yaHRtbC52aW0KKzwKKwkJCQkJCQkqOlRPaHRtbCoKKzpbcmFuZ2VdVE9odG1sCQlUaGUgIjpUT2h0bWwiIGNvbW1hbmQgaXMgZGVmaW5lZCBpbiBhIHN0YW5kYXJkIHBsdWdpbi4KKwkJCVRoaXMgY29tbWFuZCB3aWxsIHNvdXJjZSB8Mmh0bWwudmltfCBmb3IgeW91LiBXaGVuIGEKKwkJCXJhbmdlIGlzIGdpdmVuLCBzZXQgfGc6aHRtbF9zdGFydF9saW5lfCBhbmQKKwkJCXxnOmh0bWxfZW5kX2xpbmV8IHRvIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZSwKKwkJCXJlc3BlY3RpdmVseS4gRGVmYXVsdCByYW5nZSBpcyB0aGUgZW50aXJlIGJ1ZmZlci4KKworCQkJSWYgdGhlIGN1cnJlbnQgd2luZG93IGlzIHBhcnQgb2YgYSB8ZGlmZnwsIHVubGVzcworCQkJfGc6aHRtbF9kaWZmX29uZV9maWxlfCBpcyBzZXQsIDpUT2h0bWwgd2lsbCBjb252ZXJ0CisJCQlhbGwgd2luZG93cyB3aGljaCBhcmUgcGFydCBvZiB0aGUgZGlmZiBpbiB0aGUgY3VycmVudAorCQkJdGFiIGFuZCBwbGFjZSB0aGVtIHNpZGUtYnktc2lkZSBpbiBhIDx0YWJsZT4gZWxlbWVudAorCQkJaW4gdGhlIGdlbmVyYXRlZCBIVE1MLgorCisJCQlFeGFtcGxlczogPgorCisJOjEwLDQwVE9odG1sICIgY29udmVydCBsaW5lcyAxMC00MCB0byBodG1sCisJOic8LCc+VE9odG1sICIgY29udmVydCBjdXJyZW50L2xhc3QgdmlzdWFsIHNlbGVjdGlvbgorCTpUT2h0bWwgICAgICAiIGNvbnZlcnQgZW50aXJlIGJ1ZmZlcgorPAorCQkJCQkJCSpnOmh0bWxfZGlmZl9vbmVfZmlsZSoKK0RlZmF1bHQ6IDAuCitXaGVuIDAsIGFsbCB3aW5kb3dzIGludm9sdmVkIGluIGEgfGRpZmZ8IGluIHRoZSBjdXJyZW50IHRhYiBwYWdlIGFyZSBjb252ZXJ0ZWQKK3RvIEhUTUwgYW5kIHBsYWNlZCBzaWRlLWJ5LXNpZGUgaW4gYSA8dGFibGU+IGVsZW1lbnQuCitXaGVuIDEsIG9ubHkgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGNvbnZlcnRlZC4KK0V4YW1wbGU6ID4KKworCWxldCBnOmh0bWxfZGlmZl9vbmVfZmlsZSA9IDEKKzwKKwkJCQkJCQkgKmc6aHRtbF93aG9sZV9maWxsZXIqCitEZWZhdWx0OiAwLgorV2hlbiAwLCBpZiB8ZzpodG1sX2RpZmZfb25lX2ZpbGV8IGlzIDEsIGEgc2VxdWVuY2Ugb2YgbW9yZSB0aGFuIDMgZmlsbGVyIGxpbmVzCitpcyBkaXNwbGF5ZWQgYXMgdGhyZWUgbGluZXMgd2l0aCB0aGUgbWlkZGxlIGxpbmUgbWVudGlvbmluZyB0aGUgdG90YWwgbnVtYmVyCitvZiBpbnNlcnRlZCBsaW5lcy4KK1doZW4gMSwgYWx3YXlzIGRpc3BsYXkgYWxsIGluc2VydGVkIGxpbmVzIGFzIGlmIHxnOmh0bWxfZGlmZl9vbmVfZmlsZXwgd2VyZQorbm90IHNldC4KKz4KKyAgICA6bGV0IGc6aHRtbF93aG9sZV9maWxsZXIgPSAxCis8CisJCQkJICAgICAqVE9odG1sLXBlcmZvcm1hbmNlKiAqZzpodG1sX25vX3Byb2dyZXNzKgorRGVmYXVsdDogMC4KK1doZW4gMCwgZGlzcGxheSBhIHByb2dyZXNzIGJhciBpbiB0aGUgc3RhdHVzbGluZSBmb3IgZWFjaCBtYWpvciBzdGVwIGluIHRoZQorMmh0bWwudmltIGNvbnZlcnNpb24gcHJvY2Vzcy4KK1doZW4gMSwgZG8gbm90IGRpc3BsYXkgdGhlIHByb2dyZXNzIGJhci4gVGhpcyBvZmZlcnMgYSBtaW5vciBzcGVlZCBpbXByb3ZlbWVudAorYnV0IHlvdSB3b24ndCBoYXZlIGFueSBpZGVhIGhvdyBtdWNoIGxvbmdlciB0aGUgY29udmVyc2lvbiBtaWdodCB0YWtlOyBmb3IgYmlnCitmaWxlcyBpdCBjYW4gdGFrZSBhIGxvbmcgdGltZSEKK0V4YW1wbGU6ID4KKworCWxldCBnOmh0bWxfbm9fcHJvZ3Jlc3MgPSAxCis8CitZb3UgY2FuIG9idGFpbiBiZXR0ZXIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGJ5IGFsc28gaW5zdHJ1Y3RpbmcgVmltIHRvIG5vdAorcnVuIGludGVyYWN0aXZlbHksIHNvIHRoYXQgdG9vIG11Y2ggdGltZSBpcyBub3QgdGFrZW4gdG8gcmVkcmF3IGFzIHRoZSBzY3JpcHQKK21vdmVzIHRocm91Z2ggdGhlIGJ1ZmZlciwgc3dpdGNoZXMgd2luZG93cywgYW5kIHRoZSBsaWtlOiA+CisKKyAgdmltIC1FIC1zIC1jICJsZXQgZzpodG1sX25vX3Byb2dyZXNzPTEiIC1jICJzeW50YXggb24iIC1jICJzZXQgZnQ9YyIgLWMgInJ1bnRpbWUgc3ludGF4LzJodG1sLnZpbSIgLWN3cWEgbXlmaWxlLmMKKzwKK05vdGUgdGhhdCB0aGUgLXMgZmxhZyBwcmV2ZW50cyBsb2FkaW5nIHlvdXIgLnZpbXJjIGFuZCBhbnkgcGx1Z2lucywgc28geW91CituZWVkIHRvIGV4cGxpY2l0bHkgc291cmNlL2VuYWJsZSBhbnl0aGluZyB0aGF0IHdpbGwgYWZmZWN0IHRoZSBIVE1MCitjb252ZXJzaW9uLiBTZWUgfC1FfCBhbmQgfC1zLWV4fCBmb3IgZGV0YWlscy4gSXQgaXMgcHJvYmFibHkgYmVzdCB0byBjcmVhdGUgYQorc2NyaXB0IHRvIHJlcGxhY2UgYWxsIHRoZSAtYyBjb21tYW5kcyBhbmQgdXNlIGl0IHdpdGggdGhlIC11IGZsYWcgaW5zdGVhZCBvZgorc3BlY2lmeWluZyBlYWNoIGNvbW1hbmQgc2VwYXJhdGVseS4KKworCQkJCQkJCSAqZzpodG1sX251bWJlcl9saW5lcyoKK0RlZmF1bHQ6IGN1cnJlbnQgJ251bWJlcicgc2V0dGluZy4KK1doZW4gMCwgYnVmZmVyIHRleHQgaXMgZGlzcGxheWVkIGluIHRoZSBnZW5lcmF0ZWQgSFRNTCB3aXRob3V0IGxpbmUgbnVtYmVyaW5nLgorV2hlbiAxLCBhIGNvbHVtbiBvZiBsaW5lIG51bWJlcnMgaXMgYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBIVE1MIHdpdGggdGhlIHNhbWUKK2hpZ2hsaWdodGluZyBhcyB0aGUgbGluZSBudW1iZXIgY29sdW1uIGluIFZpbSAofGhsLUxpbmVOcnwpLgorRm9yY2UgbGluZSBudW1iZXJzIGV2ZW4gaWYgJ251bWJlcicgaXMgbm90IHNldDogPgorICAgOmxldCBnOmh0bWxfbnVtYmVyX2xpbmVzID0gMQorRm9yY2UgdG8gb21pdCB0aGUgbGluZSBudW1iZXJzOiA+CisgICA6bGV0IGc6aHRtbF9udW1iZXJfbGluZXMgPSAwCitHbyBiYWNrIHRvIHRoZSBkZWZhdWx0IHRvIHVzZSAnbnVtYmVyJyBieSBkZWxldGluZyB0aGUgdmFyaWFibGU6ID4KKyAgIDp1bmxldCBnOmh0bWxfbnVtYmVyX2xpbmVzCis8CisJCQkJCQkJICAgICAgKmc6aHRtbF91c2VfY3NzKgorRGVmYXVsdDogMS4KK1doZW4gMSwgZ2VuZXJhdGUgdmFsaWQgSFRNTCA0LjAxIG1hcmt1cCB3aXRoIENTUzEgc3R5bGluZywgc3VwcG9ydGVkIGluIGFsbAorbW9kZXJuIGJyb3dzZXJzIGFuZCBtb3N0IG9sZCBicm93c2Vycy4KK1doZW4gMCwgZ2VuZXJhdGUgPGZvbnQ+IHRhZ3MgYW5kIHNpbWlsYXIgb3V0ZGF0ZWQgbWFya3VwLiBUaGlzIGlzIG5vdAorcmVjb21tZW5kZWQgYnV0IGl0IG1heSB3b3JrIGJldHRlciBpbiByZWFsbHkgb2xkIGJyb3dzZXJzLCBlbWFpbCBjbGllbnRzLAorZm9ydW0gcG9zdHMsIGFuZCBzaW1pbGFyIHNpdHVhdGlvbnMgd2hlcmUgYmFzaWMgQ1NTIHN1cHBvcnQgaXMgdW5hdmFpbGFibGUuCitFeGFtcGxlOiA+CisgICA6bGV0IGc6aHRtbF91c2VfY3NzID0gMAorPAorCQkJCQkJICAgICAgICpnOmh0bWxfaWdub3JlX2NvbmNlYWwqCitEZWZhdWx0OiAwLgorV2hlbiAwLCBjb25jZWFsZWQgdGV4dCBpcyByZW1vdmVkIGZyb20gdGhlIEhUTUwgYW5kIHJlcGxhY2VkIHdpdGggYSBjaGFyYWN0ZXIKK2Zyb20gfDpzeW4tY2NoYXJ8IG9yICdsaXN0Y2hhcnMnIGFzIGFwcHJvcHJpYXRlLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQKK3ZhbHVlIG9mICdjb25jZWFsbGV2ZWwnLgorV2hlbiAxLCBpbmNsdWRlIGFsbCB0ZXh0IGZyb20gdGhlIGJ1ZmZlciBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwsIGV2ZW4gaWYgaXQgaXMKK3xjb25jZWFsfGVkLgorCitFaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB3aWxsIGVuc3VyZSB0aGF0IGFsbCB0ZXh0IGluIHRoZSBidWZmZXIgaXMKK2luY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgSFRNTCAodW5sZXNzIGl0IGlzIGZvbGRlZCk6ID4KKyAgIDpsZXQgZzpodG1sX2lnbm9yZV9jb25jZWFsID0gMQorICAgOnNldGwgY29uY2VhbGxldmVsPTAKKzwKKwkJCQkJCSAgICAgICAqZzpodG1sX2lnbm9yZV9mb2xkaW5nKgorRGVmYXVsdDogMC4KK1doZW4gMCwgdGV4dCBpbiBhIGNsb3NlZCBmb2xkIGlzIHJlcGxhY2VkIGJ5IHRoZSB0ZXh0IHNob3duIGZvciB0aGUgZm9sZCBpbgorVmltICh8Zm9sZC1mb2xkdGV4dHwpLiBTZWUgfGc6aHRtbF9keW5hbWljX2ZvbGRzfCBpZiB5b3UgYWxzbyB3YW50IHRvIGFsbG93Cit0aGUgdXNlciB0byBleHBhbmQgdGhlIGZvbGQgYXMgaW4gVmltIHRvIHNlZSB0aGUgdGV4dCBpbnNpZGUuCitXaGVuIDEsIGluY2x1ZGUgYWxsIHRleHQgZnJvbSB0aGUgYnVmZmVyIGluIHRoZSBnZW5lcmF0ZWQgSFRNTDsgd2hldGhlciB0aGUKK3RleHQgaXMgaW4gYSBmb2xkIGhhcyBubyBpbXBhY3QgYXQgYWxsLiB8ZzpodG1sX2R5bmFtaWNfZm9sZHN8IGhhcyBubyBlZmZlY3QuCisKK0VpdGhlciBvZiB0aGVzZSBjb21tYW5kcyB3aWxsIGVuc3VyZSB0aGF0IGFsbCB0ZXh0IGluIHRoZSBidWZmZXIgaXMgaW5jbHVkZWQKK2luIHRoZSBnZW5lcmF0ZWQgSFRNTCAodW5sZXNzIGl0IGlzIGNvbmNlYWxlZCk6ID4KKyAgIHpSCisgICA6bGV0IGc6aHRtbF9pZ25vcmVfZm9sZGluZyA9IDEKKzwKKwkJCQkJCQkqZzpodG1sX2R5bmFtaWNfZm9sZHMqCitEZWZhdWx0OiAwLgorV2hlbiAwLCB0ZXh0IGluIGEgY2xvc2VkIGZvbGQgaXMgbm90IGluY2x1ZGVkIGF0IGFsbCBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwuCitXaGVuIDEsIGdlbmVyYXRlIGphdmFzY3JpcHQgdG8gb3BlbiBhIGZvbGQgYW5kIHNob3cgdGhlIHRleHQgd2l0aGluLCBqdXN0IGxpa2UKK2luIFZpbS4KKworU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIDEgY2F1c2VzIDJodG1sLnZpbSB0byBhbHdheXMgdXNlIENTUyBmb3Igc3R5bGluZywKK3JlZ2FyZGxlc3Mgb2Ygd2hhdCB8ZzpodG1sX3VzZV9jc3N8IGlzIHNldCB0by4KKworVGhpcyB2YXJpYWJsZSBpcyBpZ25vcmVkIHdoZW4gfGc6aHRtbF9pZ25vcmVfZm9sZGluZ3wgaXMgc2V0LgorPgorICAgOmxldCBnOmh0bWxfZHluYW1pY19mb2xkcyA9IDEKKzwKKwkJCQkJCQkqZzpodG1sX25vX2ZvbGRjb2x1bW4qCitEZWZhdWx0OiAwLgorV2hlbiAwLCBpZiB8ZzpodG1sX2R5bmFtaWNfZm9sZHN8IGlzIDEsIGdlbmVyYXRlIGEgY29sdW1uIG9mIHRleHQgc2ltaWxhciB0bworVmltJ3MgZm9sZGNvbHVtbiAofGZvbGQtZm9sZGNvbHVtbnwpIHRoZSB1c2VyIGNhbiBjbGljayBvbiB0byB0b2dnbGUgZm9sZHMKK29wZW4gb3IgY2xvc2VkLiBUaGUgbWluaW11bSB3aWR0aCBvZiB0aGUgZ2VuZXJhdGVkIHRleHQgY29sdW1uIGlzIHRoZSBjdXJyZW50CisnZm9sZGNvbHVtbicgc2V0dGluZy4KK1doZW4gMSwgZG8gbm90IGdlbmVyYXRlIHRoaXMgY29sdW1uOyBpbnN0ZWFkLCBob3ZlcmluZyB0aGUgbW91c2UgY3Vyc29yIG92ZXIKK2ZvbGRlZCB0ZXh0IHdpbGwgb3BlbiB0aGUgZm9sZCBhcyBpZiB8ZzpodG1sX2hvdmVyX3VuZm9sZHwgd2VyZSBzZXQuCis+CisgICA6bGV0IGc6aHRtbF9ub19mb2xkY29sdW1uID0gMQorPAorCQkJCSpUT2h0bWwtdW5jb3B5YWJsZS10ZXh0KiAqZzpodG1sX3ByZXZlbnRfY29weSoKK0RlZmF1bHQ6IGVtcHR5IHN0cmluZy4KK1RoaXMgb3B0aW9uIHByZXZlbnRzIGNlcnRhaW4gcmVnaW9ucyBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwgZnJvbSBiZWluZyBjb3BpZWQsCit3aGVuIHlvdSBzZWxlY3QgYWxsIHRleHQgaW4gZG9jdW1lbnQgcmVuZGVyZWQgaW4gYSBicm93c2VyIGFuZCBjb3B5IGl0LiBVc2VmdWwKK2ZvciBhbGxvd2luZyB1c2VycyB0byBjb3B5LXBhc3RlIG9ubHkgdGhlIHNvdXJjZSB0ZXh0IGV2ZW4gaWYgYSBmb2xkIGNvbHVtbiBvcgorbGluZSBudW1iZXJzIGFyZSBzaG93biBpbiB0aGUgZ2VuZXJhdGVkIGNvbnRlbnQuIFNwZWNpZnkgcmVnaW9ucyB0byBiZQorYWZmZWN0ZWQgaW4gdGhpcyB3YXkgYXMgZm9sbG93czoKKwlmOglmb2xkIGNvbHVtbgorCW46CWxpbmUgbnVtYmVycyAoYWxzbyB3aXRoaW4gZm9sZCB0ZXh0KQorCXQ6CWZvbGQgdGV4dAorCWQ6CWRpZmYgZmlsbGVyCisKK0V4YW1wbGUsIHRvIG1ha2UgdGhlIGZvbGQgY29sdW1uIGFuZCBsaW5lIG51bWJlcnMgdW5jb3B5YWJsZTogPgorCTpsZXQgZzpodG1sX3ByZXZlbnRfY29weSA9ICJmbiIKKzwKK1RoaXMgZmVhdHVyZSBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYnkgaW5zZXJ0aW5nIHJlYWQtb25seSA8aW5wdXQ+IGVsZW1lbnRzCitpbnRvIHRoZSBtYXJrdXAgdG8gY29udGFpbiB0aGUgdW5jb3B5YWJsZSBhcmVhcy4gVGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgaW4KK2FsbCBjYXNlcy4gV2hlbiBwYXN0aW5nIHRvIHNvbWUgYXBwbGljYXRpb25zIHdoaWNoIHVuZGVyc3RhbmQgSFRNTCwgdGhlCis8aW5wdXQ+IGVsZW1lbnRzIGFsc28gZ2V0IHBhc3RlZC4gQnV0IHBsYWluLXRleHQgcGFzdGUgZGVzdGluYXRpb25zIHNob3VsZAorYWx3YXlzIHdvcmsuCisKKwkJCQkJCQkgICAqZzpodG1sX25vX2ludmFsaWQqCitEZWZhdWx0OiAwLgorV2hlbiAwLCBpZiB8ZzpodG1sX3ByZXZlbnRfY29weXwgaXMgbm9uLWVtcHR5LCBhbiBpbnZhbGlkIGF0dHJpYnV0ZSBpcworaW50ZW50aW9uYWxseSBpbnNlcnRlZCBpbnRvIHRoZSA8aW5wdXQ+IGVsZW1lbnQgZm9yIHRoZSB1bmNvcHlhYmxlIGFyZWFzLiBUaGlzCitpbmNyZWFzZXMgdGhlIG51bWJlciBvZiBhcHBsaWNhdGlvbnMgeW91IGNhbiBwYXN0ZSB0byB3aXRob3V0IGFsc28gcGFzdGluZyB0aGUKKzxpbnB1dD4gZWxlbWVudHMuIFNwZWNpZmljYWxseSwgTWljcm9zb2Z0IFdvcmQgd2lsbCBub3QgcGFzdGUgdGhlIDxpbnB1dD4KK2VsZW1lbnRzIGlmIHRoZXkgY29udGFpbiB0aGlzIGludmFsaWQgYXR0cmlidXRlLgorV2hlbiAxLCBubyBpbnZhbGlkIG1hcmt1cCBpcyBldmVyIGludGVudGlvbmFsbHkgaW5zZXJ0ZWQsIGFuZCB0aGUgZ2VuZXJhdGVkCitwYWdlIHNob3VsZCB2YWxpZGF0ZS4gSG93ZXZlciwgYmUgY2FyZWZ1bCBwYXN0aW5nIGludG8gTWljcm9zb2Z0IFdvcmQgd2hlbgorfGc6aHRtbF9wcmV2ZW50X2NvcHl8IGlzIG5vbi1lbXB0eTsgaXQgY2FuIGJlIGhhcmQgdG8gZ2V0IHJpZCBvZiB0aGUgPGlucHV0PgorZWxlbWVudHMgd2hpY2ggZ2V0IHBhc3RlZC4KKworCQkJCQkJCSAqZzpodG1sX2hvdmVyX3VuZm9sZCoKK0RlZmF1bHQ6IDAuCitXaGVuIDAsIHRoZSBvbmx5IHdheSB0byBvcGVuIGEgZm9sZCBnZW5lcmF0ZWQgYnkgMmh0bWwudmltIHdpdGgKK3xnOmh0bWxfZHluYW1pY19mb2xkc3wgc2V0LCBpcyB0byBjbGljayBvbiB0aGUgZ2VuZXJhdGVkIGZvbGQgY29sdW1uLgorV2hlbiAxLCB1c2UgQ1NTIDIuMCB0byBhbGxvdyB0aGUgdXNlciB0byBvcGVuIGEgZm9sZCBieSBtb3ZpbmcgdGhlIG1vdXNlCitjdXJzb3Igb3ZlciB0aGUgZGlzcGxheWVkIGZvbGQgdGV4dC4gVGhpcyBpcyB1c2VmdWwgdG8gYWxsb3cgdXNlcnMgd2l0aAorZGlzYWJsZWQgamF2YXNjcmlwdCB0byB2aWV3IHRoZSBmb2xkZWQgdGV4dC4KKworTm90ZSB0aGF0IG9sZCBicm93c2VycyAobm90YWJseSBJbnRlcm5ldCBFeHBsb3JlciA2KSB3aWxsIG5vdCBzdXBwb3J0IHRoaXMKK2ZlYXR1cmUuICBCcm93c2VyLXNwZWNpZmljIG1hcmt1cCBmb3IgSUU2IGlzIGluY2x1ZGVkIHRvIGZhbGwgYmFjayB0byB0aGUKK25vcm1hbCBDU1MxIHN0eWxpbmcgc28gdGhhdCB0aGUgZm9sZHMgc2hvdyB1cCBjb3JyZWN0bHkgZm9yIHRoaXMgYnJvd3NlciwgYnV0Cit0aGV5IHdpbGwgbm90IGJlIG9wZW5hYmxlIHdpdGhvdXQgYSBmb2xkY29sdW1uLgorPgorICAgOmxldCBnOmh0bWxfaG92ZXJfdW5mb2xkID0gMQorPAorCQkJCQkgICpUT2h0bWwtd3JhcC10ZXh0KiAqZzpodG1sX3ByZV93cmFwKgorRGVmYXVsdDogY3VycmVudCAnd3JhcCcgc2V0dGluZy4KK1doZW4gMCwgaWYgfGc6aHRtbF9ub19wcmV8IGlzIDAgb3IgdW5zZXQsIHRoZSB0ZXh0IGluIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2VzCitub3Qgd3JhcCBhdCB0aGUgZWRnZSBvZiB0aGUgYnJvd3NlciB3aW5kb3cuCitXaGVuIDEsIGlmIHxnOmh0bWxfdXNlX2Nzc3wgaXMgMSwgdGhlIENTUyAyLjAgIndoaXRlLXNwYWNlOnByZS13cmFwIiB2YWx1ZSBpcwordXNlZCwgY2F1c2luZyB0aGUgdGV4dCB0byB3cmFwIGF0IHdoaXRlc3BhY2UgYXQgdGhlIGVkZ2Ugb2YgdGhlIGJyb3dzZXIKK3dpbmRvdy4KK0V4cGxpY2l0bHkgZW5hYmxlIHRleHQgd3JhcHBpbmc6ID4KKyAgIDpsZXQgZzpodG1sX3ByZV93cmFwID0gMQorRXhwbGljaXRseSBkaXNhYmxlIHdyYXBwaW5nOiA+CisgICA6bGV0IGc6aHRtbF9wcmVfd3JhcCA9IDAKK0dvIGJhY2sgdG8gZGVmYXVsdCwgZGV0ZXJtaW5lIHdyYXBwaW5nIGZyb20gJ3dyYXAnIHNldHRpbmc6ID4KKyAgIDp1bmxldCBnOmh0bWxfcHJlX3dyYXAKKzwKKwkJCQkJCQkgICAgICAgKmc6aHRtbF9ub19wcmUqCitEZWZhdWx0OiAwLgorV2hlbiAwLCBidWZmZXIgdGV4dCBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwgaXMgc3Vycm91bmRlZCBieSA8cHJlPi4uLjwvcHJlPgordGFncy4gU2VyaWVzIG9mIHdoaXRlc3BhY2UgaXMgc2hvd24gYXMgaW4gVmltIHdpdGhvdXQgc3BlY2lhbCBtYXJrdXAsIGFuZCB0YWIKK2NoYXJhY3RlcnMgY2FuIGJlIGluY2x1ZGVkIGxpdGVyYWxseSAoc2VlIHxnOmh0bWxfZXhwYW5kX3RhYnN8KS4KK1doZW4gMSAobm90IHJlY29tbWVuZGVkKSwgdGhlIDxwcmU+IHRhZ3MgYXJlIG9taXR0ZWQsIGFuZCBhIHBsYWluIDxkaXY+IGlzCit1c2VkIGluc3RlYWQuIFdoaXRlc3BhY2UgaXMgcmVwbGFjZWQgYnkgYSBzZXJpZXMgb2YgJm5ic3A7IGNoYXJhY3RlcgorcmVmZXJlbmNlcywgYW5kIDxicj4gaXMgdXNlZCB0byBlbmQgZWFjaCBsaW5lLiBUaGlzIGlzIGFub3RoZXIgd2F5IHRvIGFsbG93Cit0ZXh0IGluIHRoZSBnZW5lcmF0ZWQgSFRNTCBpcyB3cmFwIChzZWUgfGc6aHRtbF9wcmVfd3JhcHwpIHdoaWNoIGFsc28gd29ya3MgaW4KK29sZCBicm93c2VycywgYnV0IG1heSBjYXVzZSBub3RpY2VhYmxlIGRpZmZlcmVuY2VzIGJldHdlZW4gVmltJ3MgZGlzcGxheSBhbmQKK3RoZSByZW5kZXJlZCBwYWdlIGdlbmVyYXRlZCBieSAyaHRtbC52aW0uCis+CisgICA6bGV0IGc6aHRtbF9ub19wcmUgPSAxCis8CisJCQkJCQkJICAqZzpodG1sX2V4cGFuZF90YWJzKgorRGVmYXVsdDogMSBpZiAndGFic3RvcCcgaXMgOCwgJ2V4cGFuZHRhYicgaXMgMCwgYW5kIG5vIGZvbGQgY29sdW1uIG9yIGxpbmUKKwkJbnVtYmVycyBvY2N1ciBpbiB0aGUgZ2VuZXJhdGVkIEhUTUw7CisJIDAgb3RoZXJ3aXNlLgorV2hlbiAwLCA8VGFiPiBjaGFyYWN0ZXJzIGluIHRoZSBidWZmZXIgdGV4dCBhcmUgcmVwbGFjZWQgd2l0aCBhbiBhcHByb3ByaWF0ZQorbnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMsIG9yICZuYnNwOyByZWZlcmVuY2VzIGlmIHxnOmh0bWxfbm9fcHJlfCBpcyAxLgorV2hlbiAxLCBpZiB8ZzpodG1sX25vX3ByZXwgaXMgMCBvciB1bnNldCwgPFRhYj4gY2hhcmFjdGVycyBpbiB0aGUgYnVmZmVyIHRleHQKK2FyZSBpbmNsdWRlZCBhcy1pcyBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRvCithbGxvdyBjb3B5IGFuZCBwYXN0ZSBmcm9tIGEgYnJvd3NlciB3aXRob3V0IGxvc2luZyB0aGUgYWN0dWFsIHdoaXRlc3BhY2UgaW4KK3RoZSBzb3VyY2UgZG9jdW1lbnQuIE5vdGUgdGhhdCB0aGlzIGNhbiBlYXNpbHkgYnJlYWsgdGV4dCBhbGlnbm1lbnQgYW5kCitpbmRlbnRhdGlvbiBpbiB0aGUgSFRNTCwgdW5sZXNzIHNldCBieSBkZWZhdWx0LgorCitGb3JjZSB8Mmh0bWwudmltfCB0byBrZWVwIDxUYWI+IGNoYXJhY3RlcnM6ID4KKyAgIDpsZXQgZzpodG1sX2V4cGFuZF90YWJzID0gMAorPAorRm9yY2UgdGFicyB0byBiZSBleHBhbmRlZDogPgorICAgOmxldCBnOmh0bWxfZXhwYW5kX3RhYnMgPSAxCis8CisJCQkJICAgICpUT2h0bWwtZW5jb2RpbmctZGV0ZWN0KiAqVE9odG1sLWVuY29kaW5nKgorSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHNldCB5b3VyIGRlc2lyZWQgZW5jb2Rpbmcgd2l0aAorfGc6aHRtbF91c2VfZW5jb2Rpbmd8IGZvciBhbnkgY29udGVudCB3aGljaCB3aWxsIGJlIHBsYWNlZCBvbiBhIHdlYiBzZXJ2ZXIuCisKK0lmIHlvdSBkbyBub3Qgc3BlY2lmeSBhbiBlbmNvZGluZywgfDJodG1sLnZpbXwgdXNlcyB0aGUgcHJlZmVycmVkIElBTkEgbmFtZQorZm9yIHRoZSBjdXJyZW50IHZhbHVlIG9mICdmaWxlZW5jb2RpbmcnIGlmIHNldCwgb3IgJ2VuY29kaW5nJyBpZiBub3QuCisnZW5jb2RpbmcnIGlzIGFsd2F5cyB1c2VkIGZvciBjZXJ0YWluICdidWZ0eXBlJyB2YWx1ZXMuICdmaWxlZW5jb2RpbmcnIHdpbGwgYmUKK3NldCB0byBtYXRjaCB0aGUgY2hvc2VuIGRvY3VtZW50IGVuY29kaW5nLgorCitBdXRvbWF0aWMgZGV0ZWN0aW9uIHdvcmtzIGZvciB0aGUgZW5jb2RpbmdzIG1lbnRpb25lZCBzcGVjaWZpY2FsbHkgYnkgbmFtZSBpbgorfGVuY29kaW5nLW5hbWVzfCwgYnV0IFRPaHRtbCB3aWxsIG9ubHkgYXV0b21hdGljYWxseSB1c2UgdGhvc2UgZW5jb2RpbmdzIHdpdGgKK3dpZGUgYnJvd3NlciBzdXBwb3J0LiBIb3dldmVyLCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgdG8gc3VwcG9ydCBzcGVjaWZpYworZW5jb2RpbmdzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGJ5IGRlZmF1bHQgKHNlZSBvcHRpb25zCitiZWxvdykuIFNlZSBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzIGZvciB0aGUgSUFOQSBuYW1lcy4KKworTm90ZSwgYnkgZGVmYXVsdCBhbGwgVW5pY29kZSBlbmNvZGluZ3MgYXJlIGNvbnZlcnRlZCB0byBVVEYtOCB3aXRoIG5vIEJPTSBpbgordGhlIGdlbmVyYXRlZCBIVE1MLCBhcyByZWNvbW1lbmRlZCBieSBXM0M6CisKKwlodHRwOi8vd3d3LnczLm9yZy9JbnRlcm5hdGlvbmFsL3F1ZXN0aW9ucy9xYS1jaG9vc2luZy1lbmNvZGluZ3MKKwlodHRwOi8vd3d3LnczLm9yZy9JbnRlcm5hdGlvbmFsL3F1ZXN0aW9ucy9xYS1ieXRlLW9yZGVyLW1hcmsKKworCQkJCQkJCSAqZzpodG1sX3VzZV9lbmNvZGluZyoKK0RlZmF1bHQ6IG5vbmUsIHVzZXMgSUFOQSBuYW1lIGZvciBjdXJyZW50ICdmaWxlZW5jb2RpbmcnIGFzIGFib3ZlLgorVG8gb3ZlcnJ1bGUgYWxsIGF1dG9tYXRpYyBjaGFyc2V0IGRldGVjdGlvbiwgc2V0IGc6aHRtbF91c2VfZW5jb2RpbmcgdG8gdGhlCituYW1lIG9mIHRoZSBjaGFyc2V0IHRvIGJlIHVzZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNldCB0aGlzIHZhcmlhYmxlIHRvCitzb21ldGhpbmcgd2lkZWx5IHN1cHBvcnRlZCwgbGlrZSBVVEYtOCwgZm9yIGFueXRoaW5nIHlvdSB3aWxsIGJlIGhvc3Rpbmcgb24gYQord2Vic2VydmVyOiA+CisgICA6bGV0IGc6aHRtbF91c2VfZW5jb2RpbmcgPSAiVVRGLTgiCitZb3UgY2FuIGFsc28gdXNlIHRoaXMgb3B0aW9uIHRvIG9taXQgdGhlIGxpbmUgdGhhdCBzcGVjaWZpZXMgdGhlIGNoYXJzZXQKK2VudGlyZWx5LCBieSBzZXR0aW5nIGc6aHRtbF91c2VfZW5jb2RpbmcgdG8gYW4gZW1wdHkgc3RyaW5nIChOT1QgcmVjb21tZW5kZWQpOiA+CisgICA6bGV0IGc6aHRtbF91c2VfZW5jb2RpbmcgPSAiIgorVG8gZ28gYmFjayB0byB0aGUgYXV0b21hdGljIG1lY2hhbmlzbSwgZGVsZXRlIHRoZSB8ZzpodG1sX3VzZV9lbmNvZGluZ3wKK3ZhcmlhYmxlOiA+CisgICA6dW5sZXQgZzpodG1sX3VzZV9lbmNvZGluZworPAorCQkJCQkJICAgICpnOmh0bWxfZW5jb2Rpbmdfb3ZlcnJpZGUqCitEZWZhdWx0OiBub25lLCBhdXRvbG9hZC90b2h0bWwudmltIGNvbnRhaW5zIGRlZmF1bHQgY29udmVyc2lvbnMgZm9yIGVuY29kaW5ncworCQltZW50aW9uZWQgYnkgbmFtZSBhdCB8ZW5jb2RpbmctbmFtZXN8LgorVGhpcyBvcHRpb24gYWxsb3dzIHwyaHRtbC52aW18IHRvIGRldGVjdCB0aGUgY29ycmVjdCAnZmlsZWVuY29kaW5nJyB3aGVuIHlvdQorc3BlY2lmeSBhbiBlbmNvZGluZyB3aXRoIHxnOmh0bWxfdXNlX2VuY29kaW5nfCB3aGljaCBpcyBub3QgaW4gdGhlIGRlZmF1bHQKK2xpc3Qgb2YgY29udmVyc2lvbnMuCisKK1RoaXMgaXMgYSBkaWN0aW9uYXJ5IG9mIGNoYXJzZXQtZW5jb2RpbmcgcGFpcnMgdGhhdCB3aWxsIHJlcGxhY2UgZXhpc3RpbmcKK3BhaXJzIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgYnkgVE9odG1sLCBvciBzdXBwbGVtZW50IHdpdGggbmV3IHBhaXJzLgorCitEZXRlY3QgdGhlIEhUTUwgY2hhcnNldCAid2luZG93cy0xMjUyIiBhcyB0aGUgZW5jb2RpbmcgIjhiaXQtY3AxMjUyIjogPgorICAgOmxldCBnOmh0bWxfZW5jb2Rpbmdfb3ZlcnJpZGUgPSB7J3dpbmRvd3MtMTI1Mic6ICc4Yml0LWNwMTI1Mid9Cis8CisJCQkJCQkgICAgICpnOmh0bWxfY2hhcnNldF9vdmVycmlkZSoKK0RlZmF1bHQ6IG5vbmUsIGF1dG9sb2FkL3RvaHRtbC52aW0gY29udGFpbnMgZGVmYXVsdCBjb252ZXJzaW9ucyBmb3IgZW5jb2RpbmdzCisJCW1lbnRpb25lZCBieSBuYW1lIGF0IHxlbmNvZGluZy1uYW1lc3wgYW5kIHdoaWNoIGhhdmUgd2lkZQorCQlicm93c2VyIHN1cHBvcnQuCitUaGlzIG9wdGlvbiBhbGxvd3MgfDJodG1sLnZpbXwgdG8gZGV0ZWN0IHRoZSBIVE1MIGNoYXJzZXQgZm9yIGFueQorJ2ZpbGVlbmNvZGluZycgb3IgJ2VuY29kaW5nJyB3aGljaCBpcyBub3QgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4gWW91IGNhbiBhbHNvCit1c2UgaXQgdG8gb3ZlcnJpZGUgc3BlY2lmaWMgZXhpc3RpbmcgZW5jb2RpbmctY2hhcnNldCBwYWlycy4gRm9yIGV4YW1wbGUsCitUT2h0bWwgd2lsbCBieSBkZWZhdWx0IHVzZSBVVEYtOCBmb3IgYWxsIFVuaWNvZGUvVUNTIGVuY29kaW5ncy4gVG8gdXNlIFVURi0xNgorYW5kIFVURi0zMiBpbnN0ZWFkLCB1c2U6ID4KKyAgIDpsZXQgZzpodG1sX2NoYXJzZXRfb3ZlcnJpZGUgPSB7J3Vjcy00JzogJ1VURi0zMicsICd1dGYtMTYnOiAnVVRGLTE2J30KKworTm90ZSB0aGF0IGRvY3VtZW50cyBlbmNvZGVkIGluIGVpdGhlciBVVEYtMzIgb3IgVVRGLTE2IGhhdmUga25vd24KK2NvbXBhdGliaWxpdHkgcHJvYmxlbXMgd2l0aCBzb21lIG1ham9yIGJyb3dzZXJzLgorCisJCQkqY29udmVydC10by1YTUwqICpjb252ZXJ0LXRvLVhIVE1MKiAqZzpodG1sX3VzZV94aHRtbCoKK0RlZmF1bHQ6IDAuCitXaGVuIDAsIGdlbmVyYXRlIHN0YW5kYXJkIEhUTUwgNC4wMSAoc3RyaWN0IHdoZW4gcG9zc2libGUpLgorV2hlbiAxLCBnZW5lcmF0ZSBYSFRNTCAxLjAgaW5zdGVhZCAoWE1MIGNvbXBsaWFudCBIVE1MKS4KKz4KKyAgICA6bGV0IGc6aHRtbF91c2VfeGh0bWwgPSAxCis8CiAKIEFCRUwJCQkJCQkqYWJlbC52aW0qICpmdC1hYmVsLXN5bnRheCoKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdGFncyBiL3J1bnRpbWUvZG9jL3RhZ3MKaW5kZXggMmU2ZGExZS4uMzMyMzEyNiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvdGFncworKysgYi9ydW50aW1lL2RvYy90YWdzCkBAIC00NDYzLDYgKzQ0NjMsMTEgQEAKIFQJbW90aW9uLnR4dAkvKlQqCiBUQ0wJaWZfdGNsLnR4dAkvKlRDTCoKIFRFUk0Jc3RhcnRpbmcudHh0CS8qVEVSTSoKK1RPaHRtbC1lbmNvZGluZwlzeW50YXgudHh0CS8qVE9odG1sLWVuY29kaW5nKgorVE9odG1sLWVuY29kaW5nLWRldGVjdAlzeW50YXgudHh0CS8qVE9odG1sLWVuY29kaW5nLWRldGVjdCoKK1RPaHRtbC1wZXJmb3JtYW5jZQlzeW50YXgudHh0CS8qVE9odG1sLXBlcmZvcm1hbmNlKgorVE9odG1sLXVuY29weWFibGUtdGV4dAlzeW50YXgudHh0CS8qVE9odG1sLXVuY29weWFibGUtdGV4dCoKK1RPaHRtbC13cmFwLXRleHQJc3ludGF4LnR4dAkvKlRPaHRtbC13cmFwLXRleHQqCiBUU1FMCWZ0X3NxbC50eHQJLypUU1FMKgogVFRwcm8tdGVsbmV0CXN5bnRheC50eHQJLypUVHByby10ZWxuZXQqCiBUYWIJaW50cm8udHh0CS8qVGFiKgpAQCAtNTgyOCw2ICs1ODMzLDI3IEBACiBnOmduYXQuU2V0X1Byb2plY3RfRmlsZSgpCWZ0X2FkYS50eHQJLypnOmduYXQuU2V0X1Byb2plY3RfRmlsZSgpKgogZzpnbmF0LlRhZ3MoKQlmdF9hZGEudHh0CS8qZzpnbmF0LlRhZ3MoKSoKIGc6Z25hdC5UYWdzX0NvbW1hbmQJZnRfYWRhLnR4dAkvKmc6Z25hdC5UYWdzX0NvbW1hbmQqCitnOmh0bWxfY2hhcnNldF9vdmVycmlkZQlzeW50YXgudHh0CS8qZzpodG1sX2NoYXJzZXRfb3ZlcnJpZGUqCitnOmh0bWxfZGlmZl9vbmVfZmlsZQlzeW50YXgudHh0CS8qZzpodG1sX2RpZmZfb25lX2ZpbGUqCitnOmh0bWxfZHluYW1pY19mb2xkcwlzeW50YXgudHh0CS8qZzpodG1sX2R5bmFtaWNfZm9sZHMqCitnOmh0bWxfZW5jb2Rpbmdfb3ZlcnJpZGUJc3ludGF4LnR4dAkvKmc6aHRtbF9lbmNvZGluZ19vdmVycmlkZSoKK2c6aHRtbF9lbmRfbGluZQlzeW50YXgudHh0CS8qZzpodG1sX2VuZF9saW5lKgorZzpodG1sX2V4cGFuZF90YWJzCXN5bnRheC50eHQJLypnOmh0bWxfZXhwYW5kX3RhYnMqCitnOmh0bWxfaG92ZXJfdW5mb2xkCXN5bnRheC50eHQJLypnOmh0bWxfaG92ZXJfdW5mb2xkKgorZzpodG1sX2lnbm9yZV9jb25jZWFsCXN5bnRheC50eHQJLypnOmh0bWxfaWdub3JlX2NvbmNlYWwqCitnOmh0bWxfaWdub3JlX2ZvbGRpbmcJc3ludGF4LnR4dAkvKmc6aHRtbF9pZ25vcmVfZm9sZGluZyoKK2c6aHRtbF9ub19mb2xkY29sdW1uCXN5bnRheC50eHQJLypnOmh0bWxfbm9fZm9sZGNvbHVtbioKK2c6aHRtbF9ub19pbnZhbGlkCXN5bnRheC50eHQJLypnOmh0bWxfbm9faW52YWxpZCoKK2c6aHRtbF9ub19wcmUJc3ludGF4LnR4dAkvKmc6aHRtbF9ub19wcmUqCitnOmh0bWxfbm9fcHJvZ3Jlc3MJc3ludGF4LnR4dAkvKmc6aHRtbF9ub19wcm9ncmVzcyoKK2c6aHRtbF9udW1iZXJfbGluZXMJc3ludGF4LnR4dAkvKmc6aHRtbF9udW1iZXJfbGluZXMqCitnOmh0bWxfcHJlX3dyYXAJc3ludGF4LnR4dAkvKmc6aHRtbF9wcmVfd3JhcCoKK2c6aHRtbF9wcmV2ZW50X2NvcHkJc3ludGF4LnR4dAkvKmc6aHRtbF9wcmV2ZW50X2NvcHkqCitnOmh0bWxfc3RhcnRfbGluZQlzeW50YXgudHh0CS8qZzpodG1sX3N0YXJ0X2xpbmUqCitnOmh0bWxfdXNlX2NzcwlzeW50YXgudHh0CS8qZzpodG1sX3VzZV9jc3MqCitnOmh0bWxfdXNlX2VuY29kaW5nCXN5bnRheC50eHQJLypnOmh0bWxfdXNlX2VuY29kaW5nKgorZzpodG1sX3VzZV94aHRtbAlzeW50YXgudHh0CS8qZzpodG1sX3VzZV94aHRtbCoKK2c6aHRtbF93aG9sZV9maWxsZXIJc3ludGF4LnR4dAkvKmc6aHRtbF93aG9sZV9maWxsZXIqCiBnOm5ldHJ3X2FsdG8JcGlfbmV0cncudHh0CS8qZzpuZXRyd19hbHRvKgogZzpuZXRyd19hbHR2CXBpX25ldHJ3LnR4dAkvKmc6bmV0cndfYWx0dioKIGc6bmV0cndfYmFubmVyCXBpX25ldHJ3LnR4dAkvKmc6bmV0cndfYmFubmVyKgpAQCAtNTk0OSw2ICs1OTc1LDcgQEAKIGdICXZpc3VhbC50eHQJLypnSCoKIGdJCWluc2VydC50eHQJLypnSSoKIGdKCWNoYW5nZS50eHQJLypnSioKK2dOCXZpc3VhbC50eHQJLypnTioKIGdQCWNoYW5nZS50eHQJLypnUCoKIGdRCWludHJvLnR4dAkvKmdRKgogZ1IJY2hhbmdlLnR4dAkvKmdSKgpAQCAtNjAzMyw2ICs2MDYwLDcgQEAKIGdsdnMtcGx1Z2lucwlwaV9nZXRzY3JpcHQudHh0CS8qZ2x2cy1wbHVnaW5zKgogZ2x2cy11c2FnZQlwaV9nZXRzY3JpcHQudHh0CS8qZ2x2cy11c2FnZSoKIGdtCW1vdGlvbi50eHQJLypnbSoKK2duCXZpc3VhbC50eHQJLypnbioKIGduYXQjSW5zZXJ0X1RhZ3NfSGVhZGVyKCkJZnRfYWRhLnR4dAkvKmduYXQjSW5zZXJ0X1RhZ3NfSGVhZGVyKCkqCiBnbmF0I05ldygpCWZ0X2FkYS50eHQJLypnbmF0I05ldygpKgogZ25hdC14cmVmCWZ0X2FkYS50eHQJLypnbmF0LXhyZWYqCkBAIC04Mjk2LDExICs4MzI0LDEzIEBACiB2X2c/CWNoYW5nZS50eHQJLyp2X2c/Kgogdl9nRgllZGl0aW5nLnR4dAkvKnZfZ0YqCiB2X2dKCWNoYW5nZS50eHQJLyp2X2dKKgordl9nTgl2aXN1YWwudHh0CS8qdl9nTioKIHZfZ1YJdmlzdWFsLnR4dAkvKnZfZ1YqCiB2X2ddCXRhZ3NyY2gudHh0CS8qdl9nXSoKIHZfZ19DVFJMLUcJZWRpdGluZy50eHQJLyp2X2dfQ1RSTC1HKgogdl9nX0NUUkwtXQl0YWdzcmNoLnR4dAkvKnZfZ19DVFJMLV0qCiB2X2dmCWVkaXRpbmcudHh0CS8qdl9nZioKK3ZfZ24JdmlzdWFsLnR4dAkvKnZfZ24qCiB2X2dxCWNoYW5nZS50eHQJLyp2X2dxKgogdl9ndgl2aXN1YWwudHh0CS8qdl9ndioKIHZfZ3cJY2hhbmdlLnR4dAkvKnZfZ3cqCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90b2RvLnR4dCBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CmluZGV4IGZkMTk2ODMuLjhkMmQ3ZTAgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RvZG8udHh0CisrKyBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CkBAIC0xLDQgKzEsNCBAQAotKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMiBKdWwgMTEKKyp0b2RvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTIgSnVsIDI1CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTQ4LDIwICs0OCwxMyBAQAogCiBKYXZhc2NyaXB0IGZpbGUgd2hlcmUgaW5kZW50IGdldHMgc3R1Y2sgb246IEdhbGF4eU1hc3RlciwgMjAxMiBNYXkgMy4KIAotUGF0Y2ggdG8gZml4IGJsYWNrIG9uIGJsYWNrIGZvciB0ZXJtaW5hbCB3aXRoIDggY29sb3JzLgotKEphbWVzIE1jQ295LCAyMDEyIEp1bCAxMCkKLQotUGF0Y2ggdG8gbWFrZSB3aW5yZXN0dmlldygpIHdvcmsgYmV0dGVyLiAoTGVjaCBMb3JlbnMsIDIwMTIgSnVsIDEwKQotCiBUaGUgQ29tcGxldGVEb25lIGF1dG9jb21tYW5kIG5lZWRzIHNvbWUgaW5mbyBwYXNzZWQgdG8gaXQ6CiAtIFRoZSB3b3JkIHRoYXQgd2FzIHNlbGVjdGVkIChlbXB0eSBpZiBhYmFuZG9uZWQgY29tcGxldGUpCiAtIFR5cGUgb2YgY29tcGxldGlvbjogdGFnLCBvbW5pZnVuYywgdXNlciBmdW5jLgogCi1Db21wbGV0ZWZ1bmMgZ2V0cyBudW1iZXIgcGFzc2VkIGluc3RlYWQgb2Ygc3RyaW5nLgotUGF0Y2ggZnJvbSBZYWt1aGlybyBNYXRzdW1vdG8sIDIwMTIgSnVsIDEwCi0KLVVzZXIgY29tbWFuZCBjb21wbGV0ZSBjYW4ndCBoYW5kbGUgc3BhY2VzLiAgUGF0Y2ggYnkgWWFzdWhpcm8gTWF0c3Vtb3RvLCAyMDEyCi1KdWwgMTEuCisiOmd1bmRvIiBjb21tYW5kOiBnbG9iYWwgdW5kby4gIFVuZG9lcyBjaGFuZ2VzIHNwcmVhZCBvdmVyIG11bHRpcGxlIGZpbGVzIGluCit0aGUgb3JkZXIgdGhleSB3ZXJlIG1hZGUuICBBbHNvICI6Z3JlZG8iLiAgQm90aCB3aXRoIGEgY291bnQuICBVc2VmdWwgd2hlbgordGVzdHMgZmFpbCBhZnRlciBtYWtpbmcgY2hhbmdlcyBhbmQgeW91IGZvcmdvdCBpbiB3aGljaCBmaWxlcy4KIAogV2luMzI6IFdoZW4gYSBkaXJlY3RvcnkgbmFtZSBjb250YWlucyBhbiBleGNsYW1hdGlvbiBtYXJrLCBjb21wbGV0aW9uIGRvZXNuJ3QKIGNvbXBsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5LiAgTm8gZXNjYXBpbmcgZm9yIHRoZSAiISI/IChKYW4KQEAgLTc0LDE1ICs2NywyMiBAQAogCiBJc3N1ZSA3MjogJ2F1dG9jaGRpcicgY2F1c2VzIHByb2JsZW1zIGZvciA6dmltZ3JlcC4KIAorUGF0Y2ggZm9yIFNHUiBtb3VzZSBzdXBwb3J0LiAoSGF5YWtpIFNhaXRvLCBtYWlsIGZyb20gWWFrdWhpcm8gTWF0c3Vtb3RvLCAyMDEyCitKdWwgMTMpCisKIE1TLVdpbmRvd3M6IENyYXNoIG9wZW5pbmcgdmVyeSBsb25nIGZpbGUgbmFtZSBzdGFydGluZyB3aXRoICJcXCIuCiAoQ2hyaXN0aWFuIEJyb2NrLCAyMDEyIEp1biAyOSkKIAorUGF0Y2ggdG8gZml4IGFzc2lnbmluZyB0byBzY29wZSBkaWN0aW9uYXJpZXMgZm9yIFB5dGhvbi4gKFp5WCwgMjAxMiBKdWwgMTYpCisKIFN5bnRheCB1cGRhdGUgcHJvYmxlbSBpbiBvbmUgYnVmZmVyIG9wZW5lZCBpbiB0d28gd2luZG93cywgYm90dG9tIHdpbmRvdyBpcwogbm90IGNvcnJlY3RseSB1cGRhdGVkLiAoUGF1bCBIYXJyaXMsIDIwMTIgRmViIDI3KQogCiBQYXRjaCB0byBhZGQgZ2V0c2lkKCkuIChUeXJ1LCAyMDExIE9jdCAyKSAgRG8gd2Ugd2FudCB0aGlzPyAgVXBkYXRlIE9jdCA0LgogT3IgdXNlIGV4cGFuZCgnPHNpZD4nKT8KIAorUGF0Y2ggdG8gaW1wcm92ZSBJTUUgaGFuZGxpbmcuIChZYXN1aGlybyBNYXRzdW1vdG8sIDIwMTIgSnVsIDE4KQorCiBNUy1XaW5kb3dzIHJlc2l6aW5nIHByb2JsZW1zOgogLSBXaW5kb3dzIHdpbmRvdyBvbiBzY3JlZW4gcG9zaXRpb25pbmc6IFBhdGNoIGJ5IFl1a2loaXJvIE5ha2FkYWlyYSwgMjAxMiBKdW4KICAgMjAuICBVc2VzIGdldFdpbmRvd1JlY3QoKSBpbnN0ZWFkIG9mIEdldFdpbmRvd1BsYWNlbWVudCgpCkBAIC0xMDUsNiArMTA1LDcgQEAKICAgaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnL3RpY2tldC8yNjYyCiAKIFBhdGNoIHRvIGFkZCB0ZXN0cyBmb3IgaWZfeGNtZHNydi5jLiwgSnVsIDgsIG5lZWQgc29tZSBtb3JlIHdvcmsuIChCcmlhbiBCdXJucykKK05ldyB0ZXN0cyBKdWwgMTMuICAgVXBkYXRlIEp1bCAxNy4gIERpc2N1c3Npb24gSnVsIDE4LgogCiBXaGVuIHJ1bm5pbmcgVmltIGluIHNpbGVudCBleCBtb2RlLCBhbiBleGlzdGluZyBzd2FwZmlsZSBjYXVzZXMgVmltIHRvIHdhaXQKIGZvciBhIHVzZXIgYWN0aW9uIHdpdGhvdXQgYSBwcm9tcHQuIChNYWFydGVuIEJpbGxlbW9udCwgMjAxMiBGZWIgMykKQEAgLTEyMyw2ICsxMjQsOSBAQAogUHJvYmxlbSB3aXRoIHdpbmZpeGhlaWdodCBhbmQgcmVzaXppbmcuIChZdWtpaGlybyBOYWthZGFpcmEsIDIwMTEgU2VwIDE3KQogUGF0Y2ggU2VwIDE4LgogCitQYXRjaCBmb3IgSU1FIHByb2JsZW1zLiBSZW1vdmUgaGFja2luZyBjb2RlIGZvciBvbGQgSU0uIChZdWtpaGlybyBOYWthZGFpcmEsCisyMDEyIEp1bCAyMCkKKwogUGF0Y2ggZm9yIGhhcygndW5uYW1lZHBsdXMnKSBkb2NzLiAoVG9ueSBNZWNoZWx5bmNrLCAyMDExIFNlcCAyNykKIEFuZCBvbmUgZm9yIGd1aV94MTEudHh0LgogCkBAIC0xMzUsOSArMTM5LDYgQEAKIFByb2JsZW0gd2l0aCBzdGFydGluZyBWaXN1YWwgYmxvY2sgbW9kZSB3aXRoIDpub3JtIHdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQuCiAoRGF2aWQgZ2x0cywgMjAxMiBKdW4gNSkKIAotV2hlbiAnZ3Vpb3B0aW9ucycgY29udGFpbnMgJ2MnICh1c2UgY29uc29sZSBkaWFsb2cpIHRoZW4gaW5wdXRkaWFsb2coKSByZXR1cm5zCi1hIGRpZmZlcmVudCB2YWx1ZSB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLiAoRGF2aWQgRmlzaGJ1cm4sIDIwMTIgSnVsIDEwKQotCiAiOmNkIiBkb2Vzbid0IHdvcmsgd2hlbiBjdXJyZW50IGRpcmVjdG9yeSBwYXRoIGNvbnRhaW5zICIqKiIuCiBmaW5kZGlyKCkgaGFzIHRoZSBzYW1lIHByb2JsZW0uICAoWXVraWhpcm8gTmFrYWRhaXJhLCAyMDEyIEphbiAxMCkKIFJlcXVpcmVzIGEgcmV3cml0ZSBvZiB0aGUgZmlsZV9maWxlX2luX3BhdGggY29kZS4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Zpc3VhbC50eHQgYi9ydW50aW1lL2RvYy92aXN1YWwudHh0CmluZGV4IDc0NzI3ZWMuLmE4YzhjZTYgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3Zpc3VhbC50eHQKKysrIGIvcnVudGltZS9kb2MvdmlzdWFsLnR4dApAQCAtMSw0ICsxLDQgQEAKLSp2aXN1YWwudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTIgSnVuIDE0CisqdmlzdWFsLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDEyIEp1bCAyNQogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQveG1sLnZpbSBiL3J1bnRpbWUvaW5kZW50L3htbC52aW0KaW5kZXggMzE5ZGMzOS4uZGJlNWJlNSAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQveG1sLnZpbQorKysgYi9ydW50aW1lL2luZGVudC94bWwudmltCkBAIC0xLDYgKzEsNiBAQAogIiBMYW5ndWFnZToJeG1sCiAiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgotIiBMYXN0IENoYW5nZToJMjAxMiBNYXkgMTgKKyIgTGFzdCBDaGFuZ2U6CTIwMTIgSnVsIDI1CiAiIE5vdGVzOgkxKSBkb2VzIG5vdCBpbmRlbnQgcHVyZSBub24teG1sIGNvZGUgKGUuZy4gZW1iZWRkZWQgc2NyaXB0cykKICIJCTIpIHdpbGwgYmUgY29uZnVzZWQgYnkgdW5iYWxhbmNlZCB0YWdzIGluIGNvbW1lbnRzCiAiCQlvciBDREFUQSBzZWN0aW9ucy4KQEAgLTMxLDggKzMxLDE2IEBACiAgICAgIiBsZXQgYjp4bWxfaW5kZW50X2Nsb3NlID0gJy5cey19PC9cKGFkZHJlc3NcKVxAIScKIGVuZGlmCiAKK2xldCAmY3BvID0gczprZWVwY3BvCit1bmxldCBzOmtlZXBjcG8KKwogIiBbLS0gZmluaXNoLCBpZiB0aGUgZnVuY3Rpb24gYWxyZWFkeSBleGlzdHMgLS1dCi1pZiBleGlzdHMoJypYbWxJbmRlbnRHZXQnKSB8IGZpbmlzaCB8IGVuZGlmCitpZiBleGlzdHMoJypYbWxJbmRlbnRHZXQnKQorICBmaW5pc2gKK2VuZGlmCisKK2xldCBzOmtlZXBjcG89ICZjcG8KK3NldCBjcG8mdmltCiAKIGZ1biEgPFNJRD5YbWxJbmRlbnRXaXRoUGF0dGVybihsaW5lLCBwYXQpCiAgICAgbGV0IHMgPSBzdWJzdGl0dXRlKCd4Jy5hOmxpbmUsIGE6cGF0LCAiXDEiLCAnZycpCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9iZWxhcnVzaWFuLWpjdWtlbi52aW0gYi9ydW50aW1lL2tleW1hcC9iZWxhcnVzaWFuLWpjdWtlbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjODRhYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL2JlbGFydXNpYW4tamN1a2VuLnZpbQpAQCAtMCwwICsxLDg3IEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgQmVsYXJ1c2lhbiBjaGFyYWN0ZXJzLCBsYXlvdXQgJ2pjdWtlbicsIGNsYXNzaWNhbCB2YXJpYW50CisiIFVzZWZ1bCBtYWlubHkgd2l0aCBVVEYtOCwgYnV0IG1heSB3b3JrIHdpdGggb3RoZXIgZW5jb2RpbmdzLgorCisiIERlcml2ZWQgRnJvbTogcnVzc2lhbi1qY3VrZW4udmltCisiIE1haW50YWluZXI6ICAgQWxpYWtzZWkgTmVzdHNlcmF1IDxhbGlha3NlaUBzY3JlZW5jdXN0b21zLmNvbT4KKyIgTGFzdCBDaGFuZ2VkOiAyMDEyIEp1bCAyMworCisiIEFsbCBjaGFyYWN0ZXJzIGFyZSBnaXZlbiBsaXRlcmFsbHksIGNvbnZlcnNpb24gdG8gYW5vdGhlciBlbmNvZGluZyAoZS5nLiwKKyIgVVRGLTgpIHNob3VsZCB3b3JrLgorc2NyaXB0ZW5jb2RpbmcgdXRmLTgKKworbGV0IGI6a2V5bWFwX25hbWUgPSAiYnkiCisKK2xvYWRrZXltYXAKK34J0IEJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KK2AJ0ZEJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPCitGCdCQCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKzwJ0JEJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkUKK0QJ0JIJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVkUKK1UJ0JMJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFCitMCdCUCUNZUklMTElDIENBUElUQUwgTEVUVEVSIERFCitUCdCVCUNZUklMTElDIENBUElUQUwgTEVUVEVSIElFCis6CdCWCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorUAnQlwlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRQorQgnQhglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCitRCdCZCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIEkKK1IJ0JoJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EKK0sJ0JsJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUwKK1YJ0JwJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU0KK1kJ0J0JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KK0oJ0J4JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTworRwnQnwlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorSAnQoAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUgorQwnQoQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUworTgnQoglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURQorRQnQowlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCitBCdCkCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVGCit7CdClCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEhBCitXCdCmCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFRTRQorWAnQpwlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBDSEUKK0kJ0KgJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCitPCdCOCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEFTWUxMQUJJQyBVCit9CScJQVBPU1RST1BIRQorUwnQqwlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVCitNCdCsCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFNPRlQgU0lHTgorXCIJ0K0JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQorPgnQrglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorWgnQrwlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorZgnQsAlDWVJJTExJQyBTTUFMTCBMRVRURVIgQQorLAnQsQlDWVJJTExJQyBTTUFMTCBMRVRURVIgQkUKK2QJ0LIJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCit1CdCzCUNZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKK2wJ0LQJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERFCit0CdC1CUNZUklMTElDIFNNQUxMIExFVFRFUiBJRQorOwnQtglDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFCitwCdC3CUNZUklMTElDIFNNQUxMIExFVFRFUiBaRQorYgnRlglDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorcQnQuQlDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgSQorcgnQuglDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EKK2sJ0LsJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMCit2CdC8CUNZUklMTElDIFNNQUxMIExFVFRFUiBFTQoreQnQvQlDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4KK2oJ0L4JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8KK2cJ0L8JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFCitoCdGACUNZUklMTElDIFNNQUxMIExFVFRFUiBFUgorYwnRgQlDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKK24J0YIJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFCitlCdGDCUNZUklMTElDIFNNQUxMIExFVFRFUiBVCithCdGECUNZUklMTElDIFNNQUxMIExFVFRFUiBFRgorWwnRhQlDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEKK3cJ0YYJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRQoreAnRhwlDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCitpCdGICUNZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKK28J0Z4JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEFTWUxMQUJJQyBVCitdCScJQVBPU1RST1BIRQorcwnRiwlDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQorbQnRjAlDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCisnCdGNCUNZUklMTElDIFNNQUxMIExFVFRFUiBFCisuCdGOCUNZUklMTElDIFNNQUxMIExFVFRFUiBZVQoregnRjwlDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKK0AJIgorIwknCiskCSoKKyUJOgorXgksCismCS4KKyoJOwpkaWZmIC0tZ2l0IGEvcnVudGltZS9tc3dpbi52aW0gYi9ydW50aW1lL21zd2luLnZpbQppbmRleCAwMmVkZmJjLi5jYTI4MGQyIDEwMDY0NAotLS0gYS9ydW50aW1lL21zd2luLnZpbQorKysgYi9ydW50aW1lL21zd2luLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgU2V0IG9wdGlvbnMgYW5kIGFkZCBtYXBwaW5nIHN1Y2ggdGhhdCBWaW0gYmVoYXZlcyBhIGxvdCBsaWtlIE1TLVdpbmRvd3MKICIKICIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KLSIgTGFzdCBjaGFuZ2U6CTIwMTIgSnVuIDEzCisiIExhc3QgY2hhbmdlOgkyMDEyIEp1bCAyNQogCiAiIGJhaWwgb3V0IGlmIHRoaXMgaXNuJ3Qgd2FudGVkIChtcnN2aW0udmltIHVzZXMgdGhpcykuCiBpZiBleGlzdHMoImc6c2tpcF9sb2FkaW5nX21zd2luIikgJiYgZzpza2lwX2xvYWRpbmdfbXN3aW4KQEAgLTQ1LDcgKzQ1LDcgQEAKICIgVXNlIENUUkwtRyB1IHRvIGhhdmUgQ1RSTC1aIG9ubHkgdW5kbyB0aGUgcGFzdGUuCiAKIGV4ZSAnaW5vcmVtYXAgPHNjcmlwdD4gPEMtVj4gPEMtRz51JyAuIHBhc3RlI3Bhc3RlX2NtZFsnaSddCi1leGUgJ3Zub3JlbWFwIDxzY3JpcHQ+IDxDLVY+JyAuIHBhc3RlI3Bhc3RlX2NtZFsndiddCitleGUgJ3Zub3JlbWFwIDxzY3JpcHQ+IDxDLVY+ICcgLiBwYXN0ZSNwYXN0ZV9jbWRbJ3YnXQogCiBpbWFwIDxTLUluc2VydD4JCTxDLVY+CiB2bWFwIDxTLUluc2VydD4JCTxDLVY+CmRpZmYgLS1naXQgYS9ydW50aW1lL3BsdWdpbi90b2h0bWwudmltIGIvcnVudGltZS9wbHVnaW4vdG9odG1sLnZpbQppbmRleCAzYzdkNzc1Li4wYWU2YzgxIDEwMDY0NAotLS0gYS9ydW50aW1lL3BsdWdpbi90b2h0bWwudmltCisrKyBiL3J1bnRpbWUvcGx1Z2luL3RvaHRtbC52aW0KQEAgLTEsNDAgKzEsOTUgQEAKICIgVmltIHBsdWdpbiBmb3IgY29udmVydGluZyBhIHN5bnRheCBoaWdobGlnaHRlZCBmaWxlIHRvIEhUTUwuCiAiIE1haW50YWluZXI6IEJlbiBGcml0eiA8ZnJpdHpvcGhyZW5pY0BnbWFpbC5jb20+Ci0iIExhc3QgQ2hhbmdlOiAyMDExIE1heSAyNgorIiBMYXN0IENoYW5nZTogMjAxMiBKdWwgMTIKICIKICIgVGhlIGNvcmUgb2YgdGhlIGNvZGUgaXMgaW4gJFZJTVJVTlRJTUUvYXV0b2xvYWQvdG9odG1sLnZpbSBhbmQKICIgJFZJTVJVTlRJTUUvc3ludGF4LzJodG1sLnZpbQogIgotIiBUT0RPOgorIiBUT0RPOiB7e3sKKyIgICAqIEJ1Zzogc3RpbGwgYSAxcHggZ2FwIHRocm91Z2hvdXQgdGhlIGZvbGQgY29sdW1uIHdoZW4gaHRtbF9wcmV2ZW50X2NvcHkgaXMKKyIgICAgICJmbiIgaW4gc29tZSBicm93c2Vycy4gU3BlY2lmaWNhbGx5LCBpbiBDaHJvbWl1bSBvbiBVYnVudHUgKGJ1dCBub3QgQ2hyb21lCisiICAgICBvbiBXaW5kb3dzKS4gUGVyaGFwcyBpdCBpcyBmb250IHJlbGF0ZWQ/CisiICAgKiBCdWc6IHN0aWxsIHNvbWUgZ2FwcyBpbiB0aGUgZm9sZCBjb2x1bW4gd2hlbiBodG1sX3ByZXZlbnRfY29weSBjb250YWlucworIiAgICAgJ2QnIGFuZCBzaG93aW5nIHRoZSB3aG9sZSBkaWZmIChvYnNlcnZlZCBpbiBtdWx0aXBsZSBicm93c2VycykuIE9ubHkgZ2FwcworIiAgICAgb24gZGlmZiBsaW5lcyB0aG91Z2guCisiICAgKiBhbmNob3JzIG9uIGVhY2ggbGluZSBzbyB5b3UgY2FuIGRvIGZpbGUuaHRtbCMxMjM0IHRvIGdldCB0byBsaW5lIDEyMzQKKyIgICAqIGFkZCBhIG1vZGVsaW5lIHRvIHRoZSBnZW5lcmF0ZWQgaHRtbCB0byBzZXQgbm9mb2xkZW5hYmxlIG9yIGZkbT1tYW51YWwKKyIgICAgIGJlY2F1c2Ugc3ludGF4IGZvbGRpbmcgdGFrZXMgYSB0ZXJyaWJseSBsb25nIHRpbWUgdG8gd29yayB3aXRoIHRoZSB3ZWlyZAorIiAgICAgZm9ybWF0dGluZyB0aGUgc2NyaXB0IGRvZXMuCiAiICAgKiBPcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBDU1MgaW4gZXh0ZXJuYWwgc3R5bGUgc2hlZXRzLiBOZXcgOlRPY3NzCiAiICAgICBjb21tYW5kIHRvIGNvbnZlcnQgdGhlIGN1cnJlbnQgY29sb3Igc2NoZW1lIGludG8gYSAobW9zdGx5KSBnZW5lcmljIENTUwogIiAgICAgc3R5bGVzaGVldCB3aGljaCBjYW4gYmUgcmUtdXNlZC4gQWx0ZXJuYXRlIHN0eWxlc2hlZXQgc3VwcG9ydD8KKyIgICAqIFVuZGVyY3VybCBzdXBwb3J0IHZpYSBDU1MzLCB3aXRoIGZhbGxiYWNrIHRvIGRvdHRlZCBvciBzb21ldGhpbmc6CisiCWh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZC90b3BpYy92aW1fdXNlL0J6WEE2SGUxcEhnL2Rpc2N1c3Npb24KKyIgICAqIFJlZG8gdXBkYXRlcyBmb3IgbW9kaWZpZWQgZGVmYXVsdCBmb2xkdGV4dCAodjExKSB3aGVuL2lmIHRoZSBwYXRjaCBpcworIiAgICAgYWNjZXB0ZWQgdG8gbW9kaWZ5IGl0LgorIiAgICogVGVzdCBjYXNlICtkaWZmX29uZV9maWxlLWR5bmFtaWNfZm9sZHMrZXhwYW5kX3RhYnMtaG92ZXJfdW5mb2xkCisiCQkraWdub3JlX2NvbmNlYWwtaWdub3JlX2ZvbGRpbmcrbm9fZm9sZGNvbHVtbitub19wcmUrbm9fcHJvZ3Jlc3MKKyIJCStudW1iZXJfbGluZXMtcHJlX3dyYXAtdXNlX2Nzcyt1c2VfeGh0bWwrd2hvbGVfZmlsbGVyLnhodG1sCisiICAgICBkb2VzIG5vdCBzaG93IHRoZSB3aG9sZSBkaWZmIGZpbGxlciBhcyBpdCBpcyBzdXBwb3NlZCB0by4KKyIgICAqIEFkZCBvcHRpb24gZm9yIG5vdCBnZW5lcmF0aW5nIHRoZSBoeXBlcmxpbmsgb24gc3R1ZmYgdGhhdCBsb29rcyBsaWtlIGEKKyIgICAgIFVSTD8gT3IganVzdCBjb2xvciB0aGUgbGluayB0byBmaXQgd2l0aCB0aGUgY29sb3JzY2hlbWUgKGFuZCBvbmx5IHNwZWNpYWwKKyIgICAgIHdoZW4gaG92ZXJpbmcpPworIiAgICogQnVnOiB3aGVuICdpc3ByaW50JyBpcyB3cm9uZyBmb3IgdGhlIGN1cnJlbnQgZW5jb2RpbmcsIHdpbGwgZ2VuZXJhdGUKKyIgICAgIGludmFsaWQgY29udGVudC4gQ2FuL3Nob3VsZCBhbnl0aGluZyBiZSBkb25lIGFib3V0IHRoaXM/IE1heWJlIGEgc2VwYXJhdGUKKyIgICAgIHBsdWdpbiB0byBjb3JyZWN0ICdpc3ByaW50JyBiYXNlZCBvbiBlbmNvZGluZz8KKyIgICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgd2luZG93cy0xMjVcZCBlbmNvZGluZ3MgYWN0dWFsbHkgd29yayBpbiBVbml4IHdpdGhvdXQKKyIgICAgIHRoZSA4Yml0LSBwcmVmaXguIEFkZCBwcmVmaXggdG8gYXV0b2xvYWQgZGljdGlvbmFyaWVzIGZvciBVbml4IGlmIG5vdC4KKyIgICAqIEZvbnQgYXV0by1kZXRlY3Rpb24gc2ltaWxhciB0bworIiAgICAgaHR0cDovL3d3dy52aW0ub3JnL3NjcmlwdHMvc2NyaXB0LnBocD9zY3JpcHRfaWQ9MjM4NCBidXQgZm9yIGEgdmFyaWV0eSBvZgorIiAgICAgcGxhdGZvcm1zLgorIiAgICogRXJyb3IgdGhyb3duIHdoZW4gc291cmNpbmcgMmh0bWwudmltIGRpcmVjdGx5IHdoZW4gcGx1Z2lucyBhcmUgbm90IGxvYWRlZC4KICIgICAqIFB1bGwgaW4gY29kZSBmcm9tIGh0dHA6Ly93d3cudmltLm9yZy9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTMxMTMgOgogIgktIGxpc3RjaGFycyBzdXBwb3J0CiAiCS0gZnVsbC1saW5lIGJhY2tncm91bmQgaGlnaGxpZ2h0CiAiCS0gb3RoZXI/Ci0iICAgKiBGb250IGF1dG8tZGV0ZWN0aW9uIHNpbWlsYXIgdG8KLSIgICAgIGh0dHA6Ly93d3cudmltLm9yZy9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTIzODQKLSIgICAqIEV4cGxpY2l0bHkgdHJpZ2dlciBJRTgrIFN0YW5kYXJkcyBNb2RlPwotIiAgICogTWFrZSBpdCBzbyBkZWxldGVkIGxpbmVzIGluIGEgZGlmZiBkb24ndCBjcmVhdGUgc2lkZS1zY3JvbGxpbmcKKyIgICAqIEV4cGxpY2l0bHkgdHJpZ2dlciBJRTgrIFN0YW5kYXJkcyBNb2RlPyBEb2Vzbid0IHNlZW0gbmVjZXNzYXJ5IHlldC4KKyIgICAqIE1ha2UgaXQgc28gZGVsZXRlZCBsaW5lcyBpbiBhIGRpZmYgZG9uJ3QgY3JlYXRlIHNpZGUtc2Nyb2xsaW5nIChnZXQgaXQKKyIgICAgIGZyZWUgd2l0aCBmdWxsLWxpbmUgYmFja2dyb3VuZCBoaWdobGlnaHQgYWJvdmUpLgogIiAgICogUmVzdG9yZSBvcGVuL2Nsb3NlZCBmb2xkcyBhbmQgY3Vyc29yIHBvc2l0aW9uIGFmdGVyIHByb2Nlc3NpbmcgZWFjaCBmaWxlCi0iICAgICB3aXRoIG9wdGlvbiBub3QgdG8gcmVzdG9yZSBmb3Igc3BlZWQgaW5jcmVhc2UKLSIgICAqIFVuZGVyY3VybCBzdXBwb3J0IHZpYSBkb3R0ZWQgYm90dG9tIGJvcmRlcj8KKyIgICAgIHdpdGggb3B0aW9uIG5vdCB0byByZXN0b3JlIGZvciBzcGVlZCBpbmNyZWFzZS4KICIgICAqIEFkZCBleHRyYSBtZXRhIGluZm8gKGdlbmVyYXRpb24gdGltZSwgZXRjLik/CiAiICAgKiBUaWR5IHVwIHNvIHdlIGNhbiB1c2Ugc3RyaWN0IGRvY3R5cGUgaW4gZXZlbiBtb3JlIHNpdHVhdGlvbnMKICIgICAqIEltcGxlbWVudGF0aW9uIGRldGFpbDogYWRkIHRocmVzaG9sZCBmb3Igd3JpdGluZyB0aGUgbGluZXMgdG8gdGhlIGh0bWwKICIgICAgIGJ1ZmZlciBiZWZvcmUgd2UncmUgZG9uZSAoNTAwMCBvciBzbyBsaW5lcyBzaG91bGQgZG8gaXQpCiAiICAgKiBUT0RPIGNvbW1lbnRzIGZvciBjb2RlIGNsZWFudXAgc2NhdHRlcmVkIHRocm91Z2hvdXQKLSIKKyJ9fX0KIAogaWYgZXhpc3RzKCdnOmxvYWRlZF8yaHRtbF9wbHVnaW4nKQogICBmaW5pc2gKIGVuZGlmCi1sZXQgZzpsb2FkZWRfMmh0bWxfcGx1Z2luID0gJ3ZpbTcuM192MTAnCitsZXQgZzpsb2FkZWRfMmh0bWxfcGx1Z2luID0gJ3ZpbTcuM192MTInCiAKICIKLSIgQ2hhbmdlbG9nOgotIiAgIDcuM192MTAgKHRoaXMgdmVyc2lvbik6IEZpeCBlcnJvciBFNjg0IHdoZW4gY29udmVydGluZyBhIHJhbmdlIHdob2xseSBpbnNpZGUKKyIgQ2hhbmdlbG9nOiB7e3sKKyIKKyIgICA3LjNfdjEyICh0aGlzIHZlcnNpb24pOiBGaXggbW9kZWxpbmUgbWFuZ2xpbmcgdG8gYWxzbyB3b3JrIGZvciB3aGVuIG11bHRpcGxlCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0IGdyb3VwcyBtYWtlIHVwIHRoZSBzdGFydC1vZi1tb2RlbGluZSB0ZXh0LgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcHJvdmUgcmVuZGVyIHRpbWUgb2YgcGFnZSB3aXRoIHVuY29weWFibGUgcmVnaW9ucworIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IG5vdCB1c2luZyBvbmUtaW5wdXQtcGVyLWNoYXIuIENoYW5nZSBuYW1lIG9mCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jb3B5YWJsZSBvcHRpb24gZnJvbSBodG1sX3Vuc2VsZWN0YWJsZSB0bworIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfcHJldmVudF9jb3B5LiBBZGRlZCBodG1sX25vX2ludmFsaWQgb3B0aW9uIGFuZAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdG8gaW5zZXJ0aW5nIGludmFsaWQgbWFya3VwIGZvciB1bmNvcHlhYmxlCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9ucyB0byBwcmV2ZW50IE1TIFdvcmQgZnJvbSBwYXN0aW5nIHVuZGVsZXRhYmxlCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0PiBlbGVtZW50cy4gRml4ICdjcG8nIGhhbmRsaW5nIChUaGlsbyBTaXgpLgorIiAgICAgICAgICAgICAgICA3LjNfdjEyYjE6IEFkZCBodG1sX3Vuc2VsZWN0YWJsZSBvcHRpb24uIFJld29yayBsb2dpYyB0bworIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSBwb3N0LXByb2Nlc3Npbmcgc3Vic3RpdHV0ZSBjb21tYW5kcyBpbgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdm9yIG9mIGRvaW5nIHRoZSB3b3JrIHVwIGZyb250LiBSZW1vdmUgdW5uZWNlc3NhcnkKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsIHRyZWF0bWVudCBvZiAnTGluZU5yJyBoaWdobGlnaHQgZ3JvdXAuIE1pbm9yCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgaW1wcm92ZW1lbnRzLiBGaXggbW9kZWxpbmUgbWFuZ2xpbmcgaW4KKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgb3V0cHV0IHNvIGl0IHdvcmtzIGZvciB0ZXh0IGluIHRoZSBmaXJzdAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi4gRml4IG1pc3NpbmcgbGluZSBudW1iZXIgYW5kIGZvbGQgY29sdW1uIGluCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiBmaWxsZXIgbGluZXMuIEZpeCB0aGF0IHNvbWUgZm9udHMgaGF2ZSBhIDFweAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcCAodXNpbmcgYSBkaXJ0eSBoYWNrLCBpbXByb3ZlbWVudHMgd2VsY29tZSkuIEFkZAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvcnNjaGVtZSIgbWV0YSB0YWcuIERvZXMgTk9UIGluY2x1ZGUgc3VwcG9ydCBmb3IKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmV3IGRlZmF1bHQgZm9sZHRleHQgYWRkZWQgaW4gdjExLCBhcyB0aGUgcGF0Y2gKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpbmcgaXQgaGFzIG5vdCB5ZXQgYmVlbiBpbmNsdWRlZCBpbiBWaW0uCisiICAgNy4zX3YxMSAoIHVucmVsZWFzZWQgKTogU3VwcG9ydCBuZXcgZGVmYXVsdCBmb2xkdGV4dCBmcm9tIHBhdGNoIGJ5IENocmlzdGlhbgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYWJhbmR0IGluCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2QvdG9waWMvdmltX2Rldi9CNkZTR2ZxOVZvSS9kaXNjdXNzaW9uLgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGF0Y2ggaGFzIG5vdCB5ZXQgYmVlbiBpbmNsdWRlZCBpbiBWaW0sIHRodXMKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVzZSBjaGFuZ2VzIGFyZSByZW1vdmVkIGluIHRoZSBuZXh0IHZlcnNpb24uCisiICAgNy4zX3YxMCAoZmQwOWE5Yzg0NjhlKTogRml4IGVycm9yIEU2ODQgd2hlbiBjb252ZXJ0aW5nIGEgcmFuZ2Ugd2hvbGx5IGluc2lkZQogIiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIG5lc3RlZCBmb2xkcyB3aXRoIGR5bmFtaWMgZm9sZGluZyBvbi4KICIgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHNvIGZpeCBwcm9ibGVtIHdpdGggZm9sZHRleHQgaW4gdGhpcyBzaXR1YXRpb24uCiAiICAgNy4zX3Y5ICAoMDg3N2I4ZDYzNzBlKTogQWRkIGh0bWxfcHJlX3dyYXAgb3B0aW9uIGFjdGl2ZSB3aXRoIGh0bWxfdXNlX2NzcwpAQCAtODEsMTQgKzEzNiwxNSBAQAogIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYgY29sb3JzIGFuZCB0aGUgbm9ybWFsIHN5bnRheCBjb2xvcnMKICIgICA3LjNfdjEgIChlNzc1MTE3NzEyNmIpOiBBZGQgY29uY2VhbCBzdXBwb3J0IGFuZCBtZXRhIHRhZ3MgaW4gb3V0cHV0CiAiICAgUHJlLXYxIGJhc2VsaW5lOiBNZXJjdXJpYWwgY2hhbmdlc2V0IDNjOTMyNGMwODAwZQorIn19fQogCiAiIERlZmluZSB0aGUgOlRPaHRtbCBjb21tYW5kIHdoZW46CiAiIC0gJ2NvbXBhdGlibGUnIGlzIG5vdCBzZXQKICIgLSB0aGlzIHBsdWdpbiB3YXMgbm90IGFscmVhZHkgbG9hZGVkCi0iIC0gdXNlciBjb21tYW5kcyBhcmUgYXZhaWxhYmxlLgorIiAtIHVzZXIgY29tbWFuZHMgYXJlIGF2YWlsYWJsZS4ge3t7CiBpZiAhJmNwICYmICFleGlzdHMoIjpUT2h0bWwiKSAmJiBoYXMoInVzZXJfY29tbWFuZHMiKQogICBjb21tYW5kIC1yYW5nZT0lIFRPaHRtbCA6Y2FsbCB0b2h0bWwjQ29udmVydDJIVE1MKDxsaW5lMT4sIDxsaW5lMj4pCi1lbmRpZgorZW5kaWYgIn19fQogCiAiIE1ha2Ugc3VyZSBhbnkgcGF0Y2hlcyB3aWxsIHByb2JhYmx5IHVzZSBjb25zaXN0ZW50IGluZGVudAotIiAgIHZpbTogdHM9OCBzdz0yIHN0cz0yIG5vZXQKKyIgICB2aW06IHRzPTggc3c9MiBzdHM9MiBub2V0IGZkbT1tYXJrZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4LzJodG1sLnZpbSBiL3J1bnRpbWUvc3ludGF4LzJodG1sLnZpbQppbmRleCA5ZGZlZDI2Li5mZGVlMWVhIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC8yaHRtbC52aW0KKysrIGIvcnVudGltZS9zeW50YXgvMmh0bWwudmltCkBAIC0xLDYgKzEsNiBAQAogIiBWaW0gc3ludGF4IHN1cHBvcnQgZmlsZQogIiBNYWludGFpbmVyOiBCZW4gRnJpdHogPGZyaXR6b3BocmVuaWNAZ21haWwuY29tPgotIiBMYXN0IENoYW5nZTogMjAxMSBNYXkgMjcKKyIgTGFzdCBDaGFuZ2U6IDIwMTIgSnVuIDMwCiAiCiAiIEFkZGl0aW9uYWwgY29udHJpYnV0b3JzOgogIgpAQCAtMjAsNyArMjAsNyBAQAogIiB0aGlzIGZpbGUgdXNlcyBsaW5lIGNvbnRpbnVhdGlvbnMKIGxldCBzOmNwb19zYXYgPSAmY3BvCiBsZXQgczpscyAgPSAmbHMKLXNldCBjcG8tPUMKK3NldCBjcG8mdmltCiAKIGxldCBzOmVuZD1saW5lKCckJykKIApAQCAtMzMsNiArMzMsMTcgQEAKIAogbGV0IHM6c2V0dGluZ3MgPSB0b2h0bWwjR2V0VXNlclNldHRpbmdzKCkKIAoraWYgIWV4aXN0cygnczpGT0xERURfSUQnKQorICBsZXQgczpGT0xERURfSUQgID0gaGxJRCgiRm9sZGVkIikgICAgIHwgbG9ja3ZhciBzOkZPTERFRF9JRAorICBsZXQgczpGT0xEX0NfSUQgID0gaGxJRCgiRm9sZENvbHVtbiIpIHwgbG9ja3ZhciBzOkZPTERfQ19JRAorICBsZXQgczpMSU5FTlJfSUQgID0gaGxJRCgnTGluZU5yJykgICAgIHwgbG9ja3ZhciBzOkxJTkVOUl9JRAorICBsZXQgczpESUZGX0RfSUQgID0gaGxJRCgiRGlmZkRlbGV0ZSIpIHwgbG9ja3ZhciBzOkRJRkZfRF9JRAorICBsZXQgczpESUZGX0FfSUQgID0gaGxJRCgiRGlmZkFkZCIpICAgIHwgbG9ja3ZhciBzOkRJRkZfQV9JRAorICBsZXQgczpESUZGX0NfSUQgID0gaGxJRCgiRGlmZkNoYW5nZSIpIHwgbG9ja3ZhciBzOkRJRkZfQ19JRAorICBsZXQgczpESUZGX1RfSUQgID0gaGxJRCgiRGlmZlRleHQiKSAgIHwgbG9ja3ZhciBzOkRJRkZfVF9JRAorICBsZXQgczpDT05DRUFMX0lEID0gaGxJRCgnQ29uY2VhbCcpICAgIHwgbG9ja3ZhciBzOkNPTkNFQUxfSUQKK2VuZGlmCisKICIgV2hpdGVzcGFjZQogaWYgczpzZXR0aW5ncy5wcmVfd3JhcAogICBsZXQgczp3aGl0ZXNwYWNlID0gIndoaXRlLXNwYWNlOiBwcmUtd3JhcDsgIgpAQCAtNDAsMjYgKzUxLDEzNyBAQAogICBsZXQgczp3aGl0ZXNwYWNlID0gIiIKIGVuZGlmCiAKK2lmICFlbXB0eShzOnNldHRpbmdzLnByZXZlbnRfY29weSkKKyAgaWYgczpzZXR0aW5ncy5ub19pbnZhbGlkCisgICAgIiBVc2VyIGhhcyBkZWNpZGVkIHRoZXkgZG9uJ3Qgd2FudCBpbnZhbGlkIG1hcmt1cC4gU3RpbGwgd29ya3MgaW4KKyAgICAiIE9wZW5PZmZpY2UsIGFuZCBmb3IgdGV4dCBlZGl0b3JzLCBidXQgd2hlbiBwYXN0aW5nIGludG8gTWljcm9zb2Z0IFdvcmQgdGhlCisgICAgIiBpbnB1dCBlbGVtZW50cyBnZXQgcGFzdGVkIHRvbyBhbmQgdGhleSBjYW5ub3QgYmUgZGVsZXRlZCAoYXQgbGVhc3Qgbm90CisgICAgIiBlYXNpbHkpLgorICAgIGxldCBzOnVuc2VsSW5wdXRUeXBlID0gIiIKKyAgZWxzZQorICAgICIgUHJldmVudCBmcm9tIGNvcHktcGFzdGluZyB0aGUgaW5wdXQgZWxlbWVudHMgaW50byBNaWNyb3NvZnQgV29yZCB3aGVyZQorICAgICIgdGhleSBjYW5ub3QgYmUgZGVsZXRlZCBlYXNpbHkgYnkgZGVsaWJlcmF0ZWx5IGluc2VydGluZyBpbnZhbGlkIG1hcmt1cC4KKyAgICBsZXQgczp1bnNlbElucHV0VHlwZSA9ICIgdHlwZT0naW52YWxpZF9pbnB1dF90eXBlJyIKKyAgZW5kaWYKK2VuZGlmCisKICIgV2hlbiBub3QgaW4gZ3VpIHdlIGNhbiBvbmx5IGd1ZXNzIHRoZSBjb2xvcnMuCisiIFRPRE8gLSBpcyB0aGlzIHRydWUgYW55bW9yZT8KIGlmIGhhcygiZ3VpX3J1bm5pbmciKQogICBsZXQgczp3aGF0dGVybSA9ICJndWkiCiBlbHNlCiAgIGxldCBzOndoYXR0ZXJtID0gImN0ZXJtIgogICBpZiAmdF9DbyA9PSA4Ci0gICAgbGV0IHM6Y3Rlcm1fY29sb3IgPSB7MDogIiM4MDgwODAiLCAxOiAiI2ZmNjA2MCIsIDI6ICIjMDBmZjAwIiwgMzogIiNmZmZmMDAiLCA0OiAiIzgwODBmZiIsIDU6ICIjZmY0MGZmIiwgNjogIiMwMGZmZmYiLCA3OiAiI2ZmZmZmZiJ9CisgICAgbGV0IHM6Y3Rlcm1fY29sb3IgPSB7CisJICAgIFwgICAwOiAiIzgwODA4MCIsIDE6ICIjZmY2MDYwIiwgMjogIiMwMGZmMDAiLCAzOiAiI2ZmZmYwMCIsCisJICAgIFwgICA0OiAiIzgwODBmZiIsIDU6ICIjZmY0MGZmIiwgNjogIiMwMGZmZmYiLCA3OiAiI2ZmZmZmZiIKKwkgICAgXCB9CiAgIGVsc2UKLSAgICBsZXQgczpjdGVybV9jb2xvciA9IHswOiAiIzAwMDAwMCIsIDE6ICIjYzAwMDAwIiwgMjogIiMwMDgwMDAiLCAzOiAiIzgwNDAwMCIsIDQ6ICIjMDAwMGMwIiwgNTogIiNjMDAwYzAiLCA2OiAiIzAwODA4MCIsIDc6ICIjYzBjMGMwIiwgODogIiM4MDgwODAiLCA5OiAiI2ZmNjA2MCIsIDEwOiAiIzAwZmYwMCIsIDExOiAiI2ZmZmYwMCIsIDEyOiAiIzgwODBmZiIsIDEzOiAiI2ZmNDBmZiIsIDE0OiAiIzAwZmZmZiIsIDE1OiAiI2ZmZmZmZiJ9CisgICAgbGV0IHM6Y3Rlcm1fY29sb3IgPSB7CisJICAgIFwgICAwOiAiIzAwMDAwMCIsIDE6ICIjYzAwMDAwIiwgMjogIiMwMDgwMDAiLCAzOiAiIzgwNDAwMCIsIAorCSAgICBcICAgNDogIiMwMDAwYzAiLCA1OiAiI2MwMDBjMCIsIDY6ICIjMDA4MDgwIiwgNzogIiNjMGMwYzAiLCAKKwkgICAgXCAgIDg6ICIjODA4MDgwIiwgOTogIiNmZjYwNjAiLCAxMDogIiMwMGZmMDAiLCAxMTogIiNmZmZmMDAiLAorCSAgICBcICAgMTI6ICIjODA4MGZmIiwgMTM6ICIjZmY0MGZmIiwgMTQ6ICIjMDBmZmZmIiwgMTU6ICIjZmZmZmZmIgorCSAgICBcIH0KIAogICAgICIgQ29sb3JzIGZvciA4OCBhbmQgMjU2IGNvbWUgZnJvbSB4dGVybS4KICAgICBpZiAmdF9DbyA9PSA4OAotICAgICAgY2FsbCBleHRlbmQoczpjdGVybV9jb2xvciwgezE2OiAiIzAwMDAwMCIsIDE3OiAiIzAwMDA4YiIsIDE4OiAiIzAwMDBjZCIsIDE5OiAiIzAwMDBmZiIsIDIwOiAiIzAwOGIwMCIsIDIxOiAiIzAwOGI4YiIsIDIyOiAiIzAwOGJjZCIsIDIzOiAiIzAwOGJmZiIsIDI0OiAiIzAwY2QwMCIsIDI1OiAiIzAwY2Q4YiIsIDI2OiAiIzAwY2RjZCIsIDI3OiAiIzAwY2RmZiIsIDI4OiAiIzAwZmYwMCIsIDI5OiAiIzAwZmY4YiIsIDMwOiAiIzAwZmZjZCIsIDMxOiAiIzAwZmZmZiIsIDMyOiAiIzhiMDAwMCIsIDMzOiAiIzhiMDA4YiIsIDM0OiAiIzhiMDBjZCIsIDM1OiAiIzhiMDBmZiIsIDM2OiAiIzhiOGIwMCIsIDM3OiAiIzhiOGI4YiIsIDM4OiAiIzhiOGJjZCIsIDM5OiAiIzhiOGJmZiIsIDQwOiAiIzhiY2QwMCIsIDQxOiAiIzhiY2Q4YiIsIDQyOiAiIzhiY2RjZCIsIDQzOiAiIzhiY2RmZiIsIDQ0OiAiIzhiZmYwMCIsIDQ1OiAiIzhiZmY4YiIsIDQ2OiAiIzhiZmZjZCIsIDQ3OiAiIzhiZmZmZiIsIDQ4OiAiI2NkMDAwMCIsIDQ5OiAiI2NkMDA4YiIsIDUwOiAiI2NkMDBjZCIsIDUxOiAiI2NkMDBmZiIsIDUyOiAiI2NkOGIwMCIsIDUzOiAiI2NkOGI4YiIsIDU0OiAiI2NkOGJjZCIsIDU1OiAiI2NkOGJmZiIsIDU2OiAiI2NkY2QwMCIsIDU3OiAiI2NkY2Q4YiIsIDU4OiAiI2NkY2RjZCIsIDU5OiAiI2NkY2RmZiIsIDYwOiAiI2NkZmYwMCIsIDYxOiAiI2NkZmY4YiIsIDYyOiAiI2NkZmZjZCIsIDYzOiAiI2NkZmZmZiIsIDY0OiAiI2ZmMDAwMCJ9KQotICAgICAgY2FsbCBleHRlbmQoczpjdGVybV9jb2xvciwgezY1OiAiI2ZmMDA4YiIsIDY2OiAiI2ZmMDBjZCIsIDY3OiAiI2ZmMDBmZiIsIDY4OiAiI2ZmOGIwMCIsIDY5OiAiI2ZmOGI4YiIsIDcwOiAiI2ZmOGJjZCIsIDcxOiAiI2ZmOGJmZiIsIDcyOiAiI2ZmY2QwMCIsIDczOiAiI2ZmY2Q4YiIsIDc0OiAiI2ZmY2RjZCIsIDc1OiAiI2ZmY2RmZiIsIDc2OiAiI2ZmZmYwMCIsIDc3OiAiI2ZmZmY4YiIsIDc4OiAiI2ZmZmZjZCIsIDc5OiAiI2ZmZmZmZiIsIDgwOiAiIzJlMmUyZSIsIDgxOiAiIzVjNWM1YyIsIDgyOiAiIzczNzM3MyIsIDgzOiAiIzhiOGI4YiIsIDg0OiAiI2EyYTJhMiIsIDg1OiAiI2I5YjliOSIsIDg2OiAiI2QwZDBkMCIsIDg3OiAiI2U3ZTdlNyJ9KQorICAgICAgY2FsbCBleHRlbmQoczpjdGVybV9jb2xvciwgeworCSAgICBcICAgMTY6ICIjMDAwMDAwIiwgMTc6ICIjMDAwMDhiIiwgMTg6ICIjMDAwMGNkIiwgMTk6ICIjMDAwMGZmIiwKKwkgICAgXCAgIDIwOiAiIzAwOGIwMCIsIDIxOiAiIzAwOGI4YiIsIDIyOiAiIzAwOGJjZCIsIDIzOiAiIzAwOGJmZiIsCisJICAgIFwgICAyNDogIiMwMGNkMDAiLCAyNTogIiMwMGNkOGIiLCAyNjogIiMwMGNkY2QiLCAyNzogIiMwMGNkZmYiLAorCSAgICBcICAgMjg6ICIjMDBmZjAwIiwgMjk6ICIjMDBmZjhiIiwgMzA6ICIjMDBmZmNkIiwgMzE6ICIjMDBmZmZmIiwKKwkgICAgXCAgIDMyOiAiIzhiMDAwMCIsIDMzOiAiIzhiMDA4YiIsIDM0OiAiIzhiMDBjZCIsIDM1OiAiIzhiMDBmZiIsCisJICAgIFwgICAzNjogIiM4YjhiMDAiLCAzNzogIiM4YjhiOGIiLCAzODogIiM4YjhiY2QiLCAzOTogIiM4YjhiZmYiLAorCSAgICBcICAgNDA6ICIjOGJjZDAwIiwgNDE6ICIjOGJjZDhiIiwgNDI6ICIjOGJjZGNkIiwgNDM6ICIjOGJjZGZmIiwKKwkgICAgXCAgIDQ0OiAiIzhiZmYwMCIsIDQ1OiAiIzhiZmY4YiIsIDQ2OiAiIzhiZmZjZCIsIDQ3OiAiIzhiZmZmZiIsCisJICAgIFwgICA0ODogIiNjZDAwMDAiLCA0OTogIiNjZDAwOGIiLCA1MDogIiNjZDAwY2QiLCA1MTogIiNjZDAwZmYiLAorCSAgICBcICAgNTI6ICIjY2Q4YjAwIiwgNTM6ICIjY2Q4YjhiIiwgNTQ6ICIjY2Q4YmNkIiwgNTU6ICIjY2Q4YmZmIiwKKwkgICAgXCAgIDU2OiAiI2NkY2QwMCIsIDU3OiAiI2NkY2Q4YiIsIDU4OiAiI2NkY2RjZCIsIDU5OiAiI2NkY2RmZiIsCisJICAgIFwgICA2MDogIiNjZGZmMDAiLCA2MTogIiNjZGZmOGIiLCA2MjogIiNjZGZmY2QiLCA2MzogIiNjZGZmZmYiLAorCSAgICBcICAgNjQ6ICIjZmYwMDAwIgorCSAgICBcIH0pCisgICAgICBjYWxsIGV4dGVuZChzOmN0ZXJtX2NvbG9yLCB7CisJICAgIFwgICA2NTogIiNmZjAwOGIiLCA2NjogIiNmZjAwY2QiLCA2NzogIiNmZjAwZmYiLCA2ODogIiNmZjhiMDAiLAorCSAgICBcICAgNjk6ICIjZmY4YjhiIiwgNzA6ICIjZmY4YmNkIiwgNzE6ICIjZmY4YmZmIiwgNzI6ICIjZmZjZDAwIiwKKwkgICAgXCAgIDczOiAiI2ZmY2Q4YiIsIDc0OiAiI2ZmY2RjZCIsIDc1OiAiI2ZmY2RmZiIsIDc2OiAiI2ZmZmYwMCIsCisJICAgIFwgICA3NzogIiNmZmZmOGIiLCA3ODogIiNmZmZmY2QiLCA3OTogIiNmZmZmZmYiLCA4MDogIiMyZTJlMmUiLAorCSAgICBcICAgODE6ICIjNWM1YzVjIiwgODI6ICIjNzM3MzczIiwgODM6ICIjOGI4YjhiIiwgODQ6ICIjYTJhMmEyIiwKKwkgICAgXCAgIDg1OiAiI2I5YjliOSIsIDg2OiAiI2QwZDBkMCIsIDg3OiAiI2U3ZTdlNyIKKwkgICAgXCB9KQogICAgIGVsc2VpZiAmdF9DbyA9PSAyNTYKLSAgICAgIGNhbGwgZXh0ZW5kKHM6Y3Rlcm1fY29sb3IsIHsxNjogIiMwMDAwMDAiLCAxNzogIiMwMDAwNWYiLCAxODogIiMwMDAwODciLCAxOTogIiMwMDAwYWYiLCAyMDogIiMwMDAwZDciLCAyMTogIiMwMDAwZmYiLCAyMjogIiMwMDVmMDAiLCAyMzogIiMwMDVmNWYiLCAyNDogIiMwMDVmODciLCAyNTogIiMwMDVmYWYiLCAyNjogIiMwMDVmZDciLCAyNzogIiMwMDVmZmYiLCAyODogIiMwMDg3MDAiLCAyOTogIiMwMDg3NWYiLCAzMDogIiMwMDg3ODciLCAzMTogIiMwMDg3YWYiLCAzMjogIiMwMDg3ZDciLCAzMzogIiMwMDg3ZmYiLCAzNDogIiMwMGFmMDAiLCAzNTogIiMwMGFmNWYiLCAzNjogIiMwMGFmODciLCAzNzogIiMwMGFmYWYiLCAzODogIiMwMGFmZDciLCAzOTogIiMwMGFmZmYiLCA0MDogIiMwMGQ3MDAiLCA0MTogIiMwMGQ3NWYiLCA0MjogIiMwMGQ3ODciLCA0MzogIiMwMGQ3YWYiLCA0NDogIiMwMGQ3ZDciLCA0NTogIiMwMGQ3ZmYiLCA0NjogIiMwMGZmMDAiLCA0NzogIiMwMGZmNWYiLCA0ODogIiMwMGZmODciLCA0OTogIiMwMGZmYWYiLCA1MDogIiMwMGZmZDciLCA1MTogIiMwMGZmZmYiLCA1MjogIiM1ZjAwMDAiLCA1MzogIiM1ZjAwNWYiLCA1NDogIiM1ZjAwODciLCA1NTogIiM1ZjAwYWYiLCA1NjogIiM1ZjAwZDciLCA1NzogIiM1ZjAwZmYiLCA1ODogIiM1ZjVmMDAiLCA1OTogIiM1ZjVmNWYiLCA2MDogIiM1ZjVmODciLCA2MTogIiM1ZjVmYWYiLCA2MjogIiM1ZjVmZDciLCA2MzogIiM1ZjVmZmYiLCA2NDogIiM1Zjg3MDAifSkKLSAgICAgIGNhbGwgZXh0ZW5kKHM6Y3Rlcm1fY29sb3IsIHs2NTogIiM1Zjg3NWYiLCA2NjogIiM1Zjg3ODciLCA2NzogIiM1Zjg3YWYiLCA2ODogIiM1Zjg3ZDciLCA2OTogIiM1Zjg3ZmYiLCA3MDogIiM1ZmFmMDAiLCA3MTogIiM1ZmFmNWYiLCA3MjogIiM1ZmFmODciLCA3MzogIiM1ZmFmYWYiLCA3NDogIiM1ZmFmZDciLCA3NTogIiM1ZmFmZmYiLCA3NjogIiM1ZmQ3MDAiLCA3NzogIiM1ZmQ3NWYiLCA3ODogIiM1ZmQ3ODciLCA3OTogIiM1ZmQ3YWYiLCA4MDogIiM1ZmQ3ZDciLCA4MTogIiM1ZmQ3ZmYiLCA4MjogIiM1ZmZmMDAiLCA4MzogIiM1ZmZmNWYiLCA4NDogIiM1ZmZmODciLCA4NTogIiM1ZmZmYWYiLCA4NjogIiM1ZmZmZDciLCA4NzogIiM1ZmZmZmYiLCA4ODogIiM4NzAwMDAiLCA4OTogIiM4NzAwNWYiLCA5MDogIiM4NzAwODciLCA5MTogIiM4NzAwYWYiLCA5MjogIiM4NzAwZDciLCA5MzogIiM4NzAwZmYiLCA5NDogIiM4NzVmMDAiLCA5NTogIiM4NzVmNWYiLCA5NjogIiM4NzVmODciLCA5NzogIiM4NzVmYWYiLCA5ODogIiM4NzVmZDciLCA5OTogIiM4NzVmZmYiLCAxMDA6ICIjODc4NzAwIiwgMTAxOiAiIzg3ODc1ZiIsIDEwMjogIiM4Nzg3ODciLCAxMDM6ICIjODc4N2FmIiwgMTA0OiAiIzg3ODdkNyIsIDEwNTogIiM4Nzg3ZmYiLCAxMDY6ICIjODdhZjAwIiwgMTA3OiAiIzg3YWY1ZiIsIDEwODogIiM4N2FmODciLCAxMDk6ICIjODdhZmFmIiwgMTEwOiAiIzg3YWZkNyIsIDExMTogIiM4N2FmZmYiLCAxMTI6ICIjODdkNzAwIn0pCi0gICAgICBjYWxsIGV4dGVuZChzOmN0ZXJtX2NvbG9yLCB7MTEzOiAiIzg3ZDc1ZiIsIDExNDogIiM4N2Q3ODciLCAxMTU6ICIjODdkN2FmIiwgMTE2OiAiIzg3ZDdkNyIsIDExNzogIiM4N2Q3ZmYiLCAxMTg6ICIjODdmZjAwIiwgMTE5OiAiIzg3ZmY1ZiIsIDEyMDogIiM4N2ZmODciLCAxMjE6ICIjODdmZmFmIiwgMTIyOiAiIzg3ZmZkNyIsIDEyMzogIiM4N2ZmZmYiLCAxMjQ6ICIjYWYwMDAwIiwgMTI1OiAiI2FmMDA1ZiIsIDEyNjogIiNhZjAwODciLCAxMjc6ICIjYWYwMGFmIiwgMTI4OiAiI2FmMDBkNyIsIDEyOTogIiNhZjAwZmYiLCAxMzA6ICIjYWY1ZjAwIiwgMTMxOiAiI2FmNWY1ZiIsIDEzMjogIiNhZjVmODciLCAxMzM6ICIjYWY1ZmFmIiwgMTM0OiAiI2FmNWZkNyIsIDEzNTogIiNhZjVmZmYiLCAxMzY6ICIjYWY4NzAwIiwgMTM3OiAiI2FmODc1ZiIsIDEzODogIiNhZjg3ODciLCAxMzk6ICIjYWY4N2FmIiwgMTQwOiAiI2FmODdkNyIsIDE0MTogIiNhZjg3ZmYiLCAxNDI6ICIjYWZhZjAwIiwgMTQzOiAiI2FmYWY1ZiIsIDE0NDogIiNhZmFmODciLCAxNDU6ICIjYWZhZmFmIiwgMTQ2OiAiI2FmYWZkNyIsIDE0NzogIiNhZmFmZmYiLCAxNDg6ICIjYWZkNzAwIiwgMTQ5OiAiI2FmZDc1ZiIsIDE1MDogIiNhZmQ3ODciLCAxNTE6ICIjYWZkN2FmIiwgMTUyOiAiI2FmZDdkNyIsIDE1MzogIiNhZmQ3ZmYiLCAxNTQ6ICIjYWZmZjAwIiwgMTU1OiAiI2FmZmY1ZiIsIDE1NjogIiNhZmZmODciLCAxNTc6ICIjYWZmZmFmIiwgMTU4OiAiI2FmZmZkNyJ9KQotICAgICAgY2FsbCBleHRlbmQoczpjdGVybV9jb2xvciwgezE1OTogIiNhZmZmZmYiLCAxNjA6ICIjZDcwMDAwIiwgMTYxOiAiI2Q3MDA1ZiIsIDE2MjogIiNkNzAwODciLCAxNjM6ICIjZDcwMGFmIiwgMTY0OiAiI2Q3MDBkNyIsIDE2NTogIiNkNzAwZmYiLCAxNjY6ICIjZDc1ZjAwIiwgMTY3OiAiI2Q3NWY1ZiIsIDE2ODogIiNkNzVmODciLCAxNjk6ICIjZDc1ZmFmIiwgMTcwOiAiI2Q3NWZkNyIsIDE3MTogIiNkNzVmZmYiLCAxNzI6ICIjZDc4NzAwIiwgMTczOiAiI2Q3ODc1ZiIsIDE3NDogIiNkNzg3ODciLCAxNzU6ICIjZDc4N2FmIiwgMTc2OiAiI2Q3ODdkNyIsIDE3NzogIiNkNzg3ZmYiLCAxNzg6ICIjZDdhZjAwIiwgMTc5OiAiI2Q3YWY1ZiIsIDE4MDogIiNkN2FmODciLCAxODE6ICIjZDdhZmFmIiwgMTgyOiAiI2Q3YWZkNyIsIDE4MzogIiNkN2FmZmYiLCAxODQ6ICIjZDdkNzAwIiwgMTg1OiAiI2Q3ZDc1ZiIsIDE4NjogIiNkN2Q3ODciLCAxODc6ICIjZDdkN2FmIiwgMTg4OiAiI2Q3ZDdkNyIsIDE4OTogIiNkN2Q3ZmYiLCAxOTA6ICIjZDdmZjAwIiwgMTkxOiAiI2Q3ZmY1ZiIsIDE5MjogIiNkN2ZmODciLCAxOTM6ICIjZDdmZmFmIiwgMTk0OiAiI2Q3ZmZkNyIsIDE5NTogIiNkN2ZmZmYiLCAxOTY6ICIjZmYwMDAwIiwgMTk3OiAiI2ZmMDA1ZiIsIDE5ODogIiNmZjAwODciLCAxOTk6ICIjZmYwMGFmIiwgMjAwOiAiI2ZmMDBkNyIsIDIwMTogIiNmZjAwZmYiLCAyMDI6ICIjZmY1ZjAwIiwgMjAzOiAiI2ZmNWY1ZiIsIDIwNDogIiNmZjVmODcifSkKLSAgICAgIGNhbGwgZXh0ZW5kKHM6Y3Rlcm1fY29sb3IsIHsyMDU6ICIjZmY1ZmFmIiwgMjA2OiAiI2ZmNWZkNyIsIDIwNzogIiNmZjVmZmYiLCAyMDg6ICIjZmY4NzAwIiwgMjA5OiAiI2ZmODc1ZiIsIDIxMDogIiNmZjg3ODciLCAyMTE6ICIjZmY4N2FmIiwgMjEyOiAiI2ZmODdkNyIsIDIxMzogIiNmZjg3ZmYiLCAyMTQ6ICIjZmZhZjAwIiwgMjE1OiAiI2ZmYWY1ZiIsIDIxNjogIiNmZmFmODciLCAyMTc6ICIjZmZhZmFmIiwgMjE4OiAiI2ZmYWZkNyIsIDIxOTogIiNmZmFmZmYiLCAyMjA6ICIjZmZkNzAwIiwgMjIxOiAiI2ZmZDc1ZiIsIDIyMjogIiNmZmQ3ODciLCAyMjM6ICIjZmZkN2FmIiwgMjI0OiAiI2ZmZDdkNyIsIDIyNTogIiNmZmQ3ZmYiLCAyMjY6ICIjZmZmZjAwIiwgMjI3OiAiI2ZmZmY1ZiIsIDIyODogIiNmZmZmODciLCAyMjk6ICIjZmZmZmFmIiwgMjMwOiAiI2ZmZmZkNyIsIDIzMTogIiNmZmZmZmYiLCAyMzI6ICIjMDgwODA4IiwgMjMzOiAiIzEyMTIxMiIsIDIzNDogIiMxYzFjMWMiLCAyMzU6ICIjMjYyNjI2IiwgMjM2OiAiIzMwMzAzMCIsIDIzNzogIiMzYTNhM2EiLCAyMzg6ICIjNDQ0NDQ0IiwgMjM5OiAiIzRlNGU0ZSIsIDI0MDogIiM1ODU4NTgiLCAyNDE6ICIjNjI2MjYyIiwgMjQyOiAiIzZjNmM2YyIsIDI0MzogIiM3Njc2NzYiLCAyNDQ6ICIjODA4MDgwIiwgMjQ1OiAiIzhhOGE4YSIsIDI0NjogIiM5NDk0OTQiLCAyNDc6ICIjOWU5ZTllIiwgMjQ4OiAiI2E4YThhOCIsIDI0OTogIiNiMmIyYjIiLCAyNTA6ICIjYmNiY2JjIiwgMjUxOiAiI2M2YzZjNiIsIDI1MjogIiNkMGQwZDAiLCAyNTM6ICIjZGFkYWRhIiwgMjU0OiAiI2U0ZTRlNCIsIDI1NTogIiNlZWVlZWUifSkKKyAgICAgIGNhbGwgZXh0ZW5kKHM6Y3Rlcm1fY29sb3IsIHsKKwkgICAgXCAgIDE2OiAiIzAwMDAwMCIsIDE3OiAiIzAwMDA1ZiIsIDE4OiAiIzAwMDA4NyIsIDE5OiAiIzAwMDBhZiIsCisJICAgIFwgICAyMDogIiMwMDAwZDciLCAyMTogIiMwMDAwZmYiLCAyMjogIiMwMDVmMDAiLCAyMzogIiMwMDVmNWYiLAorCSAgICBcICAgMjQ6ICIjMDA1Zjg3IiwgMjU6ICIjMDA1ZmFmIiwgMjY6ICIjMDA1ZmQ3IiwgMjc6ICIjMDA1ZmZmIiwKKwkgICAgXCAgIDI4OiAiIzAwODcwMCIsIDI5OiAiIzAwODc1ZiIsIDMwOiAiIzAwODc4NyIsIDMxOiAiIzAwODdhZiIsCisJICAgIFwgICAzMjogIiMwMDg3ZDciLCAzMzogIiMwMDg3ZmYiLCAzNDogIiMwMGFmMDAiLCAzNTogIiMwMGFmNWYiLAorCSAgICBcICAgMzY6ICIjMDBhZjg3IiwgMzc6ICIjMDBhZmFmIiwgMzg6ICIjMDBhZmQ3IiwgMzk6ICIjMDBhZmZmIiwKKwkgICAgXCAgIDQwOiAiIzAwZDcwMCIsIDQxOiAiIzAwZDc1ZiIsIDQyOiAiIzAwZDc4NyIsIDQzOiAiIzAwZDdhZiIsCisJICAgIFwgICA0NDogIiMwMGQ3ZDciLCA0NTogIiMwMGQ3ZmYiLCA0NjogIiMwMGZmMDAiLCA0NzogIiMwMGZmNWYiLAorCSAgICBcICAgNDg6ICIjMDBmZjg3IiwgNDk6ICIjMDBmZmFmIiwgNTA6ICIjMDBmZmQ3IiwgNTE6ICIjMDBmZmZmIiwKKwkgICAgXCAgIDUyOiAiIzVmMDAwMCIsIDUzOiAiIzVmMDA1ZiIsIDU0OiAiIzVmMDA4NyIsIDU1OiAiIzVmMDBhZiIsCisJICAgIFwgICA1NjogIiM1ZjAwZDciLCA1NzogIiM1ZjAwZmYiLCA1ODogIiM1ZjVmMDAiLCA1OTogIiM1ZjVmNWYiLAorCSAgICBcICAgNjA6ICIjNWY1Zjg3IiwgNjE6ICIjNWY1ZmFmIiwgNjI6ICIjNWY1ZmQ3IiwgNjM6ICIjNWY1ZmZmIiwKKwkgICAgXCAgIDY0OiAiIzVmODcwMCIKKwkgICAgXCB9KQorICAgICAgY2FsbCBleHRlbmQoczpjdGVybV9jb2xvciwgeworCSAgICBcICAgNjU6ICIjNWY4NzVmIiwgNjY6ICIjNWY4Nzg3IiwgNjc6ICIjNWY4N2FmIiwgNjg6ICIjNWY4N2Q3IiwKKwkgICAgXCAgIDY5OiAiIzVmODdmZiIsIDcwOiAiIzVmYWYwMCIsIDcxOiAiIzVmYWY1ZiIsIDcyOiAiIzVmYWY4NyIsCisJICAgIFwgICA3MzogIiM1ZmFmYWYiLCA3NDogIiM1ZmFmZDciLCA3NTogIiM1ZmFmZmYiLCA3NjogIiM1ZmQ3MDAiLAorCSAgICBcICAgNzc6ICIjNWZkNzVmIiwgNzg6ICIjNWZkNzg3IiwgNzk6ICIjNWZkN2FmIiwgODA6ICIjNWZkN2Q3IiwKKwkgICAgXCAgIDgxOiAiIzVmZDdmZiIsIDgyOiAiIzVmZmYwMCIsIDgzOiAiIzVmZmY1ZiIsIDg0OiAiIzVmZmY4NyIsCisJICAgIFwgICA4NTogIiM1ZmZmYWYiLCA4NjogIiM1ZmZmZDciLCA4NzogIiM1ZmZmZmYiLCA4ODogIiM4NzAwMDAiLAorCSAgICBcICAgODk6ICIjODcwMDVmIiwgOTA6ICIjODcwMDg3IiwgOTE6ICIjODcwMGFmIiwgOTI6ICIjODcwMGQ3IiwKKwkgICAgXCAgIDkzOiAiIzg3MDBmZiIsIDk0OiAiIzg3NWYwMCIsIDk1OiAiIzg3NWY1ZiIsIDk2OiAiIzg3NWY4NyIsCisJICAgIFwgICA5NzogIiM4NzVmYWYiLCA5ODogIiM4NzVmZDciLCA5OTogIiM4NzVmZmYiLCAxMDA6ICIjODc4NzAwIiwKKwkgICAgXCAgIDEwMTogIiM4Nzg3NWYiLCAxMDI6ICIjODc4Nzg3IiwgMTAzOiAiIzg3ODdhZiIsIDEwNDogIiM4Nzg3ZDciLAorCSAgICBcICAgMTA1OiAiIzg3ODdmZiIsIDEwNjogIiM4N2FmMDAiLCAxMDc6ICIjODdhZjVmIiwgMTA4OiAiIzg3YWY4NyIsCisJICAgIFwgICAxMDk6ICIjODdhZmFmIiwgMTEwOiAiIzg3YWZkNyIsIDExMTogIiM4N2FmZmYiLCAxMTI6ICIjODdkNzAwIgorCSAgICBcIH0pCisgICAgICBjYWxsIGV4dGVuZChzOmN0ZXJtX2NvbG9yLCB7CisJICAgIFwgICAxMTM6ICIjODdkNzVmIiwgMTE0OiAiIzg3ZDc4NyIsIDExNTogIiM4N2Q3YWYiLCAxMTY6ICIjODdkN2Q3IiwKKwkgICAgXCAgIDExNzogIiM4N2Q3ZmYiLCAxMTg6ICIjODdmZjAwIiwgMTE5OiAiIzg3ZmY1ZiIsIDEyMDogIiM4N2ZmODciLAorCSAgICBcICAgMTIxOiAiIzg3ZmZhZiIsIDEyMjogIiM4N2ZmZDciLCAxMjM6ICIjODdmZmZmIiwgMTI0OiAiI2FmMDAwMCIsCisJICAgIFwgICAxMjU6ICIjYWYwMDVmIiwgMTI2OiAiI2FmMDA4NyIsIDEyNzogIiNhZjAwYWYiLCAxMjg6ICIjYWYwMGQ3IiwKKwkgICAgXCAgIDEyOTogIiNhZjAwZmYiLCAxMzA6ICIjYWY1ZjAwIiwgMTMxOiAiI2FmNWY1ZiIsIDEzMjogIiNhZjVmODciLAorCSAgICBcICAgMTMzOiAiI2FmNWZhZiIsIDEzNDogIiNhZjVmZDciLCAxMzU6ICIjYWY1ZmZmIiwgMTM2OiAiI2FmODcwMCIsCisJICAgIFwgICAxMzc6ICIjYWY4NzVmIiwgMTM4OiAiI2FmODc4NyIsIDEzOTogIiNhZjg3YWYiLCAxNDA6ICIjYWY4N2Q3IiwKKwkgICAgXCAgIDE0MTogIiNhZjg3ZmYiLCAxNDI6ICIjYWZhZjAwIiwgMTQzOiAiI2FmYWY1ZiIsIDE0NDogIiNhZmFmODciLAorCSAgICBcICAgMTQ1OiAiI2FmYWZhZiIsIDE0NjogIiNhZmFmZDciLCAxNDc6ICIjYWZhZmZmIiwgMTQ4OiAiI2FmZDcwMCIsCisJICAgIFwgICAxNDk6ICIjYWZkNzVmIiwgMTUwOiAiI2FmZDc4NyIsIDE1MTogIiNhZmQ3YWYiLCAxNTI6ICIjYWZkN2Q3IiwKKwkgICAgXCAgIDE1MzogIiNhZmQ3ZmYiLCAxNTQ6ICIjYWZmZjAwIiwgMTU1OiAiI2FmZmY1ZiIsIDE1NjogIiNhZmZmODciLAorCSAgICBcICAgMTU3OiAiI2FmZmZhZiIsIDE1ODogIiNhZmZmZDciCisJICAgIFwgfSkKKyAgICAgIGNhbGwgZXh0ZW5kKHM6Y3Rlcm1fY29sb3IsIHsKKwkgICAgXCAgIDE1OTogIiNhZmZmZmYiLCAxNjA6ICIjZDcwMDAwIiwgMTYxOiAiI2Q3MDA1ZiIsIDE2MjogIiNkNzAwODciLAorCSAgICBcICAgMTYzOiAiI2Q3MDBhZiIsIDE2NDogIiNkNzAwZDciLCAxNjU6ICIjZDcwMGZmIiwgMTY2OiAiI2Q3NWYwMCIsCisJICAgIFwgICAxNjc6ICIjZDc1ZjVmIiwgMTY4OiAiI2Q3NWY4NyIsIDE2OTogIiNkNzVmYWYiLCAxNzA6ICIjZDc1ZmQ3IiwKKwkgICAgXCAgIDE3MTogIiNkNzVmZmYiLCAxNzI6ICIjZDc4NzAwIiwgMTczOiAiI2Q3ODc1ZiIsIDE3NDogIiNkNzg3ODciLAorCSAgICBcICAgMTc1OiAiI2Q3ODdhZiIsIDE3NjogIiNkNzg3ZDciLCAxNzc6ICIjZDc4N2ZmIiwgMTc4OiAiI2Q3YWYwMCIsCisJICAgIFwgICAxNzk6ICIjZDdhZjVmIiwgMTgwOiAiI2Q3YWY4NyIsIDE4MTogIiNkN2FmYWYiLCAxODI6ICIjZDdhZmQ3IiwKKwkgICAgXCAgIDE4MzogIiNkN2FmZmYiLCAxODQ6ICIjZDdkNzAwIiwgMTg1OiAiI2Q3ZDc1ZiIsIDE4NjogIiNkN2Q3ODciLAorCSAgICBcICAgMTg3OiAiI2Q3ZDdhZiIsIDE4ODogIiNkN2Q3ZDciLCAxODk6ICIjZDdkN2ZmIiwgMTkwOiAiI2Q3ZmYwMCIsCisJICAgIFwgICAxOTE6ICIjZDdmZjVmIiwgMTkyOiAiI2Q3ZmY4NyIsIDE5MzogIiNkN2ZmYWYiLCAxOTQ6ICIjZDdmZmQ3IiwKKwkgICAgXCAgIDE5NTogIiNkN2ZmZmYiLCAxOTY6ICIjZmYwMDAwIiwgMTk3OiAiI2ZmMDA1ZiIsIDE5ODogIiNmZjAwODciLAorCSAgICBcICAgMTk5OiAiI2ZmMDBhZiIsIDIwMDogIiNmZjAwZDciLCAyMDE6ICIjZmYwMGZmIiwgMjAyOiAiI2ZmNWYwMCIsCisJICAgIFwgICAyMDM6ICIjZmY1ZjVmIiwgMjA0OiAiI2ZmNWY4NyIKKwkgICAgXCB9KQorICAgICAgY2FsbCBleHRlbmQoczpjdGVybV9jb2xvciwgeworCSAgICBcICAgMjA1OiAiI2ZmNWZhZiIsIDIwNjogIiNmZjVmZDciLCAyMDc6ICIjZmY1ZmZmIiwgMjA4OiAiI2ZmODcwMCIsCisJICAgIFwgICAyMDk6ICIjZmY4NzVmIiwgMjEwOiAiI2ZmODc4NyIsIDIxMTogIiNmZjg3YWYiLCAyMTI6ICIjZmY4N2Q3IiwKKwkgICAgXCAgIDIxMzogIiNmZjg3ZmYiLCAyMTQ6ICIjZmZhZjAwIiwgMjE1OiAiI2ZmYWY1ZiIsIDIxNjogIiNmZmFmODciLAorCSAgICBcICAgMjE3OiAiI2ZmYWZhZiIsIDIxODogIiNmZmFmZDciLCAyMTk6ICIjZmZhZmZmIiwgMjIwOiAiI2ZmZDcwMCIsCisJICAgIFwgICAyMjE6ICIjZmZkNzVmIiwgMjIyOiAiI2ZmZDc4NyIsIDIyMzogIiNmZmQ3YWYiLCAyMjQ6ICIjZmZkN2Q3IiwKKwkgICAgXCAgIDIyNTogIiNmZmQ3ZmYiLCAyMjY6ICIjZmZmZjAwIiwgMjI3OiAiI2ZmZmY1ZiIsIDIyODogIiNmZmZmODciLAorCSAgICBcICAgMjI5OiAiI2ZmZmZhZiIsIDIzMDogIiNmZmZmZDciLCAyMzE6ICIjZmZmZmZmIiwgMjMyOiAiIzA4MDgwOCIsCisJICAgIFwgICAyMzM6ICIjMTIxMjEyIiwgMjM0OiAiIzFjMWMxYyIsIDIzNTogIiMyNjI2MjYiLCAyMzY6ICIjMzAzMDMwIiwKKwkgICAgXCAgIDIzNzogIiMzYTNhM2EiLCAyMzg6ICIjNDQ0NDQ0IiwgMjM5OiAiIzRlNGU0ZSIsIDI0MDogIiM1ODU4NTgiLAorCSAgICBcICAgMjQxOiAiIzYyNjI2MiIsIDI0MjogIiM2YzZjNmMiLCAyNDM6ICIjNzY3Njc2IiwgMjQ0OiAiIzgwODA4MCIsCisJICAgIFwgICAyNDU6ICIjOGE4YThhIiwgMjQ2OiAiIzk0OTQ5NCIsIDI0NzogIiM5ZTllOWUiLCAyNDg6ICIjYThhOGE4IiwKKwkgICAgXCAgIDI0OTogIiNiMmIyYjIiLCAyNTA6ICIjYmNiY2JjIiwgMjUxOiAiI2M2YzZjNiIsIDI1MjogIiNkMGQwZDAiLAorCSAgICBcICAgMjUzOiAiI2RhZGFkYSIsIDI1NDogIiNlNGU0ZTQiLCAyNTU6ICIjZWVlZWVlIgorCSAgICBcIH0pCiAgICAgZW5kaWYKICAgZW5kaWYKIGVuZGlmCkBAIC04MCw2ICsyMDIsMTYgQEAKICAgZW5kZnVuCiBlbmRpZgogCisiIEZpbmQgb3V0IHRoZSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNvbG9yIGZvciB1c2UgbGF0ZXIKK2xldCBzOmZnYyA9IHM6SHRtbENvbG9yKHN5bklEYXR0cihobElEKCJOb3JtYWwiKSwgImZnIyIsIHM6d2hhdHRlcm0pKQorbGV0IHM6YmdjID0gczpIdG1sQ29sb3Ioc3luSURhdHRyKGhsSUQoIk5vcm1hbCIpLCAiYmcjIiwgczp3aGF0dGVybSkpCitpZiBzOmZnYyA9PSAiIgorICBsZXQgczpmZ2MgPSAoICZiYWNrZ3JvdW5kID09ICJkYXJrIiA/ICIjZmZmZmZmIiA6ICIjMDAwMDAwIiApCitlbmRpZgoraWYgczpiZ2MgPT0gIiIKKyAgbGV0IHM6YmdjID0gKCAmYmFja2dyb3VuZCA9PSAiZGFyayIgPyAiIzAwMDAwMCIgOiAiI2ZmZmZmZiIgKQorZW5kaWYKKwogaWYgIXM6c2V0dGluZ3MudXNlX2NzcwogICAiIFJldHVybiBvcGVuaW5nIEhUTUwgdGFnIGZvciBnaXZlbiBoaWdobGlnaHQgaWQKICAgZnVuY3Rpb24hIHM6SHRtbE9wZW5pbmcoaWQpCkBAIC0xMjAsMzAgKzI1MiwxOTMgQEAKICAgZW5kZnVuCiBlbmRpZgogCisiIFVzZSBhIGRpZmZlcmVudCBmdW5jdGlvbiBmb3IgZm9ybWF0dGluZyBiYXNlZCBvbiB1c2VyIG9wdGlvbnMuIFRoaXMgd2F5IHdlCisiIGNhbiBhdm9pZCBhIGxvdCBvZiBsb2dpYyBkdXJpbmcgdGhlIGFjdHVhbCBleGVjdXRpb24uCisiCisiIEJ1aWxkIHRoZSBmdW5jdGlvbiBsaW5lIGJ5IGxpbmUgY29udGFpbmluZyBvbmx5IHdoYXQgaXMgbmVlZGVkIGZvciB0aGUgb3B0aW9ucworIiBpbiB1c2UgZm9yIG1heGltdW0gY29kZSBzaGFyaW5nIHdpdGggbWluaW1hbCBicmFuY2ggbG9naWMgZm9yIGdyZWF0ZXIgc3BlZWQuCisiCisiIE5vdGUsICdleGVjJyBjb21tYW5kcyBkbyBub3QgcmVjb2duaXplIGxpbmUgY29udGludWF0aW9ucywgc28gbXVzdCBjb25jYXRlbmF0ZQorIiBsaW5lcyByYXRoZXIgdGhhbiBjb250aW51ZSB0aGVtLgoraWYgczpzZXR0aW5ncy51c2VfY3NzCisgICIgc2F2ZSBDU1MgdG8gYSBsaXN0IG9mIHJ1bGVzIHRvIGFkZCB0byB0aGUgb3V0cHV0IGF0IHRoZSBlbmQgb2YgcHJvY2Vzc2luZworCisgICIgZmlyc3QsIGdldCB0aGUgc3R5bGUgbmFtZXMgd2UgbmVlZAorICBsZXQgd3JhcHBlcmZ1bmNfbGluZXMgPSBbCisJXCAnZnVuY3Rpb24hIHM6QnVpbGRTdHlsZVdyYXBwZXIoc3R5bGVfaWQsIGRpZmZfc3R5bGVfaWQsIHRleHQsIG1ha2VfdW5zZWxlY3RhYmxlLCB1bmZvcm1hdHRlZCknLAorCVwgJycsCisJXCAnICBsZXQgbDpzdHlsZV9uYW1lID0gc3luSURhdHRyKGE6c3R5bGVfaWQsICJuYW1lIiwgczp3aGF0dGVybSknCisJXCBdCisgIGlmICZkaWZmCisgICAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsKKwlcICcgIGxldCBsOmRpZmZfc3R5bGVfbmFtZSA9IHN5bklEYXR0cihhOmRpZmZfc3R5bGVfaWQsICJuYW1lIiwgczp3aGF0dGVybSknXQorCisgICIgQWRkIG5vcm1hbCBncm91cHMgYW5kIGRpZmYgZ3JvdXBzIHRvIHNlcGFyYXRlIGxpc3RzIHNvIHdlIGNhbiBvcmRlciB0aGVtIHRvCisgICIgYWxsb3cgZGlmZiBoaWdobGlnaHQgdG8gb3ZlcnJpZGUgbm9ybWFsIGhpZ2hsaWdodAorCisgICIgaWYgcHJpbWFyeSBzdHlsZSBJUyBhIGRpZmYgc3R5bGUsIGdyYWIgaXQgZnJvbSB0aGUgZGlmZiBjYWNoZSBpbnN0ZWFkCisgICIgKGFsd2F5cyBzdWNjZWVkcyBiZWNhdXNlIHdlIHByZS1wb3B1bGF0ZSBpdCkKKyAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsKKwlcICcnLAorCVwgJyAgaWYgYTpzdHlsZV9pZCA9PSBzOkRJRkZfRF9JRCB8fCBhOnN0eWxlX2lkID09IHM6RElGRl9BX0lEIHx8Jy4KKwlcICcgICAgICAgICAgYTpzdHlsZV9pZCA9PSBzOkRJRkZfQ19JRCB8fCBhOnN0eWxlX2lkID09IHM6RElGRl9UX0lEJywKKwlcICcgICAgbGV0IGw6c2F2ZWRfc3R5bGUgPSBnZXQoczpkaWZmc3R5bGVsaXN0LGE6c3R5bGVfaWQpJywKKwlcICcgIGVsc2UnCisJXCBdCisgIGVuZGlmCisKKyAgIiBnZXQgcHJpbWFyeSBzdHlsZSBpbmZvIGZyb20gY2FjaGUgb3IgYnVpbGQgaXQgb24gdGhlIGZseSBpZiBub3QgZm91bmQKKyAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsKKwlcICcgICAgbGV0IGw6c2F2ZWRfc3R5bGUgPSBnZXQoczpzdHlsZWxpc3QsYTpzdHlsZV9pZCknLAorCVwgJyAgICBpZiB0eXBlKGw6c2F2ZWRfc3R5bGUpID09IHR5cGUoMCknLAorCVwgJyAgICAgIHVubGV0IGw6c2F2ZWRfc3R5bGUnLAorCVwgJyAgICAgIGxldCBsOnNhdmVkX3N0eWxlID0gczpDU1MxKGE6c3R5bGVfaWQpJywKKwlcICcgICAgICBpZiBsOnNhdmVkX3N0eWxlICE9ICIiJywKKwlcICcgICAgICAgIGxldCBsOnNhdmVkX3N0eWxlID0gIi4iIC4gbDpzdHlsZV9uYW1lIC4gIiB7ICIgLiBsOnNhdmVkX3N0eWxlIC4gIn0iJywKKwlcICcgICAgICBlbmRpZicsCisJXCAnICAgICAgbGV0IHM6c3R5bGVsaXN0W2E6c3R5bGVfaWRdPSBsOnNhdmVkX3N0eWxlJywKKwlcICcgICAgZW5kaWYnCisJXCBdCisgIGlmICZkaWZmCisgICAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsgJyAgZW5kaWYnIF0KKyAgZW5kaWYKKworICAiIEJ1aWxkIHRoZSB3cmFwcGVyIHRhZ3MgYXJvdW5kIHRoZSB0ZXh0LiBJdCB0dXJucyBvdXQgdGhhdCBjYWNoaW5nIHRoZXNlCisgICIgZ2l2ZXMgcHJldHR5IG11Y2ggemVybyBwZXJmb3JtYW5jZSBnYWluIGFuZCBhZGRzIGEgbG90IG9mIGxvZ2ljLgorCisgIGxldCB3cmFwcGVyZnVuY19saW5lcyArPSBbCisJXCAnJywKKwlcICcgIGlmIGw6c2F2ZWRfc3R5bGUgPT0gIiInCisJXCBdCisgIGlmICZkaWZmCisgICAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsKKwlcICcgICAgaWYgYTpkaWZmX3N0eWxlX2lkIDw9IDAnCisJXCBdCisgIGVuZGlmCisgICIgbm8gc3Vycm91bmRpbmdzIGlmIG5laXRoZXIgcHJpbWFyeSBub3IgZGlmZiBzdHlsZSBoYXMgYW55IGluZm8KKyAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsKKwlcICcgICAgICAgcmV0dXJuIGE6dGV4dCcKKwlcIF0KKyAgaWYgJmRpZmYKKyAgICAiIG5vIHByaW1hcnkgc3R5bGUsIGJ1dCBkaWZmIHN0eWxlCisgICAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsKKwlcICcgICAgIGVsc2UnLAorCVwgJyAgICAgICByZXR1cm4gIjxzcGFuIGNsYXNzPVwiIiAubDpkaWZmX3N0eWxlX25hbWUgLiAiXCI+Ii5hOnRleHQuIjwvc3Bhbj4iJywKKwlcICcgICAgIGVuZGlmJworCVwgXQorICBlbmRpZgorICAiIG9wZW4gdGFnIGZvciBub24tZW1wdHkgcHJpbWFyeSBzdHlsZQorICBsZXQgd3JhcHBlcmZ1bmNfbGluZXMgKz0gWworCVwgJyAgZWxzZSddCisgICIgbm9uLWVtcHR5IHByaW1hcnkgc3R5bGUuIGhhbmRsZSBlaXRoZXIgZW1wdHkgb3Igbm9uLWVtcHR5IGRpZmYgc3R5bGUuCisgICIKKyAgIiBzZXBhcmF0ZSB0aGUgdHdvIGNsYXNzZXMgYnkgYSBzcGFjZSB0byBhcHBseSB0aGVtIGJvdGggaWYgdGhlcmUgaXMgYSBkaWZmCisgICIgc3R5bGUgbmFtZSwgdW5sZXNzIHRoZSBwcmltYXJ5IHN0eWxlIGlzIGVtcHR5LCB0aGVuIGp1c3QgdXNlIHRoZSBkaWZmIHN0eWxlCisgICIgbmFtZQorICBsZXQgZGlmZnN0eWxlID0KKwkgIFwgKCZkaWZmID8gJyhhOmRpZmZfc3R5bGVfaWQgPD0gMCA/ICIiIDogIiAiLiBsOmRpZmZfc3R5bGVfbmFtZSkgLicKKwkgIFwgICAgICAgIDogIiIpCisgIGlmIHM6c2V0dGluZ3MucHJldmVudF9jb3B5ID09ICIiCisgICAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsKKwkgIFwgJyAgICByZXR1cm4gIjxzcGFuIGNsYXNzPVwiIiAuIGw6c3R5bGVfbmFtZSAuJy5kaWZmc3R5bGUuJyJcIj4iLmE6dGV4dC4iPC9zcGFuPiInCisJICBcIF0KKyAgZWxzZQorCisgICAgIgorICAgICIgV3JhcCB0aGUgPGlucHV0PiBpbiBhIDxzcGFuPiB0byBhbGxvdyBmaXhpbmcgdGhlIHN0dXBpZCBidWcgaW4gc29tZSBmb250cworICAgICIgd2hpY2ggY2F1c2UgYnJvd3NlcnMgdG8gZGlzcGxheSBhIDFweCBnYXAgYmV0d2VlbiBsaW5lcyB3aGVuIHRoZXNlCisgICAgIiA8aW5wdXQ+cyBoYXZlIGEgYmFja2dyb3VuZCBjb2xvciAobWF5YmUgbm90IHJlYWxseSBhIGJ1ZywgdGhpcyBpc24ndAorICAgICIgd2VsbC1kZWZpbmVkKQorICAgICIKKyAgICAiIHVzZSBzdHJ3aWR0aCwgYmVjYXVzZSB3ZSBjYXJlIG9ubHkgYWJvdXQgaG93IG1hbnkgY2hhcmFjdGVyIGJveGVzIGFyZQorICAgICIgbmVlZGVkIHRvIHNpemUgdGhlIGlucHV0LCB3ZSBkb24ndCBjYXJlIGhvdyBtYW55IGNoYXJhY3RlcnMgKGluY2x1ZGluZworICAgICIgc2VwYXJhdGVseSBjb3VudGVkIGNvbXBvc2luZyBjaGFycywgZnJvbSBzdHJjaGFycygpKSBvciBieXRlcyAoZnJvbQorICAgICIgbGVuKCkpdGhlIHN0cmluZyBjb250YWlucy4gc3RyZGlzcGxheXdpZHRoKCkgaXMgbm90IG5lZWRlZCBiZWNhdXNlIG5vbmUgb2YKKyAgICAiIHRoZSB1bnNlbGVjdGFibGUgZ3JvdXBzIGNhbiBjb250YWluIHRhYiBjaGFyYWN0ZXJzIChmb2xkIGNvbHVtbiwgZm9sZAorICAgICIgdGV4dCwgbGluZSBudW1iZXIpLgorICAgICIKKyAgICAiIE5vdGUsIGlmIG1heGxlbmd0aCBwcm9wZXJ0eSBuZWVkcyB0byBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLCBpdCB3aWxsIG5lZWQKKyAgICAiIHRvIHVzZSBzdHJjaGFycygpLCBiZWNhdXNlIEhUTUwgc3BlY2lmaWVzIHRoYXQgdGhlIG1heGxlbmd0aCBwYXJhbWV0ZXIKKyAgICAiIHVzZXMgdGhlIG51bWJlciBvZiB1bmlxdWUgY29kZXBvaW50cyBmb3IgaXRzIGxpbWl0LgorICAgIGxldCB3cmFwcGVyZnVuY19saW5lcyArPSBbCisJICBcICcgICAgaWYgYTptYWtlX3Vuc2VsZWN0YWJsZScsCisJICBcICcgICAgICByZXR1cm4gIjxzcGFuIGNsYXNzPVwiIiAuIGw6c3R5bGVfbmFtZSAuJy5kaWZmc3R5bGUuJyJcIj4nLgorCSAgXCAgICAgICAgICAgICAgICAnPGlucHV0Jy5zOnVuc2VsSW5wdXRUeXBlLicgY2xhc3M9XCIiIC4gbDpzdHlsZV9uYW1lIC4nLmRpZmZzdHlsZS4nIlwiJy4KKwkgIFwgICAgICAgICAgICAgICAgICcgdmFsdWU9XCIiLnN1YnN0aXR1dGUoYTp1bmZvcm1hdHRlZCwnJ1xzXCskJycsIiIsIiIpLiJcIicuCisJICBcICAgICAgICAgICAgICAgICAnIG9uc2VsZWN0PScndGhpcy5ibHVyKCk7IHJldHVybiBmYWxzZTsnJycuCisJICBcICAgICAgICAgICAgICAgICAnIG9ubW91c2Vkb3duPScndGhpcy5ibHVyKCk7IHJldHVybiBmYWxzZTsnJycuCisJICBcICAgICAgICAgICAgICAgICAnIG9uY2xpY2s9Jyd0aGlzLmJsdXIoKTsgcmV0dXJuIGZhbHNlOycnJy4KKwkgIFwgICAgICAgICAgICAgICAgICcgcmVhZG9ubHk9JydyZWFkb25seScnJy4KKwkgIFwgICAgICAgICAgICAgICAgICcgc2l6ZT1cIiIuc3Ryd2lkdGgoYTp1bmZvcm1hdHRlZCkuIlwiJy4KKwkgIFwgICAgICAgICAgICAgICAgIChzOnNldHRpbmdzLnVzZV94aHRtbCA/ICcvJyA6ICcnKS4nPjwvc3Bhbj4iJywKKwkgIFwgJyAgICBlbHNlJywKKwkgIFwgJyAgICAgIHJldHVybiAiPHNwYW4gY2xhc3M9XCIiIC4gbDpzdHlsZV9uYW1lIC4nLiBkaWZmc3R5bGUgLiciXCI+Ii5hOnRleHQuIjwvc3Bhbj4iJworCSAgXCBdCisgIGVuZGlmCisgICIgY2xvc2Ugb2ZmIHRhZyBmb3Igbm9uLWVtcHR5IHByaW1hcnkgc3R5bGUKKyAgaWYgczpzZXR0aW5ncy5wcmV2ZW50X2NvcHkgPT0gIiIKKyAgICBsZXQgd3JhcHBlcmZ1bmNfbGluZXNbLTFdIC49CisJICBcICcgICAgICAgICAgICAgICAgICAgICAiXCI+Ii5hOnRleHQuIjwvc3Bhbj4iJworICBlbHNlCisgICAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzWy0xXSAuPQorCSAgXCAnICAgICAgICAgICAgICAgICAgICAgIlwiPiIuYTp0ZXh0LiI8L3NwYW4+IicKKyAgZW5kaWYKKyAgbGV0IHdyYXBwZXJmdW5jX2xpbmVzICs9IFsKKwlcICcgIGVuZGlmJywKKwlcICdlbmRmdW4nCisJXCBdCitlbHNlCisgICIgTm9uLUNTUyBtZXRob2QganVzdCBuZWVkcyB0aGUgd3JhcHBlci4KKyAgIgorICAiIEZ1bmN0aW9ucyB1c2VkIHRvIGdldCBvcGVuaW5nL2Nsb3NpbmcgYXV0b21hdGljYWxseSByZXR1cm4gbnVsbCBzdHJpbmdzIGlmCisgICIgbm8gc3R5bGVzIGV4aXN0LgorICBpZiAmZGlmZgorICAgIGxldCB3cmFwcGVyZnVuY19saW5lcyA9IFsKKwkgIFwgJ2Z1bmN0aW9uISBzOkJ1aWxkU3R5bGVXcmFwcGVyKHN0eWxlX2lkLCBkaWZmX3N0eWxlX2lkLCB0ZXh0LCB1bnVzZWRhcmcsIHVudXNlZGFyZzIpJywKKwkgIFwgJyAgcmV0dXJuIHM6SHRtbE9wZW5pbmcoYTpzdHlsZV9pZCkuKGE6ZGlmZl9zdHlsZV9pZCA8PSAwID8gIiIgOicuCisJICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzOkh0bWxPcGVuaW5nKGE6ZGlmZl9zdHlsZV9pZCkpLmE6dGV4dC4nLgorCSAgXCAgICcoYTpkaWZmX3N0eWxlX2lkIDw9IDAgPyAiIiA6IHM6SHRtbENsb3NpbmcoYTpkaWZmX3N0eWxlX2lkKSkuczpIdG1sQ2xvc2luZyhhOnN0eWxlX2lkKScsCisJICBcICdlbmRmdW4nCisJICBcIF0KKyAgZWxzZQorICAgIGxldCB3cmFwcGVyZnVuY19saW5lcyA9IFsKKwkgIFwgJ2Z1bmN0aW9uISBzOkJ1aWxkU3R5bGVXcmFwcGVyKHN0eWxlX2lkLCBkaWZmX3N0eWxlX2lkLCB0ZXh0LCB1bnVzZWRhcmcsIHVudXNlZGFyZzIpJywKKwkgIFwgJyAgcmV0dXJuIHM6SHRtbE9wZW5pbmcoYTpzdHlsZV9pZCkuYTp0ZXh0LnM6SHRtbENsb3NpbmcoYTpzdHlsZV9pZCknLAorCSAgXCAnZW5kZnVuJworCSAgXCBdCisgIGVuZGlmCitlbmRpZgorCisiIGNyZWF0ZSB0aGUgZnVuY3Rpb24gd2UgYnVpbHQgbGluZSBieSBsaW5lIGFib3ZlCitleGVjIGpvaW4od3JhcHBlcmZ1bmNfbGluZXMsICJcbiIpCisKK2xldCBzOmRpZmZfbW9kZSA9ICZkaWZmCisKICIgUmV0dXJuIEhUTUwgdmFsaWQgY2hhcmFjdGVycyBlbmNsb3NlZCBpbiBhIHNwYW4gb2YgY2xhc3Mgc3R5bGVfbmFtZSB3aXRoCiAiIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgZXhwYW5kZWQgYW5kIGRvdWJsZSBzcGFjZXMgcmVwbGFjZWQgYXMgbmVjZXNzYXJ5LgotZnVuY3Rpb24hIHM6SHRtbEZvcm1hdCh0ZXh0LCBzdHlsZV9uYW1lLCBkaWZmX3N0eWxlX25hbWUpCisiCisiIFRPRE86IGVsaW1pbmF0ZSB1bm5lZWRlZCBsb2dpYyBsaWtlIGRvbmUgZm9yIEJ1aWxkU3R5bGVXcmFwcGVyCitmdW5jdGlvbiEgczpIdG1sRm9ybWF0KHRleHQsIHN0eWxlX2lkLCBkaWZmX3N0eWxlX2lkLCBtYWtlX3Vuc2VsZWN0YWJsZSkKICAgIiBSZXBsYWNlIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMKLSAgbGV0IGZvcm1hdHRlZCA9IHN0cnRyYW5zKGE6dGV4dCkKKyAgbGV0IHVuZm9ybWF0dGVkID0gc3RydHJhbnMoYTp0ZXh0KQogCi0gICIgc2VwYXJhdGUgdGhlIHR3byBjbGFzc2VzIGJ5IGEgc3BhY2UgdG8gYXBwbHkgdGhlbSBib3RoIGlmIHRoZXJlIGlzIGEgZGlmZgotICAiIHN0eWxlIG5hbWUKLSAgbGV0IGw6c3R5bGVfbmFtZSA9IGE6c3R5bGVfbmFtZSAuIChhOmRpZmZfc3R5bGVfbmFtZSA9PSAnJyA/ICcnIDogJyAnKSAuIGE6ZGlmZl9zdHlsZV9uYW1lCisgIGxldCBmb3JtYXR0ZWQgPSB1bmZvcm1hdHRlZAogCiAgICIgUmVwbGFjZSB0aGUgcmVzZXJ2ZWQgaHRtbCBjaGFyYWN0ZXJzCiAgIGxldCBmb3JtYXR0ZWQgPSBzdWJzdGl0dXRlKGZvcm1hdHRlZCwgJyYnLCAnXCZhbXA7JywgICdnJykKICAgbGV0IGZvcm1hdHRlZCA9IHN1YnN0aXR1dGUoZm9ybWF0dGVkLCAnPCcsICdcJmx0OycsICAgJ2cnKQogICBsZXQgZm9ybWF0dGVkID0gc3Vic3RpdHV0ZShmb3JtYXR0ZWQsICc+JywgJ1wmZ3Q7JywgICAnZycpCiAgIGxldCBmb3JtYXR0ZWQgPSBzdWJzdGl0dXRlKGZvcm1hdHRlZCwgJyInLCAnXCZxdW90OycsICdnJykKLSAgIiBUT0RPOiBVc2UgJmFwb3M7IGZvciAiJyI/CisgICIgJmFwb3M7IGlzIG5vdCB2YWxpZCBpbiBIVE1MIGJ1dCBpdCBpcyBpbiBYSFRNTCwgc28ganVzdCB1c2UgdGhlIG51bWVyaWMKKyAgIiByZWZlcmVuY2UgZm9yIGl0IGluc3RlYWQuIE5lZWRlZCBiZWNhdXNlIGl0IGNvdWxkIGFwcGVhciBpbiBxdW90ZXMKKyAgIiBlc3BlY2lhbGx5IGlmIHVuc2VsZWN0YWJsZSByZWdpb25zIGlzIHR1cm5lZCBvbi4KKyAgbGV0IGZvcm1hdHRlZCA9IHN1YnN0aXR1dGUoZm9ybWF0dGVkLCAnIicsICdcJiMwMDM5OycsICdnJykKIAogICAiIFJlcGxhY2UgYSAiZm9ybSBmZWVkIiBjaGFyYWN0ZXIgd2l0aCBIVE1MIHRvIGRvIGEgcGFnZSBicmVhaworICAiIFRPRE86IG5lZWQgdG8gcHJldmVudCB0aGlzIGluIHVuc2VsZWN0YWJsZSBhcmVhcz8gUHJvYmFibHkgaXQgc2hvdWxkIG5ldmVyCisgICIgQkUgaW4gYW4gdW5zZWxlY3RhYmxlIGFyZWEuLi4KICAgbGV0IGZvcm1hdHRlZCA9IHN1YnN0aXR1dGUoZm9ybWF0dGVkLCAiXHgwYyIsICc8aHIgY2xhc3M9IlBBR0UtQlJFQUsiPicsICdnJykKIAotICAiIE1hbmdsZSBtb2RlbGluZXMgc28gVmltIGRvZXNuJ3QgdHJ5IHRvIHVzZSBIVE1MIHRleHQgYXMgYSBtb2RlbGluZSBpZgotICAiIGVkaXRpbmcgdGhpcyBmaWxlIGluIHRoZSBmdXR1cmUKLSAgbGV0IGZvcm1hdHRlZCA9IHN1YnN0aXR1dGUoZm9ybWF0dGVkLCAnXHYoXHMrJSh2aW0/fGV4KSk6JywgJ1wxXCYjMDA1ODsnLCAnZycpCi0KICAgIiBSZXBsYWNlIGRvdWJsZSBzcGFjZXMsIGxlYWRpbmcgc3BhY2VzLCBhbmQgdHJhaWxpbmcgc3BhY2VzIGlmIG5lZWRlZAogICBpZiAnICcgIT0gczpIdG1sU3BhY2UKICAgICBsZXQgZm9ybWF0dGVkID0gc3Vic3RpdHV0ZShmb3JtYXR0ZWQsICcgICcsIHM6SHRtbFNwYWNlIC4gczpIdG1sU3BhY2UsICdnJykKQEAgLTE1MSwzMiArNDQ2LDg2IEBACiAgICAgbGV0IGZvcm1hdHRlZCA9IHN1YnN0aXR1dGUoZm9ybWF0dGVkLCAnIFwrJCcsIHM6SHRtbFNwYWNlLCAnZycpCiAgIGVuZGlmCiAKLSAgIiBFbmNsb3NlIGluIGEgc3BhbiBvZiBjbGFzcyBzdHlsZV9uYW1lCi0gIGxldCBmb3JtYXR0ZWQgPSAnPHNwYW4gY2xhc3M9IicgLiBsOnN0eWxlX25hbWUgLiAnIj4nIC4gZm9ybWF0dGVkIC4gJzwvc3Bhbj4nCi0KLSAgIiBBZGQgdGhlIGNsYXNzIHRvIGNsYXNzIGxpc3QgaWYgaXQncyBub3QgdGhlcmUgeWV0LgotICAiIEFkZCBub3JtYWwgZ3JvdXBzIHRvIHRoZSBiZWdpbm5pbmcgc28gZGlmZiBncm91cHMgY2FuIG92ZXJyaWRlIHRoZW0uCi0gIGxldCBzOmlkID0gaGxJRChhOnN0eWxlX25hbWUpCi0gIGlmIGluZGV4KHM6aWRsaXN0LCBzOmlkICkgPT0gLTEKLSAgICBpZiBhOnN0eWxlX25hbWUgPX4gJ0RpZmZcJShBZGRcfENoYW5nZVx8RGVsZXRlXHxUZXh0XCknCi0gICAgICBjYWxsIGFkZChzOmlkbGlzdCwgczppZCkKLSAgICBlbHNlCi0gICAgICBjYWxsIGluc2VydChzOmlkbGlzdCwgczppZCkKLSAgICBlbmRpZgotICBlbmRpZgotICAKLSAgIiBBZGQgdGhlIGRpZmYgaGlnaGxpZ2h0IGNsYXNzIHRvIGNsYXNzIGxpc3QgaWYgdXNlZCBhbmQgaXQncyBub3QgdGhlcmUgeWV0LgotICAiIEFkZCBkaWZmIGdyb3VwcyB0byB0aGUgZW5kIHNvIHRoZXkgb3ZlcnJpZGUgdGhlIG90aGVyIGhpZ2hsaWdodGluZy4KLSAgaWYgYTpkaWZmX3N0eWxlX25hbWUgIT0gIiIKLSAgICBsZXQgczpkaWZmX2lkID0gaGxJRChhOmRpZmZfc3R5bGVfbmFtZSkKLSAgICBpZiBpbmRleChzOmlkbGlzdCwgczpkaWZmX2lkKSA9PSAtMQotICAgICAgY2FsbCBhZGQoczppZGxpc3QsIHM6ZGlmZl9pZCkKLSAgICBlbmRpZgotICBlbmRpZgotCi0gIHJldHVybiBmb3JtYXR0ZWQKKyAgIiBFbmNsb3NlIGluIHRoZSBjb3JyZWN0IGZvcm1hdAorICByZXR1cm4gczpCdWlsZFN0eWxlV3JhcHBlcihhOnN0eWxlX2lkLCBhOmRpZmZfc3R5bGVfaWQsIGZvcm1hdHRlZCwgYTptYWtlX3Vuc2VsZWN0YWJsZSwgdW5mb3JtYXR0ZWQpCiBlbmRmdW4KIAorIiBzZXQgdXAgZnVuY3Rpb25zIHRvIGNhbGwgSHRtbEZvcm1hdCBpbiBjZXJ0YWluIHdheXMgYmFzZWQgb24gd2hldGhlciB0aGUKKyIgZWxlbWVudCBpcyBzdXBwb3NlZCB0byBiZSB1bnNlbGVjdGFibGUgb3Igbm90CitpZiBzOnNldHRpbmdzLnByZXZlbnRfY29weSA9fiMgJ24nCisgIGZ1bmN0aW9uISBzOkh0bWxGb3JtYXRfbih0ZXh0LCBzdHlsZV9pZCwgZGlmZl9zdHlsZV9pZCkKKyAgICByZXR1cm4gczpIdG1sRm9ybWF0KGE6dGV4dCwgYTpzdHlsZV9pZCwgYTpkaWZmX3N0eWxlX2lkLCAxKQorICBlbmRmdW4KK2Vsc2UKKyAgZnVuY3Rpb24hIHM6SHRtbEZvcm1hdF9uKHRleHQsIHN0eWxlX2lkLCBkaWZmX3N0eWxlX2lkKQorICAgIHJldHVybiBzOkh0bWxGb3JtYXQoYTp0ZXh0LCBhOnN0eWxlX2lkLCBhOmRpZmZfc3R5bGVfaWQsIDApCisgIGVuZGZ1bgorZW5kaWYKK2lmIHM6c2V0dGluZ3MucHJldmVudF9jb3B5ID1+IyAnZCcKKyAgZnVuY3Rpb24hIHM6SHRtbEZvcm1hdF9kKHRleHQsIHN0eWxlX2lkLCBkaWZmX3N0eWxlX2lkKQorICAgIHJldHVybiBzOkh0bWxGb3JtYXQoYTp0ZXh0LCBhOnN0eWxlX2lkLCBhOmRpZmZfc3R5bGVfaWQsIDEpCisgIGVuZGZ1bgorZWxzZQorICBmdW5jdGlvbiEgczpIdG1sRm9ybWF0X2QodGV4dCwgc3R5bGVfaWQsIGRpZmZfc3R5bGVfaWQpCisgICAgcmV0dXJuIHM6SHRtbEZvcm1hdChhOnRleHQsIGE6c3R5bGVfaWQsIGE6ZGlmZl9zdHlsZV9pZCwgMCkKKyAgZW5kZnVuCitlbmRpZgoraWYgczpzZXR0aW5ncy5wcmV2ZW50X2NvcHkgPX4jICdmJworICAiIE5vdGUgdGhlIDxpbnB1dD4gZWxlbWVudHMgZm9yIGZpbGwgc3BhY2VzIHdpbGwgaGF2ZSBhIHNpbmdsZSBzcGFjZSBmb3IKKyAgIiBjb250ZW50LCB0byBhbGxvdyBhY3RpdmUgY3Vyc29yIENTUyBzZWxlY3Rpb24gdG8gd29yay4KKyAgIgorICAiIFdyYXAgdGhlIHdob2xlIHRoaW5nIGluIGEgc3BhbiBmb3IgdGhlIDFweCBwYWRkaW5nIHdvcmthcm91bmQgZm9yIGdhcHMuCisgIGZ1bmN0aW9uISBzOkZvbGRDb2x1bW5fYnVpbGQoY2hhciwgbGVuLCBudW1maWxsLCBjaGFyMiwgY2xhc3MsIGNsaWNrKQorICAgIGxldCBsOmlucHV0X29wZW4gPSAiPGlucHV0IHJlYWRvbmx5PSdyZWFkb25seSciLnM6dW5zZWxJbnB1dFR5cGUuCisJICBcICIgb25zZWxlY3Q9J3RoaXMuYmx1cigpOyByZXR1cm4gZmFsc2U7JyIuCisJICBcICIgb25tb3VzZWRvd249J3RoaXMuYmx1cigpOyAiLmE6Y2xpY2suIiByZXR1cm4gZmFsc2U7JyIuCisJICBcICIgb25jbGljaz0ncmV0dXJuIGZhbHNlOycgc2l6ZT0nIi4KKwkgIFwgc3RyaW5nKGE6bGVuICsgKGVtcHR5KGE6Y2hhcjIpID8gMCA6IDEpICsgYTpudW1maWxsKSAuCisJICBcICInICIKKyAgICBsZXQgbDpjb21tb25fYXR0cnMgPSAiY2xhc3M9J0ZvbGRDb2x1bW4nIHZhbHVlPSciCisgICAgbGV0IGw6aW5wdXRfY2xvc2UgPSAoczpzZXR0aW5ncy51c2VfeGh0bWwgPyAiJyAvPiIgOiAiJz4iKQorICAgIHJldHVybiAiPHNwYW4gY2xhc3M9JyIuYTpjbGFzcy4iJz4iLgorCSAgXCBsOmlucHV0X29wZW4ubDpjb21tb25fYXR0cnMucmVwZWF0KGE6Y2hhciwgYTpsZW4pLgorCSAgXCAoIWVtcHR5KGE6Y2hhcjIpID8gYTpjaGFyMiA6ICIiKS4KKwkgIFwgbDppbnB1dF9jbG9zZSAuICI8L3NwYW4+IgorICBlbmRmdW4KKyAgZnVuY3Rpb24hIHM6Rm9sZENvbHVtbl9maWxsKCkKKyAgICByZXR1cm4gczpGb2xkQ29sdW1uX2J1aWxkKCcnLCBzOmZvbGRjb2x1bW4sIDAsICcnLCAnRm9sZENvbHVtbicsICcnKQorICBlbmRmdW4KK2Vsc2UKKyAgIiBGb3Igbm9ybWFsIGZvbGQgY29sdW1ucywgc2ltcGx5IHNwYWNlLXBhZCB0byB0aGUgZGVzaXJlZCB3aWR0aCAobm90ZSB0aGF0CisgICIgdGhlIEZvbGRDb2x1bW4gZGVmaW5pdGlvbiBpbmNsdWRlcyBhIHdoaXRlc3BhY2U6cHJlIHJ1bGUpCisgIGZ1bmN0aW9uISBzOkZvbGRDb2x1bW5fYnVpbGQoY2hhciwgbGVuLCBudW1maWxsLCBjaGFyMiwgY2xhc3MsIGNsaWNrKQorICAgIHJldHVybiAiPGEgaHJlZj0nIycgY2xhc3M9JyIuYTpjbGFzcy4iJyBvbmNsaWNrPSciLmE6Y2xpY2suIic+Ii4KKwkgIFwgcmVwZWF0KGE6Y2hhciwgYTpsZW4pLmE6Y2hhcjIucmVwZWF0KCcgJywgYTpudW1maWxsKS4KKwkgIFwgIjwvYT4iCisgIGVuZGZ1bgorICBmdW5jdGlvbiEgczpGb2xkQ29sdW1uX2ZpbGwoKQorICAgIHJldHVybiBzOkh0bWxGb3JtYXQocmVwZWF0KCcgJywgczpmb2xkY29sdW1uKSwgczpGT0xEX0NfSUQsIDAsIDApCisgIGVuZGZ1bgorZW5kaWYKK2lmIHM6c2V0dGluZ3MucHJldmVudF9jb3B5ID1+IyAndCcKKyAgIiBwdXQgYW4gZXh0cmEgZW1wdHkgc3BhbiBhdCB0aGUgZW5kIGZvciBkeW5hbWljIGZvbGRzLCBzbyB0aGUgbGluZWJyZWFrIGNhbgorICAiIGJlIHN1cnJvdW5kZWQuIE90aGVyd2lzZSBkbyBpdCBhcyBub3JtYWwuCisgICIKKyAgIiBUT0RPOiBpc24ndCB0aGVyZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgdGhhbiBwbGFjaW5nIGl0IGhlcmUgYW5kIHVzaW5nIGEKKyAgIiBzdWJzdGl0dXRlIGxhdGVyPworICBpZiBzOnNldHRpbmdzLmR5bmFtaWNfZm9sZHMKKyAgICBmdW5jdGlvbiEgczpIdG1sRm9ybWF0X3QodGV4dCwgc3R5bGVfaWQsIGRpZmZfc3R5bGVfaWQpCisgICAgICByZXR1cm4gczpIdG1sRm9ybWF0KGE6dGV4dCwgYTpzdHlsZV9pZCwgYTpkaWZmX3N0eWxlX2lkLCAxKSAuCisJICAgIFwgczpIdG1sRm9ybWF0KCIiLCBhOnN0eWxlX2lkLCAwLCAwKQorICAgIGVuZGZ1bgorICBlbHNlCisgICAgZnVuY3Rpb24hIHM6SHRtbEZvcm1hdF90KHRleHQsIHN0eWxlX2lkLCBkaWZmX3N0eWxlX2lkKQorICAgICAgcmV0dXJuIHM6SHRtbEZvcm1hdChhOnRleHQsIGE6c3R5bGVfaWQsIGE6ZGlmZl9zdHlsZV9pZCwgMSkKKyAgICBlbmRmdW4KKyAgZW5kaWYKK2Vsc2UKKyAgZnVuY3Rpb24hIHM6SHRtbEZvcm1hdF90KHRleHQsIHN0eWxlX2lkLCBkaWZmX3N0eWxlX2lkKQorICAgIHJldHVybiBzOkh0bWxGb3JtYXQoYTp0ZXh0LCBhOnN0eWxlX2lkLCBhOmRpZmZfc3R5bGVfaWQsIDApCisgIGVuZGZ1bgorZW5kaWYKKwogIiBSZXR1cm4gQ1NTIHN0eWxlIGRlc2NyaWJpbmcgZ2l2ZW4gaGlnaGxpZ2h0IGlkIChjYW4gYmUgZW1wdHkpCiBmdW5jdGlvbiEgczpDU1MxKGlkKQogICBsZXQgYSA9ICIiCkBAIC0xOTAsNyArNTM5LDE1IEBACiAgICAgbGV0IHggPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoYTppZCwgImZnIyIsIHM6d2hhdHRlcm0pKQogICAgIGlmIHggIT0gIiIgfCBsZXQgYSA9IGEgLiAiY29sb3I6ICIgLiB4IC4gIjsgIiB8IGVuZGlmCiAgICAgbGV0IHggPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoYTppZCwgImJnIyIsIHM6d2hhdHRlcm0pKQotICAgIGlmIHggIT0gIiIgfCBsZXQgYSA9IGEgLiAiYmFja2dyb3VuZC1jb2xvcjogIiAuIHggLiAiOyAiIHwgZW5kaWYKKyAgICBpZiB4ICE9ICIiCisgICAgICBsZXQgYSA9IGEgLiAiYmFja2dyb3VuZC1jb2xvcjogIiAuIHggLiAiOyAiCisgICAgICAiIHN0dXBpZCBoYWNrIGJlY2F1c2UgYWxtb3N0IGV2ZXJ5IGJyb3dzZXIgc2VlbXMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgZm9udAorICAgICAgIiB3aGljaCBzaG93cyAxcHggZ2FwcyBiZXR3ZWVuIGxpbmVzIHdoaWNoIGhhdmUgYmFja2dyb3VuZAorICAgICAgbGV0IGEgPSBhIC4gInBhZGRpbmctYm90dG9tOiAxcHg7ICIKKyAgICBlbHNlaWYgKGE6aWQgPT0gczpGT0xERURfSUQgfHwgYTppZCA9PSBzOkxJTkVOUl9JRCB8fCBhOmlkID09IHM6Rk9MRF9DX0lEKSAmJiAhZW1wdHkoczpzZXR0aW5ncy5wcmV2ZW50X2NvcHkpCisgICAgICAiIGlucHV0IGVsZW1lbnRzIGRlZmF1bHQgdG8gYSBkaWZmZXJlbnQgY29sb3IgdGhhbiB0aGUgcmVzdCBvZiB0aGUgcGFnZQorICAgICAgbGV0IGEgPSBhIC4gImJhY2tncm91bmQtY29sb3I6ICIgLiBzOmJnYyAuICI7ICIKKyAgICBlbmRpZgogICBlbmRpZgogICBpZiBzeW5JRGF0dHIoYTppZCwgImJvbGQiKSB8IGxldCBhID0gYSAuICJmb250LXdlaWdodDogYm9sZDsgIiB8IGVuZGlmCiAgIGlmIHN5bklEYXR0cihhOmlkLCAiaXRhbGljIikgfCBsZXQgYSA9IGEgLiAiZm9udC1zdHlsZTogaXRhbGljOyAiIHwgZW5kaWYKQEAgLTMzNiw3ICs2OTMsMTIgQEAKIGNhbGwgYWRkKHM6bGluZXMsICc8bWV0YSBuYW1lPSJzeW50YXgiIGNvbnRlbnQ9IicuczpjdXJyZW50X3N5bnRheC4nIicuczp0YWdfY2xvc2UpCiBjYWxsIGFkZChzOmxpbmVzLCAnPG1ldGEgbmFtZT0ic2V0dGluZ3MiIGNvbnRlbnQ9IicuCiAgICAgICBcIGpvaW4oZmlsdGVyKGtleXMoczpzZXR0aW5ncyksJ3M6c2V0dGluZ3Nbdjp2YWxdJyksJywnKS4KKyAgICAgIFwgJyxwcmV2ZW50X2NvcHk9Jy5zOnNldHRpbmdzLnByZXZlbnRfY29weS4KICAgICAgIFwgJyInLnM6dGFnX2Nsb3NlKQorY2FsbCBhZGQoczpsaW5lcywgJzxtZXRhIG5hbWU9ImNvbG9yc2NoZW1lIiBjb250ZW50PSInLgorICAgICAgXCAoZXhpc3RzKCdnOmNvbG9yc19uYW1lJykKKyAgICAgIFwgPyBnOmNvbG9yc19uYW1lCisgICAgICBcIDogJ25vbmUnKS4gJyInLnM6dGFnX2Nsb3NlKQogCiBpZiBzOnNldHRpbmdzLnVzZV9jc3MKICAgaWYgczpzZXR0aW5ncy5keW5hbWljX2ZvbGRzCkBAIC00MTIsMTIgKzc3NCwxOCBAQAogICBlbmRpZgogZW5kaWYKIAorIiBpbnNlcnQgc2NyaXB0IHRhZyBpZiBhbnkgamF2YXNjcmlwdCBpcyBuZWVkZWQKK2lmIHM6c2V0dGluZ3MuZHluYW1pY19mb2xkcyB8fCBzOnNldHRpbmdzLnByZXZlbnRfY29weSAhPSAiIgorICBjYWxsIGV4dGVuZChzOmxpbmVzLCBbCisJXCAiIiwKKwlcICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IiwKKwlcIHM6c2V0dGluZ3MudXNlX3hodG1sID8gJy8vPCFbQ0RBVEFbJyA6ICI8IS0tIl0pCitlbmRpZgorCiAiIGluc2VydCBqYXZhc2NyaXB0IHRvIHRvZ2dsZSBmb2xkcyBvcGVuIGFuZCBjbG9zZWQKIGlmIHM6c2V0dGluZ3MuZHluYW1pY19mb2xkcwogICBjYWxsIGV4dGVuZChzOmxpbmVzLCBbCiAJXCAiIiwKLQlcICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IiwKLQlcIHM6c2V0dGluZ3MudXNlX3hodG1sID8gJy8vPCFbQ0RBVEFbJyA6ICI8IS0tIiwKIAlcICJmdW5jdGlvbiB0b2dnbGVGb2xkKG9iaklEKSIsCiAJXCAieyIsCiAJXCAiICB2YXIgZm9sZDsiLApAQCAtNDMwLDIyICs3OTgsMTE0IEBACiAJXCAiICB7IiwKIAlcICIgICAgZm9sZC5jbGFzc05hbWUgPSAnY2xvc2VkLWZvbGQnOyIsCiAJXCAiICB9IiwKLQlcICJ9IiwKLQlcIHM6c2V0dGluZ3MudXNlX3hodG1sID8gJy8vXV0+JyA6ICctLT4nLAotCVwgIjwvc2NyaXB0PiIKKwlcICJ9IgogCVxdKQogZW5kaWYKIAotaWYgczpzZXR0aW5ncy5ub19wcmUKLSAgY2FsbCBleHRlbmQoczpsaW5lcywgWyI8L2hlYWQ+IiwgIjxib2R5PiJdKQorIiBTbWFsbCB0ZXh0IGNvbHVtbnMgbGlrZSB0aGUgZm9sZGNvbHVtbiBhbmQgbGluZSBudW1iZXIgY29sdW1uIG5lZWQgYSB3ZWlyZAorIiBoYWNrIHRvIHdvcmsgYXJvdW5kIFdlYmtpdCdzIGFuZCAoaW4gdmVyc2lvbnMgcHJpb3IgdG8gOSkgSUUncyBsYWNrIG9mIHN1cHBvcnQKKyIgZm9yIHRoZSAnY2gnIHVuaXQgd2l0aG91dCBtZXNzaW5nIHVwIE9wZXJhLCB3aGljaCBhbHNvIGRvZXNuJ3Qgc3VwcG9ydCBpdCBidXQKKyIgd29ya3MgYW55d2F5LgorIgorIiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdpdGhvdXQgdGhlICdjaCcgdW5pdCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpZnkgYQorIiBzaXplIG9mIGFuIDxpbnB1dD4gaW4gdGVybXMgb2YgY2hhcmFjdGVyIHdpZHRocy4gT25seSBPcGVyYSBzZWVtcyB0byBkbyB0aGUKKyIgInNlbnNpYmxlIiB0aGluZyBhbmQgbWFrZSB0aGUgPGlucHV0PiBzaXplZCB0byBmaXQgZXhhY3RseSBhcyBtYW55IGNoYXJhY3RlcnMKKyIgYXMgc3BlY2lmaWVkIGJ5IGl0cyAic2l6ZSIgYXR0cmlidXRlLCBidXQgdGhlIHNwZWMgYWN0dWFsbHkgc2F5cyAiYXQgbGVhc3QKKyIgd2lkZSBlbm91Z2ggdG8gZml0ICdzaXplJyBjaGFyYWN0ZXJzIiwgc28gdGhlIG90aGVyIGJyb3dzZXJzIGFyZSB0ZWNobmljYWxseQorIiBjb3JyZWN0IGFzIHdlbGwuCisiCisiIEFueXdheSwgdGhpcyBsZWFkcyB0byB0d28gZGlmZmN1bHRpZXM6CisiICAgMS4gVGhlIGZvbGRjb2x1bW4gaXMgbWFkZSB1cCBvZiBtdWx0aXBsZSBlbGVtZW50cyBzaWRlLWJ5LXNpZGUgd2l0aAorIiAgICAgIGRpZmZlcmVudCBzaXplcywgZWFjaCBvZiB3aGljaCBoYXMgdGhlaXIgb3duIGV4dHJhIHBhZGRpbmcgYWRkZWQuIFRodXMsIGEKKyIgICAgICBjb2x1bW4gbWFkZSB1cCBvZiBvbmUgaXRlbSBvZiBzaXplIDEgYW5kIGFub3RoZXIgb2Ygc2l6ZSAyIHdvdWxkIG5vdAorIiAgICAgIG5lY2Vzc2FyaWx5IGJlIGVxdWFsIGluIHNpemUgdG8gYW5vdGhlciBsaW5lJ3MgZm9sZGNvbHVtbiB3aXRoIGEgc2luZ2xlCisiICAgICAgaXRlbSBvZiBzaXplIDMuCisiICAgMi4gVGhlIGV4dHJhIHBhZGRpbmcgYWRkZWQgdG8gdGhlIDxpbnB1dD4gZWxlbWVudHMgYWRkcyB1cCB0byBtYWtlIHRoZQorIiAgICAgIGZvbGRjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGNvbHVtbiB0b28gd2lkZSwgZXNwZWNpYWxseSBpbiBXZWJraXQKKyIgICAgICBicm93c2Vycy4KKyIKKyIgU28sIHRoZSBmdWxsIHdvcmthcm91bmQgaXM6CisiICAgMS4gRGVmaW5lIGEgZGVmYXVsdCBzaXplIGluIGVtLCBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlCisiICAgICAgaW5wdXQgZWxlbWVudCwgaW4gY2FzZSBqYXZhc2NyaXB0IGlzIGRpc2FibGVkIGFuZCB0aGUgYnJvd3NlciBkb2VzIG5vdAorIiAgICAgIHN1cHBvcnQgdGhlICdjaCcgdW5pdC4gVW5mb3J0dW5hdGVseSB0aGlzIG1ha2VzIE9wZXJhIG5vIGxvbmdlciB3b3JrCisiICAgICAgcHJvcGVybHkgd2l0aG91dCBqYXZhc2NyaXB0LiAxZW0gcGVyIGNoYXJhY3RlciBpcyBtdWNoIHRvbyB3aWRlIGJ1dCBpdAorIiAgICAgIGxvb2tzIGJldHRlciBpbiB3ZWJraXQgYnJvd3NlcnMgdGhhbiB1bmFsaWduZWQgY29sdW1ucy4KKyIgICAyLiBJbnNlcnQgdGhlIGZvbGxvd2luZyBqYXZhc2NyaXB0IHRvIHJ1biBhdCBwYWdlIGxvYWQsIHdoaWNoIGNoZWNrcyBmb3IgdGhlCisiICAgICAgd2lkdGggb2YgYSBzaW5nbGUgY2hhcmFjdGVyIChpbiBhbiBleHRyYW5lb3VzIHBhZ2UgZWxlbWVudCBpbnNlcnRlZAorIiAgICAgIGJlZm9yZSB0aGUgcGFnZSB0aXRsZSwgYW5kIHNldCB0byBoaWRkZW4pIGFuZCBjb21wYXJlcyBpdCB0byB0aGUgd2lkdGggb2YKKyIgICAgICBhbm90aGVyIGV4dHJhIDxpbnB1dD4gZWxlbWVudCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4gSWYgdGhlIHdpZHRoCisiICAgICAgbWF0Y2hlcywgdGhlIHNjcmlwdCBkb2VzIG5vdGhpbmcgbW9yZSwgYnV0IGlmIG5vdCwgaXQgd2lsbCBmaWd1cmUgb3V0IHRoZQorIiAgICAgIGZyYWN0aW9uIG9mIGFuIGVtIHVuaXQgd2hpY2ggd291bGQgY29ycmVzcG9uZCB3aXRoIGEgY2ggdW5pdCBpZiB0aGVyZQorIiAgICAgIHdlcmUgb25lLCBhbmQgc2V0IHRoZSBjb250YWluaW5nIGVsZW1lbnQgKDxwcmU+IG9yIDxkaXY+KSB0byBhIGNsYXNzIHdpdGgKKyIgICAgICBwcmUtZGVmaW5lZCBydWxlcyB3aGljaCBpcyBjbG9zZXN0IHRvIHRoYXQgZnJhY3Rpb24gb2YgYW4gZW0uIFJ1bGVzIGFyZQorIiAgICAgIGRlZmluZWQgZnJvbSAwLjA1IGVtIHRvIDFlbSBwZXIgY2guCitpZiAhZW1wdHkoczpzZXR0aW5ncy5wcmV2ZW50X2NvcHkpCisgIGNhbGwgZXh0ZW5kKHM6bGluZXMsIFsKKwlcICcnLAorCVwgJy8qIHNpbXVsYXRlIGEgImNoIiB1bml0IGJ5IGFza2luZyB0aGUgYnJvd3NlciBob3cgYmlnIGEgemVybyBjaGFyYWN0ZXIgaXMgKi8nLAorCVwgJ2Z1bmN0aW9uIEZpeENoYXJXaWR0aCgpIHsnLAorCVwgJyAgLyogZ2V0IHRoZSBoaWRkZW4gZWxlbWVudCB3aGljaCBnaXZlcyB0aGUgd2lkdGggb2YgYSBzaW5nbGUgY2hhcmFjdGVyICovJywKKwlcICcgIHZhciBnb29kV2lkdGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib25lQ2hhcldpZHRoIikuY2xpZW50V2lkdGg7JywKKwlcICcgIC8qIGdldCBhbGwgaW5wdXQgZWxlbWVudHMsIHdlJydsbCBmaWx0ZXIgb24gY2xhc3MgbGF0ZXIgKi8nLAorCVwgJyAgdmFyIGlucHV0VGFncyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOycsCisJXCAnICB2YXIgcmF0aW8gPSA1OycsCisJXCAnICB2YXIgaW5wdXRXaWR0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvbmVJbnB1dFdpZHRoIikuY2xpZW50V2lkdGg7JywKKwlcICcgIHZhciBlbVdpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9uZUVtV2lkdGgiKS5jbGllbnRXaWR0aDsnLAorCVwgJyAgaWYgKGlucHV0V2lkdGggPiBnb29kV2lkdGgpIHsnLAorCVwgJyAgICB3aGlsZSAocmF0aW8gPCAxMDAqZ29vZFdpZHRoL2VtV2lkdGggJiYgcmF0aW8gPCAxMDApIHsnLAorCVwgJyAgICByYXRpbyArPSA1OycsCisJXCAnICB9JywKKwlcICcgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aW1Db2RlRWxlbWVudCIpLmNsYXNzTmFtZSA9ICJlbSIrcmF0aW87JywKKwlcICcgIH0nLAorCVwgJ30nCisJXCBdKQorZW5kaWYKKworIiBpbnNlcnQgc2NyaXB0IGNsb3NpbmcgdGFnIGlmIGFueSBqYXZhc2NyaXB0IGlzIG5lZWRlZAoraWYgczpzZXR0aW5ncy5keW5hbWljX2ZvbGRzIHx8IHM6c2V0dGluZ3MucHJldmVudF9jb3B5ICE9ICIiCisgIGNhbGwgZXh0ZW5kKHM6bGluZXMsIFsKKwlcICcnLAorCVwgczpzZXR0aW5ncy51c2VfeGh0bWwgPyAnLy9dXT4nIDogJy0tPicsCisJXCAiPC9zY3JpcHQ+IgorCVwgXSkKK2VuZGlmCisKK2NhbGwgZXh0ZW5kKHM6bGluZXMsIFsiPC9oZWFkPiJdKQoraWYgIWVtcHR5KHM6c2V0dGluZ3MucHJldmVudF9jb3B5KQorICBjYWxsIGV4dGVuZChzOmxpbmVzLAorCVwgWyI8Ym9keSBvbmxvYWQ9J0ZpeENoYXJXaWR0aCgpOyc+IiwKKwlcICI8IS0tIGhpZGRlbiBkaXZzIHVzZWQgYnkgamF2YXNjcmlwdCB0byBnZXQgdGhlIHdpZHRoIG9mIGEgY2hhciAtLT4iLAorCVwgIjxkaXYgaWQ9J29uZUNoYXJXaWR0aCc+MDwvZGl2PiIsCisJXCAiPGRpdiBpZD0nb25lSW5wdXRXaWR0aCc+PGlucHV0IHNpemU9JzEnIHZhbHVlPScwJyIuczp0YWdfY2xvc2UuIjwvZGl2PiIsCisJXCAiPGRpdiBpZD0nb25lRW1XaWR0aCcgc3R5bGU9J3dpZHRoOiAxZW07Jz48L2Rpdj4iCisJXCBdKQogZWxzZQotICBjYWxsIGV4dGVuZChzOmxpbmVzLCBbIjwvaGVhZD4iLCAiPGJvZHk+IiwgIjxwcmU+Il0pCisgIGNhbGwgZXh0ZW5kKHM6bGluZXMsIFsiPGJvZHk+Il0pCitlbmRpZgoraWYgczpzZXR0aW5ncy5ub19wcmUKKyAgIiBpZiB3ZSdyZSBub3QgdXNpbmcgQ1NTIHdlIHVzZSBhIGZvbnQgdGFnIHdoaWNoIGNhbid0IGhhdmUgYSBkaXYgaW5zaWRlCisgIGlmIHM6c2V0dGluZ3MudXNlX2NzcworICAgIGNhbGwgZXh0ZW5kKHM6bGluZXMsIFsiPGRpdiBpZD0ndmltQ29kZUVsZW1lbnQnPiJdKQorICBlbmRpZgorZWxzZQorICBjYWxsIGV4dGVuZChzOmxpbmVzLCBbIjxwcmUgaWQ9J3ZpbUNvZGVFbGVtZW50Jz4iXSkKIGVuZGlmCiAKIGV4ZSBzOm9yZ3dpbiAuICJ3aW5jbWQgdyIKIAotIiBMaXN0IG9mIGFsbCBpZCdzCi1sZXQgczppZGxpc3QgPSBbXQorIiBjYWNoZXMgb2Ygc3R5bGUgZGF0YQorIiBpbml0aWFsaXplIHRvIGluY2x1ZGUgbGluZSBudW1iZXJzIGlmIHVzaW5nIHRoZW0KK2lmIHM6c2V0dGluZ3MubnVtYmVyX2xpbmVzCisgIGxldCBzOnN0eWxlbGlzdCA9IHsgczpMSU5FTlJfSUQgOiAiLkxpbmVOciB7ICIgLiBzOkNTUzEoIHM6TElORU5SX0lEICkgLiAifSIgfQorZWxzZQorICBsZXQgczpzdHlsZWxpc3QgPSB7fQorZW5kaWYKK2xldCBzOmRpZmZzdHlsZWxpc3QgPSB7CisgICAgICBcICAgczpESUZGX0FfSUQgOiAiLkRpZmZBZGQgeyAiIC4gczpDU1MxKCBzOkRJRkZfQV9JRCApIC4gIn0iLAorICAgICAgXCAgIHM6RElGRl9DX0lEIDogIi5EaWZmQ2hhbmdlIHsgIiAuIHM6Q1NTMSggczpESUZGX0NfSUQgKSAuICJ9IiwKKyAgICAgIFwgICBzOkRJRkZfRF9JRCA6ICIuRGlmZkRlbGV0ZSB7ICIgLiBzOkNTUzEoIHM6RElGRl9EX0lEICkgLiAifSIsCisgICAgICBcICAgczpESUZGX1RfSUQgOiAiLkRpZmZUZXh0IHsgIiAuIHM6Q1NTMSggczpESUZGX1RfSUQgKSAuICJ9IgorICAgICAgXCB9CiAKICIgc2V0IHVwIHByb2dyZXNzIGJhciBpbiB0aGUgc3RhdHVzIGxpbmUKIGlmICFzOnNldHRpbmdzLm5vX3Byb2dyZXNzCkBAIC03NzIsMTUgKzEyMzIsMjIgQEAKIAogICAgICAgaWYgIXM6c2V0dGluZ3Mubm9fcHJlCiAJIiBIVE1MIGxpbmUgd3JhcHBpbmcgaXMgb2ZmLS1nbyBhaGVhZCBhbmQgZmlsbCB0byB0aGUgbWFyZ2luCisJIiBUT0RPOiB3aGF0IGFib3V0IHdoZW4gQ1NTIHdyYXBwaW5nIGlzIHR1cm5lZCBvbj8KIAlsZXQgczpuZXcgPSBzOm5ldyAuIHJlcGVhdChzOmRpZmZmaWxsY2hhciwgJmNvbHVtbnMgLSBzdHJsZW4oczpuZXcpIC0gczptYXJnaW4pCiAgICAgICBlbHNlCiAJbGV0IHM6bmV3ID0gczpuZXcgLiByZXBlYXQoczpkaWZmZmlsbGNoYXIsIDMpCiAgICAgICBlbmRpZgogCi0gICAgICBsZXQgczpuZXcgPSBzOkh0bWxGb3JtYXQoczpuZXcsICJEaWZmRGVsZXRlIiwgIiIpCisgICAgICBsZXQgczpuZXcgPSBzOkh0bWxGb3JtYXRfZChzOm5ldywgczpESUZGX0RfSUQsIDApCiAgICAgICBpZiBzOnNldHRpbmdzLm51bWJlcl9saW5lcwotCSIgSW5kZW50IGlmIGxpbmUgbnVtYmVyaW5nIGlzIG9uOyBtdXN0IGJlIGFmdGVyIGVzY2FwaW5nLgotCWxldCBzOm5ldyA9IHJlcGVhdChzOkxlYWRpbmdTcGFjZSwgczptYXJnaW4pIC4gczpuZXcKKwkiIEluZGVudCBpZiBsaW5lIG51bWJlcmluZyBpcyBvbi4gSW5kZW50IGdldHMgc3R5bGUgb2YgbGluZSBudW1iZXIKKwkiIGNvbHVtbi4KKwlsZXQgczpuZXcgPSBzOkh0bWxGb3JtYXRfbihyZXBlYXQoJyAnLCBzOm1hcmdpbiksIHM6TElORU5SX0lELCAwKSAuIHM6bmV3CisgICAgICBlbmRpZgorICAgICAgaWYgczpzZXR0aW5ncy5keW5hbWljX2ZvbGRzICYmICFzOnNldHRpbmdzLm5vX2ZvbGRjb2x1bW4gJiYgczpmb2xkY29sdW1uID4gMAorCSIgSW5kZW50IGZvciBmb2xkY29sdW1uIGlmIHRoZXJlIGlzIG9uZS4gQXNzdW1lIGl0J3MgZW1wdHksIHRoZXJlIHNob3VsZAorCSIgbm90IGJlIGEgZm9sZCBmb3IgZGVsZXRlZCBsaW5lcyBpbiBkaWZmIG1vZGUuCisJbGV0IHM6bmV3ID0gczpGb2xkQ29sdW1uX2ZpbGwoKSAuIHM6bmV3CiAgICAgICBlbmRpZgogICAgICAgY2FsbCBhZGQoczpsaW5lcywgczpuZXcuczpIdG1sRW5kbGluZSkKIApAQCAtNzkzLDggKzEyNjAsNiBAQAogICAiIFN0YXJ0IHRoZSBsaW5lIHdpdGggdGhlIGxpbmUgbnVtYmVyLgogICBpZiBzOnNldHRpbmdzLm51bWJlcl9saW5lcwogICAgIGxldCBzOm51bWNvbCA9IHJlcGVhdCgnICcsIHM6bWFyZ2luIC0gMSAtIHN0cmxlbihzOmxudW0pKSAuIHM6bG51bSAuICcgJwotICBlbHNlCi0gICAgbGV0IHM6bnVtY29sID0gIiIKICAgZW5kaWYKIAogICBsZXQgczpuZXcgPSAiIgpAQCAtODAyLDE0ICsxMjY3LDE0IEBACiAgIGlmIGhhcygnZm9sZGluZycpICYmICFzOnNldHRpbmdzLmlnbm9yZV9mb2xkaW5nICYmIGZvbGRjbG9zZWQoczpsbnVtKSA+IC0xICYmICFzOnNldHRpbmdzLmR5bmFtaWNfZm9sZHMKICAgICAiCiAgICAgIiBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBmb2xkZWQgYmxvY2sgKHdpdGggbm8gZHluYW1pYyBmb2xkaW5nKQotICAgICIKLSAgICBsZXQgczpuZXcgPSBzOm51bWNvbCAuIGZvbGR0ZXh0cmVzdWx0KHM6bG51bSkKKyAgICBsZXQgczpuZXcgPSBmb2xkdGV4dHJlc3VsdChzOmxudW0pCiAgICAgaWYgIXM6c2V0dGluZ3Mubm9fcHJlCiAgICAgICAiIEhUTUwgbGluZSB3cmFwcGluZyBpcyBvZmYtLWdvIGFoZWFkIGFuZCBmaWxsIHRvIHRoZSBtYXJnaW4KICAgICAgIGxldCBzOm5ldyA9IHM6bmV3IC4gcmVwZWF0KHM6Zm9sZGZpbGxjaGFyLCAmY29sdW1ucyAtIHN0cmxlbihzOm5ldykpCiAgICAgZW5kaWYKIAotICAgIGxldCBzOm5ldyA9IHM6SHRtbEZvcm1hdChzOm5ldywgIkZvbGRlZCIsICIiKQorICAgICIgcHV0IG51bWNvbCBpbiBhIHNlcGFyYXRlIGdyb3VwIGZvciBzYWtlIG9mIHVuc2VsZWN0YWJsZSB0ZXh0CisgICAgbGV0IHM6bmV3ID0gKHM6c2V0dGluZ3MubnVtYmVyX2xpbmVzID8gczpIdG1sRm9ybWF0X24oczpudW1jb2wsIHM6Rk9MREVEX0lELCAwKTogIiIpIC4gczpIdG1sRm9ybWF0X3QoczpuZXcsIHM6Rk9MREVEX0lELCAwKQogCiAgICAgIiBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGZvbGQKICAgICBsZXQgczpuZXdfbG51bSA9IGZvbGRjbG9zZWRlbmQoczpsbnVtKQpAQCAtODUxLDM4ICsxMzE2LDQ2IEBACiAJaWYgIXM6c2V0dGluZ3Mubm9fZm9sZGNvbHVtbgogCSAgIiBhZGQgZm9sZCBjb2x1bW4gdGhhdCBjYW4gb3BlbiB0aGUgbmV3IGZvbGQKIAkgIGlmIHM6YWxsZm9sZHNbMF0ubGV2ZWwgPiAxICYmIHM6Zmlyc3Rmb2xkCi0JICAgIGxldCBzOm5ldyA9IHM6bmV3IC4gIjxhIGNsYXNzPSd0b2dnbGUtb3BlbiBGb2xkQ29sdW1uJyBocmVmPSdqYXZhc2NyaXB0OnRvZ2dsZUZvbGQoXCJmb2xkIi5zOmZvbGRzdGFja1swXS5pZC4iXCIpJz4iCi0JICAgIGxldCBzOm5ldyA9IHM6bmV3IC4gcmVwZWF0KCd8JywgczphbGxmb2xkc1swXS5sZXZlbCAtIDEpIC4gIjwvYT4iCisJICAgIGxldCBzOm5ldyA9IHM6bmV3IC4gczpGb2xkQ29sdW1uX2J1aWxkKCd8JywgczphbGxmb2xkc1swXS5sZXZlbCAtIDEsIDAsICIiLAorCQkgIFwgJ3RvZ2dsZS1vcGVuIEZvbGRDb2x1bW4nLCdqYXZhc2NyaXB0OnRvZ2dsZUZvbGQoImZvbGQnLnM6Zm9sZHN0YWNrWzBdLmlkLiciKTsnKQogCSAgZW5kaWYKLQkgIGxldCBzOm5ldyA9IHM6bmV3IC4gIjxhIGNsYXNzPSd0b2dnbGUtb3BlbiBGb2xkQ29sdW1uJyBocmVmPSdqYXZhc2NyaXB0OnRvZ2dsZUZvbGQoXCJmb2xkIi5zOmZvbGRJZC4iXCIpJz4rPC9hPiIKLQkgIGxldCBzOm5ldyA9IHM6bmV3IC4gIjxhIGNsYXNzPSd0b2dnbGUtb3BlbiAiCisJICAiIGFkZCB0aGUgZmlsbGVyIHNwYWNlcyBzZXBhcmF0ZWx5IGZyb20gdGhlICcrJyBjaGFyIHNvIHRoYXQgaXQgY2FuIGJlCisJICAiIHNob3duL2hpZGRlbiBzZXBhcmF0ZWx5IGR1cmluZyBhIGhvdmVyIHVuZm9sZAorCSAgbGV0IHM6bmV3ID0gczpuZXcgLiBzOkZvbGRDb2x1bW5fYnVpbGQoIisiLCAxLCAwLCAiIiwKKwkJXCAndG9nZ2xlLW9wZW4gRm9sZENvbHVtbicsICdqYXZhc2NyaXB0OnRvZ2dsZUZvbGQoImZvbGQnLnM6Zm9sZElkLiciKTsnKQogCSAgIiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBmb2xkIHdlJ3JlIG9wZW5pbmcgb24gdGhpcyBsaW5lLCB3ZSBuZWVkCiAJICAiIHRvIGtlZXAgdGhlIGZpbGxlciBzcGFjZXMgaGlkZGVuIGlmIHRoZSBmb2xkIGlzIG9wZW5lZCBieSBtb3VzZQogCSAgIiBob3Zlci4gSWYgaXQgaXMgdGhlIGxhc3QgZm9sZCB0byBvcGVuIGluIHRoZSBsaW5lLCB3ZSBzaG91bGRuJ3QgaGlkZQogCSAgIiB0aGVtLCBzbyBkb24ndCBhcHBseSB0aGUgdG9nZ2xlLWZpbGxlciBjbGFzcy4KLQkgIGlmIGdldChzOmFsbGZvbGRzLCAxLCB7J2ZpcnN0bGluZSc6IDB9KS5maXJzdGxpbmUgPT0gczpsbnVtCi0JICAgIGxldCBzOm5ldyA9IHM6bmV3IC4gInRvZ2dsZS1maWxsZXIgIgotCSAgZW5kaWYKLQkgIGxldCBzOm5ldyA9IHM6bmV3IC4gIkZvbGRDb2x1bW4nIGhyZWY9J2phdmFzY3JpcHQ6dG9nZ2xlRm9sZChcImZvbGQiLnM6Zm9sZElkLiJcIiknPiIKLQkgIGxldCBzOm5ldyA9IHM6bmV3IC4gcmVwZWF0KCIgIiwgczpmb2xkY29sdW1uIC0gczphbGxmb2xkc1swXS5sZXZlbCkgLiAiPC9hPiIKKwkgIGxldCBzOm5ldyA9IHM6bmV3IC4gczpGb2xkQ29sdW1uX2J1aWxkKCIgIiwgMSwgczpmb2xkY29sdW1uIC0gczphbGxmb2xkc1swXS5sZXZlbCAtIDEsICIiLAorCQlcICd0b2dnbGUtb3BlbiBGb2xkQ29sdW1uJy4gKGdldChzOmFsbGZvbGRzLCAxLCB7J2ZpcnN0bGluZSc6IDB9KS5maXJzdGxpbmUgPT0gczpsbnVtID8iIHRvZ2dsZS1maWxsZXIiIDoiIiksCisJCVwgJ2phdmFzY3JpcHQ6dG9nZ2xlRm9sZCgiZm9sZCcuczpmb2xkSWQuJyIpOycpCiAKIAkgICIgYWRkIGZvbGQgY29sdW1uIHRoYXQgY2FuIGNsb3NlIHRoZSBuZXcgZm9sZAotCSAgbGV0IHM6bmV3ID0gczpuZXcgLiAiPGEgY2xhc3M9J3RvZ2dsZS1jbG9zZWQgRm9sZENvbHVtbicgaHJlZj0namF2YXNjcmlwdDp0b2dnbGVGb2xkKFwiZm9sZCIuczpmb2xkSWQuIlwiKSc+IgotCSAgaWYgczpmaXJzdGZvbGQKLQkgICAgbGV0IHM6bmV3ID0gczpuZXcgLiByZXBlYXQoJ3wnLCBzOmFsbGZvbGRzWzBdLmxldmVsIC0gMSkKLQkgIGVuZGlmCi0JICBsZXQgczpuZXcgPSBzOm5ldyAuICItIgotCSAgIiBvbmx5IGFkZCBzcGFjZXMgaWYgd2UgYXJlbid0IG9wZW5pbmcgYW5vdGhlciBmb2xkIG9uIHRoZSBzYW1lIGxpbmUKKwkgICIgb25seSBhZGQgZXh0cmEgYmxhbmsgc3BhY2UgaWYgd2UgYXJlbid0IG9wZW5pbmcgYW5vdGhlciBmb2xkIG9uIHRoZQorCSAgIiBzYW1lIGxpbmUKIAkgIGlmIGdldChzOmFsbGZvbGRzLCAxLCB7J2ZpcnN0bGluZSc6IDB9KS5maXJzdGxpbmUgIT0gczpsbnVtCi0JICAgIGxldCBzOm5ldyA9IHM6bmV3IC4gcmVwZWF0KCIgIiwgczpmb2xkY29sdW1uIC0gczphbGxmb2xkc1swXS5sZXZlbCkKKwkgICAgbGV0IHM6ZXh0cmFfc3BhY2UgPSBzOmZvbGRjb2x1bW4gLSBzOmFsbGZvbGRzWzBdLmxldmVsCisJICBlbHNlCisJICAgIGxldCBzOmV4dHJhX3NwYWNlID0gMAogCSAgZW5kaWYKLQkgIGxldCBzOm5ldyA9IHM6bmV3IC4gIjwvYT4iCisJICBpZiBzOmZpcnN0Zm9sZAorCSAgICAiIHRoZSBmaXJzdCBmb2xkIGluIGEgbGluZSBoYXMgJ3wnIGNoYXJhY3RlcnMgZnJvbSBmb2xkcyBvcGVuZWQgaW4KKwkgICAgIiBwcmV2aW91cyBsaW5lcywgYmVmb3JlIHRoZSAnLScgZm9yIHRoaXMgZm9sZAorCSAgICBsZXQgczpuZXcgLj0gczpGb2xkQ29sdW1uX2J1aWxkKCd8JywgczphbGxmb2xkc1swXS5sZXZlbCAtIDEsIHM6ZXh0cmFfc3BhY2UsICctJywKKwkJICBcICd0b2dnbGUtY2xvc2VkIEZvbGRDb2x1bW4nLCAnamF2YXNjcmlwdDp0b2dnbGVGb2xkKCJmb2xkJy5zOmZvbGRJZC4nIik7JykKKwkgIGVsc2UKKwkgICAgIiBhbnkgc3Vic2VxdWVudCBmb2xkcyBpbiB0aGUgbGluZSBvbmx5IGFkZCBhIHNpbmdsZSAnLScKKwkgICAgbGV0IHM6bmV3ID0gczpuZXcgLiBzOkZvbGRDb2x1bW5fYnVpbGQoIi0iLCAxLCBzOmV4dHJhX3NwYWNlLCAiIiwKKwkJICBcICd0b2dnbGUtY2xvc2VkIEZvbGRDb2x1bW4nLCAnamF2YXNjcmlwdDp0b2dnbGVGb2xkKCJmb2xkJy5zOmZvbGRJZC4nIik7JykKKwkgIGVuZGlmCiAJICBsZXQgczpmaXJzdGZvbGQgPSAwCiAJZW5kaWYKIAotCSIgYWRkIGZvbGQgdGV4dCwgbW92aW5nIHRoZSBzcGFuIGVuZGluZyB0byB0aGUgbmV4dCBsaW5lIHNvIGNvbGxhcHNpbmcKLQkiIG9mIGZvbGRzIHdvcmtzIGNvcnJlY3RseQotCWxldCBzOm5ldyA9IHM6bmV3IC4gc3Vic3RpdHV0ZShzOkh0bWxGb3JtYXQoczpudW1jb2wgLiBmb2xkdGV4dHJlc3VsdChzOmxudW0pLCAiRm9sZGVkIiwgIiIpLCAnPC9zcGFuPicsIHM6SHRtbEVuZGxpbmUuJ1xuXDAnLCAnJykKKwkiIEFkZCBmb2xkIHRleHQsIG1vdmluZyB0aGUgc3BhbiBlbmRpbmcgdG8gdGhlIG5leHQgbGluZSBzbyBjb2xsYXBzaW5nCisJIiBvZiBmb2xkcyB3b3JrcyBjb3JyZWN0bHkuCisJIiBQdXQgbnVtY29sIGluIGEgc2VwYXJhdGUgZ3JvdXAgZm9yIHNha2Ugb2YgdW5zZWxlY3RhYmxlIHRleHQuCisJbGV0IHM6bmV3ID0gczpuZXcgLiAoczpzZXR0aW5ncy5udW1iZXJfbGluZXMgPyBzOkh0bWxGb3JtYXRfbihzOm51bWNvbCwgczpGT0xERURfSUQsIDApIDogIiIpIC4gc3Vic3RpdHV0ZShzOkh0bWxGb3JtYXRfdChmb2xkdGV4dHJlc3VsdChzOmxudW0pLCBzOkZPTERFRF9JRCwgMCksICc8L3NwYW4+JywgczpIdG1sRW5kbGluZS4nXG5cMCcsICcnKQogCWxldCBzOm5ldyA9IHM6bmV3IC4gIjxzcGFuIGNsYXNzPSdmdWxsdGV4dCc+IgogCiAJIiBvcGVuIHRoZSBmb2xkIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGZvbGQgdGV4dCB0byBhbGxvdyByZXRyaWV2YWwgb2YKQEAgLTkwMiwxNCArMTM3NSwxMyBAQAogCSAgIiBhZGQgdGhlIGVtcHR5IGZvbGRjb2x1bW4gZm9yIHVuZm9sZGVkIGxpbmVzIGlmIHRoZXJlIGlzIGEgZm9sZAogCSAgIiBjb2x1bW4gYXQgYWxsCiAJICBpZiBzOmZvbGRjb2x1bW4gPiAwCi0JICAgIGxldCBzOm5ldyA9IHM6bmV3IC4gczpIdG1sRm9ybWF0KHJlcGVhdCgnICcsIHM6Zm9sZGNvbHVtbiksICJGb2xkQ29sdW1uIiwgIiIpCisJICAgIGxldCBzOm5ldyA9IHM6bmV3IC4gczpGb2xkQ29sdW1uX2ZpbGwoKQogCSAgZW5kaWYKIAllbHNlCiAJICAiIGFkZCB0aGUgZm9sZCBjb2x1bW4gZm9yIGZvbGRzIG5vdCBvbiB0aGUgb3BlbmluZyBsaW5lCiAJICBpZiBnZXQoczpmb2xkc3RhY2ssIDApLmZpcnN0bGluZSA8IHM6bG51bQotCSAgICBsZXQgczpuZXcgPSBzOm5ldyAuICI8YSBjbGFzcz0nRm9sZENvbHVtbicgaHJlZj0namF2YXNjcmlwdDp0b2dnbGVGb2xkKFwiZm9sZCIuczpmb2xkc3RhY2tbMF0uaWQuIlwiKSc+IgotCSAgICBsZXQgczpuZXcgPSBzOm5ldyAuIHJlcGVhdCgnfCcsIHM6Zm9sZHN0YWNrWzBdLmxldmVsKQotCSAgICBsZXQgczpuZXcgPSBzOm5ldyAuIHJlcGVhdCgnICcsIHM6Zm9sZGNvbHVtbiAtIHM6Zm9sZHN0YWNrWzBdLmxldmVsKSAuICI8L2E+IgorCSAgICBsZXQgczpuZXcgPSBzOm5ldyAuIHM6Rm9sZENvbHVtbl9idWlsZCgnfCcsIHM6Zm9sZHN0YWNrWzBdLmxldmVsLCBzOmZvbGRjb2x1bW4gLSBzOmZvbGRzdGFja1swXS5sZXZlbCwgIiIsCisJCSAgXCAnRm9sZENvbHVtbicsICdqYXZhc2NyaXB0OnRvZ2dsZUZvbGQoImZvbGQnLnM6Zm9sZHN0YWNrWzBdLmlkLiciKTsnKQogCSAgZW5kaWYKIAllbmRpZgogICAgICAgZW5kaWYKQEAgLTkxNyw4ICsxMzg5LDcgQEAKIAogICAgICIgTm93IGNvbnRpbnVlIHdpdGggdGhlIHVuZm9sZGVkIGxpbmUgdGV4dAogICAgIGlmIHM6c2V0dGluZ3MubnVtYmVyX2xpbmVzCi0gICAgICAiIFRPRE86IHdoeSBub3QgdXNlIHRoZSByZWFsIGhpZ2hsaWdodCBuYW1lIGhlcmU/Ci0gICAgICBsZXQgczpuZXcgPSBzOm5ldyAuIHM6SHRtbEZvcm1hdChzOm51bWNvbCwgImxuciIsICIiKQorICAgICAgbGV0IHM6bmV3ID0gczpuZXcgLiBzOkh0bWxGb3JtYXRfbihzOm51bWNvbCwgczpMSU5FTlJfSUQsIDApCiAgICAgZW5kaWYKIAogICAgICIgR2V0IHRoZSBkaWZmIGF0dHJpYnV0ZSwgaWYgYW55LgpAQCAtOTMyLDcgKzE0MDMsNiBAQAogCiAgICAgIiBtb3N0IG9mIHRoZSB0aW1lIHdlIHdvbid0IHVzZSB0aGUgZGlmZl9pZCwgaW5pdGlhbGl6ZSB0byB6ZXJvCiAgICAgbGV0IHM6ZGlmZl9pZCA9IDAKLSAgICBsZXQgczpkaWZmX2lkX25hbWUgPSAiIgogCiAgICAgd2hpbGUgczpjb2wgPD0gczpsZW4gfHwgKHM6Y29sID09IDEgJiYgczpkaWZmYXR0cikKICAgICAgIGxldCBzOnN0YXJ0Y29sID0gczpjb2wgIiBUaGUgc3RhcnQgY29sdW1uIGZvciBwcm9jZXNzaW5nIHRleHQKQEAgLTEwMDAsMjAgKzE0NzAsMTYgQEAKIAogCSIgZ2V0IHRoZSBoaWdobGlnaHQgZ3JvdXAgbmFtZSB0byB1c2UKIAlsZXQgczppZCA9IHN5bklEdHJhbnMoczppZCkKLQlsZXQgczppZF9uYW1lID0gc3luSURhdHRyKHM6aWQsICJuYW1lIiwgczp3aGF0dGVybSkKLQlpZiBzOmRpZmZfaWQKLQkgIGxldCBzOmRpZmZfaWRfbmFtZSA9IHN5bklEYXR0cihzOmRpZmZfaWQsICJuYW1lIiwgczp3aGF0dGVybSkKLQllbmRpZgogICAgICAgZWxzZQogCSIgdXNlIENvbmNlYWwgaGlnaGxpZ2h0aW5nIGZvciBjb25jZWFsZWQgdGV4dAotCWxldCBzOmlkX25hbWUgPSAnQ29uY2VhbCcKKwlsZXQgczppZCA9IHM6Q09OQ0VBTF9JRAogCWxldCBzOmV4cGFuZGVkdGFiID0gczpjb25jZWFsaW5mb1sxXQogICAgICAgZW5kaWYKIAotICAgICAgIiBPdXRwdXQgdGhlIHRleHQgd2l0aCB0aGUgc2FtZSBzeW5JRCwgd2l0aCBjbGFzcyBzZXQgdG8ge3M6aWRfbmFtZX0sCi0gICAgICAiIHVubGVzcyBpdCBoYXMgYmVlbiBjb25jZWFsZWQgY29tcGxldGVseS4KKyAgICAgICIgT3V0cHV0IHRoZSB0ZXh0IHdpdGggdGhlIHNhbWUgc3luSUQsIHdpdGggY2xhc3Mgc2V0IHRvIHRoZSBoaWdobGlnaHQgSUQKKyAgICAgICIgbmFtZSwgdW5sZXNzIGl0IGhhcyBiZWVuIGNvbmNlYWxlZCBjb21wbGV0ZWx5LgogICAgICAgaWYgc3RybGVuKHM6ZXhwYW5kZWR0YWIpID4gMAotCWxldCBzOm5ldyA9IHM6bmV3IC4gczpIdG1sRm9ybWF0KHM6ZXhwYW5kZWR0YWIsICBzOmlkX25hbWUsIHM6ZGlmZl9pZF9uYW1lKQorCWxldCBzOm5ldyA9IHM6bmV3IC4gczpIdG1sRm9ybWF0KHM6ZXhwYW5kZWR0YWIsICBzOmlkLCBzOmRpZmZfaWQsIDApCiAgICAgICBlbmRpZgogICAgIGVuZHdoaWxlCiAgIGVuZGlmCkBAIC0xMDM4LDkgKzE1MDQsOSBAQAogICBlbmR3aGlsZQogCiAgICIgYWRkIGZvbGQgY29sdW1uIHRvIHRoZSBzdHlsZSBsaXN0IGlmIG5vdCBhbHJlYWR5IHRoZXJlCi0gIGxldCBzOmlkID0gaGxJRCgnRm9sZENvbHVtbicpCi0gIGlmIGluZGV4KHM6aWRsaXN0LCBzOmlkKSA9PSAtMQotICAgIGNhbGwgaW5zZXJ0KHM6aWRsaXN0LCBzOmlkKQorICBsZXQgczppZCA9IHM6Rk9MRF9DX0lECisgIGlmICFoYXNfa2V5KHM6c3R5bGVsaXN0LCBzOmlkKQorICAgIGxldCBzOnN0eWxlbGlzdFtzOmlkXSA9ICcuRm9sZENvbHVtbiB7ICcgLiBzOkNTUzEoczppZCkgLiAnfScKICAgZW5kaWYKIGVuZGlmCiAKQEAgLTEwNDksNyArMTUxNSw3IEBACiAgICAgIiBDbG9zZSBvZmYgdGhlIGZvbnQgdGFnIHRoYXQgZW5jYXBzdWxhdGVzIHRoZSB3aG9sZSA8Ym9keT4KICAgICBjYWxsIGV4dGVuZChzOmxpbmVzLCBbIjwvZm9udD4iLCAiPC9ib2R5PiIsICI8L2h0bWw+Il0pCiAgIGVsc2UKLSAgICBjYWxsIGV4dGVuZChzOmxpbmVzLCBbIjwvYm9keT4iLCAiPC9odG1sPiJdKQorICAgIGNhbGwgZXh0ZW5kKHM6bGluZXMsIFsiPC9kaXY+IiwgIjwvYm9keT4iLCAiPC9odG1sPiJdKQogICBlbmRpZgogZWxzZQogICBjYWxsIGV4dGVuZChzOmxpbmVzLCBbIjwvcHJlPiIsICI8L2JvZHk+IiwgIjwvaHRtbD4iXSkKQEAgLTEwNTksMjkgKzE1MjUsMjcgQEAKIGNhbGwgc2V0bGluZSgxLCBzOmxpbmVzKQogdW5sZXQgczpsaW5lcwogCisiIE1hbmdsZSBtb2RlbGluZXMgc28gVmltIGRvZXNuJ3QgdHJ5IHRvIHVzZSBIVE1MIHRleHQgYXMgYSBtb2RlbGluZSBpZiBlZGl0aW5nCisiIHRoaXMgZmlsZSBpbiB0aGUgZnV0dXJlOyBuZWVkIHRvIGRvIHRoaXMgYWZ0ZXIgZ2VuZXJhdGluZyBhbGwgdGhlIHRleHQgaW4gY2FzZQorIiB0aGUgbW9kZWxpbmUgdGV4dCBoYXMgZGlmZmVyZW50IGhpZ2hsaWdodCBncm91cHMgd2hpY2ggYWxsIHR1cm4gb3V0IHRvIGJlCisiIHN0cmlwcGVkIGZyb20gdGhlIGZpbmFsIG91dHB1dC4KKyVzIVx2KCUoXnxccyspJSh2aW0/fGV4KSk6IVwxXCYjMDA1ODshZ2UKKwogIiBOb3csIHdoZW4gd2UgZmluYWxseSBrbm93IHdoaWNoLCB3ZSBkZWZpbmUgdGhlIGNvbG9ycyBhbmQgc3R5bGVzCiBpZiBzOnNldHRpbmdzLnVzZV9jc3MKICAgMTsvPHN0eWxlIHR5cGU9InRleHQvKzEKIGVuZGlmCiAKLSIgRmluZCBvdXQgdGhlIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgY29sb3IuCi1sZXQgczpmZ2MgPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoaGxJRCgiTm9ybWFsIiksICJmZyMiLCBzOndoYXR0ZXJtKSkKLWxldCBzOmJnYyA9IHM6SHRtbENvbG9yKHN5bklEYXR0cihobElEKCJOb3JtYWwiKSwgImJnIyIsIHM6d2hhdHRlcm0pKQotaWYgczpmZ2MgPT0gIiIKLSAgbGV0IHM6ZmdjID0gKCAmYmFja2dyb3VuZCA9PSAiZGFyayIgPyAiI2ZmZmZmZiIgOiAiIzAwMDAwMCIgKQotZW5kaWYKLWlmIHM6YmdjID09ICIiCi0gIGxldCBzOmJnYyA9ICggJmJhY2tncm91bmQgPT0gImRhcmsiID8gIiMwMDAwMDAiIDogIiNmZmZmZmYiICkKLWVuZGlmCi0KICIgTm9ybWFsL2dsb2JhbCBhdHRyaWJ1dGVzCiAiIEZvciBOZXRzY2FwZSA0LCBzZXQgPGJvZHk+IGF0dHJpYnV0ZXMgdG9vLCB0aG91Z2gsIHN0cmljdGx5IHNwZWFraW5nLCBpdCdzCiAiIGluY29ycmVjdC4KIGlmIHM6c2V0dGluZ3MudXNlX2NzcwogICBpZiBzOnNldHRpbmdzLm5vX3ByZQotICAgIGV4ZWN1dGUgIm5vcm1hbCEgQVxuYm9keSB7IGNvbG9yOiAiIC4gczpmZ2MgLiAiOyBiYWNrZ3JvdW5kLWNvbG9yOiAiIC4gczpiZ2MgLiAiOyBmb250LWZhbWlseTogIi4gczpodG1sZm9udCAuIjsgfVxlIgorICAgIGNhbGwgYXBwZW5kKCcuJywgImJvZHkgeyBjb2xvcjogIiAuIHM6ZmdjIC4gIjsgYmFja2dyb3VuZC1jb2xvcjogIiAuIHM6YmdjIC4gIjsgZm9udC1mYW1pbHk6ICIuIHM6aHRtbGZvbnQgLiI7IH0iKQorICAgICsKICAgZWxzZQotICAgIGV4ZWN1dGUgIm5vcm1hbCEgQVxucHJlIHsgIiAuIHM6d2hpdGVzcGFjZSAuICJmb250LWZhbWlseTogIi4gczpodG1sZm9udCAuIjsgY29sb3I6ICIgLiBzOmZnYyAuICI7IGJhY2tncm91bmQtY29sb3I6ICIgLiBzOmJnYyAuICI7IH1cZSIKKyAgICBjYWxsIGFwcGVuZCgnLicsICJwcmUgeyAiIC4gczp3aGl0ZXNwYWNlIC4gImZvbnQtZmFtaWx5OiAiLiBzOmh0bWxmb250IC4iOyBjb2xvcjogIiAuIHM6ZmdjIC4gIjsgYmFja2dyb3VuZC1jb2xvcjogIiAuIHM6YmdjIC4gIjsgfSIpCisgICAgKwogICAgIHlhbmsKICAgICBwdXQKICAgICBleGVjdXRlICJub3JtYWwhIF5jd2JvZHlcZSIKQEAgLTEwOTAsNjQgKzE1NTQsODUgQEAKICAgICAgIGV4ZWMgJ3MjJy5zOndoaXRlc3BhY2UKICAgICBlbmRpZgogICBlbmRpZgorICAiIGZpeCBicm93c2VyIGluY29uc2lzdGVuY2llcyAoc29tZXRpbWVzIHdpdGhpbiB0aGUgc2FtZSBicm93c2VyKSBvZiBkaWZmZXJlbnQKKyAgIiBkZWZhdWx0IGZvbnQgc2l6ZSBmb3IgZGlmZmVyZW50IGVsZW1lbnRzCisgIGNhbGwgYXBwZW5kKCcuJywgJyogeyBmb250LXNpemU6IDFlbTsgfScpCisgICsKKyAgIiBpZiB3ZSB1c2UgYW55IGlucHV0IGVsZW1lbnRzIGZvciB1bnNlbGVjdGFibGUgY29udGVudCwgbWFrZSBzdXJlIHRoZXkgbG9vaworICAiIGxpa2Ugbm9ybWFsIHRleHQKKyAgaWYgIWVtcHR5KHM6c2V0dGluZ3MucHJldmVudF9jb3B5KQorICAgIGNhbGwgYXBwZW5kKCcuJywgJ2lucHV0IHsgYm9yZGVyOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGZvbnQtZmFtaWx5OiAnLnM6aHRtbGZvbnQuJzsgfScpCisgICAgKworICAgICIgY2ggdW5pdHMgZm9yIGJyb3dzZXJzIHdoaWNoIHN1cHBvcnQgdGhlbSwgZW0gdW5pdHMgZm9yIGEgc29tZXdoYXQKKyAgICAiIHJlYXNvbmFibGUgZmFsbGJhY2suIEFsc28gbWFrZSBzdXJlIHRoZSBzcGVjaWFsIGVsZW1lbnRzIGZvciBzaXplCisgICAgIiBjYWxjdWxhdGlvbnMgYXJlbid0IHNlZW4uCisgICAgY2FsbCBhcHBlbmQoJy4nLCBbCisJICBcICJpbnB1dFtzaXplPScxJ10geyB3aWR0aDogMWVtOyB3aWR0aDogMWNoOyB9IiwKKwkgIFwgImlucHV0W3NpemU9JzInXSB7IHdpZHRoOiAyZW07IHdpZHRoOiAyY2g7IH0iLAorCSAgXCAiaW5wdXRbc2l6ZT0nMyddIHsgd2lkdGg6IDNlbTsgd2lkdGg6IDNjaDsgfSIsCisJICBcICJpbnB1dFtzaXplPSc0J10geyB3aWR0aDogNGVtOyB3aWR0aDogNGNoOyB9IiwKKwkgIFwgImlucHV0W3NpemU9JzUnXSB7IHdpZHRoOiA1ZW07IHdpZHRoOiA1Y2g7IH0iLAorCSAgXCAiaW5wdXRbc2l6ZT0nNiddIHsgd2lkdGg6IDZlbTsgd2lkdGg6IDZjaDsgfSIsCisJICBcICJpbnB1dFtzaXplPSc3J10geyB3aWR0aDogN2VtOyB3aWR0aDogN2NoOyB9IiwKKwkgIFwgImlucHV0W3NpemU9JzgnXSB7IHdpZHRoOiA4ZW07IHdpZHRoOiA4Y2g7IH0iLAorCSAgXCAiaW5wdXRbc2l6ZT0nOSddIHsgd2lkdGg6IDllbTsgd2lkdGg6IDljaDsgfSIsCisJICBcICJpbnB1dFtzaXplPScxMCddIHsgd2lkdGg6IDEwZW07IHdpZHRoOiAxMGNoOyB9IiwKKwkgIFwgImlucHV0W3NpemU9JzExJ10geyB3aWR0aDogMTFlbTsgd2lkdGg6IDExY2g7IH0iLAorCSAgXCAiaW5wdXRbc2l6ZT0nMTInXSB7IHdpZHRoOiAxMmVtOyB3aWR0aDogMTJjaDsgfSIsCisJICBcICJpbnB1dFtzaXplPScxMyddIHsgd2lkdGg6IDEzZW07IHdpZHRoOiAxM2NoOyB9IiwKKwkgIFwgImlucHV0W3NpemU9JzE0J10geyB3aWR0aDogMTRlbTsgd2lkdGg6IDE0Y2g7IH0iLAorCSAgXCAiaW5wdXRbc2l6ZT0nMTUnXSB7IHdpZHRoOiAxNWVtOyB3aWR0aDogMTVjaDsgfSIsCisJICBcICJpbnB1dFtzaXplPScxNiddIHsgd2lkdGg6IDE2ZW07IHdpZHRoOiAxNmNoOyB9IiwKKwkgIFwgImlucHV0W3NpemU9JzE3J10geyB3aWR0aDogMTdlbTsgd2lkdGg6IDE3Y2g7IH0iLAorCSAgXCAiaW5wdXRbc2l6ZT0nMTgnXSB7IHdpZHRoOiAxOGVtOyB3aWR0aDogMThjaDsgfSIsCisJICBcICJpbnB1dFtzaXplPScxOSddIHsgd2lkdGg6IDE5ZW07IHdpZHRoOiAxOWNoOyB9IiwKKwkgIFwgImlucHV0W3NpemU9JzIwJ10geyB3aWR0aDogMjBlbTsgd2lkdGg6IDIwY2g7IH0iLAorCSAgXCAiI29uZUNoYXJXaWR0aCwgI29uZUVtV2lkdGgsICNvbmVJbnB1dFdpZHRoIHsgcGFkZGluZzogMDsgbWFyZ2luOiAwOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5OTlweDsgdmlzaWJpbGl0eTogaGlkZGVuOyB9IgorCSAgXCBdKQorICAgICsyMQorICAgIGZvciB3IGluIHJhbmdlKDUsIDEwMCwgNSkKKyAgICAgIGxldCBiYXNlID0gMC4wMSAqIHcKKyAgICAgIGNhbGwgYXBwZW5kKCcuJywgam9pbihtYXAocmFuZ2UoMSwyMCksICInLmVtJy53LicgaW5wdXRbc2l6ZT0nJycudjp2YWwuJycnXSB7IHdpZHRoOiAnLnN0cmluZyh2OnZhbCpiYXNlKS4nZW07IH0nIikpKQorICAgICAgKworICAgIGVuZGZvcgorICAgIGlmIHM6c2V0dGluZ3MucHJldmVudF9jb3B5ID1+IyAnZicKKyAgICAiIE1ha2UgdGhlIGN1cnNvciBzaG93IGFjdGl2ZSBmb2xkIGNvbHVtbnMgYXMgYWN0aXZlIGFyZWFzLCBhbmQgZW1wdHkgZm9sZAorICAgICIgY29sdW1ucyBhcyBub3QgaW50ZXJhY3RpdmUuCisgICAgICBjYWxsIGFwcGVuZCgnLicsIFsnaW5wdXQuRm9sZENvbHVtbiB7IGN1cnNvcjogcG9pbnRlcjsgfScsCisJICAgIFwgJ2lucHV0LkZvbGRDb2x1bW5bdmFsdWU9IiJdIHsgY3Vyc29yOiBkZWZhdWx0OyB9JworCSAgICBcIF0pCisgICAgICArMgorICAgIGVuZGlmCisgICAgIiBtYWtlIGxpbmUgbnVtYmVyIGNvbHVtbiBzaG93IGFzIG5vbi1pbnRlcmFjdGl2ZSBpZiBub3Qgc2VsZWN0YWJsZQorICAgIGlmIHM6c2V0dGluZ3MucHJldmVudF9jb3B5ID1+IyAnbicKKyAgICAgIGNhbGwgYXBwZW5kKCcuJywgJ2lucHV0LkxpbmVOciB7IGN1cnNvcjogZGVmYXVsdDsgfScpCisgICAgICArCisgICAgZW5kaWYKKyAgICAiIG1ha2UgZm9sZCB0ZXh0IGFuZCBsaW5lIG51bWJlciBjb2x1bW4gd2l0aGluIGZvbGQgdGV4dCBzaG93IGFzCisgICAgIiBub24taW50ZXJhY3RpdmUgaWYgbm90IHNlbGVjdGFibGUKKyAgICBpZiAoczpzZXR0aW5ncy5wcmV2ZW50X2NvcHkgPX4jICduJyB8fCBzOnNldHRpbmdzLnByZXZlbnRfY29weSA9fiMgJ3QnKSAmJiAhczpzZXR0aW5ncy5pZ25vcmVfZm9sZGluZworICAgICAgY2FsbCBhcHBlbmQoJy4nLCAnaW5wdXQuRm9sZGVkIHsgY3Vyc29yOiBkZWZhdWx0OyB9JykKKyAgICAgICsKKyAgICBlbmRpZgorICBlbmRpZgogZWxzZQogICBleGVjdXRlICclczo8Ym9keT46PGJvZHkgYmdjb2xvcj0iJyAuIHM6YmdjIC4gJyIgdGV4dD0iJyAuIHM6ZmdjIC4gJyI+XHI8Zm9udCBmYWNlPSInLiBzOmh0bWxmb250IC4nIj4nCiBlbmRpZgogCi0iIExpbmUgbnVtYmVyaW5nIGF0dHJpYnV0ZXMKLWlmIHM6c2V0dGluZ3MubnVtYmVyX2xpbmVzCi0gIGlmIHM6c2V0dGluZ3MudXNlX2NzcwotICAgIGV4ZWN1dGUgIm5vcm1hbCEgQVxuLmxuciB7ICIgLiBzOkNTUzEoaGxJRCgiTGluZU5yIikpIC4gIn1cZSIKLSAgZWxzZQotICAgIGV4ZWN1dGUgJyVzK148c3BhbiBjbGFzcz0ibG5yIj5cKFtePF0qXCk8L3NwYW4+KycgLiBzOkh0bWxPcGVuaW5nKGhsSUQoIkxpbmVOciIpKSAuICdcMScgLiBzOkh0bWxDbG9zaW5nKGhsSUQoIkxpbmVOciIpKSAuICcrZycKKyIgR2F0aGVyIGF0dHJpYnV0ZXMgZm9yIGFsbCBvdGhlciBjbGFzc2VzLiBEbyBkaWZmIGZpcnN0IHNvIHRoYXQgbm9ybWFsCisiIGhpZ2hsaWdodCBncm91cHMgYXJlIGluc2VydGVkIGJlZm9yZSBpdC4KK2lmIHM6c2V0dGluZ3MudXNlX2NzcworICBpZiBzOmRpZmZfbW9kZQorICAgIGNhbGwgYXBwZW5kKCcuJywgZmlsdGVyKG1hcChrZXlzKHM6ZGlmZnN0eWxlbGlzdCksICJzOmRpZmZzdHlsZWxpc3Rbdjp2YWxdIiksICd2OnZhbCAhPSAiIicpKQorICBlbmRpZgorICBpZiAhZW1wdHkoczpzdHlsZWxpc3QpCisgICAgY2FsbCBhcHBlbmQoJy4nLCBmaWx0ZXIobWFwKGtleXMoczpzdHlsZWxpc3QpLCAiczpzdHlsZWxpc3Rbdjp2YWxdIiksICd2OnZhbCAhPSAiIicpKQogICBlbmRpZgogZW5kaWYKIAotIiBHYXRoZXIgYXR0cmlidXRlcyBmb3IgYWxsIG90aGVyIGNsYXNzZXMKLWlmICFzOnNldHRpbmdzLm5vX3Byb2dyZXNzICYmICFlbXB0eShzOmlkbGlzdCkKLSAgbGV0IHM6cGdiID0gczpQcm9ncmVzc0JhcigiUHJvY2Vzc2luZyBjbGFzc2VzOiIsIGxlbihzOmlkbGlzdCksczpuZXd3aW4pCi1lbmRpZgotd2hpbGUgIWVtcHR5KHM6aWRsaXN0KQotICBsZXQgczphdHRyID0gIiIKLSAgbGV0IHM6aWQgPSByZW1vdmUoczppZGxpc3QsIDApCi0gIGxldCBzOmF0dHIgPSBzOkNTUzEoczppZCkKLSAgbGV0IHM6aWRfbmFtZSA9IHN5bklEYXR0cihzOmlkLCAibmFtZSIsIHM6d2hhdHRlcm0pCi0KLSAgIiBJZiB0aGUgY2xhc3MgaGFzIHNvbWUgYXR0cmlidXRlcywgZXhwb3J0IHRoZSBzdHlsZSwgb3RoZXJ3aXNlIERFTEVURSBhbGwKLSAgIiBpdHMgb2NjdXJlbmNlcyB0byBtYWtlIHRoZSBIVE1MIHNob3J0ZXIKLSAgaWYgczphdHRyICE9ICIiCi0gICAgaWYgczpzZXR0aW5ncy51c2VfY3NzCi0gICAgICBleGVjdXRlICJub3JtYWwhIEFcbi4iIC4gczppZF9uYW1lIC4gIiB7ICIgLiBzOmF0dHIgLiAifSIKLSAgICBlbHNlCi0gICAgICAiIHJlcGxhY2Ugc3BhbnMgb2YganVzdCB0aGlzIGNsYXNzIG5hbWUgd2l0aCBub24tQ1NTIHN0eWxlIG1hcmt1cAotICAgICAgZXhlY3V0ZSAnJXMrPHNwYW4gY2xhc3M9IicgLiBzOmlkX25hbWUgLiAnIj5cKFtePF0qXCk8L3NwYW4+KycgLiBzOkh0bWxPcGVuaW5nKHM6aWQpIC4gJ1wxJyAuIHM6SHRtbENsb3NpbmcoczppZCkgLiAnK2dlJwotICAgICAgIiBSZXBsYWNlIHNwYW5zIG9mIHRoaXMgY2xhc3MgbmFtZSBBTkQgYSBkaWZmIGNsYXNzIHdpdGggbm9uLUNTUyBzdHlsZQotICAgICAgIiBtYXJrdXAgc3Vycm91bmRpbmcgYSBzcGFuIG9mIGp1c3QgdGhlIGRpZmYgY2xhc3MuIFRoZSBkaWZmIGNsYXNzIHdpbGwKLSAgICAgICIgYmUgaGFuZGxlZCBsYXRlciBiZWNhdXNlIHdlIGtub3cgdGhhdCBpbmZvcm1hdGlvbiBpcyBhdCB0aGUgZW5kLgotICAgICAgZXhlY3V0ZSAnJXMrPHNwYW4gY2xhc3M9IicgLiBzOmlkX25hbWUgLiAnIFwoRGlmZlwlKEFkZFx8Q2hhbmdlXHxEZWxldGVcfFRleHRcKVwpIj5cKFtePF0qXCk8L3NwYW4+KycgLiBzOkh0bWxPcGVuaW5nKHM6aWQpIC4gJzxzcGFuIGNsYXNzPSJcMSI+XDI8L3NwYW4+JyAuIHM6SHRtbENsb3NpbmcoczppZCkgLiAnK2dlJwotICAgIGVuZGlmCi0gIGVsc2UKLSAgICBleGVjdXRlICclcys8c3BhbiBjbGFzcz0iJyAuIHM6aWRfbmFtZSAuICciPlwoW148XSpcKTwvc3Bhbj4rXDErZ2UnCi0gICAgZXhlY3V0ZSAnJXMrPHNwYW4gY2xhc3M9IicgLiBzOmlkX25hbWUgLiAnIFwoRGlmZlwlKEFkZFx8Q2hhbmdlXHxEZWxldGVcfFRleHRcKVwpIj5cKFtePF0qXCk8L3NwYW4+KzxzcGFuIGNsYXNzPSJcMSI+XDI8L3NwYW4+K2dlJwotICAgIGlmIHM6c2V0dGluZ3MudXNlX2NzcwotICAgICAgMTsvPFwvc3R5bGU+Ly0yCi0gICAgZW5kaWYKLSAgZW5kaWYKLQotICBpZiAhczpzZXR0aW5ncy5ub19wcm9ncmVzcwotICAgIGNhbGwgczpwZ2IuaW5jcigpCi0gICAgaWYgczpwZ2IubmVlZHNfcmVkcmF3Ci0gICAgICByZWRyYXdzdGF0dXMKLSAgICAgIGxldCBzOnBnYi5uZWVkc19yZWRyYXcgPSAwCi0gICAgICAiIFRPRE86IHNsZWVwIGhlcmUgdG8gc2hvdyB0aGUgcHJvZ3Jlc3MgYmFyLCBidXQgb25seSBpZiB0b3RhbCB0aW1lIHNwZW50Ci0gICAgICAiIHNvIGZhciBvbiB0aGlzIHN0ZXAgaXMgPCAxIHNlY29uZD8gVG9vIHNsb3cgZm9yIGJhdGNoIHJ1bnMgbGlrZSB0aGUgdGVzdAotICAgICAgIiBzdWl0ZSB0byBzbGVlcCBhbGwgdGhlIHRpbWUuIE1heWJlIHRoZXJlJ3Mgbm8gZ29vZCByZWFzb24gdG8gc2xlZXAgYXQKLSAgICAgICIgYWxsLgotICAgIGVuZGlmCi0gIGVuZGlmCi1lbmR3aGlsZQotCiAiIEFkZCBoeXBlcmxpbmtzCisiIFRPRE86IGFkZCBvcHRpb24gdG8gbm90IGRvIHRoaXM/IE1heWJlIGp1c3QgbWFrZSB0aGUgY29sb3IgdGhlIHNhbWUgYXMgdGhlCisiIHRleHQgaGlnaGxpZ2h0IGdyb3VwIG5vcm1hbGx5IGlzPwogJXMrXChodHRwc1w9Oi8vXFNcey19XClcKFwoWy4sOzp9XVw9XChcc1x8JFwpXClcfFtcXCInPD5dXHwmZ3Q7XHwmbHQ7XHwmcXVvdDtcKSs8YSBocmVmPSJcMSI+XDE8L2E+XDIrZ2UKIAogIiBUaGUgRFRECkBAIC0xMjAxLDE0ICsxNjg2LDE1IEBACiB1bmxldCBzOm9sZF9ldCBzOm9sZF9wYXN0ZSBzOm9sZF9pY29uIHM6b2xkX3JlcG9ydCBzOm9sZF90aXRsZSBzOm9sZF9zZWFyY2gKIHVubGV0IHM6b2xkX21hZ2ljIHM6b2xkX21vcmUgczpvbGRfZmRtIHM6b2xkX2ZlbiBzOm9sZF93aW5oZWlnaHQKIHVubGV0ISBzOm9sZF9pc3ByaW50Ci11bmxldCBzOndoYXR0ZXJtIHM6aWRsaXN0IHM6bG51bSBzOmVuZCBzOm1hcmdpbiBzOmZnYyBzOmJnYyBzOm9sZF93aW5maXhoZWlnaHQKLXVubGV0ISBzOmNvbCBzOmlkIHM6YXR0ciBzOmxlbiBzOmxpbmUgczpuZXcgczpleHBhbmRlZHRhYiBzOmNvbmNlYWxpbmZvCit1bmxldCBzOndoYXR0ZXJtIHM6c3R5bGVsaXN0IHM6ZGlmZnN0eWxlbGlzdCBzOmxudW0gczplbmQgczptYXJnaW4gczpmZ2MgczpiZ2MgczpvbGRfd2luZml4aGVpZ2h0Cit1bmxldCEgczpjb2wgczppZCBzOmF0dHIgczpsZW4gczpsaW5lIHM6bmV3IHM6ZXhwYW5kZWR0YWIgczpjb25jZWFsaW5mbyBzOmRpZmZfbW9kZQogdW5sZXQhIHM6b3Jnd2luIHM6bmV3d2luIHM6b3JnYnVmbnIgczppZHggczppIHM6b2Zmc2V0IHM6bHMgczpvcmlnd2luX3N0bAogdW5sZXQhIHM6bmV3d2luX3N0bCBzOmN1cnJlbnRfc3ludGF4CiBpZiAhdjpwcm9maWxpbmcKICAgZGVsZnVuYyBzOkh0bWxDb2xvcgogICBkZWxmdW5jIHM6SHRtbEZvcm1hdAogICBkZWxmdW5jIHM6Q1NTMQorICBkZWxmdW5jIHM6QnVpbGRTdHlsZVdyYXBwZXIKICAgaWYgIXM6c2V0dGluZ3MudXNlX2NzcwogICAgIGRlbGZ1bmMgczpIdG1sT3BlbmluZwogICAgIGRlbGZ1bmMgczpIdG1sQ2xvc2luZwpAQCAtMTIyNiw4ICsxNzEyLDggQEAKIGVuZGlmCiAKIHVubGV0ISBzOm5ld19sbnVtIHM6ZGlmZmF0dHIgczpkaWZmZmlsbGNoYXIgczpmb2xkZmlsbGNoYXIgczpIdG1sU3BhY2UKLXVubGV0ISBzOkxlYWRpbmdTcGFjZSBzOkh0bWxFbmRsaW5lIHM6Zmlyc3Rmb2xkIHM6Zm9sZGNvbHVtbgotdW5sZXQgczpmb2xkc3RhY2sgczphbGxmb2xkcyBzOmZvbGRJZCBzOm51bWNvbCBzOnNldHRpbmdzCit1bmxldCEgczpMZWFkaW5nU3BhY2UgczpIdG1sRW5kbGluZSBzOmZpcnN0Zm9sZCBzOm51bWNvbCBzOmZvbGRjb2x1bW4KK3VubGV0IHM6Zm9sZHN0YWNrIHM6YWxsZm9sZHMgczpmb2xkSWQgczpzZXR0aW5ncwogCiBsZXQgJmNwbyA9IHM6Y3BvX3NhdgogdW5sZXQhIHM6Y3BvX3NhdgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaGVscC52aW0gYi9ydW50aW1lL3N5bnRheC9oZWxwLnZpbQppbmRleCA4ZDg1ZDAyLi5hZjk3NTQzIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9oZWxwLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9oZWxwLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOglWaW0gaGVscCBmaWxlCiAiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIChCcmFtQHZpbS5vcmcpCi0iIExhc3QgQ2hhbmdlOgkyMDEyIE1heSAxOAorIiBMYXN0IENoYW5nZToJMjAxMiBKdWwgMTYKIAogIiBRdWl0IHdoZW4gYSAoY3VzdG9tKSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKIGlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCkBAIC0xMiw4ICsxMiw4IEBACiBzZXQgY3BvJnZpbQogCiBzeW4gbWF0Y2ggaGVscEhlYWRsaW5lCQkiXlstQS1aIC5dWy1BLVowLTkgLigpXSpbIFx0XVwrXCoibWU9ZS0xCi1zeW4gbWF0Y2ggaGVscFNlY3Rpb25EZWxpbQkiXj1cezMsfS4qPT09JCIKLXN5biBtYXRjaCBoZWxwU2VjdGlvbkRlbGltCSJeLVx7Myx9LiotLSQiCitzeW4gbWF0Y2ggaGVscFNlY3Rpb25EZWxpbQkiXj09PS4qPT09JCIKK3N5biBtYXRjaCBoZWxwU2VjdGlvbkRlbGltCSJeLS0tLiotLSQiCiBzeW4gcmVnaW9uIGhlbHBFeGFtcGxlCQltYXRjaGdyb3VwPWhlbHBJZ25vcmUgc3RhcnQ9IiA+JCIgc3RhcnQ9Il4+JCIgZW5kPSJeW14gXHRdIm1lPWUtMSBlbmQ9Il48IgogaWYgaGFzKCJlYmNkaWMiKQogICBzeW4gbWF0Y2ggaGVscEh5cGVyVGV4dEp1bXAJIlxcXEA8IXxbXiIqfF1cK3wiIGNvbnRhaW5zPWhlbHBCYXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3N2bi52aW0gYi9ydW50aW1lL3N5bnRheC9zdm4udmltCmluZGV4IGZjMGUyMTEuLjgzODAzZTMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L3N2bi52aW0KKysrIGIvcnVudGltZS9zeW50YXgvc3ZuLnZpbQpAQCAtMiwxNCArMiwxNSBAQAogIiBMYW5ndWFnZTogICAgIFN1YnZlcnNpb24gKHN2bikgY29tbWl0IGZpbGUKICIgTWFpbnRhaW5lcjogICBEbWl0cnkgVmFzaWxpZXYgPGRpbWEgYXQgaGxhYnMgZG90IG9yZz4KICIgVVJMOiAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vaGRpbWEvdmltLXNjcmlwdHMvYmxvYi9tYXN0ZXIvc3ludGF4L3N2bi52aW0KLSIgTGFzdCBDaGFuZ2U6ICAyMDEyLTA0LTE1CisiIExhc3QgQ2hhbmdlOiAgMjAxMi0wNy0yMQogIiBGaWxlbmFtZXM6ICAgIHN2bi1jb21taXQqLnRtcAotIiBWZXJzaW9uOiAgICAgIDEuOAorIiBWZXJzaW9uOiAgICAgIDEuOQogCiAiIENvbnRyaWJ1dG9yczoKICIgICBTdGVmYW5vIFphY2NoaXJvbGkKICIgICBBLiBTLiBCdWRkZW4KICIgICBNeWsgVGF5bG9yCisiICAgSW5nbyBLYXJrYXQKIAogIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMuCiAiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkLgpAQCAtMTksNyArMjAsOSBAQAogICBmaW5pc2gKIGVuZGlmCiAKLXN5biByZWdpb24gc3ZuUmVnaW9uICAgIHN0YXJ0PSJeLS0uKi0tJCIgZW5kPSJcJSQiIGNvbnRhaW5zPUFMTCBjb250YWlucz1ATm9TcGVsbAorc3luIHJlZ2lvbiBzdm5UZXh0ICAgICAgc3RhcnQ9IlwlXiIgZW5kPSJeLS0uKi0tJCJtZT1zLTEgY29udGFpbnM9QFNwZWxsCisKK3N5biByZWdpb24gc3ZuUmVnaW9uICAgIHN0YXJ0PSJeLS0uKi0tJCIgZW5kPSJcJSQiIGNvbnRhaW5zPUFMTAogc3luIG1hdGNoIHN2blJlbW92ZWQgICAgIl5EICAgIC4qJCIgY29udGFpbmVkCiBzeW4gbWF0Y2ggc3ZuUmVuYW1lZCAgICAiXlJbIE1dWyBVXVsgK10gLiokIiBjb250YWluZWQKIHN5biBtYXRjaCBzdm5BZGRlZCAgICAgICJeQVsgTV1bIFVdWyArXSAuKiQiIGNvbnRhaW5lZApkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy9lZm1fcGVybC5wbCBiL3J1bnRpbWUvdG9vbHMvZWZtX3BlcmwucGwKaW5kZXggNTcwZDZlNy4uMWFhYjJkNCAxMDA3NTUKLS0tIGEvcnVudGltZS90b29scy9lZm1fcGVybC5wbAorKysgYi9ydW50aW1lL3Rvb2xzL2VmbV9wZXJsLnBsCkBAIC0zLDcgKzMsNyBAQAogIyB2aW1wYXJzZS5wbCAtIFJlZm9ybWF0cyB0aGUgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIFBlcmwgaW50ZXJwcmV0ZXIgZm9yIHVzZQogIyB3aXRoIHRoZSBxdWlja2ZpeCBtb2RlIG9mIFZpbQogIwotIyBDb3B5cmlnaHQgKKkpIDIwMDEgYnkgSvZyZyBaaWVmbGUgPGpvZXJnLnppZWZsZUBnbXguZGU+CisjIENvcHlyaWdodCAoYykgMjAwMSBieSBKb2VyZyBaaWVmbGUgPGpvZXJnLnppZWZsZUBnbXguZGU+CiAjIFlvdSBtYXkgdXNlIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCiAjCiAjIFVzYWdlOiBwdXQgb25lIG9mIHRoZSB0d28gY29uZmlndXJhdGlvbnMgYmVsb3cgaW4geW91ciB+Ly52aW1yYyAod2l0aG91dCB0aGUK