LyoKICogIE5vdGVwYWQgKFN3ZWRpc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTcsOTggTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgogKiAgQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqICBDb3B5cmlnaHQgMjAwNywgMjAwOCBEYW5pZWwgTnlsYW5kZXIgPHBvQGRhbmllbG55bGFuZGVyLnNlPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAibm90ZXBhZF9yZXMuaCIKCkxBTkdVQUdFIExBTkdfU1dFRElTSCwgU1VCTEFOR19ORVVUUkFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkFya2l2IiB7CiAgTUVOVUlURU0gIiZOeVx0Q3RybCtOIiwgICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gItYmcHBuYS4uLlx0Q3RybCtPIiwgICAgICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImU3BhcmFcdEN0cmwrUyIsICAgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiU3BhcmEgcyZvbS4uLiIsICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2tyaXYgdXQuLi5cdEN0cmwrUCIsICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNpZGxhJnlvdXQuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJTa3JpdmFyJmtvbmZpZ3VyYXRpb24uLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQXZzbHV0YSIsICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICImUmVkaWdlcmEiIHsKICBNRU5VSVRFTSAiJsVuZ3JhXHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiS2xpcHAgJnV0XHRDdHJsK1giLCAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZLb3BpZXJhXHRDdHJsK0MiLCAgQ01EX0NPUFkKICBNRU5VSVRFTSAiS2xpc3RyYSAmaW5cdEN0cmwrViIsICAgICAgIENNRF9QQVNURQogIE1FTlVJVEVNICImVGEgYm9ydFx0RGVsIiwgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiTWFya2VyYSAmYWxsdCIsICAgICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImVGlkL0RhdHVtXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkRlbGEgbOVuZ2EgbWVuaW5nYXIiLCAgICAgIENNRF9XUkFQCiAgTUVOVUlURU0gIiZGb250Li4uIiwgICAgICAgICAgQ01EX0ZPTlQKIH0KUE9QVVAgIiZT9msiIHsKICBNRU5VSVRFTSAiU/ZrLi4uIiwgICAgICAgICAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZT9msgbuRzdGFcdEYzIiwgICAgQ01EX1NFQVJDSF9ORVhUCiAgTUVOVUlURU0gIiZFcnPkdHQuLi5cdEN0cmwrSCIsIENNRF9SRVBMQUNFCiB9ClBPUFVQICImSGrkbHAiIHsKICBNRU5VSVRFTSAiJklubmVo5WxsIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImU/ZrLi4uIiwgICAgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICJBbnbkbmRuaW5nICZhdiBoauRscCIsICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJk9tIEFudGVja25pbmdhciIsIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJTaWRsYXlvdXQiCnsKTFRFWFQgICAgIiZTaWRodXZ1ZDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlNpZGZvdDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIkthbnRlcjoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZW5G5zdGVyOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICIm1nZlcjoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSPZnZXI6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImVW5kZXI6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBdmJyeXQiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZIauRscCIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KCklERF9PRk5fVEVNUExBVEUgIERJQUxPRyAgRElTQ0FSREFCTEUgNTAsNTAsMzAwLDE1ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfCBXU19CT1JERVIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIExURVhUICJLb2RuaW5nOiIsIC0xLCA1LDAsIDUwLDEyCiAgQ09NQk9CT1ggSURDX09GTl9FTkNDT01CTywgNTMsMCwgMTU2LDQ4LCBXU19DSElMRCB8IFdTX1ZTQ1JPTEwgfCBDQlNfRFJPUERPV05MSVNUCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiU2lkYSAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbnRlY2tuaW5nYXIiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGRUwiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWQVJOSU5HIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24iCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKG5hbW5s9nMpIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGEgZmlsZXIgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAJIlRleHRmaWxlciAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuICclcycg5HIgZvZyIHN0b3IgZvZyIEFudGVja25pbmdhci5cbiBcCkFuduRuZCBlbiBhbm5hbiByZWRpZ2VyYXJlLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR1IHNrcmV2IGludGUgaW4gbuVnb24gdGV4dC4gXApcblNrcml2IG7lZ290IG9jaCBm9nJz9msgc2VkYW4gaWdlbiIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuICclcydcbmZpbm5zIGludGVcblxuIFwKVmlsbCBkdSBza2FwYSBlbiBueSBmaWw/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gJyVzJ1xuaGFyIORuZHJhdHNcblxuIFwKVmlsbCBkdSBzcGFyYSDkbmRyaW5nYXJuYT8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGhpdHRhZGVzIGludGUuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIkRldCBmaW5ucyBpbnRlIHRpbGxy5GNrbGlndCBtZWQgbWlubmUgZvZyIGF0dCBzbHV0ZvZyYSBcCmRlbiBo5HIgdXBwZ2lmdGVuLlxuQXZzbHV0YSBldHQgZWxsZXIgZmxlcmEgcHJvZ3JhbSBm9nIgYXR0IPZrYSBt5G5nZGVuXG5sZWRpZ3QgXAptaW5uZS4iCgpTVFJJTkdfVU5JQ09ERV9MRSwgICAgICJVbmljb2RlIChVVEYtMTYpIgpTVFJJTkdfVU5JQ09ERV9CRSwgICAgICJVbmljb2RlIChVVEYtMTYgYmlnLWVuZGlhbikiCgpTVFJJTkdfTE9TU19PRl9VTklDT0RFX0NIQVJBQ1RFUlMsICAgICAgICAgIiVzXG5cCkRlbm5hIGZpbCBpbm5laOVsbGVyIFVuaWNvZGUtdGVja2VuIHZpbGthIGtvbW1lciBhdHQgZ+VcblwKZvZybG9yYWRlIG9tIGR1IHNwYXJhciBmaWxlbiB1bmRlciBrb2RuaW5nZW4gJXMuXG5cCktsaWNrYSBBdmJyeXQgb2NoIHbkbGogc2VkYW4gZXR0IGF2IFVuaWNvZGUtYWx0ZXJuYXRpdmVuXG5cCmkgdGVja2Vua29kbmluZ3NsaXN0YW4gZvZyIGF0dCBiZWjlbGxhIGRlc3NhIHRlY2tlbi5cblwKVmlsbCBkdSBmb3J0c+R0dGE/Igp9Cg==