LyoKICogd2luZWNvbnNvbGUgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiJs/w4OLq4CIKSURTX0RFRkFVTFQsCQkiz+4gJvPs7uv34O3o/iIKSURTX1BST1BFUlRJRVMsCQki0Sbi7unx8uLgIgpJRFNfTUFSSywJCSImwvvk5evo8vwiCklEU19DT1BZLAkJIibK7u/o8O7i4PL8IgpJRFNfUEFTVEUsCQkiJsLx8uDi6PL8IgpJRFNfU0VMRUNUQUxMLAkJIsL75OXr6PL8IOIm8eUiCklEU19TQ1JPTEwsCQkiz/Du6ibw8/Lo8vwiCklEU19TRUFSQ0gsCQkiz+4m6PHqIgpJRFNfRk5UX0RJU1BMQVksCSLK4Obk++kg8ejs4u7rICVsZCDv6Orx5evl6SDiIPjo8Ojt8yDoICVsZCDv6Orx5evl6SDiIOL78e7y8yIKSURTX0ZOVF9QUkVWSUVXXzEsCSLd8u4g8uXx8iIKSURTX0ZOVF9QUkVWSUVXXzIsCSJUaGlzIGlzIGEgdGVzdCIKSURTX0RMR19USVRfREVGQVVMVCwgICAgICLN4PHy8O7p6uAgLSDT8fLg7e7i6ugg7+4g8+zu6/fg7ej+IgpJRFNfRExHX1RJVF9DVVJSRU5ULCAgICAgIs3g8fLw7unq4CAtINLl6vP56OUg8/Hy4O3u4uroIgpJRFNfRExHX1RJVF9FUlJPUiwgICAgICLO+Ojh6uAg7eDx8vDu6eroIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsICAgICAi0ODn7OXwIOHz9OXw4CD96vDg7eAg5O7r5uXtIOH78vwg7eUg7OXt5eUg4fP05fDgIO7q7eAiCkVORAoKSUREX09QVElPTiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiDO7/bo6CAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggItDg5+zl8CDq8/Dx7vDgIiwgLTEsIDEwLCAxMSwgNjAsIDU0LCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICImzODr5e386ujpIiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNTIsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIibR8OXk7ejpIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDUyLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImwe7r/Pju6SIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDUyLCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICLT7/Dg4uvl7ejlIiwgLTEsIDc1LCAxMSwgMTIzLCA1NCwgQlNfR1JPVVBCT1gKCUxURVhUICLC8e/r++Lg/vnl5SDs5e3+IiwgLTEsIDc5LCAyMywgNTAsIDIwCglBVVRPQ0hFQ0tCT1ggIibRdHJsIiwgSURDX09QVF9DT05GX0NUUkwsIDE0NCwgMjMsIDUyLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICJTJmhpZnQiLCBJRENfT1BUX0NPTkZfU0hJRlQsIDE0NCwgMzMsIDUyLCAxMCwgV1NfVEFCU1RPUAoJTFRFWFQgIsH78fLw7uUg8OXk4Ory6PDu4uDt6OUiLCAtMSwgNzksIDQzLCA2MCwgMjAKCUFVVE9DSEVDS0JPWCAiJuLq6/736PL8IiwgSURDX09QVF9RVUlDS19FRElULCAxNDQsIDUxLCA1MiwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiyPHy7vDo/yDq7uzg7eQiLCAtMSwgMTAsIDY3LCAxODksIDM1LCBCU19HUk9VUEJPWAoJTFRFWFQgIibI8fLu8Oj/IOru7ODt5DoiLCAtMSwgMTQsIDc3LCA3OCwgMTgKCUVESVRURVhUIElEQ19PUFRfSElTVF9TSVpFLCA4MiwgNzksIDMxLCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfT1BUX0hJU1RfU0laRV9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglBVVRPQ0hFQ0tCT1ggIibT5ODr//L8IOTz4evo8PP++ejl8f8iLCBJRENfT1BUX0hJU1RfTk9ET1VCTEUsIDEyMCwgNzcsIDcwLCAxOCwgV1NfVEFCU1RPUHxCU19NVUxUSUxJTkUKfQoKSUREX0ZPTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIg2PDo9PIgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICIm2PDo9PIiLCAtMSwgNSwgNSwgMjQsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX0ZPTlQsIDUsIDE4LCA5MCwgNDIsIExCU19TT1JUfFdTX1ZTQ1JPTEwKCUxURVhUICIm1uLl8iIsIC0xLCAxMDAsIDUsIDUwLCA4CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0ZHLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDE4LCA0OCwgMTYKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfQkssICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgNDAsIDQ4LCAxNgoJTFRFWFQgIibQ4Ofs5fAiLCAtMSwgMTU4LCA1LCA0MCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfU0laRSwgMTU4LCAxOCwgNDAsIDYwLCBXU19WU0NST0xMCglDT05UUk9MICIiLCBJRENfRk5UX1BSRVZJRVcsICJXaW5lQ29uRm9udFByZXZpZXciLCAwTCwgNSwgNjAsIDEwOSwgNDAKCUxURVhUICIiLCBJRENfRk5UX0ZPTlRfSU5GTywgMTI4LCA3MSwgODAsIDI1Cn0KCklERF9DT05GSUcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgzeDx8vDu6ergICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAix+7t4CDh8/Tl8OAiLCAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIibY6PDo7eAgOiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA2OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICImwvvx7vLgIDoiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAi0ODn7OXwIO7q7eAiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAi2Cbo8Ojt4CA6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiwib78e7y4CA6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNjgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAix+Di5fD45e3o5SDv8O7j8ODs7PsiLCAtMSwgMTE1LCAxMSwgODUsIDQyLCBCU19HUk9VUEJPWAoJQVVUT0NIRUNLQk9YICImx+Dq8Pvi4PL8IOru7fHu6/wiLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDc1LCAyMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICLQ5eTg6vLo8O7i4O3o5SIsIC0xLCAxMTUsIDU1LCA4NSwgNDIKCUNPTUJPQk9YIElEQ19DTkZfRURJVElPTl9NT0RFLCAxMTksIDY5LCA3NSwgMjAsIENCU19EUk9QRE9XTkxJU1R8V1NfVlNDUk9MTHxXU19UQUJTVE9QCn0KCklERF9TQVZFX1NFVFRJTkdTIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDIwLCAyMCwgMTk4LCA3MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gIs/g8ODs5fLw+yDq7u3x7uvoIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUFVVE9SQURJT0JVVFRPTiAiyOfs5e3o8vwg8u7r/OruIPLl6vP58/4g8eXx8ej+IiwgSURDX1NBVl9TRVNTSU9OLCAxNCwgMTUsIDE3MCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAi0e718ODt6PL8IP3y6CDt4PHy8O7p6ugg5Ov/IOHz5PP56PUg8eXx8ejpIiwgSURDX1NBVl9TQVZFLCAxNCwgMjcsIDE3MCwgMTAsIFdTX1RBQlNUT1AKCglQVVNIQlVUVE9OICJPSyIsIElET0ssIDQwLCA1MCwgNTAsIDE0CglQVVNIQlVUVE9OICLO8uzl7eAiLCBJRENBTkNFTCwgMTEwLCA1MCwgNTAsIDE0Cn0K