f0VMRgIBAQAAAAAAAAAAAAEAPgABAAAAAAAAAAAAAAAAAAAAAAAAALgdAAAAAAAAAAAAAEAAAAAAAEAABQACAHYyOwpwYWNrYWdlIHRpbWU7CnBrZ3BhdGggdGltZTsKaW1wb3J0IGVycm9ycyBlcnJvcnMgImVycm9ycyI7CmltcG9ydCBzeW5jIHN5bmMgInN5bmMiOwppbXBvcnQgc3lzY2FsbCBzeXNjYWxsICJzeXNjYWxsIjsKaW5pdCB0aW1lIHRpbWUuLmltcG9ydCBydW50aW1lIHJ1bnRpbWUuLmltcG9ydCBzeW5jIHN5bmMuLmltcG9ydCBzeXNjYWxsIHN5c2NhbGwuLmltcG9ydDsKaW5pdF9ncmFwaCAwIDEgMCAyIDAgMyAyIDEgMyAxIDMgMjsKY29uc3QgQU5TSUMgPSAiTW9uIEphbiBfMiAxNTowNDowNSAyMDA2IjsKZnVuYyBBZnRlciAoZCA8dHlwZSAxICJEdXJhdGlvbiIgPHR5cGUgLTQ+CiBmdW5jIChkIDx0eXBlIDE+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKGQgPHR5cGUgMT4pIE5hbm9zZWNvbmRzICgpIDx0eXBlIC00PjsKIGZ1bmMgKGQgPHR5cGUgMT4pIFNlY29uZHMgKCkgPHR5cGUgLTEwPjsKIGZ1bmMgKGQgPHR5cGUgMT4pIE1pbnV0ZXMgKCkgPHR5cGUgLTEwPjsKIGZ1bmMgKGQgPHR5cGUgMT4pIEhvdXJzICgpIDx0eXBlIC0xMD47Cj4pIDx0eXBlIDIgY2hhbiA8LSA8dHlwZSAzICJUaW1lIiA8dHlwZSA0IHN0cnVjdCB7IC50aW1lLnNlYyA8dHlwZSAtND47IC50aW1lLm5zZWMgPHR5cGUgLTM+OyAudGltZS5sb2MgPHR5cGUgNSAqPHR5cGUgNiAiTG9jYXRpb24iIDx0eXBlIDcgc3RydWN0IHsgLnRpbWUubmFtZSA8dHlwZSAtMTY+OyAudGltZS56b25lIDx0eXBlIDggW10gPHR5cGUgOSAiLnRpbWUuem9uZSIgPHR5cGUgMTAgc3RydWN0IHsgLnRpbWUubmFtZSA8dHlwZSAtMTY+OyAudGltZS5vZmZzZXQgPHR5cGUgLTExPjsgLnRpbWUuaXNEU1QgPHR5cGUgLTE1PjsgfT4+PjsgLnRpbWUudHggPHR5cGUgMTEgW10gPHR5cGUgMTIgIi50aW1lLnpvbmVUcmFucyIgPHR5cGUgMTMgc3RydWN0IHsgLnRpbWUud2hlbiA8dHlwZSAtND47IC50aW1lLmluZGV4IDx0eXBlIC01PjsgLnRpbWUuaXNzdGQgPHR5cGUgLTE1PjsgLnRpbWUuaXN1dGMgPHR5cGUgLTE1PjsgfT4+PjsgLnRpbWUuY2FjaGVTdGFydCA8dHlwZSAtND47IC50aW1lLmNhY2hlRW5kIDx0eXBlIC00PjsgLnRpbWUuY2FjaGVab25lIDx0eXBlIDE0ICo8dHlwZSA5Pj47IH0+CiBmdW5jIChsIDx0eXBlIDE1ICo8dHlwZSA2Pj4pIC50aW1lLmdldCAoKSA8dHlwZSAxNT47CiBmdW5jIChsIDx0eXBlIDE1PikgU3RyaW5nICgpIDx0eXBlIC0xNj47CiBmdW5jIChsIDx0eXBlIDE1PikgLnRpbWUubG9va3VwIChzZWMgPHR5cGUgLTQ+KSAobmFtZSA8dHlwZSAtMTY+LCBvZmZzZXQgPHR5cGUgLTExPiwgaXNEU1QgPHR5cGUgLTE1Piwgc3RhcnQgPHR5cGUgLTQ+LCBlbmQgPHR5cGUgLTQ+KTsKIGZ1bmMgKGwgPHR5cGUgMTU+KSAudGltZS5sb29rdXBGaXJzdFpvbmUgKCkgPHR5cGUgLTExPjsKIGZ1bmMgKGwgPHR5cGUgMTU+KSAudGltZS5maXJzdFpvbmVVc2VkICgpIDx0eXBlIC0xNT47CiBmdW5jIChsIDx0eXBlIDE1PikgLnRpbWUubG9va3VwTmFtZSAobmFtZSA8dHlwZSAtMTY+LCB1bml4IDx0eXBlIC00PikgKG9mZnNldCA8dHlwZSAtMTE+LCBpc0RTVCA8dHlwZSAtMTU+LCBvayA8dHlwZSAtMTU+KTsKPj47IH0+CiBmdW5jICh0IDx0eXBlIDM+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHQgPHR5cGUgMz4pIEZvcm1hdCAobGF5b3V0IDx0eXBlIC0xNj4pIDx0eXBlIC0xNj47CiBmdW5jICh0IDx0eXBlIDM+KSBBcHBlbmRGb3JtYXQgKGIgPHR5cGUgMTYgW10gPHR5cGUgLTIwPj4sIGxheW91dCA8dHlwZSAtMTY+KSA8dHlwZSAxNyBbXSA8dHlwZSAtMjA+PjsKIGZ1bmMgKHQgPHR5cGUgMz4pIEFmdGVyICh1IDx0eXBlIDM+KSA8dHlwZSAtMTU+OwogZnVuYyAodCA8dHlwZSAzPikgQmVmb3JlICh1IDx0eXBlIDM+KSA8dHlwZSAtMTU+OwogZnVuYyAodCA8dHlwZSAzPikgRXF1YWwgKHUgPHR5cGUgMz4pIDx0eXBlIC0xNT47CiBmdW5jICh0IDx0eXBlIDM+KSBJc1plcm8gKCkgPHR5cGUgLTE1PjsKIGZ1bmMgKHQgPHR5cGUgMz4pIC50aW1lLmFicyAoKSA8dHlwZSAtOD47CiBmdW5jICh0IDx0eXBlIDM+KSAudGltZS5sb2NhYnMgKCkgKG5hbWUgPHR5cGUgLTE2Piwgb2Zmc2V0IDx0eXBlIC0xMT4sIGFicyA8dHlwZSAtOD4pOwogZnVuYyAodCA8dHlwZSAzPikgRGF0ZSAoKSAoeWVhciA8dHlwZSAtMTE+LCBtb250aCA8dHlwZSAxOCAiTW9udGgiIDx0eXBlIC0xMT4KIGZ1bmMgKG0gPHR5cGUgMTg+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKPiwgZGF5IDx0eXBlIC0xMT4pOwogZnVuYyAodCA8dHlwZSAzPikgWWVhciAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSAzPikgTW9udGggKCkgPHR5cGUgMTg+OwogZnVuYyAodCA8dHlwZSAzPikgRGF5ICgpIDx0eXBlIC0xMT47CiBmdW5jICh0IDx0eXBlIDM+KSBXZWVrZGF5ICgpIDx0eXBlIDE5ICJXZWVrZGF5IiA8dHlwZSAtMTE+CiBmdW5jIChkIDx0eXBlIDE5PikgU3RyaW5nICgpIDx0eXBlIC0xNj47Cj47CiBmdW5jICh0IDx0eXBlIDM+KSBJU09XZWVrICgpICh5ZWFyIDx0eXBlIC0xMT4sIHdlZWsgPHR5cGUgLTExPik7CiBmdW5jICh0IDx0eXBlIDM+KSBDbG9jayAoKSAoaG91ciA8dHlwZSAtMTE+LCBtaW4gPHR5cGUgLTExPiwgc2VjIDx0eXBlIC0xMT4pOwogZnVuYyAodCA8dHlwZSAzPikgSG91ciAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSAzPikgTWludXRlICgpIDx0eXBlIC0xMT47CiBmdW5jICh0IDx0eXBlIDM+KSBTZWNvbmQgKCkgPHR5cGUgLTExPjsKIGZ1bmMgKHQgPHR5cGUgMz4pIE5hbm9zZWNvbmQgKCkgPHR5cGUgLTExPjsKIGZ1bmMgKHQgPHR5cGUgMz4pIFllYXJEYXkgKCkgPHR5cGUgLTExPjsKIGZ1bmMgKHQgPHR5cGUgMz4pIEFkZCAoZCA8dHlwZSAxPikgPHR5cGUgMz47CiBmdW5jICh0IDx0eXBlIDM+KSBTdWIgKHUgPHR5cGUgMz4pIDx0eXBlIDE+OwogZnVuYyAodCA8dHlwZSAzPikgQWRkRGF0ZSAoeWVhcnMgPHR5cGUgLTExPiwgbW9udGhzIDx0eXBlIC0xMT4sIGRheXMgPHR5cGUgLTExPikgPHR5cGUgMz47CiBmdW5jICh0IDx0eXBlIDM+KSAudGltZS5kYXRlIChmdWxsIDx0eXBlIC0xNT4pICh5ZWFyIDx0eXBlIC0xMT4sIG1vbnRoIDx0eXBlIDE4PiwgZGF5IDx0eXBlIC0xMT4sIHlkYXkgPHR5cGUgLTExPik7CiBmdW5jICh0IDx0eXBlIDM+KSBVVEMgKCkgPHR5cGUgMz47CiBmdW5jICh0IDx0eXBlIDM+KSBMb2NhbCAoKSA8dHlwZSAzPjsKIGZ1bmMgKHQgPHR5cGUgMz4pIEluIChsb2MgPHR5cGUgMjAgKjx0eXBlIDY+PikgPHR5cGUgMz47CiBmdW5jICh0IDx0eXBlIDM+KSBMb2NhdGlvbiAoKSA8dHlwZSAyMSAqPHR5cGUgNj4+OwogZnVuYyAodCA8dHlwZSAzPikgWm9uZSAoKSAobmFtZSA8dHlwZSAtMTY+LCBvZmZzZXQgPHR5cGUgLTExPik7CiBmdW5jICh0IDx0eXBlIDM+KSBVbml4ICgpIDx0eXBlIC00PjsKIGZ1bmMgKHQgPHR5cGUgMz4pIFVuaXhOYW5vICgpIDx0eXBlIC00PjsKIGZ1bmMgKHQgPHR5cGUgMz4pIE1hcnNoYWxCaW5hcnkgKCkgKD8gPHR5cGUgMjIgW10gPHR5cGUgLTIwPj4sID8gPHR5cGUgLTE5Pik7CiBmdW5jICh0IDx0eXBlIDIzICo8dHlwZSAzPj4pIFVubWFyc2hhbEJpbmFyeSAoZGF0YSA8dHlwZSAyNCBbXSA8dHlwZSAtMjA+PikgPHR5cGUgLTE5PjsKIGZ1bmMgKHQgPHR5cGUgMz4pIEdvYkVuY29kZSAoKSAoPyA8dHlwZSAyNSBbXSA8dHlwZSAtMjA+PiwgPyA8dHlwZSAtMTk+KTsKIGZ1bmMgKHQgPHR5cGUgMjM+KSBHb2JEZWNvZGUgKGRhdGEgPHR5cGUgMjYgW10gPHR5cGUgLTIwPj4pIDx0eXBlIC0xOT47CiBmdW5jICh0IDx0eXBlIDM+KSBNYXJzaGFsSlNPTiAoKSAoPyA8dHlwZSAyNyBbXSA8dHlwZSAtMjA+PiwgPyA8dHlwZSAtMTk+KTsKIGZ1bmMgKHQgPHR5cGUgMjM+KSBVbm1hcnNoYWxKU09OIChkYXRhIDx0eXBlIDI4IFtdIDx0eXBlIC0yMD4+KSA8dHlwZSAtMTk+OwogZnVuYyAodCA8dHlwZSAzPikgTWFyc2hhbFRleHQgKCkgKD8gPHR5cGUgMjkgW10gPHR5cGUgLTIwPj4sID8gPHR5cGUgLTE5Pik7CiBmdW5jICh0IDx0eXBlIDIzPikgVW5tYXJzaGFsVGV4dCAoZGF0YSA8dHlwZSAzMCBbXSA8dHlwZSAtMjA+PikgPHR5cGUgLTE5PjsKIGZ1bmMgKHQgPHR5cGUgMz4pIFRydW5jYXRlIChkIDx0eXBlIDE+KSA8dHlwZSAzPjsKIGZ1bmMgKHQgPHR5cGUgMz4pIFJvdW5kIChkIDx0eXBlIDE+KSA8dHlwZSAzPjsKPj47CmZ1bmMgQWZ0ZXJGdW5jIChkIDx0eXBlIDE+LCBmIDx0eXBlIDMxICgpPikgPHR5cGUgMzIgKjx0eXBlIDMzICJUaW1lciIgPHR5cGUgMzQgc3RydWN0IHsgQyA8dHlwZSAzNSBjaGFuIDwtIDx0eXBlIDM+PjsgLnRpbWUuciA8dHlwZSAzNiAiLnRpbWUucnVudGltZVRpbWVyIiA8dHlwZSAzNyBzdHJ1Y3QgeyAudGltZS5pIDx0eXBlIC0xMT47IC50aW1lLndoZW4gPHR5cGUgLTQ+OyAudGltZS5wZXJpb2QgPHR5cGUgLTQ+OyAudGltZS5mIDx0eXBlIDM4ICg/IDx0eXBlIDM5IGludGVyZmFjZSB7IH0+LCA/IDx0eXBlIC0xMz4pPjsgLnRpbWUuYXJnIDx0eXBlIDQwIGludGVyZmFjZSB7IH0+OyAudGltZS5zZXEgPHR5cGUgLTEzPjsgfT4+OyB9PgogZnVuYyAodCA8dHlwZSA0MSAqPHR5cGUgMzM+PikgU3RvcCAoKSA8dHlwZSAtMTU+OwogZnVuYyAodCA8dHlwZSA0MT4pIFJlc2V0IChkIDx0eXBlIDE+KSA8dHlwZSAtMTU+Owo+PjsKY29uc3QgQXByaWwgPHR5cGUgMTg+ID0gNCA7CmNvbnN0IEF1Z3VzdCA8dHlwZSAxOD4gPSA4IDsKZnVuYyBEYXRlICh5ZWFyIDx0eXBlIC0xMT4sIG1vbnRoIDx0eXBlIDE4PiwgZGF5IDx0eXBlIC0xMT4sIGhvdXIgPHR5cGUgLTExPiwgbWluIDx0eXBlIC0xMT4sIHNlYyA8dHlwZSAtMTE+LCBuc2VjIDx0eXBlIC0xMT4sIGxvYyA8dHlwZSA0MiAqPHR5cGUgNj4+KSA8dHlwZSAzPjsKY29uc3QgRGVjZW1iZXIgPHR5cGUgMTg+ID0gMTIgOwp0eXBlIDx0eXBlIDE+Owpjb25zdCBGZWJydWFyeSA8dHlwZSAxOD4gPSAyIDsKZnVuYyBGaXhlZFpvbmUgKG5hbWUgPHR5cGUgLTE2Piwgb2Zmc2V0IDx0eXBlIC0xMT4pIDx0eXBlIDE1PjsKY29uc3QgRnJpZGF5IDx0eXBlIDE5PiA9IDUgOwpjb25zdCBIb3VyIDx0eXBlIDE+ID0gMzYwMDAwMDAwMDAwMCA7CmNvbnN0IEphbnVhcnkgPHR5cGUgMTg+ID0gMSA7CmNvbnN0IEp1bHkgPHR5cGUgMTg+ID0gNyA7CmNvbnN0IEp1bmUgPHR5cGUgMTg+ID0gNiA7CmNvbnN0IEtpdGNoZW4gPSAiMzowNFBNIjsKZnVuYyBMb2FkTG9jYXRpb24gKG5hbWUgPHR5cGUgLTE2PikgKD8gPHR5cGUgMTU+LCA/IDx0eXBlIC0xOT4pOwp2YXIgTG9jYWwgPHR5cGUgMTU+Owp0eXBlIDx0eXBlIDY+Owp2YXIgTG9jYXRpb25Tb3VyY2UgPHR5cGUgNDMgKG5hbWUgPHR5cGUgLTE2PikgKD8gPHR5cGUgNDQgW10gPHR5cGUgLTIwPj4sID8gPHR5cGUgLTE5Pik+Owpjb25zdCBNYXJjaCA8dHlwZSAxOD4gPSAzIDsKY29uc3QgTWF5IDx0eXBlIDE4PiA9IDUgOwpjb25zdCBNaWNyb3NlY29uZCA8dHlwZSAxPiA9IDEwMDAgOwpjb25zdCBNaWxsaXNlY29uZCA8dHlwZSAxPiA9IDEwMDAwMDAgOwpjb25zdCBNaW51dGUgPHR5cGUgMT4gPSA2MDAwMDAwMDAwMCA7CmNvbnN0IE1vbmRheSA8dHlwZSAxOT4gPSAxIDsKdHlwZSA8dHlwZSAxOD47CmNvbnN0IE5hbm9zZWNvbmQgPHR5cGUgMT4gPSAxIDsKZnVuYyBOZXdUaWNrZXIgKGQgPHR5cGUgMT4pIDx0eXBlIDQ1ICo8dHlwZSA0NiAiVGlja2VyIiA8dHlwZSA0NyBzdHJ1Y3QgeyBDIDx0eXBlIDQ4IGNoYW4gPC0gPHR5cGUgMz4+OyAudGltZS5yIDx0eXBlIDM2PjsgfT4KIGZ1bmMgKHQgPHR5cGUgNDkgKjx0eXBlIDQ2Pj4pIFN0b3AgKCk7Cj4+OwpmdW5jIE5ld1RpbWVyIChkIDx0eXBlIDE+KSA8dHlwZSAzMj47CmNvbnN0IE5vdmVtYmVyIDx0eXBlIDE4PiA9IDExIDsKZnVuYyBOb3cgKCkgPHR5cGUgMz47CmNvbnN0IE9jdG9iZXIgPHR5cGUgMTg+ID0gMTAgOwpmdW5jIFBhcnNlIChsYXlvdXQgPHR5cGUgLTE2PiwgdmFsdWUgPHR5cGUgLTE2PikgKD8gPHR5cGUgMz4sID8gPHR5cGUgLTE5Pik7CmZ1bmMgUGFyc2VEdXJhdGlvbiAocyA8dHlwZSAtMTY+KSAoPyA8dHlwZSAxPiwgPyA8dHlwZSAtMTk+KTsKdHlwZSA8dHlwZSA1MCAiUGFyc2VFcnJvciIgPHR5cGUgNTEgc3RydWN0IHsgTGF5b3V0IDx0eXBlIC0xNj47IFZhbHVlIDx0eXBlIC0xNj47IExheW91dEVsZW0gPHR5cGUgLTE2PjsgVmFsdWVFbGVtIDx0eXBlIC0xNj47IE1lc3NhZ2UgPHR5cGUgLTE2PjsgfT4KIGZ1bmMgKGUgPHR5cGUgNTIgKjx0eXBlIDUwPj4pIEVycm9yICgpIDx0eXBlIC0xNj47Cj47CmZ1bmMgUGFyc2VJbkxvY2F0aW9uIChsYXlvdXQgPHR5cGUgLTE2PiwgdmFsdWUgPHR5cGUgLTE2PiwgbG9jIDx0eXBlIDUzICo8dHlwZSA2Pj4pICg/IDx0eXBlIDM+LCA/IDx0eXBlIC0xOT4pOwpjb25zdCBSRkMxMTIzID0gIk1vbiwgMDIgSmFuIDIwMDYgMTU6MDQ6MDUgTVNUIjsKY29uc3QgUkZDMTEyM1ogPSAiTW9uLCAwMiBKYW4gMjAwNiAxNTowNDowNSAtMDcwMCI7CmNvbnN0IFJGQzMzMzkgPSAiMjAwNi0wMS0wMlQxNTowNDowNVowNzowMCI7CmNvbnN0IFJGQzMzMzlOYW5vID0gIjIwMDYtMDEtMDJUMTU6MDQ6MDUuOTk5OTk5OTk5WjA3OjAwIjsKY29uc3QgUkZDODIyID0gIjAyIEphbiAwNiAxNTowNCBNU1QiOwpjb25zdCBSRkM4MjJaID0gIjAyIEphbiAwNiAxNTowNCAtMDcwMCI7CmNvbnN0IFJGQzg1MCA9ICJNb25kYXksIDAyLUphbi0wNiAxNTowNDowNSBNU1QiOwpjb25zdCBSdWJ5RGF0ZSA9ICJNb24gSmFuIDAyIDE1OjA0OjA1IC0wNzAwIDIwMDYiOwpjb25zdCBTYXR1cmRheSA8dHlwZSAxOT4gPSA2IDsKY29uc3QgU2Vjb25kIDx0eXBlIDE+ID0gMTAwMDAwMDAwMCA7CmNvbnN0IFNlcHRlbWJlciA8dHlwZSAxOD4gPSA5IDsKZnVuYyBTaW5jZSAodCA8dHlwZSAzPikgPHR5cGUgMT47CmZ1bmMgU2xlZXAgKGQgPHR5cGUgMT4pOwpjb25zdCBTdGFtcCA9ICJKYW4gXzIgMTU6MDQ6MDUiOwpjb25zdCBTdGFtcE1pY3JvID0gIkphbiBfMiAxNTowNDowNS4wMDAwMDAiOwpjb25zdCBTdGFtcE1pbGxpID0gIkphbiBfMiAxNTowNDowNS4wMDAiOwpjb25zdCBTdGFtcE5hbm8gPSAiSmFuIF8yIDE1OjA0OjA1LjAwMDAwMDAwMCI7CmNvbnN0IFN1bmRheSA8dHlwZSAxOT4gPSAwIDsKY29uc3QgVGh1cnNkYXkgPHR5cGUgMTk+ID0gNCA7CmZ1bmMgVGljayAoZCA8dHlwZSAxPikgPHR5cGUgNTQgY2hhbiA8LSA8dHlwZSAzPj47CnR5cGUgPHR5cGUgNDY+Owp0eXBlIDx0eXBlIDM+Owp0eXBlIDx0eXBlIDMzPjsKY29uc3QgVHVlc2RheSA8dHlwZSAxOT4gPSAyIDsKdmFyIFVUQyA8dHlwZSAxNT47CmZ1bmMgVW5peCAoc2VjIDx0eXBlIC00PiwgbnNlYyA8dHlwZSAtND4pIDx0eXBlIDM+Owpjb25zdCBVbml4RGF0ZSA9ICJNb24gSmFuIF8yIDE1OjA0OjA1IE1TVCAyMDA2IjsKY29uc3QgV2VkbmVzZGF5IDx0eXBlIDE5PiA9IDMgOwp0eXBlIDx0eXBlIDE5PjsKY2hlY2tzdW0gQzA0RTdGNDVCMjBDNjIxQTI1REM3NEU5QjEzRUE0RkY2NzMyRTIyNjsKAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALmdvX2V4cG9ydAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAASx0AAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAwAAAAAAAAAAAAAAAAAAAAAAAACLHQAAAAAAACYAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAA+B4AAAAAAAAwAAAAAAAAAAQAAAACAAAACAAAAAAAAAAYAAAAAAAAAAkAAAADAAAAAAAAAAAAAAAAAAAAAAAAACgfAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwABAAAAAAAAAAAAAAAAAAAAAAAA