LyoKICogQ29weXJpZ2h0IDIwMDcgVml0YWx5IExpcGF0b3YgZm9yIEV0ZXJzb2Z0CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJyZXNvdXJjZS5oIgoKTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKClVJSU5TRVJUT0JKRUNUIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjk0LCAxNTEKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiwvHy4OLo8vwg7uH65eryIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMSVNUQk9YICAgICAgICAgSURDX09CSlRZUEVMSVNULDgyLDE5LDEzMSw2NixMQlNfU09SVCB8CiAgICAgICAgICAgICAgICAgICAgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBXU19WSVNJQkxFIHwgV1NfVlNDUk9MTCB8CiAgICAgICAgICAgICAgICAgICAgV1NfVEFCU1RPUAogICAgTFRFWFQgICAgICAgICAgICLS6O8g7uH65ery4DoiLElEQ19PQkpUWVBFTEJMLDgyLDcsNTMsOCxXU19WSVNJQkxFCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDIyMSw3LDY2LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIs7y7OXt4CIsSURDQU5DRUwsMjIxLDI0LDY2LDE0CiAgICBHUk9VUEJPWCAgICAgICAgItDl5/Pr/PLg8iIsSURDX1JFU1VMVCw3LDEwMywyMDgsNDEKICAgIENPTlRST0wgICAgICAgICAi0e7n5ODy/CDt7uL76SIsSURDX0NSRUFURU5FVywiQnV0dG9uIixCU19BVVRPUkFESU9CVVRUT04gfAogICAgICAgICAgICAgICAgICAgIFdTX0dST1VQLDcsMjAsNjIsMTAKICAgIENPTlRST0wgICAgICAgICAi0e7n5ODy/CD96+Xs5e3yIPPv8ODi6+Xt6P8iLElEQ19DUkVBVEVDT05UUk9MLCJCdXR0b24iLAogICAgICAgICAgICAgICAgICAgIEJTX0FVVE9SQURJT0JVVFRPTiB8IE5PVCBXU19WSVNJQkxFLDcsNTQsNjIsMTAKICAgIENPTlRST0wgICAgICAgICAi0e7n5ODy/CDo5yD04Onr4CIsSURDX0NSRUFURUZST01GSUxFLCJCdXR0b24iLAogICAgICAgICAgICAgICAgICAgIEJTX0FVVE9SQURJT0JVVFRPTiw3LDM3LDY3LDEwCiAgICBMVEVYVCAgICAgICAgICAgIiIsSURDX1JFU1VMVERFU0MsNDksMTEyLDE1OSwyMwogICAgUFVTSEJVVFRPTiAgICAgICImxO7h4OLo8vwg/evl7OXt8iDz7/Dg4uvl7ej/Li4uIixJRENfQUREQ09OVFJPTCw4MSw4OCw2MywxNCxOT1QgV1NfVklTSUJMRQogICAgQ09OVFJPTCAgICAgICAgICJEaXNwbGF5IEFzIEljb24iLElEQ19BU0lDT04sIkJ1dHRvbiIsQlNfQVVUT0NIRUNLQk9YIHwKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QIHwgTk9UIFdTX1ZJU0lCTEUsMjIzLDU4LDY0LDEwCiAgICBQVVNIQlVUVE9OICAgICAgIsL74fDg8vwuLi4iLElEQ19CUk9XU0UsODMsNTMsNTAsMTQsTk9UIFdTX1ZJU0lCTEUKICAgIExURVhUICAgICAgICAgICAi1ODp6zoiLElEQ19GSUxFTEJMLDgzLDI3LDIwLDgsIE5PVCBXU19WSVNJQkxFCiAgICBFRElUVEVYVCAgICAgICAgSURDX0ZJTEUsODMsMzcsMTMyLDEzLEVTX0FVVE9IU0NST0xMIHwgTk9UIFdTX1ZJU0lCTEUKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgSURTX1JFU1VMVE9CSkRFU0MJIsTu4eDi6+Xt6OUg7e7i7uPuIO7h+uXq8uAgJXMg4iDk7urz7OXt8iIKICBJRFNfUkVTVUxURklMRU9CSkRFU0MJIsTu4eDi6+Xt6OUg7uH65ery4CDo5yD04Onr4CDiIOTu6vPs5e3yLiDQ4OHu8uDy/CDxIO7h+uXq8u7sIOzu5u3uIOHz5OXyIOIg8e7n5ODi+OXpIOXj7iDv8O7j8ODs7OUuIgogIElEU19CUk9XU0UgICAgICAgICAgICAiz/Du8ezu8vAiCiAgSURTX05PVE9MRU1PRCAgICAgICAgICLU4OnrIO3lIP/i6//l8vH/IOru8PDl6vLt++wg7O7k8+vl7CBPTEUuIM3l4u7n7O7m7e4g5+Dw5ePo8fLw6PDu4uDy/CD96+Xs5e3yIPPv8ODi6+Xt6P8gT0xFLiIKICBJRFNfTk9UT0xFTU9EQ0FQVElPTiAgIsTu4eDi6PL8IP3r5ezl7fIg8+/w4OLr5e3o/yIKfQoKSUREX1BBU1RFU1BFQ0lBTDQgRElBTE9HIERJU0NBUkRBQkxFIDMsIDE1LCAyOTMsIDE0MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAi0e/l9ujg6/zt4P8g4vHy4OLq4CIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAiyPHy7vft6Oo6IiwgLTEsIDYsIDksIDMwLCA4LCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKICAgIENPTlRST0wgICAgICAgIibC8fLg4ujy/CIsIElEQ19QU19QQVNURSwgIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZJU0lCTEUsCiAgICAgICAgICAgICAgICAgIDYsIDM4LCA1NSwgMTAKICAgIENPTlRST0wgICAgICAgIsLx8uDi6PL8ICbR8fvr6vMiLCBJRENfUFNfUEFTVEVMSU5LLCAiQnV0dG9uIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfVklTSUJMRSwKICAgICAgICAgICAgICAgICAgNiwgNjMsIDU1LCAxMAogICAgTFRFWFQgICAgICAgICAiJsrg6joiLCAtMSwgNjUsIDI1LCAxNiwgOCwgV1NfVklTSUJMRSB8IFdTX0dST1VQCiAgICBMSVNUQk9YICAgICAgIElEQ19QU19QQVNURUxJU1QsICAgICA2NSwgMzYsIDE1MywgNTcsIExCU19OT1RJRlkgfCBMQlNfVVNFVEFCU1RPUFMgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSIHwgTk9UIFdTX1ZJU0lCTEUKICAgIExJU1RCT1ggICAgICAgSURDX1BTX1BBU1RFTElOS0xJU1QsIDY1LCAzNiwgMTUzLCA1NywgTEJTX05PVElGWSB8IExCU19VU0VUQUJTVE9QUyB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIgfCBOT1QgV1NfVklTSUJMRQogICAgTElTVEJPWCAgICAgICBJRENfUFNfRElTUExBWUxJU1QsICAgNjUsIDM2LCAxNTMsIDU3LCBMQlNfTk9USUZZIHwgTEJTX1VTRVRBQlNUT1BTIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZJU0lCTEUKICAgIENPTlRST0wgICAgICAgIk9LIiwgSURPSywgIkJ1dHRvbiIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WSVNJQkxFLCAyMjQsIDYsIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAizvLs5e3gIiwgSURDQU5DRUwsICJCdXR0b24iLCBCU19QVVNIQlVUVE9OIHwgV1NfVEFCU1RPUCB8IFdTX1ZJU0lCTEUsIDIyNCwgMjMsIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAi0Sbv8ODi6uAiLCBJRENfT0xFVUlIRUxQLCAiQnV0dG9uIiwgQlNfUFVTSEJVVFRPTiB8IFdTX1RBQlNUT1AgfCBXU19WSVNJQkxFLCAyMjQsIDQyLCA2NiwgMTQKICAgIENPTlRST0wgICAgICAgIibP7urg5/vi4PL8IOrg6iDn7eD37uoiLCBJRENfUFNfRElTUExBWUFTSUNPTiwgIkJ1dHRvbiIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AgfCBXU19WSVNJQkxFLCAyMjQsIDU5LCA2NiwgMTQKICAgIENPTlRST0wgICAgICAgIiIsIElEQ19QU19JQ09ORElTUExBWSwgIlN0YXRpYyIsIFNTX0lDT04gfCBXU19WSVNJQkxFLCAyMjQsIDc1LCA2NiwgNDQKICAgIENPTlRST0wgICAgICAgIsjn7OXt6PL8ICbn7eD37uouLi4iLCBJRENfUFNfQ0hBTkdFSUNPTiwgIkJ1dHRvbiIsIEJTX1BVU0hCVVRUT04gfCBXU19UQUJTVE9QIHwgV1NfVklTSUJMRSwgMjI0LCAxMjMsIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAiIiwgSURDX1BTX1JFU1VMVElNQUdFLCAiU3RhdGljIiwgU1NfSUNPTiB8IFdTX1ZJU0lCTEUsIDgsIDEwMSwgNDIsIDM0CiAgICBDT05UUk9MICAgICAgICI8PCByZXN1bHQgdGV4dCBnb2VzIGhlcmUgPj4iLCBJRENfUFNfUkVTVUxUVEVYVCwgIlN0YXRpYyIsIFNTX05PUFJFRklYIHwgV1NfVklTSUJMRSwgNTQsIDEwMCwgMTU5LCAzNQogICAgQ09OVFJPTCAgICAgICAi0OXn8+v88uDyIiwgLTEsICJCdXR0b24iLCBCU19HUk9VUEJPWCB8IFdTX0dST1VQIHwgV1NfVklTSUJMRSwgNiwgOTAsIDIxMiwgNDgKICAgIENPTlRST0wgICAgICAgIiIsIElEQ19QU19TT1VSQ0VURVhULCAiRWRpdCIsIEVTX1JFQURPTkxZIHwgRVNfQVVUT0hTQ1JPTEwgfCBXU19WSVNJQkxFLCAzNywgOSwgMTgwLCA4CkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURTX1BTX1BBU1RFX0RBVEEgICAgICAgICAgICAgICAgICAgICAiwvHy4OLq4CDx7uTl8Obo7O7j7iDh8/Tl8OAg7uHs5e3gIOIg5O7q8+zl7fIg6uDqICVzLiIKICAgIElEU19QU19QQVNURV9PQkpFQ1QgICAgICAgICAgICAgICAgICAgIsLx8uDi6uAg8e7k5fDm6Ozu4+4g4fP05fDgIO7h7OXt4CDiIOTu6vPs5e3yIPLg6iwg9/LuIOXj7iDs7ubt7iDg6vLo4ujw7uLg8vwsIOjx7+7r/Ofz/yAlcy4iCiAgICBJRFNfUFNfUEFTVEVfT0JKRUNUX0FTX0lDT04gICAgICAgICAgICLC8fLg4urgIPHu5OXw5ujs7uPuIOHz9OXw4CDu4ezl7eAg4iDk7urz7OXt8iDy4OosIPfy7iDl4+4g7O7m7e4g4Ory6OLo8O7i4PL8LCDo8e/u6/zn8/8gJXMuIM7tIOHz5OXyIO7y7uHw4Obg8vzx/yDiIOLo5OUg5+3g9+rgLiIKICAgIElEU19QU19QQVNURV9MSU5LX0RBVEEgICAgICAgICAgICAgICAgIsLx8uDi6uAg8e7k5fDm6Ozu4+4g4fP05fDgIO7h7OXt4CDiIOTu6vPs5e3yIOrg6iAlcy4gxODt7fvlIOHz5PPyIPHi/+fg7fsg8SDo8fXu5O377CD04Onr7uwsIPLg6iD38u4g6Ofs5e3l7ej/IOIg7bjsIOHz5PPyIO7y8ODm4PL88f8g4iDk7urz7OXt8uUuIgogICAgSURTX1BTX1BBU1RFX0xJTktfT0JKRUNUICAgICAgICAgICAgICAiwvHy4OLq4CDo5+7h8ODm5e3o/yDo5yDh8/Tl8OAg7uHs5e3gIOIg5O7q8+zl7fIuIMjn4fDg5uXt6OUg4fPk5fIg8eL/5+Dt7iDxIOjx9e7k7fvsIPTg6evu7Cwg8uDqIPfy7iDo5+zl7eXt6P8g4iDtuOwg4fPk8/Ig7vLw4Obg8vzx/yDiIOTu6vPs5e3y5S4iCiAgICBJRFNfUFNfUEFTVEVfTElOS19PQkpFQ1RfQVNfSUNPTiAgICAgICLC8fLg4urgIPHx++vq6Cwg6u7y7vDg/yDh8+Tl8iDz6uDn++Lg8vwg7eAg8ODx7+7r7ubl7ejlIPHu5OXw5ujs7uPuIOHz9OXw4CDu4ezl7eAuINHx++vq4CDh8+Tl8iDx4v/n4O3gIPEg6PH17uTt++wg9ODp6+7sLCDy4Oog9/LuIOjn7OXt5e3o/yDiIO247CDh8+Tz8iDu8vDg5uDy/PH/IOIg5O7q8+zl7fLlLiIKICAgIElEU19QU19OT05fT0xFICAgICAgICAgICAgICAgICAgICAgICAgIsLx8uDi6uAg8e7k5fDm6Ozu5SDh8/Tl8OAg7uHs5e3gIOIg5O7q8+zl7fIuIgogICAgSURTX1BTX1VOS05PV05fVFlQRSAgICAgICAgICAgICAgICAgICAizeXo5+Ll8fLt++kg8ujvIgogICAgSURTX1BTX1VOS05PV05fU1JDICAgICAgICAgICAgICAgICAgICAizeXo5+Ll8fLt++kg6PHy7vft6OoiCiAgICBJRFNfUFNfVU5LTk9XTl9BUFAgICAgICAgICAgICAgICAgICAgICLv8O7j8ODs7OAsIOru8u7w4P8g5ePuIPHu5+Tg6+AiCn0K