LyoKICogd2luZWNvbnNvbGUgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiJs/w4OLq4CIKSURTX0RFRkFVTFQsCQkiz+4gJvPs7uv34O3o/iIKSURTX1BST1BFUlRJRVMsCQki0Sbi7unx8uLgIgpJRFNfTUFSSywJCSImwvvk5evo8vwiCklEU19DT1BZLAkJIibK7u/o8O7i4PL8IgpJRFNfUEFTVEUsCQkiJsLx8uDi6PL8IgpJRFNfU0VMRUNUQUxMLAkJIsL75OXr6PL8IOIm8eUiCklEU19TQ1JPTEwsCQkiz/Du6ibw8/Lo8vwiCklEU19TRUFSQ0gsCQkiz+4m6PHqIgpJRFNfRk5UX0RJU1BMQVksCSLK4Obk++kg8ejs4u7rICVsZCDv6Orx5evl6SDiIPjo8Ojt8yDoICVsZCDv6Orx5evl6SDiIOL78e7y8yIKSURTX0ZOVF9QUkVWSUVXXzEsCSLd8u4g8uXx8iIKSURTX0ZOVF9QUkVWSUVXXzIsCSJUaGlzIGlzIGEgdGVzdCIKSURTX0RMR19USVRfREVGQVVMVCwgICAgICLN4PHy8O7p6uAgLSDT8fLg7e7i6ugg7+4g8+zu6/fg7ej+IgpJRFNfRExHX1RJVF9DVVJSRU5ULCAgICAgIs3g8fLw7unq4CAtINLl6vP56OUg8/Hy4O3u4uroIgpJRFNfRExHX1RJVF9FUlJPUiwgICAgICLO+Ojh6uAg7eDx8vDu6eroIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsICAgICAi0ODn7OXwIOHz9OXw4CD96vDg7eAg5O7r5uXtIOH78vwg7eUg7OXt5eUg4fP05fDgIO7q7eAiCgpJRFNfQ01EX0lOVkFMSURfRVZFTlRfSUQgICAid2luZWNvbnNvbGU6IM3lIOLl8O3uIPPq4Ofg7SDq7uQg8e7h+/Lo/1xuIgpJRFNfQ01EX0lOVkFMSURfQkFDS0VORCAgICAid2luZWNvbnNvbGU6IM3lIOjn4uXx8u376SBiYWNrZW5kXG4iCklEU19DTURfSU5WQUxJRF9PUFRJT04gICAgICJ3aW5lY29uc29sZTog0+rg5+Dt7eD/IO7v9uj/IO3lIO3g6eTl7eBcbiIKSURTX0NNRF9BQk9VVCAgICAgICAgICAgICAgIsfg7/Px6iDv8O7j8ODs7Psg4iDq7u3x7uvoIFdpbmVcbiIKSURTX0NNRF9MQVVOQ0hfRkFJTEVEICAgICAgIndpbmVjb25zb2xlOiDN5SDz5ODr8f8g5+Dv8/HqIO/w7uPw4Ozs+yAnJXMnLlxuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIs3lIOLl8O3uIPPq4Ofg7e3gIOru7ODt5OAuXG4iCgpJRFNfVVNBR0VfSEVBREVSICAgICAgICAgICAiXG7C++fu4jpcbiAgd2luZWNvbnNvbGUgW+7v9ujoXSA86u7s4O3gPlxuXG7O7/bo6DpcbiIKSURTX1VTQUdFX0JBQ0tFTkQgICAgICAgICAgIiAgLS1iYWNrZW5kPXt1c2VyfGN1cnNlc30gIML74e7wICd1c2VyJyDu8urw7uXyIO3u4u7lIO7q7e4g8SDv7uvt7ukg7+7k5OXw5uru6VxuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICDi8eX1IPDl5ujs7uIg8ODh7vL7IOru7fHu6+guICdjdXJzZXMnIC0g6PHv7uv85/Pl8lxuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICDy5erz+eXlIO7q7e4g8SDu4/Dg7ej35e3t7ukg9PPt6vbo7u3g6/zt7vHy/P5cbiJcCklEU19VU0FHRV9DT01NQU5EICAgICAgICAgICIgIDzq7uzg7eTgPiAgICAgICAgICAgICAgICDI7P8g7/Du4/Dg7Oz7IOTr/yDn4O/z8ergIOIg6u7t8e7r6CBXaW5lXG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcbs3g7/Do7OXwOlxuICB3aW5lY29uc29sZSBjbWRcbsfg7/Px8ujy/CDq7uzg7eTt++kg7/Du9uXx8e7wIFdpbmUg4iDq7u3x7uvoIFdpbmVcblxuIgoKRU5ECgpJRERfT1BUSU9OIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIM7v9ujoICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAi0ODn7OXwIOrz8PHu8OAiLCAtMSwgMTAsIDExLCA2MCwgNTQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIibM4Ovl7fzq6OkiLCBJRENfT1BUX0NVUlNPUl9TTUFMTCwgMTQsIDIzLCA1MiwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiJtHw5eTt6OkiLCBJRENfT1BUX0NVUlNPUl9NRURJVU0sIDE0LCAzMywgNTIsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIibB7uv8+O7pIiwgSURDX09QVF9DVVJTT1JfTEFSR0UsIDE0LCA0MywgNTIsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggItPv8ODi6+Xt6OUiLCAtMSwgNzUsIDExLCAxMjMsIDU0LCBCU19HUk9VUEJPWAoJTFRFWFQgIsLx7+v74uD++eXlIOzl7f4iLCAtMSwgNzksIDIzLCA1MCwgMjAKCUFVVE9DSEVDS0JPWCAiJtF0cmwiLCBJRENfT1BUX0NPTkZfQ1RSTCwgMTQ0LCAyMywgNTIsIDEwLCBXU19UQUJTVE9QCglBVVRPQ0hFQ0tCT1ggIlMmaGlmdCIsIElEQ19PUFRfQ09ORl9TSElGVCwgMTQ0LCAzMywgNTIsIDEwLCBXU19UQUJTVE9QCglMVEVYVCAiwfvx8vDu5SDw5eTg6vLo8O7i4O3o5SIsIC0xLCA3OSwgNDMsIDYwLCAyMAoJQVVUT0NIRUNLQk9YICIm4urr/vfo8vwiLCBJRENfT1BUX1FVSUNLX0VESVQsIDE0NCwgNTEsIDUyLCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICLI8fLu8Oj/IOru7ODt5CIsIC0xLCAxMCwgNjcsIDE4OSwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAiJsjx8u7w6P8g6u7s4O3kOiIsIC0xLCAxNCwgNzcsIDc4LCAxOAoJRURJVFRFWFQgSURDX09QVF9ISVNUX1NJWkUsIDgyLCA3OSwgMzEsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19PUFRfSElTVF9TSVpFX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUFVVE9DSEVDS0JPWCAiJtPk4Ov/8vwg5PPh6+jw8/756OXx/yIsIElEQ19PUFRfSElTVF9OT0RPVUJMRSwgMTIwLCA3NywgNzAsIDE4LCBXU19UQUJTVE9QfEJTX01VTFRJTElORQp9CgpJRERfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiDY8Oj08iAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJTFRFWFQgIibY8Oj08iIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgIibW4uXyIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAiJtDg5+zl8CIsIC0xLCAxNTgsIDUsIDQwLCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9TSVpFLCAxNTgsIDE4LCA0MCwgNjAsIFdTX1ZTQ1JPTEwKCUNPTlRST0wgIiIsIElEQ19GTlRfUFJFVklFVywgIldpbmVDb25Gb250UHJldmlldyIsIDBMLCA1LCA2MCwgMTA5LCA0MAoJTFRFWFQgIiIsIElEQ19GTlRfRk9OVF9JTkZPLCAxMjgsIDcxLCA4MCwgMjUKfQoKSUREX0NPTkZJRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiDN4PHy8O7p6uAgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICLH7u3gIOHz9OXw4CIsIC0xLCAxMCwgMTEsIDEwMCwgNDIsIEJTX0dST1VQQk9YCglMVEVYVCAiJtjo8Ojt4CA6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIibC+/Hu8uAgOiIsIC0xLCAxNCwgMzksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX0hFSUdIVCwgNjgsIDM3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICLQ4Ofs5fAg7urt4CIsIC0xLCAxMCwgNTUsIDEwMCwgNDIKCUxURVhUICLYJujw6O3gIDoiLCAtMSwgMTQsIDY5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fV0lEVEgsIDY4LCA2NywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICLCJvvx7vLgIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICLH4OLl8Pjl7ejlIO/w7uPw4Ozs+yIsIC0xLCAxMTUsIDExLCA4NSwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIibH4Orw++Lg8vwg6u7t8e7r/CIsIElEQ19DTkZfQ0xPU0VfRVhJVCwgMTE5LCAyNSwgNzUsIDIwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggItDl5ODq8ujw7uLg7ejlIiwgLTEsIDExNSwgNTUsIDg1LCA0MgoJQ09NQk9CT1ggSURDX0NORl9FRElUSU9OX01PREUsIDExOSwgNjksIDc1LCAyMCwgQ0JTX0RST1BET1dOTElTVHxXU19WU0NST0xMfFdTX1RBQlNUT1AKfQoKSUREX1NBVkVfU0VUVElOR1MgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMjAsIDIwLCAxOTgsIDcwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04KQ0FQVElPTiAiz+Dw4Ozl8vD7IOru7fHu6+giCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIiIsIC0xLCAxMCwgMTAsIDE3OCwgMzEsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gItHu9fDg7ejy/CD98ugg7eDx8vDu6eroIOTr/yDh8+Tz+ej1IPHl8fHo6SIsIElEQ19TQVZfU0FWRSwgMTQsIDI3LCAxNzAsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIsjn7OXt6PL8IPLu6/zq7iDy5erz+fP+IPHl8fHo/iIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDE1LCAxNzAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA0MCwgNTAsIDUwLCAxNAoJUFVTSEJVVFRPTiAizvLs5e3gIiwgSURDQU5DRUwsIDExMCwgNTAsIDUwLCAxNAp9Cg==