LyoKICogIE5vdGVwYWQgKEZyZW5jaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBUcmFuc2xhdGlvbiBieSBMYXVyZW50IEJ1ZmZsZXIgPGxhdXJlbnRAYmx1ZXdpbi5jaD4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKiAgQ29weXRpZ2h0IDIwMDkgSm9uYXRoYW4gRXJuc3QgPGpvbmF0aGFuQGVybnN0ZmFtaWx5LmNoPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAibm90ZXBhZF9yZXMuaCIKCkxBTkdVQUdFIExBTkdfRlJFTkNILCBTVUJMQU5HX05FVVRSQUwKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImRmljaGllciIgewogIE1FTlVJVEVNICImTm91dmVhdVx0Q3RybCtOIiwgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICImT3V2cmlyLi4uXHRDdHJsK08iLCAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZFbnJlZ2lzdHJlclx0Q3RybCtTIiwgQ01EX1NBVkUKICBNRU5VSVRFTSAiRW5yZWdpc3RyZXIgJnNvdXMuLi4iLCBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJJbSZwcmltZXIuLi5cdEN0cmwrUCIsICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIiZNaXNlIGVuIHBhZ2UuLi4iLCAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiJkNvbmZpZ3VyYXRpb24gZGUgbCdpbXByaW1hbnRlLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlF1aXR0ZXIiLCAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiySZkaXRpb24iIHsKICBNRU5VSVRFTSAiJkFubnVsZXJcdEN0cmwrWiIsICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJDbyZ1cGVyXHRDdHJsK1giLCAgIENNRF9DVVQKICBNRU5VSVRFTSAiJkNvcGllclx0Q3RybCtDIiwgICBDTURfQ09QWQogIE1FTlVJVEVNICJDJm9sbGVyXHRDdHJsK1YiLCAgIENNRF9QQVNURQogIE1FTlVJVEVNICImRWZmYWNlclx0RGVsIiwgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiVG91dCAmc+lsZWN0aW9ubmVyXHRDdHJsK0EiLCBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImSGV1cmUvRGF0ZVx0RjUiLCAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlJldG91ciDgIGxhIGxpZ25lIiwgQ01EX1dSQVAKICBNRU5VSVRFTSAiJlBvbGljZS4uLiIsICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJlJlY2hlcmNoZXIiIHsKICBNRU5VSVRFTSAiJlJlY2hlcmNoZXIuLi5cdEN0cmwrRiIsIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJlN1aXZhbnRcdEYzIiwgICAgICBDTURfU0VBUkNIX05FWFQKICBNRU5VSVRFTSAiJlJlbXBsYWNlci4uLlx0Q3RybCtIIiwgQ01EX1JFUExBQ0UKIH0KUE9QVVAgIkFpZCZlIiB7CiAgTUVOVUlURU0gIiZTb21tYWlyZSIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJlJlY2hlcmNoZXIuLi4iLCAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJlV0aWxpc2VyIGwnYWlkZSIsICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsAgJnByb3BvcyBkdSBCbG9jLW5vdGVzIiwgQ01EX0hFTFBfQUJPVVRfTk9URVBBRAogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIk1pc2UgZW4gcGFnZSIKewpMVEVYVCAgICAiJkVuLXTqdGU6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZQaWVkIGRlIHBhZ2WgOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmdlc6AobWlsbGlt6HRyZSk6IiwgIDB4MTQ0LCAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZHYXVjaGWgOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSGF1dKA6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkRyb2l0ZaA6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImQmFzoDoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFpZCZlIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiUGFnZSAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9jLW5vdGVzIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRVJSRVVSIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVRURU5USU9OIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24iCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHNhbnMtdGl0cmUpIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdXMgZmljaGllcnMgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWNoaWVycyB0ZXh0ZSAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxlIGZpY2hpZXIgJyVzJyBlc3QgdHJvcCBncmFuZCBwb3VyIGxlIGJsb2Mtbm90ZXMuXG4gXApWZXVpbGxleiB1dGlsaXNlciB1biBhdXRyZSDpZGl0ZXVyLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZvdXMgbidhdmV6IHBhcyBlbnRy6SBkZSB0ZXh0ZS4gXApWZXVpbGxleiB0YXBlciBxdWVscXVlIGNob3NlIGV0IHJlY29tbWVuY2VyIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGUgZmljaGllciAnJXMnXG5uJ2V4aXN0ZSBwYXMuXG5cbiBcClZvdWxlei12b3VzIGNy6WVyIHVuIG5vdXZlYXUgZmljaGllcqA/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGUgZmljaGllciAnJXMnXG5hIOl06SBtb2RpZmnpXG5cbiBcClZvdWxlei12b3VzIGVucmVnaXN0cmVyIHZvcyBtb2RpZmljYXRpb25zoD8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIG5vbiB0cm91dukuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFzIGFzc2V6IGRlIG3pbW9pcmUgcG91ciBjb21wbOl0ZXIgY2V0dGUgXAp04mNoZS5cbkZlcm1leiB1bmUgb3UgcGx1c2lldXJzIGFwcGxpY2F0aW9ucyBwb3VyIGxpYulyZXJcblwKZGUgbGEgbeltb2lyZS4iCgp9Cg==