LyoKICogIE5vdGVwYWQgKER1dGNoIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAyMDAzIEhhbnMgTGVpZGVra2VyCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRFVUQ0gsIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZCZXN0YW5kIiB7CiAgTUVOVUlURU0gIiZOaWV1dy4uLiIsCQkgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiJk9wZW5lblx0Q3RybCtPIiwJICAgICBDTURfT1BFTgogIE1FTlVJVEVNICJPJnBzbGFhblx0Q3RybCtwIiwJICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJPcHMmbGFhbiBhbHMuLi4iLAkgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZmRydWtrZW4iLAkgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJQYWdpbmEtaW4mc3RlbGxpbmcuLi4iLCAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiUHJpbnRlcmluc3RlbGxpbmdlbi4uLiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZnNsdWl0ZW4iLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiQmUmd2Vya2VuIiB7CiAgTUVOVUlURU0gIiZPbmdlZGFhbiBtYWtlblx0Q3RybCtaIiwgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiSyZuaXBwZW5cdEN0cmwrWCIsICAgICAgICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZLb3Bp63Jlblx0Q3RybCtDIiwgICAgICAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiJlBsYWtrZW5cdEN0cmwrViIsICAgICAgICAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJlZlcndpamRlcmVuXHREZWwiLCAgICAgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBbGxlcyBzZWxlY3RlcmVuXHRDdHJsK0EiLCAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiVGlqZC8mZGF0dW1cdEY1IiwgICAgICAgICAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkEmdXRvbWF0aXNjaGUgdGVydWdsb29wIiwgICAgQ01EX1dSQVAKICBNRU5VSVRFTSAiJkxldHRlcnR5cGUgaW5zdGVsbGVuLi4uIiwgICBDTURfRk9OVAogfQpQT1BVUCAiJlpvZWtlbiIgewogIE1FTlVJVEVNICImWm9la2VuXHRDdHJsK1oiLCAgICAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZWb2xnZW5kZSB6b2VrZW5cdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkhlbHAiIHsKICBNRU5VSVRFTSAiJkhlbHAtb25kZXJ3ZXJwZW4iLCAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJlpvZWtlbi4uLiIsICAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZIdWxwIGJpaiBIZWxwIiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiSW5mJm8uLi4iIHsKICAgTUVOVUlURU0gIiZMaWNlbnRpZSIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIiZHRUVOIEdBUkFOVElFIiwgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImT3ZlciBXaW5lIiwgICAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIlBhZ2luYS1pbnN0ZWxsaW5nIgp7CkxURVhUICAgICImS29wdGVrc3Q6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlZvZXR0ZWtzdDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmdlczoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIkxpJm5rczoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkJvdmVuOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsKi8gICAgMHgxNEEsICAgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUmVjaHRzOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCovICAweDE0RCwgICAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImT25kZXI6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgIElET0ssICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXJlbiIsIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGVscCIsICAgICBJREhFTFAsICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQYWdpbmEgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICAgICAgICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICAgICAgICAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLbGFkYmxvayIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZPVVQiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXQUFSU0NIVVdJTkciClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hdGllIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihuYWFtbG9vcykiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSBiZXN0YW5kZW4gKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICJUZWtzdGJlc3RhbmRlbiAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhldCBiZXN0YW5kICclcycgaXMgdGUgZ3Jvb3Qgdm9vciBLbGFkYmxvay5cbiBcCkdlYnJ1aWsgZWVuIGFuZGVyZSBlZGl0b3IuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVSBoZWVmdCBnZWVuIHRla3N0IGluZ2V2b2VyZC4gXApcblR5cGUgdXcgdGVrc3QgZW4gcHJvYmVlciBoZXQgbm9nbWFhbHMiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZXQgYmVzdGFuZCAnJXMnXG5iZXN0YWF0IG5pZXRcblxuIFwKV2lsdCB1IGVlbiBuaWV1dyBiZXN0YW5kIG1ha2VuPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhldCBiZXN0YW5kICclcydcbmlzIGdld2lqemlnZFxuXG4gXApXaWx0IHUgZGUgd2lqemlnaW5nZW4gb3BzbGFhbj8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGthbiBuaWV0IHdvcmRlbiBnZXZvbmRlbi4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbnZvbGRvZW5kZSBnZWhldWdlbi4gXApcblNsdWl0IGVlbiBvZiBtZWVyIGFwcGxpY2F0aWVzIG9tIGRlIGhvZXZlZWxoZWlkIFxuYmVzY2hpa2JhYXIgZ2VoZXVnZW4gdGUgdmVyZ3JvdGVuLiIKCn0K