LyoKICogUmVnZWRpdCAoUnVzc2lhbiByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAzIElnb3IgU3RlcGluCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgovKgogKiBNZW51CiAqLwoKSURDX1JFR0VESVQgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIibU4OnrIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiwib76fLoIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIibR7/Dg4urgIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJs4g7/Du4/Dg7OzlIiwgICAgICAgICAgICAgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICIm0OXl8fLwIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJsjs7+7w8ujw7uLg8vwg9ODp6yDw5eXx8vDgLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIibd6vHv7vDy6PDu4uDy/CD04OnrIPDl5fHy8OAuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs/u5Orr/vfo8vwg8eXy5eLu6SDw5eXx8vAuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiJs7y6uv+9+jy/CDx5fLl4u7pIPDl5fHy8C4uLiIsICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs3g7+X34PLg8vxcdEN0cmwrUCIsICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9QUklOVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsIm++ny6CIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImz/Dg4urgIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJsjn7OXt6PL8IiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICLR7ufkJuDy/CIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiyusm/vciLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIibR8vDu6u7i7uUg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImwejt4PDt7uUg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImRFdPUkQg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibT5ODr6PL8XHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICImz+Xw5ejs5e3u4uDy/Fx0RjIiLCAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAi0Sbq7u/o8O7i4PL8IOjs/yDq6/734CIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibN4Ony6Fx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICLN4Ony6CAm5ODr5eVcdEYzIiwgICAgICAgICAgICAgIElEX0VESVRfRklORE5FWFQsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJsLo5CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gItHy8O7q4CAm8e7x8u7/7ej/IiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibQ4Ofk5evo8vwiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibO4e3u4ujy/Fx0RjUiLCAgICAgICAgICAgICAgICBJRF9WSUVXX1JFRlJFU0gKICAgIEVORAogICAgUE9QVVAgIibI5+Hw4O3t7uUiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImxO7h4OLo8vwg4iDo5+Hw4O3t7uUiLCAgICAgICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICBNRU5VSVRFTSAiJtPk4Ovo8vwg6Ocg6Ofh8ODt7e7j7iIsICAgICAgICAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUKICAgIEVORAogICAgUE9QVVAgIibR7/Dg4urgIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJtHu5OXw5uDt6OUiLCAgICAgICAgICAgICAgICBJRF9IRUxQX0hFTFBUT1BJQ1MKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs4g8OXk4Ory7vDlIPDl5fHy8OAiLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCgovKgogKiBEaWFsb2cKICovCgovKgogKiBTdHJpbmcgVGFibGUKICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0xJU1RfQ09MVU1OX05BTUUgICAgIsjs/yIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICLS6O8iCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAixODt7fvlIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAi0OXk4Ory7vAg8OXl8fLw4CIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDw4OHu8vsg8SDw5ePo8fLw7uwg4iD25evu7CIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDw5eTg6vLo8O7i4O3o/yDn7eD35e3o6SDo6+gg6uv+9+XpIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgItHu5OXw5ujyIOru7ODt5Psg5Ov/IO3g8fLw7unq6CDu6u3gIPDl5fHy8OAiCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAi0e7k5fDm6PIg6u7s4O3k+yDk6/8g5O7x8vPv4CDqIPfg8fLuIOjx7+7r/Ofz5ez77CDq6/734OwiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAi0e7k5fDm6PIg6u7s4O3k+yDk6/8g7vLu4fDg5uXt6P8g8e/w4OLq6CDoIOjt9O7w7OD26Ogg7iDw5eTg6vLu8OUg8OXl8fLw4CIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDx7ufk4O3o/yDt7uL79SDq6/735ekg6OvoIOft4Pfl7ejpIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAiyOfs5e3/5fIg5+3g9+Xt6OUg7+Dw4Ozl8vDgIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIsTu4eDi6//l8iDt7uL76SDq6/73IgogICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUgIsTu4eDi6//l8iDt7uLu5SDx8vDu6u7i7uUg5+3g9+Xt6OUiCiAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRSAixO7h4OLr/+XyIO3u4u7lIOHo7eDw7e7lIOft4Pfl7ejlIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIsTu4eDi6//l8iDt7uLu5SBEV09SRC3n7eD35e3o5SIKICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRSAiyOzv7vDy6PDz5fIg8uXq8fLu4u7pIPTg6esg4iDw5eXx8vAiCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICLd6vHv7vDy6PDz5fIg4uXx/CDw5eXx8vAg6OvoIOXj7iD34PHy/CDiIPLl6vHy7uLu6SD04OnrIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIs/u5Orr/vfg5fLx/yDqIPDl5fHy8PMg8+Tg67jt7e7j7iDq7uzv/P7y5fDgIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIs7y6uv+9+Dl8vH/IO7yIPDl5fHy8OAg8+Tg67jt7e7j7iDq7uzv/P7y5fDgIgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIs/l9+Dy4OXyIOLl8fwg8OXl8fLwIOjr6CDl4+4g9+Dx8vwiCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPcGVucyByZWdpc3RyeSBlZGl0b3IgaGVscCIgKi8KICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICLO8u7h8ODm4OXyIOjt9O7w7OD26P4g7iDv8O7j8ODs7OUsIO3u7OXwIOLl8PHo6CDoIPHv6PHu6iDg4vLu8O7iIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiwvv17uQg6Ocg8OXk4Ory7vDgIPDl5fHy8OAiCiAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMgIsTu4eDi6PL8IOrr/vcg4iDo5+Hw4O3t7uUiCiAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUgItPk4Ovo8vwg6uv+9yDo5yDo5+Hw4O3t7uPuIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIs/u6uDn4PL8IOjr6CDx6vD78vwg8fLw7urzIPHu8fLu/+3o/yIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICLI5+zl7ejy/CDv7ufo9uj+IPDg5+Tl6+jy5ev/IOzl5uTzIOTi8+z/IO/g7eXr/+zoIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIs7h7e7i6//l8iDu6u3uIgogICAgSURfRURJVF9ERUxFVEUgICAgICAgICAgItPk4Ov/5fIg4vvk5evl7ejlIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIs/l8OXo7OXt7uL74uDl8iDi++Tl6+Xt6OUiCiAgICBJRF9FRElUX0NPUFlLRVlOQU1FICAgICAiyu7v6PDz5fIg6Oz/IOL75OXr5e3t7uPuIOrr/vfgIOIg4fP05fAg7uHs5e3gIgogICAgSURfRURJVF9GSU5EICAgICAgICAgICAgIsj55fIg8uXq8fLu4vP+IPHy8O7q8yDiIOrr/vflLCDn7eD35e3o6CDo6+gg5ODt7fv1IgogICAgSURfRURJVF9GSU5ETkVYVCAgICAgICAgIsj55fIg8evl5PP++eXlIPHu4u/g5OXt6OUg8uXq8fLgLCDn4OTg7e3u4+4g4iDv8OXk++Tz+eXsIO/u6PHq5SIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9wZW5zIFJlZ2lzdHJ5IEVkaXRvciBIZWxwLiIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkRpc3BsYXlzIHByb2dyYW0gaW5mb3JtYXRpb24sIHZlcnNpb24gbnVtYmVyLCBhbmQgY29weXJpZ2h0LiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==