#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void addrecord();
void viewrecord();
void deleterecord();
struct record
{
char name[30];
char place[25];
char note[1000];
} ;
int main()
{
int ch;
printf("\n\n\t\t\t***********************************\n"); printf("\t\t\t\tWELCOME TO DIGITAL DIARY\n"); printf("\t\t\t***********************************"); while(1)
{
printf("\n\n\tADD RECORD\t[1]"); printf("\n\tVIEW RECORD\t[2]"); printf("\n\tDELETE RECORD\t[3]"); printf("\n\n\tENTER YOUR CHOICE:");
switch(ch)
{
case 1:
addrecord();
break;
case 2:
viewrecord();
break;
case 3:
deleterecord();
case 4:
printf("\n\n\t\tTHANK YOU. SEE YOU SOON");
default:
printf("\nYOU ENTERED WRONG CHOICE.."); printf("\nPRESS ANY KEY TO TRY AGAIN"); break;
}
}
return 0;
}
void addrecord( )
{
FILE *fp ;
char another
= 'Y' ,time[10]; struct record e ;
char filename[15];
int choice;
printf("\n\n\t\t***************************\n"); printf("\t\t* WELCOME TO THE ADD MENU *"); printf("\n\t\t***************************\n\n"); printf("\n\n\tENTER DATE OF YOUR RECORD:[yyyy-mm-dd]:"); fp
= fopen (filename
, "a+" ) ; if ( fp == NULL )
{
if(fp==NULL)
{
printf("\nPRESS ANY KEY TO EXIT"); return ;
}
}
while ( another == 'Y'|| another=='y' )
{
choice=0;
printf ( "\n\tENTER TIME:[hh:mm]:"); while(fread(&e
,sizeof(e
),1,fp
)==1) {
{
printf("\n\tTHE RECORD ALREADY EXISTS.\n"); choice=1;
}
}
if(choice==0)
{
fwrite ( &e
, sizeof ( e
), 1, fp
) ; printf("\nYOUR RECORD IS ADDED...\n");
}
printf ( "\n\tADD ANOTHER RECORD...(Y/N) " ) ; }
printf("\n\n\tPRESS ANY KEY TO EXIT...");
}
void viewrecord( )
{
FILE *fpte ;
struct record customer ;
char time[6],choice
,filename
[14]; int ch;
printf("\n\n\t\t*******************************\n"); printf("\t\t* HERE IS THE VIEWING MENU *"); printf("\n\t\t*******************************\n\n");
do
{
printf("\n\tENTER THE DATE OF RECORD TO BE VIEWED:[yyyy-mm-dd]:"); fpte
= fopen ( filename
, "r" ) ; if ( fpte == NULL )
{
puts ( "\n\t\tTHE RECORD DOES NOT EXIST...\n" ) ; printf("\t\tPRESS ANY KEY TO EXIT..."); return ;
}
printf("\n\tHOW WOULD YOU LIKE TO VIEW:\n"); printf("\n\t1.WHOLE RECORD OF THE DAY."); printf("\n\t2.RECORD OF FIX TIME.\n\n"); printf("\n\t\tENTER YOUR CHOICE:"); switch(ch)
{
case 1:
printf("\nTHE WHOLE RECORD FOR %s IS:",filename
); while ( fread ( &customer
, sizeof ( customer
), 1, fpte
) == 1 ) {
printf("\nNAME: %s",customer.
name); printf("\nPLACE: %s",customer.
place); printf("\nNOTE: %s",customer.
note); }
break;
case 2:
printf("\nENTER TIME:[hh:mm]:"); while ( fread ( &customer
, sizeof ( customer
), 1, fpte
) == 1 ) {
{
printf("\nNAME: %s",customer.
name); printf("\nPLACE: %s",customer.
place); printf("\nNOTE: %s",customer.
note); }
}
break;
default: printf("\nYOU TYPED SOMETHING ELSE...\n"); break;
}
printf("\n\nWOULD YOU LIKE TO CONTINUE VIEWING...(Y/N):"); }while(choice=='Y'||choice=='y');
return ;
}
void deleterecord( )
{
FILE *fp,*fptr ;
struct record file ;
char filename
[15],another
= 'Y' ,time[10];;
int choice,check;
printf("\n\n\t\t*************************\n"); printf("\t\t* WELCOME TO DELETE MENU*"); printf("\n\t\t*************************\n\n");
while ( another == 'Y' )
{
printf("\n\n\tHOW WOULD YOU LIKE TO DELETE:\n\n"); printf("\n\n\t#DELETE WHOLE RECORD\t\t\t[1]"); printf("\n\t#DELETE A PARTICULAR RECORD BY TIME\t[2]\n\n"); do
{
printf("\n\t\tENTER YOUR CHOICE:"); switch(choice)
{
case 1:
printf("\n\tENTER THE DATE OF RECORD TO BE DELETED:[yyyy-mm-dd]:"); fp
= fopen (filename
, "w" ) ; if ( fp == NULL )
{
printf("\nTHE FILE DOES NOT EXISTS"); printf("\nPRESS ANY KEY TO GO BACK."); return ;
}
printf("\nDELETED SUCCESFULLY..."); break;
case 2:
printf("\n\tENTER THE DATE OF RECORD:[yyyy-mm-dd]:"); fp
= fopen (filename
, "r" ) ; if ( fp == NULL )
{
printf("\nTHE FILE DOES NOT EXISTS"); printf("\nPRESS ANY KEY TO GO BACK."); return ;
}
if(fptr==NULL)
{
printf("\nPRESS ANY KEY TO GO BACK"); return ;
}
printf("\n\tENTER THE TIME OF RECORD TO BE DELETED:[hh:mm]:"); while(fread(&file
,sizeof(file
),1,fp
)==1) {
fwrite(&file
,sizeof(file
),1,fptr
); }
printf("\nDELETED SUCCESFULLY..."); break;
default:
printf("\n\tYOU ENTERED WRONG CHOICE"); break;
}
}while(choice<1||choice>2);
printf("\n\tDO YOU LIKE TO DELETE ANOTHER RECORD.(Y/N):"); }
printf("\n\n\tPRESS ANY KEY TO EXIT...");
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPGNvbmlvLmg+CiNpbmNsdWRlPHN0cmluZy5oPgoKCnZvaWQgYWRkcmVjb3JkKCk7CnZvaWQgdmlld3JlY29yZCgpOwp2b2lkIGRlbGV0ZXJlY29yZCgpOwpzdHJ1Y3QgcmVjb3JkCnsKCiAgICBjaGFyIHRpbWVbNl07CiAgICBjaGFyIG5hbWVbMzBdOwogICAgY2hhciBwbGFjZVsyNV07CiAgICBjaGFyIG5vdGVbMTAwMF07Cgp9IDsKCgppbnQgbWFpbigpCgp7CgogICAgaW50IGNoOwogICAgcHJpbnRmKCJcblxuXHRcdFx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwogICAgcHJpbnRmKCJcdFx0XHRcdFdFTENPTUUgVE8gRElHSVRBTCBESUFSWVxuIik7CiAgICBwcmludGYoIlx0XHRcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CiAgICBzeXN0ZW0oImNvbG9yIDNGIik7CiAgIHdoaWxlKDEpCgoKICAgICAgICB7CgogICAgICAgICAgICAgICAgcHJpbnRmKCJcblxuTUFJTiBNRU5VOiIpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJcblxuXHRBREQgUkVDT1JEXHRbMV0iKTsKICAgICAgICAgICAgICAgIHByaW50ZigiXG5cdFZJRVcgUkVDT1JEXHRbMl0iKTsKICAgICAgICAgICAgICAgIHByaW50ZigiXG5cdERFTEVURSBSRUNPUkRcdFszXSIpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJcblx0RVhJVFx0XHRbNF0iKTsKICAgICAgICAgICAgICAgIHByaW50ZigiXG5cblx0RU5URVIgWU9VUiBDSE9JQ0U6Iik7CiAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCZjaCk7CgogICAgICAgICAgICBzd2l0Y2goY2gpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVjb3JkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3JlY29yZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVyZWNvcmQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5cblx0XHRUSEFOSyBZT1UuIFNFRSBZT1UgU09PTiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Y2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5ZT1UgRU5URVJFRCBXUk9ORyBDSE9JQ0UuLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblBSRVNTIEFOWSBLRVkgVE8gVFJZIEFHQUlOIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRjaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN5c3RlbSgiY2xzIik7CiAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gMDsKfQp2b2lkIGFkZHJlY29yZCggKQoKewogICAgICAgICAgICAgICAgc3lzdGVtKCJjbHMiKTsKICAgICAgICAgICAgICAgIEZJTEUgKmZwIDsKICAgICAgICAgICAgICAgIGNoYXIgYW5vdGhlciA9ICdZJyAsdGltZVsxMF07CiAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVjb3JkIGUgOwogICAgICAgICAgICAgICAgY2hhciBmaWxlbmFtZVsxNV07CiAgICAgICAgICAgICAgICBpbnQgY2hvaWNlOwogICAgICAgICAgICAgICAgcHJpbnRmKCJcblxuXHRcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CiAgICAgICAgICAgICAgICBwcmludGYoIlx0XHQqIFdFTENPTUUgVE8gVEhFIEFERCBNRU5VICoiKTsKICAgICAgICAgICAgICAgIHByaW50ZigiXG5cdFx0KioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJcblxuXHRFTlRFUiBEQVRFIE9GIFlPVVIgUkVDT1JEOlt5eXl5LW1tLWRkXToiKTsKICAgICAgICAgICAgICAgIGZmbHVzaChzdGRpbik7CiAgICAgICAgICAgICAgICBnZXRzKGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgIGZwID0gZm9wZW4gKGZpbGVuYW1lLCAiYSsiICkgOwogICAgICAgICAgICAgICAgaWYgKCBmcCA9PSBOVUxMICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZwPWZvcGVuKGZpbGVuYW1lLCJ3KyIpOwogICAgICAgICAgICAgICAgaWYoZnA9PU5VTEwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblNZU1RFTSBFUlJPUi4uLiIpOwogICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5QUkVTUyBBTlkgS0VZIFRPIEVYSVQiKTsKICAgICAgICAgICAgICAgICAgICBnZXRjaCgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoIGFub3RoZXIgPT0gJ1knfHwgYW5vdGhlcj09J3knICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjaG9pY2U9MDsKICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3RkaW4pOwogICAgICAgICAgICAgICAgcHJpbnRmICggIlxuXHRFTlRFUiBUSU1FOltoaDptbV06Iik7CiAgICAgICAgICAgICAgICBzY2FuZigiJXMiLHRpbWUpOwogICAgICAgICAgICAgIHJld2luZChmcCk7CiAgICAgICAgICAgICAgICB3aGlsZShmcmVhZCgmZSxzaXplb2YoZSksMSxmcCk9PTEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYoc3RyY21wKGUudGltZSx0aW1lKT09MCkKCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXHRUSEUgUkVDT1JEIEFMUkVBRFkgRVhJU1RTLlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZT0xOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZihjaG9pY2U9PTApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoZS50aW1lLHRpbWUpOwogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlx0RU5URVIgTkFNRToiKTsKICAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGluKTsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cyhlLm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3RkaW4pOwogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlx0RU5URVIgUExBQ0U6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldHMoZS5wbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRpbik7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHROT1RFOiIpOwogICAgICAgICAgICAgICAgICAgICAgICBnZXRzKGUubm90ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ3cml0ZSAoICZlLCBzaXplb2YgKCBlICksIDEsIGZwICkgOwogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuWU9VUiBSRUNPUkQgSVMgQURERUQuLi5cbiIpOwoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoICJcblx0QUREIEFOT1RIRVIgUkVDT1JELi4uKFkvTikgIiApIDsKICAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoICggc3RkaW4gKSA7CiAgICAgICAgICAgICAgICAgICAgICAgIGFub3RoZXIgPSBnZXRjaGFyKCApIDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmY2xvc2UgKCBmcCApIDsKICAgICAgICAgICAgICAgIHByaW50ZigiXG5cblx0UFJFU1MgQU5ZIEtFWSBUTyBFWElULi4uIik7CiAgICAgICAgICAgICAgICBnZXRjaCgpOwoKICAgIH0KCnZvaWQgdmlld3JlY29yZCggKQp7CiAgICAgICAgRklMRSAqZnB0ZSA7CiAgICAgICAgc3lzdGVtKCJjbHMiKTsKICAgICAgICBzdHJ1Y3QgcmVjb3JkIGN1c3RvbWVyIDsKICAgICAgICBjaGFyIHRpbWVbNl0sY2hvaWNlLGZpbGVuYW1lWzE0XTsKICAgICAgICBpbnQgY2g7CiAgICAgICAgcHJpbnRmKCJcblxuXHRcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwogICAgICAgIHByaW50ZigiXHRcdCogSEVSRSBJUyBUSEUgVklFV0lORyBNRU5VICoiKTsKICAgICAgICBwcmludGYoIlxuXHRcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7CgoKICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblx0RU5URVIgVEhFIERBVEUgT0YgUkVDT1JEIFRPIEJFIFZJRVdFRDpbeXl5eS1tbS1kZF06Iik7CiAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGluKTsKICAgICAgICAgICAgICAgICAgICBnZXRzKGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICBmcHRlID0gZm9wZW4gKCBmaWxlbmFtZSwgInIiICkgOwogICAgICAgICAgICAgICAgICAgIGlmICggZnB0ZSA9PSBOVUxMICkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dHMgKCAiXG5cdFx0VEhFIFJFQ09SRCBET0VTIE5PVCBFWElTVC4uLlxuIiApIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlx0XHRQUkVTUyBBTlkgS0VZIFRPIEVYSVQuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRjaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgiY2xzIik7CiAgICAgICAgICAgICAgICBwcmludGYoIlxuXHRIT1cgV09VTEQgWU9VIExJS0UgVE8gVklFVzpcbiIpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJcblx0MS5XSE9MRSBSRUNPUkQgT0YgVEhFIERBWS4iKTsKICAgICAgICAgICAgICAgIHByaW50ZigiXG5cdDIuUkVDT1JEIE9GIEZJWCBUSU1FLlxuXG4iKTsKICAgICAgICAgICAgICAgIHByaW50ZigiXG5cdFx0RU5URVIgWU9VUiBDSE9JQ0U6Iik7CiAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCZjaCk7CiAgICAgICAgICAgICAgICBzd2l0Y2goY2gpCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5USEUgV0hPTEUgUkVDT1JEIEZPUiAlcyBJUzoiLGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZnJlYWQgKCAmY3VzdG9tZXIsIHNpemVvZiAoIGN1c3RvbWVyICksIDEsIGZwdGUgKSA9PSAxICkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5USU1FOiAlcyIsY3VzdG9tZXIudGltZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuTkFNRTogJXMiLGN1c3RvbWVyLm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblBMQUNFOiAlcyIsY3VzdG9tZXIucGxhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbk5PVEU6ICVzIixjdXN0b21lci5ub3RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5FTlRFUiBUSU1FOltoaDptbV06Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzKHRpbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBmcmVhZCAoICZjdXN0b21lciwgc2l6ZW9mICggY3VzdG9tZXIgKSwgMSwgZnB0ZSApID09IDEgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0cmNtcChjdXN0b21lci50aW1lLHRpbWUpPT0wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbllPVVIgUkVDT1JEIElTOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuVElNRTogJXMiLGN1c3RvbWVyLnRpbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuTkFNRTogJXMiLGN1c3RvbWVyLm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuUExBQ0U6ICVzIixjdXN0b21lci5wbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5OT1RFOiAlcyIsY3VzdG9tZXIubm90ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHByaW50ZigiXG5ZT1UgVFlQRUQgU09NRVRISU5HIEVMU0UuLi5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgcHJpbnRmKCJcblxuV09VTEQgWU9VIExJS0UgVE8gQ09OVElOVUUgVklFV0lORy4uLihZL04pOiIpOwogICAgICAgICAgICAgICBmZmx1c2goc3RkaW4pOwogICAgICAgICAgICBzY2FuZigiJWMiLCZjaG9pY2UpOwogICAgICAgIH13aGlsZShjaG9pY2U9PSdZJ3x8Y2hvaWNlPT0neScpOwogICAgICAgICAgICBmY2xvc2UgKCBmcHRlICkgOwogICAgICAgICAgICByZXR1cm4gOwoKfQogICB2b2lkIGRlbGV0ZXJlY29yZCggKQoKICAgIHsKCiAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJjbHMiKTsKICAgICAgICAgICAgICAgICAgICBGSUxFICpmcCwqZnB0ciA7CiAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlY29yZCBmaWxlIDsKICAgICAgICAgICAgICAgICAgICBjaGFyIGZpbGVuYW1lWzE1XSxhbm90aGVyID0gJ1knICx0aW1lWzEwXTs7CgogICAgICAgICAgICAgICAgICAgIGludCBjaG9pY2UsY2hlY2s7CgogICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5cblx0XHQqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKICAgICAgICAgICAgICAgICAgICBwcmludGYoIlx0XHQqIFdFTENPTUUgVE8gREVMRVRFIE1FTlUqIik7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblx0XHQqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOwoKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGFub3RoZXIgPT0gJ1knICkKCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXG5cdEhPVyBXT1VMRCBZT1UgTElLRSBUTyBERUxFVEU6XG5cbiIpOwogICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5cblx0I0RFTEVURSBXSE9MRSBSRUNPUkRcdFx0XHRbMV0iKTsKICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXHQjREVMRVRFIEEgUEFSVElDVUxBUiBSRUNPUkQgQlkgVElNRVx0WzJdXG5cbiIpOwogICAgICAgICAgICAgICAgICAgIGRvCgogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXHRcdEVOVEVSIFlPVVIgQ0hPSUNFOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwmY2hvaWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGNob2ljZSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXHRFTlRFUiBUSEUgREFURSBPRiBSRUNPUkQgVE8gQkUgREVMRVRFRDpbeXl5eS1tbS1kZF06Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzKGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcCA9IGZvcGVuIChmaWxlbmFtZSwgInciICkgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZnAgPT0gTlVMTCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblRIRSBGSUxFIERPRVMgTk9UIEVYSVNUUyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuUFJFU1MgQU5ZIEtFWSBUTyBHTyBCQUNLLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRjaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuREVMRVRFRCBTVUNDRVNGVUxMWS4uLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXHRFTlRFUiBUSEUgREFURSBPRiBSRUNPUkQ6W3l5eXktbW0tZGRdOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cyhmaWxlbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnAgPSBmb3BlbiAoZmlsZW5hbWUsICJyIiApIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZwID09IE5VTEwgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblRIRSBGSUxFIERPRVMgTk9UIEVYSVNUUyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuUFJFU1MgQU5ZIEtFWSBUTyBHTyBCQUNLLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRjaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHRyPWZvcGVuKCJ0ZW1wIiwidyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZwdHI9PU5VTEwpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblNZU1RFTSBFUlJPUiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuUFJFU1MgQU5ZIEtFWSBUTyBHTyBCQUNLIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGNoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5cdEVOVEVSIFRIRSBUSU1FIE9GIFJFQ09SRCBUTyBCRSBERUxFVEVEOltoaDptbV06Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzKHRpbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKGZyZWFkKCZmaWxlLHNpemVvZihmaWxlKSwxLGZwKT09MSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0cmNtcChmaWxlLnRpbWUsdGltZSkhPTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ3cml0ZSgmZmlsZSxzaXplb2YoZmlsZSksMSxmcHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGZwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZnB0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUoInRlbXAiLGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuREVMRVRFRCBTVUNDRVNGVUxMWS4uLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5cdFlPVSBFTlRFUkVEIFdST05HIENIT0lDRSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfXdoaWxlKGNob2ljZTwxfHxjaG9pY2U+Mik7CgogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXHRETyBZT1UgTElLRSBUTyBERUxFVEUgQU5PVEhFUiBSRUNPUkQuKFkvTik6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRpbik7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlYyIsJmFub3RoZXIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXG5cdFBSRVNTIEFOWSBLRVkgVE8gRVhJVC4uLiIpOwoKICAgICAgICAgICAgICAgICAgICBnZXRjaCgpOwoKICAgIH0K