60806040523480156200001157600080fd5b506040805180820182526006815265105d985b1bdd60d21b602080830191825283518085019094526004845263105313d560e21b9084015281519192916200005c91600291620000eb565b50805162000072906003906020840190620000eb565b5050506200008f620000896200009560201b60201c565b62000099565b620001ce565b3390565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000f99062000191565b90600052602060002090601f0160209004810192826200011d576000855562000168565b82601f106200013857805160ff191683800117855562000168565b8280016001018555821562000168579182015b82811115620001685782518255916020019190600101906200014b565b50620001769291506200017a565b5090565b5b808211156200017657600081556001016200017b565b600181811c90821680620001a657607f821691505b60208210811415620001c857634e487b7160e01b600052602260045260246000fd5b50919050565b61213380620001de6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635f8e26a71161010457806395d89b41116100a2578063b88d4fde11610071578063b88d4fde1461045d578063c87b56dd14610470578063e985e9c514610483578063f2fde38b146104bf57600080fd5b806395d89b4114610409578063a22cb46514610411578063aaca3d7d14610424578063ae169a501461044a57600080fd5b8063715018a6116100de578063715018a6146103ca57806374310355146103d25780638da5cb5b146103e55780638f2fc60b146103f657600080fd5b80635f8e26a71461035b5780636352211e1461039657806370a08231146103a957600080fd5b80632a55205a1161017157806342842e0e1161014b57806342842e0e146102ff57806342966c681461031257806355f804b3146103255780635c3622331461033857600080fd5b80632a55205a146102975780632f1d5a60146102c957806336dbd2f9146102dc57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630e25072314610251578063127effb21461027157806323b872dd1461028457600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611967565b6104d2565b60405190151581526020015b60405180910390f35b6102046104e3565b6040516101f391906119dc565b61022461021f3660046119ef565b610575565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004611a24565b61060f565b005b61026461025f366004611a4e565b610725565b6040516101f39190611ad4565b600a54610224906001600160a01b031681565b61024f610292366004611b18565b61080e565b6102aa6102a5366004611b54565b61083f565b604080516001600160a01b0390931683526020830191909152016101f3565b61024f6102d7366004611b76565b6108eb565b6101e76102ea3660046119ef565b6000908152600e602052604090205460ff1690565b61024f61030d366004611b18565b610986565b61024f6103203660046119ef565b6109a1565b61024f610333366004611c30565b6109d7565b6101e76103463660046119ef565b600e6020526000908152604090205460ff1681565b6103816103693660046119ef565b6000908152600d602052604090205463ffffffff1690565b60405163ffffffff90911681526020016101f3565b6102246103a43660046119ef565b610a18565b6103bc6103b7366004611b76565b610a8f565b6040519081526020016101f3565b61024f610b16565b61024f6103e0366004611c79565b610b4c565b6008546001600160a01b0316610224565b61024f610404366004611d1f565b610bda565b610204610c0e565b61024f61041f366004611d62565b610c1d565b6103816104323660046119ef565b600d6020526000908152604090205463ffffffff1681565b61024f6104583660046119ef565b610c28565b61024f61046b366004611d93565b610c6d565b61020461047e3660046119ef565b610ca5565b6101e7610491366004611e0f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61024f6104cd366004611b76565b610d80565b60006104dd82610e18565b92915050565b6060600280546104f290611e42565b80601f016020809104026020016040519081016040528092919081815260200182805461051e90611e42565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166105f35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061061a82610a18565b9050806001600160a01b0316836001600160a01b031614156106885760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105ea565b336001600160a01b03821614806106a457506106a48133610491565b6107165760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105ea565b6107208383610e23565b505050565b600a546060906001600160a01b031633146107525760405162461bcd60e51b81526004016105ea90611e7d565b606060005b838110156108055761076d600b80546001019055565b6000610778600b5490565b90506107848782610e91565b85858381811061079657610796611ea3565b90506020020160208101906107ab9190611eb9565b6000828152600d60205260409020805463ffffffff191663ffffffff92909216919091179055825181908490849081106107e7576107e7611ea3565b602090810291909101015250806107fd81611ef5565b915050610757565b50949350505050565b6108183382610eab565b6108345760405162461bcd60e51b81526004016105ea90611f10565b610720838383610fa2565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282916108b45750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b6020810151600090612710906108d3906001600160601b031687611f61565b6108dd9190611f96565b915196919550909350505050565b6008546001600160a01b031633146109155760405162461bcd60e51b81526004016105ea90611faa565b6001600160a01b0381166109645760405162461bcd60e51b815260206004820152601660248201527543616e6e6f74206265207a65726f206164647265737360501b60448201526064016105ea565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b61072083838360405180602001604052806000815250610c6d565b600a546001600160a01b031633146109cb5760405162461bcd60e51b81526004016105ea90611e7d565b6109d48161113e565b50565b6008546001600160a01b03163314610a015760405162461bcd60e51b81526004016105ea90611faa565b8051610a1490600c906020840190611882565b5050565b6000818152600460205260408120546001600160a01b0316806104dd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016105ea565b60006001600160a01b038216610afa5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105ea565b506001600160a01b031660009081526005602052604090205490565b6008546001600160a01b03163314610b405760405162461bcd60e51b81526004016105ea90611faa565b610b4a6000611147565b565b600a546001600160a01b03163314610b765760405162461bcd60e51b81526004016105ea90611e7d565b60005b8151811015610a14576001600e6000848481518110610b9a57610b9a611ea3565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bd290611ef5565b915050610b79565b6008546001600160a01b03163314610c045760405162461bcd60e51b81526004016105ea90611faa565b610a148282611199565b6060600380546104f290611e42565b610a14338383611296565b600a546001600160a01b03163314610c525760405162461bcd60e51b81526004016105ea90611e7d565b6000908152600e60205260409020805460ff19166001179055565b610c773383610eab565b610c935760405162461bcd60e51b81526004016105ea90611f10565b610c9f84848484611365565b50505050565b6000818152600460205260409020546060906001600160a01b0316610d245760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016105ea565b6000610d2e611398565b90506000815111610d4e5760405180602001604052806000815250610d79565b80610d58846113a7565b604051602001610d69929190611fdf565b6040516020818303038152906040525b9392505050565b6008546001600160a01b03163314610daa5760405162461bcd60e51b81526004016105ea90611faa565b6001600160a01b038116610e0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ea565b6109d481611147565b60006104dd826114a5565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610e5882610a18565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610a148282604051806020016040528060008152506114e5565b6000818152600460205260408120546001600160a01b0316610f245760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105ea565b6000610f2f83610a18565b9050806001600160a01b0316846001600160a01b03161480610f6a5750836001600160a01b0316610f5f84610575565b6001600160a01b0316145b80610f9a57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610fb582610a18565b6001600160a01b0316146110195760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016105ea565b6001600160a01b03821661107b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105ea565b611086600082610e23565b6001600160a01b03831660009081526005602052604081208054600192906110af90849061200e565b90915550506001600160a01b03821660009081526005602052604081208054600192906110dd908490612025565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6109d481611518565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b03821611156112075760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084016105ea565b6001600160a01b03821661125d5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016105ea565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b816001600160a01b0316836001600160a01b031614156112f85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105ea565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611370848484610fa2565b61137c84848484611532565b610c9f5760405162461bcd60e51b81526004016105ea9061203d565b6060600c80546104f290611e42565b6060816113cb5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156113f557806113df81611ef5565b91506113ee9050600a83611f96565b91506113cf565b60008167ffffffffffffffff81111561141057611410611b91565b6040519080825280601f01601f19166020018201604052801561143a576020820181803683370190505b5090505b8415610f9a5761144f60018361200e565b915061145c600a8661208f565b611467906030612025565b60f81b81838151811061147c5761147c611ea3565b60200101906001600160f81b031916908160001a90535061149e600a86611f96565b945061143e565b60006001600160e01b031982166380ac58cd60e01b14806114d657506001600160e01b03198216635b5e139f60e01b145b806104dd57506104dd82611630565b6114ef8383611665565b6114fc6000848484611532565b6107205760405162461bcd60e51b81526004016105ea9061203d565b611521816117a7565b600090815260016020526040812055565b60006001600160a01b0384163b1561162557604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906115769033908990889088906004016120a3565b6020604051808303816000875af19250505080156115b1575060408051601f3d908101601f191682019092526115ae918101906120e0565b60015b61160b573d8080156115df576040519150601f19603f3d011682016040523d82523d6000602084013e6115e4565b606091505b5080516116035760405162461bcd60e51b81526004016105ea9061203d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f9a565b506001949350505050565b60006001600160e01b0319821663152a902d60e11b14806104dd57506301ffc9a760e01b6001600160e01b03198316146104dd565b6001600160a01b0382166116bb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105ea565b6000818152600460205260409020546001600160a01b0316156117205760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105ea565b6001600160a01b0382166000908152600560205260408120805460019290611749908490612025565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6117b0816117e7565b600081815260096020526040902080546117c990611e42565b1590506109d45760008181526009602052604081206109d491611906565b60006117f282610a18565b90506117ff600083610e23565b6001600160a01b038116600090815260056020526040812080546001929061182890849061200e565b909155505060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b82805461188e90611e42565b90600052602060002090601f0160209004810192826118b057600085556118f6565b82601f106118c957805160ff19168380011785556118f6565b828001600101855582156118f6579182015b828111156118f65782518255916020019190600101906118db565b5061190292915061193c565b5090565b50805461191290611e42565b6000825580601f10611922575050565b601f0160209004906000526020600020908101906109d491905b5b80821115611902576000815560010161193d565b6001600160e01b0319811681146109d457600080fd5b60006020828403121561197957600080fd5b8135610d7981611951565b60005b8381101561199f578181015183820152602001611987565b83811115610c9f5750506000910152565b600081518084526119c8816020860160208601611984565b601f01601f19169290920160200192915050565b602081526000610d7960208301846119b0565b600060208284031215611a0157600080fd5b5035919050565b80356001600160a01b0381168114611a1f57600080fd5b919050565b60008060408385031215611a3757600080fd5b611a4083611a08565b946020939093013593505050565b600080600060408486031215611a6357600080fd5b611a6c84611a08565b9250602084013567ffffffffffffffff80821115611a8957600080fd5b818601915086601f830112611a9d57600080fd5b813581811115611aac57600080fd5b8760208260051b8501011115611ac157600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015611b0c57835183529284019291840191600101611af0565b50909695505050505050565b600080600060608486031215611b2d57600080fd5b611b3684611a08565b9250611b4460208501611a08565b9150604084013590509250925092565b60008060408385031215611b6757600080fd5b50508035926020909101359150565b600060208284031215611b8857600080fd5b610d7982611a08565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611bd057611bd0611b91565b604052919050565b600067ffffffffffffffff831115611bf257611bf2611b91565b611c05601f8401601f1916602001611ba7565b9050828152838383011115611c1957600080fd5b828260208301376000602084830101529392505050565b600060208284031215611c4257600080fd5b813567ffffffffffffffff811115611c5957600080fd5b8201601f81018413611c6a57600080fd5b610f9a84823560208401611bd8565b60006020808385031215611c8c57600080fd5b823567ffffffffffffffff80821115611ca457600080fd5b818501915085601f830112611cb857600080fd5b813581811115611cca57611cca611b91565b8060051b9150611cdb848301611ba7565b8181529183018401918481019088841115611cf557600080fd5b938501935b83851015611d1357843582529385019390850190611cfa565b98975050505050505050565b60008060408385031215611d3257600080fd5b611d3b83611a08565b915060208301356001600160601b0381168114611d5757600080fd5b809150509250929050565b60008060408385031215611d7557600080fd5b611d7e83611a08565b915060208301358015158114611d5757600080fd5b60008060008060808587031215611da957600080fd5b611db285611a08565b9350611dc060208601611a08565b925060408501359150606085013567ffffffffffffffff811115611de357600080fd5b8501601f81018713611df457600080fd5b611e0387823560208401611bd8565b91505092959194509250565b60008060408385031215611e2257600080fd5b611e2b83611a08565b9150611e3960208401611a08565b90509250929050565b600181811c90821680611e5657607f821691505b60208210811415611e7757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b2737ba1037b832b930ba37b960a11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ecb57600080fd5b813563ffffffff81168114610d7957600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611f0957611f09611edf565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000816000190483118215151615611f7b57611f7b611edf565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611fa557611fa5611f80565b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008351611ff1818460208801611984565b835190830190612005818360208801611984565b01949350505050565b60008282101561202057612020611edf565b500390565b6000821982111561203857612038611edf565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261209e5761209e611f80565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120d6908301846119b0565b9695505050505050565b6000602082840312156120f257600080fd5b8151610d798161195156fea26469706673582212206fbd1f481d6a1c00c6d33808136ec95b4e6cca40940dd3d3048fe64eda883e1f64736f6c634300080a0033