IyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJhcHB0ZXN0IiAtIFBhY2thZ2UgT3duZXI9PDQ+CiMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKIyAqKiDK1L24pLekyqSkpMekr6TApLWkpCAqKgoKIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgR2VuZXJpYyBQcm9qZWN0IiAweDAxMGEKCkNGRz1hcHB0ZXN0IC0gV2luMzIgRGVidWcKIU1FU1NBR0UgpLOk7KTPza24+qTKjtKOso64jsyOp46yjtmkx6TPpKKk6qTepLuk86GjIKSzpM6OzI7fjtuOvI7ejqqOuI7EpPKOy47ejtmOxI7epLmk66S/pOGky6TPIE5NQUtFIKTyu8jN0aS3pMakr6TApLWkpKGjCiFNRVNTQUdFIFuO0o6yjriOzI6njrKO2aTOjrSOuI69js6O346wjsRdII66js+O3Y7Ejt6k8rvIzdGkt6TGvMK51KS3pMakr6TApLWkpAohTUVTU0FHRSAKIU1FU1NBR0UgTk1BS0UgL2YgImFwcHRlc3QubWFrIi4KIU1FU1NBR0UgCiFNRVNTQUdFIE5NQUtFIKTOvMK51Lv+pMu5vcCupPK72MTqpMekraTepLkKIU1FU1NBR0UgjrqOz47djsSO3iCO146yjt2+5aTHjs+OuI7bpM7A38TqpPLE6rXBpLek3qS5oaPO4zoKIU1FU1NBR0UgCiFNRVNTQUdFIE5NQUtFIC9mICJhcHB0ZXN0Lm1hayIgQ0ZHPSJhcHB0ZXN0IC0gV2luMzIgRGVidWciCiFNRVNTQUdFIAohTUVTU0FHRSDBqsLyssTHvaTKjsuO3o7ZjsSO3iCO046wjsSO3joKIU1FU1NBR0UgCiFNRVNTQUdFICJhcHB0ZXN0IC0gV2luMzIgUmVsZWFzZSIgKCJXaW4zMiAoeDg2KSBHZW5lcmljIFByb2plY3QiIM3RKQohTUVTU0FHRSAiYXBwdGVzdCAtIFdpbjMyIERlYnVnIiAoIldpbjMyICh4ODYpIEdlbmVyaWMgUHJvamVjdCIgzdEpCiFNRVNTQUdFIAoKIyBCZWdpbiBQcm9qZWN0CiMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCiMgUFJPUCBTY2NfUHJvak5hbWUgIiIKIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKTVRMPW1pZGwuZXhlCgohSUYgICIkKENGRykiID09ICJhcHB0ZXN0IC0gV2luMzIgUmVsZWFzZSIKCiMgUFJPUCBCQVNFIFVzZV9NRkMgMAojIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgojIFBST1AgVXNlX01GQyAwCiMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiCiMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgojIFBST1AgVGFyZ2V0X0RpciAiIgojIEJlZ2luIFNwZWNpYWwgQnVpbGQgVG9vbApPdXREaXI9LlxSZWxlYXNlClNPVVJDRT0iJChJbnB1dFBhdGgpIgpQb3N0QnVpbGRfQ21kcz1mYyAvYiAuXHRlc3RpbWcucHBtICQoT3V0RGlyKVx0ZXN0b3V0LnBwbQlmYyAvYiAuXHRlc3RpbWcuYm1wICQoT3V0RGlyKVx0ZXN0b3V0LmJtcAlmYyAvYiAuXHRlc3RpbWcuanBnICQoT3V0RGlyKVx0ZXN0b3V0LmpwZwlmYyAvYiAuXHRlc3RpbWcucHBtICQoT3V0RGlyKVx0ZXN0b3V0cC5wcG0JZmMgL2IgLlx0ZXN0aW1ncC5qcGcgJChPdXREaXIpXHRlc3RvdXRwLmpwZwlmYyAvYiAuXHRlc3RvcmlnLmpwZyAkKE91dERpcilcdGVzdG91dHQuanBnCiMgRW5kIFNwZWNpYWwgQnVpbGQgVG9vbAoKIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImFwcHRlc3QgLSBXaW4zMiBEZWJ1ZyIKCiMgUFJPUCBCQVNFIFVzZV9NRkMgMAojIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCiMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgojIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCiMgUFJPUCBVc2VfTUZDIDAKIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQojIFBST1AgT3V0cHV0X0RpciAiRGVidWciCiMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKIyBQUk9QIFRhcmdldF9EaXIgIiIKIyBCZWdpbiBTcGVjaWFsIEJ1aWxkIFRvb2wKT3V0RGlyPS5cRGVidWcKU09VUkNFPSIkKElucHV0UGF0aCkiClBvc3RCdWlsZF9DbWRzPWZjIC9iIC5cdGVzdGltZy5wcG0gJChPdXREaXIpXHRlc3RvdXQucHBtCWZjIC9iIC5cdGVzdGltZy5ibXAgJChPdXREaXIpXHRlc3RvdXQuYm1wCWZjIC9iIC5cdGVzdGltZy5qcGcgJChPdXREaXIpXHRlc3RvdXQuanBnCWZjIC9iIC5cdGVzdGltZy5wcG0gJChPdXREaXIpXHRlc3RvdXRwLnBwbQlmYyAvYiAuXHRlc3RpbWdwLmpwZyAkKE91dERpcilcdGVzdG91dHAuanBnCWZjIC9iIC5cdGVzdG9yaWcuanBnICQoT3V0RGlyKVx0ZXN0b3V0dC5qcGcKIyBFbmQgU3BlY2lhbCBCdWlsZCBUb29sCgohRU5ESUYgCgojIEJlZ2luIFRhcmdldAoKIyBOYW1lICJhcHB0ZXN0IC0gV2luMzIgUmVsZWFzZSIKIyBOYW1lICJhcHB0ZXN0IC0gV2luMzIgRGVidWciCiMgQmVnaW4gR3JvdXAgIlRlc3QgSW1hZ2UgRmlsZXMiCgojIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiouanBnOyouYm1wOyoucHBtIgojIEJlZ2luIFNvdXJjZSBGaWxlCgpTT1VSQ0U9Llx0ZXN0aW1nLmJtcAojIEVuZCBTb3VyY2UgRmlsZQojIEJlZ2luIFNvdXJjZSBGaWxlCgpTT1VSQ0U9Llx0ZXN0aW1nLmpwZwojIEVuZCBTb3VyY2UgRmlsZQojIEJlZ2luIFNvdXJjZSBGaWxlCgpTT1VSQ0U9Llx0ZXN0aW1nLnBwbQoKIUlGICAiJChDRkcpIiA9PSAiYXBwdGVzdCAtIFdpbjMyIFJlbGVhc2UiCgojIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCiMgQmVnaW4gQ3VzdG9tIEJ1aWxkCklucHV0RGlyPS4KT3V0RGlyPS5cUmVsZWFzZQpJbnB1dFBhdGg9Llx0ZXN0aW1nLnBwbQoKQnVpbGRDbWRzPSBcCgllY2hvICQoT3V0RGlyKVxjanBlZyAtZGN0IGludCAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5qcGcgLlx0ZXN0aW1nLnBwbSBcCgkkKE91dERpcilcY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXQuanBnIC5cdGVzdGltZy5wcG0gXAoJZWNobyAkKE91dERpcilcY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXRwLmpwZyAuXHRlc3RpbWcucHBtIFwKCSQoT3V0RGlyKVxjanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHAuanBnIC5cdGVzdGltZy5wcG0gXAoJCgoiJChPdXREaXIpXHRlc3RvdXQuanBnIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgogICAkKEJ1aWxkQ21kcykKCiIkKE91dERpcilcdGVzdG91dHAuanBnIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgogICAkKEJ1aWxkQ21kcykKIyBFbmQgQ3VzdG9tIEJ1aWxkCgohRUxTRUlGICAiJChDRkcpIiA9PSAiYXBwdGVzdCAtIFdpbjMyIERlYnVnIgoKIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQojIEJlZ2luIEN1c3RvbSBCdWlsZCAtIFRlc3RpbmcgLSAkKElucHV0UGF0aCkKSW5wdXREaXI9LgpPdXREaXI9LlxEZWJ1ZwpJbnB1dFBhdGg9Llx0ZXN0aW1nLnBwbQoKQnVpbGRDbWRzPSBcCgllY2hvICQoT3V0RGlyKVxjanBlZyAtZGN0IGludCAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5qcGcgLlx0ZXN0aW1nLnBwbSBcCgkkKE91dERpcilcY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXQuanBnIC5cdGVzdGltZy5wcG0gXAoJZWNobyAkKE91dERpcilcY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXRwLmpwZyAuXHRlc3RpbWcucHBtIFwKCSQoT3V0RGlyKVxjanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHAuanBnIC5cdGVzdGltZy5wcG0gXAoJCgoiJChPdXREaXIpXHRlc3RvdXQuanBnIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgogICAkKEJ1aWxkQ21kcykKCiIkKE91dERpcilcdGVzdG91dHAuanBnIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgogICAkKEJ1aWxkQ21kcykKIyBFbmQgQ3VzdG9tIEJ1aWxkCgohRU5ESUYgCgojIEVuZCBTb3VyY2UgRmlsZQojIEJlZ2luIFNvdXJjZSBGaWxlCgpTT1VSQ0U9Llx0ZXN0aW1ncC5qcGcKIyBFbmQgU291cmNlIEZpbGUKIyBCZWdpbiBTb3VyY2UgRmlsZQoKU09VUkNFPS5cdGVzdG9yaWcuanBnCgohSUYgICIkKENGRykiID09ICJhcHB0ZXN0IC0gV2luMzIgUmVsZWFzZSIKCiMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKIyBCZWdpbiBDdXN0b20gQnVpbGQKSW5wdXREaXI9LgpPdXREaXI9LlxSZWxlYXNlCklucHV0UGF0aD0uXHRlc3RvcmlnLmpwZwoKQnVpbGRDbWRzPSBcCgllY2hvICQoT3V0RGlyKVxkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0LnBwbSAuXHRlc3RvcmlnLmpwZyBcCgkkKE91dERpcilcZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5wcG0gLlx0ZXN0b3JpZy5qcGcgXAoJZWNobyAkKE91dERpcilcZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5ibXAgLlx0ZXN0b3JpZy5qcGcgXAoJJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXQuYm1wIC5cdGVzdG9yaWcuanBnIFwKCQoKIiQoT3V0RGlyKVx0ZXN0b3V0LnBwbSIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKICAgJChCdWlsZENtZHMpCgoiJChPdXREaXIpXHRlc3RvdXQuYm1wIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgogICAkKEJ1aWxkQ21kcykKIyBFbmQgQ3VzdG9tIEJ1aWxkCgohRUxTRUlGICAiJChDRkcpIiA9PSAiYXBwdGVzdCAtIFdpbjMyIERlYnVnIgoKIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQojIEJlZ2luIEN1c3RvbSBCdWlsZCAtIFRlc3RpbmcgLSAkKElucHV0UGF0aCkKSW5wdXREaXI9LgpPdXREaXI9LlxEZWJ1ZwpJbnB1dFBhdGg9Llx0ZXN0b3JpZy5qcGcKCkJ1aWxkQ21kcz0gXAoJZWNobyAkKE91dERpcilcZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dC5wcG0gLlx0ZXN0b3JpZy5qcGcgXAoJJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXQucHBtIC5cdGVzdG9yaWcuanBnIFwKCWVjaG8gJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXQuYm1wIC5cdGVzdG9yaWcuanBnIFwKCSQoT3V0RGlyKVxkanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0LmJtcCAuXHRlc3RvcmlnLmpwZyBcCgkKCiIkKE91dERpcilcdGVzdG91dC5wcG0iIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCiAgICQoQnVpbGRDbWRzKQoKIiQoT3V0RGlyKVx0ZXN0b3V0LmJtcCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSIKICAgJChCdWlsZENtZHMpCiMgRW5kIEN1c3RvbSBCdWlsZAoKIUVORElGIAoKIyBFbmQgU291cmNlIEZpbGUKIyBCZWdpbiBTb3VyY2UgRmlsZQoKU09VUkNFPS5cdGVzdHByb2cuanBnCgohSUYgICIkKENGRykiID09ICJhcHB0ZXN0IC0gV2luMzIgUmVsZWFzZSIKCiMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKIyBCZWdpbiBDdXN0b20gQnVpbGQKSW5wdXREaXI9LgpPdXREaXI9LlxSZWxlYXNlCklucHV0UGF0aD0uXHRlc3Rwcm9nLmpwZwoKQnVpbGRDbWRzPSBcCgllY2hvICQoT3V0RGlyKVxkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0cC5wcG0gLlx0ZXN0cHJvZy5qcGcgXAoJJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXRwLnBwbSAuXHRlc3Rwcm9nLmpwZyBcCgllY2hvICQoT3V0RGlyKVxqcGVndHJhbiAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHQuanBnIC5cdGVzdHByb2cuanBnIFwKCSQoT3V0RGlyKVxqcGVndHJhbiAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHQuanBnIC5cdGVzdHByb2cuanBnIFwKCQoKIiQoT3V0RGlyKVx0ZXN0b3V0cC5wcG0iIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCiAgICQoQnVpbGRDbWRzKQoKIiQoT3V0RGlyKVx0ZXN0b3V0dC5qcGciIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCiAgICQoQnVpbGRDbWRzKQojIEVuZCBDdXN0b20gQnVpbGQKCiFFTFNFSUYgICIkKENGRykiID09ICJhcHB0ZXN0IC0gV2luMzIgRGVidWciCgojIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCiMgQmVnaW4gQ3VzdG9tIEJ1aWxkIC0gVGVzdGluZyAtICQoSW5wdXRQYXRoKQpJbnB1dERpcj0uCk91dERpcj0uXERlYnVnCklucHV0UGF0aD0uXHRlc3Rwcm9nLmpwZwoKQnVpbGRDbWRzPSBcCgllY2hvICQoT3V0RGlyKVxkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlICQoT3V0RGlyKVx0ZXN0b3V0cC5wcG0gLlx0ZXN0cHJvZy5qcGcgXAoJJChPdXREaXIpXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgJChPdXREaXIpXHRlc3RvdXRwLnBwbSAuXHRlc3Rwcm9nLmpwZyBcCgllY2hvICQoT3V0RGlyKVxqcGVndHJhbiAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHQuanBnIC5cdGVzdHByb2cuanBnIFwKCSQoT3V0RGlyKVxqcGVndHJhbiAtb3V0ZmlsZSAkKE91dERpcilcdGVzdG91dHQuanBnIC5cdGVzdHByb2cuanBnIFwKCQoKIiQoT3V0RGlyKVx0ZXN0b3V0cC5wcG0iIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCiAgICQoQnVpbGRDbWRzKQoKIiQoT3V0RGlyKVx0ZXN0b3V0dC5qcGciIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiCiAgICQoQnVpbGRDbWRzKQojIEVuZCBDdXN0b20gQnVpbGQKCiFFTkRJRiAKCiMgRW5kIFNvdXJjZSBGaWxlCiMgRW5kIEdyb3VwCiMgRW5kIFRhcmdldAojIEVuZCBQcm9qZWN0Cg==