LyoKICogIE5vdGVwYWQgKERhbmlzaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5OCBIZW5yaWsgT2xzZW4gPGhlbnJpa0BpYWVzdGUuZGs+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19EQU5JU0gsIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZGaWxlZiIgewogIE1FTlVJVEVNICImTnkuLi4iLCAgICAgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAixSZiblx0RW50ZXIiLCAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImR2VtIiwgICAgICAgICAgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIkdlbSBzbyZtLi4uIiwgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSAiJlVkc2tyaXYiLCAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiU2lkZSZvcHPmdG5pbmcuLi4iLCBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICImSW5kc3RpbCBwcmludGVyLi4uIiwgICAgICAgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFmc2x1dCIsICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJlJlZGlnZXIiIHsKICBNRU5VSVRFTSAiJkZvcnRyeWRcdEN0cmwrWiIsICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImS2xpcFx0Q3RybCtYIiwgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiSyZvcGllclx0Q3RybCtDIiwgICBDTURfQ09QWQogIE1FTlVJVEVNICJT5nQgJmluZFx0Q3RybCtWIiwgIENNRF9QQVNURQogIE1FTlVJVEVNICImU2xldFx0RGVsIiwgICAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiTWFya2VyICZhbHQiLCAgICAgICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImRGF0by90aWRcdEY1IiwgICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQXV0b21hdGlzayAmbGluamVza2lmdCIsICAgIENNRF9XUkFQCiB9ClBPUFVQICImU/hnIiB7CiAgTUVOVUlURU0gIiZT+GcuLi4iLCAgICAgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICImRmluZCBu5nN0ZVx0RjMiLCAgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkhq5mxwIiB7CiAgTUVOVUlURU0gIiZJbmRob2xkIiwgICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJlP4ZyBlZnRlciBoauZscCBvbS4uLiIsICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImQnJ1ZyBhZiBIauZscCIsICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiJk9tIE5vdGVzYmxvay4uLiIgewogICBNRU5VSVRFTSAiJkxpY2VucyIsICAgICAgICAgIENNRF9MSUNFTlNFCiAgIE1FTlVJVEVNICImTk8gV0FSUkFOVFkiLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImT20gV0lORSIsICAgICAgICAgQ01EX0FCT1VUX1dJTkUKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIkhlbHYiCkNBUFRJT04gIlNpZGVvcHPmdG5pbmciCnsKTFRFWFQgICAgIiZTaWRlaG92ZWQ6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiU2lkZSZmb2Q6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQzLCAgICAgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIk1hcmdlbmVyOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJlZlbnN0cmU6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZUb3A6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZI+GpyZToiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkJ1bmQ6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAweDE1MSwgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsbGVyIiwgICAgIDB4MTUyLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGrmbHAiLCAgICAgICAweDE1MywgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQYWdlICZzIiAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgICAgICAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgICAgICAgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm90ZXNibG9rIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkVKTCIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFEVkFSU0VMIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24iCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGlra2UtbmF2bmdpdmV0KSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIGZpbGVyICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIlRla3N0IGZpbGVyICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gJyVzJyBlciBmb3Igc3RvciB0aWwgTm90ZXNibG9rLiBcClxuQnJ1ZyBlbiBhbmRlbiBlZGl0b3IgdGlsIGF0IHJlZGlnZXJlIGZpbGVuLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR1IGhhciBpa2tlIHNrcmV2ZXQgbm9nZXQgdGVrc3QuIFwKXG5Ta3JpdiBub2dldCB0ZWtzdCwgb2cgcHL4diBz5SBpZ2VuIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZSAnJXMnXG5kb2VzIG5vdCBleGlzdFxuXG4gXApEbyB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZmlsZSA/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZSAnJXMnXG5oYXMgYmVlbiBtb2RpZmllZFxuXG4gXApXb3VsZCB5b3UgbGlrZSB0byBzYXZlIHRoZSBjaGFuZ2VzID8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthbiBpa2tlIGZpbmRlICclcycuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIkRlciBlciBpa2tlIG5vayBodWtvbW1lbHNlIHRpbCBhdCB1ZGb4cmUgXApkZW5uZSBvcGVyYXRpb24uIFxuQWZzbHV0IGV0IGVsbGVyIGZsZXJlIGFrdGl2ZSBwcm9ncmFtbWVyIGZvciBhdCBmcmln+HJlIFwKaHVrb21tZWxzZSwgb2cgcHL4diBz5SBpZ2VuLiIKCn0K