栈详解及java实现

时间:2023-03-09 18:12:18
栈详解及java实现

导读

  栈和队列是有操作限制的线性表。

目录

1、栈的概念、特点、存储结构。

2、栈的java实现及运用。

概念

  栈是一种只允许在一端进行插入或删除的线性表。

1、栈的操作端通常被称为栈顶,另一端被称为栈底。
2、栈的插入操作称为进栈(压栈|push);栈删除操作称为出栈(弹栈|pop)。

特点

  栈就像一个杯子,我们只能从杯口放和取,所以栈中的元素是“先进后出”的特点。

存储结构

  顺序存储的栈称为顺序栈;链式存储的栈称为链式栈。

java实现

  我们可以围绕栈的4个元素来实现栈:

2状态:是否栈空;是否栈满。

2操作:压栈push;进栈pop。

顺序栈的实现

  顺序栈示意图:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAioAAAGTCAIAAACJf67EAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAGcNSURBVHhe7b0xbBzJlm3baLN9WfqenkuzvXboDp0H0JQpU94IuA4doV2Z7Qw4jgC1J1OmMIAAerRlEXjPoNv46B5Mo+8McPHvXxkreRTMKlJVxSpWqWovCInIEyciM09EnJ1RRVLf/TOEEEJ4dCI/IYQQtkDkJ4QQwhaI/IQQQtgCkZ8QQghbIPITQghhC0R+QgghbIHITwghhC0Q+QkhhLAFIj8hhBC2QOQnhBDCFoj8hPBQ/r95aNdhQapVX5CqLcooE0udfivUPUtvvIdyLs86LYvUaV81WwiPSeQnhAdxV+ZaLbXd31sdJwXLdewLu0zdc09VWS7L4lTDSduyWIBZ4+AXHovITwgPxcw1oez6LEK1+u9//F2LlN3TCdiLOrXQ6r8BJrdap199BBz0sSBVZUEmp3KXc3gcIj8hPAgy1yR5aRFPtX8VPX/77bd37959+vTp6uoKHWrdzOHPP//Ek6OnNp/Qet1dxrts/PHX79fX1/0TFaP3PKwtt4uLC0J3eXlJP2WUOiWk1MJsbPUMj0bkJ4TVMWeRyD5+/Ej2NIGaywo9F0FnOjk6Ovrhhx9OTk5QIO1Fcxx8nj9/fnx8/OLFC6+oXZ9C4y7gzXhXPVX14cOHnxrn5+fleX/DiZ3TN2/efP/990+fPqUTLVZJa/FPqogbvH//vuwWxNPmGzZL5CeE1TFPIQCmTgQDVSCTTt6sdf4qeio/T548QdLm7n7wQZbQJ1Lt6ekpZW6AF3/2DXZSDJ3uGOOdtXsbS62MGHz33XcoB4VJ1expMVobnCo/SrK1zWugyi9fvvRC6BDh/dywqvcPj0DkJ4SHQtpCAy4b7969+/HHHyloF92+ip7Iz7PGrJwIRuWHC/lRlZuh2gkVQ6e7gTfT31WVPSo/PEIpbvP68vieQn9qoSzID51wLGPP0OBGftQeTt0McfWKdh3Dpon8hLBOEAB2JGRA0+hoXQz96QHt4fXcV3ihqu+t5MdTqhA8NkzswKjS0vtvHW8GmWRLx63OyqTyg4g299HfI8LA3s6PN3tx6gscoZefQjfwVPnhLcFTOkTz2DP98ssv+ugMOoTNEfkJ4UGYpyphkc54oSaN9m/T9zDr4IdvKJDyw3GyDaJc8uMp4EMa9SM7TidpurlsE+/h8+fPbDW4c3c52q1CftCAu+QHzaD25OTED8psO0svP/gocpSHa7QC9PJjPx8+fJjckscqcAybIPITwnowT5Erz87OlJ+WwQZ0uAcSH/9owrH/8A2ZIeeSGWu7oP9EfqxCeLiu3zxprOPW8Ta4be7ZL3i4yeGmG1Rx23fJD55EAM14/fq1kly1UHHjn/Lz888/Y6HMXrC/EE1gVn4IOEMGFJrL2H/YNJGfENaDOYv8SIYljU6y3j3gw0v9LzeQPUnQ7GNIoGgPMuO7eekZTUp+7EGo+vTpE9sLGvZy5XG7eA/KD6pgou9vzw/feEzKZfRIJNEMAoJEeVpVPCYNeV7ixqbz9PSUTji+evWKGKJn7CPdDuoPkw/f5I+/fqcJDS8vL2vgitEprJvITwgPZcxSNwmRlOcnOaP17vxlFZ6kSNIirTgiXSU5nJIWOfLij/zYCsjjpGNSOZcDToFOyOy2pckiN/BoeA/cJPcMd8nPPbsfHgqfSRX9oD0GCuiZTgiCp4ZO+Smw4INWETeaI/zcFZ7GjR6QcNzov79Q2ASRnxDWgwmL5EUWIwOS3cqowz3gQ5L1QyTSJfnRD984VUU4NqEZlIaMSSLmKiiQ7+wI3vCbLO3XgEjH7J/YKLQrf2G80pbwBkp+KJTRI090z4dvaAbPW7sf7AWnBorguPthJ8SpbhzZ2VCl0rC5wcevkeiTO2GkiBunZ2dn7qLq3gpOwyaI/ITwIMYUdZMoyWJkQIShz2LNcT469Lx79478iPyQNHGgT45kT9KlSmPG5BL4kDGBvDxIU/tN/tbrmLjtEDRuEe+h5Gd298MjfFV+avczwaemc8Ki/JQbBeJJtwSN0CEzHOkKC25v3/6KJhE3P9jEuRr2aA9rJ/ITwkOpJEUWI8EtKz8eLfCqzg6GREyKRFdKTrCTRs/Pz0nB5G4yJhmZTNrnTamuLBTWbgtvgJggAyU/PcgPcePZx/PbTHY/Gn0u4ZRawk4niBCiUg7sePxmyN/Mxe3p06fG1oZFnbZ2X9AY1k7kJ4TVGfNTg1PSKzsS0ivCUAnOqrvQQTglL5OglZ/qZOJJGeOrV6/ItqgRlsqkHD9+/Ei2dSdURgtbhBvgfj59+kR8eC6UgCftQR5QDrZ343kHUWWz4sPaVT2OZeGp6YG44Yk/qjNxACzcA/LDhQhROVDgQvRA9FT0gqqwISI/IazOmKJuIIeS+9CM169f88KuAPSMzTrGigan5GUSKGkUDSPb2ttsP6TIkh/7wYd8Ss4luZvHKY/eDd22glfn9lAFFQKJZZvINgUogLeNMHhqFXjqjwL6sDxp63WgHo2AsHOycyJGmQD2eyCwIQKjPtFk6KK15d4YMm+AQbTKVvqETRD5CWF1zFBAmRRGyiO1kfVIYaTOymLNdz42F0794gdIx3RIGqVDeiuHQnHiyGs7ovX27a/+GAJGdhikbIy42RBstRW8OtE4Ozsz9SONRKlw50H257bZ64zWDp4LXVF++mdpTzac0oq2xI1OCIU/AIKFnnVr7gNEFfHjHqii5w8fPvz888/EmYCjPYwg6oUPnn2rsAkiPyGsTst+A5TduJAoybN+ykR2632gNbrFWNGqyHqkRT+7ozlv66TpkiJO/SEuUi3XQpO4nFsEINWS3Eni1HIDOI/93uDltoU3QMYn3SsJE5AWlOOu736QBALLo1GuZ7HgkWgQNz+3xBkLkaRMQCgTEOLGdYknQ0Os3GYZOi5KE24Mn0noaBs2R+QnhKUxMfVH0hZZrN7QSWRkw9nP36iaMFa0KuQKpeFlnDSK/NAJkB9VMvIjHZKFseDGkctRQIpMmnWtSc+icUcY7+kGLMQNtUAz5jrA/XaCT2TY/6FhBBCL8uzfMkBd6Bm9MW7Ek2tZ1ccN7K2YtYQ1EvkJYTlMSXW0wGu1YuCrPRmN7MYrNvuVSZMJrYMRMiaZETlBumiL9mAkL5M9zaFkWN/T2QdgIZPiic/YV1PBt29/fffunW2LsXp7cA/EhNurU7HMUfmp3U9VWbDtrE5YIBoI9uvXrwkg8kOIMCLYDAF7HeJJ3FBuwkKZTtgS+ZFm62PshCrsjKNXKXvYHJGfEJam0pMFEhYv1259ykgiQ0JIeeUJlGfRjpy4YaKACAESYq0OXKUyI5COcSaNokbWciSHclHyOFU42FZao23CvbE7QR3rMzTvyiNPgXL0ux+PFj62P2fHtgY5Kbtwih3hR2/8Akn5Gasbfdxg8tMHVBlM2hL2ukQdw4aI/ISwEJWPJmAknaE9JycnaoBGMhrv8qTFPttCOUgZ6+siVIeCux8dmuOI/kCZlN3vGLgQAoaFIym4cmsdtwvaTH6vbUfdkgVr75Ifaokw+MGadqDMY7K5MQg8dcmPlJsFoExgGSyCjCJaZUNizg2UUSiHDRH5CWE5xrTU4NRdC5mLtDVaG1SxASLb8lpdsiRDLzd4SkIkgZpDlR8o+dHHQoEFvcGNq5OC4ezsDO0hF9NwdOrAf7soMDxjHw0L1nLzE/mpgkJL7Wwk2V8eHx/zBkC5lx9rLUzA6I9ZK4QKPyPFPYweHa2PsBEiPyEshJnIlCSckg1ftb9WScobrTdYi/ZQS16rtn1BKJMByaHIFaezH741rwHLQ+NW+OOv3+kf5SM7sy0o7aGKS0+ct47yww1T9q7AsrXcvwJcxir40Vxfq52HpUN0V3svPxP0BwWMDn0zIPLsUCn7MSnYeY/2sHYiPyEsxJiKOjCSNFEX0iKbj1kfLJ8/f0YewNfzseImo1mgLbVunjglpaI9NJkrPz1Y/IaJ7Am99jT3saDn1pmVH+0WFJh7dj+TWu3+QKBPDffID9gKLHMnjB1xI9q+H2j3qH57GjZE5CeEOzH7mIZgUib3kb/qp93Gihl4rea9nhxX32nPxSqO9Eaf/e5nFuxAinz79lfkh5w7+VAL6AdVo6CxtXhU2l2McNrLz121E4ERTufufgotHHv5qaoqi5ar9od8cCbO9WZgAHkbYKQmPx8RNkHkJ4T7qOxjJhJOSe6Tr6/nQhXpjJzbZ7ryt1CnQNkP32Z3P+VgGbfXr1+rf/hzVN7ModSSrP1Uqm+4RSa7n9pegLX13c9ovaHa3iU/gn129zPWNbQQVUbBr+s4svshSm5eDd15+2/r/CC0bxjWTuQnhDsx9ZiDCiyLaE/ZKZDyyHQqEC/yJrty6MFI53N3P63FkCJx+OWXX+gQH1Inp2yw0CEsNgGyJ7VkbcrV9pHxtoXTXn5mmexvJlBb4gR2aM8FltndDwwNGgQHhaYThOf4+NgtDgWaIDnliUN9jNk3D2sn8hPCnbT09QWN5KxZ7bHQ6kfq1ALONCHToROvXr36/PnzXBHilMSHZ+1+Cvy5tMJDLXmcTqzC0w0WqRMfJIoUjJuXqJ4fGa8LlLkTfykHgUEvZ0EAqCXvj+e3efv217k/mCB1OpEfjRSIDzseheenn35CrSv4CBtG4BIYCSlx41ZtWMewCSI/IdwJqafglLROFkN7SGSm/rFuHrPNS4GAAhsX9iikvNGjgRvZtnY/WP7463cseJITuTTJUeHRuTUaCqgOVeRo2pJ/OXI68XlkvC5QJss/af8ZD8/l9mICqoAGcNvj+W14FtpO5MfORXsvPwwWASRQXJqG9ED0euGphj///LP3RmDxJIZIUTlAcw/rJ/ITwp2YesxBaABv6ORH9i6mMO1SzrPoAJQ/tR/zZQNEjiPbku/otmo9YqndDxciY+ImiJ+a1HdboED40DmZFEi4OFe3j493BZS5cx6cLE/0KCMJEzAiz8RnPO+gCqnmuWZ3PxbaRYZCLz8Iz+vXr2lCTLAQHH1Af+HUIHN7xg38LE5sEjZB5CeEO6kERIYib/LaTjb0C2qrCi1Dm3noA5TJg6ZFNjRqSQ8Oyg/ZUPkhKePJRa0VnQstHNkq+RdoSNZ0QuIu56HZ4+JFvTrw4NyPyr0saAnxr6+yQLtl4ZRn58GVHy5H6Hp1hyr3Fgs4s81CIOmhf8OwNmyCyE8IdzLkqpaASOukTv9+qHYLi2NXUGXtUGULJD7evmE2U7d2Yw9aQKNoIeeSgumhdj9V9fjMXlopXZax8e3HsSycotNIO0ermstAOcyW6wjcGK8X1QM03y/9hPUS+QnhTsw+hZbZY386l95h8O4KxcRNWs1IfzqpmtCajsxaHhMv7T3cQ/n0TThamMvcWo0wnjfKYqFHh2K0NkZTYzSFdRP5CeFOxvQzj9FjScbGtxnrGqPpBi1W3YWeX2X03hJ1DxZ6dLif0bWjjJPa2a1V62A+o8e9jK5hA0R+QrgTs8+6ctCktzqdWHq0zNpnWcRnp1jk0ajt3SanvWUW7fc4LMIDm4f7ifyEcB9mH9OQaH8I1c/c3qwVT7XfQ3nOUrVbp25GyrIgtoL+tC9PmPjcRTnoPMGqsCEiPyGEb4wShojEN03kJ4Sw65TMVGFSDt8ikZ8Qwq6j0ginvzWqykL45oj8hLBNKqXWsafsoQLy3//4+88//+zvlpbRsoXwrRD5CWH7zE2dLbUO9rm1B4hxuLq6+umnn553//F2HcO3ReQnhG1C3uz546/f/7z9R0hl9D5UjIDHjx8/Pnny5OTkpP+bDjK4hm+Hb11+/uO//p//9f/y71/+/R+jJYRviTFxttTJe/3Lly/9L3z6Kmi+B03F4fz83D/Y6p+A63/PtDmGb4Ytys///fu/DMrxX+N//yij8ebf3/5ntN+DCrSI5z//8W//u7q9KU9uIIRHZUycLXVeXFx89913vNr7N8eSWHsMAlvDFy9e+Hep0WntRXMM3wzb3P2UANz+97///n9Gh4X4+LdJD//5b/93rJrl//z7f+Jzs1X6n38d/JGfL3eSXVR4XMbEeSM/vNeX/Gj0GPymh8jU/4zQf/5Wx/AN8cjyM+xUvsiDyvGv/+FZvzW5l5sP3OrfTQ8L0NqWf7uB7H7C1jF1klvJqr38aPcY4JdffkGhlZ+nT59++PABo4ECfcK3wmPvfprG/O///Je2z5gnPwuIgR/QlUr1arSYdJX8tM3Qf/7r34YtUW8P4bEYE2dLnZMP3zR6PExaYEY4rU/eSoH8/K08LYdvhUf/8G2QnL/9vYnQ3/+tl5/Jtz73iMGM57/8+//Up2dfkZAvWvWf//YfX/rJZ25hq5g6UZ3ZD98CGIrPnz//9NNPvfygRv2PX4dvi+3Iz/98OQ6fxbnvGXYhyoC7ojsloUmItWxfSnvuFh6/4/nyj7Z+CfSv/9Gq2DPdyFI2QGEblPyQUiM/BREoOP3w4QPBIUQlP0dHR4nVt8tOyM9g/Jd//3sTifH0HiWoVgP9J2/9v/k/vzDqXPezCTdfOPHvqx/chbApzJ6RnwmD7DQsv379WtUBFeiHH3745ZdfrG0twrfEFj98m8qPm5jhu5975acTjFv/xi+N3NYM/2YV6MsWZ7If+nLRfAoXtoHZM/IzgQiAH69dXV2dnJyU8FSh//wNWruE7ttgKz968BD58YufW9KilrinaeX5W5+h6l/+9l833/fc/IxD06R//ffxe6B8+Ba2geky8jNh0JMG5ffv3/vJW6H85PO3b5fHlp9BA/71PxSheR++NeW4R35u/+KOzH6kNst4xSY2E8/aTt3fQwibw9QZ+ZnFIHA8OztrovMF5Yfj+fm5PkVrGnadR5afIfvfbDu+yEy3Lxm+gBn1YJ78uNH50kPj6/IzXMgt0VR+7PCuy4WwRkyL5kcoSxVm5aen3A6HevDffvvt+fPnTXS+UJ/CvX79Ws8eewi7zKPKz6AT3cbli8x8/NutX77x13Fm5WTe1ge+Ij/9XurmB976n95GzOaqWggbxRRprgTK2f1MqMhcXFzUHzvoUYFOTk4mfyWvtQ67zuPJTxOJWz9dZtJvsnGzKakfHJjzIwBzvvWRr+9+ilGK/Kan62q87mCZvc8Q1sKYGm8oiwWO9+x+ONVi4UCoZ68/dlA7HvGUiPnnR/WH1jrsOo/93U+PsvFf/2bqr4zffhZgRoGaVk20p3ne/BjbIvJzn1CNyvS3dvXIT1g/pkXzI/jzWmWhMFd+msuBJlaf97fffqs/Mwq9AlX57OzM+BT2EHaZbcoPqAfTvc64F+k0oGnDnA/Hare04Ednzf9Ozy+9zdljhfBAxrzYQHs+ffqEzFC2iuPsX7wemrWfOf748WNrdxBZ1ces5yVQz549IzKTrY9oPD4+7j9/G3oJO8+W5WcNuGuZ82FdCLuFmbF49+7d06dP37791bwJk794DX/89fv79+/Jra9eveKUVtoPAaNEof8zo0B5Asb673+qVdh9vn35CeHbweQIlFEdkiap8+TkhM3Nn3/++fnzZ5Ip8kMBB//3uR9++AELDjYfetl3fEyPbAGR3qY7g/CgxC9evCBucHp6Wj+P0P/5AxuG3SfyE8IjUWnRAnqDupg9SaY///zzhw8fyLCU2f18+vTJP68JP/74Y/8f2+w9g4B0f+wAyTFEhIs4EJxnz55xSrgoI0JoDw7Pnz8npDZv3YRdJ/ITwuNhYhVOSaCmTkB4/IaDvQ77IdKrRhzqkzdb7T0+KVB++/ZXIoASv3//XkHyqyCi5KdtCBLKjYWdkHvE+s4s7DiRnxAem8qtvNr78REyM0jQbTT2n7zZau/pn/SXX3558eJF/VgBx4n8yMXFBW7v3r2j3DcPu0zkJ4THpvLjH3/9fnp6qtjcBakWlepbHQg+L1uZ2s34+BP5qVoKxFMfj2HHifyE8NgMabXlRzImb/ejzsyDDRD6pHO1OgQmT+qpx4n8DEG5oU4phN0n8hPCFqgseXl5SSYd1WYGqurvadbxEGjhmcqJhVn5aZVzPMOOE/kJ4bExUQLl3377bfLf2PRMPnmD1sGB4uPfJT/hmyPyE8JjY8YcxKQx+bXKwk/eev+h8QFjBCI/e0PkJ4THhoxZcHp5eemPWU+oT978dr38DxYfP/KzN0R+Qnhsmo6McPrbb7/9+OOPo+Z0oEmk2ln/g8XHj/zsDZGfELaASdPjn3/+WX9Xpuenn36qX+MvhsaHio8f+dkbIj8hPDZmzEFMbvj48WP9+QPhtP9PBGx44BiHyM/eEPkJYQuYNAdhaYXffvtt8ucPSK+zn7zB0PhQ8fEjP3tD5CeEbWL29PM3tKfkx0/eBsFJer3BUER+9obITwjbpOnLkED7Pz/qnxm1SnQ+cIxD5GdviPyEsE0qe15dXZFSS37qjx2IPgeLEfA4kZ///sffW4QiQt8ekZ8Qtoyp87fffqs/P0p6zX8dPYuhmLv7aXFKoL4xIj8hbBPzJvAWz44H7fn++++fP39eL/Uwuh42FYpZ+ZHmFb4lIj8hbJMxd7bs+fnzZ7LqDz/80P+/NdJ8D5qKw8ePH43S5MM3aI7hmyHyE8KWqdTpnx+dfPImzfGgqThcXl6yOzw9Pb24uCi7NMfwzRD5CWHLVOrkRf7NmzcoEIWyS3M8aCoOHImPm56yS3MM3wyRnxC2yZg4G5x+/vz5/Px8PO/Q+WCpIExCob0YreEbIfIT9hyzkulJyrgL1P1IGSdoP2T6OFgGT3eB8YZuRlNjuJ/IT9h/ZtNBSxQ7kSm8k68yeh8qFQQLd6HzY3LXdbdyM98ckZ+w55gIOP7555+/NXYwNXBL9zP6hV2lZpff24VFiPyEvcWsbfqG9+/fP3/+/PXr15P/xaD5bo25N6Cx3d1YaOawc9QYffjwgdl1dnZWP7XY6sN9RH7CnmOCAFLDd999d3R0xCuq9jpunXaDX9BSVRbCbuIAvXnzxtn1+fPnMob7ifyEvYUU0PPzzz//8MMPx8fHJT+i807hXdXteQy7iaPzyy+/MLt++umnyM/iRH7C3jIk7w7lhwSx+/ITviGcQsjP999//+OPP0Z+FifyE/afpjJz5KeOIayMU8jdT+RnKSI/YW8pgZG5u5/mGMLqOIsiPysQ+Qn7TxOaqfyEsBZUmsjPCkR+wv7T1CfyEzaCSuN3P8yuyM/iRH7C/tPUJ/ITNoJKk93PCkR+wv7T1CfyEzaCSuPuJ/KzFJGfsP809Yn8hI2g0rj7yYdvSxH5CftPU5/IT9gIKk12PysQ+Qn7T1OfyE/YCCpNvvtZgchP2H+a+kR+wkZQaSI/KxD5CftPU5/IT9gIKk3kZwUiP2H/aeoT+QkbQaXxux9mV+RncSI/Yf9p6hP5CRtBpcnuZwUiP2H/aeoT+QkbQaVx9xP5WYrIT9h/mvpEfsJGUGnc/eTDt6WI/IT9p6lP5CdsBJUmu58ViPyE/aepT+QnbASVJt/9rEDkJ+w/TX0iP2EjqDSRnxWI/IT9p6lP5CdsBJUm8rMCkZ+w/zT1ifyEjaDS+N0PsyvysziRn7D/NPWJ/ISNoNJk97MCkZ+w/zT1ifyEjaDSuPuJ/CxF5CfsP019Ij9hI6g07n7y4dtSRH7C/tPUJ/ITNoJKk93PCkR+wv7T1CfyEzaCSpPvflYg8hP2n6Y+kZ+wEVSayM8KRH7C/tPUJ/ITNoJKE/lZgchP2H+a+kR+wkZQafzuh9kV+VmcyE/Yf5r6RH7CRlBpsvtZgchP2H+a+kR+wkZQadz9RH6WIvIT9p+mPpGfsBFUGnc/+fBtKSI/Yf9p6hP5CRtBpcnuZwUiP2H/aeoT+QkbQaXJdz8rEPkJ+09Tn6n8JEGEteBEivysQOQn7D+D+MyTH9EnhNVwCkV+ViDyE/afpjKRn7AR/vsff+fodz/MrsjP4kR+wv6jzCg/x8fH5osQ1sj5+Xl2P8sS+Qn7Ty8/R0dH7969+xDCWnn58mV2P8sS+Qn7Ty8/34WwMSI/SxH5CftPLz9ugEJYL0+fPo38LEvkJ+w/vfz8+OOPHz9+vAxhrZydneXXTpcl8hP2n15+jo+P//jr97EihDWRHz1YgchP2H96+fnpp5+ur685/e9//N1/1oawGv0PXkd+liLyE/Yf00TJT/7oTlgjKk1+7XQFIj9h/2nqM5WfJIiwFmr3E/lZlshP2H+a+syRH9Hn0PDBKwIeJ9xfG8Tg5MO3FYj8hP1nSKL58O1uzJVGaYIO4R6MkrsfZlfkZ3EiP2H/aYk08nMLY9IzVnSMFY3RFGYwONn9rMBy8mNMh8k4Q9VKGcXTQotVd1FuVWjm+ZRPuVkWT7WHA8RpEPnpMSaFRlKnv8VydXXlVxowemQd3YExWft3PxXwHqsWRP9q6HGnWHr3M3mGOu0Lli2IVSuzVA9ruWLYJ5wSkZ8JhsUykkN8Tk9PX7x48fz58+Pj47OzM4z1g+n61zEUBuRxfvSAbu152f7Lf/GGdaEqNPM6WUJ++vtgAf/555/aoeyTQqFlwlh3BzqUW2uxEPrDeH7DaA2HhxMg8jPBRYHAfPjwgbx5dHT05s0byufn50Tpu+++w0K5PPtCKIzJY+5+LNTpXZTbpPBVym1B/5VZ5cM35uvHjx9fvnzJ+9GnT580cuwLcH19jRsObOQ5HdrfdtMi2mcZq5eBVlyUFzfLduLxwDEaE8a6vcYnjfz0GBMKpEtk5vvvv0d7rAKMz549Q4HIpyxkLPqLPkEMiN/9MLvWKD/FxGJZ4z3o3KPR2q9ik56xYn0svfuR9+/fMzWfPHlC0CfbcwsYeW96+vQpPqgURiytm6WfCg0DCiwDlGwCRrJJVTH23BIXZdkojYW9hQmHEBknQOSnp8addcpaJjIsHE79VIPjq1evsCNCrr5a5jA0CzcYkGV3Py2QU8a6xmhqVPKE0bQYY5slW0nfsO9B+1pYXX6INRsgpulo6sCZePEy5Y+C4MzpxcUFE93JXW5CLcrBfoWR86iWUKYJWsIaoED64Io9LxrPG2Xhisoexv72xosdMGMg2mw+qMj4mJGfnhr3Dx8+sL7YALFOtQDTg9Wk/LBysVQGrIZBDIi7n8XlZy59K8pCmddrRod8eNeynZyKbjCeP4C+k7V0KCv+6IHyU9sajj04YHQXgmzYiknMyueViuHRTaglHaBVagkgG6cNCjRhAcDx8TFd0adHC7RivBn1k5OTsvufiXGHHOeq3cFScTBEvWW/8TEjPz3GhAJrxA8YPCU4rJ3Xr18jSBP5sQkM7cMNBoTM4+xa++6HMvJDooP+O4UFYeBY7DRkZBlrjvDHX7/fcxSmBAmWx5lk+HZ36+FBux+0hDsbq2/HCzu3jg+qUEayHhMaqZg4uwCoBXpmINEtpYvAffr0iVrXwASuglyxTgjWaJrBSxwyFQEHy6nM6Gi0dhiJGzfLRW+p8mwBKBej6cZB4wpUJw/BTiI/PcYExvO2DFl9bHp48+PIOu3lp/cMPUaGrLXU7mcI/TzG6tsDxIwly/Xa1tPcR0bTDVoYSl7fuUMy6uI4ATiSMSY9t0utgYXkZ/Z66AErmd0PZWbt7D6DTOfrAEdPOfIYT58+JY6UQWfRIsSaYOFmn7PQG/9oxWCwPFgtGDnVqM/Q6W20Hxo+uBEAypNx0Sj6yMRSp3ONMlsFffmr6Dy3ydBpYzy/7dzbZxmaRX5uY0zAMisayWHd+fkES48NEPm03/20dl8J9QFiQFxWi8sP4CPj+d0Q/P6VcRYycL2gj502tDCsjCOKwuvF4rBe2APwfr9N+fFiHLmJ4u3bX4k185VYc+QuOWJv9zb4Ey+ChZ1RweLcVaiwM9d1a+5f0I1+iDXxumo/Moexaqnqcwc7StzYHo3nDYy4UbCVhVZziEwiwHgRW15qmF5aYAjTDaPpNmPdDQ5TgWUsdehZjNYF0NlWTABueKIWVhVarLoLPSM/PcaEAquSxMR7IUuJ5WntH3/9zoru5UfnMIuRWVZ+hujfwIQk8ixJEuNcqGUgnj9/TmE0dZCNybQ40ENlS/FayA8wpp4uCImUWVGj36PDw1lUfpijyAZKyKQEdmTuNIkIQefhuVEmcd0cR8YDO8bWzQiBphOc2TmVXIG1FrCTI4jmREVoSwahOeGmW+BOcONCngKvbNwVt8c42bAYLnB4jA/fpjizU+0BAsXEgkmQmaNMaCLJcANhdA9aDkKZtnRoczunFUdmrZ6txUhr9HVG7xuF48WCoWSOMcSUvVYxut5cS+NcdIv89BgTYMhYp0Ch7ISIbdDc3U+YQLg4riw/lIk2a42Au+gm0DNHciYSUqc9rGXakgxZgM7tseube1B+lp32rDguSgbw1N76bh/OEvLD7OTJfXgehliTGjjFLuQdmwhV+Pi7QcTFhqQSJjpz+ujoiDSHWz1PFcgyjOJc+UF7WBJcl0JB3KvAjZFbuS6Xm3TO8QCpCDCNiBvBV37IwoTr9PSUgavgMIKEkTEypIwR/hRqZPFkddGEYbWWU/Yo+DAuRp6xY6BrGfTHnrL3WFWQ8rgTb5j5wN0yrGRDt8Vjm9utJpa+HPnpISAcCQVRJbyMmm/H2imT0Qx7Lz/Whh5jwsxkCTC7FpQfwEcok2AZC4JMYQJGqlhujMhoumEyKJzaYaGdhU9z3w4Xwe/gWeOsF+Wn722NLCQ/Mp433PSQZcbzBmqBonDfqDFLnWd2PHBmcnMkSRFBngc3NImYjl3fdG6Bfmg1Kz+Em+a+pjlORl8MPT2zZlhR1GK0reh2aNSDIyEEh2yuTjgQRJJUrgMjwhxlpLAbWJoQSfyx+66AnWXG6NADYKcHfHw1Y8i00wQ3R6RoF/kKo+sNWJgk3JJ9AgUuyrVYG9wnS123ohqKZY2Rnx4jw+g7mhwd9DoyQwh4yU9hw1AYECa8717L7n5ktN4NPTOBx5MOFqm5rhh7bGghFTOOpGu3ARxnwS6U/SkwJkAt/LG7hn2uhUXlhwIz0qmpPDA1kRNrrSIdoDE8KrXcOrW+O2NnBk9iJPbssQr0T6znyg/Zkz6NCHBRyoZVZ05ZS9wGZRuC5aHBoVKPz/QyiSMbWoQ1Y5af2GusmYgMIgHHkwE1ZzFGKIFDjKcTgEVo2nLP1EZgRZxvDC59cjnvvGAmcHV1lHubfLQ9dtER+ekhIByRHz8w6D9mIZLE3PnAuDPiDISvKbYKPcbElbWy/ABhZxqTwTgCr4NimQXFQqtTCwyTdi469nKDl/BaDDEsPu3xpEOO3Iytqs/18nX5mYW0wsp3/fP8Grk5EhARoVYl4L6Z0yqB+AxMZRzMLGWsMkdT3j3y4zrByCX86AB/Lo2RKk7rojY8ZFrwBgw4Um0Sf/v2V04x8o9akrhhrMUjNlFRCLVzEZjx+GOnYf9i4djhDCxILzr21dBtWRj3UiChXDAlyJLcErORZVk3KVzUZ4z89DgW9SEbEENmBa+9RJtsxamx5ZShrEVnwwlzjQeCz06InF0Lyk8xBLQ5My2ZogwHK67A4rG++ykjMDSsSmB0nOQTvERTn2PT6V1wdVI3b5+vX7/GmdFnNdmDXYGea2SJD9+AUx6SOcq8JAUQa9SeuOvW3L/A6xLjgYqQnqq5duJ1dnbGOFV6ssoCYbp/99PLD0lHi11l93MXRoApa+4my5SRgfBVl/CqJdoNKQm9MpGRB0YQC0ui3+LozyWUCvbB/QgKPowado6z3GXnKswH+pww0SFOcWP0WTncqi/sReSnx+GgwOgTkzGCbUwJIOuIGGph3FmtDI1N7sJuDxCffdndD7SwfYGlwYylOaGegJ01yPKkMJoazGRa8Q5RU3rs6waNs/LDMueUazHQrBRuHtlj3FmzQIFTJgDdjh01xsbrY4ndj5fnvuvNl0TDLVJQJ4VwmIZ4PKYyUWutB3hacpnNYZLsqkBD1sNX5QeIDpGqJAi9/IQeYzhXfph8RBUjc86x0+6RUWDuDgP23Xc014EIc8oYlfxwtApLyVVf65H1w1XaG9sSMGcY5XYLc+CJfCjLHrk6C4m8yeTkolw98jPBEQHiQ3AYUzDpYGTciR6RZ6rcEzE6qX4OEx/f3c9SH76NpXkMMb3tQM+M0XgyD9aaw2RbsYr1y1qgloFWb9hCsJaBxcgqppYyA31xcTEZ67GjG0brmlh698PNsYDJBcSa2ckpd89S97OvHoWKWp6WZ8OZPML8JhbYeWye9i75WWT3A1zdxISqaYn83IUxZCBM0MqPENUhc99+IRAdCLIOpU9EmNMS/tG7+ePAQFM7V36YJ9hLLSbcZV8Qmk964JT5xqzg6pGfWYYxuxnlKkBfLhhZQueRcSSXjRV3+B8IPvtq8sPRLQgZ7C5YREA+ZNER9tF6G+QEB9YdnvRZeK2SH2pZ+O/bHySD1vHwyz2kBT0L8gAOtVLG7hpa1sJC8uNRiBS3Sxoi1iYj4s46J0Nxx9wuDjweS51aljpuPLl6w0NS5fAUdltljqjOsrsfBkBL5OcujOH98lPqYsxBB4bPVrxDqE/3yA8oV738CGWGjAlDP6+XgenEfBhu8Q4mqsP2iyXH4/CY3IM/lRD56XE4HBfQCHVaRgoMOkuMeDKyhJRkR6ZjXfuDKq3Flx4ODZ99BfnRhxiyAFkRrE2mKFjwSLeEnW5ZTcQcY19rAfChFuitX8LtUoP8UDV32uPMYqEfaoFXCu4fkeN+uCLD7ScHeNbRwlpYbvfDvRIpYsEU5OZ4Zhy4XVIDZQrW8qgufgoMCc9mRAp1BezWMlj+6u4HjRm8u91P7b0iP3dhDJmp98gPBdVFZ4+gnABK4FAyspzeJT93iRPosCz008sPjyDjeYNTFhI5kflGruzfzQV75KfH4ahjMTkFZoXv1wSQxMT733n7U/QE3Djjw/Ew8dnRCWYgs2sp+QFmI9ObMJLuCk6BKnrzXdyXMDyt1Q3wERYmw2ShLmGBHliSVPEeRhP6pB9SJTCsrFNWDffPmHJUz0gFrHrGmmvZlVhuva6BJeSHMrfChOPmuG/lBzuPxHQ0IlTxAMZIf4ZElapOqCV54aaPRrGM3YiXg/aSH3c/GAmo8sP9YAEKZKLIT2HoqsAAmbWZdmU0L2PsF49QBuWHhiVai+x+mNP9EOsAzWU+o0fDU47OBzoE7sH7L5gPvtzxaKgOU6L1NGJXLEiOkZ9lIWh1dK3Vyx+LkTlQi3HyfnlQGB8SGrNr8d0P4HO/G/mTiU2fvF4TYbJfvWcX7lQYlL4ryx5pSNKmLeuIm3SbVbAoGESuwtJm58QKYkVzXT8wAAa6ehPta2EJ+eExkEcyDo/BnCPWyg+MrjPgiYpALXgs9eJcGbBHn/t3P738sAbwJF5YoJcfWx04LXhDHDwy4UzfColZgwlHDDEypv3HKUAZCDu1DErFWfmhVS8/9sagIDzUMlu0VD+g5+LQhAWjOvYwDRASEiJX4a6YG/YPtOK6NgctEPlZlooex1prZkBOffPzc+8W4IHyPxx8XjI7K2sp+RE8++lqGTsri3VEh/VuzUIg5dbsZdpjYSFwXYbGtWnb1tMAZfyRHzZPrBFWNwtfgSG7YjFFc/NDjzM4yix/HmrssTFWP5hF5YcC9+pHapzyGL38zMUm+BAgkxoQL3IHMUV7iMLo2oEPESFHEJT75QcIIpHlrjyFyM8sxsEj8tOy961fL2XGu18Bxos4Y8Rf8WAKKie01QLKD2Oh/LhmrGUIsDN8/UZqaNOo097Yo4NwSifkuHZrA3TL6wvTgPnD6OsjNpHRdNsY+VkKIubRAkFj0EtvTEycmhydAAWWw8HndffD7FpQfnQYgnXj2ZdZnmS2Envt9EzmpIoVypGFgA+jgKKQEvtsKa5HWtGP7/qzMI7UkpZZTXhyOcaX3ugTWDLUAk9XaQFs+3AW/dEDnsSIqLGUe/lpjrcoI09C1iBGlHkeEhMRNGeBzaFOORJHfHjmr8oP/aD8d8lPAENXBeZTS+PD1zyEl9FEVJh2RFKNqYRS+FpHkB0OcQsLzAFneUHwmRtufdrQDWCvwj3oU3BF74rJwBV5g2PoJ+KBGxfqrwXaLVQ58rMahvF++dGnLxwOPvIKux99OIpG5jxriuXmnJ/kQKtYCAgGK7cSaaFngYUlQ1cME0PmSmcEOSWHk5DphIzKKqMArBELPA4gWjSnCQ0ny3ktLCo/3DpPXhLKPc2VH8sahfCpJTwSz4mAlZ5Da3TLn1OaLLj78TYwegq9/NjqwDF6winxIWUQIpYKc444M5udxMwwc71vWJwiTkxQ95eTRaX80AnDwTRgTBksjowF/TOJ612pjgsy3GiDMndLhyw2F48OMjrd7tnTiRGaY+RnaYykxz/++h29YVU6W5QfTl3OlZvK/3DweUnWzK7F5adiJZSJIQmN3MUypMDM79edmE5ZdIZdJu9ePdQiVPTDCuIOS12AU94RKdAbQ4mDMsMl6NCeBYvG6nNdLCo/ZBOnnUx2P3OpZ+A5SVX4E9mJ9uDDPPZUMPKoKhaF3tkFQD/KD22JLBmQ26iEQhXXYvwoV0OPB0sFQZhzpGDmHBEmng4rdo7oDRMUvQEGiwXAkezvltfmFAA7kUdpCD5l1Ahnjkx0hls3/cVWizA2aDjpx4rGWNEYTR0aZ6uae+RnOQyacErQWFb18scp416nDtPovcxw7wE+7wryI57SivnpFt+8p/y49PpVgE6wchmLUqCxoxvKQoGGTHjyJH0yUux7FBizLg4U6A0RGjqageb8cw9EobpdF0t899OX58pPOUhrMegBQSRVlWxULU/OmDlaPdgJ2UR+AAkkdXJR7QwMWZIMSHAxEkHsGBmYiubYsqHlAKlnrwIxZwTrfaKFZ8BT7Ew4Qs2xRmf0uPEh9SDzjBEBZ7zYJDGUHB0aGL1v0PhVRu8byjiZ+pZnsUqfHmsjP0th0ISlx+D6UugCZGKQK33/6N9OxB4OBJ93ZfkhesSWMJLH/GBTeDVkrtYCZAmwMNEeCiRSXx9ZpLXihA49WsCTW+q7nUBz+mFpMMQ0ofNaa4VLu7ePjR/MovLTg1H5IV5lKU/LQOBwIEzKL4XJXpLQlMaQEQglUSDlESwnej+tLRgdyuyEyIDcgymPAHEVN62c6iPV1tNDox6/Cs38hd4yWytD4xu0KD9kn35PXJTbCti2XWqkjCtjP5GfFTDy5CYSH6seWGIsTKCgZXadDi0PBp+XFMRLdgnGV4Ogg69uvC4TzMpaFtz94EDwqcWHjRHR5pRaLLx8+0mPr4mTpAdYeEVQWjByqr3AqPzctfsRFvvisroUX5efCV6eh2clo9ic1lPpAKQknpk7JkD4eN9Ek2DxJC5+IoKF2NkQI00YPFSKhgwkbVUmOxdOdebVwI/dtAAXZbRoRSi9RDWphgEMSzFabxitt+mrLE/kZzKzsXjcEbyryM9qLDKUi/jsKz77arsf0iD+ykMZgTLpkd7IZhRYbhQmr3qcYicNshLxJCXiw1sCvdkDWoWxz6IW+lOcTdRucXrYDwCax3MhUV7dVutiRfnhwUp+tAOr+uLiQhXheYhaHy+igNgQKb9vADd9VFUn+GBRgZB0kpp5zVrgFOVDZmhLaBw2jNZyA9wS48Go1CQo9DlAfHaDINplNHWMFR1lr4LyMzspdZjF2tV4YHPwHiI/S2HQxpO7R1ZGp3UM1jeHj+zuZ3H5gUncCk5JpKRQlhhHclr/gwajU3MjAZInmdJMbLIiM5z06PTmNqrh2KA1qaNQJpnTljunnx6MwmL3Q79qSGEtLPqjB15VOFV+zs7OuCeelhyEWnKKtLjdMyv1DSlj5GGMKVJED4wZ9l5jKNB5NReizAYfvSEQ9MAliLJVre8RTumKe+AS9F+fCdQxrMwkgAwBQb7rw7eHUONVlHFl7CfyswKGDsbzxsTiqXiq/UDwed39MLsWlx8YQtboTymQ33i3I9fNTXSFVSQ6cqa7HND+qf1/dL1m3ANt8edaBXpDc1Y3nfuW3/fj6cNZbvdT11Z+2N/weNyiezQGgPvu13bpikfgYZAHN4yAnOhT6AaUCQoXYkeJjJfwoHOzMa1TClyitll950OnYXnG8DWIJ+FlRNihOoIEmYnLoOswttkxvLfIT9gETvtldz9tSg7UaRWAhUYuZa31xir3Rws9Gmc1oyh7Hb9KazcymtbBEvLjhb0DtJEdDOuZMLGY0Yl6WtAHxvNGWf5o/5UvCoG8TxSiBzsDySUQOfIdTUhz2Ce9WbYAllFE5gGXMNE03y8+YSkMnUdGmVHgVYNB4Z3AI9v/yZvXrjEM/4z8eKseQ1gZp5C7n6U+fLuLvi3lr3alTzFa59E79IWvoufaWfG7HxYwaajEWbxRGM8bvaUvu92jB41SPkKy40LokE1krGuMpg7tNEGBJntPHcKyGDpjCAwKR6sES/8OMVp3CW8su5+wCZzza5GfamWh74SyWK6j9GUZXG+Mc2s9isbHZ7ndTzGa7jVaKIvHQjuM5w1Py9jqByiT4Poc11M+hRYZTbeNYSkWiZ4+uxnnYfjn7X5CeDi+465r92OfFrTAbLmOfeEuyv8uykfKaNlCYe1aWHr3I9yEYjCeL8/cHuqUQo9GqHJvnKU1GqeFnh7DA2lxnc/osZN4h8rP8fGxEyOENfL27a9rkZ+DYkX52Sgmi/HkNmW/yyGsHUM9DEnHXZahwe7hHSo/R0dH5+fn70NYK/5EVeRnKVb80YMJOnyV0ftu9NEZNPaU0ULzusWktj+Gg2WYEzfy8137S6kUOIawFpxOTK1lf/D6wNnF3U8I66WXH2ADFMIaYdPztP0h+cjPUkR+wv7Tyw+Z4mP72/IhrJGz9tf38+HbUkR+wv7Ty8/x8XH/O2ohrIXz83NfbrYoP160TfYBjbtM5CfsP65G5Sc/eB3WS/3g9XZ3P94MjOffApGfsP+4LCfyE8JaMOOv8a8ePBDk8Pr62hvY4m0sQuQn7D8sQoj8hE1git+6/LQ5PvxRkjdv3pycnHz8+FHLWL2TRH7C/uM6jPyETWCK37r8+BngxcWFP4N3dnbmd5yPfyeLE/kJ+88gPpGfsBnM7373w+zarvx8aP8PN/Lz+vXryE8I22cQn8hP2Azm91348I3jx48f3f1EfkLYCViBEPkJm8D87u5n6x++sfuJ/ISwQwziE/kJm8H87u5nix++ecXITwi7BSsQIj9hE5jfd2T3kw/fQtgtBvGJ/ITNYH7fke9+svsJYbdgBULkJ2wC8/vW5Se7nxB2kUF8Ij9hM5jfs/tZgchP2H9YgRD5CZvA/O53P8yu7H4WJ/IT9p9BfCI/YTOY37P7WYHIT9h/WIEQ+QmbwPzu7iff/SxF5CfsP4P4RH7CZjC/u/vZ4odvXjG7nxB2C1YgRH7CJjC/Z/ezApGfsP8M4nPA8mMCMgh3oSfUqYW5fLX2oPCR893PCkR+wv7DCoRD3v1UDqqCzLVT7k9n0QHG85nmY+kw8Hm3Lj/Z/YSwi7ACIR++VSa6vr6+vLy0XMYJROni4sJYtfh9cauyPruf5jaKD57dzwpEfsL+wwqEfPgmCMbx8TGJ8s2bN7wyayxPy+jTixcvjo6OXr58eXV1pb3QmTx7enqKz9nZGSEd63Y42W0IH9nvfphd2f0sTuQn7D9DUjxs+RHKPPvJyQnpCZ48eUK2KgcLHElkKJM+gLr0nQCnpLZXr17pQFTPz897H8qHg8+b3c8KRH7C/sMKhMgPZZ6dLYuygfywE9KhOY4F5Idkqg8QN6sKTkltyJIOkR+O7n7y3c9SRH7C/jNkxHz4dsPl5SUKRBzImKNpJkNdX1+/fPmSZMoWh3LvU+Wrq6vnz5/jQ2AJqXbR80Dwed39bPHDN6+Y3U8IuwUrEA5WfmCSg1AUsyQYHKhTCyQvhMpYaWxeX8BCLT6V5gpODwefN7ufFYj8hP1nyIj58O2G0doYTY2JxVMYz2/oLTrAeH7DaD0MfF53P/nuZykiP2H/YQVCPnzr4WXZQjmIRikfmXWAiY/oeSD4vFuXn+x+QthFhox42B++FSYjjzJr6fmq/z1VB4LPm93PCkR+wv7DCoTIj5iPjEnP3Nqy9JS9L0BVHRQ+st/9MLuy+1mcyE/Yf1iBEPkR85ExgbJIWaQsPWXvC1BVB4WPnN3PCkR+wv7DCoTIT9gE5nd3P/nuZykiP2H/GcQn8hM2g/nd3c8WP3zzitn9hLBbsAIh8hM2gfk9u58ViPyE/WcQn8hP2Azm93z3swKRn7D/sAIh8hM2gfl96/KT3U8Iu8ggPjPy47L0GMLKOIWy+1mByE/Yf1iBMCs/ITwctx357mcFIj9h/2lZYpSf4+NjF2oIa+Tt21+z+1mWyE/YfwbxuZGfZ8+eUeBdNYQ1cnp6mr96sCyRn7D/NPUZ5YeVGcKG2KL8eMXsfkLYLQbxuZEfIEcch7BW2FVvV36y+wlhF2nqM8rPjz/+eHl5eXV1RZoQyiGsjFOoZhenTjnn3qPhFbP7CWG3GMSn+9EDl2UIa+T8/Hy78pPdTwi7SFOfUX7yg9dhvZj3f9n2D157xex+QtgthiQxT36sDeEhOJGQn+x+liXyE/YfViBM5CeEtWB+37r8eMXsfkLYLViBEPmZYGIyONKfNpfx1EIdQ48x8cO3/OTbUkR+wv7DCoTIT49ZaXKcZXC9cQhzMTjZ/axA5CfsP6xAiPxMqMRkfCxPqCoLYlUQA7L1Hz3I7ieEXWRImZGf2xgTC1qur6/Joa9uoIzFKp1FSyiMibufLX745hWz+wlht2AFQuSnx5gIL87v3r3zt/eJEpycnPAuz+nbt7/iMPG3hyAGJLufFYj8hP1nSJmRn9sYE+GV+cmTJ6StT58+cUoiu7y8RHvIYs+ePaMWf4w6gz0EMSDufvLdz1JEfsL+wwqEyE+PMaFwfX3NXoeEhd5YJe/fv+d1HvvLly851V90CGJAti4/2f2EsIsMKTPycxtjQoF0eXR0RMIiMrXFwc4GiHD18jM0CzMYmex+ViDyE/YfViBEfnqMCZCk2OicnZ1x5NRacigWslgvP4U+QQyI3/0wu7L7WZzIT9h/hpQZ+bmNWckjmLzg4uICvTltZPezCEYmu58ViPyE/YcVCJGfHmMiWi4vL1+9enVyckKgyGLv3r2L/CyCkXH3k+9+liLyE/YfViBEfnqMCVAmT7158+bo6AjtQXhMZLPf/cxSdgoHi4/v7meLH755xex+QtgtWIEQ+ekxJqD2EBnk5+rqaqz+5z8/ffo0kR/tPWWcW3sg+OzZ/axA5CfsP6xAiPz0GBMKJKwnT56QOolPb5+VH+0T7rIfDj5+vvtZgchP2H9YgRD56amsdH5+TrZCgd6+/ZVTXqKtmvuD1xxx0KcsQvkw8dm3Lj/Z/YSwiwzZMfJzm8pKyg+Rqd2Pxzdv3vS/dlpVBadaqnCY+OzZ/axA5CfsP6xAiPz0GBMK79+/J1vBs2fPKGMhgSI5R0dHhAv7ixcvsLx79450xiu2PxRX3xLZD3h6gPjsfvfD7MruZ3EiP2H/GbJj5GcGE1P90R0gc1HmFf7Vq1f+PALGJ0+eHB8fo0yXl5enp6fIEm74sG2qT+HAPg8Qnz27nxWI/IT9hxUIkZ8eYwKU3e6w+0FpUBeEhxAhLYgQFiKG0rDdwY4FHXr79lfyLGmOd22a+959sBhDdz9blJ/sfkLYRYYsG/m5jTERTokJm5uLiwuzp2D89OmTn7NRptaMBv5SKjmXcuSHo7ufLX745hWz+wlht2AFQuRngmGR0XTDxNifWmAP1Kfaqj1AfPbsflYg8hP2nyE7Rn5uY1aq41cpNwrX19fsftgt9W0pHyY+e777WYHIT9h/WIEQ+ZlgYvI4l6oawtcgo5HgTk5Ojo6OUKC+Ss8DxGffuvxk9xPCLjJkx8jPPMxNxgfKKJZ7CxmN9EpqI5L9f4Q6NDtUCAvH7H5WIPIT9h9WIER+lsXMZfT6Anpzfn5OMJ8/fz747XaO2zQ+u9/99N+HtcrHI7ufEHYRViBEfpbCoM2FWmJ4fHxMMMvZwgHis2f3swKRn7D/sAIh8rMUBq0YrTdv2cTwxYsXp6enlCcOh4bP7u4n3/0sReQn7D9Ddoz8LI9xA8pkN9OZXF5ePn/+3D/So8PB4uO7+9nih29eMbufEHYLViBEfpbCoAmn6M3x8fHLly8vLi4+ffpEduv/6I5NDhMfP7ufFYj8hP1nSJCRnyUxaAVBe/PmzdnZ2du3v/r33yq7ia0OEJ893/2sQOQn7D+sQIj8LIVBKzT+8dfv19fXHD0d6xpaDhCffevyk91PCLvIkB0jP8tj5jJ6oFFGU8NT7QeIz57dzwpEfsL+wwqEyM9SmLY8Wpil7PocJj6+3/0wu7L7WZzIT9h/hgQZ+VkeM5fRA409ZZxbeyD47Nn9rEDkJ+w/rECI/DwQE5nBlDIeMkbA3U+++1mKyE/Yf1iBEPkJm8D87u5nix++ecXsfkLYLViBEPkJm8D8nt3PCkR+wv4ziM+M/GgM4YGY9/PdzwpEfsL+MySJG/k5Pj52WYawRvwT4Nn9LEXkJ+w/TX1G+Xn27BmFNyGsldPT0+1++OYVs/sJYbcYxOdGfliZpAkKUIUQVsZZxBG2+KMH2f2EsIs09RnlB3hFJU2EsC6Oj4/ZVZP0KWf3sziRn7D/DOLT/ejB5eXlVQhrxdmV736WIvIT9p+mPvnRg7BBtv6jB14xu58QdotBfLrdT37wOqyR+sHr7/N7P0sS+Qn7T8sSU/kJYS2Y3/N7PysQ+Qn7DysQIj9hE5jfty4/2f2EsIsM4hP5CZvB/J7dzwpEfsL+wwqEyE+PWcnI3MPEpxqGwoD43Q+zK7ufxYn8hP2HFQiRnwmVmIyP5Ql32UNhiLL7WYHIT9h/WIEQ+ekxJqLl4uLi1atXLxtnZ2ckMqv06dE/iAFx95PvfpYi8hP2nyFlRn5uY0yA8vX1NZJzdHT04sUL0igi9Kzx/Pnzy8vL3llaB2HEgLj72eKHb14xu58QdgtWIER+JpiY0B5khjd3tIfI8BLN8e3bX7GQxU5PT8liBrBvFQoDkt3PCkR+wv7DCoTIT48xofD+/Xvy5pMnT87Pz7VzJEQID1mMPZAbILKbTYDTUBiQfPezApGfsP+wAiHy01NZCdUhWxEZEiinvkRzJH8pP58+fSp7tQqFMdm6/GT3E8IuwgqEyE+PMaFwdXXl/1hzfX1dVbxEEyjl5+LiQmPVWghiQLL7WYHIT9h/WIEQ+ekxJkDZD9YssBk6OTk5PT2dyE92P3dhTPzuh6Bl97M4kZ+w/7ACIfIzwbCMJ//857t37xQeCpeXl69evZq7+wkTjEx2PysQ+Qn7DysQIj89xgQoIzYIz9HRESEye/IqPZEfX67DLMbQ3U+++1mKyE/Yf4YsG/m5jTGhQLokaZI60ZvSGELEKca53/1YtgCWW+Uh4rO7+9nih29eMbufEHYLViBEfnrMSn/89bu7HLY+/uiBCkSIXr58OSs/HifMNR4OPn52PysQ+Qn7DysQIj89ZqWrq6vj42OyFWExW5nFKJ+dnSk/9YPXhrEKRfV2mPjs+e5nBSI/Yf9hBULkp8eshPwQEHc/lK0CyicnJ8gPdn/tFGxStKB+YbQeHj771uUnu58QdpEhO0Z+bmNWIhTPnz8nWxGZ09PT6+trstjbt7+yJTKLsft5//79xcUFr9X4I0vv3r1jP2SyM7AydHqQ+OzZ/axA5CfsP6xAiPz0GBMgYREWEhaw1wFC9ObNm5cvX2JhA0Q6o8weCFmi9smTJ1jQqsqzYrcHiM/udz+ELrufxYn8hP1nyI6RnxlMTKQtNjRsd9AVYDPEXgcjekOsyGUvXrwgpWLE5/z8HLk6OTkhwXHEbmzt8DDx8bP7WYHIT9h/WIEQ+ekxJuDp9fU1ekPqrOCgQFdXV1jIYpTfv3+PSlmFESkimBj11H6YGEN3P/nuZykiP2H/GbJs5Oc2xqQYrY1ZC4kMKSqZofDq1SuCqSBFfji6+9nih29eMbufEHYLViBEfiaYmAxOz1wjVBP05uzsjDTnz2RrPFh8/Ox+ViDyE/YfViBEfnrMSh4nzDXCEMRWdX19fdIgwWkEfQ4Qnz3f/axA5CfsP6xAiPxMMDEZnJ77jRTev3//7NkzMl3vSfkw8dm3Lj/Z/YSwiwzZMfKzPJW5DCBQJr0+f/6cbMspKU876HmA+OzZ/axA5CfsP6xAiPwshUHrwUhGI68hP/WxWzlbOEB8dr/7YXZl97M4kZ+w/7ACIfKzFAatwEKCOz8/f/XqVf2/qGDW0+Ew8dmz+1mByE/Yf1iBEPlZCoMmnCIz7969e/nyZWnP5eXlmzdv/Etx+hwmPru7n3z3sxSRn7D/sAIh8rMUBg0ok9pIr/5ZBDKsf5vn2bNnqJGfwtnkMPHx3f1s8cM3r5jdTwi7BSsQIj9LYdCAMhEjvb569ers7AzJocCRBOcfwy63w8Rn38rux6sM0W8/BkL5rt2Px10j8hP2n7Y8Iz/LYdCE1EYum2C+Gz12Mrs9Dj67u5/H//BtcqF+9+MA7TKRn7D/DNkx8rM8pjajp2WCVTKaDg+ffSvy0wI/cH5+/uLFi6urq9r9vHnzhr0pm1QEqV4UbLU7RH7C/uMSjfwshUFbnLHZ4eGzb0t+OLITZVYjOYgN8vPs2TPLx8fH33///cnJiRN+B8co8hP2HxYeRH4ewg4mrx3ByPjdD7Pr8Xc/bG5OT0+RHKY3YvPkyRPuxCO8evUKfdLZVrtD5CfsP67SyM+ymLCMXn9axh6Mh4nPvt3vftz0qDeAFFnAeHl5OQzPTg5Q5CfsPy6/ifxoDOGB+M2Ku59tffcDZ2dnTG+Ep+B+3r79lSo9bbJTRH7C/tOW5yg/x8fH2f2EtXN+fr6t3Y/Xurq6Ojo6KuHhyJuWvyNcPrtG5CfsPy4/5Yclyivhhw8f3t9Q5RRSWKEAlF++fPn4u5/CyznDlR8K7969axN/QLddI/IT9h9XoIuTldl+eT+EdWLef+QfPRCnN/zx1+8nJyfD9qf95NvO/sBbEfkJ+4+LM/IT1s7Tp08tOLW2Ij/iFS8vL9mB9bfx+HeyOJGfsP+4CJUfFidL9CqEtfL69evtfvgmlK8blnecyE/Yf1yZys/x8bG/BhHCGtnWjx4Uc6/4+LexFJGfsP8M4nMjP/WD1yGsBVP8tn7vZy7bvfriRH7C/jOIT+QnbAZz/VZ+7+dbJ/IT9p+mPpGfsBFUGnc/W/zRg2+RJeTHgA7r+A7KpwrN/IWyr0DfQxVazU4zudU6FY1h0xjtyE/YBC7k7H5WYLndz7ZiWtedLew+3irHKjTzQBnDRjHOkZ+wCVzCO/Xdz7fCcruf+9GnnD32lH0F+h6q0Gp2mrrVu9AtbBRDHfkJm8BVHPlZgdXlZ7TeYbeg5R7Kp3e+qyxYJg6e9kao06p9fLyBrzJ6r0Q1tyuYGD1WoZkPDiMQ+ZngfDA491CeYS4GZ+3yU5HvsWo1qodJP2WUsjwCK37389//+Lu/bFX/kwSUT18omsvAeH6b3j7r09oNRq77x1+/l9FjFZp5ZHL6mPT3w7FolQPj+Q2jdU1M+lx7/98ixiTyM0umx8Mxhn73w+xa4+6nOqFg2QJYbpWrU/30XZWxjptjld0PZWTg/Pz82bNn/gFHjVVrAZ9Pnz6dnZ2x7C8uLoYuGtZKnU7sRW+nTOKgQ6BsVV9oXgN9uWiOj8rkukTjzZs3NTsLa1ejmtsVTIweq9DMB4cRiPxMcD4YnEWwVZhgZDa6+9ECfXlZqqu+kyq3yoHeuGmW/tGDAvn57rvvjo+PkZbR1NCNIxuj169fMyTAykeNWPblcA/3ONDJhw8f0Dw6HE3zoAex3Fsegbqohevr6/fv3798+fLp06cINmWMPMjg+mC8yix31Wo/NHz2yE+PMSnmTkirLGgJsxgcdz/rlZ+CXFoDpMWClq9S/sXE7im0yluMFZvh6/Iz3kWjP/WPTPA6T1y09LWUCRnbFHw4suBxe/fu3YsXL0jHk24L7Lh9NTuYR9h1jee38ULcmKdj1xuOY4/X8sizoDenp6fcMGqNAik/7Y5GhjbLMzburtUbi4nd051lvMvbjHUPwH4iPz3GpMBCWHi3Y+0wRT9+/Og61dNjoT2IAXH3s/iHbzoM0ZxhYueUPl+9ekXKdeqOFQtQzn2r2TK5lEEnY2sUqzhujuV2P+CdAbF48uSJWZ7TqqpTZIDdDz6VcK+urk5OThghLM13Cm5MejYKdEuBcMyiupDKUTLKo/UGhscbYypwdRzGrjccxx6v5UW5AW6JB3/+/Dn3zO6HFU4t9ua7CvY8KfPsRqyMBfaatUObb42H33YLQ+TnFsYEKDNtSEDHDZYVi5T3pKOjI1KqIlSeYRYjs8Lup3wmzp5yFMokEIbD/zl74lCnfWFCc/xSVad1JDuRMxn6WXkbGmyM5XY/PbX7oTy63nZmTrPvUX604EDyJQszvyfOgpHnZ69AK9IEbnNhjHFgMMbzDtYPK4cbg/6TLjt/HLxWe6AvF0UL3f0oP33ValT/KhmSzPsR09SqsjNfkfNPnz6VfZdpzzRFuw6rYT+RnwlGlXXqayLrjvmD3nDEQjIlXEyeci60BDEgy373o8MQza+BG4OC/LDA575fDt01xvN5UEsn3Js9lLNlP57hFcSkob1qN8fSH74V5DvumKBTNsf1L0rAkyg/eGL3wfBh/fO0lGF07Z625IdWdHtxcVHHHuI4llptOWjnKPRm/9Au+NjUdQnFuuSnPc0U3l9Q3/7lxYBzXSYu8dE+tN9hvHPpT61dGTuJ/PQYEwofP34kLLWWBQXiTQ4FYvKwoLAwnWwC+gQxICvIz+IwYxmI2S8UhFrSL/uBWXGqUwqMKT3gSQrqZQZIHbysTxK45Va/KRaVHwrcMROR92hyGUekmHBzZIfBrU9+6BBq94OQaLGKh2SoyAW9NggOGI2FXRWjx73h4A6NYI9N7m+4XuqKopFA9fLj8Eu5WSj6qkJLYT8Mh2+vJlaM2plwDAoT12DWRWk4KUjr8ktVX7Yg/WnzGqiydujLC2IPxWjteq6jTCx1OsHayE9PBYq05UbH7OYk4egLEyvRrTMWwwhDs3CDAVlWfqDFcnAjazE5SREMwVyoZYGTGMfz27x48YJacgv3MHd7JIwgM5/h5ibJFb5V6MyrBsaSn7Jb2BwLfffjfXDrfi7MrXPkdn05ssyqBpWmZrCbehIuxoJTPx/Dvx8qj8oPDpNRHFreEQ4iTp+oOrdBQ0bR3w2ySaHzI1PX/erupywWegfKMp7fWCwQKGYPnTM6tbMGx2v2tcDavlCUpQpVlslpMevZc0/VhOqHo0uLReJ0KvQByxplrhEG78jPbYwJBSLsou7zEZmovq106+woVKtQGBBS/2Sttco7aYEcMYORPNmJzsVXfJbzeD4DrwgcGcF75AeoYhxxNlXW1yKckkNKfmC4xc2z0O6nCtwfL9RAiJmyLGYEhlPsLGmP7eYHKJNz8UEYGBv8hUe1wIzvh8ojragiNC4GThkVLtG6/AIWYoeS44wEInKMPTBIdMtI0LYWDMdtUVcv+fHrKO4fmWTIWeQ84OykaY0GN0Kn6jOzKfQ5glb0Rjx5cDrHAWdigpHZTBOCbwZhmLBzIWeYkeFIoBgdIsadAD79nVSBYeLSiIG13IO31N88cLf0gJGueLqazdYuiFek8Pbtr4QL6I3n4h68bdHtLkanGzRGfiYYFiAgFRPizNgxuEybXn5w0yFMMDJMUWYXi7HPafczhL5BmbnNv/H8NtQyOmQ5JvBcn9bZwHje6E8nZWAJu52iZ/qkc5KAc6B8HoFFdz+TeyLjsIwJN+lmNDWYqSQpNyLOYHxIH6QkEhapirSIzzDZG5No0gNGAkFDR5EUxqmJlehTJlKAA+EDE4rJkZjiD3Qy9ngT+uHmtkFdmiXtYubVgwjwCNw5FnAe1CKvJuRfwmiKJ270YDpGS3hAHAgRqkZ46cHOjTOeQKxwtn/K2o0qIBU40z9xo3PG0QHl6J0AkUTJcKNnFI7mXJcr0q2CZ+euCoJPW06toiuuSA/0U0/0VXx8YY7Rg1ehN+6B/rkHbsnHL8YGt5mtivz0jEHphobBIry+OhBkVjGRJ+zOB4ZYt75JAANCgmLmLy4/5UDhq84qBEt1PG/QiiHjuqzl0dRht0Bb02xvp0B64R+rjOXAKLPW6kOjcoOybIKF5Ee8G6BMrjG1kZt8+cXOQ5olmbiKAXmTfESZJwTb9mjpj7iRi+ncUeSU1EnW4EL2TJjAd3nHGx/uoZaH0FvfrcfHp65L1uZuGWYegQwIhIVHqzxO2WTtg/CAygZGLTwjj0xkiAah4KmxcyQ7EAR6ICw4A0agQHPsXAvN0+5gMV8JMv04/7Bwn9Tqz0T3436GgCvSfLi/dodcFxhlqrgcPWAnYeFWg86OisGiikcj41f/HL8KbgWnXIWIeXWhT8LCHXobPJSeYkOocm+P/EwwLBQICO80RJUhZvicJ0TYGVsvRq1RmGJk3P0wuxaUH9CHowUmM6ueRcRxAp2z8Bmd8fwGFhrLgYtOXl77o2kZZ1Z92QG7iYXrMsoMN4NuFcZicrpeVpQfnsfUw8OTd3wMqngA5i5o4YFxI9MN7W96oICbs7y3A2WMbpsYRSycEnTXAGUaClU4sDwIvZ1A62OKdh0en7o0o0u4iAbJ2vd3QsSR2aaQU8UU0ZmH5ZF5OuSB0/Yc44NUP+QLg0zGL/khMrpxpKyczC4JO6GWG9BuFYPCdakiE9Et/dMJY+3NcJ/coU2AAs/izTBkKJZXB8adi9pPf+k6LoJPx8JjjtHVBHWIG+Mp8PFu8S/GXjoiPxOICUeyj68LHImMRl6EnSQuPSyT8IbCiDEJmZPL7n44CmWWD+uLhMDLXEEG4Ihd+emNVaCW+T921Jj0zLDiwyJlTN0qjXWtlhumc67rEGu0FiaWOl0LS8sPBcJUSRDtIQdNEl/Bg+HGgu/tlMm/ijb5jmce+m1QS6QIE+FwFDlVfmazmFGz8wnU6taj8ZGp69Z3P0wXjR55fISESDJ3Wf+EEbvh5dF86goR5VIIju5RSn5MH/pzNJL2g0/ZaWUPzEj7tHPAgQGlCnp5Q0WwMMr2rzMFEzpVfVccQeXjQl667MvCPXBdgjPcU1MdCz3cg4uT2/A1pS5HoYj89BAQjoSXvENU+5ECQsQk1F5v1kOzMIORcfezlPzMwvKfC8PBGvSzhB5X6Ni4XXEs3QY7zrxHcnv0Q/qlYVUxviyf2TfdCRjXzhLf/QinxKJee1nw7oT6PZBQdlunQlBLQ56ccTKdAa2IS7Wy89ndD9GpBIrRC/GCRvNJFQU6xEJDykOnN3D6+NR1612ScGkHH4S7VT9MAbyelJz0wdGZWoMPJI6+eckPzhwNHfZexjiiK6QVhqy/E+GUKW6K5yq+KDE7GS+Ms4PFDdAPzgxrbweVz3G0qo7APXP1RUBuuaW5G6Ae75mb8bWGaNOWu213NBL56SEgHFmhDDTRYwo5uE4SyjVj+92PrVo4p2A/THz2FeTHY49VsxB8ena9z4UpTS3LinJ1ZUGa16g0rJE+IbBSsLDQKI/eHROjpxzXwtflpy7Wrj6UeUgmJbOWcBN0npwlzQPwGL0nz0b+IifizFQmHwGtsHDK0/qFhM5CW5NmiYqnZrHR6QZWCJnU646mdlFuiebKoUZvabizR6euW7sfo9TfG2XullonAancZDqRk3I2L+CjPhEZ5affnXCkrAaU/AAB18jY9ZoB9Mxp7a5wcEYqP1i4yeofKJT8sKXj1CoLjBp3SFe1JOoI3AMPuzgGZHHwpxW3TdidY1w08tNjTFihBIRwMYX6b54JEcPtCCo/2IVy6DEmq+1+KJAQWEc051V+LiwucxprajTNwNpnwnN1PxGx81mo4lqVXV3yNC/L6HcDFhnPbxitD2bp3Q93zAOwsH0npYyRB2Cmmp6YrFRRZlojNjwYo0KiJNnxhOQC8D1L7FY4pZZWxJECp3RI0OmB+CI2ZJOCLIybnWvBwWEgAdmEux27Xl/IlqKuW++SJT8cq5abp5Y7Z/YYTE558Er3dQTCSy3w4PRDVImDp2YQOzd02BkI5xawNjjFSHxKfqyylWLGDeDgrfbyUxnKVvfIjyLne0PZq5ZbpSHPuyAG5C6onTjQOY/JBHj79lfiMNxudj+3cSxYZfU6wvIxUAwZoWPlYld+iFilJ+YJpy5h/WXo9CDx2VEIJiGza1n5MWHSnEXkdzkc6x+L1JzGGmQBkhzKofzxsUAtw+RCvgtfWPsMTPJhyftRh3dV4EYtecA+sdRxLSy0+yk4Zea5g+FpCQoJCCPPwyRWYBQPsi1VnKpSZrqCTnizHjvtoIrBYCWQNz3FkzI9MAYT+aFnjK4QyqO1iRCXpsCI9otkuPCjU9flfrhVlrQ5XfuklsckLMwkykCQJ4tcZx62dyD4yg/RIFz6c0QqzCy1JMC3XYwEueRHf4/VGw4PkR+V7y754T65k0UgPzKORIbe7ofFz81w8wTTjMndsmyGe20QNxwiP0JAPBLeih4zillEDCk4goaUoWdmEkyOOtDK5kXr9RDx2QmIseon/D20mA0QVVbxXbAGWUTEnMgzgel8rOhgPnOs3qrgv/LpYVmxuOiNI1mCRUH/pGsWDm/AlLkuMO48FFmLXFE9w/gMD2Zp+eHOuBtukRvizkhA2LkzHslHNWWw8injzyMxs5nNfVeoNAkFYw2V2D+TXn+gW5YBA0A/9MmpPXvUmfBpoZZCRbyPF9jhI1PXvX/3g2Ray2MSHMrAc7kFbLc/oHPJD5MDI02Y9JwSNCKAg50bOuy9/FBQfhgUdA6LPYOtcLA3RxlLLz/2rz+Fe+RH5fOJtFtVDgvCONIVd0tv0peBU67Cs7P+uVUi5oMUXhoiPz3GhALRQLAVeIPJxMDIAtfI6DO+DARGVpzvfASTtv0Sa70eIj4704/oLS4/0MJ2nxtDwHD4WoknBbNHgZ3Egg9Jo1KKfbLuyCoMEzfGOi2w9AWOrHSWGG5AP1LbKY6USQWT/tfCch++MQUJAfsbCtxZyQ+MrjOQDpi+YCYFIsgDM4NJBP0LOFDmOakibzbfMYfiX1lMuwX6pBM6R/M0FpNTGJo9OnXde3Y/BJPM7lMzxgo8pyz+ik8dgRlDLcFXP0p+nKZYnCiU1QBCVNGjyvQBvZxUq5IfErpDtvbdz9B4MXAmbhO9ERMlV2EeMvrcmPd/T//ELfJTjEFpQWYGMkMYRCYnwTSSGFmMWErRObrwiT9D33cCnB4mPju529m1oPy0mM2HWkJNh8xw1KWmKzFn8boqcSA5sFS5KMuTtTnJgY4pN4M/0Mlc6MSkxAryDZ4jbYWr2FsVpN3OGlj0Rw888oQ8qgl0Ij93wTP4bmUmJRCMELmDsFKmdvRr4ECys5YyEA5SDMNQCbSwlvHgNkzEkxgVNuT4+NR1a/fTKwo3zLH0wyVNWMzdQOiwwPAYDcrKDy8BTrhqTihKHjgaOuy1JLyc6wQ7Q1lRrdqSH8aXU1hNfmr3U6ux0OEu9PFmSokLLsfjEBYTJc846dDmMDmFyM8EYlLHCbPGsjB/GIiSH42HjEEgLEvtfnCYC1VkANYac5U1ThmLy4Ey/XMhLkE+YSbjxhphPoM+9uBxEUgaJGdWU7v4Qvc8nqyDRXc/HBUSMprPOXf30xeEMgFiYHhOYsQ7Na3oh95mPTkSXMJBE09pwhX73U8PFhIfi8EP60Zrw1OOfeHxqUvzyNwn6VjxJobDXbZaJ259dIYRNfVzj9IY/A07p2Z2Wtm85Kd6wJPwGjrs1Fb00I/qgYvSiXawf2+mrgu0LfmpO9S55EdNtQooeOmV5YcC1/K5gGiw2FhyLraaPEW1sjxrgchPj8Hx2J9WoZlHi2hhhjAiyg/TYKy7qT1AfHbCwuxaXH6ghe0LWsgPTFGyJWuQRaT8lANXIRmyfkkRrNDJQtCnjhZ6y+TI7pbeWFaMpq90dkhtT1korJdFv/uhQCBetz8wqrHkp3zA8sTCaideZBACypGn7R+yL+BJ3Pu9DhbGoCxOdwpVZrCJIPlxdtSrTKG3PyZel6O7n5LesjPk3D/PaE7EAjgQWGKFEtBQo2AvLR8u0H2dgz+zk1NqcaMTBAm7nWAn/1JgHBlExoIqAsvmhm69NHa64n64q3a1ATI+bjh70dHaYD4oP0wGTr0fCgyNCkdXDFzz/YJucxk9Wg+onZGhczrh0k4bGf0ac0+b1y175GcCMfE4y8ReztDLTxkPGYOwrPzgUHjKwiQ5sDCJLVNUBap8K6wLVgTrwhf0vgo8rWNfkMGpQZlLsBZYp1yXMkueKwIJgatMnOtoYV0s8d0P99TLBkmBfEekPC37BOy08vMi/NmsVCcc6dOH95QCGRMt8fm1GG7lR6gl+mRSUyedk2HJVlQNl+wCNDl9fOrq3CoPwgR1jjJZeSKOPGy/7xHKPKMRxh8Hthc+MkrQ70IAT2YtESDCOBMr+seZKnsoO22JP3baski4H1pxA9wGt4cz0522ag8+DA39YKQ5nhyVMUeNVnSIHSjQnLticHHgDqsJV6HD/oYp3EU50A+PTFds12oygA7FaP0aOkd+HkJFm3GP/PQYBMLC7FpWfiwww5ntrBQWDmnBCT+Rnzqy9LD7rmkutWpx8GdZcTmWbeVV7KwL1giP4EuqRrHcHNfJEh++SbuZAdIN4b5HfvTnkYgjuY94Qf8lDQUentxqiIGRIyLEhbIONDdMVGEh3PSAYhMjcq55hCpzq6F08HDmlMRnGSg8Ml634G65JW6bm2cC8eDsHtj/9l+oFFh4EB4Nf19SiANldKLXb4/0zFzEBygwdYywSZyG9MC16K2CYytqacLNcGTqu6OnVgfKBBAjooUnR/AG6MpTwQcH/KnCwSZilSNVPd+PbjVJRCNYLqOF+2ntIj8PokId+ZlgEAgL71vMLpZGGe9BByY564V1TcbnVa+fmb384MaidkG5+rgQk5kcQnMXtdBtz8TiKc1Z77x30rY1+nK3Zgyq+tfQoeVNoXmtjYXkB7yDnon89OjPk+DDY6A65D6CSwGRoFAOim2Fj3DgQ4gpa2Q8yJ6oCxeiE+KCA5YaKvrB0w0QMa2uGC3Gj3GljNG7eny4bqGFp+bOuT2o2TZ63KDFKvx1BsoadSuw8Iz0Bkag7Bx7e1WBp1TZeflULUeuaPSEsqccqaLQ+rjlWT5AVXkWNrkLHfSEvlyU24LYKvKzMgbQ8lz5qcIB4rMTFmYX2Wwp+WEqku7MZpNgkr5IaMgPHTJ1URpi7tshtSxYLFyRfEgBzcAyWa09dosDOZksSgr1PrUXnpKHzbRckQ7Lp7mvk0Xlp/A+YFZ+yoHXeYUH2ajtJHZHCEn3yYkXZWTfVvgQZfTJ7GCHtCUKfnwE5A4DzXXpmWjiA1gYKhTI+8HCroLO3Q9h0fj4eF1vQLQXo/WG0Xr3PWuHuacymm4YrV2fFkB7MVo77rKDdh1AI0xO56LP/SzotgheNPLzEGo4ZuWnqg4TH9/dz7LyUy9nWkQ7okIyJK2Rx3iNpttKd/qoJfj4KTeCgWIhZpU/dQN6IyeTOVEdeuNWJz4WCiwoENmbbmmlparWyBLy4+ULnlx5HM+bfhAjno0VTlAUHkNGLUdCgJFgUevnM/RAP6378We6yBGU7ZACHRpfqghEJQ7sxJFwc1E9uZbx4pboisFjKsyOxCPjdb2BRbAVjOfzqNr73WZpHY+MpsfF63oDj4lXj/ysjAG0zILN7qfHZ/fdmtm1lPwUnBackh7JjeQ9BAMl8PP5WTeOXI6kSq5jRMiBpL5KuVA5mXwIjB0OGCddwWznOPNEbA/6DimskQfJj7neJ0RLuFGCRSx8yF6rhTLbFNxqN0OICbQ+9DArGHTy+vVrlKZSRlWhRgwPlyu7ema3jtzmArdF7nmcu6o0Vq3HxVnWX1ZrtQmGx478PAADCK5H1i/rjoXfJzI9DxCffdndT1GeQxAblOnEd/FJ3gNPoU4ZFNwcC9H+6dMnemDnxL2hYb1PtS3qtKpwJr1/bH9sSXurXyfLffjmnYnyw+Nxc6guYsCNoi6zD9mDkWARDvY0TGIGDE3GSCsmNL1NWnFKn8Ru1s4IOd6eAtflNuwZDnD305rOaavRWtH+VfT8qv/E4a5WZX9kvHrkZ2UcNVai79HEkHc7Xhx5y7RWh8PEZycyzK7F5UeHIXA3lF0qkY7njcmptHYDlutIWuZm6Me38FmGxreb9GDhBsaTG4Zm62P13Q9iw0T0k0HukiekMLrOOM/CxCUdMImRMfyZ2exdDNPocXdcACNh5UWMUS8HC0QcJUOEeH3oO6QQDhMnQORnZVw+LHNC12N+LIfDxGdfVn5moUnPXCNol9F0BzU6MJoanmqfRR/xtI5rZ+ndTxWUnP4JAXuPlqryWBZnsz1grK7Kofl+oYxVoMlsK+DG0DMUbmjWGCvCQeIciPxsiANfXz7+w+UHbMVRqlxVPX1VFfqjzDosjg2L0bo+lpMfmHsfc42gsap6n7llCn15tmC5LDKxe5ww1xgOgWFyNCbyo1GfcD8Gqo5S5ao6THx25Of7ZX7v5y76hlW2MLfPuT69sS/X8R5ai5HRtDFW2f14Z1KnE7tUkyo085TeXp5SljL2lmJir9PeEg4W58Bc+QnhgfgBzOPvfqCqqjBr7MtlWZCVGy7I0rufEL4VXDyF8tP/FGUI68IfxXqg/BwakZ+wt5gCmvQMKD9H7T9P+xDC+vj48ePL9huNkZ+liPyEfUbhkdevX5Mgvrv5nbMQ1ohTK/KzFJGfsLeoOsWbN2+ePXv2tPGkkUIKaymA5ZOTk8jP4kR+wj6j8MhvN39cNYQNwRz77+7v7Yb7ifyEEELYApGfsM/4Htoz1xjCA5mdV20ChvuI/IQQQtgCkZ8QQghbIPITQghhC0R+QgghbIHITwghhC0Q+QkhhLAFIj8hhBC2QOQnhBDCFoj8hBBC2AKRnxBCCFsg8hNCCGELRH5CCCFsgchPCCGELRD5CSGEsAUiPyGEELZA5CeEEMIWiPyEEELYApGfEEIIWyDyE0IIYQtEfkIIIWyByE8IIYQtEPkJIYSwBSI/IYQQtkDkJ4QQwhaI/IQQQtgCkZ8QQghbIPITQghhC0R+QgghbIHITwghhEfnn//8/wEX5/IYBgm8sQAAAABJRU5ErkJgggA=" alt="" width="445" height="323" />

 package test;
