LyoKICogIE5vdGVwYWQgKFRoYWkgUmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDMgSm9uIEdyaWZmaXRocwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1RIQUksIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIuG/6cEiIHsKICBNRU5VSVRFTSAiysPp0qfjy8HoXHRDdHJsK04iLCAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICLgu9S0Li4uXHRDdHJsK08iLCAgIENNRF9PUEVOCiAgTUVOVUlURU0gIrrRubfXoVx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIrrRubfXoeC757kuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICK+1MG+7Fx0Q3RybCtQIiwgICAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiu8PRuuG16KfLuenSLi4uIiwgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiu8PRuuG16KfgpMPX6M2nvtTBvuwuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLNzaEiLCAgICAgICAgICAgICBDTURfRVhJVAogfQogUE9QVVAgIuGh6eSiIiB7CiAgTUVOVUlURU0gIuDD1cKhpNe5XHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAitdG0XHRDdHJsK1giLCAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAitdG0xc2hXHRDdHJsK0MiLCAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAix9KnXHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAixbpcdERlbCIsICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLgxdfNobfR6afLwbRcdEN0cmwrQSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIsfRubfV6C9cdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLL6M26w8O30bTC0sciLCAgQ01EX1dSQVAKICBNRU5VSVRFTSAiw9m74bq6tNHHzdGhycMuLi4iLCAgICAgICAgICBDTURfRk9OVAogfQogUE9QVVAgIqTRucvSIiB7CiAgTUVOVUlURU0gIqTpucvSXHRDdHJsK0YiLCAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAipOm5y9K16M3ku1x0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9CiBQT1BVUCAiqujHwuDLxdXNIiB7CiAgTUVOVUlURU0gIuC51+nNy9IiLCAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIqTpucvSLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICLgodXowseh0bqq6MfC4MvF1c0iLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICLD0sLF0ODN1cK0IiB7CiAgIE1FTlVJVEVNICLjus252K3StS4uLiIsIENNRF9MSUNFTlNFCiAgIE1FTlVJVEVNICLkwejB1SBXQVJSQU5UWS4uLiIsIENNRF9OT19XQVJSQU5UWQogICBNRU5VSVRFTSAi4KHV6MLHodG6IFdpbmUuLi4gIiwgQ01EX0FCT1VUX1dJTkUKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiu8PRuuG16KfLuenSIgp7CkxURVhUICAgICLL0cc6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZGb290ZXI6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICKizbqhw9C00sk6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICKj6dLCOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICK6uToiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICKix9I6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICLF6NKnOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIrWhxaciLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICLCoeDF1KEiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIqrox8Lgy8XVzSIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAiy7np0iAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAiTm90ZXBhZCIKU1RSSU5HX0VSUk9SLCAgICAgICAgICKkx9LBu9S0IgpTVFJJTkdfV0FSTklORywgICAgICAgIqTt0rXXzbkiClNUUklOR19JTkZPLCAgICAgICAgICAiw9LCxdDgzdXCtCIKClNUUklOR19VTlRJVExFRCwgICAgICAi5MHooe3Sy7m0qtbozSIKClNUUklOR19BTExfRklMRVMsICAgICAgICK32KHhv+nBICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAi4b/pwbXt0sPSICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAi4b/pwSAnJXMnIOPLrejgodS55LsiClNUUklOR19OT1RFWFQsICAgICKk2LPkwejjtOCi1cK5zdDkw1xuocPYs9LFzafjy8HoIgpTVFJJTkdfRE9FU05PVEVYSVNULCAi5MHovrrhv+nBICclcycgt9XotenNp6HSw+C71LRcbqTYs7Xpzaeh0sPKw+nSp+PLwejkweggPyIKU1RSSU5HX05PVFNBVkVELCAgIsHVodLD4LvF1ejCueG7xaeh0brgzaHK0sNcblxuJyVzJ1xuXG6k2LO16c2nodLDutG5t9ahwdG5y8PXzeTB6CA/IgpTVFJJTkdfTk9URk9VTkQsICAi5MHovrqi6c2kx9LBICclcycgt9XotenNp6HSw6TpucvSIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgIqTH0sGo7dLLwbRcbqHD2LPSxc2n48vB6CIKCn0K