LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMgSm9z6SBNYW51ZWwgRmVycmVyIE9ydGl6CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ERUZBVUxUCgovKgogKiBNZW51CiAqLwoKSURDX1JFR0VESVQgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIiZBcmNoaXZvIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlNhbGlyIiwgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiQSZ5dWRhIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkFjZXJjYSBkZS4uLiIsICAgICAgICAgICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdHJvIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkltcG9ydGFyIGFyY2hpdm8gZGUgcmVnaXN0cm8uLi4iLCBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUKCiAgICAgICAgTUVOVUlURU0gIiZFeHBvcnRhciBhcmNoaXZvIGRlIHJlZ2lzdHJvLi4uIiwgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQ29uZWN0YXIgcmVnaXN0cm8gZGUgcmVkLi4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIiZEZXNjb25lY3RhciByZWdpc3RybyBkZSByZWQuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiSW0mcHJpbWlyXHRDdHJsK1AiLCAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTJmFsaXIiLCAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImRWRpdGFyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJk1vZGlmaWNhciIsICAgICAgICAgICAgICAgICAgSURfRURJVF9NT0RJRlkKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiJk51ZXZvIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImQ2xhdmUiLCAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICJWYWxvciBkZSBjJmFkZW5hIiwgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsb3IgJmJpbmFyaW8iLCAgICAgICAgICAgICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIlZhbG9yICZEV09SRCIsICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkVsaW1pbmFyXHREZWwiLCAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiJlJlbm9tYnJhciIsICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkNvcGlhciB2YWxvciBkZSBsYSBjbGF2ZSIsICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQnVzY2FyXHRDdHJsK0YiLCAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJCdXNjYXIgJnNpZ3VpZW50ZVx0RjMiLCAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIiZWZXIiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQmFycmEgZGUgZXN0YWRvIiwgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU2VwYXJhciIsICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZBY3R1YWxpemFyXHRGNSIsICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJkZhdm9yaXRvcyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZB8WFkaXIgYSBGYXZvcml0b3MiLCAgICAgICAgIElEX0ZBVk9VUklURVNfQUREVE9GQVZPVVJJVEVTCiAgICAgICAgLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiJkVsaW1pbmFyIEZhdm9yaXRvIiwgICAgICAgICAgSURfRkFWT1VSSVRFU19SRU1PVkVGQVZPVVJJVEUKICAgICAgICAsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJkF5dWRhIgogICAgQkVHSU4KLyoKICogICAgICAgIE1FTlVJVEVNICImSGVscCBUb3BpY3MiLCAgICAgICAgICAgICAgICBJRF9IRUxQX0hFTFBUT1BJQ1MKICogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogKi8KICAgICAgICBNRU5VSVRFTSAiJkFjZXJjYSBkZSBFZGl0b3IgZGUgcmVnaXN0cm8iLCBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBY2VyY2EgZGUiCkZPTlQgOCwgIlN5c3RlbSIKQkVHSU4KICAgIElDT04gICAgICAgICAgICBJRElfUkVHRURJVCxJRElfUkVHRURJVCwxNCw5LDE2LDE2CiAgICBMVEVYVCAgICAgICAgICAgIlJlYWN0T1MgcmVnZWRpdCBWZXJzafNuIDEuMCIsSURDX1NUQVRJQyw0OSwxMCwxMTksOCwKICAgICAgICAgICAgICAgICAgICBTU19OT1BSRUZJWAogICAgTFRFWFQgICAgICAgICAgICJDb3B5cmlnaHQgKEMpIDIwMDIgRXF1aXBvIFJlYWN0T1MiLElEQ19TVEFUSUMsNDksMjAsMTE5LDgKICAgIERFRlBVU0hCVVRUT04gICAiQWNlcHRhciIsSURPSywxOTUsNiwzMCwxMSxXU19HUk9VUApFTkQKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfTElTVF9DT0xVTU5fTkFNRSAgICAiTm9tYnJlIgogICAgSURTX0xJU1RfQ09MVU1OX1RZUEUgICAgIlRpcG8iCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAiRGF0b3MiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19BUFBfVElUTEUgICAgICAgICAgICJFZGl0b3IgZGUgcmVnaXN0cm8iCiAgICBJRENfUkVHRURJVCAgICAgICAgICAgICAiUkVHRURJVCIKICAgIElEQ19SRUdFRElUX0ZSQU1FICAgICAgICJSRUdFRElUX0ZSQU1FIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9NRU5VICAgICAgICAiQ29udGllbmUgY29tYW5kb3MgcGFyYSB0cmFiYWphciBjb24gZWwgcmVnaXN0cm8gY29tcGxldG8iCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAiQ29udGllbmUgY29tYW5kb3MgcGFyYSBlZGl0YXIgdmFsb3JlcyBvIGNsYXZlcyIKICAgIElEX1ZJRVdfTUVOVSAgICAgICAgICAgICJDb250aWVuZSBjb21hbmRvcyBwYXJhIHBlcnNvbmFsaXphciBsYSB2ZW50YW5hIGRlIHJlZ2lzdHJvIgogICAgSURfRkFWT1VSSVRFU19NRU5VICAgICAgIkNvbnRpZW5lIGNvbWFuZG9zIHBhcmEgYWNjZWRlciBhIGNsYXZlcyB1c2FkYXMgZnJlY3VlbnRlbWVudGUiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAiQ29udGllbmUgY29tYW5kb3MgcGFyYSBtb3N0cmFyIGF5dWRhIGUgaW5mb3JtYWNp824gc29icmUgZWwgZWRpdG9yIGRlIHJlZ2lzdHJvIgogICAgSURfRURJVF9ORVdfTUVOVSAgICAgICAgIkNvbnRpZW5lIGNvbWFuZG9zIHBhcmEgY3JlYXIgbnVldmFzIGNsYXZlcyBvIHZhbG9yZXMiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX0VESVRfTU9ESUZZICAgICAgICAgICJNb2RpZmljYSBsb3MgZGF0b3MgZGVsIHZhbG9yIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIkHxYWRlIHVuYSBudWV2YSBjbGF2ZSIKICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFICJB8WFkZSB1biBudWV2byB2YWxvciBkZSBjYWRlbmEiCiAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRSAiQfFhZGUgdW4gbnVldm8gdmFsb3IgYmluYXJpbyIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICJB8WFkZSB1biBudWV2byB2YWxvciBkZSBkb2JsZSBwYWxhYnJhIgogICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFICJJbXBvcnRhIHVuIGFyY2hpdm8gZGUgdGV4dG8gYWwgcmVnaXN0cm8iCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBvcnRhIHRvZG8gbyBwYXJ0ZSBkZWwgcmVnaXN0cm8gYSB1biBhcmNoaXZvIGRlIHRleHRvIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlIGNvbmVjdGEgYWwgcmVnaXN0cm8gZGUgdW4gb3JkZW5hZG9yIHJlbW90byIKICAgIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZSBkZXNjb25lY3RhIGRlbCByZWdpc3RybyBkZSB1biBvcmRlbmFkb3IgcmVtb3RvIgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIkltcHJpbWUgdG9kbyBvIHBhcnRlIGRlbCByZWdpc3RybyIKLyogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9wZW5zIHJlZ2lzdHJ5IGVkaXRvciBoZWxwIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIk11ZXN0cmEgaW5mb3JtYWNp824gZGVsIHByb2dyYW1hLCBu+m1lcm8gZGUgdmVyc2nzbiB5IGRlcmVjaG9zIGRlIGF1dG9yIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiU2FsZSBkZWwgZWRpdG9yIGRlIHJlZ2lzdHJvIgogICAgSURfRkFWT1VSSVRFU19BRERUT0ZBVk9VUklURVMgIkHxYWRlIGNsYXZlcyBhIGxhIGxpc3RhIGRlIGZhdm9yaXRvcyIKICAgIElEX0ZBVk9VUklURVNfUkVNT1ZFRkFWT1VSSVRFICJFbGltaW5hIGNsYXZlcyBkZSBsYSBsaXN0YSBkZSBmYXZvcml0b3MiCiAgICBJRF9WSUVXX1NUQVRVU0JBUiAgICAgICAiTXVlc3RyYSB1IG9jdWx0YSBsYSBiYXJyYSBkZSBlc3RhZG8iCiAgICBJRF9WSUVXX1NQTElUICAgICAgICAgICAiQ2FtYmlhIGxhIHBvc2ljafNuIGRlbCBzZXBhcmFkb3IgZW50cmUgZG9zIHBhbmVsZXMiCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAiQWN0dWFsaXphIGxhIHZlbnRhbmEiCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAiRWxpbWluYSBsYSBzZWxlY2Np824iCiAgICBJRF9FRElUX1JFTkFNRSAgICAgICAgICAiUmVub21icmEgbGEgc2VsZWNjafNuIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIkNvcGlhIGVsIG5vbWJyZSBkZSBsYSBjbGF2ZSBzZWxlY2Npb25hZGEgYWwgcG9ydGFwYXBlbGVzIgogICAgSURfRURJVF9GSU5EICAgICAgICAgICAgIkJ1c2NhIHVuYSBjYWRlbmEgZGUgdGV4dG8gZW4gdW5hIGNsYXZlLCB2YWxvciBvIGRhdG9zIgogICAgSURfRURJVF9GSU5ETkVYVCAgICAgICAgIkJ1c2NhIGxhIHNpZ3VpZW50ZSBvY3VycmVuY2lhIGRlbCB0ZXh0byBlc3BlY2lmaWNhZG8gZW4gbGEgYvpzcXVlZGEgYW50ZXJpb3IiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qCiAqIERpYWxvZwogKi8KCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAgNTAsIDUwLCAyNjgsIDk4ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfAogICAgV1NfQk9SREVSCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCkVORAoKSUREX0RJQUxPRzIgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxODcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkRp4WxvZ28iCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIkFjZXB0YXIiLElET0ssMTMwLDcsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQ2FuY2VsYXIiLElEQ0FOQ0VMLDEzMCwyNCw1MCwxNApFTkQKCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9wZW5zIFJlZ2lzdHJ5IEVkaXRvciBIZWxwLiIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkRpc3BsYXlzIHByb2dyYW0gaW5mb3JtYXRpb24sIHZlcnNpb24gbnVtYmVyLCBhbmQgY29weXJpZ2h0LiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==