/**
*
* @author Fzz
* @date 2018年1月1日
* @Description TODO:
* 顺序栈(SqStack)一般用数组来实现,主要有四个元素:2状态2操作。
* 2状态:栈空?;栈满?
* 2操作:压栈push;弹栈pop。
* @param <T>
*/
public class SqStack<T> {
private T data[];//用数组表示栈元素
private int maxSize;//栈空间大小(常量)
private int top;//栈顶指针(指向栈顶元素) @SuppressWarnings("unchecked")
public SqStack(int maxSize){
this.maxSize = maxSize;
this.data = (T[]) new Object[maxSize];//泛型数组不能直接new创建,需要使用Object来创建(其实一开始也可以直接使用Object来代替泛型)
this.top = -1;//有的书中使用0,但这样会占用一个内存
} //判断栈是否为空
public boolean isNull(){
boolean flag = this.top<=-1?true:false;
return flag;
} //判断是否栈满
public boolean isFull(){
boolean flag = this.top==this.maxSize-1?true:false;
return flag;
} //压栈
public boolean push(T vaule){
if(isFull()){
//栈满
return false;
}else{
data[++top] = vaule;//栈顶指针加1并赋值
return true;
}
} //弹栈
public T pop(){
if(isNull()){
//栈为空
return null;
}else{
T value = data[top];//取出栈顶元素
--top;//栈顶指针-1
return value;
}
} }

