0x6080604052600436106102605760003560e01c80637bae52e111610144578063b2bdfa7b116100b6578063d51ed1c81161007a578063d51ed1c8146106eb578063d78e139d1461070b578063dd62ed3e1461072b578063f2fde38b14610771578063f6a78e1714610791578063f887ea40146107a657600080fd5b8063b2bdfa7b14610656578063bc33718214610676578063ccf8c03614610696578063cec10c11146106b6578063d148b74c146106d657600080fd5b8063918924761161010857806391892476146105b657806395d89b41146102e75780639acb773e146105d65780639f11080e146105f6578063a8aa1b3114610616578063a9059cbb1461063657600080fd5b80637bae52e11461051b5780637d1db4a51461053b578063893d20e8146105515780638a4068dd146105835780638da5cb5b1461059857600080fd5b806323b872dd116101dd5780635d0044ca116101a15780635d0044ca146104595780636ddd17131461047957806370a082311461049a578063715018a6146104d057806377b54bad146104e557806378109e541461050557600080fd5b806323b872dd146103c85780632b112e49146103e8578063313ce567146103fd5780633eb2d169146104195780635b24ea5e1461043957600080fd5b8063095ea7b311610224578063095ea7b31461033d5780631161ae391461035d57806313f97a8e1461037d57806318160ddd1461039d5780631df4ccfc146103b257600080fd5b806304368f651461026c5780630445b6671461028e5780630621472c146102b757806306fdde03146102e757806308fd3d051461031c57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004611edf565b6107c6565b005b34801561029a57600080fd5b506102a460245481565b6040519081526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d2366004611f22565b61081b565b60405190151581526020016102ae565b3480156102f357600080fd5b5060408051808201825260068152655365656b414960d01b602082015290516102ae9190611f3d565b34801561032857600080fd5b506023546102d790600160a01b900460ff1681565b34801561034957600080fd5b506102d7610358366004611f8b565b61082f565b34801561036957600080fd5b506102d7610378366004611fa7565b61089b565b34801561038957600080fd5b5061028c610398366004611fdf565b6108af565b3480156103a957600080fd5b506005546102a4565b3480156103be57600080fd5b506102a460125481565b3480156103d457600080fd5b506102d76103e33660046120b6565b610945565b3480156103f457600080fd5b506102a4610a07565b34801561040957600080fd5b50604051600981526020016102ae565b34801561042557600080fd5b5061028c6104343660046120f2565b610a59565b34801561044557600080fd5b5061028c61045436600461212d565b610aae565b34801561046557600080fd5b5061028c610474366004612164565b610b03565b34801561048557600080fd5b506023546102d790600160a81b900460ff1681565b3480156104a657600080fd5b506102a46104b5366004611f22565b6001600160a01b031660009081526008602052604090205490565b3480156104dc57600080fd5b5061028c610b6c565b3480156104f157600080fd5b506102d7610500366004611f8b565b610be0565b34801561051157600080fd5b506102a460075481565b34801561052757600080fd5b5061028c61053636600461217d565b610ce0565b34801561054757600080fd5b506102a460065481565b34801561055d57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102ae565b34801561058f57600080fd5b5061028c610d69565b3480156105a457600080fd5b506000546001600160a01b031661056b565b3480156105c257600080fd5b5061028c6105d13660046121e2565b610db4565b3480156105e257600080fd5b5061028c6105f136600461212d565b610e7a565b34801561060257600080fd5b5061028c610611366004611fa7565b610ecf565b34801561062257600080fd5b5060235461056b906001600160a01b031681565b34801561064257600080fd5b506102d7610651366004611f8b565b610f04565b34801561066257600080fd5b5060005461056b906001600160a01b031681565b34801561068257600080fd5b5061028c610691366004612164565b610f11565b3480156106a257600080fd5b5061028c6106b136600461212d565b610f7a565b3480156106c257600080fd5b5061028c6106d1366004612225565b610fe2565b3480156106e257600080fd5b5061028c61101d565b3480156106f757600080fd5b506102a4610706366004612164565b611051565b34801561071757600080fd5b5061028c610726366004612164565b611098565b34801561073757600080fd5b506102a4610746366004612251565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561077d57600080fd5b5061028c61078c366004611f22565b6110e7565b34801561079d57600080fd5b5061028c6111d1565b3480156107b257600080fd5b5060215461056b906001600160a01b031681565b6000546001600160a01b031633146107f95760405162461bcd60e51b81526004016107f090612284565b60405180910390fd5b60238054921515600160a81b0260ff60a81b1990931692909217909155602455565b60006108298260001961082f565b92915050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088a9086815260200190565b60405180910390a350600192915050565b6000826108a783611051565b119392505050565b6000546001600160a01b031633146108d95760405162461bcd60e51b81526004016107f090612284565b60005b82518110156109405781600c60008584815181106108fc576108fc6122b9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610938816122e5565b9150506108dc565b505050565b6001600160a01b0383166000908152600960209081526040808320338452909152812054600019146109f2576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526009825283812033825290915291909120546109cd9184906112cc565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b6109fd848484611306565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610a54906003546001600160a01b0316600090815260086020526040902054610a4e90600554906116e7565b906116e7565b905090565b6000546001600160a01b03163314610a835760405162461bcd60e51b81526004016107f090612284565b60238054941515600160a01b0260ff60a01b1990951694909417909355601591909155601455601655565b6000546001600160a01b03163314610ad85760405162461bcd60e51b81526004016107f090612284565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b81526004016107f090612284565b6103e8600554610b3d91906122fe565b6007541015610b4b57600080fd5b6103e881600554610b5c9190612320565b610b6691906122fe565b60075550565b6000546001600160a01b03163314610b965760405162461bcd60e51b81526004016107f090612284565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336000908152600b602052604081205460ff16610bfc57600080fd5b81600003610c6f576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6c9190612337565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612350565b6000546001600160a01b03163314610d0a5760405162461bcd60e51b81526004016107f090612284565b601780546001600160a01b03199081166001600160a01b03978816179091556018805482169587169590951790945560198054851693861693909317909255601b80548416918516919091179055601a80549092169216919091179055565b336000908152600b602052604090205460ff16610d8557600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610db1573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610dde5760405162461bcd60e51b81526004016107f090612284565b600d8690556010859055600e849055600f8390556011829055610e0f82610e09858188818c8c611729565b90611729565b6012556013819055610e226005826122fe565b60125410610e725760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e2032302500000060448201526064016107f0565b505050505050565b6000546001600160a01b03163314610ea45760405162461bcd60e51b81526004016107f090612284565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610ef95760405162461bcd60e51b81526004016107f090612284565b601f91909155602055565b6000610a00338484611306565b6000546001600160a01b03163314610f3b5760405162461bcd60e51b81526004016107f090612284565b6103e8600554610f4b91906122fe565b6006541015610f5957600080fd5b6103e881600554610f6a9190612320565b610f7491906122fe565b60065550565b6000546001600160a01b03163314610fa45760405162461bcd60e51b81526004016107f090612284565b6001600160a01b039091166000908152600a60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b6000546001600160a01b0316331461100c5760405162461bcd60e51b81526004016107f090612284565b601491909155601591909155601655565b6000546001600160a01b031633146110475760405162461bcd60e51b81526004016107f090612284565b61104f611788565b565b600061082961105e610a07565b6023546001600160a01b03166000908152600860205260409020546110929061108b906002905b90611208565b8590611208565b9061128a565b601a5447906001600160a01b03166108fc60646110b58585612320565b6110bf91906122fe565b6040518115909202916000818181858888f19350505050158015610940573d6000803e3d6000fd5b6000546001600160a01b031633146111115760405162461bcd60e51b81526004016107f090612284565b6001600160a01b0381166111765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111fb5760405162461bcd60e51b81526004016107f090612284565b6005546007819055600655565b60008260000361121a57506000610829565b60006112268385612320565b90508261123385836122fe565b14610a005760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107f0565b6000610a0083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b6f565b600081848411156112f05760405162461bcd60e51b81526004016107f09190611f3d565b5060006112fd848661236d565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561134857506001600160a01b0383166000908152600c602052604090205460ff16155b6113845760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b60448201526064016107f0565b60255460ff16156113a15761139a848484611b9d565b9050610a00565b6001600160a01b03841660009081526001602052604090205460ff161580156113e357506001600160a01b03831660009081526001602052604090205460ff16155b1561143857602354600160a01b900460ff166114385760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107f0565b6001600160a01b03841660009081526001602052604090205460ff1615801561146a57506001600160a01b0383163014155b801561148457506003546001600160a01b03848116911614155b801561149e57506023546001600160a01b03848116911614155b80156114b85750601b546001600160a01b03848116911614155b80156114d257506018546001600160a01b03848116911614155b80156114f757506001600160a01b0383166000908152600b602052604090205460ff16155b15611598576001600160a01b0383166000908152600860205260409020546007546115228483612380565b11156115965760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107f0565b505b6115a28483611c71565b6115aa611cde565b156115b7576115b7611788565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600890915291909120546116099184906112cc565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff168061165657506001600160a01b0384166000908152600a602052604090205460ff165b61166a57611665858486611d34565b61166c565b825b6001600160a01b0385166000908152600860205260409020549091506116929082611729565b6001600160a01b038086166000818152600860205260409081902093909355915190871690600080516020612433833981519152906116d49085815260200190565b60405180910390a3506001949350505050565b6000610a0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112cc565b6000806117368385612380565b905083811015610a005760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107f0565b6025805460ff19166001179055601f546020546000916117a79161089b565b6117b357600d546117b6565b60005b905060006117da60026110926012546110928660245461120890919063ffffffff16565b905060006117f3826024546116e790919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061182d5761182d6122b9565b6001600160a01b03928316602091820292909201015260025482519116908290600190811061185e5761185e6122b9565b6001600160a01b03928316602091820292909201015260215460405163791ac94760e01b81524792919091169063791ac947906118a8908690600090879030904290600401612393565b600060405180830381600087803b1580156118c257600080fd5b505af11580156118d6573d6000803e3d6000fd5b5050505060006118ef82476116e790919063ffffffff16565b9050600061190a61190188600261128a565b601254906116e7565b9050600061191f60026110928481878d611208565b9050600061193c83611092600e548761120890919063ffffffff16565b90506000611959846110926010548861120890919063ffffffff16565b9050600061197685611092600f548961120890919063ffffffff16565b6018546040519192506000916001600160a01b039091169085908381818185875af1925050503d80600081146119c8576040519150601f19603f3d011682016040523d82523d6000602084013e6119cd565b606091505b50506019546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611a1d576040519150601f19603f3d011682016040523d82523d6000602084013e611a22565b606091505b5050601a546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611a72576040519150601f19603f3d011682016040523d82523d6000602084013e611a77565b606091505b5060009250508b159050611b575760215460175460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611af5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b1a9190612404565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506025805460ff1916905550505050505050505050565b60008183611b905760405162461bcd60e51b81526004016107f09190611f3d565b5060006112fd84866122fe565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611bee9184906112cc565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611c1d9083611729565b6001600160a01b03808516600081815260086020526040908190209390935591519086169060008051602061243383398151915290611c5f9086815260200190565b60405180910390a35060019392505050565b60065481111580611c9a57506001600160a01b0382166000908152600b602052604090205460ff165b611cda5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107f0565b5050565b6023546000906001600160a01b03163314801590611cff575060255460ff16155b8015611d145750602354600160a81b900460ff165b8015610a5457505060245430600090815260086020526040902054101590565b601654602354600091906001600160a01b0390811690841603611d5a5750601454611d75565b6023546001600160a01b0390811690861603611d7557506015545b6000611da26013546064611d899190612320565b611092846110856012548a61120890919063ffffffff16565b90506000611dc16012546110926011548561120890919063ffffffff16565b90506000611dcf83836116e7565b30600090815260086020526040902054909150611dec9082611729565b3060009081526008602052604080822092909255601b546001600160a01b031681522054611e1a9083611729565b601b546001600160a01b0390811660009081526008602090815260409182902093909355518381523092918b1691600080516020612433833981519152910160405180910390a38115611eab57600554611e7490836116e7565b6005556004546040518381526001600160a01b03918216918a16906000805160206124338339815191529060200160405180910390a35b611eb587846116e7565b98975050505050505050565b8015158114610db157600080fd5b8035611eda81611ec1565b919050565b60008060408385031215611ef257600080fd5b8235611efd81611ec1565b946020939093013593505050565b80356001600160a01b0381168114611eda57600080fd5b600060208284031215611f3457600080fd5b610a0082611f0b565b600060208083528351808285015260005b81811015611f6a57858101830151858201604001528201611f4e565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611f9e57600080fd5b611efd83611f0b565b60008060408385031215611fba57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ff257600080fd5b823567ffffffffffffffff8082111561200a57600080fd5b818501915085601f83011261201e57600080fd5b813560208282111561203257612032611fc9565b8160051b604051601f19603f8301168101818110868211171561205757612057611fc9565b60405292835281830193508481018201928984111561207557600080fd5b948201945b8386101561209a5761208b86611f0b565b8552948201949382019361207a565b96506120a99050878201611ecf565b9450505050509250929050565b6000806000606084860312156120cb57600080fd5b6120d484611f0b565b92506120e260208501611f0b565b9150604084013590509250925092565b6000806000806080858703121561210857600080fd5b843561211381611ec1565b966020860135965060408601359560600135945092505050565b6000806040838503121561214057600080fd5b61214983611f0b565b9150602083013561215981611ec1565b809150509250929050565b60006020828403121561217657600080fd5b5035919050565b600080600080600060a0868803121561219557600080fd5b61219e86611f0b565b94506121ac60208701611f0b565b93506121ba60408701611f0b565b92506121c860608701611f0b565b91506121d660808701611f0b565b90509295509295909350565b60008060008060008060c087890312156121fb57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060006060848603121561223a57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561226457600080fd5b61226d83611f0b565b915061227b60208401611f0b565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016122f7576122f76122cf565b5060010190565b60008261231b57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610829576108296122cf565b60006020828403121561234957600080fd5b5051919050565b60006020828403121561236257600080fd5b8151610a0081611ec1565b81810381811115610829576108296122cf565b80820180821115610829576108296122cf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123e35784516001600160a01b0316835293830193918301916001016123be565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561241957600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f211cc7efc947ac6e2191c1a0a408f1002141c0c52d07e242d4029aeef85fb6f64736f6c63430008110033
0x6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326009600a620006f1565b62000042906305f5e10062000702565b6005556200007c6064620000686002600554620004c160201b620012081790919060201c565b6200055860201b6200128a1790919060201c565b600655620000a26064620000686002600554620004c160201b620012081790919060201c565b6007556000600d556009600e556000600f5560016010556000601155601154600f54600d54600e54601054620000d991906200071c565b620000e591906200071c565b620000f191906200071c565b620000fd91906200071c565b60125560646013819055601481815560158290556103e8601655601f5560208190556023805461ffff60a01b1916600160a81b1790556005546127109162000146919062000702565b62000152919062000732565b6024553480156200016257600080fd5b50600080546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350602180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000248919062000755565b600280546001600160a01b0319166001600160a01b039283161790556021546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd919062000755565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af11580156200031f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000345919062000755565b602380546001600160a01b039283166001600160a01b0319918216811783556022805483169091179055306000818152600960209081526040808320602154881684528252808320600019905533808452600a8352818420805460ff199081166001908117909255601980548b1687528487208054831684179055838752600b8652848720805483168417905598548a168652838620805482168317905588548a1686528386208054821683179055601880548b168752848720805483168417905596865283862080549091169091179055601780548716821790558454861673c88dbe5462845708f9667bab843d7e0b82bd50ef17909455855485168417909555601a80548516733c011a093cd2a4e2f7b901d0315430b8f4bcf219179055600354601b80549095169616959095179092556005548183526008855283832081905592519283529290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620007d0565b600082600003620004d55750600062000552565b6000620004e3838562000702565b905082620004f2858362000732565b146200054f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200054f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005a260201b60201c565b60008183620005c65760405162461bcd60e51b815260040162000546919062000780565b506000620005d5848662000732565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000635578160001904821115620006195762000619620005de565b808516156200062757918102915b93841c9390800290620005f9565b509250929050565b6000826200064e5750600162000552565b816200065d5750600062000552565b81600181146200067657600281146200068157620006a1565b600191505062000552565b60ff841115620006955762000695620005de565b50506001821b62000552565b5060208310610133831016604e8410600b8410161715620006c6575081810a62000552565b620006d28383620005f4565b8060001904821115620006e957620006e9620005de565b029392505050565b60006200054f60ff8416836200063d565b8082028115828204841417620005525762000552620005de565b80820180821115620005525762000552620005de565b6000826200075057634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200076857600080fd5b81516001600160a01b03811681146200054f57600080fd5b600060208083528351808285015260005b81811015620007af5785810183015185820160400152820162000791565b506000604082860101526040601f19601f8301168501019250505092915050565b61248880620007e06000396000f3fe6080604052600436106102605760003560e01c80637bae52e111610144578063b2bdfa7b116100b6578063d51ed1c81161007a578063d51ed1c8146106eb578063d78e139d1461070b578063dd62ed3e1461072b578063f2fde38b14610771578063f6a78e1714610791578063f887ea40146107a657600080fd5b8063b2bdfa7b14610656578063bc33718214610676578063ccf8c03614610696578063cec10c11146106b6578063d148b74c146106d657600080fd5b8063918924761161010857806391892476146105b657806395d89b41146102e75780639acb773e146105d65780639f11080e146105f6578063a8aa1b3114610616578063a9059cbb1461063657600080fd5b80637bae52e11461051b5780637d1db4a51461053b578063893d20e8146105515780638a4068dd146105835780638da5cb5b1461059857600080fd5b806323b872dd116101dd5780635d0044ca116101a15780635d0044ca146104595780636ddd17131461047957806370a082311461049a578063715018a6146104d057806377b54bad146104e557806378109e541461050557600080fd5b806323b872dd146103c85780632b112e49146103e8578063313ce567146103fd5780633eb2d169146104195780635b24ea5e1461043957600080fd5b8063095ea7b311610224578063095ea7b31461033d5780631161ae391461035d57806313f97a8e1461037d57806318160ddd1461039d5780631df4ccfc146103b257600080fd5b806304368f651461026c5780630445b6671461028e5780630621472c146102b757806306fdde03146102e757806308fd3d051461031c57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004611edf565b6107c6565b005b34801561029a57600080fd5b506102a460245481565b6040519081526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d2366004611f22565b61081b565b60405190151581526020016102ae565b3480156102f357600080fd5b5060408051808201825260068152655365656b414960d01b602082015290516102ae9190611f3d565b34801561032857600080fd5b506023546102d790600160a01b900460ff1681565b34801561034957600080fd5b506102d7610358366004611f8b565b61082f565b34801561036957600080fd5b506102d7610378366004611fa7565b61089b565b34801561038957600080fd5b5061028c610398366004611fdf565b6108af565b3480156103a957600080fd5b506005546102a4565b3480156103be57600080fd5b506102a460125481565b3480156103d457600080fd5b506102d76103e33660046120b6565b610945565b3480156103f457600080fd5b506102a4610a07565b34801561040957600080fd5b50604051600981526020016102ae565b34801561042557600080fd5b5061028c6104343660046120f2565b610a59565b34801561044557600080fd5b5061028c61045436600461212d565b610aae565b34801561046557600080fd5b5061028c610474366004612164565b610b03565b34801561048557600080fd5b506023546102d790600160a81b900460ff1681565b3480156104a657600080fd5b506102a46104b5366004611f22565b6001600160a01b031660009081526008602052604090205490565b3480156104dc57600080fd5b5061028c610b6c565b3480156104f157600080fd5b506102d7610500366004611f8b565b610be0565b34801561051157600080fd5b506102a460075481565b34801561052757600080fd5b5061028c61053636600461217d565b610ce0565b34801561054757600080fd5b506102a460065481565b34801561055d57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102ae565b34801561058f57600080fd5b5061028c610d69565b3480156105a457600080fd5b506000546001600160a01b031661056b565b3480156105c257600080fd5b5061028c6105d13660046121e2565b610db4565b3480156105e257600080fd5b5061028c6105f136600461212d565b610e7a565b34801561060257600080fd5b5061028c610611366004611fa7565b610ecf565b34801561062257600080fd5b5060235461056b906001600160a01b031681565b34801561064257600080fd5b506102d7610651366004611f8b565b610f04565b34801561066257600080fd5b5060005461056b906001600160a01b031681565b34801561068257600080fd5b5061028c610691366004612164565b610f11565b3480156106a257600080fd5b5061028c6106b136600461212d565b610f7a565b3480156106c257600080fd5b5061028c6106d1366004612225565b610fe2565b3480156106e257600080fd5b5061028c61101d565b3480156106f757600080fd5b506102a4610706366004612164565b611051565b34801561071757600080fd5b5061028c610726366004612164565b611098565b34801561073757600080fd5b506102a4610746366004612251565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561077d57600080fd5b5061028c61078c366004611f22565b6110e7565b34801561079d57600080fd5b5061028c6111d1565b3480156107b257600080fd5b5060215461056b906001600160a01b031681565b6000546001600160a01b031633146107f95760405162461bcd60e51b81526004016107f090612284565b60405180910390fd5b60238054921515600160a81b0260ff60a81b1990931692909217909155602455565b60006108298260001961082f565b92915050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088a9086815260200190565b60405180910390a350600192915050565b6000826108a783611051565b119392505050565b6000546001600160a01b031633146108d95760405162461bcd60e51b81526004016107f090612284565b60005b82518110156109405781600c60008584815181106108fc576108fc6122b9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610938816122e5565b9150506108dc565b505050565b6001600160a01b0383166000908152600960209081526040808320338452909152812054600019146109f2576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526009825283812033825290915291909120546109cd9184906112cc565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b6109fd848484611306565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610a54906003546001600160a01b0316600090815260086020526040902054610a4e90600554906116e7565b906116e7565b905090565b6000546001600160a01b03163314610a835760405162461bcd60e51b81526004016107f090612284565b60238054941515600160a01b0260ff60a01b1990951694909417909355601591909155601455601655565b6000546001600160a01b03163314610ad85760405162461bcd60e51b81526004016107f090612284565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b81526004016107f090612284565b6103e8600554610b3d91906122fe565b6007541015610b4b57600080fd5b6103e881600554610b5c9190612320565b610b6691906122fe565b60075550565b6000546001600160a01b03163314610b965760405162461bcd60e51b81526004016107f090612284565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336000908152600b602052604081205460ff16610bfc57600080fd5b81600003610c6f576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6c9190612337565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612350565b6000546001600160a01b03163314610d0a5760405162461bcd60e51b81526004016107f090612284565b601780546001600160a01b03199081166001600160a01b03978816179091556018805482169587169590951790945560198054851693861693909317909255601b80548416918516919091179055601a80549092169216919091179055565b336000908152600b602052604090205460ff16610d8557600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610db1573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610dde5760405162461bcd60e51b81526004016107f090612284565b600d8690556010859055600e849055600f8390556011829055610e0f82610e09858188818c8c611729565b90611729565b6012556013819055610e226005826122fe565b60125410610e725760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e2032302500000060448201526064016107f0565b505050505050565b6000546001600160a01b03163314610ea45760405162461bcd60e51b81526004016107f090612284565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610ef95760405162461bcd60e51b81526004016107f090612284565b601f91909155602055565b6000610a00338484611306565b6000546001600160a01b03163314610f3b5760405162461bcd60e51b81526004016107f090612284565b6103e8600554610f4b91906122fe565b6006541015610f5957600080fd5b6103e881600554610f6a9190612320565b610f7491906122fe565b60065550565b6000546001600160a01b03163314610fa45760405162461bcd60e51b81526004016107f090612284565b6001600160a01b039091166000908152600a60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b6000546001600160a01b0316331461100c5760405162461bcd60e51b81526004016107f090612284565b601491909155601591909155601655565b6000546001600160a01b031633146110475760405162461bcd60e51b81526004016107f090612284565b61104f611788565b565b600061082961105e610a07565b6023546001600160a01b03166000908152600860205260409020546110929061108b906002905b90611208565b8590611208565b9061128a565b601a5447906001600160a01b03166108fc60646110b58585612320565b6110bf91906122fe565b6040518115909202916000818181858888f19350505050158015610940573d6000803e3d6000fd5b6000546001600160a01b031633146111115760405162461bcd60e51b81526004016107f090612284565b6001600160a01b0381166111765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111fb5760405162461bcd60e51b81526004016107f090612284565b6005546007819055600655565b60008260000361121a57506000610829565b60006112268385612320565b90508261123385836122fe565b14610a005760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107f0565b6000610a0083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b6f565b600081848411156112f05760405162461bcd60e51b81526004016107f09190611f3d565b5060006112fd848661236d565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561134857506001600160a01b0383166000908152600c602052604090205460ff16155b6113845760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b60448201526064016107f0565b60255460ff16156113a15761139a848484611b9d565b9050610a00565b6001600160a01b03841660009081526001602052604090205460ff161580156113e357506001600160a01b03831660009081526001602052604090205460ff16155b1561143857602354600160a01b900460ff166114385760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107f0565b6001600160a01b03841660009081526001602052604090205460ff1615801561146a57506001600160a01b0383163014155b801561148457506003546001600160a01b03848116911614155b801561149e57506023546001600160a01b03848116911614155b80156114b85750601b546001600160a01b03848116911614155b80156114d257506018546001600160a01b03848116911614155b80156114f757506001600160a01b0383166000908152600b602052604090205460ff16155b15611598576001600160a01b0383166000908152600860205260409020546007546115228483612380565b11156115965760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107f0565b505b6115a28483611c71565b6115aa611cde565b156115b7576115b7611788565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600890915291909120546116099184906112cc565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff168061165657506001600160a01b0384166000908152600a602052604090205460ff165b61166a57611665858486611d34565b61166c565b825b6001600160a01b0385166000908152600860205260409020549091506116929082611729565b6001600160a01b038086166000818152600860205260409081902093909355915190871690600080516020612433833981519152906116d49085815260200190565b60405180910390a3506001949350505050565b6000610a0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112cc565b6000806117368385612380565b905083811015610a005760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107f0565b6025805460ff19166001179055601f546020546000916117a79161089b565b6117b357600d546117b6565b60005b905060006117da60026110926012546110928660245461120890919063ffffffff16565b905060006117f3826024546116e790919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061182d5761182d6122b9565b6001600160a01b03928316602091820292909201015260025482519116908290600190811061185e5761185e6122b9565b6001600160a01b03928316602091820292909201015260215460405163791ac94760e01b81524792919091169063791ac947906118a8908690600090879030904290600401612393565b600060405180830381600087803b1580156118c257600080fd5b505af11580156118d6573d6000803e3d6000fd5b5050505060006118ef82476116e790919063ffffffff16565b9050600061190a61190188600261128a565b601254906116e7565b9050600061191f60026110928481878d611208565b9050600061193c83611092600e548761120890919063ffffffff16565b90506000611959846110926010548861120890919063ffffffff16565b9050600061197685611092600f548961120890919063ffffffff16565b6018546040519192506000916001600160a01b039091169085908381818185875af1925050503d80600081146119c8576040519150601f19603f3d011682016040523d82523d6000602084013e6119cd565b606091505b50506019546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611a1d576040519150601f19603f3d011682016040523d82523d6000602084013e611a22565b606091505b5050601a546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611a72576040519150601f19603f3d011682016040523d82523d6000602084013e611a77565b606091505b5060009250508b159050611b575760215460175460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611af5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b1a9190612404565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506025805460ff1916905550505050505050505050565b60008183611b905760405162461bcd60e51b81526004016107f09190611f3d565b5060006112fd84866122fe565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611bee9184906112cc565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611c1d9083611729565b6001600160a01b03808516600081815260086020526040908190209390935591519086169060008051602061243383398151915290611c5f9086815260200190565b60405180910390a35060019392505050565b60065481111580611c9a57506001600160a01b0382166000908152600b602052604090205460ff165b611cda5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107f0565b5050565b6023546000906001600160a01b03163314801590611cff575060255460ff16155b8015611d145750602354600160a81b900460ff165b8015610a5457505060245430600090815260086020526040902054101590565b601654602354600091906001600160a01b0390811690841603611d5a5750601454611d75565b6023546001600160a01b0390811690861603611d7557506015545b6000611da26013546064611d899190612320565b611092846110856012548a61120890919063ffffffff16565b90506000611dc16012546110926011548561120890919063ffffffff16565b90506000611dcf83836116e7565b30600090815260086020526040902054909150611dec9082611729565b3060009081526008602052604080822092909255601b546001600160a01b031681522054611e1a9083611729565b601b546001600160a01b0390811660009081526008602090815260409182902093909355518381523092918b1691600080516020612433833981519152910160405180910390a38115611eab57600554611e7490836116e7565b6005556004546040518381526001600160a01b03918216918a16906000805160206124338339815191529060200160405180910390a35b611eb587846116e7565b98975050505050505050565b8015158114610db157600080fd5b8035611eda81611ec1565b919050565b60008060408385031215611ef257600080fd5b8235611efd81611ec1565b946020939093013593505050565b80356001600160a01b0381168114611eda57600080fd5b600060208284031215611f3457600080fd5b610a0082611f0b565b600060208083528351808285015260005b81811015611f6a57858101830151858201604001528201611f4e565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611f9e57600080fd5b611efd83611f0b565b60008060408385031215611fba57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ff257600080fd5b823567ffffffffffffffff8082111561200a57600080fd5b818501915085601f83011261201e57600080fd5b813560208282111561203257612032611fc9565b8160051b604051601f19603f8301168101818110868211171561205757612057611fc9565b60405292835281830193508481018201928984111561207557600080fd5b948201945b8386101561209a5761208b86611f0b565b8552948201949382019361207a565b96506120a99050878201611ecf565b9450505050509250929050565b6000806000606084860312156120cb57600080fd5b6120d484611f0b565b92506120e260208501611f0b565b9150604084013590509250925092565b6000806000806080858703121561210857600080fd5b843561211381611ec1565b966020860135965060408601359560600135945092505050565b6000806040838503121561214057600080fd5b61214983611f0b565b9150602083013561215981611ec1565b809150509250929050565b60006020828403121561217657600080fd5b5035919050565b600080600080600060a0868803121561219557600080fd5b61219e86611f0b565b94506121ac60208701611f0b565b93506121ba60408701611f0b565b92506121c860608701611f0b565b91506121d660808701611f0b565b90509295509295909350565b60008060008060008060c087890312156121fb57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060006060848603121561223a57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561226457600080fd5b61226d83611f0b565b915061227b60208401611f0b565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016122f7576122f76122cf565b5060010190565b60008261231b57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610829576108296122cf565b60006020828403121561234957600080fd5b5051919050565b60006020828403121561236257600080fd5b8151610a0081611ec1565b81810381811115610829576108296122cf565b80820180821115610829576108296122cf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123e35784516001600160a01b0316835293830193918301916001016123be565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561241957600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f211cc7efc947ac6e2191c1a0a408f1002141c0c52d07e242d4029aeef85fb6f64736f6c63430008110033