LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkRhdG90ZWthIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiSXomaG9kIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZQb21v6CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZPIC4uLiIsICAgICAgICAgICAgICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdGVyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlV2b3ppIHJlZ2lzdHJza28gZGF0b3Rla28gLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIiZJenZvemkgcmVnaXN0cnNrbyBkYXRvdGVrbyAuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiUCZvdmWeaSBzZSB6IG9tcmWebmltIHJlZ2lzdHJvbSAuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiUCZyZWtpbmkgcG92ZXphdm8geiBvbXJlnm5pbSByZWdpc3Ryb20gLi4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIk5hJnRpc25pXHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJeiZob2QiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJlVyZWphbmplIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlNwcmVtZW5pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTm92YSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiJktsanXoIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICImTml6IiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkJpbmFybmEgdnJlZG5vc3QiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImRFdPUkQgdnJlZG5vc3QiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkl6YnJpJpppXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICJQcmVpJm1lbnVqXHRGMiIsICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJktvcGlyYWogaW1lIGtsanXoYSIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZOYWpkaVx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJOYSZkYWxqdWogaXNrYW5qZVx0RjMiLCAgICAgICAgICAgICAgSURfRURJVF9GSU5ETkVYVCwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICJQb2dsJmVkIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlZyc3RpY2Egc3RhbmphIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZEZWxpbG5hIOhydGEiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZPc3ZlnmlcdEY1IiwgICAgICAgICAgICAgICAgSURfVklFV19SRUZSRVNICiAgICBFTkQKICAgIFBPUFVQICImUHJpbGp1YmxqZW5lIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkRvZGFqIG1lZCBQcmlsanVibGplbmUiLCAgICAgICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICBNRU5VSVRFTSAiJk9kc3RyYW5pIGl6IFByaWxqdWJsamVuaWgiLCAgICAgICAgICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFCiAgICBFTkQKICAgIFBPUFVQICImUG9tb+giCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVGVtZSBwb21v6GkiLCAgICAgICAgICAgICAgICBJRF9IRUxQX0hFTFBUT1BJQ1MKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk8gVXJlamV2YWxuaWt1IHJlZ2lzdHJhIiwgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICJJbWUiCiAgICBJRFNfTElTVF9DT0xVTU5fVFlQRSAgICAiVnJzdGEiCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAiUG9kYXRraSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgIlVyZWpldmFsbmlrIHJlZ2lzdHJhIgogICAgSURDX1JFR0VESVQgICAgICAgICAgICAgIlJFR0VESVQiCiAgICBJRENfUkVHRURJVF9GUkFNRSAgICAgICAiUkVHRURJVF9GUkFNRSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfTUVOVSAgICAgICAgIlVrYXppIHphIGRlbG8gcyBjZWxvdG5pbSByZWdpc3Ryb20iCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAiVWthemkgemEgdXJlamFuamUgdnJlZG5vc3RpIGluIGtsanXoZXYiCiAgICBJRF9WSUVXX01FTlUgICAgICAgICAgICAiVWthemkgemEgcHJpbGFnYWphbmplIHJlZ2lzdHJza2VnYSBva25hIgogICAgSURfRkFWT1JJVEVTX01FTlUgICAgICAgIlVrYXppIHphIGRvc3RvcCBkbyBuZWRhdm5vIG9kcHJ0aWgga2xqdehldiIKICAgIElEX0hFTFBfTUVOVSAgICAgICAgICAgICJVa2F6aSB6YSBwcmlrYXpvdmFuamUgcG9tb+hpIGluIGluZm9ybWFjaWogbyBwcm9ncmFtdSIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICJVa2F6aSB6YSB1c3R2YXJqYW5qZSBub3ZpaCBrbGp16GV2IGluIHZyZWRub3N0aSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIlNwcmVtZW5pIHBvZGF0a2UgdnJlZG5vc3RpIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIkRvZGEgbm92IGtsanXoIgogICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUgIkRvZGEgbm92IG5peiIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICJEb2RhIG5vdm8gYmluYXJubyB2cmVkbm9zdCIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICJEb2RhIG5vdm8gRFdPUkQgdnJlZG5vc3QiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIlYgcmVnaXN0ZXIgdXZvemkgZGF0b3Rla28geiBiZXNlZGlsb20iCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdpc3Ryc2tvIGRhdG90ZWtvIGFsaSBuamVuIGRlbCBpenZvemkgdiBiZXNlZGlsbm8gZGF0b3Rla28iCiAgICBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVnpwb3N0YXZpIHBvdmV6YXZvIHogcmVnaXN0cm9tIG9kZGFsamVuZWdhIHJh6HVuYWxuaWthIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZWtpbmUgcG92ZXphdm8geiByZWdpc3Ryb20gb2RkYWxqZW5lZ2EgcmHodW5hbG5pa2EiCiAgICBJRF9SRUdJU1RSWV9QUklOVCAgICAgICAiTmF0aXNuZSByZWdpc3Ryc2tvIGRhdG90ZWtvIGFsaSBuamVuIGRlbCIKLyogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9kcHJlIHBvbW9DIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkluZm9ybWFjaWplIG8gcHJvZ3JhbXUsIJp0ZXZpbGtpIHJhemxp6GljZSBpbiBhdnRvcnNraWggcHJhdmljYWgiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICJLb27oYSBwcm9ncmFtIgogICAgSURfRkFWT1JJVEVTX0FERFRPRkFWT1JJVEVTICJEb2RhIGtsanXoIG1lZCBQcmlsanVibGplbmUiCiAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUgIk9kc3RyYW5pIGtsanXoIGl6IFByaWxqdWJsamVuaWgiCiAgICBJRF9WSUVXX1NUQVRVU0JBUiAgICAgICAiUHJpa2GeZSBhbGkgc2tyaWplIHZyc3RpY28gc3RhbmphIgogICAgSURfVklFV19TUExJVCAgICAgICAgICAgIlNwcmVtZW5pIHBvbG+eYWogbWVkIGRlbGlsbmUg6HJ0ZSBtZWQgcG9kb2tuaSIKICAgIElEX1ZJRVdfUkVGUkVTSCAgICAgICAgICJPc3Zlnmkgb2tubyIKICAgIElEX0VESVRfREVMRVRFICAgICAgICAgICJJemJyaZplIGl6Ym9yIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIlByZWltZW51amUgaXpib3IiCiAgICBJRF9FRElUX0NPUFlLRVlOQU1FICAgICAiUHJla29waXJhIGltZSBpemJyYW5lZ2Ega2xqdehhIHYgb2Rsb55pmuhlIgogICAgSURfRURJVF9GSU5EICAgICAgICAgICAgIkma6GUgbml6IHYga2xqdeh1LCB2cmVkbm9zdGkgYWxpIHBvZGF0a2loIgogICAgSURfRURJVF9GSU5ETkVYVCAgICAgICAgIkma6GUgbmFzbGVkbmpvIHBvbm92aXRldiBpc2thbmVnYSBiZXNlZGlsYSIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9kcHJlIHBvbW/oLiIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkluZm9ybWFjaWplIG8gcHJvZ3JhbXUsIJp0ZXZpbGtpIHJhemxp6GljZSBpbiBhdnRvcnNraWggcHJhdmljYWguIgogKkVORAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K