SqStack

  测试:

package test;

import org.junit.Test;

public class test {

    @Test
public void fun(){
//初始化栈(char类型)
SqStack<Character> stack = new SqStack<Character>(10); //2状态
System.out.println("栈是否为空:"+stack.isNull());
System.out.println("栈是否已满:"+stack.isFull()); //2操作
//依次压栈
stack.push('a');
stack.push('b');
stack.push('c');
//依次弹栈
System.out.println("弹栈顺序:");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}

栈详解及java实现

链式栈的实现

   链式栈示意图:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcwAAAHuCAIAAACd3avsAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAADJQSURBVHhe7Z29qiw31rB9IRPOVexkUuPIF3HowKEDp1/kxNEODc4NvoGdDM4MTiY90eG8MAw4G4NxcBgYmE9aa0mlkkpV6u5Sd6v6eWjOUUlLf9XSs7Vr/332PwAA6AaSBQDoCJIFAOgIkgUA6AiSBQDoCJIFAOgIkgUA6AiSBQDoCJIFAOgIkgUA6AiSBQDoCJIFAOgIkgUA6AiSBQDoCJIFAOgIkgUA6AiSBQDoCJIFAOgIkgUA6AiSBQDoCJIFAOjIkSX7dvrs5fWDpj+8vnzmOL3pZR1XaarVjra/3bzg+2gOVqTKNK7VFrTwgkmEqucN7fb4m33e9Py80knJPFtmOcYNgYfmMJKV3TDfeSI+y1IJtuxM3VbnKuq8zbgw2A1k/KdXU/lGfR1MMhYbnZBXk7Ip1i6tRq0PvZ2eHfUTR7l5Z8K7+eb/l+j199eGmxRrX4vxF92Qvcg6hyNwDMnqJirW5qSCgpXNoutcfeZTLSte6rRvwGIrxZEutOGD4yaXiKJ6hrQmLU13ILRQdqAxMd+HLYyiRNvbQQjJ29TaWrgD/v/TSQayUjmboad2MzyX3pB9kJHdsD/ozhEkK5tiWpbJnhX83stCVtH952he6bH1WFWp7vpk38bRrvT24dU5f3r2IbVPpzjLoptktjIiCZDUUic6gtiIXAZxrQzKJludYzO+Q9fPWc2FaWmlWM1flkMOQYIVZ5OecekN2Yu1scGAHECyYcMt4IuSQ6CwuU0k/IzNVO5h3SX1NqzcR7hPeMMAV3dVrPLZy0tMFe1PUYJ9Pp2y1Il07wrKiayyOWofsDqpGenY12tNkfr5Roi28Wcj1+i8xeVco/2GuIjZ+kobnIa5fS+zexUGAIdgfMkuL8h0yzqk3DbD1pJP9ownDQ+tJt0l3VtFdyGphX7SpvM25sTSrEwUG3pI20iRYUqZpPxA8i7C4JL8OF5fqdZFdl/Tbowiw+GbLmIc+ahCt9PDGmU2NH/pP3hoZtZENtylgSzlLw5p44akPftMvQ6VpAN/MU8I08dJX5J9IJQGpK3YP4zN8JLdWo66tGVnJMklkk3jYsKWmDe91ES62Ryx7sqgsiqezSkkk3Cxq9OeKsw6KsN9oAS9vL6e0q3v6qrnZnWsXc2zpt2g4li03O6OlodbtRwTmUYcG5ZeND0bhBDii4bmhF6nTq1xo6jtA9tviDYbc7RtaXPejUejfL6kpGrsPqlpSE4xPBiSY0h2ZTVO+0tD002SEXeAQ6utRUdCD1PzkqoPSounpq0vI6+m0ZH05LPUQ2hMmvcXMVEdkOvBBWX/KrMq2rS059Gg05vP9nGhZ6sTiuWiEmP43PCQ2eanvWh47DFgw/ONvGUqTKK1so4vEkorLSvxJqT/KrOBZ41okI6qiA34OjrXpPMyXnIWG4DheBLJuiVtm3ht4epan9GwzpNNLDvavkaiNWVPJVtZgsPn/EmPiQtiuOXIyF2mVvWFVpCNLbQ1fTLt43IHOdLxeGbT1kLNygK125ipMdM0wy22YaXFwkKM4APdtcRLfkxpE/NhaKG/xZLtGw2NaXjatJabt13BFC2DyScYsH4VjdGsLD5rZOp/MTpSjrOSk2bAuAwvWVnoteXssPJw/Dtr3fq6K00bWdRsg+k21E61IA4mZlqoFS8NUOdQmrk2Nh/gynRgrjNrc6kHHWBoKQw39JANxrJnA3YhWss6jJW0WCcbPoTkMaF7fynxkm+ZQgj0hHyX54N1GDYmh30+n9YIJC3OZmoXKRY6C6vdkKwRDZIQi9dwCQs1/YV9GJ561/Bwr1yGVFkYHYzI+F/4mi3hElm/q8tVt0rigWmLaJbDGgjX8/ZCA3Y5Ye0UZVJB83zSpWJkZahxIIarYll5/NurOlx3rM5GYkIXSYU4z7R7qR3z9B7EOvk4Kvj4JDQ0OkOHFsej4Qs3cZFYUaptNWHTszBBY9McjwU23ZApZAoy/BC0g4B0FGrMKktJEqxDkvLWmwEPzviSne2zElmu1VKHrvdkrfukpmSV237YWPHTrsnJ+w4byhqMFZc7mNp17fiqSXOhJceUGzL9wVdzp7CWXZv0IRXlAJ102gudaOsIPTKoaXKBhSYkaJ6v9R70hmg//e853IYDSNY2aGXDrJUJd1jRbky9O9ypC1Vfm42uo916Dj+sYnraQuOsL33Xb3FDpI/+dxxuxSEkG9f+wsr0u6m30QB2Qj9SoNhDcRDJAgA8JkgWAKAjSBYAoCNIFgCgI0gWAKAjSBYAoCNIFgCgI0gWAKAjSBYAoCNIFgCgI0h2N+QHe2FU7F0E2BvW1m4ccqM+iX2QLPSDtbUbSHZckCz0g7W1G0h2XJAs9IO1tRtIdlyQLPSDtbUbSHZckCz0g7W1G0h2XJAs9IO1tRtIdlyQLPSDtbUbSHZckCz0g7W1G0h2XJAs9IO1tRtIdlyQLPTjSdbW799+/o+/ff7xF7vsApIdFyQL/bj12vrlu1J2asD3P/7LrnP+9ds7U6RG/uNv3/3u2/nudwtY5NePPvKr3/7pLz79+JWv+O2vUrTKP3967yu2Bacg2XFBstCPu0h27i91qNlwkeQcqup0etXEmgpNrMuv7e7q0q+AZMcFyUI/bry2xF9fvQ8nUyHoUl6Ln9GLLk2L0sLKGXbWmnuJKyXz3U+fLGaDcF4Or8Yj7d4b9cPri2tSeHn9YJm3xnVuqUPzJNOEu3DbtRUM+O67j++8/uywuaU/CTOxpufTjcOmfOLvrb30jGIF7aI93uixUU20SLYzSBb6ccu15eUVfKoie//jr7+9+/zjt+UzBE9+okxezoChha1P6uMzVn01nGcfSLL/ezsh2RuAZKEft1tbS7JTnaWvVG2uVC7l/BsVnLRTNaw++Y0vrRsqbtqzGNX6V9gCSHZckCz041Zry56K/j4/fvqzqrOt6K9mzKA8e5JrCVdr4WtoBSrWVLL1k2zqVj+YIOXtw7Jyb8n6Rwu72/iSSbkx9/qo0GWOjt3fuy6LAcbkRkshfsfV/IzpD5XZqTM7aXrTffXxW9VfOFFOVda+ScCTSnZbyrMjszm34fGCsde+Sr7gFUi9ototxav5pze7jNTi23AVLdVK6G/ObFxZSDnmGrU5Xo1r1VL70aNNGJHbrYNoxvigQL785UX5i1fh0oHRW885V4In2Z2hPzu9fvX+21/1Ce/6sXTpKXDbswLHLpsqGFZFEq6CIO369GaJkF+IzQpq8e24SpZqIYzXE1SYd63XUZQydClMJ/FyOk0taXRtjrvgmrPUruhA7QKelVuvAKfadz/99u3n798l3hQV5vpLMu2pQqJX10KT/qwR/+U1MWbLyTdtVr6Hd/2JRGSH7VS6UNWiGVpapgVzUHrKW41vxFWyVCuTNY10CguuFKzU5q+z0It0Qgtz3AnXqqU60LVxeHxu/PabJZ3IvM6C8kSF9a9HielMrNHF9pD3k5RWz6eJqetIUzYkScQjrdNrPIBvqvb6vWSOqRnKpUNRGbkgoNX4RlwlS7UiA0k7Sqcwv1jCRnp69f9ncQtzXEWiHwgbFjwZt33jTWe/edXGL2S51/oBM/p0jjnRv6oaFUWuSzZ9+GBp71P9OTQ51YaONr4t4fpdtCFZxYKEJL8qoEp8I66SpVqRgVSnUM6nIA64iKrO8Wpcq5bqxg26gMfktm+8M1fpU9VZ+spjnPsqolRr14+ZItl1OapYNwTawg67yCyS2CWTUrxUExWBuYDq8Y24SpZqRbpMO5pNwQy6PhCbSxG1PMc9cK1aqg8ybiT7pBz8jfeH0K3nsHuxxy6KpzgTycxJduGLSldNhT4lBavxjbhKlmqlItlsRvG6CJccfVqQD3hhjjvhWrXU3vgBo9fnhrd/N3baS+akgpfX1+WS1FaG+qfSksW34eIt1UAUqPLy+pZniBazsPmARLGSYcNPS8s57oRrz1L7ocO0C3hiWAS7ccgddcNJpe49vc0+Qpz1ceESXB+WAtgb1tZuHHKjPol9kCz0g7W1G0h2XJAs9IO1tRtIdlyQLPSDtbUbSHZckCz0g7W1G0h2XJAs9IO1tRtIdlyQLPSDtbUbSHZckCz0g7W1G0h2XJAs9IO1tRtIdlyQLPSDtbUbSHZckCz0g7W1G0h2XJAs9IO1tRtIdlyQLPSDtbUbSHZckCz0g7W1G0h2XJAs9IO1tRtIdlyQLPSDtbUbbNRx4b2DfrC2dsNtVBgXexcB9oa1BQDQESQLANARJAsA0BEkCwDQESQLANARJAsA0BEkCwDQESQLANARJAsA0BEkCwDQESQLANARJAsA0BEkCwDQESQLG9hvqdrCogFgDnsDNmgRKJIFqMHegA2QLMA1sDdgAyQLcA3sDdgAyQJcA3sDNkCyANfA3oANkCzANbA3YAMkC3AN7A3YAMkCXAN7AzZAsgDXwN6ADZAswDWwN2ADJAtwDewN2ADJAlwDewM2QLIA18DegA1uI9m3k2vjs5fXD3a9Gx9eXz777PRmV6u4McQBSLWWin7g5wy720S15baZwi1BsrCB27mWqtMSUzDzWIvU1E85G1qxhlvsI6GmP63W4sJzranxbTK0wYfGs8scabl9IHAjkCxs4Daupeq0xCygZ69X0+DEuijOsZQFN4YHIS+wMqRsFss9uSBpIoxnIo/PBuGKtYPp/xpSc6Uc7gOShQ3cxrZUnZaYiVw0zj7ih8ZDmFZvkokK6+VF/q21nqvVt3z+eBxr8bGT08mHhylLTjkT06mE+GJ3/XI6veg/1Y6SFue3GPHeFSQLG7hNaqk6LTELBCuoO1pV0CxZbV6MlCTX8E3nhmqqtB1lw85ZnobERslujyfqNRS7DNeyZqPYO4NkYQO3TS1VpyVmmWX11KVViy8rBMOYgPQEWVVOoimPRFlfW/7MhlQNlzhT5kab6WhswA3VfK144I1uxrH3BsnCBm6fWqpOS4ySGUnYVkdCkMe6O7SSNhz1NPW90qPWlNaT5BLJVFxMGOZi0z7Ut5PNJVDUkaaTxwUhKyUd17zQNWcZ1bHDDUGysIHbq5aq0xKzgKrgXBNs1TLBRHPJdbhKNLfcQmLWWcUFfHnWbi3axuQbTlrV3IU6Fq4PkycWIuN83IizoYdon67fLegOkoUN3L61VJ2WmAIzSca2DrReJS4RTUDia/YrCNayrzGtjmdhBrXwKMOCpZFJw+FJhwRYV5Vp+MCX17fQh5lcx3Le9GF/kCxs4Laopeq0xMyJ0olWCsZas5qggZthkfMsIwObhNXejUNdV+nID8MXrg/n7RQfphoyAp9l3yW2MCK7mXLwtZbj/RWaZw8dQLKwgdujlqrTEpOgFlGbhP2vVmhxWqhtl5tIfLNmtqPDSPV/H6ojilmOlQbWO7AWdHZykT6aDe3PJq+ZiZvbbw3cAiQLG7hda6k6LTHKTBPhIqFBEOdJ0zppjt9sXV0mEVPTQXSxvD4RKW/zoDXlmAY05UluMhplqQ7cFSQLG7jtaqk6LTG7IUJrN0ihoXUkfM2BZ3ZfsNnBhO9qvScfsdiWWn9OW6ewN0gWNnC701J1WmLuRlVEi2yL7Uq8ZLt2AA8GkoUNhpcswF1hb8AGSBbgGtgbsAGSBbgG9gZsgGQBroG9ARsgWYBrYG/ABkgW4BrYG7ABkgW4BvYGbIBkAa6BvQEbIFmAa2BvwAadJRt+/vPcn/l8lB+ckvFf9AOrbTOQn8LlR8RGBsnCBm6LW6pOS0wV0ci2RTIb62WTfNRTng6uavwgYWHpAHRYm37W22O/vvsim8N9QbKwgdvalqrTElNlcqBj1SLpqTHIzVFR5xThAhYktwth8Fv2K42aTGB5WGlAh5HDrUCysIHb4Jaq0xJTMJeIsqKSzMVS20lLD3rL1aYqdhLcUuG56BQ2/uS4Jxm8i9v0a0o6773HD7cAycIGbm9bqk5LTI6Yxivm7eT+VZUsGKfmmDS/KioJ8rXMhltCO4+k0fX241SnOD/p1zC6ChosWJTMZ+dZQG+QLGzgtrWl6rTElJgCU10amXkS22RsCWehbceK2GpVyo50UPGvIaz8yXHfoinVGsonVJ1GOZjVscMjgmRhA7exLVWnJSZhyWOr8nBS8uXiJg2MTSzUmyvMLO48Jv/n8bnvPKtjEbSWujE0n0wrkaaPDM8TgmflbzTa3xFb8uvUkKDDSbuEkUCyMEO3dYaV1bG4OVa2Rq5Dyy4JgcExTkNBVVXpaB3XaOqsbX9uYs3FnuU6XCUz8l35S+nSBznXynlXMuZTX55IjJmfg2EskCzMcBvZUtfR0o6IR89z4aHBokR8UeJKTcaKFlQQwk1QO+kpmntCOlppPgzEIdOMA6qeZIVg2Pg8pTrVqQMc/IggWZjhdqqlrmOzHTGD94bIRAQSZTHTicrG6cMXi6D8Z98uJLbg0LLEMNpW8vdjZ23uinS1pTcXpCExYTNbrKijVw3rwDVnaRaxlelGwkOBZCHH7WVLXcpWCzNjyEVwg5Uo0UqmG4eL8y6RkkkqkoqNhDZCm47Y7KLSrkQa32p4mph9N5mv4k+0ySiF2ejdRTL1qY20FpJ9dJAs5Lg9bKlLWW9hLgMVZLMbvGhicGKdqLm6arSnlF2MpM2uS1YHOu+uGE7ZRJzfvChkh/am27A+CrgPSBZy3Ga11KWc08KZkn08VHEbepPvBbZ0My36hscHyULOOYpc5voWRsK7cOAPEtAbJAsLXGPJ5zIswBbsB1gAyQLsBfsBFkCyAHvBfoBlLnMlhgXIYEvAMkgWYBfYErAMkgXYBbYELINkAXaBLQFVzjUmhgUoYVdAFSQLcD3sCqiCZAGuh10BVZAswPWwK2CNdm9iWIBF2BiwBpIFuBI2BqyBZAGuhI0BazSqE8MC1GBvwAYtAkWyADXYG7ABkgW4BvYGbIBkAa7hRnvjl+/+8bfPP/5iV8rv337uMt//+C+7zvnXb+98gKulkf/423e/+3a++90C4FasOxTDAqxwS8n+49tf7dKjDv3qt3/adYm6VdT860eVrCWypqAzSBbgYm6zPUSXX70PJ1Mh6FJe2SFX+fTjV9HC0gJn2DuBZAEu5ibbI/j03Xcf3/nnA2JPd/nTJwtYRsJMrFZFXvUnDNAHJAtwMTfYHt6Pwafqyvc//vrbu88/fls+Q/CEJ7ALL3fgDS3g2dtSMymGBVjnjB1SKI8XL168nvplclzlPMlaqh15UPDup9/nx09/VnVn23/+9L5+Jg3PB+xJriVcrYWvoUF/OMkCZDQqsa9k43dcqRnDy3+Za55jmRHv368+fqueDV/vmqqsfU8CdGFRphgWnhnnIkut0leyjmhGeSwrz2f9l7+8KH+pnWT9+dcevyZfHLOzbZIDN6VUKpKFZ+ZRJKs41b776bdvP3//LvHm4uOCJNOeKiR6dS3wjVx3A8kCpDyUZMMD1u9+l+cA9sm++HTxO2QF+WkFE2t0sT3k/SSltee50AUkC5DySJLV75P97jev2viFLPdaf7QafTpH1KwtINlbk1oVw8KT4yxkqVVuIll36ix9ar+aIHnlMe78W9GoWpvvMbg5SBYg4hRkqVVuIlk4CkgWIIJkYX+QLEAEyUIX1K0YFgDJQheQLICCZKELSBZAQbLQBSQLoCBZ6AWGBXAgWegFkgVwIFkAgI4gWQCAjiBZAICOIFkAgI4gWQCAjiBZAICOIFkAgI4gWQCAjiBZuD/82AIcGCQL92dQyfKxAVpAsoPhNjY8DvauANRBsoPhNvb/OxyD2grJQgtIdjCQ7OOAZKEFJDsYSPZxQLLQApIdDCT7OCBZaAHJDgaSfRyQLLSAZAcDyT4OSBZaQLKDgWQfByQLLSDZwUCyjwOShRaQ7GAg2ccByUILSHYwkOzjgGShBSQ7GEj2cUCy0AKSHQwk+zicO+y3k6txerOr85C6wlIDrvTl9YOmP7y+1MLm+CZjrQvQjlZa6Dffy7A2aw1uzudSkOxguGVgZjoQblI2vaFoHLZZz+9e047lbPpjMo1nJVoaND20u0Kbv9AqUnmx7g3mq4RmHeuxSeDEUhUN3Oz4TJDsYLg1YGbag9n6kx1jBbfFdW7TG4rWYSc+8knbwz65JinBxTZt/EWNKIt9KOrA11D3DLlozUp89/lONVYmt4AM4UXrVjpouttngmQHw60AM9N+2JqVBWtZt8V1btMbitZhy/1VHUx6cGRbWdwUiPaY1XCklZbKks42iT2e5yqrVzVRt/nW0Vr1acz6Wm9SQs+8IescW7L+1p93u/wdTt8DueNt7/NtcMMxM+2HLUG5U5Z1W1znNr2haBz2bIML62tSheEX3SQcd7XuEV248642l76En7dBPNpLdVfcZL5psLIxjw+v7shejMyTV7zwrtQ5+Ek2vFFv/n+5b+tvnb1xSbGumD1v+XW4wZiZ9iOdpGXdFte5TW8oNoY9s0BcQTMFLYpK6wXp2OJ115XNP+vGmrROtpbtbCzNq1w73BhIr/lmnYg2l8edTU6ZWreoBabx7MTBJat32t0v///pZLe9ev/09s7eM32rlt/Ge+AGY2baj3SSllUh7IMPdr0TrnObXjtuzL3eFZujXdVpG3a4uckxyi9An73cSbLJdZLSQlWykaReklxChyS4GA1uX+QaX43WxjvPN4xBOqnOM6BDssex/t/VqW7M73yeSbIeez/8ZXkXQ5BgxckKeAjcYMxM16HzmiEz1tJ4K1ye5iiWf3qz60AtvhFX0abXyuytiszepiyk/S0Mc7TLOi7KUnVcYy+nk91radPf+fDFpnINOqYl51PTp2EyrsUaSrJUt0J9eSi2lbASnaEVKvG3mW8YQgi17FX8yOwcq8joFpB+q6UX8IiS9ZNsmaK8e9NjqPJe61vh0Tc5NGpVsgrTe52ynHs/3GDMTFcQboxOK1zJ/ZhK43fehPx4pwO+YCW+HVdJJtdGGK8nvDFp19N1fNtk6FKYTmKygeCjF+dYwxVbqoIfhWvA/rPMyvKbmMbuU3Zbw92NUyrRgGlaK6HlPNfD52jlhXg/ghvMV0t8e5KaN+x7yyrZAMz0W/OcWt+LB5OsTjDiZzpfDuEOzQJdpl3HWxPulP/IpZnzdopbvdDzUv72e9QZNwIz06UU9yrcG80Idy5La92wXJN7sBrfiDR6jmd1xNqpkk6heLMNK7X56yz0Ip3QwhwruChLLTHdDN+i9B2aludW6egjceBTqWUths+QDqfD2lkL1dfd7iGgQ8o6uNV8085tykmklNbqluELrLZwEY93kk3v4fxi9Sp9kxM0cxa3RLixMfyRMTNdis0xvVF6KzXHpUNRGql1NXB2M1fjG5FGd5Ts7GIJG6mebbK4hTlWcFGWWkU6mx8vtX/XsU9k/Wu45Wlg/HxtZUoL96QgtBa7nyarWY7VBgKhIbucI4Vd5qulaccaF6/LgKnJkAzfKDuPCiTRu/HYks1u4fw6LywzLEey3k7TzVXiGxjua3iHhPm7nr3Zd8QNxsx0KTbNdEp6n9Kc9F5IvtZNbuicSnwjWs+aakIGUp1COZ+COOAiqjrHAhdlqVWkq1o3jsVxTjc0FG9OSgJWytMWtHmf1JTMtn3mDgleDO02X59TVJ4qBuYh2owbaBiAFJeNC8nN2JEDSdbudsiQYvlERW6lL50VJTU9vtw+1XIFU7S2Wrwbd8MNxsx0KTb9dE6aEzPiZTJ5rWtV57duJb4RX31Pyeo4ZuUlNpcianmOS7goS11Ie1ctSGtrbcltWb8p5zC75U3sO9+z0WVR7T1ZvfvyqJK1p6n6PRdh2vN3df6O2ZUU2h7zRT5bK1iAY+UBeKjpsG663fkLcYMxM11KMku7BXatk7QLX5Tma92p0KekYDW+EV9rF8lmM4rXRbjkLH/Ne2GOFVyUpR6CreHCnXg8ycb9oYt/cqNiu8aRl6RlER8kC0+atSWoXVSiHelK1djHWbtuMGamK1i6ecrs2xtT3N3yFdN6elMqLWl8I1pFJ7hJskA882/Lccze5InZ2+0HrRk2/LS0nGMFV24pgDqPJ9lmdC/M9s6csM1ko+R7brGmBM3ztd5KLzfGDcbMdCDk/biNsNJ1kHz/n+fsN9nVsRRAnSNL1uFjisOI7rPVM8qEBDfG3gI3cjPTgfBv5IDCGnHMcHsOLtnj4aZsZjoQ/o1EsnBQhpVs+oneM4nWTdfMdCD0bbQZjsOIY4bbM/BJ9jlxG9vMdCDEsUgWjgmSHQy3sc1MB0Ici2ThmCDZwXAb28x0IMSxSBaOCZIdDLexzUwHQhyLZOGYINnBcBvbzHQgxLF9hdWj/d5jhmOAZAfDbWwz04HwikWycFCQ7GC4jW1mOhBesUgWDgqSHQy3sc1MB8IrFsnCQUGyg+E2tpnpQHjFIlk4KEh2MNzGNjMdCK9YJAsHBckOhtvYZqYD4RWLZOGgINnBcBvbzHQgvGKRLBwUJDsYbmObmY4FkoWjgmQHw21seBzsXQGog2ThKeghRCQLLSBZeAqQLNwLJAtPAUKEe4Fk4SlAsnAvkCw8BUgW7gWShacAycJdcAsPycJTgGThLiBZeBaQLNwLJAtPAZKFe4Fk4SlAshfy92/+/Ze//vsv3/zHrh+Qn//8y1//+P7/7OrxQLLwFCDZC/n4wx9esl9++mgZTVitv/77658tpyf/+dr3teJZDThjMDr+L374r107/u/TF9LI+R9vkCw8BUj2QvQkq3paUI/x3++/FAElLq4HB6K2ll6LFe1Yrb1odZ9Wh/75dw0qWPg4EbquDk8CdNbWadbCGSBZeAqQ7EUUHqxLc+E4Gc+z/rV0ABR/+SqJke3UWZGm2tx68dW9+CSzZkD/MCGWxsa3jOknns5lYXbNIFl4CpDsWSQyOs8saUV5rbtMDOgPjKpCl/5Btd7U6Uzi+pqrPLj7P6Lm6lF3gfjRxRoMR/Xk1fzwAcnCU4BkL0CM6S0TFNP0ODKrtarL+UnZn2RnB88VJpt//bN0tDA2nz+1OR/J9BBAX0sy/fobU7++6qf4dZAsPAVI9mxEQ3b6Sz6dLwiHUHlJvM/54/ufRaAbuvSujB50CXXfUkezM3L6jDh/5T1qxT+/L4LXjqJmf+9l38uXf349P8meI1wkC09BKtnZbuH1l7/afUlRf0UNBcl+EmEtHE6z+HhE3fqcenZytNeKl7XZb/6cC7d2knXE9ufPCvQDQ/1gnulbHzioWENR+8MHJAtPASfZc0g+v84/ra7IRcIS+SbH2y3PCi5++xGBNRsajG6NDygyJODLT3/3Wpx/YDBZr3vZVZGW/cBipr04yQJkINlmvID++P4Hp7NJTPlBtSTRn3nZKaztPJt7fPskK3KceowqTLCu/RRk8C2SjU8k9FmHrxLG9scX85Ps+ozmIFl4CpBsE/a5sBOWV9g5khVDffHNn7lVRYX1c5/5UQ6bLeayw+lHsaQ1q8asqzk/ZTu2qkhAFLQ7vPt+ZXh6pJ23tgGShacAyTaQCDE5/eWfKdsrGOrv3/hTXlZ6zmfT1u/yy3pZHoNJeflYGlnS4qpk3dzl+wqiZGedyqv9gawDycJTgGTPY/4p/OrBbfq0XVgx5szg86KqIpepuC+8Zq2pZKMWE19XT7L63GBh1trveR9CkCw8B0j2PESyZ53XCvS0aK9VTV9BZts2/Zln14Ldh4ozvV8HycJTgGThXiBZeAqQLNwLJAtPAZKFe4FkYXhaBIpk4V4gWTgCzqHrGm2RbEsMwLkgWTgOYtrltbou0JWKAFeCZOFoLBqz5tDFYIAdQbJwTDJ1liYVu6JX6A6ShcOSajT1aZoP0BskCwdHleqIac0HuA1IFp4C9HpAdvjZ3zbkh3cv/slgJAs35V6m037xbH/iryw482f/Z8YMjaz/8kP7LTYbHdlvifW/qeDnT/ZHccKr2r7+mpvwG2TsNyRc+NsMkOww+JMYjIC9YYOTuKkVq7Imr4TpF33pn5P58o/k1w8u/X7CtIoPa/g9L4LUkqam33AoQ61LM/zeGZV+9nu8zgXJDsMxdu+RNLTIoWbXfoJT/dmfd63+CsEZrnHnR1dR/oJW+MOLoa/JjIaZTv4e4mTML770I1z3rMzCFDlpeu3T//mvOlQ1X3iMdSDZYTjG7j22YR0Hm+BcN5uc5SP5dYKTZPUPan3zycv0y0/fexvODo/elfJXY1WpXpdic/1IUPHsdLhun4WKODYYdG8HZ32ta30Okh0GJDsEx5pg/A3cLYfT/Nd1//n3LCdrZJKsO89Gyfoc9296/FREsiJfJ3GxeXwooVrM4h3alPv3658T287/2G2uS/044cPkQ0W89K/mDzYzkOwwINkhONIE5ewW/gBX7ewWBOcdpH+HxkfOVBXOgNkJN5dy8jLJzqSmJ9b4EjXHeDn/JkVWR9CwL778Q4/MXzjJumC1ef7BY3aaDo999RlF04PmJZDsMCDZITjOBFVqYhY9Bm6d46I0vUyliilMq8djZvJ5t5xMxX3u308iOHNf+Xe85SQrfpTWVHyhuyo6i+h9l8hkLS8Zm35giG61vvwYSr9r420g2WFAskNwlAmqcaK/VKD5uS/Fm/TrH+wAq96cyatQoUizkGx4ICBeKyQ7byTXZdGF+tp3Ef6MbnyVotTxyARVsn/oH6y1os2PMVWQ7DAg2SE4xgTTc6hhn5sve9ZbKZ4W9dNqi/evP77/wTm6+sBU9WqPTUP7KtD0M3SNn9I+2H/XV+VcqcdnV6oG15jkED1vfE4+fST7JCDZIRh/gnrwLJwY8ks9qc7EQXLgtVKfXhGT952LdLqU86/rbl2y4keTrI8Ub5pJ5VUM2Jgqqqb1xOrPy+uCziUbO5oVNYBkhwHJDsHYEzSb1CQy/1KVGkqqBMGlkl3HK9ueq4YvSc38VUhWxOddaafRSbL2bGFx2P/5Wr+XIHxHgWpdIlNBz21bPBspBnMWSHYYkOwQHH6Ca7TLKHzu/9/vv4ku89bzspuOzOlB2LtVVBhOptH4ySlVQ1N8vhuS/ykJ/Ugg1WsfRRQdQNKaNYJkjw6SHQIk2yIj59PaZ/dC7ZHFnMvcV9NxHTs7I9nDg2SH4Kkle1Tkgwdf+Do+u+7eD68vrj3h5fWDZd4C16GlDsrhJwjngmSHYffda6JFsruCZCEDyQ7D/rv37YRkdwfJQgaSHQYkOwRIFjKQ7DDcVbL+0cIuNr52Fm7MvT4q7DNHJAsZSHYYdtm9yRe8AqlXVLuleDX/9GaXkVp8HRdsqUsI/c2ZjSsLKcdcozbHM3FtWApAQLLDcP3uDYZVkYSrIEi7Pr1ZIuQXYrOCWvw6LtBS5xLG6wkqzLvW6yhKGboUppN4OZ2mljS6NscLcJUtBSAg2WG4dveWLlS1aIaWlmnBHJSe8lbjV3CBlrqEyZpGOoUFVwpWavPXWehFOqGFOV6Ea8NSAAKSHYYrd685pmYolw5FZeSCgFbjV3CBlroEGUjaUTqF+cUSNtLTq/8/i1uY40W4NiwFICDZYbhy925IVrEgIcmvCqgSv4ILtNQlyECqUyjnUxAHXERV53gmrg1LAQhIdhiu3b1mkcQumZTipZqoCMwFVI9fwQVa6hKky7Sj2RTMoOsDsbkUUctzPB/XhqUABCQ7DFfv3niKM5HMnGQXvqh01VToU1KwGr+CC7TUJVQkm80oXhfhkqNPC/IBL8zxIlwblgIQkOww7LF7zUkFL6+vyyWprQz1T6Uli6/jYix1JlGgysvrW54hWszC5gMSxUqGDT8tLed4Ea62pQAEJDsMx9i9d5pF6t7T2+wjxObHhfNwLVoKQECyw3CM3Xt4ByFZyECyw4BkhwDJQgaSHQYkOwRIFjKQ7DAg2SFAspCBZIcByQ4BkoUMJDsMSHYIkCxkINlhQLJDgGQhA8kOA5IdAiQLGUh2GJDsECBZyECyw4BkhwDJQgaSHQYkOwRIFjKQ7DAg2SFAspCBZIcByQ4BkoUMJDsMSHYIkCxkINlhQLJDgGQhA8kOA5IdAiQLGUh2GJDsECBZyECyw4BkhwDJQgaSHQa3e2EI7A0DEJAs3JTbOwjrwX1BsnBTkCw8G0gWbgqShWcDycJNQbLwbCBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZODhIFu4LkoWDg2ThviBZAICOIFkAgI4gWQCAjiBZOCgfXl8+Szi9WT7AbUGycEzEsS+vH3z67eQsa2mAG4Nk4ZjoQVbPr0gW7giShaMiag2gWLgXSBYAoCNIFgCgI0gWAKAjSBYAoCNIFgCgI0gWAKAjSBYAoCNIFgCgI0gWAKAjSBYAoCNIFgCgI0gWAKAjSBYOCr9PFh4DJAvHhN8nCw8CkoVjwu+ThQcBycJR4ffJwkOAZAEAOoJkAQA6gmQBADqCZAEAOoJkAQA6gmQBADqCZAEAOoJkAQA6gmQBADqCZOH4fPbZGQsYYF+QLBwfJAt3BMnC8UGycEeQLBwUfp8sPAZIFo5J+vtkxbL8Hi64D0gWjkn6+2SRLNwRJAtHhd8nCw8BkoXj4yRrKYCbg2Th+CBZuCNIFo4PkoU7gmTh+CBZuCNIFo4PkoU7gmTh+CBZuCNIFo4PkoU7gmTh+CBZuCNIFo4PkoU7gmTh+CBZuCNIFo4PkoU7gmTh+CBZuCNIFp4CPAv3AsnCU4Bk4V4gWXgKkCzcCyQLTwGShXuBZOEpQLJwL5AsPAVIFu4FkoXj4wyLZOFeIFk4PkgW7giSheODZOGOIFk4PkgW7giSheODZOGOIFkYmxZ7Ilm4I0gWhmfToZsBjs0AgMtAsnAQVky6UuRYLwW4EiQLh2LRmIuZjlo+wI4gWTggmTpLmZY5AJ1AsnBMUo3W0gA3AMnCkVGlplgBwK1AsnB80CvcESQLt+NeptN+8SzcBSQ7Bv4kBiNgbxhAAMmOwTF27+E1dOzZwWUg2TE4xu49vIOQLJQg2TFAskOAZKEEyY4Bkh0CJAslSHYMkOwQIFkoQbJjgGSHAMlCCZIdAyQ7BEgWSpDsGCDZIUCyUIJkxwDJDgGShRIkOwZIdgiQLJQg2TFAskOAZKEEyY4Bkh0CJAslSHYMkOwQIFkoQbJjgGSHAMlCCZIdAyQ7BEgWSpDsGCDZIUCyUIJkxwDJDgGShRIkOwb77d4Pry+uMeHl9YNl3gjXp6XuhEz+9GZX+eX13H2C8IAg2THYd/eaaJ9KstMHF7FqdrkTrjlLwcXYW7Pn+3JfkOwY7Lx7305+GT/bSTbbvR02850n2MI0a10EPulTa7dB66TLxVppu3lTR5axgTZ+Omm1Pd+f+4Bkx8AtNkvtApItL/egfYLBUrd/E/S9l1nH5IYGrTiWboQrIUhZDTXiPYm01Hp8kOwYuAVnqV3QDdC0v/3K30sEO8zCjfzi0TySZB3a/80lK91ar7IONm+ArhYJs3vWV3++k3CO7drRjUCyY+BWm6UuJW6PiXR/h3NHvueTDTajFr+Ki7fUhYRe57TuQ7sFITy73APXnKUa0P7vI1mbdLooagPRGFdBb74Lk8RZ4077Was5f39vfms6gWTHwC05S11EWOS6t8JVWMR2fXqzRMgvlGYFtfhNXKylLiCM2pN5UgYwlfvLlejK5R645izVgPbffPPqpO9TtbnizZxwd6A6FrtJUuKb8HdL8l5e37So0mXeX+s8306nV2s4p7WJRwPJjoFbYpa6gHSjKLoDNCPdX8Ves62Simg1fh0Xa6kLkeGk3aUTKS9t4hWrZpd74JqzVAPWf0I5s0B0W2AatQTqpUT4RmLoFOay5CIJdyRtpp0HtMEXH+Oq+Kr2n7FUJzQaLBycOQ0lJRlAin4xrlZpMJDsGLj1ZqnzsXVc7mDNcelQVEbahkrX+mr8Oi7WUhciw0m7SydSXtr4wujXL/fANWepBrR/G6zd6DAavfQXMWqau09ZNZvDnJUZhXgVZ0iE1rOa1o/WcUUa45PTWFYIIzfXbt9ma/9Ij2MFJDsGbslZ6nxsY6V7QpdzmpPu1iQ/rPtiuVfi13GxlrqQYnNnE8kubZBh9OuXe+Cas1QD2n9tsILlSdTSW5E1sYUPfzmdtM3QkLXrmLfjgyVGO3FJH2m1pNJ6v3FskjhrjPFBlDCb8Ygg2TFwa81SF2DbKFnnmhMz4mXcGJofq2brvB6/jou11IVIx2l3tYnopW3VMPr1yz1wzVmqgezmFcPxkwnnQI3S6cXLM6fga7tIXyd2GptIcnIkwpdLA/rJv/1Xr6XNSrkk50NcyIqze3l9lUTbpEYAyY6BW3SWugTbSHHh2rVuEbvwRbN8YSr0qWnP1OLXcbGWuhDZh2l3tjHDhpxf2lUsTUa+cLkHrjlLNTDvf3Em7koT5Zw1cGFKIT1D4rQRXz19I01qi9UE6c/VsHiPr6+XPuUDZtUt0vKSvgOhSbtUfJxWkeL6gEYDyY6BW3SWuhBZtwuEc0OBrfG0nu6KSkste8KFWep8ki3umb64bejg5lHxyeMWe21o15SlGshm5JiGUbnJ0zsQDZW3IgUxs5yYFIV3PbQi3fkLXxqbVrStuE7ijbeEPX6IHdnI00Y0q5zcbHBpkKTjo9mFSYwFkh0Dt9QsNTLHmMUKPSeY2jTz4DmIwMr6SesVycpD4bxirGYFcl1KMR27MW/JAlzNeYvm47E1i2THwC00S43MMWaxwggTdBbLVWmY0XKlLcm1J6rZW/bYGSQ7Bm7VWWpkjjGLFQ4/QbgAJDsGSHYIkCyUINkxQLJDgGShBMmOAZIdAiQLJUh2DJDsECBZKEGyY4BkhwDJQgmSHQMkOwRIFkqQ7Bgg2SFAslCCZMcAyQ4BkoUSJDsGSHYIkCyUINkxQLJDgGShBMmOAZIdAiQLJUh2DNzuhSGwNwwggGThduAgeEKQLNwOJAtPCJKF24Fk4QlBsnA7kCw8IUgWAKAjSBYAoCNIFgCgI0gWAKAjSBYAoCNIFgCgI0gWAKAjSBYAoCNIFgCgI0gWAKAjSBYAoCNdJMuLFy9evOLL5LjKGZIFAIBzQbIAAB1BsgAAHUGyAAAdQbIAAB1BsgAAHUGyAAAdQbIAAN343//+PxSMW6Z2Ci58AAAAAElFTkSuQmCCAA==" alt="" />

