LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICImUmVnaXN0ZXIiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVXZvemkgcmVnaXN0cnNrbyBkYXRvdGVrbyAuLi4iLCAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSAiJkl6dm96aSByZWdpc3Ryc2tvIGRhdG90ZWtvIC4uLiIsICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJQJm92ZZ5pIHNlIHogb21yZZ5uaW0gcmVnaXN0cm9tIC4uLiIsIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJQJnJla2luaSBwb3ZlemF2byB6IG9tcmWebmltIHJlZ2lzdHJvbSAuLi4iLCBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiTmEmdGlzbmlcdEN0cmwrUCIsICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9QUklOVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkl6JmhvZCIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImVXJlamFuamUiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImU3ByZW1lbmkiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZZCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgUE9QVVAgIiZOb3ZhIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImS2xqdegiLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIiZOaXoiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImQmluYXJuYSB2cmVkbm9zdCIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIiZEV09SRCB2cmVkbm9zdCIsICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiSXpicmkmmmlcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIlByZWkmbWVudWpcdEYyIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImS29waXJhaiBpbWUga2xqdehhIiwgICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk5hamRpXHRDdHJsK0YiLCAgICAgICAgICAgICAgIElEX0VESVRfRklORCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIk5hJmRhbGp1aiBpc2thbmplXHRGMyIsICAgICAgICAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIlBvZ2wmZWQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVnJzdGljYSBzdGFuamEiLCAgICAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkRlbGlsbmEg6HJ0YSIsICAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk9zdmWeaVx0RjUiLCAgICAgICAgICAgICAgICBJRF9WSUVXX1JFRlJFU0gKICAgIEVORAogICAgUE9QVVAgIiZQcmlsanVibGplbmUiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImRG9kYWogbWVkIFByaWxqdWJsamVuZSIsICAgICAgICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUwogICAgICAgIE1FTlVJVEVNICImT2RzdHJhbmkgaXogUHJpbGp1YmxqZW5paCIsICAgICAgICAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUKICAgIEVORAogICAgUE9QVVAgIiZQb21v6CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZUZW1lIHBvbW/oaSIsICAgICAgICAgICAgICAgIElEX0hFTFBfSEVMUFRPUElDUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTyBVcmVqZXZhbG5pa3UgcmVnaXN0cmEiLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCgovKgogKiBEaWFsb2cKICovCgovKgogKiBTdHJpbmcgVGFibGUKICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0xJU1RfQ09MVU1OX05BTUUgICAgIkltZSIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICJWcnN0YSIKICAgIElEU19MSVNUX0NPTFVNTl9EQVRBICAgICJQb2RhdGtpIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAiVXJlamV2YWxuaWsgcmVnaXN0cmEiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICJVa2F6aSB6YSBkZWxvIHMgY2Vsb3RuaW0gcmVnaXN0cm9tIgogICAgSURfRURJVF9NRU5VICAgICAgICAgICAgIlVrYXppIHphIHVyZWphbmplIHZyZWRub3N0aSBpbiBrbGp16GV2IgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgIlVrYXppIHphIHByaWxhZ2FqYW5qZSByZWdpc3Ryc2tlZ2Egb2tuYSIKICAgIElEX0ZBVk9SSVRFU19NRU5VICAgICAgICJVa2F6aSB6YSBkb3N0b3AgZG8gbmVkYXZubyBvZHBydGloIGtsanXoZXYiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAiVWthemkgemEgcHJpa2F6b3ZhbmplIHBvbW/oaSBpbiBpbmZvcm1hY2lqIG8gcHJvZ3JhbXUiCiAgICBJRF9FRElUX05FV19NRU5VICAgICAgICAiVWthemkgemEgdXN0dmFyamFuamUgbm92aWgga2xqdehldiBpbiB2cmVkbm9zdGkiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX0VESVRfTU9ESUZZICAgICAgICAgICJTcHJlbWVuaSBwb2RhdGtlIHZyZWRub3N0aSIKICAgIElEX0VESVRfTkVXX0tFWSAgICAgICAgICJEb2RhIG5vdiBrbGp16CIKICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFICJEb2RhIG5vdiBuaXoiCiAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRSAiRG9kYSBub3ZvIGJpbmFybm8gdnJlZG5vc3QiCiAgICBJRF9FRElUX05FV19EV09SRFZBTFVFICAiRG9kYSBub3ZvIERXT1JEIHZyZWRub3N0IgogICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFICJWIHJlZ2lzdGVyIHV2b3ppIGRhdG90ZWtvIHogYmVzZWRpbG9tIgogICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnaXN0cnNrbyBkYXRvdGVrbyBhbGkgbmplbiBkZWwgaXp2b3ppIHYgYmVzZWRpbG5vIGRhdG90ZWtvIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZ6cG9zdGF2aSBwb3ZlemF2byB6IHJlZ2lzdHJvbSBvZGRhbGplbmVnYSByYeh1bmFsbmlrYSIKICAgIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmVraW5lIHBvdmV6YXZvIHogcmVnaXN0cm9tIG9kZGFsamVuZWdhIHJh6HVuYWxuaWthIgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIk5hdGlzbmUgcmVnaXN0cnNrbyBkYXRvdGVrbyBhbGkgbmplbiBkZWwiCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPZHByZSBwb21vQyIgKi8KICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICJJbmZvcm1hY2lqZSBvIHByb2dyYW11LCCadGV2aWxraSByYXpsaehpY2UgaW4gYXZ0b3Jza2loIHByYXZpY2FoIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiS29u6GEgcHJvZ3JhbSIKICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUyAiRG9kYSBrbGp16CBtZWQgUHJpbGp1YmxqZW5lIgogICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFICJPZHN0cmFuaSBrbGp16CBpeiBQcmlsanVibGplbmloIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIlByaWthnmUgYWxpIHNrcmlqZSB2cnN0aWNvIHN0YW5qYSIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICJTcHJlbWVuaSBwb2xvnmFqIG1lZCBkZWxpbG5lIOhydGUgbWVkIHBvZG9rbmkiCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAiT3N2ZZ5pIG9rbm8iCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAiSXpicmmaZSBpemJvciIKICAgIElEX0VESVRfUkVOQU1FICAgICAgICAgICJQcmVpbWVudWplIGl6Ym9yIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIlByZWtvcGlyYSBpbWUgaXpicmFuZWdhIGtsanXoYSB2IG9kbG+eaZroZSIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICJJmuhlIG5peiB2IGtsanXodSwgdnJlZG5vc3RpIGFsaSBwb2RhdGtpaCIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICJJmuhlIG5hc2xlZG5qbyBwb25vdml0ZXYgaXNrYW5lZ2EgYmVzZWRpbGEiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoKICogVEVYVElOQ0xVREUKICovCgoxIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFCkJFR0lOCiAgICAicmVzb3VyY2UuaFwwIgpFTkQKCgoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKLyoKICpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQogKkJFR0lOCiAqICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPZHByZSBwb21v6C4iCiAqICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICJJbmZvcm1hY2lqZSBvIHByb2dyYW11LCCadGV2aWxraSByYXpsaehpY2UgaW4gYXZ0b3Jza2loIHByYXZpY2FoLiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==