["$ dictionary..G$ ","","ETAOIEEE IDictionary code that was benchmarked: C#IAAIString key always exists in Dictionary; ContainsKey is used.IAA// 1. Get random number.AIint n = r.Next(m);IAA// 2. Get random string.AIstring k = l[n];IAA// 3. See if it exists.AIbool hit = false;Aif (d.ContainsKey(k))A{AEhit = true;A}AAIList code that was benchmarked: C#IAAIString key always exists in List; foreach-loop is used.IAA// 1. Get random number.AIint n = r.Next(m);IAA// 2. Get random string.AIstring k = l[n];IAA// Loop through strings to see if it exists.AIbool hit = false;Aforeach (string s2 in l2)A{AEif (s2 == k)AE{AEEhit = true;AEEbreak;AE}A}INumber, Dictionary ms, List msIAA1 655T453A2 702T577A3 702T670A4 655T749A5 686T811A6 702T874A7 687T936A8 702T1014A9 702T1077A10 702T1108A11 687T1170A12 718T1232I","A*fAErDe(LdBBC~XC|FA666FA666(CP(BBB/(CXC","Lookup times"," are different in List and Dictionary. We compare them in the C# language targeting the .NET Framework. We determine the point at which Dictionary becomes more efficient for lookups than List.","510px","390px","Intro."," First, whenever you look up a value in a Dictionary, the runtime must compute a hash code from the key. This is usually implemented by some low-level bit shifting or modulo divisions, which is fast. ","GetHashCode ","gethashcode","Modulo ","modulo","However: ","Computing the hash value has some overhead. Also, there is substantial overhead in constructing Dictionaries in the first place.","Example: ","Whenever you add items to the Dictionary, the hash keys must be computed and the values must be stored in the buckets.","Benchmark."," My experiment didn't include Dictionary construction. I focused on how long it takes to look up an item. Some limitations were that the keys were all strings, the lookup always succeeded, and the keys were all 12 characters long. ","This test used random path names (\"dliu3ms0.idt\") generated by Path.GetRandomFileName, an easy way to get random strings.","Results."," Here are the benchmark results for this article. I tested collection sizes of 1 to 12 elements. The index of the string item matched was random, which should average to about the middle index. ","Result: ","My test showed that when you exceed three items, the Dictionary lookup is faster. You can see a graph above.","Discussion."," This test uses only 12 character long strings. It uses only generic collections, and doesn't examine Hashtable, HybridDictionary or SortedDictionary. In my experience, collections like HybridDictionary are not often useful. ","Hashtable ","hashtable","HybridDictionary ","hybriddictionary","SortedDictionary ","sorteddictionary","Here are guidelines"," for choosing between List or Dictionary. I suggest using Dictionary when the number of lookups greatly exceeds the number of insertions. It is fine to use List when you will always have fewer than four items.","Perhaps most important,"," though, are the edge cases in your programs. If there is any possibility that there will be thousands of elements, always use Dictionary. This will make the program usable in edge cases. ","When uniqueness is important, Dictionary or Hashtable can automatically check for duplicates. This can lead to simpler code.","Summary."," For lookups, Dictionary is usually a better choice. The time required is flat, an O(1) constant time complexity. The List has an O(N) linear time complexity. Three elements can be looped over faster than looked up in a Dictionary. ","Thus: ","I use three elements as the threshold when I will switch to Dictionary lookups from List loops."]

