[ { "inputs": [ { "internalType": "address", "name": "factoryAddress", "type": "address" }, { "components": [ { "internalType": "string", "name": "poolTokenSymbol", "type": "string" }, { "internalType": "string", "name": "poolTokenName", "type": "string" }, { "internalType": "address[]", "name": "constituentTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "tokenBalances", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "tokenWeights", "type": "uint256[]" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "internalType": "struct ConfigurableRightsPool.PoolParams", "name": "poolParams", "type": "tuple" }, { "components": [ { "internalType": "bool", "name": "canPauseSwapping", "type": "bool" }, { "internalType": "bool", "name": "canChangeSwapFee", "type": "bool" }, { "internalType": "bool", "name": "canChangeWeights", "type": "bool" }, { "internalType": "bool", "name": "canAddRemoveTokens", "type": "bool" }, { "internalType": "bool", "name": "canWhitelistLPs", "type": "bool" }, { "internalType": "bool", "name": "canChangeCap", "type": "bool" } ], "internalType": "struct RightsManager.Rights", "name": "rightsStruct", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "oldCap", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newCap", "type": "uint256" } ], "name": "CapChanged", "type": "event" }, { "anonymous": true, "inputs": [ { "indexed": true, "internalType": "bytes4", "name": "sig", "type": "bytes4" }, { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "LogCall", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenOut", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" } ], "name": "LogExit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenIn", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" } ], "name": "LogJoin", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pool", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newAddr", "type": "address" } ], "name": "NewStrategy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pool", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "NewTokenCommitted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "NAME", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "addTokenTimeLockInBlocks", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "applyAddToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnPoolShareFromLib", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "provider", "type": "address" } ], "name": "canProvideLiquidity", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "denormalizedWeight", "type": "uint256" } ], "name": "commitAddToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "coreFactory", "outputs": [ { "internalType": "contract IFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "corePool", "outputs": [ { "internalType": "contract IPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "initialSupply", "type": "uint256" } ], "name": "createPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "initialSupply", "type": "uint256" }, { "internalType": "uint256", "name": "minimumWeightChangeBlockPeriodParam", "type": "uint256" }, { "internalType": "uint256", "name": "addTokenTimeLockInBlocksParam", "type": "uint256" } ], "name": "createPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "decreaseApproval", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "poolAmountIn", "type": "uint256" }, { "internalType": "uint256[]", "name": "minAmountsOut", "type": "uint256[]" } ], "name": "exitPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" }, { "internalType": "uint256", "name": "maxPoolAmountIn", "type": "uint256" } ], "name": "exitswapExternAmountOut", "outputs": [ { "internalType": "uint256", "name": "poolAmountIn", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "poolAmountIn", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" } ], "name": "exitswapPoolAmountIn", "outputs": [ { "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getController", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRightsManagerVersion", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getSmartPoolManagerVersion", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "gradualUpdate", "outputs": [ { "internalType": "uint256", "name": "startBlock", "type": "uint256" }, { "internalType": "uint256", "name": "endBlock", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum RightsManager.Permissions", "name": "permission", "type": "uint8" } ], "name": "hasPermission", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "increaseApproval", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "poolAmountOut", "type": "uint256" }, { "internalType": "uint256[]", "name": "maxAmountsIn", "type": "uint256[]" } ], "name": "joinPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" }, { "internalType": "uint256", "name": "minPoolAmountOut", "type": "uint256" } ], "name": "joinswapExternAmountIn", "outputs": [ { "internalType": "uint256", "name": "poolAmountOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "poolAmountOut", "type": "uint256" }, { "internalType": "uint256", "name": "maxAmountIn", "type": "uint256" } ], "name": "joinswapPoolAmountOut", "outputs": [ { "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minimumWeightChangeBlockPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintPoolShareFromLib", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "newToken", "outputs": [ { "internalType": "bool", "name": "isCommitted", "type": "bool" }, { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint256", "name": "commitBlock", "type": "uint256" }, { "internalType": "uint256", "name": "denorm", "type": "uint256" }, { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pokeWeights", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "pullPoolShareFromLib", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "pushPoolShareFromLib", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "removeToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "provider", "type": "address" } ], "name": "removeWhitelistedLiquidityProvider", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rights", "outputs": [ { "internalType": "bool", "name": "canPauseSwapping", "type": "bool" }, { "internalType": "bool", "name": "canChangeSwapFee", "type": "bool" }, { "internalType": "bool", "name": "canChangeWeights", "type": "bool" }, { "internalType": "bool", "name": "canAddRemoveTokens", "type": "bool" }, { "internalType": "bool", "name": "canWhitelistLPs", "type": "bool" }, { "internalType": "bool", "name": "canChangeCap", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newCap", "type": "uint256" } ], "name": "setCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "setController", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "exitFee", "type": "uint256" } ], "name": "setExitFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "feeCollector", "type": "address" } ], "name": "setExitFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "publicSwap", "type": "bool" } ], "name": "setPublicSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "updaterAddr", "type": "address" } ], "name": "setStrategy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "setSwapFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "strategyUpdater", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "newWeight", "type": "uint256" } ], "name": "updateWeight", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "newWeights", "type": "uint256[]" }, { "internalType": "uint256", "name": "startBlock", "type": "uint256" }, { "internalType": "uint256", "name": "endBlock", "type": "uint256" } ], "name": "updateWeightsGradually", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "provider", "type": "address" } ], "name": "whitelistLiquidityProvider", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b506040516200573638038062005736833981016040819052620000349162000925565b8151602080840151825190918391839162000055916001918501906200051e565b5080516200006b9060029060208401906200051e565b5050600580546001600160a01b0319163317905550506001600655506200009e620f4240670de0b6b3a764000062000a69565b8260a0015110158015620000ca5750620000c2600a670de0b6b3a764000062000a69565b8260a0015111155b6200011c5760405162461bcd60e51b815260206004820152601460248201527f4552525f494e56414c49445f535741505f46454500000000000000000000000060448201526064015b60405180910390fd5b81604001515182606001515114620001775760405162461bcd60e51b815260206004820152601b60248201527f4552525f53544152545f42414c414e4345535f4d49534d415443480000000000604482015260640162000113565b81604001515182608001515114620001d25760405162461bcd60e51b815260206004820152601a60248201527f4552525f53544152545f574549474854535f4d49534d41544348000000000000604482015260640162000113565b600282604001515110156200021f5760405162461bcd60e51b81526020600482015260126024820152714552525f544f4f5f4645575f544f4b454e5360701b604482015260640162000113565b60108260400151511115620002775760405162461bcd60e51b815260206004820152601360248201527f4552525f544f4f5f4d414e595f544f4b454e5300000000000000000000000000604482015260640162000113565b600880546001600160a01b0319166001600160a01b03851690811790915560408381015160808501518251631e931a0560e01b81529251734c192c42ea58dcdeaeb24040d10989fed8772fa994639e1c2f05949091631e931a0591600480820192602092909190829003018186803b158015620002f357600080fd5b505afa15801562000308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032e919062000a8c565b600860009054906101000a90046001600160a01b03166001600160a01b031663742f37466040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037d57600080fd5b505afa15801562000392573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b8919062000aa6565b6040518563ffffffff1660e01b8152600401620003d9949392919062000acb565b60006040518083038186803b158015620003f257600080fd5b505af415801562000407573d6000803e3d6000fd5b50508251600a805460208087015160408089015160608a015160808b015160a08c01511515650100000000000260ff60281b19911515640100000000029190911661ffff60201b1992151563010000000263ff0000001994151562010000029490941663ffff0000199615156101000261ff00199b15159b909b1661ffff1990991698909817999099179490941695909517179390931694909417939093179091558501518051620004c1945060149350910190620005ad565b5060608201518051620004dd9160159160209091019062000605565b5060a08201516013556116446016556101f4601755608082015180516200050d9160119160209091019062000605565b50506000196018555062000baf9050565b8280546200052c9062000b72565b90600052602060002090601f0160209004810192826200055057600085556200059b565b82601f106200056b57805160ff19168380011785556200059b565b828001600101855582156200059b579182015b828111156200059b5782518255916020019190600101906200057e565b50620005a992915062000642565b5090565b8280548282559060005260206000209081019282156200059b579160200282015b828111156200059b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620005ce565b8280548282559060005260206000209081019282156200059b57916020028201828111156200059b5782518255916020019190600101906200057e565b5b80821115620005a9576000815560010162000643565b80516001600160a01b03811681146200067157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715620006b157620006b162000676565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006e257620006e262000676565b604052919050565b600082601f830112620006fc57600080fd5b81516001600160401b0381111562000718576200071862000676565b60206200072e601f8301601f19168201620006b7565b82815285828487010111156200074357600080fd5b60005b838110156200076357858101830151828201840152820162000746565b83811115620007755760008385840101525b5095945050505050565b60006001600160401b038211156200079b576200079b62000676565b5060051b60200190565b600082601f830112620007b757600080fd5b81516020620007d0620007ca836200077f565b620006b7565b82815260059290921b84018101918181019086841115620007f057600080fd5b8286015b848110156200081657620008088162000659565b8352918301918301620007f4565b509695505050505050565b600082601f8301126200083357600080fd5b8151602062000846620007ca836200077f565b82815260059290921b840181019181810190868411156200086657600080fd5b8286015b848110156200081657805183529183019183016200086a565b805180151581146200067157600080fd5b600060c08284031215620008a757600080fd5b620008b16200068c565b9050620008be8262000883565b8152620008ce6020830162000883565b6020820152620008e16040830162000883565b6040820152620008f46060830162000883565b6060820152620009076080830162000883565b60808201526200091a60a0830162000883565b60a082015292915050565b600080600061010084860312156200093c57600080fd5b620009478462000659565b60208501519093506001600160401b03808211156200096557600080fd5b9085019060c082880312156200097a57600080fd5b620009846200068c565b8251828111156200099457600080fd5b620009a289828601620006ea565b825250602083015182811115620009b857600080fd5b620009c689828601620006ea565b602083015250604083015182811115620009df57600080fd5b620009ed89828601620007a5565b60408301525060608301518281111562000a0657600080fd5b62000a148982860162000821565b60608301525060808301518281111562000a2d57600080fd5b62000a3b8982860162000821565b60808301525060a083015160a082015280945050505062000a60856040860162000894565b90509250925092565b60008262000a8757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000a9f57600080fd5b5051919050565b60006020828403121562000ab957600080fd5b62000ac48262000659565b9392505050565b6080808252855190820181905260009060209060a0840190828901845b8281101562000b0f5781516001600160a01b03168452928401929084019060010162000ae8565b5050508381038285015286518082528783019183019060005b8181101562000b465783518352928401929184019160010162000b28565b5050604085018790526001600160a01b0386166060860152925062000b69915050565b95945050505050565b600181811c9082168062000b8757607f821691505b6020821081141562000ba957634e487b7160e01b600052602260045260246000fd5b50919050565b614b778062000bbf6000396000f3fe608060405234801561001057600080fd5b50600436106103275760003560e01c80635fa7b584116101b8578063a9059cbb11610104578063dd54291b116100a2578063e2762d4b1161007c578063e2762d4b146107f6578063e5a583a914610809578063e7f1a5541461081c578063e854f53d1461082557600080fd5b8063dd54291b146107ac578063dd62ed3e146107b5578063e211b875146107ee57600080fd5b8063c3391d27116100de578063c3391d2714610717578063c42bd05a1461072a578063c83a1c2d14610786578063d73dd6231461079957600080fd5b8063a9059cbb146106e9578063b02f0b73146106fc578063c275d81b1461070f57600080fd5b80638259e6a0116101715780639776e94b1161014b5780639776e94b14610611578063980e8db6146106245780639d829c2b1461069c578063a3f4df7e146106b657600080fd5b80638259e6a0146105e357806392eefe9b146105f657806395d89b411461060957600080fd5b80635fa7b5841461055457806366188463146105675780636d06dfa01461057a57806370a082311461058d57806374983a0d146105b6578063806c6f87146105d057600080fd5b806337c6f4d9116102775780634c20d20911610230578063581e1fdc1161020a578063581e1fdc146104f85780635a8342d81461050b5780635d6dcb7d1461052e5780635db342771461054157600080fd5b80634c20d209146104bf5780634f69c0d4146104d257806355c32a23146104e557600080fd5b806337c6f4d91461044d5780633d8df6671461046057806346ab38f11461047357806347786d371461048657806349b59552146104995780634ba57882146104ac57600080fd5b806323b872dd116102e4578063313ce567116102be578063313ce5671461040557806332ea3b3e1461041457806333a100ca1461042757806334e199071461043a57600080fd5b806323b872dd146103ba578063246bc19b146103cd5780633018205f146103e057600080fd5b806302c967481461032c57806306fdde0314610352578063095dcccc14610367578063095ea7b31461037c57806318160ddd1461039f578063220eb760146103a7575b600080fd5b61033f61033a36600461418a565b61082e565b6040519081526020015b60405180910390f35b61035a610a4a565b60405161034991906141bf565b61037a610375366004614214565b610adc565b005b61038f61038a366004614214565b610b09565b6040519015158152602001610349565b60005461033f565b61037a6103b5366004614240565b610b63565b61038f6103c8366004614259565b610b8e565b61037a6103db3660046142e6565b610cbb565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610349565b60405160128152602001610349565b6007546103ed906001600160a01b031681565b61037a610435366004614337565b610f74565b61037a610448366004614240565b611058565b61038f61045b366004614354565b6111b8565b6008546103ed906001600160a01b031681565b61033f61048136600461418a565b61124b565b61037a610494366004614240565b611412565b61037a6104a7366004614383565b61154f565b61037a6104ba366004614240565b61166d565b61037a6104cd36600461418a565b611695565b61037a6104e03660046143a0565b61184e565b61037a6104f3366004614214565b611c3d565b61037a610506366004614337565b611c66565b600f54601054610519919082565b60408051928352602083019190915201610349565b6009546103ed906001600160a01b031681565b61033f61054f36600461418a565b611d2c565b61037a610562366004614337565b611eff565b61038f610575366004614214565b61218c565b61033f61058836600461418a565b612261565b61033f61059b366004614337565b6001600160a01b031660009081526003602052604090205490565b73faa21e3efb22d0e9f536457c51bcbe02824bcee76103ed565b61038f6105de366004614337565b612428565b61037a6105f1366004614240565b61245e565b61037a610604366004614337565b6124e9565b61035a612595565b61037a61061f366004614214565b6125a4565b600a546106639060ff80821691610100810482169162010000820481169163010000008104821691600160201b82048116916501000000000090041686565b604080519615158752941515602087015292151593850193909352151560608401529015156080830152151560a082015260c001610349565b734c192c42ea58dcdeaeb24040d10989fed8772fa96103ed565b61035a6040518060400160405280601481526020017312d85cdcd85b991c984814db585c9d08141bdbdb60621b81525081565b61038f6106f7366004614214565b61283c565b61037a61070a3660046143a0565b612878565b61037a612c7c565b61037a6107253660046143ec565b612dd3565b600b54600c54600d54600e546107549360ff8116936101009091046001600160a01b031692909185565b6040805195151586526001600160a01b039094166020860152928401919091526060830152608082015260a001610349565b61037a610794366004614337565b612eba565b61038f6107a7366004614214565b612ffe565b61033f60185481565b61033f6107c3366004614418565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61037a61307d565b61037a610804366004614337565b613168565b61037a610817366004614240565b6132bd565b61033f60175481565b61033f60165481565b60405160009033906001600160e01b0319833516906108509084903690614451565b60405180910390a26009546001600160a01b03166108895760405162461bcd60e51b815260040161088090614480565b60405180910390fd5b600260065414156108ac5760405162461bcd60e51b8152600401610880906144a9565b6002600655600954604051637f2bb67160e11b81526000918291734c192c42ea58dcdeaeb24040d10989fed8772fa99163fe576ce2916109029130916001600160a01b03909116908b908b908b906004016144ce565b60606040518083038186803b15801561091a57600080fd5b505af415801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190614502565b60405188815290955091935091506001600160a01b0387169033907fc62fc35ac75e3bff532648e2859a3e1694002cfa357614ae8e034df7f83db5e99060200160405180910390a36109a43384611c5c565b6109ad81610b82565b600954604080516399af03cd60e01b81529051610a31926001600160a01b0316916399af03cd916004808301926020929190829003018186803b1580156109f357600080fd5b505afa158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b9190614530565b83610afb565b610a3c8633876133e7565b505060016006559392505050565b606060028054610a599061454d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a859061454d565b8015610ad25780601f10610aa757610100808354040283529160200191610ad2565b820191906000526020600020905b815481529060010190602001808311610ab557829003601f168201915b5050505050905090565b333014610afb5760405162461bcd60e51b815260040161088090614588565b610b058282613640565b5050565b3360008181526004602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020614b2283398151915290610b529086815260200190565b60405180910390a350600192915050565b333014610b825760405162461bcd60e51b815260040161088090614588565b610b8b8161364b565b50565b60006001600160a01b038316610bb65760405162461bcd60e51b8152600401610880906145b4565b6001600160a01b038416600081815260046020908152604080832033808552925290912054911480610be85750808311155b610c2b5760405162461bcd60e51b815260206004820152601460248201527322a9292faa27a5a2a72fa120a22fa1a0a62622a960611b6044820152606401610880565b610c368585856136c3565b336001600160a01b03861614801590610c5157506000198114155b15610cae57610c6083826145f4565b6001600160a01b038681166000908152600460209081526040808320338085529083529281902085905551938452918716929091600080516020614b22833981519152910160405180910390a35b60019150505b9392505050565b6009546001600160a01b0316610ce35760405162461bcd60e51b815260040161088090614480565b6007546001600160a01b03163314610d0d5760405162461bcd60e51b81526004016108809061460b565b60026006541415610d305760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b03191691610d5591903690614451565b60405180910390a2600a5462010000900460ff16610d855760405162461bcd60e51b815260040161088090614635565b600b5460ff1615610dd05760405162461bcd60e51b815260206004820152601560248201527411549497d4115391125391d7d513d2d15397d05111605a1b6044820152606401610880565b734c192c42ea58dcdeaeb24040d10989fed8772fa963c7a62031600960009054906101000a90046001600160a01b0316600f87878787601654600860009054906101000a90046001600160a01b03166001600160a01b0316631e931a056040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5757600080fd5b505afa158015610e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f919061466c565b600860009054906101000a90046001600160a01b03166001600160a01b031663742f37466040518163ffffffff1660e01b815260040160206040518083038186803b158015610edd57600080fd5b505afa158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f159190614530565b6040518a63ffffffff1660e01b8152600401610f39999897969594939291906146bb565b60006040518083038186803b158015610f5157600080fd5b505af4158015610f65573d6000803e3d6000fd5b50506001600655505050505050565b6005546001600160a01b03163314610f9e5760405162461bcd60e51b815260040161088090614588565b336001600160a01b03166000356001600160e01b0319166001600160e01b031916600036604051610fd0929190614451565b60405180910390a26001600160a01b038116610ffe5760405162461bcd60e51b8152600401610880906145b4565b6040516001600160a01b03821690309033907f7346178ece6372241ea463631930b7671917f47398a07d305f81a4d00eddc10390600090a4600780546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b03166110805760405162461bcd60e51b815260040161088090614480565b6005546001600160a01b031633146110aa5760405162461bcd60e51b815260040161088090614588565b600260065414156110cd5760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b031916916110f291903690614451565b60405180910390a2600a54610100900460ff166111515760405162461bcd60e51b815260206004820152601d60248201527f4552525f4e4f545f434f4e464947555241424c455f535741505f4645450000006044820152606401610880565b6009546040516334e1990760e01b8152600481018390526001600160a01b03909116906334e19907906024015b600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b50506001600655505050565b6040516322c1aa2560e11b815260009073faa21e3efb22d0e9f536457c51bcbe02824bcee790634583544a906111f590600a90869060040161473d565b60206040518083038186803b15801561120d57600080fd5b505af4158015611221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124591906147a6565b92915050565b60405160009033906001600160e01b03198335169061126d9084903690614451565b60405180910390a26009546001600160a01b031661129d5760405162461bcd60e51b815260040161088090614480565b600260065414156112c05760405162461bcd60e51b8152600401610880906144a9565b600260065560095460405163ec2e783d60e01b81526000918291734c192c42ea58dcdeaeb24040d10989fed8772fa99163ec2e783d916113169130916001600160a01b03909116908b908b908b906004016144ce565b60606040518083038186803b15801561132e57600080fd5b505af4158015611342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113669190614502565b60405181815290955091935091506001600160a01b0387169033907fc62fc35ac75e3bff532648e2859a3e1694002cfa357614ae8e034df7f83db5e99060200160405180910390a36113b83386611c5c565b6113c181610b82565b600954604080516399af03cd60e01b81529051611407926001600160a01b0316916399af03cd916004808301926020929190829003018186803b1580156109f357600080fd5b610a3c8633856133e7565b6009546001600160a01b031661143a5760405162461bcd60e51b815260040161088090614480565b6005546001600160a01b031633146114645760405162461bcd60e51b815260040161088090614588565b600260065414156114875760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b031916916114ac91903690614451565b60405180910390a2600a5465010000000000900460ff166115075760405162461bcd60e51b815260206004820152601560248201527404552525f43414e4e4f545f4348414e47455f43415605c1b6044820152606401610880565b601854604080519182526020820183905233917f6bc200110c7794738d401810b22ef824a2044a8ccb022d4ad8769840370331f5910160405180910390a26018556001600655565b6009546001600160a01b03166115775760405162461bcd60e51b815260040161088090614480565b6005546001600160a01b031633146115a15760405162461bcd60e51b815260040161088090614588565b600260065414156115c45760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b031916916115e991903690614451565b60405180910390a2600a5460ff1661163b5760405162461bcd60e51b815260206004820152601560248201527404552525f4e4f545f5041555341424c455f5357415605c1b6044820152606401610880565b6009546040516324dacaa960e11b815282151560048201526001600160a01b03909116906349b595529060240161117e565b33301461168c5760405162461bcd60e51b815260040161088090614588565b610b8b81613771565b6009546001600160a01b03166116bd5760405162461bcd60e51b815260040161088090614480565b6007546001600160a01b031633146116e75760405162461bcd60e51b81526004016108809061460b565b6002600654141561170a5760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b0319169161172f91903690614451565b60405180910390a2600a546301000000900460ff166117605760405162461bcd60e51b8152600401610880906147c3565b600f54156117805760405162461bcd60e51b8152600401610880906147fa565b6040516001600160a01b03841690309033907f33b043686b9408a355896fe90b2f8ecc86a41d87d1554ef65a739948b4f23e2790600090a4600954604051638dad7ca360e01b81526001600160a01b03918216600482015290841660248201526044810183905260648101829052600b6084820152734c192c42ea58dcdeaeb24040d10989fed8772fa990638dad7ca39060a40160006040518083038186803b15801561182c57600080fd5b505af4158015611840573d6000803e3d6000fd5b505060016006555050505050565b6009546001600160a01b03166118765760405162461bcd60e51b815260040161088090614480565b600260065414156118995760405162461bcd60e51b8152600401610880906144a9565b60026006556009546040805163fde924f760e01b815290516000926001600160a01b03169163fde924f7916004808301926020929190829003018186803b1580156118e357600080fd5b505afa1580156118f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191b91906147a6565b6009546040516324dacaa960e11b8152600060048201529192506001600160a01b0316906349b5955290602401600060405180830381600087803b15801561196257600080fd5b505af1158015611976573d6000803e3d6000fd5b5050604051339250600080356001600160e01b0319169250611999913690614451565b60405180910390a2600a54600160201b900460ff1615806119c957503360009081526019602052604090205460ff165b6119e55760405162461bcd60e51b815260040161088090614831565b6009546040516346589b0560e01b8152600091734c192c42ea58dcdeaeb24040d10989fed8772fa9916346589b0591611a329130916001600160a01b0316908a908a908a9060040161485f565b60006040518083038186803b158015611a4a57600080fd5b505af4158015611a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a869190810190614974565b90506000600960009054906101000a90046001600160a01b03166001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015611ad857600080fd5b505afa158015611aec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b1491908101906149b1565b905060005b8151811015611bcb576000828281518110611b3657611b36614a40565b602002602001015190506000848381518110611b5457611b54614a40565b60200260200101519050816001600160a01b0316336001600160a01b03167fea39e3b35c5cd8937999ed5f7fbab30acd562a931fc4a887fed2a47c3074aa7283604051611ba391815260200190565b60405180910390a3611bb68233836137c6565b50508080611bc390614a56565b915050611b19565b50611bd58661168c565b611bdf3387610afb565b50506009546040516324dacaa960e11b815282151560048201526001600160a01b03909116906349b59552906024015b600060405180830381600087803b158015611c2957600080fd5b505af1158015610f65573d6000803e3d6000fd5b333014611c5c5760405162461bcd60e51b815260040161088090614588565b610b058282613a25565b6005546001600160a01b03163314611c905760405162461bcd60e51b815260040161088090614588565b336001600160a01b03166000356001600160e01b0319166001600160e01b031916600036604051611cc2929190614451565b60405180910390a260095460405163160787f760e21b81526001600160a01b0383811660048301529091169063581e1fdc90602401600060405180830381600087803b158015611d1157600080fd5b505af1158015611d25573d6000803e3d6000fd5b5050505050565b60405160009033906001600160e01b031983351690611d4e9084903690614451565b60405180910390a26009546001600160a01b0316611d7e5760405162461bcd60e51b815260040161088090614480565b60026006541415611da15760405162461bcd60e51b8152600401610880906144a9565b6002600655600a54600160201b900460ff161580611dce57503360009081526019602052604090205460ff165b611dea5760405162461bcd60e51b815260040161088090614831565b60095460405163a8a4069b60e01b8152734c192c42ea58dcdeaeb24040d10989fed8772fa99163a8a4069b91611e369130916001600160a01b03909116908990899089906004016144ce565b60206040518083038186803b158015611e4e57600080fd5b505af4158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061466c565b9050836001600160a01b0316336001600160a01b03167fea39e3b35c5cd8937999ed5f7fbab30acd562a931fc4a887fed2a47c3074aa7285604051611ecd91815260200190565b60405180910390a3611ede8161168c565b611ee83382610afb565b611ef38433856137c6565b60016006559392505050565b6009546001600160a01b0316611f275760405162461bcd60e51b815260040161088090614480565b6007546001600160a01b03163314611f515760405162461bcd60e51b81526004016108809061460b565b60026006541415611f745760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b03191691611f9991903690614451565b60405180910390a2600a546301000000900460ff16611fca5760405162461bcd60e51b8152600401610880906147c3565b600b5460ff161561201d5760405162461bcd60e51b815260206004820152601b60248201527f4552525f52454d4f56455f574954485f4144445f50454e44494e4700000000006044820152606401610880565b600f541561203d5760405162461bcd60e51b8152600401610880906147fa565b600860009054906101000a90046001600160a01b03166001600160a01b031663742f37466040518163ffffffff1660e01b815260040160206040518083038186803b15801561208b57600080fd5b505afa15801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c39190614530565b6001600160a01b0316816001600160a01b031614156121135760405162461bcd60e51b815260206004820152600c60248201526b4552525f4d494e5f4b41435960a01b6044820152606401610880565b600954604051636f4a8ea160e01b81523060048201526001600160a01b0391821660248201529082166044820152734c192c42ea58dcdeaeb24040d10989fed8772fa990636f4a8ea19060640160006040518083038186803b15801561217857600080fd5b505af41580156111ac573d6000803e3d6000fd5b3360009081526004602090815260408083206001600160a01b03861684529091528120548083106121e0573360009081526004602090815260408083206001600160a01b038816845290915281205561220f565b6121ea83826145f4565b3360009081526004602090815260408083206001600160a01b03891684529091529020555b3360008181526004602090815260408083206001600160a01b03891680855290835292819020549051908152919291600080516020614b22833981519152910160405180910390a35060019392505050565b60405160009033906001600160e01b0319833516906122839084903690614451565b60405180910390a26009546001600160a01b03166122b35760405162461bcd60e51b815260040161088090614480565b600260065414156122d65760405162461bcd60e51b8152600401610880906144a9565b6002600655600a54600160201b900460ff16158061230357503360009081526019602052604090205460ff165b61231f5760405162461bcd60e51b815260040161088090614831565b60095460405163a198e3c360e01b8152734c192c42ea58dcdeaeb24040d10989fed8772fa99163a198e3c39161236b9130916001600160a01b03909116908990899089906004016144ce565b60206040518083038186803b15801561238357600080fd5b505af4158015612397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bb919061466c565b9050836001600160a01b0316336001600160a01b03167fea39e3b35c5cd8937999ed5f7fbab30acd562a931fc4a887fed2a47c3074aa728360405161240291815260200190565b60405180910390a36124138361168c565b61241d3384610afb565b611ef38433836137c6565b600a54600090600160201b900460ff1615806112455750506001600160a01b031660009081526019602052604090205460ff1690565b6005546001600160a01b031633146124885760405162461bcd60e51b815260040161088090614588565b600260065414156124ab5760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b031916916124d091903690614451565b60405180910390a26124e181613a30565b506001600655565b6005546001600160a01b031633146125135760405162461bcd60e51b815260040161088090614588565b6001600160a01b0381166125395760405162461bcd60e51b8152600401610880906145b4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060018054610a599061454d565b6009546001600160a01b03166125cc5760405162461bcd60e51b815260040161088090614480565b6007546001600160a01b031633146125f65760405162461bcd60e51b81526004016108809061460b565b600260065414156126195760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b0319169161263e91903690614451565b60405180910390a2600a5462010000900460ff1661266e5760405162461bcd60e51b815260040161088090614635565b600f541561268e5760405162461bcd60e51b8152600401610880906147fa565b60095460085460408051631e931a0560e01b81529051734c192c42ea58dcdeaeb24040d10989fed8772fa99363be0aa5f99330936001600160a01b0392831693899389931691631e931a05916004808301926020929190829003018186803b1580156126f957600080fd5b505afa15801561270d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612731919061466c565b600860009054906101000a90046001600160a01b03166001600160a01b031663742f37466040518163ffffffff1660e01b815260040160206040518083038186803b15801561277f57600080fd5b505afa158015612793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b79190614530565b60405160e088901b6001600160e01b03191681526001600160a01b039687166004820152948616602486015292851660448501526064840191909152608483015290911660a482015260c40160006040518083038186803b15801561281b57600080fd5b505af415801561282f573d6000803e3d6000fd5b5050600160065550505050565b60006001600160a01b0383166128645760405162461bcd60e51b8152600401610880906145b4565b61286f3384846136c3565b50600192915050565b6009546001600160a01b03166128a05760405162461bcd60e51b815260040161088090614480565b600260065414156128c35760405162461bcd60e51b8152600401610880906144a9565b60026006556009546040805163fde924f760e01b815290516000926001600160a01b03169163fde924f7916004808301926020929190829003018186803b15801561290d57600080fd5b505afa158015612921573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294591906147a6565b6009546040516324dacaa960e11b8152600060048201529192506001600160a01b0316906349b5955290602401600060405180830381600087803b15801561298c57600080fd5b505af11580156129a0573d6000803e3d6000fd5b5050604051339250600080356001600160e01b03191692506129c3913690614451565b60405180910390a260095460405163024c046760e31b815260009182918291734c192c42ea58dcdeaeb24040d10989fed8772fa991631260233891612a1c9130916001600160a01b0316908c908c908c9060040161485f565b60006040518083038186803b158015612a3457600080fd5b505af4158015612a48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a709190810190614a71565b925092509250612a803388611c5c565b600954604080516399af03cd60e01b81529051612b04926001600160a01b0316916399af03cd916004808301926020929190829003018186803b158015612ac657600080fd5b505afa158015612ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afe9190614530565b84610afb565b612b0d82610b82565b6009546040805163cc77828d60e01b815290516000926001600160a01b03169163cc77828d9160048083019286929190829003018186803b158015612b5157600080fd5b505afa158015612b65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b8d91908101906149b1565b905060005b8151811015612c44576000828281518110612baf57612baf614a40565b602002602001015190506000848381518110612bcd57612bcd614a40565b60200260200101519050816001600160a01b0316336001600160a01b03167fc62fc35ac75e3bff532648e2859a3e1694002cfa357614ae8e034df7f83db5e983604051612c1c91815260200190565b60405180910390a3612c2f8233836133e7565b50508080612c3c90614a56565b915050612b92565b50506009546040516324dacaa960e11b815285151560048201526001600160a01b0390911693506349b5955292506024019050611c0f565b6009546001600160a01b0316612ca45760405162461bcd60e51b815260040161088090614480565b6007546001600160a01b03163314612cce5760405162461bcd60e51b81526004016108809061460b565b60026006541415612cf15760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b03191691612d1691903690614451565b60405180910390a2600a546301000000900460ff16612d475760405162461bcd60e51b8152600401610880906147c3565b600954601754604051634727a63960e11b81523060048201526001600160a01b0390921660248301526044820152600b6064820152734c192c42ea58dcdeaeb24040d10989fed8772fa990638e4f4c72906084015b60006040518083038186803b158015612db457600080fd5b505af4158015612dc8573d6000803e3d6000fd5b505060016006555050565b6005546001600160a01b03163314612dfd5760405162461bcd60e51b815260040161088090614588565b60026006541415612e205760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b03191691612e4591903690614451565b60405180910390a280821015612e9d5760405162461bcd60e51b815260206004820181905260248201527f4552525f494e434f4e53495354454e545f544f4b454e5f54494d455f4c4f434b6044820152606401610880565b60168290556017819055612eb083613a30565b5050600160065550565b6005546001600160a01b03163314612ee45760405162461bcd60e51b815260040161088090614588565b60026006541415612f075760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b03191691612f2c91903690614451565b60405180910390a2600a54600160201b900460ff16612f885760405162461bcd60e51b81526020600482015260186024820152774552525f43414e4e4f545f57484954454c4953545f4c505360401b6044820152606401610880565b6001600160a01b038116612fd45760405162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f4144445245535360681b6044820152606401610880565b6001600160a01b03166000908152601960205260409020805460ff19166001908117909155600655565b3360009081526004602090815260408083206001600160a01b0386168452909152812080548391908390613033908490614ac1565b90915550503360008181526004602090815260408083206001600160a01b03881680855290835292819020549051908152919291600080516020614b228339815191529101610b52565b6009546001600160a01b03166130a55760405162461bcd60e51b815260040161088090614480565b600260065414156130c85760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b031916916130ed91903690614451565b60405180910390a2600a5462010000900460ff1661311d5760405162461bcd60e51b815260040161088090614635565b600954604051635b891b4b60e11b81526001600160a01b039091166004820152600f6024820152734c192c42ea58dcdeaeb24040d10989fed8772fa99063b712369690604401612d9c565b6005546001600160a01b031633146131925760405162461bcd60e51b815260040161088090614588565b600260065414156131b55760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b031916916131da91903690614451565b60405180910390a2600a54600160201b900460ff166132365760405162461bcd60e51b81526020600482015260186024820152774552525f43414e4e4f545f57484954454c4953545f4c505360401b6044820152606401610880565b6001600160a01b03811660009081526019602052604090205460ff166132975760405162461bcd60e51b815260206004820152601660248201527511549497d31417d393d517d5d2125511531254d5115160521b6044820152606401610880565b6001600160a01b03166000908152601960205260409020805460ff191690556001600655565b6009546001600160a01b03166132e55760405162461bcd60e51b815260040161088090614480565b6005546001600160a01b0316331461330f5760405162461bcd60e51b815260040161088090614588565b600260065414156133325760405162461bcd60e51b8152600401610880906144a9565b60026006556040513390600080356001600160e01b0319169161335791903690614451565b60405180910390a2600a54610100900460ff166133b65760405162461bcd60e51b815260206004820152601d60248201527f4552525f4e4f545f434f4e464947555241424c455f535741505f4645450000006044820152606401610880565b60095460405163e5a583a960e01b8152600481018390526001600160a01b039091169063e5a583a99060240161117e565b6009546001600160a01b031661340f5760405162461bcd60e51b815260040161088090614480565b60095460405163f8b2cb4f60e01b81526001600160a01b038581166004830152600092169063f8b2cb4f9060240160206040518083038186803b15801561345557600080fd5b505afa158015613469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348d919061466c565b600954604051634a46c67360e11b81526001600160a01b0387811660048301529293506000929091169063948d8ce69060240160206040518083038186803b1580156134d857600080fd5b505afa1580156134ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613510919061466c565b6009549091506001600160a01b0316633fdddaa28661352f86866145f4565b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260448101849052606401600060405180830381600087803b15801561357c57600080fd5b505af1158015613590573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b03878116600483015260248201879052600093508816915063a9059cbb90604401602060405180830381600087803b1580156135e157600080fd5b505af11580156135f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361991906147a6565b9050806136385760405162461bcd60e51b815260040161088090614ad9565b505050505050565b610b053083836136c3565b306000908152600360205260408120805483929061366a9084906145f4565b925050819055508060008082825461368291906145f4565b909155505060405181815260009030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350565b6001600160a01b038316600090815260036020526040812080548392906136eb9084906145f4565b90915550506001600160a01b03821660009081526003602052604081208054839290613718908490614ac1565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161376491815260200190565b60405180910390a3505050565b61377a81613f1f565b6018546000541115610b8b5760405162461bcd60e51b815260206004820152601560248201527411549497d0d05417d31253525517d4915050d21151605a1b6044820152606401610880565b6009546001600160a01b03166137ee5760405162461bcd60e51b815260040161088090614480565b60095460405163f8b2cb4f60e01b81526001600160a01b038581166004830152600092169063f8b2cb4f9060240160206040518083038186803b15801561383457600080fd5b505afa158015613848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386c919061466c565b600954604051634a46c67360e11b81526001600160a01b0387811660048301529293506000929091169063948d8ce69060240160206040518083038186803b1580156138b757600080fd5b505afa1580156138cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ef919061466c565b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018690529192506000918716906323b872dd90606401602060405180830381600087803b15801561394557600080fd5b505af1158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d91906147a6565b90508061399c5760405162461bcd60e51b815260040161088090614ad9565b6009546001600160a01b0316633fdddaa2876139b88787614ac1565b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260448101859052606401600060405180830381600087803b158015613a0557600080fd5b505af1158015613a19573d6000803e3d6000fd5b50505050505050505050565b610b058230836136c3565b6009546001600160a01b031615613a7a5760405162461bcd60e51b815260206004820152600e60248201526d11549497d254d7d0d4915055115160921b6044820152606401610880565b613a8d670de0b6b3a76400006064614b02565b811015613ad25760405162461bcd60e51b815260206004820152601360248201527222a9292fa4a724aa2fa9aaa828262cafa6a4a760691b6044820152606401610880565b613ae8670de0b6b3a7640000633b9aca00614b02565b811115613b2d5760405162461bcd60e51b815260206004820152601360248201527208aa4a4be929c92a8bea6aaa0a098b2be9a82b606b1b6044820152606401610880565b600a5465010000000000900460ff1615613b475760188190555b613b508161168c565b613b5a3382610afb565b600860009054906101000a90046001600160a01b03166001600160a01b0316630f11779b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015613baa57600080fd5b505af1158015613bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be29190614530565b600980546001600160a01b0319166001600160a01b039290921691909117905560005b601454811015613de857600060148281548110613c2457613c24614a40565b6000918252602082200154601580546001600160a01b0390921693509084908110613c5157613c51614a40565b906000526020600020015490506000600f6002018481548110613c7657613c76614a40565b60009182526020822001546040516323b872dd60e01b8152336004820152306024820152604481018590529092506001600160a01b038516906323b872dd90606401602060405180830381600087803b158015613cd257600080fd5b505af1158015613ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0a91906147a6565b905080613d295760405162461bcd60e51b815260040161088090614ad9565b600954613d45906001600160a01b038681169116600019613f90565b905080613d645760405162461bcd60e51b815260040161088090614ad9565b600954604051631c9c3ca760e31b81526001600160a01b03868116600483015260248201869052604482018590529091169063e4e1e53890606401600060405180830381600087803b158015613db957600080fd5b505af1158015613dcd573d6000803e3d6000fd5b50505050505050508080613de090614a56565b915050613c05565b50613df560146000614143565b60095460405163160787f760e21b81523360048201526001600160a01b039091169063581e1fdc90602401600060405180830381600087803b158015613e3a57600080fd5b505af1158015613e4e573d6000803e3d6000fd5b50506009546013546040516334e1990760e01b81526001600160a01b0390921693506334e199079250613e879160040190815260200190565b600060405180830381600087803b158015613ea157600080fd5b505af1158015613eb5573d6000803e3d6000fd5b50506009546040516324dacaa960e11b8152600160048201526001600160a01b0390911692506349b595529150602401600060405180830381600087803b158015613eff57600080fd5b505af1158015613f13573d6000803e3d6000fd5b50506000601355505050565b3060009081526003602052604081208054839290613f3e908490614ac1565b9250508190555080600080828254613f569190614ac1565b909155505060405181815230906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016136b8565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091829186169063dd62ed3e9060440160206040518083038186803b158015613fdc57600080fd5b505afa158015613ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614014919061466c565b905082811415614028576001915050610cb4565b80156140b85760405163095ea7b360e01b81526001600160a01b0385811660048301526000602483015286169063095ea7b390604401602060405180830381600087803b15801561407857600080fd5b505af115801561408c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b091906147a6565b915050610cb4565b60405163095ea7b360e01b81526001600160a01b0385811660048301526024820185905286169063095ea7b390604401602060405180830381600087803b15801561410257600080fd5b505af1158015614116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413a91906147a6565b95945050505050565b5080546000825590600052602060002090810190610b8b91905b80821115614171576000815560010161415d565b5090565b6001600160a01b0381168114610b8b57600080fd5b60008060006060848603121561419f57600080fd5b83356141aa81614175565b95602085013595506040909401359392505050565b600060208083528351808285015260005b818110156141ec578581018301518582016040015282016141d0565b818111156141fe576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561422757600080fd5b823561423281614175565b946020939093013593505050565b60006020828403121561425257600080fd5b5035919050565b60008060006060848603121561426e57600080fd5b833561427981614175565b9250602084013561428981614175565b929592945050506040919091013590565b60008083601f8401126142ac57600080fd5b50813567ffffffffffffffff8111156142c457600080fd5b6020830191508360208260051b85010111156142df57600080fd5b9250929050565b600080600080606085870312156142fc57600080fd5b843567ffffffffffffffff81111561431357600080fd5b61431f8782880161429a565b90989097506020870135966040013595509350505050565b60006020828403121561434957600080fd5b8135610cb481614175565b60006020828403121561436657600080fd5b813560068110610cb457600080fd5b8015158114610b8b57600080fd5b60006020828403121561439557600080fd5b8135610cb481614375565b6000806000604084860312156143b557600080fd5b83359250602084013567ffffffffffffffff8111156143d357600080fd5b6143df8682870161429a565b9497909650939450505050565b60008060006060848603121561440157600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561442b57600080fd5b823561443681614175565b9150602083013561444681614175565b809150509250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6020808252600f908201526e11549497d393d517d0d49150551151608a1b604082015260600190565b6020808252600b908201526a4552525f5245454e54525960a81b604082015260600190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b60008060006060848603121561451757600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561454257600080fd5b8151610cb481614175565b600181811c9082168061456157607f821691505b6020821081141561458257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526012908201527122a9292fa727aa2fa1a7a72a2927a62622a960711b604082015260600190565b60208082526010908201526f4552525f5a45524f5f4144445245535360801b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015614606576146066145de565b500390565b60208082526010908201526f4552525f4e4f545f535452415445475960801b604082015260600190565b6020808252601c908201527f4552525f4e4f545f434f4e464947555241424c455f5745494748545300000000604082015260600190565b60006020828403121561467e57600080fd5b5051919050565b81835260006001600160fb1b0383111561469e57600080fd5b8260051b8083602087013760009401602001938452509192915050565b6001600160a01b038a81168252602082018a9052610100604083018190526000916146e98483018b8d614685565b92508860608501528760808501528660a08501528560c085015280851660e085015250509a9950505050505050505050565b6006811061473957634e487b7160e01b600052602160045260246000fd5b9052565b600060e082019050835460ff80821615158452808260081c1615156020850152808260101c1615156040850152808260181c1615156060850152808260201c161515608085015261479760a08501828460281c1615159052565b5050610cb460c083018461471b565b6000602082840312156147b857600080fd5b8151610cb481614375565b6020808252601c908201527f4552525f43414e4e4f545f4144445f52454d4f56455f544f4b454e5300000000604082015260600190565b6020808252601c908201527f4552525f4e4f5f5550444154455f445552494e475f4752414455414c00000000604082015260600190565b60208082526014908201527311549497d393d517d3d397d5d2125511531254d560621b604082015260600190565b6001600160a01b03868116825285166020820152604081018490526080606082018190526000906148939083018486614685565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156148dd576148dd61489e565b604052919050565b600067ffffffffffffffff8211156148ff576148ff61489e565b5060051b60200190565b600082601f83011261491a57600080fd5b8151602061492f61492a836148e5565b6148b4565b82815260059290921b8401810191818101908684111561494e57600080fd5b8286015b848110156149695780518352918301918301614952565b509695505050505050565b60006020828403121561498657600080fd5b815167ffffffffffffffff81111561499d57600080fd5b6149a984828501614909565b949350505050565b600060208083850312156149c457600080fd5b825167ffffffffffffffff8111156149db57600080fd5b8301601f810185136149ec57600080fd5b80516149fa61492a826148e5565b81815260059190911b82018301908381019087831115614a1957600080fd5b928401925b82841015614893578351614a3181614175565b82529284019290840190614a1e565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614a6a57614a6a6145de565b5060010190565b600080600060608486031215614a8657600080fd5b8351925060208401519150604084015167ffffffffffffffff811115614aab57600080fd5b614ab786828701614909565b9150509250925092565b60008219821115614ad457614ad46145de565b500190565b6020808252600f908201526e4552525f45524332305f46414c534560881b604082015260600190565b6000816000190483118215151615614b1c57614b1c6145de565b50029056fe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220980eabaa475486b5028844d0d3886488f17b722c9062debdbf6bf7fc2cdc5f6c64736f6c63430008090033000000000000000000000000878fa1ef7d9c7453ea493c2424449d32f1dbd846000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000aa87bee5380000000000000000000000000000000000000000000000000000000000000000005614859504500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164176616c616e63686520536f6369616c20496e646578000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c700000000000000000000000060781c2586d68229fde47564546784ab3faca9820000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd0000000000000000000000008729438eb15e2c8b576fcc6aecda6a148776c0f5000000000000000000000000d1c3f94de7e5b45fa4edbba472491a9f4b166fc4000000000000000000000000a32608e873f9ddef944b24798db69d80bbb4d1ed000000000000000000000000f32398dae246c5f672b52a54e9b413dffcae1a44000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000003e8a65de5a7710200000000000000000000000000000000000000000000000017b57777e4afdda900000000000000000000000000000000000000000000000018be2fb1290c5acc000000000000000000000000000000000000000000000000c4d962ca1c8d6192000000000000000000000000000000000000000000000000015eb7f53851ab928000000000000000000000000000000000000000000000000687d380a711335500000000000000000000000000000000000000000000000007e09db4d9f3f3400000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000001ac871bdde90164000000000000000000000000000000000000000000000000000d4b7ccd14795c000000000000000000000000000000000000000000000000002ce5d65ddf2adc000000000000000000000000000000000000000000000000001041130d8c2866000000000000000000000000000000000000000000000000000e8dbe9fd92ee40000000000000000000000000000000000000000000000000009d3ddf44f548e000000000000000000000000000000000000000000000000001bc16d674ec80000