0x608060405234801561001057600080fd5b50600061001b61006e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055610072565b3390565b6129f8806100816000396000f3fe6080604052600436106100915760003560e01c8063b2ddee0611610059578063b2ddee06146103e8578063cd8ebb2214610421578063de25060414610474578063f2fde38b146104ae578063f772adf1146104e157610091565b806306a3d6e6146100965780636bd3a64b146101d2578063715018a6146102445780638d7c3205146102595780638da5cb5b146103b7575b600080fd5b3480156100a257600080fd5b506101d0600480360360c08110156100b957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100e357600080fd5b8201836020820111156100f557600080fd5b803590602001918460208302840111600160201b8311171561011657600080fd5b919390929091602081019035600160201b81111561013357600080fd5b82018360208201111561014557600080fd5b803590602001918460208302840111600160201b8311171561016657600080fd5b919390929091602081019035600160201b81111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460208302840111600160201b831117156101b657600080fd5b9193509150803590602001356001600160a01b0316610520565b005b3480156101de57600080fd5b50610215600480360360608110156101f557600080fd5b506001600160a01b03813581169160208101359160409091013516610dd6565b604080519485526020850193909352838301919091526001600160a01b03166060830152519081900360800190f35b34801561025057600080fd5b506101d0610e17565b6101d06004803603608081101561026f57600080fd5b810190602081018135600160201b81111561028957600080fd5b82018360208201111561029b57600080fd5b803590602001918460208302840111600160201b831117156102bc57600080fd5b919390929091602081019035600160201b8111156102d957600080fd5b8201836020820111156102eb57600080fd5b803590602001918460208302840111600160201b8311171561030c57600080fd5b919390929091602081019035600160201b81111561032957600080fd5b82018360208201111561033b57600080fd5b803590602001918460208302840111600160201b8311171561035c57600080fd5b919390929091602081019035600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b509092509050610ed5565b3480156103c357600080fd5b506103cc6110c9565b604080516001600160a01b039092168252519081900360200190f35b3480156103f457600080fd5b506101d06004803603604081101561040b57600080fd5b506001600160a01b0381351690602001356110d8565b34801561042d57600080fd5b506101d0600480360360c081101561044457600080fd5b506001600160a01b03813581169160208101359160408201359160608101359160808201359160a00135166111c9565b6101d06004803603608081101561048a57600080fd5b506001600160a01b038135811691602081013591604082013516906060013561166c565b3480156104ba57600080fd5b506101d0600480360360208110156104d157600080fd5b50356001600160a01b03166116cd565b3480156104ed57600080fd5b506101d06004803603606081101561050457600080fd5b506001600160a01b0381351690602081013590604001356117e1565b86610561576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20746f6b656e2049447360a01b604482015290519081900360640190fd5b600185148061056f57508487145b6105b9576040805162461bcd60e51b81526020600482015260166024820152754d69736d61746368696e67207175616e74697469657360501b604482015290519081900360640190fd5b60018314806105c6575060015b61060c576040805162461bcd60e51b81526020600482015260126024820152714d69736d61746368696e672070726963657360701b604482015290519081900360640190fd5b604080516301ffc9a760e01b81526380ac58cd60e01b600482015290516001600160a01b038b16916301ffc9a7916024808301926020929190829003018186803b15801561065957600080fd5b505afa15801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50511561077357886001600160a01b03811663e985e9c56106a2611bd1565b306040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156106f057600080fd5b505afa158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505161076d576040805162461bcd60e51b815260206004820152601d60248201527f4d75737420626520617070726f766564206265666f7265206c6973742e000000604482015290519081900360640190fd5b5061084d565b604080516301ffc9a760e01b8152636cdb3d1360e11b600482015290516001600160a01b038b16916301ffc9a7916024808301926020929190829003018186803b1580156107c057600080fd5b505afa1580156107d4573d6000803e3d6000fd5b505050506040513d60208110156107ea57600080fd5b50511561080957886001600160a01b03811663e985e9c56106a2611bd1565b6040805162461bcd60e51b815260206004820152601460248201527324b73b30b634b21027232a1030b2323932b9b99760611b604482015290519081900360640190fd5b60005b87811015610b5f57600089898381811061086657fe5b604080516301ffc9a760e01b81526380ac58cd60e01b600482015290516020928302949094013594506001600160a01b038f16936301ffc9a7935060248083019392829003018186803b1580156108bc57600080fd5b505afa1580156108d0573d6000803e3d6000fd5b505050506040513d60208110156108e657600080fd5b5051156109c8578a6108f6611bd1565b6001600160a01b0316816001600160a01b0316636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d602081101561096d57600080fd5b50516001600160a01b0316146109c2576040805162461bcd60e51b815260206004820152601560248201527426bab9ba1031329037bbb732b91037b31027232a1760591b604482015290519081900360640190fd5b50610b56565b604080516301ffc9a760e01b8152636cdb3d1360e11b600482015290516001600160a01b038d16916301ffc9a7916024808301926020929190829003018186803b158015610a1557600080fd5b505afa158015610a29573d6000803e3d6000fd5b505050506040513d6020811015610a3f57600080fd5b505115610b56578a6000888410610a695789896000818110610a5d57fe5b90506020020135610a7d565b898985818110610a7557fe5b905060200201355b905080826001600160a01b031662fdd58e610a96611bd1565b866040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b158015610adb57600080fd5b505afa158015610aef573d6000803e3d6000fd5b505050506040513d6020811015610b0557600080fd5b50511015610b53576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103437b6321032b737bab3b41027232a399760511b604482015290519081900360640190fd5b50505b50600101610850565b5060005b87811015610cb4576000898983818110610b7957fe5b9050602002013590506040518060800160405280898990508410610bb05789896000818110610ba457fe5b90506020020135610bc4565b898985818110610bbc57fe5b905060200201355b8152602001868410610be95787876000818110610bdd57fe5b90506020020135610bfd565b878785818110610bf557fe5b905060200201355b815260208082018790526001600160a01b038087166040938401528e1660009081526002825282812085825290915290812090610c38611bd1565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050508080600101915050610b63565b50886001600160a01b0316610cc7611bd1565b6001600160a01b03167f1f652c9026135855be67eb8b1bfbc96c325a447f67d9edc88d394c3c45a9db048a8a8a8a8a8a8a60006001600160a01b03168b6001600160a01b0316148b604051808060200180602001806020018781526020018615158152602001856001600160a01b0316815260200184810384528d8d82818152602001925060200280828437600083820152601f01601f191690910185810384528b8152602090810191508c908c0280828437600083820152601f01601f19169091018581038352898152602090810191508a908a0280828437600083820152604051601f909101601f19169092018290039e50909c50505050505050505050505050a3505050505050505050565b60026020818152600094855260408086208252938552838520905290835291208054600182015492820154600390920154909291906001600160a01b031684565b610e1f611bd1565b6001600160a01b0316610e306110c9565b6001600160a01b031614610e8b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60026001541415610f1b576040805162461bcd60e51b815260206004820152601f602482015260008051602061293b833981519152604482015290519081900360640190fd5b600260015586610f5f576040805162461bcd60e51b815260206004820152600a6024820152694e6f204164647265737360b01b604482015290519081900360640190fd5b848714610fab576040805162461bcd60e51b81526020600482015260156024820152744d69736d61746368696e6720746f6b656e2049447360581b604482015290519081900360640190fd5b828714610ff4576040805162461bcd60e51b81526020600482015260126024820152714d69736d61746368696e67206f776e65727360701b604482015290519081900360640190fd5b808714611041576040805162461bcd60e51b81526020600482015260166024820152754d69736d61746368696e67207175616e74697469657360501b604482015290519081900360640190fd5b60005b878110156110ba576110b289898381811061105b57fe5b905060200201356001600160a01b031688888481811061107757fe5b9050602002013587878581811061108a57fe5b905060200201356001600160a01b03168686868181106110a657fe5b90506020020135611bd5565b600101611044565b50506001805550505050505050565b6000546001600160a01b031690565b6002600154141561111e576040805162461bcd60e51b815260206004820152601f602482015260008051602061293b833981519152604482015290519081900360640190fd5b600260018190556001600160a01b03831660009081526020918252604080822084835290925290812081611150611bd1565b6001600160a01b03168152602081019190915260400160002054116111af576040805162461bcd60e51b815260206004820152601060248201526f2737ba103634b9ba32b21034ba32b69760811b604482015290519081900360640190fd5b6111c182826111bc611bd1565b6124b4565b505060018055565b604080516301ffc9a760e01b81526380ac58cd60e01b600482015290516001600160a01b038816916301ffc9a7916024808301926020929190829003018186803b15801561121657600080fd5b505afa15801561122a573d6000803e3d6000fd5b505050506040513d602081101561124057600080fd5b5051156114045785611250611bd1565b6001600160a01b0316816001600160a01b0316636352211e886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561129d57600080fd5b505afa1580156112b1573d6000803e3d6000fd5b505050506040513d60208110156112c757600080fd5b50516001600160a01b03161461131c576040805162461bcd60e51b815260206004820152601560248201527426bab9ba1031329037bbb732b91037b31027232a1760591b604482015290519081900360640190fd5b806001600160a01b031663e985e9c5611333611bd1565b306040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561138157600080fd5b505afa158015611395573d6000803e3d6000fd5b505050506040513d60208110156113ab57600080fd5b50516113fe576040805162461bcd60e51b815260206004820152601d60248201527f4d75737420626520617070726f766564206265666f7265206c6973742e000000604482015290519081900360640190fd5b50611557565b604080516301ffc9a760e01b8152636cdb3d1360e11b600482015290516001600160a01b038816916301ffc9a7916024808301926020929190829003018186803b15801561145157600080fd5b505afa158015611465573d6000803e3d6000fd5b505050506040513d602081101561147b57600080fd5b5051156108095785846001600160a01b03821662fdd58e61149a611bd1565b896040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156114df57600080fd5b505afa1580156114f3573d6000803e3d6000fd5b505050506040513d602081101561150957600080fd5b5051101561131c576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103437b6321032b737bab3b41027232a399760511b604482015290519081900360640190fd5b6040805160808101825285815260208082018690528183018590526001600160a01b038085166060840152891660009081526002825283812089825290915291822090916115a3611bd1565b6001600160a01b039081168252602080830193909352604091820160002084518155928401516001840155908301516002830155606090920151600390910180546001600160a01b0319169183169190911790558616611601611bd1565b6040805188815260208101889052808201879052606081018690526001600160a01b038581168015608084015260a0830152915192909116917fe52684a5a20c6fa5a196c62108b480dd4eaf0d45a6d0bbcec2ce39ceff96553b9181900360c00190a3505050505050565b600260015414156116b2576040805162461bcd60e51b815260206004820152601f602482015260008051602061293b833981519152604482015290519081900360640190fd5b60026001556116c384848484611bd5565b5050600180555050565b6116d5611bd1565b6001600160a01b03166116e66110c9565b6001600160a01b031614611741576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166117865760405162461bcd60e51b815260040180806020018281038252602681526020018061295b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60026001541415611827576040805162461bcd60e51b815260206004820152601f602482015260008051602061293b833981519152604482015290519081900360640190fd5b600260018190556001600160a01b03841660009081526020918252604080822085835290925290812081611859611bd1565b6001600160a01b03168152602081019190915260400160002080549091506118bb576040805162461bcd60e51b815260206004820152601060248201526f2737ba103634b9ba32b21034ba32b69760811b604482015290519081900360640190fd5b604080516301ffc9a760e01b81526380ac58cd60e01b600482015290516001600160a01b038616916301ffc9a7916024808301926020929190829003018186803b15801561190857600080fd5b505afa15801561191c573d6000803e3d6000fd5b505050506040513d602081101561193257600080fd5b505115611a135783611942611bd1565b6001600160a01b0316816001600160a01b0316636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561198f57600080fd5b505afa1580156119a3573d6000803e3d6000fd5b505050506040513d60208110156119b957600080fd5b50516001600160a01b031614611a0d576040805162461bcd60e51b81526020600482015260146024820152732737ba1037bbb734b733903a34329034ba32b69760611b604482015290519081900360640190fd5b50611b66565b604080516301ffc9a760e01b8152636cdb3d1360e11b600482015290516001600160a01b038616916301ffc9a7916024808301926020929190829003018186803b158015611a6057600080fd5b505afa158015611a74573d6000803e3d6000fd5b505050506040513d6020811015611a8a57600080fd5b50511561080957805484906001600160a01b03821662fdd58e611aab611bd1565b876040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b158015611af057600080fd5b505afa158015611b04573d6000803e3d6000fd5b505050506040513d6020811015611b1a57600080fd5b50511015611a0d576040805162461bcd60e51b81526020600482015260146024820152732737ba1037bbb734b733903a34329034ba32b69760611b604482015290519081900360640190fd5b600181018290556001600160a01b038416611b7f611bd1565b6001600160a01b03167f3c33e65e8698294810b631d476d60b44425303828da0b1f8b635231bfda12be28585604051808381526020018281526020019250505060405180910390a35050600180555050565b3390565b611bdd612909565b506001600160a01b03808516600090815260026020818152604080842088855282528084208786168552825292839020835160808101855281548152600182015492810192909252918201549281019290925260030154909116606082015281611c81576040805162461bcd60e51b815260206004820152601060248201526f496e76616c6964207175616e7469747960801b604482015290519081900360640190fd5b8051611cc7576040805162461bcd60e51b815260206004820152601060248201526f2737ba103634b9ba32b21034ba32b69760811b604482015290519081900360640190fd5b8051821115611d13576040805162461bcd60e51b81526020600482015260136024820152722737ba1032b737bab3b41037b71039b0b6329760691b604482015290519081900360640190fd5b604080516301ffc9a760e01b81526380ac58cd60e01b600482015290516001600160a01b038716916301ffc9a7916024808301926020929190829003018186803b158015611d6057600080fd5b505afa158015611d74573d6000803e3d6000fd5b505050506040513d6020811015611d8a57600080fd5b505115611e68576000859050836001600160a01b0316816001600160a01b0316636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611de457600080fd5b505afa158015611df8573d6000803e3d6000fd5b505050506040513d6020811015611e0e57600080fd5b50516001600160a01b031614611e62576040805162461bcd60e51b81526020600482015260146024820152732737ba1037bbb734b733903a34329034ba32b69760611b604482015290519081900360640190fd5b50611fae565b604080516301ffc9a760e01b8152636cdb3d1360e11b600482015290516001600160a01b038716916301ffc9a7916024808301926020929190829003018186803b158015611eb557600080fd5b505afa158015611ec9573d6000803e3d6000fd5b505050506040513d6020811015611edf57600080fd5b50511561080957805160408051627eeac760e11b81526001600160a01b03868116600483015260248201889052915188939284169162fdd58e916044808301926020929190829003018186803b158015611f3857600080fd5b505afa158015611f4c573d6000803e3d6000fd5b505050506040513d6020811015611f6257600080fd5b50511015611e62576040805162461bcd60e51b81526020600482015260146024820152732737ba1037bbb734b733903a34329034ba32b69760611b604482015290519081900360640190fd5b8060400151611fbb61283c565b101561200e576040805162461bcd60e51b815260206004820152601860248201527f4974656d206973206e6f742062757961626c65207965742e0000000000000000604482015290519081900360640190fd5b602081015161201d9083612840565b341015612071576040805162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f75676820616d6f756e7420746f20627579206974656d2e0000604482015290519081900360640190fd5b60608101516001600160a01b0316156120df5761208c611bd1565b6001600160a01b031681606001516001600160a01b0316146120df5760405162461bcd60e51b81526004018080602001828103825260218152602001806129a26021913960400191505060405180910390fd5b6000836001600160a01b031661210284846020015161284090919063ffffffff16565b604051600081818185875af1925050503d806000811461213e576040519150601f19603f3d011682016040523d82523d6000602084013e612143565b606091505b5050905080612199576040805162461bcd60e51b815260206004820181905260248201527f466978656453616c653a204f776e6572207472616e73666572206661696c6564604482015290519081900360640190fd5b604080516301ffc9a760e01b81526380ac58cd60e01b600482015290516001600160a01b038816916301ffc9a7916024808301926020929190829003018186803b1580156121e657600080fd5b505afa1580156121fa573d6000803e3d6000fd5b505050506040513d602081101561221057600080fd5b5051156122a357856001600160a01b03166342842e0e8561222f611bd1565b886040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561228657600080fd5b505af115801561229a573d6000803e3d6000fd5b505050506123ac565b856001600160a01b031663f242432a856122bb611bd1565b8887604051806020016040528060008152506040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561234357818101518382015260200161232b565b50505050905090810190601f1680156123705780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561239357600080fd5b505af11580156123a7573d6000803e3d6000fd5b505050505b856001600160a01b03166123be611bd1565b83516001600160a01b03918216918716907f57d8d9cd489eb6f4aa398aa92b49d164d28fde9e7000b5c186bf1b3647a9ebb79089906123fd34826128a2565b60408051938452602084019290925282820152519081900360600190a4815183101561245d5781516001600160a01b0380881660009081526002602090815260408083208a845282528083209389168352929052209084900390556124ac565b6001600160a01b0380871660009081526002602081815260408084208a855282528084209489168452939052918120818155600181018290559182015560030180546001600160a01b03191690555b505050505050565b6124bc612909565b506001600160a01b03808416600081815260026020818152604080842088855282528084208787168552825292839020835160808101855281548152600182015481840152928101548385015260030154909416606082015281516301ffc9a760e01b81526380ac58cd60e01b6004820152915190936301ffc9a79260248082019391829003018186803b15801561255357600080fd5b505afa158015612567573d6000803e3d6000fd5b505050506040513d602081101561257d57600080fd5b50511561265b576000849050826001600160a01b0316816001600160a01b0316636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125d757600080fd5b505afa1580156125eb573d6000803e3d6000fd5b505050506040513d602081101561260157600080fd5b50516001600160a01b031614612655576040805162461bcd60e51b81526020600482015260146024820152732737ba1037bbb734b733903a34329034ba32b69760611b604482015290519081900360640190fd5b506127ae565b604080516301ffc9a760e01b8152636cdb3d1360e11b600482015290516001600160a01b038616916301ffc9a7916024808301926020929190829003018186803b1580156126a857600080fd5b505afa1580156126bc573d6000803e3d6000fd5b505050506040513d60208110156126d257600080fd5b50511561080957805184906001600160a01b03821662fdd58e6126f3611bd1565b876040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561273857600080fd5b505afa15801561274c573d6000803e3d6000fd5b505050506040513d602081101561276257600080fd5b50511015612655576040805162461bcd60e51b81526020600482015260146024820152732737ba1037bbb734b733903a34329034ba32b69760611b604482015290519081900360640190fd5b6001600160a01b03808516600081815260026020818152604080842089855282528084209588168085529582528084208481556001810185905592830193909355600390910180546001600160a01b0319169055815187815291519293927f9ba1a3cb55ce8d63d072a886f94d2a744f50cddf82128e897d0661f5ec6231589281900390910190a350505050565b4290565b60008261284f5750600061289c565b8282028284828161285c57fe5b04146128995760405162461bcd60e51b81526004018080602001828103825260218152602001806129816021913960400191505060405180910390fd5b90505b92915050565b60008082116128f8576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161290157fe5b049392505050565b604051806080016040528060008152602001600081526020016000815260200160006001600160a01b03168152509056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f7520617265206e6f7420656c696761626c6520746f20627579206974656d2ea26469706673582212208afc7523f9a50462cc080474f69859de952f5281b01d6d17974894f7773119cb64736f6c634300060c0033