 package test;

 /**
* @author Fzz
* @date 2018年1月1日
* @Description TODO:
* 链栈(LinkStack)用链表来实现,主要有四个元素:2状态2操作。
* 2状态:栈空?;栈满(逻辑上永远都不会栈满,除非你的电脑没内存了^_^)。
* 2操作:压栈push;弹栈pop。
* @param <T>
*/
class LinkStack<T>{
//栈顶节点
private LinkNode<T> top; //初始化1
public LinkStack(){
this.top = new LinkNode<T>();
} //初始化栈
public void initStack(){
this.top.setData(null);
this.top.setNext(null);
}
//是否栈空
public boolean isNull(){
boolean flag = top.getNext()==null?true:false;
return flag;
} //压栈
public void push(LinkNode<T> node){
if(isNull()){
//栈空,即第一次插入
top.setNext(node);
node.setNext(null);//该句可以省略(首次插入的元素为栈底元素)
}else{
node.setNext(top.getNext());
top.setNext(node);
}
} //弹栈
public LinkNode<T> pop(){
if(isNull()){
//栈空无法弹栈
return null;
}else{
LinkNode<T> delNode = top.getNext();//取出删除节点
top.setNext(top.getNext().getNext());//删除节点
return delNode;
}
}
} //链式栈节点(外部类实现,也可以使用内部类)
class LinkNode<T>{
private T data;//数据域
private LinkNode<T> next;//指针域 //初始化1
public LinkNode(){
this.data = null;
this.next = null;
} //初始化2
public LinkNode(T data) {
super();
this.data = data;
this.next = null;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public LinkNode<T> getNext() {
return next;
}
public void setNext(LinkNode<T> next) {
this.next = next;
}
}

LinkStack

