[ { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "src", "type": "address" }, { "indexed": true, "internalType": "address", "name": "dst", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "Approval", "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": "LOG_CALL", "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": "LOG_EXIT", "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": "LOG_JOIN", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenIn", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenOut", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" } ], "name": "LOG_SWAP", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "src", "type": "address" }, { "indexed": true, "internalType": "address", "name": "dst", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "constant": true, "inputs": [], "name": "BONE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "BPOW_PRECISION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "EXIT_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "INIT_POOL_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_BOUND_TOKENS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_BPOW_BASE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_IN_RATIO", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_OUT_RATIO", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_TOTAL_WEIGHT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_WEIGHT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MIN_BALANCE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MIN_BOUND_TOKENS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MIN_BPOW_BASE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MIN_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MIN_WEIGHT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "whom", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "denorm", "type": "uint256" } ], "name": "bind", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenBalanceIn", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightIn", "type": "uint256" }, { "internalType": "uint256", "name": "tokenBalanceOut", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightOut", "type": "uint256" }, { "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "calcInGivenOut", "outputs": [ { "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenBalanceIn", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightIn", "type": "uint256" }, { "internalType": "uint256", "name": "tokenBalanceOut", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightOut", "type": "uint256" }, { "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "calcOutGivenIn", "outputs": [ { "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenBalanceOut", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightOut", "type": "uint256" }, { "internalType": "uint256", "name": "poolSupply", "type": "uint256" }, { "internalType": "uint256", "name": "totalWeight", "type": "uint256" }, { "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "calcPoolInGivenSingleOut", "outputs": [ { "internalType": "uint256", "name": "poolAmountIn", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenBalanceIn", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightIn", "type": "uint256" }, { "internalType": "uint256", "name": "poolSupply", "type": "uint256" }, { "internalType": "uint256", "name": "totalWeight", "type": "uint256" }, { "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "calcPoolOutGivenSingleIn", "outputs": [ { "internalType": "uint256", "name": "poolAmountOut", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenBalanceIn", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightIn", "type": "uint256" }, { "internalType": "uint256", "name": "poolSupply", "type": "uint256" }, { "internalType": "uint256", "name": "totalWeight", "type": "uint256" }, { "internalType": "uint256", "name": "poolAmountOut", "type": "uint256" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "calcSingleInGivenPoolOut", "outputs": [ { "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenBalanceOut", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightOut", "type": "uint256" }, { "internalType": "uint256", "name": "poolSupply", "type": "uint256" }, { "internalType": "uint256", "name": "totalWeight", "type": "uint256" }, { "internalType": "uint256", "name": "poolAmountIn", "type": "uint256" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "calcSingleOutGivenPoolIn", "outputs": [ { "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenBalanceIn", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightIn", "type": "uint256" }, { "internalType": "uint256", "name": "tokenBalanceOut", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeightOut", "type": "uint256" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "calcSpotPrice", "outputs": [ { "internalType": "uint256", "name": "spotPrice", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "decreaseApproval", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "poolAmountIn", "type": "uint256" }, { "internalType": "uint256[]", "name": "minAmountsOut", "type": "uint256[]" } ], "name": "exitPool", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "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" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "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" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "finalize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "getBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getColor", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getController", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getCurrentTokens", "outputs": [ { "internalType": "address[]", "name": "tokens", "type": "address[]" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "getDenormalizedWeight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getFinalTokens", "outputs": [ { "internalType": "address[]", "name": "tokens", "type": "address[]" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "getNormalizedWeight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getNumTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" } ], "name": "getSpotPrice", "outputs": [ { "internalType": "uint256", "name": "spotPrice", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" } ], "name": "getSpotPriceSansFee", "outputs": [ { "internalType": "uint256", "name": "spotPrice", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getSwapFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getTotalDenormalizedWeight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "gulp", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "increaseApproval", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "t", "type": "address" } ], "name": "isBound", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isFinalized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isPublicSwap", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "poolAmountOut", "type": "uint256" }, { "internalType": "uint256[]", "name": "maxAmountsIn", "type": "uint256[]" } ], "name": "joinPool", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "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" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "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" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "denorm", "type": "uint256" } ], "name": "rebind", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "name": "setController", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bool", "name": "public_", "type": "bool" } ], "name": "setPublicSwap", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "name": "setSwapFee", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" }, { "internalType": "uint256", "name": "maxPrice", "type": "uint256" } ], "name": "swapExactAmountIn", "outputs": [ { "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" }, { "internalType": "uint256", "name": "spotPriceAfter", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "maxAmountIn", "type": "uint256" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "tokenAmountOut", "type": "uint256" }, { "internalType": "uint256", "name": "maxPrice", "type": "uint256" } ], "name": "swapExactAmountOut", "outputs": [ { "internalType": "uint256", "name": "tokenAmountIn", "type": "uint256" }, { "internalType": "uint256", "name": "spotPriceAfter", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "unbind", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ]
60c0604052601360808190527f42616c616e63657220506f6f6c20546f6b656e0000000000000000000000000060a0908152620000409160039190620000f4565b506040805180820190915260038082527f425054000000000000000000000000000000000000000000000000000000000060209092019182526200008791600491620000f4565b506005805460ff19166012179055348015620000a257600080fd5b50600680546005805462010000600160b01b031916336201000081029190911790915564e8d4a510006007556001600160a01b03199091161760ff60a01b191690556008805460ff1916905562000199565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013757805160ff191683800117855562000167565b8280016001018555821562000167579182015b82811115620001675782518255916020019190600101906200014a565b506200017592915062000179565b5090565b6200019691905b8082111562000175576000815560010162000180565b90565b61580980620001a96000396000f3fe608060405234801561001057600080fd5b50600436106103eb5760003560e01c80638d4e40831161021a578063bc694ea211610135578063d73dd623116100c8578063ec09302111610097578063f8b2cb4f1161007c578063f8b2cb4f14610cac578063f8d6aed414610cd2578063fde924f714610d0d576103eb565b8063ec09302114610c7e578063f1b8a9b714610c86576103eb565b8063d73dd62314610bf2578063dd62ed3e14610c1e578063e4a28a52146104f1578063e4e1e53814610c4c576103eb565b8063cc77828d11610104578063cc77828d14610bb4578063cd2ed8fb14610bbc578063cf5e7bd314610bc4578063d4cadf6814610bea576103eb565b8063bc694ea214610b4c578063be3bbd2e14610b54578063c36596a614610565578063c6580d1214610bac576103eb565b8063a221ee49116101ad578063b7b800a41161017c578063b7b800a414610af9578063ba019dab14610b01578063ba9530a614610b09578063bc063e1a14610b44576103eb565b8063a221ee4914610a19578063a9059cbb14610a4e578063b02f0b7314610a7a578063b0e0d13614610af1576103eb565b8063948d8ce6116101e9578063948d8ce6146109db57806395d89b4114610a01578063992e2a9214610a095780639a86139b14610a11576103eb565b80638d4e40831461099d57806392eefe9b146109a5578063936c3477146109cb5780639381cd2b146109d3576103eb565b806349b595521161030a57806376c7a3c71161029d5780638656b6531161026c5780638656b653146108f9578063867378c514610934578063892980121461093c5780638c28cbe814610977576103eb565b806376c7a3c71461081d5780637c5e9ea4146108255780638201aa3f1461087e57806382f652ad146108be576103eb565b80635db34277116102d95780635db342771461076757806366188463146107995780636d06dfa0146107c557806370a08231146107f7576103eb565b806349b595521461068e5780634bb278f3146106ad5780634f69c0d4146106b55780635c1bbaf71461072c576103eb565b8063218b538211610382578063313ce56711610351578063313ce567146105ed57806334e199071461060b5780633fdddaa21461062a57806346ab38f11461065c576103eb565b8063218b53821461056557806323b872dd1461056d5780632f37b624146105a35780633018205f146105c9576103eb565b80631446a7ff116103be5780631446a7ff146104f957806315e84af91461052757806318160ddd14610555578063189d00ca1461055d576103eb565b806302c96748146103f057806306fdde0314610434578063095ea7b3146104b157806309a3bbe4146104f1575b600080fd5b6104226004803603606081101561040657600080fd5b506001600160a01b038135169060208101359060400135610d15565b60408051918252519081900360200190f35b61043c611081565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561047657818101518382015260200161045e565b50505050905090810190601f1680156104a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104dd600480360360408110156104c757600080fd5b506001600160a01b038135169060200135611117565b604080519115158252519081900360200190f35b61042261117e565b6104226004803603604081101561050f57600080fd5b506001600160a01b038135811691602001351661118b565b6104226004803603604081101561053d57600080fd5b506001600160a01b03813581169160200135166112e0565b61042261142c565b610422611432565b610422611446565b6104dd6004803603606081101561058357600080fd5b506001600160a01b03813581169160208101359091169060400135611452565b6104dd600480360360208110156105b957600080fd5b50356001600160a01b03166115c6565b6105d16115e4565b604080516001600160a01b039092168252519081900360200190f35b6105f5611642565b6040805160ff9092168252519081900360200190f35b6106286004803603602081101561062157600080fd5b503561164b565b005b6106286004803603606081101561064057600080fd5b506001600160a01b03813516906020810135906040013561186c565b6104226004803603606081101561067257600080fd5b506001600160a01b038135169060208101359060400135611cae565b610628600480360360208110156106a457600080fd5b50351515611fb9565b610628612157565b610628600480360360408110156106cb57600080fd5b813591908101906040810160208201356401000000008111156106ed57600080fd5b8201836020820111156106ff57600080fd5b8035906020019184602083028401116401000000008311171561072157600080fd5b509092509050612378565b610422600480360360c081101561074257600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612671565b6104226004803603606081101561077d57600080fd5b506001600160a01b038135169060208101359060400135612729565b6104dd600480360360408110156107af57600080fd5b506001600160a01b038135169060200135612a19565b610422600480360360608110156107db57600080fd5b506001600160a01b038135169060208101359060400135612b03565b6104226004803603602081101561080d57600080fd5b50356001600160a01b0316612e21565b610422612e3c565b610865600480360360a081101561083b57600080fd5b506001600160a01b0381358116916020810135916040820135169060608101359060800135612e4e565b6040805192835260208301919091528051918290030190f35b610865600480360360a081101561089457600080fd5b506001600160a01b038135811691602081013591604082013516906060810135906080013561333f565b610422600480360360c08110156108d457600080fd5b5080359060208101359060408101359060608101359060808101359060a00135613818565b610422600480360360c081101561090f57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356138d7565b610422613978565b610422600480360360c081101561095257600080fd5b5080359060208101359060408101359060608101359060808101359060a0013561398c565b6106286004803603602081101561098d57600080fd5b50356001600160a01b0316613a3c565b6104dd613c09565b610628600480360360208110156109bb57600080fd5b50356001600160a01b0316613c12565b610422613d5d565b610422613db2565b610422600480360360208110156109f157600080fd5b50356001600160a01b0316613dbf565b61043c613e89565b610422613eea565b610422613ef6565b610422600480360360a0811015610a2f57600080fd5b5080359060208101359060408101359060608101359060800135613f1a565b6104dd60048036036040811015610a6457600080fd5b506001600160a01b038135169060200135613f7f565b61062860048036036040811015610a9057600080fd5b81359190810190604081016020820135640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846020830284011164010000000083111715610ae657600080fd5b509092509050613f95565b6104226142dc565b6104226142e1565b6104226142e6565b610422600480360360c0811015610b1f57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356142eb565b61042261436c565b61042261437c565b610b5c614388565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b98578181015183820152602001610b80565b505050509050019250505060405180910390f35b610422614480565b610b5c614485565b6104226144d3565b61062860048036036020811015610bda57600080fd5b50356001600160a01b03166144d9565b610422614868565b6104dd60048036036040811015610c0857600080fd5b506001600160a01b0381351690602001356148bd565b61042260048036036040811015610c3457600080fd5b506001600160a01b0381358116916020013516614950565b61062860048036036060811015610c6257600080fd5b506001600160a01b03813516906020810135906040013561497b565b610422614bff565b61042260048036036020811015610c9c57600080fd5b50356001600160a01b0316614c0f565b61042260048036036020811015610cc257600080fd5b50356001600160a01b0316614ceb565b610422600480360360c0811015610ce857600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614db5565b6104dd614e38565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615610dc3576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16610e1d576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600a602052604090205460ff16610e7a576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600a60205260409020600390810154610eaf91670de0b6b3a76400005b04600101614e48565b831115610f03576040805162461bcd60e51b815260206004820152601160248201527f4552525f4d41585f4f55545f524154494f000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600a6020526040902060038101546002808301549054600b54600754610f3d94939291908990613818565b915081610f83576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b82821115610fc7576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b610fd5816003015485614f2b565b60038201556000610fe68382614e48565b6040805187815290519192506001600160a01b0388169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a36110343384614f99565b6110466110418483614f2b565b614fa7565b600554611062906201000090046001600160a01b031682614fb3565b61106d863387614fbd565b50506005805461ff00191690559392505050565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561110d5780601f106110e25761010080835404028352916020019161110d565b820191906000526020600020905b8154815290600101906020018083116110f057829003601f168201915b5050505050905090565b3360008181526001602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6802b5e3af16b188000081565b600554600090610100900460ff16156111d9576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6001600160a01b0383166000908152600a602052604090205460ff16611236576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090205460ff16611293576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152600a602052604080822092851682528120600380840154600280860154928401549084015493946112d79492939290613f1a565b95945050505050565b600554600090610100900460ff161561132e576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6001600160a01b0383166000908152600a602052604090205460ff1661138b576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090205460ff166113e8576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152600a60205260408082209285168252902060038083015460028085015492840154908401546007546112d794929190613f1a565b60025490565b6402540be400670de0b6b3a76400005b0481565b670de0b6b3a764000081565b6000336001600160a01b038516148061148e57506001600160a01b03841660009081526001602090815260408083203384529091529020548211155b6114df576040805162461bcd60e51b815260206004820152601560248201527f4552525f42544f4b454e5f4241445f43414c4c45520000000000000000000000604482015290519081900360640190fd5b6114ea8484846150af565b336001600160a01b0385161480159061152857506001600160a01b038416600090815260016020908152604080832033845290915290205460001914155b156115bc576001600160a01b038416600090815260016020908152604080832033845290915290205461155b9083614f2b565b6001600160a01b03858116600090815260016020908152604080832033808552908352928190208590558051948552519287169391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35b5060019392505050565b6001600160a01b03166000908152600a602052604090205460ff1690565b600554600090610100900460ff1615611632576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b506006546001600160a01b031690565b60055460ff1690565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156116f7576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff1615611751576040805162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b604482015290519081900360640190fd5b6006546001600160a01b031633146117a5576040805162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b64e8d4a510008110156117ff576040805162461bcd60e51b815260206004820152600b60248201527f4552525f4d494e5f464545000000000000000000000000000000000000000000604482015290519081900360640190fd5b67016345785d8a000081111561185c576040805162461bcd60e51b815260206004820152600b60248201527f4552525f4d41585f464545000000000000000000000000000000000000000000604482015290519081900360640190fd5b6007556005805461ff0019169055565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611918576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff001916610100179055600654336001600160a01b039091161461197d576040805162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b6001600160a01b0383166000908152600a602052604090205460ff166119da576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b60085460ff1615611a25576040805162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b604482015290519081900360640190fd5b670de0b6b3a7640000811015611a82576040805162461bcd60e51b815260206004820152600e60248201527f4552525f4d494e5f574549474854000000000000000000000000000000000000604482015290519081900360640190fd5b6802b5e3af16b1880000811115611ae0576040805162461bcd60e51b815260206004820152600e60248201527f4552525f4d41585f574549474854000000000000000000000000000000000000604482015290519081900360640190fd5b620f4240821015611b38576040805162461bcd60e51b815260206004820152600f60248201527f4552525f4d494e5f42414c414e43450000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600a602052604090206002015480821115611bd857611b71600b54611b6c8484614f2b565b6151c8565b600b8190556802b5e3af16b18800001015611bd3576040805162461bcd60e51b815260206004820152601460248201527f4552525f4d41585f544f54414c5f574549474854000000000000000000000000604482015290519081900360640190fd5b611bf9565b80821015611bf957611bf5600b54611bf08385614f2b565b614f2b565b600b555b6001600160a01b0384166000908152600a602052604090206002810183905560030180549084905580841115611c4257611c3d8533611c388785614f2b565b615222565b611c9c565b80841015611c9c576000611c568286614f2b565b90506000611c65826000614e48565b9050611c7b8733611c768585614f2b565b614fbd565b600554611c999088906201000090046001600160a01b031683614fbd565b50505b50506005805461ff0019169055505050565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611d5c576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16611db6576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600a602052604090205460ff16611e13576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600a6020526040902060038101546002808301549054600b54600754611e4d9493929190899061398c565b915082821015611e94576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6001600160a01b0385166000908152600a60205260409020600390810154611ec491670de0b6b3a7640000610ea6565b821115611f18576040805162461bcd60e51b815260206004820152601160248201527f4552525f4d41585f4f55545f524154494f000000000000000000000000000000604482015290519081900360640190fd5b611f26816003015483614f2b565b60038201556000611f378582614e48565b6040805185815290519192506001600160a01b0388169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a3611f853386614f99565b611f926110418683614f2b565b600554611fae906201000090046001600160a01b031682614fb3565b61106d863385614fbd565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612065576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16156120bf576040805162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b604482015290519081900360640190fd5b6006546001600160a01b03163314612113576040805162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b60068054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9092169190911790556005805461ff0019169055565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612203576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff001916610100179055600654336001600160a01b0390911614612268576040805162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b60085460ff16156122b3576040805162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b604482015290519081900360640190fd5b6009546002111561230b576040805162461bcd60e51b815260206004820152600e60248201527f4552525f4d494e5f544f4b454e53000000000000000000000000000000000000604482015290519081900360640190fd5b6008805460ff19166001179055600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b17905561235868056bc75e2d63100000615294565b61236b3368056bc75e2d63100000614fb3565b6005805461ff0019169055565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612424576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff1661247e576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b600061248861142c565b90506000612496858361529d565b9050806124dc576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b60005b60095481101561265d576000600982815481106124f857fe5b60009182526020808320909101546001600160a01b0316808352600a90915260408220600301549092509061252d8583614e48565b905080612573576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b87878581811061257f57fe5b905060200201358111156125c9576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b6001600160a01b0383166000908152600a60205260409020600301546125ef90826151c8565b6001600160a01b0384166000818152600a60209081526040918290206003019390935580518481529051919233927f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a9281900390910190a3612652833383615222565b5050506001016124df565b5061266785615294565b611c9c3386614fb3565b60008061267e878661529d565b9050600061268c87866151c8565b9050600061269a828961529d565b905060006126b0670de0b6b3a76400008561529d565b905060006126be83836153d0565b905060006126cc828e614e48565b905060006126da828f614f2b565b905060006126f96126f3670de0b6b3a76400008a614f2b565b8b614e48565b905061271682612711670de0b6b3a764000084614f2b565b61529d565b9f9e505050505050505050505050505050565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156127d7576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16612831576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600a602052604090205460ff1661288e576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600a60205260409020600301546128c0906002670de0b6b3a76400005b04614e48565b831115612914576040805162461bcd60e51b815260206004820152601060248201527f4552525f4d41585f494e5f524154494f00000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600a6020526040902060038101546002808301549054600b5460075461294e949392919089906138d7565b915082821015612995576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6129a38160030154856151c8565b60038201556040805185815290516001600160a01b0387169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a9181900360200190a36129f182615294565b6129fb3383614fb3565b612a06853386615222565b506005805461ff00191690559392505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205480831115612a6e573360009081526001602090815260408083206001600160a01b0388168452909152812055612a9d565b612a788184614f2b565b3360009081526001602090815260408083206001600160a01b03891684529091529020555b3360008181526001602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612bb1576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16612c0b576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600a602052604090205460ff16612c68576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600a6020526040902060038101546002808301549054600b54600754612ca294939291908990612671565b915081612ce8576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b82821115612d2c576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b6001600160a01b0385166000908152600a6020526040902060030154612d5c906002670de0b6b3a76400006128ba565b821115612db0576040805162461bcd60e51b815260206004820152601060248201527f4552525f4d41585f494e5f524154494f00000000000000000000000000000000604482015290519081900360640190fd5b612dbe8160030154836151c8565b60038201556040805183815290516001600160a01b0387169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a9181900360200190a3612e0c84615294565b612e163385614fb3565b612a06853384615222565b6001600160a01b031660009081526020819052604090205490565b620f4240670de0b6b3a7640000611442565b60408051602080825236908201819052600092839233926001600160e01b03198535169285929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612eeb576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff0019166101001790556001600160a01b0387166000908152600a602052604090205460ff16612f57576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0385166000908152600a602052604090205460ff16612fb4576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b600654600160a01b900460ff16613012576040805162461bcd60e51b815260206004820152601360248201527f4552525f535741505f4e4f545f5055424c494300000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038088166000908152600a60205260408082209288168252902060038082015461304b91670de0b6b3a7640000610ea6565b86111561309f576040805162461bcd60e51b815260206004820152601160248201527f4552525f4d41585f4f55545f524154494f000000000000000000000000000000604482015290519081900360640190fd5b60006130c08360030154846002015484600301548560020154600754613f1a565b905085811115613117576040805162461bcd60e51b815260206004820152601360248201527f4552525f4241445f4c494d49545f505249434500000000000000000000000000604482015290519081900360640190fd5b61313783600301548460020154846003015485600201548b600754614db5565b94508885111561317d576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b61318b8360030154866151c8565b83600301819055506131a1826003015488614f2b565b6003808401829055840154600280860154908501546007546131c4949190613f1a565b93508084101561320d576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b85841115613262576040805162461bcd60e51b815260206004820152600f60248201527f4552525f4c494d49545f50524943450000000000000000000000000000000000604482015290519081900360640190fd5b61326c858861529d565b8111156132b2576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b876001600160a01b03168a6001600160a01b0316336001600160a01b03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d43378888b604051808381526020018281526020019250505060405180910390a461331a8a3387615222565b613325883389614fbd565b5050506005805461ff001916905590969095509350505050565b60408051602080825236908201819052600092839233926001600160e01b03198535169285929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156133dc576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff0019166101001790556001600160a01b0387166000908152600a602052604090205460ff16613448576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0385166000908152600a602052604090205460ff166134a5576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b600654600160a01b900460ff16613503576040805162461bcd60e51b815260206004820152601360248201527f4552525f535741505f4e4f545f5055424c494300000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038088166000908152600a602052604080822092881682529020600382015461353d906002670de0b6b3a76400006128ba565b881115613591576040805162461bcd60e51b815260206004820152601060248201527f4552525f4d41585f494e5f524154494f00000000000000000000000000000000604482015290519081900360640190fd5b60006135b28360030154846002015484600301548560020154600754613f1a565b905085811115613609576040805162461bcd60e51b815260206004820152601360248201527f4552525f4241445f4c494d49545f505249434500000000000000000000000000604482015290519081900360640190fd5b61362983600301548460020154846003015485600201548d6007546142eb565b945086851015613670576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b61367e83600301548a6151c8565b8360030181905550613694826003015486614f2b565b6003808401829055840154600280860154908501546007546136b7949190613f1a565b935080841015613700576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b85841115613755576040805162461bcd60e51b815260206004820152600f60248201527f4552525f4c494d49545f50524943450000000000000000000000000000000000604482015290519081900360640190fd5b61375f898661529d565b8111156137a5576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b876001600160a01b03168a6001600160a01b0316336001600160a01b03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433788c89604051808381526020018281526020019250505060405180910390a461380d8a338b615222565b613325883387614fbd565b600080613825878661529d565b9050600061383b670de0b6b3a764000083614f2b565b905060006138498286614e48565b9050600061386387612711670de0b6b3a764000085614f2b565b905060006138718c83614f2b565b9050600061387f828e61529d565b9050600061388d82886153d0565b9050600061389b828e614e48565b905060006138a98e83614f2b565b90506138c281612711670de0b6b3a76400006000614f2b565b99505050505050505050509695505050505050565b6000806138e4878661529d565b905060006139036138fd670de0b6b3a764000084614f2b565b85614e48565b905060006139228661391d670de0b6b3a764000085614f2b565b614e48565b905060006139308b836151c8565b9050600061393e828d61529d565b9050600061394c82876153d0565b9050600061395a828d614e48565b9050613966818d614f2b565b9e9d5050505050505050505050505050565b64e8d4a51000670de0b6b3a7640000611442565b600080613999878661529d565b905060006139b48561391d670de0b6b3a76400006000614f2b565b905060006139c28883614f2b565b905060006139d0828a61529d565b905060006139ef826139ea670de0b6b3a76400008861529d565b6153d0565b905060006139fd828e614e48565b90506000613a0b8e83614f2b565b90506000613a246126f3670de0b6b3a76400008a614f2b565b90506127168261391d670de0b6b3a764000084614f2b565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615613ae8576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff0019166101001790556001600160a01b0381166000908152600a602052604090205460ff16613b54576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038316916370a08231916024808301926020929190829003018186803b158015613bb357600080fd5b505afa158015613bc7573d6000803e3d6000fd5b505050506040513d6020811015613bdd57600080fd5b50516001600160a01b039091166000908152600a60205260409020600301556005805461ff0019169055565b60085460ff1690565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615613cbe576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff001916610100179055600654336001600160a01b0390911614613d23576040805162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556005805461ff0019169055565b600554600090610100900460ff1615613dab576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b50600b5490565b68056bc75e2d6310000081565b600554600090610100900460ff1615613e0d576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090205460ff16613e6a576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b506001600160a01b03166000908152600a602052604090206002015490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561110d5780601f106110e25761010080835404028352916020019161110d565b6704a03ce68d21555681565b7f42524f4e5a45000000000000000000000000000000000000000000000000000090565b600080613f27878761529d565b90506000613f35868661529d565b90506000613f43838361529d565b90506000613f65670de0b6b3a7640000612711670de0b6b3a764000089614f2b565b9050613f718282614e48565b9a9950505050505050505050565b6000613f8c3384846150af565b50600192915050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615614041576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff1661409b576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b60006140a561142c565b905060006140b4856000614e48565b905060006140c28683614f2b565b905060006140d0828561529d565b905080614116576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b6141203388614f99565b60055461413c906201000090046001600160a01b031684614fb3565b61414582614fa7565b60005b6009548110156142c75760006009828154811061416157fe5b60009182526020808320909101546001600160a01b0316808352600a9091526040822060030154909250906141968583614e48565b9050806141dc576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8989858181106141e857fe5b90506020020135811015614233576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6001600160a01b0383166000908152600a60205260409020600301546142599082614f2b565b6001600160a01b0384166000818152600a60209081526040918290206003019390935580518481529051919233927fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed9281900390910190a36142bc833383614fbd565b505050600101614148565b50506005805461ff0019169055505050505050565b600881565b600281565b600181565b6000806142f8878661529d565b9050600061430e670de0b6b3a764000085614f2b565b905061431a8582614e48565b9050600061432c8a6127118c856151c8565b9050600061433a82856153d0565b90506000614350670de0b6b3a764000083614f2b565b905061435c8a82614e48565b9c9b505050505050505050505050565b600a670de0b6b3a7640000611442565b671bc16d674ec7ffff81565b600554606090610100900460ff16156143d6576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b60085460ff16614421576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b600980548060200260200160405190810160405280929190818152602001828054801561110d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614459575050505050905090565b600081565b600554606090610100900460ff1615614421576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b60095490565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615614585576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6005805461ff001916610100179055600654336001600160a01b03909116146145ea576040805162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff16614647576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b60085460ff1615614692576040805162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b604482015290519081900360640190fd5b6001600160a01b0381166000908152600a6020526040812060030154906146b98282614e48565b600b546001600160a01b0385166000908152600a60205260409020600201549192506146e491614f2b565b600b556001600160a01b0383166000908152600a602052604090206001015460098054600019810191908290811061471857fe5b600091825260209091200154600980546001600160a01b03909216918490811061473e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600a60006009858154811061477e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190206001015560098054806147b157fe5b600082815260208082206000199084018101805473ffffffffffffffffffffffffffffffffffffffff1916905590920190925560408051608081018252838152808301848152818301858152606083018681526001600160a01b038c168752600a909552929094209051815460ff1916901515178155925160018401555160028301555160039091015561484a8533611c768787614f2b565b600554611c9c9086906201000090046001600160a01b031685614fbd565b600554600090610100900460ff16156148b6576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b5060075490565b3360009081526001602090815260408083206001600160a01b03861684529091528120546148eb90836151c8565b3360008181526001602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a26006546001600160a01b03163314614a30576040805162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b6001600160a01b0383166000908152600a602052604090205460ff1615614a9e576040805162461bcd60e51b815260206004820152600c60248201527f4552525f49535f424f554e440000000000000000000000000000000000000000604482015290519081900360640190fd5b60085460ff1615614ae9576040805162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b604482015290519081900360640190fd5b600954600811614b40576040805162461bcd60e51b815260206004820152600e60248201527f4552525f4d41585f544f4b454e53000000000000000000000000000000000000604482015290519081900360640190fd5b6040805160808101825260018082526009805460208085019182526000858701818152606087018281526001600160a01b038c16808452600a9094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19169091179055614bfa83838361186c565b505050565b6002670de0b6b3a7640000611442565b600554600090610100900460ff1615614c5d576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090205460ff16614cba576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600a6020526040902060020154600b54614ce490829061529d565b9392505050565b600554600090610100900460ff1615614d39576040805162461bcd60e51b815260206004820152600b60248201526a4552525f5245454e54525960a81b604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090205460ff16614d96576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b506001600160a01b03166000908152600a602052604090206003015490565b600080614dc2858861529d565b90506000614dd08786614f2b565b90506000614dde888361529d565b90506000614dec82856153d0565b9050614e0081670de0b6b3a7640000614f2b565b9050614e14670de0b6b3a764000087614f2b565b9450614e29614e238c83614e48565b8661529d565b9b9a5050505050505050505050565b600654600160a01b900460ff1690565b6000828202831580614e62575082848281614e5f57fe5b04145b614eb3576040805162461bcd60e51b815260206004820152601060248201527f4552525f4d554c5f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b6706f05b59d3b20000810181811015614f13576040805162461bcd60e51b815260206004820152601060248201527f4552525f4d554c5f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b6000670de0b6b3a7640000825b049695505050505050565b6000806000614f3a85856154ed565b915091508015614f91576040805162461bcd60e51b815260206004820152601160248201527f4552525f5355425f554e444552464c4f57000000000000000000000000000000604482015290519081900360640190fd5b509392505050565b614fa38282615512565b5050565b614fb08161551d565b50565b614fa382826155f6565b604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052915160009286169163a9059cbb91604480830192602092919082900301818787803b15801561502957600080fd5b505af115801561503d573d6000803e3d6000fd5b505050506040513d602081101561505357600080fd5b50519050806150a9576040805162461bcd60e51b815260206004820152600f60248201527f4552525f45524332305f46414c53450000000000000000000000000000000000604482015290519081900360640190fd5b50505050565b6001600160a01b03831660009081526020819052604090205481111561511c576040805162461bcd60e51b815260206004820152601460248201527f4552525f494e53554646494349454e545f42414c000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526020819052604090205461513f9082614f2b565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461516e90826151c8565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082820183811015614ce4576040805162461bcd60e51b815260206004820152601060248201527f4552525f4144445f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301523060248301526044820184905291516000928616916323b872dd91606480830192602092919082900301818787803b15801561502957600080fd5b614fb081615601565b6000816152f1576040805162461bcd60e51b815260206004820152600c60248201527f4552525f4449565f5a45524f0000000000000000000000000000000000000000604482015290519081900360640190fd5b670de0b6b3a764000083028315806153195750670de0b6b3a764000084828161531657fe5b04145b61536a576040805162461bcd60e51b815260206004820152601060248201527f4552525f4449565f494e5445524e414c00000000000000000000000000000000604482015290519081900360640190fd5b600283048101818110156153c5576040805162461bcd60e51b815260206004820152601060248201527f4552525f4449565f494e5445524e414c00000000000000000000000000000000604482015290519081900360640190fd5b6000848281614f2057fe5b60006001831015615428576040805162461bcd60e51b815260206004820152601560248201527f4552525f42504f575f424153455f544f4f5f4c4f570000000000000000000000604482015290519081900360640190fd5b671bc16d674ec7ffff831115615485576040805162461bcd60e51b815260206004820152601660248201527f4552525f42504f575f424153455f544f4f5f4849474800000000000000000000604482015290519081900360640190fd5b600061549083615676565b9050600061549e8483614f2b565b905060006154b4866154af85615691565b61569f565b9050816154c5579250611178915050565b60006154d687846305f5e1006156f6565b90506154e28282614e48565b979650505050505050565b600080828410615503575050808203600061550b565b505081810360015b9250929050565b614fa38230836150af565b30600090815260208190526040902054811115615581576040805162461bcd60e51b815260206004820152601460248201527f4552525f494e53554646494349454e545f42414c000000000000000000000000604482015290519081900360640190fd5b3060009081526020819052604090205461559b9082614f2b565b306000908152602081905260409020556002546155b89082614f2b565b60025560408051828152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b614fa33083836150af565b3060009081526020819052604090205461561b90826151c8565b3060009081526020819052604090205560025461563890826151c8565b60025560408051828152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b6000670de0b6b3a764000061568a83615691565b0292915050565b670de0b6b3a7640000900490565b600080600283066156b857670de0b6b3a76400006156ba565b835b90506002830492505b8215614ce4576156d38485614e48565b935060028306156156eb576156e88185614e48565b90505b6002830492506156c3565b600082818061570d87670de0b6b3a76400006154ed565b9092509050670de0b6b3a764000080600060015b8884106157c5576000670de0b6b3a7640000820290506000806157558a61575085670de0b6b3a7640000614f2b565b6154ed565b915091506157678761391d848c614e48565b9650615773878461529d565b965086615782575050506157c5565b871561578c579315935b8015615796579315935b84156157ad576157a68688614f2b565b95506157ba565b6157b786886151c8565b95505b505050600101615721565b5090999850505050505050505056fea265627a7a7231582008be3d1ae8df326becfb0d7fa15f3da56c3488a4813f666aa4154f7433e2a31e64736f6c634300050c0032