From 34370a7e0022aaca9ce4f696df110e0becb7691e Mon Sep 17 00:00:00 2001 From: Hizenberg Date: Thu, 8 Feb 2024 12:03:28 +0530 Subject: [PATCH] Assignment 3 for glthread --- Assignment3/.glthread.h.un~ | Bin 0 -> 3936 bytes Assignment3/.main.c.un~ | Bin 0 -> 2396 bytes Assignment3/exeglthread | Bin 0 -> 19776 bytes Assignment3/glthread.c | 81 ++ Assignment3/glthread.h | 49 + Assignment3/glthread.h~ | 49 + Assignment3/glthread.o | Bin 0 -> 5656 bytes Assignment3/main.c | 82 ++ Assignment3/main.c~ | 81 ++ Assignment3/main.i | 2225 +++++++++++++++++++++++++++++++++++ Assignment3/main.o | Bin 0 -> 6168 bytes gl_thread | 1 + 12 files changed, 2568 insertions(+) create mode 100644 Assignment3/.glthread.h.un~ create mode 100644 Assignment3/.main.c.un~ create mode 100755 Assignment3/exeglthread create mode 100644 Assignment3/glthread.c create mode 100644 Assignment3/glthread.h create mode 100644 Assignment3/glthread.h~ create mode 100644 Assignment3/glthread.o create mode 100644 Assignment3/main.c create mode 100644 Assignment3/main.c~ create mode 100644 Assignment3/main.i create mode 100644 Assignment3/main.o create mode 160000 gl_thread diff --git a/Assignment3/.glthread.h.un~ b/Assignment3/.glthread.h.un~ new file mode 100644 index 0000000000000000000000000000000000000000..d537afa3aa88bf5f230e29fadda348eca5248fe1 GIT binary patch literal 3936 zcmeH~y-ve06ouUuD1sM&%@Rvm{)!M2h=Rlb4*(NV6^PRYiYuCw1sIqZn2`7x84wH1 zyg?p-ftd|4Gk|~v?r~z(up)0c(y7xp?Tzkd-`uPPJ6Ef6srAhA7rUQN-)t}Zy1uJa zH{Oq@-C}iO_$0XbkdG^K_os}pDYDB`wMEovOYVeGyR#Y9q`M<{x#Tz<83uJJJRZo1 zPWXXnddciKZ~1;GqLy#|XpDC+DV1jVIt7_Xoujdz3}Mt}BHkYC!EAxm9xzMFCxiOL zR7rpTCNZ4JWGMq8uAeC!jJ*v}42L{ME|XQ_XO0x6gczMn1!TBJDZ`{QVQVBz=O!lX z5MY8$Ou*7Z)+*3JhDm3``bd~A|6&@asIZ9%SbB}S0WzRe6*JpSMrN!Winy_CVj86= zcyLXUfvJDQ6Mi5CPm3S$^pUlI4oIswk>NrXY>IHbnz*o2fT}_Ut_AcpVdO@^Cbce2 zfcw?j_)>K-PQ4j5+QRi})ZG}J%l=`C8CZ*CEg(l6r3|yqgsoA;!MwtpOIi`^Fd#j2il%k2;PT>LZu literal 0 HcmV?d00001 diff --git a/Assignment3/.main.c.un~ b/Assignment3/.main.c.un~ new file mode 100644 index 0000000000000000000000000000000000000000..2204624739e47877e6d3bf0541596da3dd93169a GIT binary patch literal 2396 zcmWH`%$*;a=aT=Ff$59w;}E~y=T1G@e#M-}e(rlMi%#3^PVZKJU$J%;!+PN_3=9lG zK+L3|03>aI7z7xBm=(-|&>%LLpL!&VnFS=v$Pj-4s(=YfgD8-cDU@dT4+LNlkjyBc zK?tNC$y@-A4hDv=5#ab|j6 zYKlTmeqOp}dQM(`N~(gcLVj9WacW6^8bqZIL|ju7WHboKf{ZLE%FHW?2O5==UzwU3 zpP84I4^pma4NVpx$FYEwLkN&t;GP*x7DypO4ig@d$e{{kBPWY{=*hwkr~sCIs zI2J*%1}m+BOmK{X>;{9;ScHWHnKUu6cpp6$L8SnwS_PH6z^WCR-H@{y$Tgry0~rq% wAB`wbkWc`Kh^Q+^0Hk<}761SM literal 0 HcmV?d00001 diff --git a/Assignment3/exeglthread b/Assignment3/exeglthread new file mode 100755 index 0000000000000000000000000000000000000000..e44aa2c6f224d9458ada06f13e523e422c536446 GIT binary patch literal 19776 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 a`CQ03*UP$C;mvCQg +#include + +/*Private function to add a new_node right after curr_node*/ +static void +_glthread_add_next(glthread_node_t *curr_node, + glthread_node_t *new_node){ + + if(!curr_node->right){ + curr_node->right = new_node; + new_node->left = curr_node; + return; + } + + glthread_node_t *temp = curr_node->right; + curr_node->right = new_node; + new_node->left = curr_node; + new_node->right = temp; + temp->left = new_node; +} + +/*Fn to insert a new GLnode into a glthread at the first position + * in a glthread i.e. new node becomes a head + * */ +void +glthread_add (glthread_t *lst, glthread_node_t *glnode){ + + glnode->left = NULL; + glnode->right = NULL; + if(!lst->head){ + lst->head = glnode; + return; + } + glthread_node_t *head = lst->head; + _glthread_add_next(glnode, head); + lst->head = glnode; +} + +static void +_remove_glthread(glthread_node_t *glnode){ + + if(!glnode->left){ + if(glnode->right){ + glnode->right->left = NULL; + glnode->right = 0; + return; + } + return; + } + if(!glnode->right){ + glnode->left->right = NULL; + glnode->left = NULL; + return; + } + + glnode->left->right = glnode->right; + glnode->right->left = glnode->left; + glnode->left = 0; + glnode->right = 0; +} + +/*API to remove a glnode from glthread*/ +void +glthread_remove(glthread_t *lst, glthread_node_t *glnode){ + + glthread_node_t *head = lst->head; + /*If the node being removed is the head node itself, then update the + * head*/ + if(head == glnode){ + lst->head = head->right; + } + _remove_glthread(glnode); +} + +void +init_glthread(glthread_t *glthread, unsigned int offset){ + + glthread->head = NULL; + glthread->offset = offset; +} diff --git a/Assignment3/glthread.h b/Assignment3/glthread.h new file mode 100644 index 0000000..a7eb8d4 --- /dev/null +++ b/Assignment3/glthread.h @@ -0,0 +1,49 @@ +#ifndef __GLTHREADS__ +#define __GLTHREADS__ + +typedef struct glthread_node_ { + + struct glthread_node_ *left; + struct glthread_node_ *right; +} glthread_node_t; + +typedef struct glthread_ { + + glthread_node_t *head; + unsigned int offset; +} glthread_t; + +void +glthread_add (glthread_t *lst, glthread_node_t *glnode); + +void +glthread_remove(glthread_t *lst, glthread_node_t *glnode); + +/*Iterative macro to Iterate Over GLTHhreads*/ +#define ITERATE_GL_THREADS_BEGIN(lstptr, struct_type, ptr) \ +{ \ + glthread_node_t *_glnode = NULL, *_next = NULL; \ + for(_glnode = lstptr->head; _glnode; _glnode = _next){ \ + _next = _glnode->right; \ + ptr = (struct_type *)((char *)_glnode - lstptr->offset); + +#define ITERATE_GL_THREADS_ENDS }} + +#define glthread_node_init(glnode) \ + glnode->left = NULL; \ + glnode->right = NULL; + +void +init_glthread(glthread_t *glthread, unsigned int offset); + +#define offsetof(struct_name, field_name) \ + ((unsigned long)&((struct_name *)0)->field_name) + + + +#define glthread_to_object(fn_name,struct_name,field_name) \ + static inline struct_name *fn_name(glthread_node_t *field_name){ \ + return (struct_name *)((unsigned long)field_name - offsetof(struct_name, field_name)); \ + } + +#endif /* __GLTHREADS__ */ diff --git a/Assignment3/glthread.h~ b/Assignment3/glthread.h~ new file mode 100644 index 0000000..ef07e6a --- /dev/null +++ b/Assignment3/glthread.h~ @@ -0,0 +1,49 @@ +#ifndef __GLTHREADS__ +#define __GLTHREADS__ + +typedef struct glthread_node_ { + + struct glthread_node_ *left; + struct glthread_node_ *right; +} glthread_node_t; + +typedef struct glthread_ { + + glthread_node_t *head; + unsigned int offset; +} glthread_t; + +void +glthread_add (glthread_t *lst, glthread_node_t *glnode); + +void +glthread_remove(glthread_t *lst, glthread_node_t *glnode); + +/*Iterative macro to Iterate Over GLTHhreads*/ +#define ITERATE_GL_THREADS_BEGIN(lstptr, struct_type, ptr) \ +{ \ + glthread_node_t *_glnode = NULL, *_next = NULL; \ + for(_glnode = lstptr->head; _glnode; _glnode = _next){ \ + _next = _glnode->right; \ + ptr = (struct_type *)((char *)_glnode - lstptr->offset); + +#define ITERATE_GL_THREADS_ENDS }} + +#define glthread_node_init(glnode) \ + glnode->left = NULL; \ + glnode->right = NULL; + +void +init_glthread(glthread_t *glthread, unsigned int offset); + +#define offsetof(struct_name, field_name) \ + ((unsigned long)&((struct_name *)0)->field_name) + + + +#define glthread_to_object(fn_name,struct_name,field_name) \ + static inline struct_name *fn_name(glthread_node_t *field_name){ \ + return (struct_name *)((unsigned int *)field_name - offsetof(struct_name, field_name)); \ + } + +#endif /* __GLTHREADS__ */ diff --git a/Assignment3/glthread.o b/Assignment3/glthread.o new file mode 100644 index 0000000000000000000000000000000000000000..27cfa94bb3786e2a687f2acfedf67bb6c73f2915 GIT binary patch literal 5656 zcmbtXUu>IK6~CXITRU|UyKx9{(<(MyH98ijNu$zcv~`q)d2D5+D6on@u48|(t;V0r z=g)20ZTv~Qu_zC;0|_1`jRz#eL_laS(*j}@66KGOkU$d?FL{}W6kdQnRGLIN=iYN} zoEz_jUCFuU{Lb(ExqrTUZ@w}6^ru6PBe*%@wAj`d6=G=LwwzO9P7H{on9HxcmtT2d zGr!W>$gj?B=2vsk{EKh5Qd*hY$giA>f(*tvASJe@3~Ocf{s)kVf1iAThH(;K`HjkU z};K747>hE=`l^2i$ zKNTyhWi`O~&6_$A7y&Rf+|N@DTh%sp>i~z@t`L~2@U1g!Tg8gbN4G}}ffd#dgIA;u zX`EXfrv(;5=wsZC%-t{^76Gmyz0Ti_yQF2stWdVsG97Rca?7ab!^5_{vQOmvk zFM|jkUx3c(QaL;V}49HxSG%Hi?$lqO0a`Z*Dk(lc>X zp^?MdOUHzxxGxzCj|`6>G4W9$VpKBBVh;t2VTBy(x(d~sg<_^U82UOHVCo))pPD$m zBWN;(X#Y422*UgDlfWH=-f^7w`+Bj%)qo!eBWhtn&PXU82C%)!tmxLM08PpMU&_d` z+! zXzRZqW6LsmTV|H!a7*^C%lHJwj$e=m137pDJ!9iC6UfxEj6H?46nLG&=-uJgJJJdF zq~+9v9K0tZKbNW3WO7-`E7Dn)C(p=%pUJ^B>AV&S!}tomTW?%(3zfy7>bu3VsCl(u zTU&G&0>QRIAX;9tR`J|&x>POt!mm}Tfe76CWznoQ{2*=2coLW>g<`o}@Z6<9Jn`AN z^vw7t)8iA_iR{tzXgz3o?x~9Fxqht#YSAxMPc5A|K6-pIJz7bRE)<*Byi(O~c#T$b zwB=o`dF9cdIKSvNp(?LYc10D7HWfl9vDok`J1f~ymNM_=m=G8hMp|n5enDl}Y0=@8 zKMqpOgJGCLL}Ov0=>{|{Nc7yRI-GGeUU~^c`^=728+CWATD$Ig^R8bRd)#ea3L2Nk zp00VVrNZa0H4EqbMrCZeiB5Ib3yzu8*^>Bh-dq<1GGbMTCuU}*(jR}^ov#%=TENlq z$s;7vcQHV{bN#$>+HgM1 zM+kqHJosKgH4GU#wXnXDcbUSXdl!a4Sis5Np@jujwX+=swIAx_`uOrXMfi&}G&Pri zohAHtgsV9OY`*D#NxpX`X^ zEFB|#(85U-`$@oInWG%!M+nC_>ghr{-V)e2?;)CxlNvTSt~a(>-5DI`7uy$gXYg){ zQ?&3|!g+l-?;YY@wfN5xf7Qa@BmI_zKSVlz8yx>Hguia_eTx4J3!fnTO$+Dw`n84U zN&l^duTq>pS$Ki)zgl>X@V{I5ze(S)aQ-*yAB3Yjt~>AR|62TKD1Hz1JU=|oX$yaj z^uyF+hw=G)`i#YYi}G;n1&dFxs1uGI#^-b8rp4#@-?ea__a9hs_&fTQ#pgJG zwD3Dr(7P7?CBiod$FBYR`j5p=F^@<*4>iK$7S87qp9#oUFL}zFpx(~=F~X6L=fi2z zAGPqWkv?wWe8(KO@Nbizqu$P&CLD)BLs3Z1!g>BLS~#!oH!Ym^)ekM4_p``0uhrqf z1byJ^zRFU7FS2a87!*ZzzS$I6-(4(b%kF%uQmAI6v>ZS9X|-e$lJI8?4=B zvF5q#0x4KTxS;e>qmC~Xk@XsZn}w&~Xfr65E>RG-T3GOlb(aS6Av^r94A+472Zzg% zVE;Ej+l*-<0}^6kgJ|Is?TgoDv;7|i8{SL*uRrcPJ0_;%{0FT%Y%cC+d{yM&*WS|f zL`c(<1J6Sgu~uyG-=b=GPuVfikSD*rmeEqhxexF^Pai41KiZq^{}dQI)t`%NFZRd! z@qV`JF9T-BM9*c)Z$Id4ZUMNR@?WO>OBf6q=Erly&VLy&jLCI^sM@z^Lw?^%$SU{G z0lSm`5G8tr;&I1*+~fV<$^UioPqQQS?8p80$ls!gKkz^;1N$-j6Y{sVsrWPb^E-k0 zcGw?*q0{_tc9?&J*q`?=)???!TrcBdK|4VO<9m_s8pPQjY4*2^_P3D?jqf+D?cQs+ SFFN^OOlXfc*pYgB{{9C$XvgmW literal 0 HcmV?d00001 diff --git a/Assignment3/main.c b/Assignment3/main.c new file mode 100644 index 0000000..6b2f105 --- /dev/null +++ b/Assignment3/main.c @@ -0,0 +1,82 @@ +/* + * ===================================================================================== + * + * Filename: main.c + * + * Description: + * + * Version: 1.0 + * Created: 08/02/24 08:27:48 AM IST + * Revision: none + * Compiler: gcc + * + * Author: YOUR NAME (), + * Organization: + * + * ===================================================================================== + */ + +#include "glthread.h" +#include +#include +#include + +typedef struct emp_ { + + + + char name[30]; + + unsigned int salary; + + char designation[30]; + + unsigned int emp_id; + + glthread_node_t glnode; + +} emp_t ; + +/*Function to print employee details*/ + +void +print_employee_info(emp_t *emp){ + + printf("Employee name = %s\n", emp->name); + + printf("salary = %u\n", emp->salary); + + printf("designation = %s\n", emp->designation); + + printf("emp_id = %u\n", emp->emp_id); + +} + +glthread_to_object(glnode_to_employee,emp_t,glnode) + +void +print_employee_details( glthread_node_t *glnode){ + + emp_t * emp = glnode_to_employee(glnode); + print_employee_info(emp); +} + +int main( int argc , char** argv ){ + + /*Creating one employee object*/ + + emp_t *emp1 = calloc(1, sizeof(emp_t)); + + strncpy(emp1->name, "Neha", strlen("Neha")); + + emp1->salary = 50000; + + strncpy(emp1->designation, "HR", strlen("HR")); + + emp1->emp_id = 21; + + glthread_node_init((&emp1->glnode)); + + print_employee_details((&emp1->glnode)); + return 0; +} diff --git a/Assignment3/main.c~ b/Assignment3/main.c~ new file mode 100644 index 0000000..ed44495 --- /dev/null +++ b/Assignment3/main.c~ @@ -0,0 +1,81 @@ +/* + * ===================================================================================== + * + * Filename: main.c + * + * Description: + * + * Version: 1.0 + * Created: 08/02/24 08:27:48 AM IST + * Revision: none + * Compiler: gcc + * + * Author: YOUR NAME (), + * Organization: + * + * ===================================================================================== + */ + +#include "glthread.h" +#include +#include +#include + +typedef struct emp_ { + + + + char name[30]; + + unsigned int salary; + + char designation[30]; + + unsigned int emp_id; + + glthread_node_t glnode; + +} emp_t ; + +/*Function to print employee details*/ + +void +print_employee_info(emp_t *emp){ + + printf("Employee name = %s\n", emp->name); + + printf("salary = %u\n", emp->salary); + + printf("designation = %s\n", emp->designation); + + printf("emp_id = %u\n", emp->emp_id); + +} + +void +print_employee_details( glthread_node_t *glnode){ + + emp_t *emp = (emp_t *)((unsigned long)glnode - offsetof(emp_t,glnode)); + + print_employee_info(emp); +} + +int main( int argc , char** argv ){ + + /*Creating one employee object*/ + + emp_t *emp1 = calloc(1, sizeof(emp_t)); + + strncpy(emp1->name, "Neha", strlen("Neha")); + + emp1->salary = 50000; + + strncpy(emp1->designation, "HR", strlen("HR")); + + emp1->emp_id = 21; + + glthread_node_init((&emp1->glnode)); + + print_employee_details((&emp1->glnode)); + return 0; +} diff --git a/Assignment3/main.i b/Assignment3/main.i new file mode 100644 index 0000000..c5eb7d8 --- /dev/null +++ b/Assignment3/main.i @@ -0,0 +1,2225 @@ +# 0 "main.c" +# 1 "/home/hizenberg/Desktop/Linux_Sys_Prog/Assignment3//" +# 0 "" +# 0 "" +# 1 "/usr/include/stdc-predef.h" 1 3 4 +# 0 "" 2 +# 1 "main.c" +# 19 "main.c" +# 1 "glthread.h" 1 + + + +typedef struct glthread_node_ { + + struct glthread_node_ *left; + struct glthread_node_ *right; +} glthread_node_t; + +typedef struct glthread_ { + + glthread_node_t *head; + unsigned int offset; +} glthread_t; + +void +glthread_add (glthread_t *lst, glthread_node_t *glnode); + +void +glthread_remove(glthread_t *lst, glthread_node_t *glnode); +# 36 "glthread.h" +void +init_glthread(glthread_t *glthread, unsigned int offset); +# 20 "main.c" 2 +# 1 "/usr/include/stdio.h" 1 3 4 +# 27 "/usr/include/stdio.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4 +# 33 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 3 4 +# 1 "/usr/include/features.h" 1 3 4 +# 392 "/usr/include/features.h" 3 4 +# 1 "/usr/include/features-time64.h" 1 3 4 +# 20 "/usr/include/features-time64.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 +# 21 "/usr/include/features-time64.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 1 3 4 +# 19 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 +# 20 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 2 3 4 +# 22 "/usr/include/features-time64.h" 2 3 4 +# 393 "/usr/include/features.h" 2 3 4 +# 489 "/usr/include/features.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4 +# 561 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 +# 562 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4 +# 563 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4 +# 490 "/usr/include/features.h" 2 3 4 +# 513 "/usr/include/features.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4 +# 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4 +# 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4 +# 514 "/usr/include/features.h" 2 3 4 +# 34 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 2 3 4 +# 28 "/usr/include/stdio.h" 2 3 4 + + + + + +# 1 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 1 3 4 +# 214 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 3 4 + +# 214 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 3 4 +typedef long unsigned int size_t; +# 34 "/usr/include/stdio.h" 2 3 4 + + +# 1 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h" 1 3 4 +# 40 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h" 3 4 +typedef __builtin_va_list __gnuc_va_list; +# 37 "/usr/include/stdio.h" 2 3 4 + +# 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4 +# 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 +# 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 1 3 4 +# 19 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 +# 20 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 2 3 4 +# 29 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4 + + +typedef unsigned char __u_char; +typedef unsigned short int __u_short; +typedef unsigned int __u_int; +typedef unsigned long int __u_long; + + +typedef signed char __int8_t; +typedef unsigned char __uint8_t; +typedef signed short int __int16_t; +typedef unsigned short int __uint16_t; +typedef signed int __int32_t; +typedef unsigned int __uint32_t; + +typedef signed long int __int64_t; +typedef unsigned long int __uint64_t; + + + + + + +typedef __int8_t __int_least8_t; +typedef __uint8_t __uint_least8_t; +typedef __int16_t __int_least16_t; +typedef __uint16_t __uint_least16_t; +typedef __int32_t __int_least32_t; +typedef __uint32_t __uint_least32_t; +typedef __int64_t __int_least64_t; +typedef __uint64_t __uint_least64_t; + + + +typedef long int __quad_t; +typedef unsigned long int __u_quad_t; + + + + + + + +typedef long int __intmax_t; +typedef unsigned long int __uintmax_t; +# 141 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4 +# 142 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/time64.h" 1 3 4 +# 143 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4 + + +typedef unsigned long int __dev_t; +typedef unsigned int __uid_t; +typedef unsigned int __gid_t; +typedef unsigned long int __ino_t; +typedef unsigned long int __ino64_t; +typedef unsigned int __mode_t; +typedef unsigned long int __nlink_t; +typedef long int __off_t; +typedef long int __off64_t; +typedef int __pid_t; +typedef struct { int __val[2]; } __fsid_t; +typedef long int __clock_t; +typedef unsigned long int __rlim_t; +typedef unsigned long int __rlim64_t; +typedef unsigned int __id_t; +typedef long int __time_t; +typedef unsigned int __useconds_t; +typedef long int __suseconds_t; +typedef long int __suseconds64_t; + +typedef int __daddr_t; +typedef int __key_t; + + +typedef int __clockid_t; + + +typedef void * __timer_t; + + +typedef long int __blksize_t; + + + + +typedef long int __blkcnt_t; +typedef long int __blkcnt64_t; + + +typedef unsigned long int __fsblkcnt_t; +typedef unsigned long int __fsblkcnt64_t; + + +typedef unsigned long int __fsfilcnt_t; +typedef unsigned long int __fsfilcnt64_t; + + +typedef long int __fsword_t; + +typedef long int __ssize_t; + + +typedef long int __syscall_slong_t; + +typedef unsigned long int __syscall_ulong_t; + + + +typedef __off64_t __loff_t; +typedef char *__caddr_t; + + +typedef long int __intptr_t; + + +typedef unsigned int __socklen_t; + + + + +typedef int __sig_atomic_t; +# 39 "/usr/include/stdio.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h" 1 3 4 + + + + +# 1 "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h" 1 3 4 +# 13 "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h" 3 4 +typedef struct +{ + int __count; + union + { + unsigned int __wch; + char __wchb[4]; + } __value; +} __mbstate_t; +# 6 "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h" 2 3 4 + + + + +typedef struct _G_fpos_t +{ + __off_t __pos; + __mbstate_t __state; +} __fpos_t; +# 40 "/usr/include/stdio.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h" 1 3 4 +# 10 "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h" 3 4 +typedef struct _G_fpos64_t +{ + __off64_t __pos; + __mbstate_t __state; +} __fpos64_t; +# 41 "/usr/include/stdio.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/types/__FILE.h" 1 3 4 + + + +struct _IO_FILE; +typedef struct _IO_FILE __FILE; +# 42 "/usr/include/stdio.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/types/FILE.h" 1 3 4 + + + +struct _IO_FILE; + + +typedef struct _IO_FILE FILE; +# 43 "/usr/include/stdio.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h" 1 3 4 +# 35 "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h" 3 4 +struct _IO_FILE; +struct _IO_marker; +struct _IO_codecvt; +struct _IO_wide_data; + + + + +typedef void _IO_lock_t; + + + + + +struct _IO_FILE +{ + int _flags; + + + char *_IO_read_ptr; + char *_IO_read_end; + char *_IO_read_base; + char *_IO_write_base; + char *_IO_write_ptr; + char *_IO_write_end; + char *_IO_buf_base; + char *_IO_buf_end; + + + char *_IO_save_base; + char *_IO_backup_base; + char *_IO_save_end; + + struct _IO_marker *_markers; + + struct _IO_FILE *_chain; + + int _fileno; + int _flags2; + __off_t _old_offset; + + + unsigned short _cur_column; + signed char _vtable_offset; + char _shortbuf[1]; + + _IO_lock_t *_lock; + + + + + + + + __off64_t _offset; + + struct _IO_codecvt *_codecvt; + struct _IO_wide_data *_wide_data; + struct _IO_FILE *_freeres_list; + void *_freeres_buf; + size_t __pad5; + int _mode; + + char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; +}; +# 44 "/usr/include/stdio.h" 2 3 4 +# 52 "/usr/include/stdio.h" 3 4 +typedef __gnuc_va_list va_list; +# 63 "/usr/include/stdio.h" 3 4 +typedef __off_t off_t; +# 77 "/usr/include/stdio.h" 3 4 +typedef __ssize_t ssize_t; + + + + + + +typedef __fpos_t fpos_t; +# 133 "/usr/include/stdio.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4 +# 134 "/usr/include/stdio.h" 2 3 4 +# 143 "/usr/include/stdio.h" 3 4 +extern FILE *stdin; +extern FILE *stdout; +extern FILE *stderr; + + + + + + +extern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__)); + +extern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__)); + + + +extern int renameat (int __oldfd, const char *__old, int __newfd, + const char *__new) __attribute__ ((__nothrow__ , __leaf__)); +# 178 "/usr/include/stdio.h" 3 4 +extern int fclose (FILE *__stream); +# 188 "/usr/include/stdio.h" 3 4 +extern FILE *tmpfile (void) + __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ; +# 205 "/usr/include/stdio.h" 3 4 +extern char *tmpnam (char[20]) __attribute__ ((__nothrow__ , __leaf__)) ; + + + + +extern char *tmpnam_r (char __s[20]) __attribute__ ((__nothrow__ , __leaf__)) ; +# 222 "/usr/include/stdio.h" 3 4 +extern char *tempnam (const char *__dir, const char *__pfx) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (__builtin_free, 1))); + + + + + + +extern int fflush (FILE *__stream); +# 239 "/usr/include/stdio.h" 3 4 +extern int fflush_unlocked (FILE *__stream); +# 258 "/usr/include/stdio.h" 3 4 +extern FILE *fopen (const char *__restrict __filename, + const char *__restrict __modes) + __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ; + + + + +extern FILE *freopen (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream) ; +# 293 "/usr/include/stdio.h" 3 4 +extern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__)) + __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ; +# 308 "/usr/include/stdio.h" 3 4 +extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ; + + + + +extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__)) + __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ; +# 328 "/usr/include/stdio.h" 3 4 +extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)); + + + +extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, + int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__)); + + + + +extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, + size_t __size) __attribute__ ((__nothrow__ , __leaf__)); + + +extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); + + + + + + + +extern int fprintf (FILE *__restrict __stream, + const char *__restrict __format, ...); + + + + +extern int printf (const char *__restrict __format, ...); + +extern int sprintf (char *__restrict __s, + const char *__restrict __format, ...) __attribute__ ((__nothrow__)); + + + + + +extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg); + + + + +extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); + +extern int vsprintf (char *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg) __attribute__ ((__nothrow__)); + + + +extern int snprintf (char *__restrict __s, size_t __maxlen, + const char *__restrict __format, ...) + __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4))); + +extern int vsnprintf (char *__restrict __s, size_t __maxlen, + const char *__restrict __format, __gnuc_va_list __arg) + __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0))); +# 403 "/usr/include/stdio.h" 3 4 +extern int vdprintf (int __fd, const char *__restrict __fmt, + __gnuc_va_list __arg) + __attribute__ ((__format__ (__printf__, 2, 0))); +extern int dprintf (int __fd, const char *__restrict __fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + + + + + + + +extern int fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) ; + + + + +extern int scanf (const char *__restrict __format, ...) ; + +extern int sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__)); + + + + + +# 1 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 1 3 4 +# 120 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 1 3 4 +# 24 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4 +# 25 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 2 3 4 +# 121 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 2 3 4 +# 431 "/usr/include/stdio.h" 2 3 4 + + + +extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf") + + ; +extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf") + ; +extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf") __attribute__ ((__nothrow__ , __leaf__)) + + ; +# 459 "/usr/include/stdio.h" 3 4 +extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg) + __attribute__ ((__format__ (__scanf__, 2, 0))) ; + + + + + +extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) + __attribute__ ((__format__ (__scanf__, 1, 0))) ; + + +extern int vsscanf (const char *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0))); + + + + + +extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf") + + + + __attribute__ ((__format__ (__scanf__, 2, 0))) ; +extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf") + + __attribute__ ((__format__ (__scanf__, 1, 0))) ; +extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf") __attribute__ ((__nothrow__ , __leaf__)) + + + + __attribute__ ((__format__ (__scanf__, 2, 0))); +# 513 "/usr/include/stdio.h" 3 4 +extern int fgetc (FILE *__stream); +extern int getc (FILE *__stream); + + + + + +extern int getchar (void); + + + + + + +extern int getc_unlocked (FILE *__stream); +extern int getchar_unlocked (void); +# 538 "/usr/include/stdio.h" 3 4 +extern int fgetc_unlocked (FILE *__stream); +# 549 "/usr/include/stdio.h" 3 4 +extern int fputc (int __c, FILE *__stream); +extern int putc (int __c, FILE *__stream); + + + + + +extern int putchar (int __c); +# 565 "/usr/include/stdio.h" 3 4 +extern int fputc_unlocked (int __c, FILE *__stream); + + + + + + + +extern int putc_unlocked (int __c, FILE *__stream); +extern int putchar_unlocked (int __c); + + + + + + +extern int getw (FILE *__stream); + + +extern int putw (int __w, FILE *__stream); + + + + + + + +extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) + __attribute__ ((__access__ (__write_only__, 1, 2))); +# 632 "/usr/include/stdio.h" 3 4 +extern __ssize_t __getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) ; +extern __ssize_t getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) ; + + + + + + + +extern __ssize_t getline (char **__restrict __lineptr, + size_t *__restrict __n, + FILE *__restrict __stream) ; + + + + + + + +extern int fputs (const char *__restrict __s, FILE *__restrict __stream); + + + + + +extern int puts (const char *__s); + + + + + + +extern int ungetc (int __c, FILE *__stream); + + + + + + +extern size_t fread (void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream) ; + + + + +extern size_t fwrite (const void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __s); +# 702 "/usr/include/stdio.h" 3 4 +extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream) ; +extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream); + + + + + + + +extern int fseek (FILE *__stream, long int __off, int __whence); + + + + +extern long int ftell (FILE *__stream) ; + + + + +extern void rewind (FILE *__stream); +# 736 "/usr/include/stdio.h" 3 4 +extern int fseeko (FILE *__stream, __off_t __off, int __whence); + + + + +extern __off_t ftello (FILE *__stream) ; +# 760 "/usr/include/stdio.h" 3 4 +extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos); + + + + +extern int fsetpos (FILE *__stream, const fpos_t *__pos); +# 786 "/usr/include/stdio.h" 3 4 +extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); + +extern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; + +extern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; + + + +extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); +extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; +extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; + + + + + + + +extern void perror (const char *__s); + + + + +extern int fileno (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; + + + + +extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; +# 823 "/usr/include/stdio.h" 3 4 +extern int pclose (FILE *__stream); + + + + + +extern FILE *popen (const char *__command, const char *__modes) + __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (pclose, 1))) ; + + + + + + +extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__)) + __attribute__ ((__access__ (__write_only__, 1))); +# 867 "/usr/include/stdio.h" 3 4 +extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); + + + +extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; + + +extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); +# 885 "/usr/include/stdio.h" 3 4 +extern int __uflow (FILE *); +extern int __overflow (FILE *, int); +# 909 "/usr/include/stdio.h" 3 4 + +# 21 "main.c" 2 +# 1 "/usr/include/stdlib.h" 1 3 4 +# 26 "/usr/include/stdlib.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4 +# 27 "/usr/include/stdlib.h" 2 3 4 + + + + + +# 1 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 1 3 4 +# 329 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 3 4 +typedef int wchar_t; +# 33 "/usr/include/stdlib.h" 2 3 4 + + + + + + + +# 1 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 1 3 4 +# 41 "/usr/include/stdlib.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 1 3 4 +# 42 "/usr/include/stdlib.h" 2 3 4 +# 59 "/usr/include/stdlib.h" 3 4 +typedef struct + { + int quot; + int rem; + } div_t; + + + +typedef struct + { + long int quot; + long int rem; + } ldiv_t; + + + + + +__extension__ typedef struct + { + long long int quot; + long long int rem; + } lldiv_t; +# 98 "/usr/include/stdlib.h" 3 4 +extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__ , __leaf__)) ; + + + +extern double atof (const char *__nptr) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; + +extern int atoi (const char *__nptr) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; + +extern long int atol (const char *__nptr) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; + + + +__extension__ extern long long int atoll (const char *__nptr) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; + + + +extern double strtod (const char *__restrict __nptr, + char **__restrict __endptr) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + +extern float strtof (const char *__restrict __nptr, + char **__restrict __endptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + +extern long double strtold (const char *__restrict __nptr, + char **__restrict __endptr) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); +# 177 "/usr/include/stdlib.h" 3 4 +extern long int strtol (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + +extern unsigned long int strtoul (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + +__extension__ +extern long long int strtoq (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + +__extension__ +extern unsigned long long int strtouq (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + + +__extension__ +extern long long int strtoll (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + +__extension__ +extern unsigned long long int strtoull (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); +# 386 "/usr/include/stdlib.h" 3 4 +extern char *l64a (long int __n) __attribute__ ((__nothrow__ , __leaf__)) ; + + +extern long int a64l (const char *__s) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; + + + + +# 1 "/usr/include/x86_64-linux-gnu/sys/types.h" 1 3 4 +# 27 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 + + + + + + +typedef __u_char u_char; +typedef __u_short u_short; +typedef __u_int u_int; +typedef __u_long u_long; +typedef __quad_t quad_t; +typedef __u_quad_t u_quad_t; +typedef __fsid_t fsid_t; + + +typedef __loff_t loff_t; + + + + +typedef __ino_t ino_t; +# 59 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 +typedef __dev_t dev_t; + + + + +typedef __gid_t gid_t; + + + + +typedef __mode_t mode_t; + + + + +typedef __nlink_t nlink_t; + + + + +typedef __uid_t uid_t; +# 97 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 +typedef __pid_t pid_t; + + + + + +typedef __id_t id_t; +# 114 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 +typedef __daddr_t daddr_t; +typedef __caddr_t caddr_t; + + + + + +typedef __key_t key_t; + + + + +# 1 "/usr/include/x86_64-linux-gnu/bits/types/clock_t.h" 1 3 4 + + + + + + +typedef __clock_t clock_t; +# 127 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 + +# 1 "/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h" 1 3 4 + + + + + + +typedef __clockid_t clockid_t; +# 129 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/types/time_t.h" 1 3 4 +# 10 "/usr/include/x86_64-linux-gnu/bits/types/time_t.h" 3 4 +typedef __time_t time_t; +# 130 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/types/timer_t.h" 1 3 4 + + + + + + +typedef __timer_t timer_t; +# 131 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 +# 144 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 +# 1 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 1 3 4 +# 145 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 + + + +typedef unsigned long int ulong; +typedef unsigned short int ushort; +typedef unsigned int uint; + + + + +# 1 "/usr/include/x86_64-linux-gnu/bits/stdint-intn.h" 1 3 4 +# 24 "/usr/include/x86_64-linux-gnu/bits/stdint-intn.h" 3 4 +typedef __int8_t int8_t; +typedef __int16_t int16_t; +typedef __int32_t int32_t; +typedef __int64_t int64_t; +# 156 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 + + +typedef __uint8_t u_int8_t; +typedef __uint16_t u_int16_t; +typedef __uint32_t u_int32_t; +typedef __uint64_t u_int64_t; + + +typedef int register_t __attribute__ ((__mode__ (__word__))); +# 176 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 +# 1 "/usr/include/endian.h" 1 3 4 +# 24 "/usr/include/endian.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/endian.h" 1 3 4 +# 35 "/usr/include/x86_64-linux-gnu/bits/endian.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/endianness.h" 1 3 4 +# 36 "/usr/include/x86_64-linux-gnu/bits/endian.h" 2 3 4 +# 25 "/usr/include/endian.h" 2 3 4 +# 35 "/usr/include/endian.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 1 3 4 +# 33 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4 +static __inline __uint16_t +__bswap_16 (__uint16_t __bsx) +{ + + return __builtin_bswap16 (__bsx); + + + +} + + + + + + +static __inline __uint32_t +__bswap_32 (__uint32_t __bsx) +{ + + return __builtin_bswap32 (__bsx); + + + +} +# 69 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4 +__extension__ static __inline __uint64_t +__bswap_64 (__uint64_t __bsx) +{ + + return __builtin_bswap64 (__bsx); + + + +} +# 36 "/usr/include/endian.h" 2 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/uintn-identity.h" 1 3 4 +# 32 "/usr/include/x86_64-linux-gnu/bits/uintn-identity.h" 3 4 +static __inline __uint16_t +__uint16_identity (__uint16_t __x) +{ + return __x; +} + +static __inline __uint32_t +__uint32_identity (__uint32_t __x) +{ + return __x; +} + +static __inline __uint64_t +__uint64_identity (__uint64_t __x) +{ + return __x; +} +# 37 "/usr/include/endian.h" 2 3 4 +# 177 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 + + +# 1 "/usr/include/x86_64-linux-gnu/sys/select.h" 1 3 4 +# 30 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/select.h" 1 3 4 +# 31 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4 + + +# 1 "/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h" 1 3 4 + + + +# 1 "/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h" 1 3 4 + + + + +typedef struct +{ + unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; +} __sigset_t; +# 5 "/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h" 2 3 4 + + +typedef __sigset_t sigset_t; +# 34 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4 + + + +# 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h" 1 3 4 + + + + + + + +struct timeval +{ + + + + + __time_t tv_sec; + __suseconds_t tv_usec; + +}; +# 38 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4 + +# 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h" 1 3 4 +# 11 "/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h" 3 4 +struct timespec +{ + + + + __time_t tv_sec; + + + + + __syscall_slong_t tv_nsec; +# 31 "/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h" 3 4 +}; +# 40 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4 + + + +typedef __suseconds_t suseconds_t; + + + + + +typedef long int __fd_mask; +# 59 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 +typedef struct + { + + + + + + + __fd_mask __fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; + + + } fd_set; + + + + + + +typedef __fd_mask fd_mask; +# 91 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 + +# 102 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 +extern int select (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + struct timeval *__restrict __timeout); +# 127 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 +extern int pselect (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + const struct timespec *__restrict __timeout, + const __sigset_t *__restrict __sigmask); +# 153 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 + +# 180 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 + + + + + +typedef __blksize_t blksize_t; + + + + + + +typedef __blkcnt_t blkcnt_t; + + + +typedef __fsblkcnt_t fsblkcnt_t; + + + +typedef __fsfilcnt_t fsfilcnt_t; +# 227 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 1 3 4 +# 23 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 1 3 4 +# 44 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 1 3 4 +# 21 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 +# 22 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 2 3 4 +# 45 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 2 3 4 + +# 1 "/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h" 1 3 4 +# 25 "/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h" 3 4 +typedef union +{ + __extension__ unsigned long long int __value64; + struct + { + unsigned int __low; + unsigned int __high; + } __value32; +} __atomic_wide_counter; +# 47 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 2 3 4 + + + + +typedef struct __pthread_internal_list +{ + struct __pthread_internal_list *__prev; + struct __pthread_internal_list *__next; +} __pthread_list_t; + +typedef struct __pthread_internal_slist +{ + struct __pthread_internal_slist *__next; +} __pthread_slist_t; +# 76 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/struct_mutex.h" 1 3 4 +# 22 "/usr/include/x86_64-linux-gnu/bits/struct_mutex.h" 3 4 +struct __pthread_mutex_s +{ + int __lock; + unsigned int __count; + int __owner; + + unsigned int __nusers; + + + + int __kind; + + short __spins; + short __elision; + __pthread_list_t __list; +# 53 "/usr/include/x86_64-linux-gnu/bits/struct_mutex.h" 3 4 +}; +# 77 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 2 3 4 +# 89 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h" 1 3 4 +# 23 "/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h" 3 4 +struct __pthread_rwlock_arch_t +{ + unsigned int __readers; + unsigned int __writers; + unsigned int __wrphase_futex; + unsigned int __writers_futex; + unsigned int __pad3; + unsigned int __pad4; + + int __cur_writer; + int __shared; + signed char __rwelision; + + + + + unsigned char __pad1[7]; + + + unsigned long int __pad2; + + + unsigned int __flags; +# 55 "/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h" 3 4 +}; +# 90 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 2 3 4 + + + + +struct __pthread_cond_s +{ + __atomic_wide_counter __wseq; + __atomic_wide_counter __g1_start; + unsigned int __g_refs[2] ; + unsigned int __g_size[2]; + unsigned int __g1_orig_size; + unsigned int __wrefs; + unsigned int __g_signals[2]; +}; + +typedef unsigned int __tss_t; +typedef unsigned long int __thrd_t; + +typedef struct +{ + int __data ; +} __once_flag; +# 24 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 2 3 4 + + + +typedef unsigned long int pthread_t; + + + + +typedef union +{ + char __size[4]; + int __align; +} pthread_mutexattr_t; + + + + +typedef union +{ + char __size[4]; + int __align; +} pthread_condattr_t; + + + +typedef unsigned int pthread_key_t; + + + +typedef int pthread_once_t; + + +union pthread_attr_t +{ + char __size[56]; + long int __align; +}; + +typedef union pthread_attr_t pthread_attr_t; + + + + +typedef union +{ + struct __pthread_mutex_s __data; + char __size[40]; + long int __align; +} pthread_mutex_t; + + +typedef union +{ + struct __pthread_cond_s __data; + char __size[48]; + __extension__ long long int __align; +} pthread_cond_t; + + + + + +typedef union +{ + struct __pthread_rwlock_arch_t __data; + char __size[56]; + long int __align; +} pthread_rwlock_t; + +typedef union +{ + char __size[8]; + long int __align; +} pthread_rwlockattr_t; + + + + + +typedef volatile int pthread_spinlock_t; + + + + +typedef union +{ + char __size[32]; + long int __align; +} pthread_barrier_t; + +typedef union +{ + char __size[4]; + int __align; +} pthread_barrierattr_t; +# 228 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 + + + +# 396 "/usr/include/stdlib.h" 2 3 4 + + + + + + +extern long int random (void) __attribute__ ((__nothrow__ , __leaf__)); + + +extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__)); + + + + + +extern char *initstate (unsigned int __seed, char *__statebuf, + size_t __statelen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); + + + +extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + + + + + +struct random_data + { + int32_t *fptr; + int32_t *rptr; + int32_t *state; + int rand_type; + int rand_deg; + int rand_sep; + int32_t *end_ptr; + }; + +extern int random_r (struct random_data *__restrict __buf, + int32_t *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + +extern int srandom_r (unsigned int __seed, struct random_data *__buf) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); + +extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, + size_t __statelen, + struct random_data *__restrict __buf) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))); + +extern int setstate_r (char *__restrict __statebuf, + struct random_data *__restrict __buf) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + + + + +extern int rand (void) __attribute__ ((__nothrow__ , __leaf__)); + +extern void srand (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__)); + + + +extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__ , __leaf__)); + + + + + + + +extern double drand48 (void) __attribute__ ((__nothrow__ , __leaf__)); +extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + +extern long int lrand48 (void) __attribute__ ((__nothrow__ , __leaf__)); +extern long int nrand48 (unsigned short int __xsubi[3]) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + +extern long int mrand48 (void) __attribute__ ((__nothrow__ , __leaf__)); +extern long int jrand48 (unsigned short int __xsubi[3]) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + +extern void srand48 (long int __seedval) __attribute__ ((__nothrow__ , __leaf__)); +extern unsigned short int *seed48 (unsigned short int __seed16v[3]) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); +extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + + + +struct drand48_data + { + unsigned short int __x[3]; + unsigned short int __old_x[3]; + unsigned short int __c; + unsigned short int __init; + __extension__ unsigned long long int __a; + + }; + + +extern int drand48_r (struct drand48_data *__restrict __buffer, + double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); +extern int erand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern int lrand48_r (struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); +extern int nrand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern int mrand48_r (struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); +extern int jrand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern int srand48_r (long int __seedval, struct drand48_data *__buffer) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); + +extern int seed48_r (unsigned short int __seed16v[3], + struct drand48_data *__buffer) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + +extern int lcong48_r (unsigned short int __param[7], + struct drand48_data *__buffer) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern __uint32_t arc4random (void) + __attribute__ ((__nothrow__ , __leaf__)) ; + + +extern void arc4random_buf (void *__buf, size_t __size) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + +extern __uint32_t arc4random_uniform (__uint32_t __upper_bound) + __attribute__ ((__nothrow__ , __leaf__)) ; + + + + +extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) + __attribute__ ((__alloc_size__ (1))) ; + +extern void *calloc (size_t __nmemb, size_t __size) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) ; + + + + + + +extern void *realloc (void *__ptr, size_t __size) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2))); + + +extern void free (void *__ptr) __attribute__ ((__nothrow__ , __leaf__)); + + + + + + + +extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) + __attribute__ ((__alloc_size__ (2, 3))) + __attribute__ ((__malloc__ (__builtin_free, 1))); + + +extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__ (reallocarray, 1))); + + + +# 1 "/usr/include/alloca.h" 1 3 4 +# 24 "/usr/include/alloca.h" 3 4 +# 1 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 1 3 4 +# 25 "/usr/include/alloca.h" 2 3 4 + + + + + + + +extern void *alloca (size_t __size) __attribute__ ((__nothrow__ , __leaf__)); + + + + + + +# 588 "/usr/include/stdlib.h" 2 3 4 + + + + + +extern void *valloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) + __attribute__ ((__alloc_size__ (1))) ; + + + + +extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; + + + + +extern void *aligned_alloc (size_t __alignment, size_t __size) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1))) + __attribute__ ((__alloc_size__ (2))) ; + + + +extern void abort (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); + + + +extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + + + + + +extern int at_quick_exit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + + + + +extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + + + +extern void exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); + + + + + +extern void quick_exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); + + + + + +extern void _Exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); + + + + +extern char *getenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; +# 667 "/usr/include/stdlib.h" 3 4 +extern int putenv (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + + + +extern int setenv (const char *__name, const char *__value, int __replace) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); + + +extern int unsetenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + + + + + +extern int clearenv (void) __attribute__ ((__nothrow__ , __leaf__)); +# 695 "/usr/include/stdlib.h" 3 4 +extern char *mktemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); +# 708 "/usr/include/stdlib.h" 3 4 +extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ; +# 730 "/usr/include/stdlib.h" 3 4 +extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ; +# 751 "/usr/include/stdlib.h" 3 4 +extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; +# 804 "/usr/include/stdlib.h" 3 4 +extern int system (const char *__command) ; +# 821 "/usr/include/stdlib.h" 3 4 +extern char *realpath (const char *__restrict __name, + char *__restrict __resolved) __attribute__ ((__nothrow__ , __leaf__)) ; + + + + + + +typedef int (*__compar_fn_t) (const void *, const void *); +# 841 "/usr/include/stdlib.h" 3 4 +extern void *bsearch (const void *__key, const void *__base, + size_t __nmemb, size_t __size, __compar_fn_t __compar) + __attribute__ ((__nonnull__ (1, 2, 5))) ; + + + + + + + +extern void qsort (void *__base, size_t __nmemb, size_t __size, + __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); +# 861 "/usr/include/stdlib.h" 3 4 +extern int abs (int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; +extern long int labs (long int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; + + +__extension__ extern long long int llabs (long long int __x) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; + + + + + + +extern div_t div (int __numer, int __denom) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; +extern ldiv_t ldiv (long int __numer, long int __denom) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; + + +__extension__ extern lldiv_t lldiv (long long int __numer, + long long int __denom) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; +# 893 "/usr/include/stdlib.h" 3 4 +extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ; + + + + +extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ; + + + + +extern char *gcvt (double __value, int __ndigit, char *__buf) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) ; + + + + +extern char *qecvt (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ; +extern char *qfcvt (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ; +extern char *qgcvt (long double __value, int __ndigit, char *__buf) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) ; + + + + +extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign, char *__restrict __buf, + size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5))); +extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign, char *__restrict __buf, + size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5))); + +extern int qecvt_r (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign, + char *__restrict __buf, size_t __len) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5))); +extern int qfcvt_r (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign, + char *__restrict __buf, size_t __len) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5))); + + + + + +extern int mblen (const char *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)); + + +extern int mbtowc (wchar_t *__restrict __pwc, + const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)); + + +extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__ , __leaf__)); + + + +extern size_t mbstowcs (wchar_t *__restrict __pwcs, + const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) + __attribute__ ((__access__ (__read_only__, 2))); + +extern size_t wcstombs (char *__restrict __s, + const wchar_t *__restrict __pwcs, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) + __attribute__ ((__access__ (__write_only__, 1, 3))) + __attribute__ ((__access__ (__read_only__, 2))); + + + + + + +extern int rpmatch (const char *__response) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; +# 980 "/usr/include/stdlib.h" 3 4 +extern int getsubopt (char **__restrict __optionp, + char *const *__restrict __tokens, + char **__restrict __valuep) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3))) ; +# 1026 "/usr/include/stdlib.h" 3 4 +extern int getloadavg (double __loadavg[], int __nelem) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); +# 1036 "/usr/include/stdlib.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 1 3 4 +# 1037 "/usr/include/stdlib.h" 2 3 4 +# 1048 "/usr/include/stdlib.h" 3 4 + +# 22 "main.c" 2 +# 1 "/usr/include/memory.h" 1 3 4 +# 29 "/usr/include/memory.h" 3 4 +# 1 "/usr/include/string.h" 1 3 4 +# 26 "/usr/include/string.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4 +# 27 "/usr/include/string.h" 2 3 4 + + + + + + +# 1 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 1 3 4 +# 34 "/usr/include/string.h" 2 3 4 +# 43 "/usr/include/string.h" 3 4 +extern void *memcpy (void *__restrict __dest, const void *__restrict __src, + size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern void *memmove (void *__dest, const void *__src, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + + + + +extern void *memccpy (void *__restrict __dest, const void *__restrict __src, + int __c, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 4))); + + + + +extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); + + +extern int memcmp (const void *__s1, const void *__s2, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); +# 80 "/usr/include/string.h" 3 4 +extern int __memcmpeq (const void *__s1, const void *__s2, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); +# 107 "/usr/include/string.h" 3 4 +extern void *memchr (const void *__s, int __c, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); +# 141 "/usr/include/string.h" 3 4 +extern char *strcpy (char *__restrict __dest, const char *__restrict __src) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + +extern char *strncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern char *strcat (char *__restrict __dest, const char *__restrict __src) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + +extern char *strncat (char *__restrict __dest, const char *__restrict __src, + size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern int strcmp (const char *__s1, const char *__s2) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); + +extern int strncmp (const char *__s1, const char *__s2, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern int strcoll (const char *__s1, const char *__s2) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); + +extern size_t strxfrm (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 1, 3))); + + + +# 1 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 1 3 4 +# 22 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 3 4 +# 1 "/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h" 1 3 4 +# 27 "/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h" 3 4 +struct __locale_struct +{ + + struct __locale_data *__locales[13]; + + + const unsigned short int *__ctype_b; + const int *__ctype_tolower; + const int *__ctype_toupper; + + + const char *__names[13]; +}; + +typedef struct __locale_struct *__locale_t; +# 23 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 2 3 4 + +typedef __locale_t locale_t; +# 173 "/usr/include/string.h" 2 3 4 + + +extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); + + +extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, + locale_t __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))) + __attribute__ ((__access__ (__write_only__, 1, 3))); + + + + + +extern char *strdup (const char *__s) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); + + + + + + +extern char *strndup (const char *__string, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); +# 246 "/usr/include/string.h" 3 4 +extern char *strchr (const char *__s, int __c) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); +# 273 "/usr/include/string.h" 3 4 +extern char *strrchr (const char *__s, int __c) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); +# 293 "/usr/include/string.h" 3 4 +extern size_t strcspn (const char *__s, const char *__reject) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern size_t strspn (const char *__s, const char *__accept) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); +# 323 "/usr/include/string.h" 3 4 +extern char *strpbrk (const char *__s, const char *__accept) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); +# 350 "/usr/include/string.h" 3 4 +extern char *strstr (const char *__haystack, const char *__needle) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); + + + + +extern char *strtok (char *__restrict __s, const char *__restrict __delim) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); + + + +extern char *__strtok_r (char *__restrict __s, + const char *__restrict __delim, + char **__restrict __save_ptr) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))); + +extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, + char **__restrict __save_ptr) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))); +# 407 "/usr/include/string.h" 3 4 +extern size_t strlen (const char *__s) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); + + + + +extern size_t strnlen (const char *__string, size_t __maxlen) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); + + + + +extern char *strerror (int __errnum) __attribute__ ((__nothrow__ , __leaf__)); +# 432 "/usr/include/string.h" 3 4 +extern int strerror_r (int __errnum, char *__buf, size_t __buflen) __asm__ ("" "__xpg_strerror_r") __attribute__ ((__nothrow__ , __leaf__)) + + __attribute__ ((__nonnull__ (2))) + __attribute__ ((__access__ (__write_only__, 2, 3))); +# 458 "/usr/include/string.h" 3 4 +extern char *strerror_l (int __errnum, locale_t __l) __attribute__ ((__nothrow__ , __leaf__)); + + + +# 1 "/usr/include/strings.h" 1 3 4 +# 23 "/usr/include/strings.h" 3 4 +# 1 "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h" 1 3 4 +# 24 "/usr/include/strings.h" 2 3 4 + + + + + + + + + + +extern int bcmp (const void *__s1, const void *__s2, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern void bcopy (const void *__src, void *__dest, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); +# 68 "/usr/include/strings.h" 3 4 +extern char *index (const char *__s, int __c) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); +# 96 "/usr/include/strings.h" 3 4 +extern char *rindex (const char *__s, int __c) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); + + + + + + +extern int ffs (int __i) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); + + + + + +extern int ffsl (long int __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); +__extension__ extern int ffsll (long long int __ll) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); + + + +extern int strcasecmp (const char *__s1, const char *__s2) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); + + +extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); + + + + + + +extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); + + + +extern int strncasecmp_l (const char *__s1, const char *__s2, + size_t __n, locale_t __loc) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4))); + + + +# 463 "/usr/include/string.h" 2 3 4 + + + +extern void explicit_bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) + __attribute__ ((__access__ (__write_only__, 1, 2))); + + + +extern char *strsep (char **__restrict __stringp, + const char *__restrict __delim) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + + + +extern char *strsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__)); +# 489 "/usr/include/string.h" 3 4 +extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); +extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); + + + +extern char *__stpncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); +extern char *stpncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); +# 539 "/usr/include/string.h" 3 4 + +# 30 "/usr/include/memory.h" 2 3 4 +# 23 "main.c" 2 + + +# 24 "main.c" +typedef struct emp_ { + + + + char name[30]; + + unsigned int salary; + + char designation[30]; + + unsigned int emp_id; + + glthread_node_t glnode; + +} emp_t ; + + + +void +print_employee_info(emp_t *emp){ + + printf("Employee name = %s\n", emp->name); + + printf("salary = %u\n", emp->salary); + + printf("designation = %s\n", emp->designation); + + printf("emp_id = %u\n", emp->emp_id); + +} + +static inline emp_t *glnode_to_employee(glthread_node_t *glnode){ return (emp_t *)((unsigned long)glnode - ((unsigned long)&((emp_t *)0)->glnode)); } + +void +print_employee_details( glthread_node_t *glnode){ + + emp_t * emp = glnode_to_employee(glnode); + print_employee_info(emp); +} + +int main( int argc , char** argv ){ + + + + emp_t *emp1 = calloc(1, sizeof(emp_t)); + + strncpy(emp1->name, "Neha", strlen("Neha")); + + emp1->salary = 50000; + + strncpy(emp1->designation, "HR", strlen("HR")); + + emp1->emp_id = 21; + + (&emp1->glnode)->left = +# 78 "main.c" 3 4 + ((void *)0) +# 78 "main.c" + ; (&emp1->glnode)->right = +# 78 "main.c" 3 4 + ((void *)0) +# 78 "main.c" + ;; + + print_employee_details((&emp1->glnode)); + return 0; +} diff --git a/Assignment3/main.o b/Assignment3/main.o new file mode 100644 index 0000000000000000000000000000000000000000..13eec613ac46d2a3389cea1bf1351b8052280b79 GIT binary patch literal 6168 zcmbtXZ){sv6~EWcYuq^h-DWLq>C5_Okj{3~MroV1!Bf)BnYt+|s+M-0ychfVk7_>` zzvq&awHu3=7AmCm17ja5p=o>?q7r(4G< z`8a#+QH#Z{3#t?}ut;HB`@OqTncUCqq4_@$LBR)Vq`nGbHCtX-_u7hTu(oSJK& zu=n|0!gs1pV-baBmngV?rQ|t5rS6g1tzFDj3Z%|Ogs_B+VaUz+*@d4lO@=136BYfD zjx*4JBYZaPM4p6BCB#HD1(2G;NKEn3a{$N=<*xAP-G{Cs6jM-FOzH|`M9ETa0;P}< zWgG9XDqaA#+Vfr1XoGIWYn(zwe+Ft5WKM3|1Es4n<<1!LBz(UA0`Ruh*h;fk3lA&J zv=;Uzut zOWqh#p%3ij&_eDN@%Uss+6$R`M6`Dz{#g82d?s-;4u$uL_;73{0rgp^8kSlY*#-+} zC}a$yX9=|HOvq?&Jg$Na_e(%xDfy-CDy(%Z{>b*3#PRJ2Zyu2QdK2;J?j5@axHb@$$f?)Ex_p6{iQqCmMsdpIUG}!b(0iwSZ84AY87$~#tMHPQwEL0xWJGjw0 zY?}bv821}(x1^vK8d#5eS;gJjK8z4UFhU!Gh)1DDwN~|7qbU#~yk%P;Fz>+60^28` zl~Vqvw+9=XL-+x+I|^)zB64@6Pi@2&q!~5oDsRNH#b#XrsG=j%dgPX6Jryfk`(nVn z0*s8^nta6?ealJ!@GndL)Y>y?ZCSGhVh6#}8Z27_H^I^xJZD)qW0$OMusIuvKskA* zTCL}WU%Bk&0#T}Z^#U;U9IP*Ot1PN^qN!gutGR*Rii%Gm!RBmokC7^X}w}BNCo+H zq>V0txYz*W)==asUa>BmMkyci$7pyfXxk!P3#Mnm4V+5Vr?EjF2y;n?K}n5bctq3X zdd*FjVOG3(w^2$@yZ(iseldNj;x!j?UtaWcvyFNw{kV@#HP;Ic3mk@2UVH}6bklF7 ztCjh5DW6ZnG~~v|l2uHUEP2iJ=%IAQ%U7EPS13akC?7REbg8oNgF?YAY6hZerc#Gi zJUKNrVSi!Tov%0^t%l_2*cXX~)vb<5XyxV8LN4^n9o?O=*I_H{1Pp&j>J)suxBu11 zRL`c!Rj|;y<65ncXx2Zi)XMif>D7_V`r^9&MbfKlg7uL_Z9qD+!Cl%R{(0ZTQI58K zp&_pB*bOdt#ld#eeFL7a1vH9^cIN})==Eue3OHKZP*n7^K`{(rM#B0%v{}ZiNak_x# zI{z5LaW)ypCkqnB>4qQUymBx`cy;j#K^$#d_#yFnL>ynRJT5$*jH4~m=X9f15cZ8} zgc!6}4@i=^--u&g?$2YSXMC9Ctbv~*`8fmcq5gXY{x_0+1LvB)Zs7R-L;9v}1lMzf z)=fTzee?Z*T6l(e_-HO2_Ew$KSUOpH9ZrJlU#AuW7xbcacAe`gyIXq(6bDU!azKil@ zj5t(&Ywu%Ti$Q4loa4N#dYBlr$8%tUWF8O3YlM$b%lI24j~V#eBp);IcSxQzaNdto z27Zg=@cDpszE3#bM@U@Hue2zhrPl1PO*jr84WU9Z2F~;Hf`RkAzii+uB#V^4Sc8`> zv_V6+W#$@g)ky{JLLgEFCvZe+-uFeSQP+af7Toz}Nxw@|ns?^s8}21ALuY~-j#q-0 za~Ol?oeN==JLF>);hd85^%_1aMaruOZVDdoNk4G%7bu8Z&J`Q@>ivJoh5$I`;X4Rp zX7B@K{>h@{td;P^cM9HZ8Tf@Mibe1;6cZ`HAa{C%sxAXsq9x{C2Q`lBt z*&p90?fmahp*A~G%YNLxMgE4F_$znRP_Q4v?~=cX400qyYu zIpX*u#Qwbhu^uxwy1a~w1*l8~we$Z2)xXm6 I)Qsu>U(y-dTmS$7 literal 0 HcmV?d00001 diff --git a/gl_thread b/gl_thread new file mode 160000 index 0000000..12c21f8 --- /dev/null +++ b/gl_thread @@ -0,0 +1 @@ +Subproject commit 12c21f849224c5bdf00464bade0c0eb457dcb453