  测试:

 package test;

 import org.junit.Test;

 public class test {

     @Test
public void fun(){
LinkStack<Character> ls = new LinkStack<Character>(); //1状态
System.out.println("栈是否为空:"+ls.isNull()); //2操作
//依次压栈
ls.push(new LinkNode<Character>('a'));
ls.push(new LinkNode<Character>('b'));
ls.push(new LinkNode<Character>('c')); //依次弹栈
System.out.println("弹栈顺序:");
System.out.println(ls.pop().getData());
System.out.println(ls.pop().getData());
System.out.println(ls.pop().getData());
}
}

栈详解及java实现

栈的应用

  栈结构是很基本的一种数据结构,所以栈的应用也很常见,根据栈结构“先进后出”的特点,我们可以在很多场景中使用栈,下面我们就是使用上面我们已经实现的栈进行一些常见的应用:十进制转N进制、行编辑器、校验括号是否匹配、中缀表达式转后缀表达式、表达式求值等。

十进制转换为N进制

  如将十进制123456转换为16进制,我们需要用123456除以16后取余压栈,然后用商继续除以16取余压栈,重复以上操作,直到商为0,这样保存在栈中的余数从栈顶到栈底开始排列形成的数字就是16进制了。(注:大于等于10的余数我们要用字母来表示)。