%iVBORw0KG;)NSUhEUg?AG4?ACCAgM?ADasxWR)DFBMVEX/6Nn:/+VlZX29va5ksB5)SElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOS?LWyrsxEHLD)AElFTkSuQmCC%iVBORw0KG;)NSUhEUg?AeM?AFxCAM?AB3BzBC?ABrVBMVEXn5+eVlZU6Og?OmZmOgBmtrYAOjqQ27aQ29u2/9u+S0j:/8?ADl3t7AzdzPi4natrY6kNvbkDpmtv:/7Zymca2ZgD/tmb/25DEXFlbisHj2NiGhoaFpszb:/hz86YstHP1+CdtdLHbmvOhoTXrKvDX1y7ydve1tbJcnDEY2FKfrvexMRtlcXLfHrKd3Wsv9bdwL+nvNXe4eXFaGbWp6b:9sAZraQ2:AVFLSlZPE0N1ThL2QOgDTnZy2:/NgX+/UE1m?DT2uF7n8mwwtdhjsQ6ZrZmOpA6)OpCKg4OPrM5mAGalpaWUsNDY3ePSmZfWta2xWliQOma2ZjqmZWSebGtcdqnKbWuOr9VmkNuQZgCfn5/e5uZmZra2/7Y6AGY?Do?Gbb/7ZmADoAZpA6OpA6ZmaQOjq2tmY6ADpmZma1UkqzUFOsU1qkV2GeWmmTXnOAZoXCVlRkcqKZcnFRe7RxdJyUd3aQZpCKiophib2vfYnThILViYfIj5DXj43b/9ultdZmttvktbS2xtm1yuM6Ojrv0tHS3+7z3d3d5/L57u7u8/nSwC14?AM1ElEQVR4Xuzd1XcjORaA8TxXlZEhzMzM0MwwzLjMzMz0N68VV0ex15Vy2lHfzt3ve/D4zEvP5HfktHTKVz1+u/LHGfOmFOR8vxjY1+sYtTXOP/yGMc7f+SDnlzb88qcHjVdfSRibSsb4zc1izs/m/PWvbzZefWVhnM34dePiqW7xnPGj3t5f9l5V9EjQeH0vqJdru457e64sEjQ2FRu/j7/a33jVY4xx/jgIPj84NTbL+bPN8FWJMcbRYYyxrjAmjAljwlg+jAljwpgwlg9jwpgwJozlw5gwJowJY/kwJowJY8JYPowJY8KYMJYPY8KYMCaM5cOYMFYcxoQx1banUqqNEU4deZ53qNsYYZN2Y4S9VeXGCHvjk6LGdiZqOK/JzkS9GmOEK2uJ8/aSM1HL7/uljaaZqFdtjLD8nD0D7HCWIsLyxobVzkR1YIywuLHxbbOOH/V2Ht1/y3vRt9++3/u/fShpvL5XJ3Y4E5U1LD8TtRSYVyczURFWuT9GWLsxwtqNEdZujLB2Y4S1GyOMMcIKjBFWbIwwxggrMEYYY4QVGCOMMcIKjBHGGOHX25gmx0abhTFWVe1ZatwzWWGMFZVIp1atrxXGWEnp7RGra4UxVtLs0ynPZoUx1tHA2sJRK/DI9hJzBNT4zm+1+q6m0glmRajZAldafadTz0JfjBWUeNryCT0+OlZj5oum1po+oyuHawPM9dHVWMX6Hs1bX4y1lLYHHQv7s8zn0tfS1NkKTiWYwaawgXnvRaM15uwprDZ6Jjw/wCxFhSXsZIepWeZlamx/ywtbTTMTVWNrFS9s/BlzbzWWHm+a7ICxupZGvLCtp0YYY20NLNgNsd0uYaynyUO7IZ60ABgr2y61bojdJz/31k68VT73Nl3xwkaWegQSnHtrJ96qnntbm/fCptMCwKLzMu2kTNVzb8e2QuHKmACvtLGdeKt37u3kQii8ZTfErGNVc2/f9sKe3+8VSHzurZ14q3Xu7cBIKFyR+EUsP/fWTrxVO/d22wsbTfRoNGZ/PDsdCk/PqryLD+NEygvbjlrEGCs59RgZUHmnJsaJ0VD4aN+pHcbypx4Lkz0ajTGunZ16jOm8/xjj/a0unqnFmFMPjOXbPwqJu/jqA8acemAsVy0VCh+5eSAPY3nhI4FTD4wlhLecnnpgLC/sLbjZMGEsLyzwNA/GAsIOvvyAMcIYI4yxtDDGCGOMMMYIYywvjDHCGCOMMcIYdzFp2o0wxvLCWwLCGAuMTnMtjLG88JEDYYzlGxsXGKyFscj4Q8+FMMbywqsCo9MwFhhw6Wh0GsbywlMCwhjL3PgwteQSAGN54RFnwhgLNjnqvYL7ADAW/+KSabxLYYzX94Ig0zL21hrLX3I5PtYlAMZ2zJ4de2uNxS+5rKx1D4Cxoc00Dc2UNh6rXO2dHhj7peBevx1+K26cXn3pRwAwXv9FfzbYaBUOR5Q3rWPBubc/f+696C0XQ2qVz73Nf5y/84c3DlqNsxk:+Vm27G3fu81u+SSvVMxyOXv9LcbfptpHntrjRVccukg9seil1yyjs24amfG8pdcYmw/p90Yy19yifH6GwdOjeUvucTYz8p/VsdfcikYn9Xyl1zKx2e1/CWXrONjgc9qkUsu5WN/LH/JpQ1jrZdc2jAWuORSSRgPCF9yaeMs0/Wk+Hnx7RL7Y/3XPbA/FrjkUksni32FvhW1+2P56x7kfaszphv/h3unxKi95FK3b5ge4x3zvxVVtW/iCi+5fJJcHiwUCg8Gk0OXAhhKDj8uVGdeqqr94zrytVVfqXH+4SeOPqtXlm/F/pAen4SnHl1ccpm8OXijEPGzj8Nt+S90QW19bdUJFet4om93ppMKN+0ll5dcxEMTgw8Ku3HLzAluPLX1ba0wvKPhDOTJcMeffu98:KXXJ4k/9jh56uljsB1RR3je+2NJ/pmOu6HnZ562JUxN3MNs74KjE8en19gc4sfRXLdLMy8871Q+Ds/ezDU2c4jskLf4F+Syfqnd/XSy25ip+elGrJ/XGe+csalYMOcdXVlbN1su3Fuv/PCfvDTOsDc8spL+RZuDC4mP4r42TvA7Zza+sqfZX7xsTnr6tp4qG@F+wSjjn1+O6PZ8L6di7je6swuJx8ErfMHOLGU1tfeeMrWMeLcy2bophGvbBf/+q82/JKtK9VejycPLncMovAdUhtfeWN/fJd8w3yroyHHuw27YfiR3pMnzv1SDbts/om4nYerzxmRawsNy3hwQ5WWHqr6dSj5bykOvzktfLFeLh1EcaXanPqsRNxaCLvyzMCw03rrxOA2lTEqcfi3GvpyzMC1bMlnOwMYLbSIJ62i7jp93qML8b549M1Wbpn3cx7h88IFOzfhztqLTzZOky0B1gsXOyLsVmUWYuaf3jg+vtOK7fsvraDDr1GazFHZRf5YmxGd5Rvn/6a/dNeEOTC9xm:LVj83o3+Gyz/Le7G8WcX759Fc9z2Z1qx1umymwPRRv/572ZqN77VwOsaFxLG+E6brw38J8eNNZ1NlN/a/5lMefiea74LdNI7SIAjPtmops7t46zOWts3ht443k656N82/h/8vDAwfNc8Vum1MUAGM9dYFw1xuYvWW3XccO47l06Nfaz39pwMA8kfssUNxEA43/ciiTe/atZlGZ0muE0v4vNzJ7wfcZvGJuTy4Zx+Zubro3jt0zkO8yM3HL4PFf8lsl9GGczF55l1hf8vf6Yubfdb5nId11P1M7JDNmrv8bMvb3OWyaMjW697ufeym+ZMD4OgrZ7J3P6tRE191bHlol1nDGu3c+9vf88JP5Jb5voQzljM+i2vruOmHurY8vEHAFzh0TM3Fu2TMyKSGjfMmGcWFW6ZcLYEivdMmFsiTVvmTC2xEfPdMpgbInTLgB41sc8pefYWJoYY/vAnitjp8QY:v3XlS:WfDuHzbPJn3FfOQgCNjp8QY/8aL7t0z42zG6Tp2Sozxu150lTNj85CPQ2OnxBj/fTqS+Ed/tsbma8XujIWJ+S5MxnxW1/9h1rJ7Y/3E7I/1E2Osnxhj/cQY6yfGWD8xxvqJMdZPjLF+Yoz1E2Osnxhj/cQY6yfGWD8xxvqJMdZPjLF+YozX1BNjPKWeGOOUemKMJ+e9kSWFABgTxjrCmDAmjAlj92FcshNvzas+Y4zzdz7IRc69VRHGb24Wc5FzbzWEcTbjF3ORc28VhPH6XlAv1/XcW/mYe+tHZxZxzNzb7iNp4+i5t8T+mDAmjOXDmDAmjAlj+TAmjAljwlg+jAljwpgwlg9jwpgwJozlw5gwJowJY/kwJowJY8JYPowJY8KYMJYPY8KYMCaM5cOYMCaMCWP3YRzO5NI89xbj8vt+aUP53Fv2TgZY9dxbjA2r7rm3GBtfX/PcW+beru/ViVXPvWUdl4Ig+PyAubfsjwljwpgwlgtjwpgwJozlw5gwJowJY/kwJowJY8JYPowJY8KYMJYPY8KYMCaM5cOYMCaMCWP5MCaMCWPCWD6MCWPCmDCWD2PCmDB+3cJY/9xbjPXPvcVY/9xbjIvOZqLSf9s7n9a4YSCKk/Q/noskI+9JHyPeSyjsqWvoMbc9JZSQ5FuEAvnYHTxIhXbf0JQAwrwHCHmexl75x0ghNvii1zpGCa/3eMqO9uP7smEgZGzfltggEDLGung7j6fskXH/ol7PmCJjiowpMqbImCJjiozJmCJjiozHQ/D+zQ283RF6qkkSuphIGPA5l3LeiiJ6PfgzJXgzwLPOIgl52gILnLVfxuP3x+B+QhkqQm/8dkrIKfiX/HBv3O4epE4z9GIwC8za3o8551kL0sB96XmtngK0fMYw72afXcaQlaeYgKGY0BRiUCxf4aztufpZz1pkbYjxegeAsiwFw8/OWq0WXI8hZshKNclS8OXuMOP8v4w1azOMc/IXT7g/ApL+mhvwvcOrBlhxwcrxRnWc07ANxvYJZZ8xUk5eGjRwsaqD6XtbeQ5o1nAn9xmD+9IvY385E7OAh/+2xIyjl5ad6o+zOwMEUmQpIKd+HRp41p612n3hMwmKjCkypsiYjCkypsiYImOKjCkypsiYImMypsiYImOKjCkyxi9eXV2HP6PoeXuWGYzpV2R8e5n+nfF4SGAMGNeDyPjucXm+Dgpsd0zTu/eynGQpSn6tb5E0aHApWsEiswUGi2uKdWrWczvSgAR7/b4HkfGXh8+N8e1+kqQda+NSNK59TYjrAKtPi6tlnZr1Uo92T590XJw7AULGSmXOlbG2T3sFqZ3xELKIrCw1Ia/btjFucevULGlHxw86TgO9UCbjq4fLYLXYGLc6thF/17HFrVOzXixcGVtmFyLjIUrQnfXj7zq2jbloUFsjpX2ZB2Pc4tapWT/b0VG7Ict26/gXOJUmVs5NMw4)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?AOo?ADYCAM?ADS+I/a)nFBMVEX::5+/3z9vs3ZKU3Y6QJEBs?AD2+PwJEBo2YqKEpda0yObw9PrV4PE7a7A4Zaf4+v04Zqhrk84IDxjy9vvv8/o7a7Hb5fPp7/g6aa48bbO/0eo8bbRQgMX+/v+Gp9fs8fn1+Pxdicm2yud4ndLX4vLh6fWqweNslM6eud/8/f6SsNvg6fXa5PPA0erd5vTq8Pj7/P7t8vne5/SXOKY)HrUlEQVR4XuyZ246jMBBE+0eqbe7kPjP7:+22mBRmWGRCI49iPR5quTtyHS5BbIt1Lfn1qu8AV/nf3h5A9q7aitvwHnATjUBNqvWwIZhD7CtELZC2KnarFoDG4Zhs2oNbNvSfrFtyRrYMOwBtlqyy8a5bghdCPtdIQAXnFHu+lSpWtTArmcVj5S7bmA8cpA9A9IfCtk3gHuXFaJp2rdZIYrOAShdVUgUOhAuG5Xt0ZYI9MV6Q3Ie0BHZDKf1DaxTeKpkM8IlUHkRXwH9ek0SZlXJZmyBegg1sF6THO8NfFSyGd2aO3C8KtmiagUEVfRRotu3dfhBjCYf4DS2+nG73Ll9aFJVXQBrKYWsv4z4hKq6CF42KWT/UPUmqdCFcIVIIXt5IINo/KmS3KpXVwJOrlWz0DN+VklO1aLGHXE4xJuygZeSUbXCqOoiRCPIploDVdHcVcuspiSXKuBEBlVEq/IB3qZqTdUZ0zS1RLLcq3yAW6CfFU112ZAc29IVI4d4U64Qz5JhB5YOgdJPTNOfKpEMNJ0DUHfFVDTDrBLJSbwpG3iDrr5phtA0nqa/Q+JZPfHd0ommv0TaBua7Jbj1psej6pGEn/o0Se9VUBXr9vvvjmFWmVQXhDHxow/D3LYU/3J0jSbxQwM/JA2B7TwNYxKZhJep9kBViBQVUD5t+h/Cvco0BtX5w.hCMOrVA8/tqV1ouQ8wDQG1fkw/UskhNep+vL7tvSMZ4pT1XSnKkXlSn50jBCdm1WGBbOqmmZWp6wVJZ/33vxkAz+EBQ0cwpIGjuJve3e23SYMhAFYeF+y72lrNc5xL6qcJHbe/+FKcKgRw0QiPxOPbf47SScX38FFIyFoHBSMjYjQPvDD38XsI5FSeatMtfRntgkglbfiNfCCUnEnjhU6ufRCqiRA2un1B8X0e511/2mp/3S+Rs3LA+fzjDo8L/cP4QMCv02T1O6gnJuMekr6f6ypdOBXRj2n/fAi7ncT0lWePiH1M2pF/5rKDJiKfnwbLY7KK70MaDLqgGZNZQbMgMabbLDnq4C0USrXT0oIESrv3DcqB42ipr2VVAdRhWpCBhpJ5a82QhWUUihOdd9MfXlKdyIunn7Wv6Q41QFU4L70xFF5KE51klT61DzPVDu1iYeO1i6ns9mCkVLolqhgtZQK15VSaq4vxamuBhWogXOqzamQNMkiSoWS/YA71naYH3CkNEmhCqjAbSlauknF;Rd8Xy65Knob+yU7MR+jZp46RHSfUbt0vXqmlq5Xk2DrFf5EuKCKyGioH6OxiMPNBpfZdSrcn+vk29blAa684w675b7h+QOjFeF8dQkKuTP4veamtwcfTg+XrOOj5eAFKDGW8Fq6SmvHBa0MgSkPpVgGaksdZHfjiazCSzlE7bKU2cb6qweNakVFdT8Bxym8lD+DtwfH2GXtTlqOtFMP6qlx7CUp/Lz6gl2WWWemteYaBIuI0LtJ1FWeepy89S8NNnUvKh8DZwPYVR8XrWd6STVPk6mHfRf6tl7JKlYteTpoqmMk6eGrZYN/NCRUqGLeoZSeav8EdGAlEJ5KmPdAhX9/Z5FUxPd1LA0C0x1MdS31/wG/EaaoWFrC21PK@NMOrb8yZvpBkYtl77e6mr2tTXguWVNAPD1mvH1Q+cVJ76XAxpBoat17aMNSzVT7U7QLXCVMdSE4iaqKey1rNyRkQ62ldqxT7wzlKTz6nX40sPejk+YqmrHaXyQanNzKs2al5dSVLD1maqJWu9tl4qXgOnqIf/7Qerl4rHkqj5t6qfek2exB0poQYXcfi8egLPq02E3Ja0Vkt4yGSjtQbGs0MrGzw7QDWSVHwXQj9VaG+ppToFVMF9YDXUvd7dJ/Pq/j6zIdXS/j6JI4s4vc9XcSuJtqfmklT8LIR+quoTLni89arIuaX7OKk8ldyB4dNol5W7EKvtU8m8qvWMIZ7nYgRPjmqjqjkPLE9Vc8pbnqrw7L4gFX8jo186D3xFpQqoIu/ZnISvqRIq/vYUkeJUfF6VeScOkwpVSzJvOhIpQMWsZL0q8P6qgBRb3gi+lcxLFVHxd80JdFtUbxHnPUVfunfoctNepchiM02xnaim0tvSstBeltp3zt0VmynAa3NUHuoAKDzZFNu35bZzt8VmCvDaLJWXAlS4hPi07ZzXTAFem6EKSBVTXUCqnupcFNUFobhUnuq+TrX7SAWkaqn89x+oVAG1zmTjaNt1CfUEkMrNqzVLCEfb9DMPvQ5AFayWyPFKrzBMJX6zVCiq/eYoXcQp+pKsdCxgVSvV/9Vn/VjciUtxK461ItJht7Tz3B2y/cxA/i2gUn8v66/65DEABaSm4svDbD83wHyp+Cbr79J+AIpQK+oztp8byEg1+kWhfAY0bD83UPdDrxzTWUCqmkqZe0vF/5ci/VQLxxwM1RwM1RwM1RwM1RwM1RwM1WyXagxAFXCKUs23UE1LFV3Z0IE6KxtAiqRimcn11/4Dbh0LQJEM6YeEuf7QH8R+qXgOSPXECsVojIRTbXRC9WON+iiE8vu9eBQ5+X3gpiLtxKsltVSBGrjJAEz9VBrEqZ9KgyL1U2k4oXaq/rTUltpSW2pLbaktVcHKRlfwfWCVkdkH3vn8A1A/ImDHrezo)AElFTkSuQmCC%iVBORw0KG;)NSUhEUg?AMg?ABJCAM?ABPapnR)MFBMVEX::9amn+z879o6Lx:rj:T/MTH95OP/9PT8ubj/?Dj0cTR/+3b6drx9O/W9ORYTpHN?AEfklEQVR4XtWa23KzOgyF0cFHkvT933Y3wa4QQYPr/RPqdUenhnwjLUUSmYYRs6tinqaQiACAvoVhIAp3q3KOHwmyFsQhMITi5pgf5PNWfoho3ETMHARDBGNxOGZOeU+kAqgOMLyFD4jC3+TIuAZRAWT2u+iewkUcjr8vJa+Alg+PSAQ52iCPbIniBT53yyVUjHDALiCYTflwFQcpSyiZFqH8F0g0R/TCcQjinOOV16HKX0HiKocKCDTB18sC/yVOCwk+XberZ/Vnwt+AxGIHd1vfLIDUuw+IdUBQAtJxSNstVhL6oNVZZ1bqSUcqkSqhkkLuPwhSL4ttYzu9HEKpZpowf84iTmc7TD1ej9IjsMq5HKTDdq5Uu+fTEgG8qh2lWAF4Ub0MiPM832/O8XL9OuLLiSOL0K9AgiSQAYI7cwJv5gTAdbSdThFauqdJnaF4nO19XrdB3hs69HkrCG8pwuwrCDMjGF2Dne19XhcQjZjf5p0AeUc+bUCYudzb7fYPEA+yferyugnij8MhoZN7O2YuaTszP4RDRKd43W4TCkd9VFJjCxHIdeQfEHeTdhT5sR/DeIrXBUTHitSYIBwwF+ZINURUQJ4cTkCkkgPGZ7mrIU1lU+LcnVYq1EAbpQ6vC2K+qz9XDj+r707d5jxju/JF5YC707cmSdfcIGrxup1ZBVzTwdf+V04J3eKmAgA1VYx7C/KBsMXrZvFNe2MCGN3qvC4L9ebelxAKSNq.AtIaPG6NdnAbpTibu3TIOWvRf6+sbOA6LWBLd/mdVcDonvfec82YToGkTgJogkScoPgf/Xwu3XsfabxqjDUI8JB+4/ll9zta/4WFtWn4Eahxes3xZF8Vk7X1D5ajbLXHCFXgfHYg2y3ZaeEcEiZz/BlPJ61oZLEbw2I0laZg5M9sTbOxsyq2ixCTFTQhGP7hBzZ6c9bj/iwCaz0Im7RDwi8FHrHXL2bOzIZPKw0lAobkMTRSQDVZOa7utj2veTBFypJAXDrFbGHH3njAOtlYersYv/Jbo5CiZ6E76DKp7cSAMcB6e/hNQjYGPptxWE7BGGzLZTqSyfM6y17eA8pKmjVDpmLe3swizZDfw+vsz5ssl5eN7aDeCDsWHueM68frYgdiwlpLcTYuWU7a15vX8eG9i3bwYET5vWmJ6h1XfsB/8ndXBdIf96et5vrAGl37RVe7wexvY7Xet12YejYqF/odfu/U6NrJx3uxlPhBK8b8YMO117rdVmr6OkpjeR14RaSKFv0Tte2nwr/lt7pgY9WrzbYKQikYLn2Qq+L9JYqeOl25zsv5sTy3gqNbvyDXu/9vY4WfsLr/fTtIwn2e91umPvp+0nwb3pdxBoFwQL5q163UchvIYBSOMHrZ/8Q97XMInhKZkRLnV4fTLbXB5M9HI8lu/kbTHYdHU66vY5+zMyyB57BZM87Y8j+oe+YAZF+geWt10gOcYvqUpleAul6aCxfGO/XB+CwRrUBODrmG4/TmCDTBGsMiqM1V1J1vVDgNJSYy0yzCJGIEH8H8R86J7+C+8H8W)ABJRU5Er@ggg==%iVBORw0KG;)NSUhEUg?AG4?ACCAgM?ADasxWR)DFBMVEXZ7::/+VlZX29vYl5th1)SElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOS?LWyrsxEHLD)AElFTkSuQmCC%iVBORw0KG;)NSUhEUg?AII?ACCCAM?AC93eDP)MFBMVEX7r11HR0f8yZHLklZZUEmyg1P8uXLjoVmLbE5pWUrAi1X+6tPVmFfyqVx4YUz:v3zEySO?ABHElEQVR4Xu3cS4rDQAxF0av6+5fsf7ed0ANDV8b1GvLOCu5AWMhg83w5UkOgpeP58k5IyKTfhIZQeyckpNKTA7GDhFiiIdb4KmZmZmZmZnadH1ysdMYHpxOc4ISbE5zgBCc4oesTKDG7WGrEZGOtGpPBWjkmlbUu+TTCNiUA4nl8gHoeB4B2S+wsF390lnuopxGqehRg1z6YmJdlRqBIp3FelgWFqp5GyOpphEu6JudleSFRxw0xs1xHxDZqR+Tc7k3dQb2syy4ruO0A2tO6dBYb8pOy62/7PWZZfttHBXCCfhy7/PXCJj+sI8vfLwwQNwwU8j0PW0ZkHyUiytiRMDMzMzMzM2v6gIRY4kDs0H/wrv/s/3/8/ED/C4gfHWoMKlwF198)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?ALw?AByC)ADMwOSz?ACe0lEQVR4Xu3csY7kMAgG4Lz/86Wkp6ZAokDy6RTfodVsTDSaxPy7/uux9a0LZpkEb20YNzNVEWYmItr/hYiYWcS8Tcw2cKv8DTPtoxCzqFfC+wGXgCchYlGvgDfp9MBd/xNsIj7otL8XHwC8x14Sq04/Yine4tRvwEvP6ypqPXp+dgneY+nbaZPwHscOh7eww+HDjoL/uJ1m4D3scPjYFw8fawDxUWjw8LErFP7TB7/z0/jYFA8fB4+Il1iQh47UwF:fvrfLPV/t0WEj+52Ev5yjWc96y/MNNrdR/EX6yRZuxb3Z/Ge10lu1/MsPm9auZXFS09iL4n3DE+tLD5vQrQsPi+U1ArjJcELAv7Og/eeAT4+cor3r2lbVPk7Sk30ODeEt3R/QcZ7YXxWbKgB47kyPis2;y3ynhP8K00frw9lcbbD8bz3fiFJ0S8jvEyCb/wioy30nhZ+Kz/Mz3CPa8S0h7hI9+AtMeOeIb3cBRswGO7UviFfwO48Au/8Au/8OhfUgu/8EkzUhqvNfELr8h4+cV477EuGvSw0sPnPaz06BHbDOJHp/UrMf6TkYVfD9RagndkvCI/vpfSeAN+9yDbn0rjPdnfEPCC+JpWS/BUGJ8PGWldfH46XBifzy1oXXw+qkOF8dE1wr2Cful4uC7epQdu7OLimBRpRfzlmkDiw1kjNRFmmjehto9DLJZNeT2P1zfG66jKbKAjDzbGCkS8Iw/zxhJAfGyLiI9aj4iPRYg3ToQeEB87EyLepQcLnyzEwIceER8VEwT/6fu0JuKDzwSA/yifWGbhIxb+y2wWm9DDJnc+UtE7HwOfXOTB/KX1o37bppq3efkDT4lpi2pYKzI)ASUVORK5CYII=!A%iVBORw0KG;)NSUhEUg?ANI)9C)AD94GjJ?ADQklEQVR4Xt3awW4yMQwE4P+heLq8VJ7HZ5/nOtf8DS61QIFJCt0I5kKlKM1+8tpit/3XLiEBd7cedwfYVG63kG1/WpAIt0H8PosYb8G0Cp7Bi0nJGcRHqNT8GsWrQ19L4ggijpM7ZGD2d6Rm6ya5Q5foWJI26R2qRAeTtMmliaJEf0ty01kmmSjRfhKWSRAl2k5y0QxyR248ggTLeET0RpDWu4lmh5HcAbJlCElyAPzZROi5DDuKRMq5dHsm2WQNMFg+inQvy2dStN9+EkS3q+YfcHeTKEiqTKJK2EBqgiR22Hgtq/4eJH9A4u0A3X3j4QlSehOwh4Rfk/yccaflQ+XuIc550t1nb2RBDiHpiazDCwg9Q7GzbSPR1o9EiHAOR+Rw7iHBfnffdVAtp9OpfOXxLs8cQKKbrY9wdpGjgyJtluR/QYI9SlsoUj1NkvATdx5NmjsQWSTrQFVbRtBzNIkr4w5fonoNsO+CfVu/f4yOc++fxdrtQrRk8QvAajlvsBaJX1fLKRjlfGp8SpLPipJUNOk2UAs/HZr6SJDqComzjRQmlG6qWCRVtVBPpUSdxqRYwJcRkmSYFQWpA84qihsPjdF3/aOohUgNQ5LKmRwWno8qLxkPud27qZwi/pBkeYXdLBauCp56XnVW3H9TJIMWJQm0GioqkiVJLbQYD9ckC07OhzJNMmhRmtgZHVVfSArP@TN1JmYJJkUJSlqw1eSAlfM6l2Sd6x114XEqwDDMmmRhWiKRHKWlM01IKXQY5T/Exe6+Nre6WZdVHM+tNDZmJQyRcIdUjZTSZJ+ujDO0Xk+PFLytIggyRsvBkQdkALdlz1JyoRJUV5/PlvYkASgWwCsjYcyIOUhLUmqANCicHtM21KZ8Pge9xSJtWuqlXukFt4kyTL5VI1W4hlne0WilZKkX+Rp0WZStNIzJKhv7Mc+1UbnrZCUaAHz+tcp+QVipZeUaCspW+mJiQd77pL2v+Y3vFi0/524cV60n0RqUZK0aD+J8XwNkg/+om4Pvv75newjDS5PPAPCprKVpMOPI3l7JxJmSPw4Etqnkbx9Gsnbm5Fc33XvRmpU/yf+fqQewsX/5r8bKUIiZe4A21vmP24hqdv1SRFy)AElFTkSuQmCC!