LyoKICogSGVscCBWaWV3ZXIgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAid2luaGVscF9yZXMuaCIKCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICIm1ODp6yIgewogIE1FTlVJVEVNICImzvLq8Pvy/CIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIibP5ffg8uDy/CIsIE1OSURfRklMRV9QUklOVAogIE1FTlVJVEVNICLN4PHy8O7p6uAgJu/w6O3y5fDgLi4uIiwgTU5JRF9GSUxFX1NFVFVQCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImwvv17uQiLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIibP8ODi6uAiIHsKICAgTUVOVUlURU0gIibK7u/o8O7i4PL8Li4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImx+Ds5fLq6C4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIibH4Orr4OTq4CIgewogICBNRU5VSVRFTSAiJs7v8OXk5evo8vwuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJs3g8fLw7unq6CIgewogICBQT1BVUAkiwujk6Ozu8fL8IO7q7eAg8e/w4OLq6CIKICAgQkVHSU4KICAgICBNRU5VSVRFTSAiz+4g8+zu6/fg7ej+IiwJTU5JRF9PUFRTX0hFTFBfREVGQVVMVAogICAgIE1FTlVJVEVNICLN4OLl8PXzIiwJTU5JRF9PUFRTX0hFTFBfVklTSUJMRQogICAgIE1FTlVJVEVNICLN5SDt4OLl8PXzIiwJTU5JRF9PUFRTX0hFTFBfTk9OVklTSUJMRQogIEVORAogIE1FTlVJVEVNICLI8fLu8Oj/IiwJCU1OSURfT1BUU19ISVNUT1JZCiAgUE9QVVAgICAgItjw6PTyIgogIEJFR0lOCiAgICBNRU5VSVRFTSAizOXr6ujpIiwJCU1OSURfT1BUU19GT05UU19TTUFMTAogICAgTUVOVUlURU0gIs7h+/ft++kiLCAgICAJTU5JRF9PUFRTX0ZPTlRTX05PUk1BTAogICAgTUVOVUlURU0gIsrw8+/t++kiLCAgICAgCU1OSURfT1BUU19GT05UU19MQVJHRQogIEVORAogIE1FTlVJVEVNICLI8e/u6/zn7uLg8vwg8ejx8uXs7fvlIPbi5fLgIiwJTU5JRF9PUFRTX1NZU1RFTV9DT0xPUlMKIH0KIFBPUFVQICIm0e/w4OLq4CIgewogICBNRU5VSVRFTSAiz+7s7vn8ICbv7iDv7uzu+egiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICLC8eXj5OAgJvHi5fD18yIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJsjt9O7w7OD26P8uLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIibOIFdpbmUiLCBNTklEX0hFTFBfV0lORQojZW5kaWYKIH0KfQoKSUREX0lOREVYIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyMDAsIDE5MCBMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICLT6uDn4PLl6/wiCnsKICAgIExJU1RCT1ggSURDX0lOREVYTElTVCwgMTAsIDEwLCAxODAsIDE1MCwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCn0KCi8qIFN0cmluZ3MgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKewpTVElEX1dJTkVfSEVMUCwgCSLR7/Dg4urgIFdJTkUiClNUSURfV0hFUlJPUiwgCQkiztjIwcrAIgpTVElEX1dBUk5JTkcsICAJCSLCzcjMwM3IxSIKU1RJRF9JTkZPLCAgCQkiyO307vDs4Pbo/yIKU1RJRF9OT1RfSU1QTEVNRU5URUQsIAkizeUg8OXg6+jn7uLg7e3uIgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSLO+Ojh6uAg7/DoIPfy5e3o6CD04Onr4CDv7uzu+eggYCVzJyIKU1RJRF9JTkRFWCwgCQkiJtHu5OXw5uDt6OUiClNUSURfQ09OVEVOVFMsCQkizeD34OvuIgpTVElEX0JBQ0ssIAkJIibN4Ofg5CIKU1RJRF9BTExfRklMRVMsIAkiwvHlIPTg6ev7ICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJItTg6ev7IPHv8ODi6uggKCouaGxwKSIKU1RJRF9GSUxFX05PVF9GT1VORF9zCSLN5SDs7uPzIO3g6fLoICclcycuIML7IPXu8ujy5SDt4Ony6CD98u7yIPTg6esg8eDs7vHy7v/y5ev87e4/IgpTVElEX05PX1JJQ0hFRElUCSLN5SDs7uPzIO3g6fLoIHJpY2hlZGl0IgpTVElEX1BTSF9JTkRFWCwJCSLR7uTl8Obg7ejlOiAiCn0KCkNPTlRFWFRfTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCQlNRU5VSVRFTSAix+Ds5fLq6C4uLiIsICAgICAgIE1OSURfQ1RYVF9BTk5PVEFURQoJCU1FTlVJVEVNICLK7u/o8O7i4PL8IiwgICAgICAgICAgICAgICAgTU5JRF9DVFhUX0NPUFkKCQlNRU5VSVRFTSAiz+X34PL8Li4uIiwgICAgICAgICAgICBNTklEX0NUWFRfUFJJTlQKCQlQT1BVUCAgICAi2PDo9PIiCgkJQkVHSU4KCQkJTUVOVUlURU0gIszl6+ro6SIsICAgICAgIE1OSURfQ1RYVF9GT05UU19TTUFMTAoJCQlNRU5VSVRFTSAizuH79+376SIsICAgICAgTU5JRF9DVFhUX0ZPTlRTX05PUk1BTAoJCQlNRU5VSVRFTSAiyvDz7+376SIsICAgICAgIE1OSURfQ1RYVF9GT05UU19MQVJHRQoJCUVORAoJCVBPUFVQICAgIsLo5Ojs7vHy/CDu6u3gIPHv8ODi6ugiCgkJQkVHSU4KCQkJTUVOVUlURU0gIs/uIPPs7uv34O3o/iIsICAgICBNTklEX0NUWFRfSEVMUF9ERUZBVUxUCgkJCU1FTlVJVEVNICLN4OLl8PXzIiwgICAgIE1OSURfQ1RYVF9IRUxQX1ZJU0lCTEUKCQkJTUVOVUlURU0gIs3lIO3g4uXw9fMiLCBNTklEX0NUWFRfSEVMUF9OT05WSVNJQkxFCgkJRU5ECgkJTUVOVUlURU0gIsjx7+7r/Ofu4uDy/CDx6PHy5ezt++Ug9uLl8uAiLCAgIE1OSURfQ1RYVF9TWVNURU1fQ09MT1JTCglFTkQKRU5ECg==