 package test;

 public class StackUtils{
public static SqStack<?> ss ; //弹栈出所有元素
public static Object[] popAll(SqStack<?> s){
ss = s;
if(ss.isNull()){
return null;
}else{
Object[] array = new Object[ss.getTop()+1];
int i = 0;
while(!ss.isNull()){
array[i]=ss.pop();
i++;
}
return array;
}
} //使用栈进行进制装换
public static String integerToNhex(Integer num,int hex){
//对传入的进制进行判断
if(hex<=0||hex>36){
return "请输入有效的进制";
}else if(num==0){
return "0";
}else if(num>0){//正数
SqStack<Integer> stack = new SqStack<Integer>(16);
int index = num;
while(num!=0){
num = num / hex ;
int remainder = index % hex;//取余压栈
stack.push(remainder);
index = num;
}
Object[] o = popAll(stack);//弹栈取出余数
StringBuilder sb = new StringBuilder();
for(Object i : o){
int in = (int)i;
//取出的数字如果>=10需要用字母代替
if(in>=10){
char c = (char) ('a'+in-10);
sb.append(c);
}else{
sb.append(i);
}
}
return sb.toString();
}else{//负数
num = -num;//先去负号
SqStack<Integer> stack = new SqStack<Integer>(16);
int index = num;
while(num!=0){
num = num / hex ;
int remainder = index % hex;//取余压栈
stack.push(remainder);
index = num;
}
Object[] o = popAll(stack);//弹栈取出余数
StringBuilder sb = new StringBuilder();
sb.append("-");//添加负号
for(Object i : o){
int in = (int)i;
//取出的数字如果>=10需要用字母代替
if(in>=10){
char c = (char) ('a'+in-10);
sb.append(c);
}else{
sb.append(i);
}
}
return sb.toString();
}
} }

StackUtils

