LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAid2luaGVscF9yZXMuaCIKCkxBTkdVQUdFIExBTkdfU0xPVkFLLCBTVUJMQU5HX0RFRkFVTFQKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImU/pib3IiIHsKICAgTUVOVUlURU0gIiZPdHZvcmmdLi4uIiwgTU5JRF9GSUxFX09QRU4KICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImVGxh6GmdIiwgTU5JRF9GSUxFX1BSSU5UCiAgIE1FTlVJVEVNICImTmFzdGF2ZW5pZSB0bGHoZS4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIlUma29u6GmdIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImVXByYXZpnSIgewogICBNRU5VSVRFTSAiS29w7SZyb3ZhnS4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJlNrb21lbnRvdmGdLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiJlrhbG+ea2EiIHsKICAgTUVOVUlURU0gIiZEZWZpbm92YZ0uLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJk9wdGlvbnMiIHsKICAgUE9QVVAJIkhlbHAgYWx3YXlzIHZpc2libGUiCiAgIEJFR0lOCiAgICAgTUVOVUlURU0gIkRlZmF1bHQiLAlNTklEX09QVFNfSEVMUF9ERUZBVUxUCiAgICAgTUVOVUlURU0gIlZpc2libGUiLAlNTklEX09QVFNfSEVMUF9WSVNJQkxFCiAgICAgTUVOVUlURU0gIk5vbiB2aXNpYmxlIiwJTU5JRF9PUFRTX0hFTFBfTk9OVklTSUJMRQogIEVORAogIE1FTlVJVEVNICJIaXN0b3J5IiwJCU1OSURfT1BUU19ISVNUT1JZCiAgUE9QVVAgICAgIkZvbnRzIgogIEJFR0lOCiAgICBNRU5VSVRFTSAiU21hbGwiLAkJTU5JRF9PUFRTX0ZPTlRTX1NNQUxMCiAgICBNRU5VSVRFTSAiTm9ybWFsIiwgICAgCU1OSURfT1BUU19GT05UU19OT1JNQUwKICAgIE1FTlVJVEVNICJMYXJnZSIsICAgICAJTU5JRF9PUFRTX0ZPTlRTX0xBUkdFCiAgRU5ECiAgTUVOVUlURU0gIlVzZSBzeXN0ZW0gY29sb3JzIiwJTU5JRF9PUFRTX1NZU1RFTV9DT0xPUlMKIH0KIFBPUFVQICImUG9tb2MiIHsKICAgTUVOVUlURU0gIlBvbW9jICZuYSBwb21vY2kiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICJWnmR5IG5hICZ2cmNodSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkluZm8uLi4iLCBNTklEX0hFTFBfQUJPVVQKIH0KfQoKLyogU3RyaW5ncyAqLwpTVFJJTkdUQUJMRQp7ClNUSURfV0lORV9IRUxQLCAgICAgICAgICAgICAiV2luZSBQb21vYyIKU1RJRF9XSEVSUk9SLCAgICAgICAgICAgICAgICJDSFlCQSIKU1RJRF9XQVJOSU5HLCAgICAgICAgICAgICAgICJWQVJPVkFOSUUiClNUSURfSU5GTywgICAgICAgICAgICAgICAgICAiSW5mb3Jt4WNpZSIKU1RJRF9OT1RfSU1QTEVNRU5URUQsICAgICAgICJOZWltcGxlbWVudG92YW7pIgpTVElEX0hMUEZJTEVfRVJST1JfcywgICAgICAgIkNoeWJhIHBv6GFzIOjtdGFuaWEgc/pib3J1IGAlcyciClNUSURfSU5ERVgsICAgICAgICAgICAgICAgICAiJk9ic2FoIgpTVElEX0NPTlRFTlRTLAkJICAgICJTdW1tYXJ5IgpTVElEX0JBQ0ssICAgICAgICAgICAgICAgICAgIiZTcOSdIgpTVElEX0FMTF9GSUxFUywgICAgICAgICAgICAgIlaaZXRreSBz+mJvcnkgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsICAgICAgICAiU/pib3J5IHBvbW9jaSAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MgICAgICAgIkNhbm5vdCBmaW5kICclcycuIERvIHlvdSB3YW50IHRvIGZpbmQgdGhpcyBmaWxlIHlvdXJzZWxmPyIKU1RJRF9OT19SSUNIRURJVAkgICAgIkNhbm5vdCBmaW5kIGEgcmljaGVkaXQgaW1wbGVtZW50YXRpb24uLi4gQWJvcnRpbmciCn0K