  测试:

package test;

import org.junit.Test;

public class test {
@Test
public void fun(){
String s = StackUtils.integerToNhex(123456, 16);
System.out.println("转换得到的16进制数为:"+s);
}
}

栈详解及java实现

校验括号是否匹配

 package test;

 public class StackUtils{

     //表达式括号是否匹配()[]{}
public static boolean isMatch(String str) {
SqStack<Character> stack = new SqStack<Character>(str.length()+1);
char[] arr = str.toCharArray();
for (char c : arr) {
//遇到左括号进栈
if(c=='('||c=='['||c=='{'){
stack.push(c);
}
//遇到右括号匹配栈顶符号
else if(c==')'){
if(stack.isNull()){
return false;//栈为空,匹配失败
}else if(stack.pop()=='('){
continue;//匹配成功继续下一次循环
}else{
return false;//匹配不成功代表该表达式不符合规则
}
}
else if(c==']'){
if(stack.isNull()){
return false;//栈为空,匹配失败
}else if(stack.pop()=='['){
continue;//匹配成功继续下一次循环
}else{
return false;//匹配不成功代表该表达式不符合规则
}
}
else if(c=='}'){
if(stack.isNull()){
return false;//栈为空,匹配失败
}else if(stack.pop()=='{'){
continue;//匹配成功继续下一次循环
}else{
return false;//匹配不成功代表该表达式不符合规则
}
}
}
//如果最后没有右括号但是还存在左括号表示不匹配
return stack.isNull();
} }

isMatch

  测试:

 package test;

 import org.junit.Test;

 public class test {
@Test
public void fun(){
String str1 = "i((l)o[v{e}]y)o{u}!";//表达式1:(()[{}]){}
String str2 = "you((do)[not{}])know{}!)";//表达式2:(()[{}]){})
boolean match1 = StackUtils.isMatch(str1);
boolean match2 = StackUtils.isMatch(str2);
System.out.println("str1中的括号是否匹配:"+match1);
System.out.println("str2中的括号是否匹配:"+match2);
}
}

栈详解及java实现