[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "components": [ { "internalType": "uint256", "name": "burn", "type": "uint256" }, { "internalType": "uint256", "name": "bond", "type": "uint256" }, { "internalType": "uint256", "name": "debond", "type": "uint256" }, { "internalType": "uint256", "name": "buy", "type": "uint256" }, { "internalType": "uint256", "name": "sell", "type": "uint256" }, { "internalType": "uint256", "name": "partner", "type": "uint256" } ], "internalType": "struct IDecentralizedIndex.Fees", "name": "_fees", "type": "tuple" }, { "internalType": "address[]", "name": "_tokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "_weights", "type": "uint256[]" }, { "internalType": "address", "name": "_partner", "type": "address" }, { "internalType": "address", "name": "_pairedLpToken", "type": "address" }, { "internalType": "address", "name": "_lpRewardsToken", "type": "address" }, { "internalType": "address", "name": "_v2Router", "type": "address" }, { "internalType": "bool", "name": "_stakeRestriction", "type": "bool" }, { "internalType": "address", "name": "ownerAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountDAI", "type": "uint256" } ], "name": "AddLiquidity", "type": "event" }, { "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": "wallet", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountTokensBonded", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountTokensMinted", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "feesBond", "type": "uint256" } ], "name": "Bond", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "buyFee", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Buy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newIdx", "type": "address" }, { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" } ], "name": "Create", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountDebonded", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "feesDebond", "type": "uint256" } ], "name": "Debond", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "executor", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "FlashLoan", "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": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountLiquidity", "type": "uint256" } ], "name": "RemoveLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "sellFee", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Sell", "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": "BOND_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DAI", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEBOND_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FLASH_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAIRED_LP_TOKEN", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_idxLPTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_pairedLPTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_slippage", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "addLiquidityV2", "outputs": [], "stateMutability": "nonpayable", "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": [ { "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": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_amountMintMin", "type": "uint256" } ], "name": "bond", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "created", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address[]", "name": "", "type": "address[]" }, { "internalType": "uint8[]", "name": "", "type": "uint8[]" } ], "name": "debond", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fees", "outputs": [ { "internalType": "uint256", "name": "burn", "type": "uint256" }, { "internalType": "uint256", "name": "bond", "type": "uint256" }, { "internalType": "uint256", "name": "debond", "type": "uint256" }, { "internalType": "uint256", "name": "buy", "type": "uint256" }, { "internalType": "uint256", "name": "sell", "type": "uint256" }, { "internalType": "uint256", "name": "partner", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAllAssets", "outputs": [ { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "weighting", "type": "uint256" }, { "internalType": "uint256", "name": "basePriceUSDX96", "type": "uint256" }, { "internalType": "address", "name": "c1", "type": "address" }, { "internalType": "uint256", "name": "q1", "type": "uint256" } ], "internalType": "struct IDecentralizedIndex.IndexAssetInfo[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getIdxPriceUSDX96", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_sourceToken", "type": "address" }, { "internalType": "uint256", "name": "_sourceAmount", "type": "uint256" }, { "internalType": "address", "name": "_targetToken", "type": "address" } ], "name": "getInitialAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "getTokenPriceUSDX96", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "indexTokens", "outputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "weighting", "type": "uint256" }, { "internalType": "uint256", "name": "basePriceUSDX96", "type": "uint256" }, { "internalType": "address", "name": "c1", "type": "address" }, { "internalType": "uint256", "name": "q1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "indexType", "outputs": [ { "internalType": "enum IDecentralizedIndex.IndexType", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "isAsset", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpRewardsToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpStakingPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "partner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "processPreSwapFeesAndSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_lpTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_minIdxTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_minPairedLpToken", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "removeLiquidityV2", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "rescueERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rescueETH", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "burn", "type": "uint256" }, { "internalType": "uint256", "name": "bond", "type": "uint256" }, { "internalType": "uint256", "name": "debond", "type": "uint256" }, { "internalType": "uint256", "name": "buy", "type": "uint256" }, { "internalType": "uint256", "name": "sell", "type": "uint256" }, { "internalType": "uint256", "name": "partner", "type": "uint256" } ], "internalType": "struct IDecentralizedIndex.Fees", "name": "_fees", "type": "tuple" } ], "name": "setFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_partner", "type": "address" } ], "name": "setPartner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6102806040526016805462ffff001916620101001790553480156200002357600080fd5b506040516200b8fc3803806200b8fc8339810160408190526200004691620010b7565b8a8a60008b8989898989898a8a80604051806040016040528060018152602001603160f81b8152508d8d8160039081620000819190620012a2565b506004620000908282620012a2565b50620000a29150839050600562000d41565b61012052620000b381600662000d41565b61014052815160208084019190912060e052815190820120610100524660a0526200014160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250620001568162000d7a565b50606462000168612710601462001384565b6200017491906200139e565b87606001511115620001a35760405162461bcd60e51b81526004016200019a90620013c1565b60405180910390fd5b6064620001b4612710601462001384565b620001c091906200139e565b87608001511115620001e65760405162461bcd60e51b81526004016200019a90620013c1565b6064620001f7612710604662001384565b6200020391906200139e565b875111156200023e5760405162461bcd60e51b81526020600482015260066024820152656c746537302560d01b60448201526064016200019a565b60646200024f612710606362001384565b6200025b91906200139e565b87602001511115620002815760405162461bcd60e51b81526004016200019a90620013e1565b606462000292612710606362001384565b6200029e91906200139e565b87604001511115620002c45760405162461bcd60e51b81526004016200019a90620013e1565b6064620002d5612710600562001384565b620002e191906200139e565b8760a0015111156200031e5760405162461bcd60e51b81526020600482015260056024820152646c7465352560d81b60448201526064016200019a565b87600181111562000333576200033362001400565b6101e08160018111156200034b576200034b62001400565b90525042610200528651600b556020870151600c556040870151600d556060870151600e556080870151600f5560a0870151601055600a80546001600160a01b0319166001600160a01b03888116919091179091558481166102405283811661018052600090861615620003c05785620003d6565b7343000000000000000000000000000000000000035b9050806001600160a01b0316610160816001600160a01b0316815250506000846001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045a919062001416565b6040516364e329cb60e11b81523060048201526001600160a01b038481166024830152919091169063c9c65396906044016020604051808303816000875af1158015620004ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d1919062001416565b90508b604051602001620004e691906200143b565b6040516020818303038152906040528b6040516020016200050891906200146c565b60405160208183030381529060405283838988620005285760006200052a565b335b73e3fd8823ab589808cea33a4b05cd3a6d0b35e1d273a51638fe61d1b17942674e9a3b8c21c899c01ee28a604051620005639062000e0f565b6200057799989796959493929190620014c5565b604051809103906000f08015801562000594573d6000803e3d6000fd5b506001600160a01b03908116610220528181166101a052604080516315ab88c960e31b815290519187169163ad5c4648916004808201926020929091908290030181865afa158015620005eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000611919062001416565b6001600160a01b03166101c052604051339030907f96b5b9b8a7193304150caccf9b80d150675fa3d6af57761d8d8ef1d6f9a1a90990600090a3505050505050505050505050826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000696573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006bc919062001416565b6001600160a01b0316610260528651885114620007055760405162461bcd60e51b81526004016200019a906020808252600490820152631253925560e21b604082015260600190565b60005b88518110156200098a57601260008a83815181106200072b576200072b6200153d565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615620007875760405162461bcd60e51b815260206004820152600360248201526204455560ec1b60448201526064016200019a565b60008882815181106200079e576200079e6200153d565b602002602001015111620007de5760405162461bcd60e51b81526004016200019a9060208082526004908201526315d5905360e21b604082015260600190565b60116040518060a001604052808b84815181106200080057620008006200153d565b60200260200101516001600160a01b031681526020018a84815181106200082b576200082b6200153d565b602090810291909101810151825260008282018190526040808401829052606093840182905285546001818101885596835291839020855160059093020180546001600160a01b039384166001600160a01b03199182161782559386015196810196909655840151600286015591830151600385018054919093169116179055608001516004909101558751889082908110620008cc57620008cc6200153d565b602002602001015160176000828254620008e7919062001553565b9250508190555080601360008b84815181106200090857620009086200153d565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001601260008b84815181106200094f576200094f6200153d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000708565b50600087600081518110620009a357620009a36200153d565b60200260200101516017546c01000000000000000000000000620009c8919062001384565b620009d491906200139e565b905060005b895181101562000ae9576017548a8281518110620009fb57620009fb6200153d565b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a41573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a67919062001569565b62000a7490600a6200168b565b838b848151811062000a8a5762000a8a6200153d565b602002602001015162000a9e919062001384565b62000aaa919062001384565b62000ab691906200139e565b6011828154811062000acc5762000acc6200153d565b6000918252602090912060046005909202010155600101620009d9565b50604051631a33757d60e01b815273430000000000000000000000000000000000000390631a33757d9062000b24906002906004016200169c565b6020604051808303816000875af115801562000b44573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b6a9190620016c5565b50604051631a33757d60e01b815273430000000000000000000000000000000000000490631a33757d9062000ba5906002906004016200169c565b6020604051808303816000875af115801562000bc5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000beb9190620016c5565b507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000c3c57600080fd5b505af115801562000c51573d6000803e3d6000fd5b50506040516336b91f2b60e01b8152732536fe9ab3f511540f2f9e2ec2a805005c3dd80092506336b91f2b915062000c8e908590600401620016df565b600060405180830381600087803b15801562000ca957600080fd5b505af115801562000cbe573d6000803e3d6000fd5b5050604051631d70c8d360e31b8152734300000000000000000000000000000000000002925063eb864698915062000cfb908590600401620016df565b600060405180830381600087803b15801562000d1657600080fd5b505af115801562000d2b573d6000803e3d6000fd5b505050505050505050505050505050506200172d565b600060208351101562000d615762000d598362000dcc565b905062000d74565b8162000d6e8482620012a2565b5060ff90505b92915050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f8151111562000dfa578260405163305a27a960e01b81526004016200019a9190620016f3565b805162000e078262001708565b179392505050565b6150e8806200681483390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000e5e5762000e5e62000e1d565b604052919050565b60005b8381101562000e8357818101518382015260200162000e69565b50506000910152565b600082601f83011262000e9e57600080fd5b81516001600160401b0381111562000eba5762000eba62000e1d565b62000ecf601f8201601f191660200162000e33565b81815284602083860101111562000ee557600080fd5b62000ef882602083016020870162000e66565b949350505050565b600060c0828403121562000f1357600080fd5b60405160c081016001600160401b038111828210171562000f385762000f3862000e1d565b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b60006001600160401b0382111562000f995762000f9962000e1d565b5060051b60200190565b80516001600160a01b038116811462000fbb57600080fd5b919050565b600082601f83011262000fd257600080fd5b8151602062000feb62000fe58362000f7d565b62000e33565b8083825260208201915060208460051b8701019350868411156200100e57600080fd5b602086015b848110156200103557620010278162000fa3565b835291830191830162001013565b509695505050505050565b600082601f8301126200105257600080fd5b815160206200106562000fe58362000f7d565b8083825260208201915060208460051b8701019350868411156200108857600080fd5b602086015b848110156200103557805183529183019183016200108d565b8051801515811462000fbb57600080fd5b60008060008060008060008060008060006102008c8e031215620010da57600080fd5b8b516001600160401b03811115620010f157600080fd5b620010ff8e828f0162000e8c565b60208e0151909c5090506001600160401b038111156200111e57600080fd5b6200112c8e828f0162000e8c565b9a50506200113e8d60408e0162000f00565b6101008d01519099506001600160401b038111156200115c57600080fd5b6200116a8e828f0162000fc0565b6101208e015190995090506001600160401b038111156200118a57600080fd5b620011988e828f0162001040565b975050620011aa6101408d0162000fa3565b9550620011bb6101608d0162000fa3565b9450620011cc6101808d0162000fa3565b9350620011dd6101a08d0162000fa3565b9250620011ee6101c08d01620010a6565b9150620011ff6101e08d0162000fa3565b90509295989b509295989b9093969950565b600181811c908216806200122657607f821691505b6020821081036200124757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200129d576000816000526020600020601f850160051c81016020861015620012785750805b601f850160051c820191505b81811015620012995782815560010162001284565b5050505b505050565b81516001600160401b03811115620012be57620012be62000e1d565b620012d681620012cf845462001211565b846200124d565b602080601f8311600181146200130e5760008415620012f55750858301515b600019600386901b1c1916600185901b17855562001299565b600085815260208120601f198616915b828110156200133f578886015182559484019460019091019084016200131e565b50858210156200135e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000d745762000d746200136e565b600082620013bc57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600690820152656c746532302560d01b604082015260600190565b6020808252600590820152646c7439392560d81b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156200142957600080fd5b620014348262000fa3565b9392505050565b66029ba30b5b2b2160cd1b8152600082516200145f81600785016020870162000e66565b9190910160070192915050565b607360f81b8152600082516200148a81600185016020870162000e66565b9190910160010192915050565b60008151808452620014b181602086016020860162000e66565b601f01601f19169290920160200192915050565b6000610120808352620014db8184018d62001497565b90508281036020840152620014f1818c62001497565b6001600160a01b039a8b166040850152988a1660608401525050948716608086015292861660a085015290851660c0840152841660e08301529092166101009092019190915292915050565b634e487b7160e01b600052603260045260246000fd5b8082018082111562000d745762000d746200136e565b6000602082840312156200157c57600080fd5b815160ff811681146200143457600080fd5b600181815b80851115620015cf578160001904821115620015b357620015b36200136e565b80851615620015c157918102915b93841c939080029062001593565b509250929050565b600082620015e85750600162000d74565b81620015f75750600062000d74565b81600181146200161057600281146200161b576200163b565b600191505062000d74565b60ff8411156200162f576200162f6200136e565b50506001821b62000d74565b5060208310610133831016604e8410600b841016171562001660575081810a62000d74565b6200166c83836200158e565b80600019048211156200168357620016836200136e565b029392505050565b60006200143460ff841683620015d7565b6020810160038310620016bf57634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215620016d857600080fd5b5051919050565b6001600160a01b0391909116815260200190565b60208152600062001434602083018462001497565b80516020808301519190811015620012475760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051614ef56200191f600039600081816129d301526136280152600081816103c701528181613c700152613e6801526000818161043f0152818161171d0152613b590152600081816102c0015261315c0152600061039301526000818161297a01528181612a0201528181612c78015261365f015260008181611f8b0152818161204801528181612085015281816123aa01528181612423015281816124730152613402015260008181610e1901528181610ea201528181610ed101528181611045015281816110e5015281816120a701528181612136015281816123e601528181613b3001528181613d200152613df501526000818161035f01528181610d7b01528181610e4301528181610e8001528181610ef901528181611016015281816110c301528181611151015281816111ea01528181611274015281816120ea01528181613ad801528181613bdf01528181613c9a01528181613cdc01528181613da901528181613e9201528181613ec401528181613f6e015261401001526000610a7b01526000610a500152600061270b015260006126e30152600061263e01526000612668015260006126920152614ef56000f3fe608060405234801561001057600080fd5b506004361061020f5760003560e01c806306fdde0314610214578063095ea7b31461023257806318160ddd1461025557806320800a001461026757806323b872dd1461027157806325e4c443146102845780632acada4d14610297578063313ce567146102ac578063325a19f1146102bb5780633644e515146102e257806339509351146102ea57806342966c68146102fd5780634a437f88146103105780634f4ce61d1461035a57806353f504471461038e57806358f4dcc3146103c257806370a08231146103e9578063715018a6146103fc5780637ecebe001461040457806384b0196e146104175780638da5cb5b1461043257806394cc699e1461043a57806395b3921e1461046157806395d89b41146104775780639af1d35a1461047f5780639d649e66146104ca578063a16d5960146104d2578063a457c2d7146104e5578063a9059cbb146104f8578063a9e9c8bc1461050b578063b08d03331461051e578063bb46302714610531578063bdc8d06014610539578063be10862b14610541578063c87fa42a14610554578063ccec371614610567578063d505accf1461057a578063d757a9fb1461058d578063dd62ed3e146105a0578063e0bab4c4146105b3578063e4b54957146105c1578063ee9c79da146105d4578063f2fde38b146105e7578063f6823996146105fa578063ff140ca61461060d575b600080fd5b61021c610615565b604051610229919061448f565b60405180910390f35b6102456102403660046144be565b6106a7565b6040519015158152602001610229565b6002545b604051908152602001610229565b61026f6106c1565b005b61024561027f3660046144ea565b610848565b61026f610292366004614571565b61086c565b61029f6108a2565b60405161022991906145ea565b60405160128152602001610229565b6102597f000000000000000000000000000000000000000000000000000000000000000081565b610259610939565b6102456102f83660046144be565b610948565b61026f61030b366004614666565b61096a565b61032361031e366004614666565b6109a8565b604080516001600160a01b03968716815260208101959095528401929092529092166060820152608081019190915260a001610229565b6103817f000000000000000000000000000000000000000000000000000000000000000081565b604051610229919061467f565b6103b57f000000000000000000000000000000000000000000000000000000000000000081565b60405161022991906146a9565b6103817f000000000000000000000000000000000000000000000000000000000000000081565b6102596103f73660046146d1565b6109f5565b61026f610a10565b6102596104123660046146d1565b610a24565b61041f610a42565b60405161022997969594939291906146ee565b610381610acb565b6103817f000000000000000000000000000000000000000000000000000000000000000081565b610469610ada565b604051610229929190614787565b61021c610c2f565b600b54600c54600d54600e54600f5460105461049d95949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610229565b610259600a81565b61026f6104e03660046146d1565b610c3e565b6102456104f33660046144be565b610cad565b6102456105063660046144be565b610d28565b61026f610519366004614795565b610d36565b61026f61052c3660046147c7565b6112f8565b61026f61171b565b600d54610259565b600a54610381906001600160a01b031681565b6102456105623660046146d1565b6117ef565b61026f6105753660046146d1565b61180d565b61026f61058836600461480b565b611991565b61025961059b3660046146d1565b611af5565b6102596105ae36600461487c565b611b00565b6103816003604360981b0181565b6102596105cf3660046148b5565b611b2b565b61026f6105e2366004614992565b611ca5565b61026f6105f53660046146d1565b611ec3565b61026f610608366004614795565b611f3c565b600c54610259565b60606003805461062490614a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461065090614a5e565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b5050505050905090565b6000336106b5818585612207565b60019150505b92915050565b60165462010000900460ff166106f25760405162461bcd60e51b81526004016106e990614a92565b60405180910390fd5b6016805462ff000019169055476107335760405162461bcd60e51b815260206004820152600560248201526409c9e8aa8960db1b60448201526064016106e9565b600073a51638fe61d1b17942674e9a3b8c21c899c01ee26001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ab9190614ab2565b6001600160a01b03164760405160006040518083038185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b50509050806108345760405162461bcd60e51b81526004016106e99060208082526004908201526314d1539560e21b604082015260600190565b506016805462ff0000191662010000179055565b60003361085685828561232c565b6108618585856123a6565b506001949350505050565b6108746125d2565b8051600b556020810151600c556040810151600d556060810151600e556080810151600f5560a00151601055565b60606011805480602002602001604051908101604052809291908181526020016000905b828210156109305760008481526020908190206040805160a0810182526005860290920180546001600160a01b03908116845260018083015485870152600283015493850193909352600382015416606084015260040154608083015290835290920191016108c6565b50505050905090565b6000610943612631565b905090565b6000336106b581858561095b8383611b00565b6109659190614ae5565b612207565b60165462010000900460ff166109925760405162461bcd60e51b81526004016106e990614a92565b6016805462ff000019169055610834338261275c565b601181815481106109b857600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092169085565b6001600160a01b031660009081526020819052604090205490565b610a186125d2565b610a226000612879565b565b6001600160a01b0381166000908152600760205260408120546106bb565b600060608082808083610a767f000000000000000000000000000000000000000000000000000000000000000060056128cb565b610aa17f000000000000000000000000000000000000000000000000000000000000000060066128cb565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6009546001600160a01b031690565b60008080600160301b815b601154811015610c2257600082610b2760118481548110610b0857610b08614af8565b60009182526020909120600590910201546001600160a01b0316612976565b610b319190614b0e565b90508260118381548110610b4757610b47614af8565b6000918252602091829020600590910201546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbe9190614b30565b610bc990600a614c31565b60118481548110610bdc57610bdc614af8565b90600052602060002090600502016004015483610bf99190614c40565b610c039190614b0e565b610c0d9190614b0e565b610c179085614ae5565b935050600101610ae5565b5060009491935090915050565b60606004805461062490614a5e565b600a546001600160a01b0316336001600160a01b031614610c8b5760405162461bcd60e51b81526020600482015260076024820152662820a92a2722a960c91b60448201526064016106e9565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60003381610cbb8286611b00565b905083811015610d1b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106e9565b6108618286868403612207565b6000336106b58185856123a6565b60165462010000900460ff16610d5e5760405162461bcd60e51b81526004016106e990614a92565b6016805462ffff00191690556000610d75306109f5565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610dc5919061467f565b602060405180830381865afa158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e069190614c57565b9050610e13333088612d63565b610e3e307f000000000000000000000000000000000000000000000000000000000000000088612207565b610e737f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333088612ef5565b610ec76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087612f60565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8e33700307f000000000000000000000000000000000000000000000000000000000000000089896103e8610f278b82614c70565b610f31908e614c40565b610f3b9190614b0e565b6103e8610f488c82614c70565b610f52908e614c40565b610f5c9190614b0e565b3360405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015260a483015290911660c482015260e48101869052610104016060604051808303816000875af1158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c83565b5050604051636eb1769f60e11b8152600091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd62ed3e9061106d9030907f000000000000000000000000000000000000000000000000000000000000000090600401614cb1565b602060405180830381865afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190614c57565b9050801561110a5761110a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083612ffc565b82611114306109f5565b111561113857611138303385611129306109f5565b6111339190614c70565b612d63565b6040516370a0823160e01b815282906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061118690309060040161467f565b602060405180830381865afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c79190614c57565b111561129b5761129b336040516370a0823160e01b815284906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061121f90309060040161467f565b602060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112609190614c57565b61126a9190614c70565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906130f3565b336001600160a01b03167f06239653922ac7bea6aa2b19dc486b9361821d37712eb796adfd38d81de278ca88886040516112d6929190614787565b60405180910390a250506016805462ffff001916620101001790555050505050565b60165462010000900460ff166113205760405162461bcd60e51b81526004016106e990614a92565b6016805462ffff00191690556001600160a01b03831660009081526012602052604090205460ff166113835760405162461bcd60e51b815260206004820152600c60248201526b24a72b20a624a22a27a5a2a760a11b60448201526064016106e9565b6001600160a01b0383166000818152601360205260408082205490516370a0823160e01b81529092906370a08231906113c090309060040161467f565b602060405180830381865afa1580156113dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114019190614c57565b9050600061140d613112565b90506000816114345782611425600160601b88614c40565b61142f9190614b0e565b61143a565b600160601b5b9050600082156114a5576011858154811061145757611457614af8565b906000526020600020906005020160040154611471601290565b61147c90600a614c31565b61148a600160601b8a614c40565b6114949190614c40565b61149e9190614b0e565b90506114cb565b600160601b826114b460025490565b6114be9190614c40565b6114c89190614b0e565b90505b60006114d633613123565b6114fa57600c54612710906114eb9084614c40565b6114f59190614b0e565b6114fd565b60005b90508661150a8284614c70565b101561153e5760405162461bcd60e51b815260206004820152600360248201526226a4a760e91b60448201526064016106e9565b6115513361154c8385614c70565b61318d565b801561156a57611561308261318d565b61156a8161323a565b60005b6011548110156116a85760008561162f57600160601b856011848154811061159757611597614af8565b60009182526020909120600590910201546040516370a0823160e01b81526001600160a01b03909116906370a08231906115d590309060040161467f565b602060405180830381865afa1580156115f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116169190614c57565b6116209190614c40565b61162a9190614b0e565b611666565b6116668b8b6011858154811061164757611647614af8565b60009182526020909120600590910201546001600160a01b0316611b2b565b905061169f6011838154811061167e5761167e614af8565b60009182526020909120600590910201546001600160a01b03163383613276565b5060010161156d565b506116b16133ab565b806001600160a01b038a16336001600160a01b03167fa0d4c018dc52dcb9f3edfde940bbcf3dbedee971c90c17295f3a93003d5e77a28b866040516116f7929190614787565b60405180910390a450506016805462ffff0019166201010017905550505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179d9190614ab2565b6001600160a01b0316336001600160a01b0316146117e75760405162461bcd60e51b81526020600482015260076024820152665245574152445360c81b60448201526064016106e9565b610a226133d9565b6001600160a01b031660009081526012602052604090205460ff1690565b60165462010000900460ff166118355760405162461bcd60e51b81526004016106e990614a92565b6016805462ff00001916905561184a816117ef565b15801561186057506001600160a01b0381163014155b61189a5760405162461bcd60e51b815260206004820152600b60248201526a554e415641494c41424c4560a81b60448201526064016106e9565b61083473a51638fe61d1b17942674e9a3b8c21c899c01ee26001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119139190614ab2565b6040516370a0823160e01b81526001600160a01b038416906370a082319061193f90309060040161467f565b602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190614c57565b6001600160a01b03841691906130f3565b834211156119e15760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106e9565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888611a108c61353a565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000611a6b82613562565b90506000611a7b8287878761358f565b9050896001600160a01b0316816001600160a01b031614611ade5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106e9565b611ae98a8a8a612207565b50505050505050505050565b60006106bb82612976565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260136020908152604080832054948616835280832054815163313ce56760e01b815291519395949093909263313ce56792600480820193918290030181865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb09190614b30565b611bbb90600a614c31565b60118381548110611bce57611bce614af8565b906000526020600020906005020160010154856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c429190614b30565b611c4d90600a614c31565b60118481548110611c6057611c60614af8565b90600052602060002090600502016001015488611c7d9190614c40565b611c879190614c40565b611c919190614b0e565b611c9b9190614b0e565b9695505050505050565b60165462010000900460ff16611ccd5760405162461bcd60e51b81526004016106e990614a92565b6016805462ffff00191690556000611ce4846135b9565b611d1257600d5461271090611cf99082614c70565b611d039086614c40565b611d0d9190614b0e565b611d14565b835b90506000611d2160025490565b611d2f600160601b84614c40565b611d399190614b0e565b9050611d463330876123a6565b611d50308361275c565b611d62611d5d8387614c70565b61323a565b60005b601154811015611e6b57600060118281548110611d8457611d84614af8565b60009182526020909120600590910201546040516370a0823160e01b81526001600160a01b03909116906370a0823190611dc290309060040161467f565b602060405180830381865afa158015611ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e039190614c57565b90506000600160601b611e168584614c40565b611e209190614b0e565b90508015611e6157611e61338260118681548110611e4057611e40614af8565b60009182526020909120600590910201546001600160a01b031691906130f3565b5050600101611d65565b50611e768286614c70565b60405186815233907feb4e1f68c885fce0dc37cc7eecbff0d11209b7580c2a5d336015497b20af895f9060200160405180910390a350506016805462ffff00191662010100179055505050565b611ecb6125d2565b6001600160a01b038116611f305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e9565b611f3981612879565b50565b60165462010000900460ff16611f645760405162461bcd60e51b81526004016106e990614a92565b6016805462ffff00191690558315611f7c5783612009565b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190611fc890339060040161467f565b602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120099190614c57565b9350600084116120435760405162461bcd60e51b81526020600482015260056024820152644c5052454d60d81b60448201526064016106e9565b6120787f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087612ef5565b6120cc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000086612f60565b60408051635d5155ef60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820187905260648201869052608482018590523360a483015260c4820184905282517f00000000000000000000000000000000000000000000000000000000000000009091169263baa2abde9260e4808201939182900301816000875af1158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a59190614ccb565b50506121ae3390565b6001600160a01b03167fdfdd120ded9b7afc0c23dd5310e93aaa3e1c3b9f75af9b805fab3030842439f2856040516121e891815260200190565b60405180910390a250506016805462ffff001916620101001790555050565b6001600160a01b0383166122695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106e9565b6001600160a01b0382166122ca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106e9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006123388484611b00565b905060001981146123a057818110156123935760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106e9565b6123a08484848403612207565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561241b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b6016549091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908516149060009060ff1615801561246c5750601654610100900460ff165b156125b2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316146124b2576124b26133d9565b8280156124c05750600e5415155b1561253257600e54612710906124d69086614c40565b6124e09190614b0e565b90506124ed863083612d63565b80336001600160a01b03167fa76261e4127b2ebc809716d704216602fdaee4ae5b72745ed9aec0d7bd73b75d3087604051612529929190614cef565b60405180910390a35b8180156125405750600f5415155b156125b257600f54612710906125569086614c40565b6125609190614b0e565b905061256d863083612d63565b80336001600160a01b03167f463904c4b0359ad674399537c3d4e4e44acc0b0dd259453d17329fd9b4be52c030876040516125a9929190614cef565b60405180910390a35b6125bb8161323a565b6125ca86866111338488614c70565b505050505050565b336125db610acb565b6001600160a01b031614610a225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e9565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561268a57507f000000000000000000000000000000000000000000000000000000000000000046145b156126b457507f000000000000000000000000000000000000000000000000000000000000000090565b610943604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166127bc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106e9565b6001600160a01b038216600090815260208190526040902054818110156128305760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106e9565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020614ea0833981519152910161231f565b505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060ff83146128e5576128de836135e4565b90506106bb565b8180546128f190614a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461291d90614a5e565b801561296a5780601f1061293f5761010080835404028352916020019161296a565b820191906000526020600020905b81548152906001019060200180831161294d57829003601f168201915b505050505090506106bb565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036129b9576106bb613623565b60405163e6a4390560e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590612a2a9086907f000000000000000000000000000000000000000000000000000000000000000090600401614cb1565b602060405180830381865afa158015612a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6b9190614ab2565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad19190614ab2565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b379190614b30565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9d9190614ab2565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfe9190614b30565b9050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c659190614d24565b50915091506000612c74613623565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614612d0557612cba84600a614c31565b6001600160701b038416612ccf87600a614c31565b612ce26001600160701b03861685614c40565b612cec9190614c40565b612cf69190614b0e565b612d009190614b0e565b612d56565b612d1085600a614c31565b6001600160701b038316612d2586600a614c31565b612d386001600160701b03871685614c40565b612d429190614c40565b612d4c9190614b0e565b612d569190614b0e565b9998505050505050505050565b6001600160a01b038316612dc75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106e9565b6001600160a01b038216612e295760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106e9565b6001600160a01b03831660009081526020819052604090205481811015612ea15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106e9565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020614ea0833981519152910160405180910390a36123a0565b6040516001600160a01b03808516602483015283166044820152606481018290526123a09085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526139ac565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e90612f919030908790600401614cb1565b602060405180830381865afa158015612fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd29190614c57565b90506123a08463095ea7b360e01b85612feb8686614ae5565b604051602401612f29929190614cef565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e9061302d9030908790600401614cb1565b602060405180830381865afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306e9190614c57565b9050818110156130d25760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b60648201526084016106e9565b6123a08463095ea7b360e01b85858503604051602401612f29929190614cef565b6128748363a9059cbb60e01b8484604051602401612f29929190614cef565b600061311d60025490565b15919050565b600061312d613112565b806106bb5750600a546001600160a01b0383811691161480156131505750601454155b80156106bb57506131847f000000000000000000000000000000000000000000000000000000000000000062093a80614ae5565b42111592915050565b6001600160a01b0382166131e35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106e9565b80600260008282546131f59190614ae5565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020614ea0833981519152910160405180910390a35050565b8015806132475750600b54155b1561324f5750565b611f3930612710600b60000154846132679190614c40565b6132719190614b0e565b61275c565b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906132a590309060040161467f565b602060405180830381865afa1580156132c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e69190614c57565b90506132fd6001600160a01b038516843085612ef5565b6133078282614ae5565b6040516370a0823160e01b81526001600160a01b038616906370a082319061333390309060040161467f565b602060405180830381865afa158015613350573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133749190614c57565b10156123a05760405162461bcd60e51b815260206004820152600660248201526515119495905360d21b60448201526064016106e9565b6014541580156133ce5750600a546001600160a01b0316336001600160a01b0316145b15610a225742601455565b600060146015546133ea9190614ae5565b4211905060006133f9306109f5565b905060006134267f00000000000000000000000000000000000000000000000000000000000000006109f5565b905060006064613437836001614c40565b6134419190614b0e565b90508380156134505750808310155b801561345c5750600082115b156123a0576016805460ff1916600117905542601555600061347f826019614c40565b8410156134ae5761349182600a614c40565b84101561349e57816134b9565b6134a982600a614c40565b6134b9565b6134b9826019614c40565b9050600080600b600501541180156134db5750600a546001600160a01b031615155b1561351657601054612710906134f19084614c40565b6134fb9190614b0e565b600a549091506135169030906001600160a01b031683612d63565b6135286135238284614c70565b613a81565b50506016805460ff1916905550505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b60006106bb61356f612631565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006135a0878787876140f5565b915091506135ad816141af565b5090505b949350505050565b600060646135c660025490565b6135d1906062614c40565b6135db9190614b0e565b90911015919050565b606060006135f1836142f4565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439056003604360981b017f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161369b929190614cb1565b602060405180830381865afa1580156136b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136dc9190614ab2565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561371e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137429190614ab2565b9050600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a99190614b30565b846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380b9190614ab2565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386c9190614b30565b91509150600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156138b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d59190614d24565b5090925090506001600160a01b0385166003604360981b011461394c576138fd83600a614c31565b6001600160701b03831661391286600a614c31565b6139296001600160701b038516600160601b614c40565b6139339190614c40565b61393d9190614b0e565b6139479190614b0e565b6139a1565b61395784600a614c31565b6001600160701b03821661396c85600a614c31565b6139836001600160701b038616600160601b614c40565b61398d9190614c40565b6139979190614b0e565b6139a19190614b0e565b965050505050505090565b6000613a01826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661431c9092919063ffffffff16565b9050805160001480613a22575080806020019051810190613a229190614d69565b6128745760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106e9565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ab657613ab6614af8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110613b0a57613b0a614af8565b60200260200101906001600160a01b031690816001600160a01b031681525050613b55307f000000000000000000000000000000000000000000000000000000000000000084612207565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd99190614ab2565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401613c29919061467f565b602060405180830381865afa158015613c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6a9190614c57565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613ccd5782613ccf565b305b90506002604360981b01197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601613da7576040516338ed173960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338ed173990613d5e908890600090899087904290600401614d8b565b6000604051808303816000875af1158015613d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613da59190810190614dfe565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166003604360981b0114613e6657604051635c11d79560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d79590613e33908890600090899087904290600401614d8b565b600060405180830381600087803b158015613e4d57600080fd5b505af1158015613e61573d6000803e3d6000fd5b505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603613ff6576000827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401613f0e919061467f565b602060405180830381865afa158015613f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4f9190614c57565b613f599190614c70565b90508015613ff057613f956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168583612f60565b6040516345efb3f960e11b8152600481018290526001600160a01b03851690638bdf67f290602401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b506140ee565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061404590879060040161467f565b602060405180830381865afa158015614062573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140869190614c57565b11156140ee576040516370b9f1f960e01b81526001600160a01b038416906370b9f1f9906140bb906000908190600401614787565b600060405180830381600087803b1580156140d557600080fd5b505af11580156140e9573d6000803e3d6000fd5b505050505b5050505050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383111561412257506000905060036141a6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614176573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661419f576000600192509250506141a6565b9150600090505b94509492505050565b60008160048111156141c3576141c3614693565b036141cb5750565b60018160048111156141df576141df614693565b036142275760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b60448201526064016106e9565b600281600481111561423b5761423b614693565b036142885760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106e9565b600381600481111561429c5761429c614693565b03611f395760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106e9565b600060ff8216601f8111156106bb57604051632cd44ac360e21b815260040160405180910390fd5b60606135b1848460008585600080866001600160a01b031685876040516143439190614e83565b60006040518083038185875af1925050503d8060008114614380576040519150601f19603f3d011682016040523d82523d6000602084013e614385565b606091505b5091509150614396878383876143a1565b979650505050505050565b60608315614410578251600003614409576001600160a01b0385163b6144095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106e9565b50816135b1565b6135b183838151156144255781518083602001fd5b8060405162461bcd60e51b81526004016106e9919061448f565b60005b8381101561445a578181015183820152602001614442565b50506000910152565b6000815180845261447b81602086016020860161443f565b601f01601f19169290920160200192915050565b6020815260006144a26020830184614463565b9392505050565b6001600160a01b0381168114611f3957600080fd5b600080604083850312156144d157600080fd5b82356144dc816144a9565b946020939093013593505050565b6000806000606084860312156144ff57600080fd5b833561450a816144a9565b9250602084013561451a816144a9565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156145695761456961452b565b604052919050565b600060c0828403121561458357600080fd5b60405160c081016001600160401b03811182821017156145a5576145a561452b565b8060405250823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201528091505092915050565b602080825282518282018190526000919060409081850190868401855b8281101561465957815180516001600160a01b03908116865287820151888701528682015187870152606080830151909116908601526080908101519085015260a09093019290850190600101614607565b5091979650505050505050565b60006020828403121561467857600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052602160045260246000fd5b60208101600283106146cb57634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156146e357600080fd5b81356144a2816144a9565b60ff60f81b881681526000602060e0602084015261470f60e084018a614463565b8381036040850152614721818a614463565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561477557835183529284019291840191600101614759565b50909c9b505050505050505050505050565b918252602082015260400190565b600080600080608085870312156147ab57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156147dc57600080fd5b83356147e7816144a9565b95602085013595506040909401359392505050565b60ff81168114611f3957600080fd5b600080600080600080600060e0888a03121561482657600080fd5b8735614831816144a9565b96506020880135614841816144a9565b95506040880135945060608801359350608088013561485f816147fc565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561488f57600080fd5b823561489a816144a9565b915060208301356148aa816144a9565b809150509250929050565b6000806000606084860312156148ca57600080fd5b83356148d5816144a9565b92506020840135915060408401356148ec816144a9565b809150509250925092565b60006001600160401b038211156149105761491061452b565b5060051b60200190565b600082601f83011261492b57600080fd5b8135602061494061493b836148f7565b614541565b8083825260208201915060208460051b87010193508684111561496257600080fd5b602086015b8481101561498757803561497a816147fc565b8352918301918301614967565b509695505050505050565b6000806000606084860312156149a757600080fd5b833592506020808501356001600160401b03808211156149c657600080fd5b818701915087601f8301126149da57600080fd5b81356149e861493b826148f7565b81815260059190911b8301840190848101908a831115614a0757600080fd5b938501935b82851015614a2e578435614a1f816144a9565b82529385019390850190614a0c565b965050506040870135925080831115614a4657600080fd5b5050614a548682870161491a565b9150509250925092565b600181811c90821680614a7257607f821691505b60208210810361355c57634e487b7160e01b600052602260045260246000fd5b6020808252600690820152651313d0d2d15160d21b604082015260600190565b600060208284031215614ac457600080fd5b81516144a2816144a9565b634e487b7160e01b600052601160045260246000fd5b808201808211156106bb576106bb614acf565b634e487b7160e01b600052603260045260246000fd5b600082614b2b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614b4257600080fd5b81516144a2816147fc565b600181815b80851115614b88578160001904821115614b6e57614b6e614acf565b80851615614b7b57918102915b93841c9390800290614b52565b509250929050565b600082614b9f575060016106bb565b81614bac575060006106bb565b8160018114614bc25760028114614bcc57614be8565b60019150506106bb565b60ff841115614bdd57614bdd614acf565b50506001821b6106bb565b5060208310610133831016604e8410600b8410161715614c0b575081810a6106bb565b614c158383614b4d565b8060001904821115614c2957614c29614acf565b029392505050565b60006144a260ff841683614b90565b80820281158282048414176106bb576106bb614acf565b600060208284031215614c6957600080fd5b5051919050565b818103818111156106bb576106bb614acf565b600080600060608486031215614c9857600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0392831681529116602082015260400190565b60008060408385031215614cde57600080fd5b505080516020909101519092909150565b6001600160a01b03929092168252602082015260400190565b80516001600160701b0381168114614d1f57600080fd5b919050565b600080600060608486031215614d3957600080fd5b614d4284614d08565b9250614d5060208501614d08565b9150604084015163ffffffff811681146148ec57600080fd5b600060208284031215614d7b57600080fd5b815180151581146144a257600080fd5b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015614ddd5784516001600160a01b031683529383019391830191600101614db8565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215614e1157600080fd5b82516001600160401b03811115614e2757600080fd5b8301601f81018513614e3857600080fd5b8051614e4661493b826148f7565b81815260059190911b82018301908381019087831115614e6557600080fd5b928401925b8284101561439657835182529284019290840190614e6a565b60008251614e9581846020870161443f565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205204657098c24718abfd4d5294d8012cb2008f1e7dd176ad603d0e17df63f9d564736f6c6343000818003360e06040523480156200001157600080fd5b50604051620050e8380380620050e8833981016040819052620000349162000452565b8089896003620000458382620005d5565b506004620000548282620005d5565b5050506200006881620002ff60201b60201c565b503360808190526001600160a01b0387811660a052600680546001600160a01b031916918716919091179055604051849184918a9030908a908790620000ae9062000351565b6001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e001604051809103906000f08015801562000109573d6000803e3d6000fd5b506001600160a01b031660c052604051631a33757d60e01b815273430000000000000000000000000000000000000390631a33757d906200015090600290600401620006a1565b6020604051808303816000875af115801562000170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001969190620006ca565b50604051631a33757d60e01b815273430000000000000000000000000000000000000490631a33757d90620001d190600290600401620006a1565b6020604051808303816000875af1158015620001f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002179190620006ca565b507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200026857600080fd5b505af11580156200027d573d6000803e3d6000fd5b5050604051631d70c8d360e31b81526001600160a01b0384166004820152734300000000000000000000000000000000000002925063eb8646989150602401600060405180830381600087803b158015620002d757600080fd5b505af1158015620002ec573d6000803e3d6000fd5b50505050505050505050505050620006e4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6132238062001ec583390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200038757600080fd5b81516001600160401b0380821115620003a457620003a46200035f565b604051601f8301601f19908116603f01168101908282118183101715620003cf57620003cf6200035f565b8160405283815260209250866020858801011115620003ed57600080fd5b600091505b83821015620004115785820183015181830184015290820190620003f2565b6000602085830101528094505050505092915050565b6001600160a01b03811681146200043d57600080fd5b50565b80516200044d8162000427565b919050565b60008060008060008060008060006101208a8c0312156200047257600080fd5b89516001600160401b03808211156200048a57600080fd5b620004988d838e0162000375565b9a5060208c0151915080821115620004af57600080fd5b50620004be8c828d0162000375565b98505060408a0151620004d18162000427565b60608b0151909750620004e48162000427565b9550620004f460808b0162000440565b94506200050460a08b0162000440565b93506200051460c08b0162000440565b92506200052460e08b0162000440565b9150620005356101008b0162000440565b90509295985092959850929598565b600181811c908216806200055957607f821691505b6020821081036200057a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005d0576000816000526020600020601f850160051c81016020861015620005ab5750805b601f850160051c820191505b81811015620005cc57828155600101620005b7565b5050505b505050565b81516001600160401b03811115620005f157620005f16200035f565b620006098162000602845462000544565b8462000580565b602080601f831160018114620006415760008415620006285750858301515b600019600386901b1c1916600185901b178555620005cc565b600085815260208120601f198616915b82811015620006725788860151825594840194600190910190840162000651565b5085821015620006915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020810160038310620006c457634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215620006dd57600080fd5b5051919050565b60805160a05160c05161179562000730600039600081816102f4015281816110cc01526111780152600081816102cd015281816105a201526108650152600061033601526117956000f3fe608060405234801561001057600080fd5b50600436106101805760003560e01c806306fdde03146101855780630951888f146101a3578063095ea7b3146101b857806318160ddd146101db57806323b872dd146101ed578063260db832146102005780632e17de7814610213578063313ce5671461022657806331a0edec14610235578063395093511461025057806359b36693146102635780635fc3ea0b14610271578063662aa11d1461028457806370a0823114610297578063715018a6146102c057806372f702f3146102c85780638bc6beb2146102ef5780638c4944e5146103165780638da5cb5b1461032957806390eb391114610331578063954fa5ee1461028457806395d89b411461035857806397d7577614610360578063a457c2d71461036e578063a9059cbb14610381578063adc9772e14610394578063c56e0ad8146103a7578063ce56c454146103af578063da0e1dab146103c2578063dba802d9146103d5578063dd62ed3e146103e8578063f2fde38b146103fb575b600080fd5b61018d61040e565b60405161019a9190611472565b60405180910390f35b6101b66101b13660046114c1565b6104a0565b005b6101cb6101c63660046114fd565b61051f565b604051901515815260200161019a565b6002545b60405190815260200161019a565b6101cb6101fb3660046114c1565b610539565b6101b661020e366004611527565b61055d565b6101b6610221366004611563565b610593565b6040516012815260200161019a565b6102436003604360981b0181565b60405161019a919061157c565b6101cb61025e3660046114fd565b610609565b6102436004604360981b0181565b6101b661027f366004611527565b61062b565b6101b6610292366004611590565b61064c565b6101df6102a53660046115c3565b6001600160a01b031660009081526020819052604090205490565b6101b66106cd565b6102437f000000000000000000000000000000000000000000000000000000000000000081565b6102437f000000000000000000000000000000000000000000000000000000000000000081565b6101df6103243660046115c3565b6106e1565b610243610751565b6102437f000000000000000000000000000000000000000000000000000000000000000081565b61018d610760565b6102436002604360981b0181565b6101cb61037c3660046114fd565b61076f565b6101cb61038f3660046114fd565b6107ef565b6101b66103a23660046114fd565b6107fd565b6101b66108d9565b6101b66103bd3660046115e5565b61091e565b600654610243906001600160a01b031681565b6101b66103e33660046115c3565b61095c565b6101df6103f6366004611590565b6109b1565b6101b66104093660046115c3565b6109dc565b60606003805461041d90611608565b80601f016020809104026020016040519081016040528092919081815260200182805461044990611608565b80156104965780601f1061046b57610100808354040283529160200191610496565b820191906000526020600020905b81548152906001019060200180831161047957829003601f168201915b5050505050905090565b6104a8610a55565b604051630951888f60e01b81526002604360981b0190630951888f906104d690869086908690600401611642565b6020604051808303816000875af11580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190611666565b50505050565b60003361052d818585610ab4565b60019150505b92915050565b600033610547858285610bd8565b610552858585610c4c565b506001949350505050565b610565610a55565b604051635569f64b60e11b81526001600160a01b0384169063aad3ec96906104d6908490869060040161167f565b61059d3382610de4565b6105d17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163383610f0b565b60405181815233907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd9060200160405180910390a250565b60003361052d81858561061c83836109b1565b6106269190611698565b610ab4565b610633610a55565b6106476001600160a01b0384168284610f0b565b505050565b610654610a55565b604051634aa7d2f760e11b81526001600160a01b038084166004830152821660248201526002604360981b019063954fa5ee906044016020604051808303816000875af11580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106479190611666565b6106d5610a55565b6106df6000610f61565b565b60405163e12f3a6160e01b81526000906001600160a01b0383169063e12f3a619061071090309060040161157c565b602060405180830381865afa15801561072d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105339190611666565b6005546001600160a01b031690565b60606004805461041d90611608565b6000338161077d82866109b1565b9050838110156107e25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105528286868403610ab4565b60003361052d818585610c4c565b6006546001600160a01b031615610856576006546001600160a01b038381169116146108565760405162461bcd60e51b8152602060048201526008602482015267149154d5149250d560c21b60448201526064016107d9565b6108608282610fb3565b6108957f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633308461106c565b6040518181526001600160a01b0383169033907f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f79060200160405180910390a35050565b6006546001600160a01b0316336001600160a01b03161461090c5760405162461bcd60e51b81526004016107d9906116b9565b600680546001600160a01b0319169055565b610926610a55565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610647573d6000803e3d6000fd5b6006546001600160a01b0316336001600160a01b03161461098f5760405162461bcd60e51b81526004016107d9906116b9565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6109e4610a55565b6001600160a01b038116610a495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d9565b610a5281610f61565b50565b33610a5e610751565b6001600160a01b0316146106df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b6001600160a01b038316610b165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107d9565b6001600160a01b038216610b775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107d9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610be484846109b1565b905060001981146105195781811015610c3f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107d9565b6105198484848403610ab4565b6001600160a01b038316610cb05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107d9565b6001600160a01b038216610d125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107d9565b6001600160a01b03831660009081526020819052604090205481811015610d8a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107d9565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611740833981519152910160405180910390a361051984848461108d565b6001600160a01b038216610e445760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107d9565b6001600160a01b03821660009081526020819052604090205481811015610eb85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107d9565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020611740833981519152910160405180910390a36106478360008461108d565b6106478363a9059cbb60e01b8484604051602401610f2a92919061167f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526111e9565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166110095760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107d9565b806002600082825461101b9190611698565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611740833981519152910160405180910390a36110686000838361108d565b5050565b610519846323b872dd60e01b858585604051602401610f2a93929190611642565b6001600160a01b038316158015906110b057506001600160a01b03831661dead14155b156111395760405163d6460b4b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d6460b4b9061110690869085906001906004016116de565b600060405180830381600087803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505050505b6001600160a01b0382161580159061115c57506001600160a01b03821661dead14155b156106475760405163d6460b4b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d6460b4b906111b290859085906000906004016116de565b600060405180830381600087803b1580156111cc57600080fd5b505af11580156111e0573d6000803e3d6000fd5b50505050505050565b600061123e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166112be9092919063ffffffff16565b905080516000148061125f57508080602001905181019061125f9190611701565b6106475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107d9565b60606112cd84846000856112d5565b949350505050565b6060824710156113365760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016107d9565b600080866001600160a01b031685876040516113529190611723565b60006040518083038185875af1925050503d806000811461138f576040519150601f19603f3d011682016040523d82523d6000602084013e611394565b606091505b50915091506113a5878383876113b0565b979650505050505050565b6060831561141f578251600003611418576001600160a01b0385163b6114185760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d9565b50816112cd565b6112cd83838151156114345781518083602001fd5b8060405162461bcd60e51b81526004016107d99190611472565b60005b83811015611469578181015183820152602001611451565b50506000910152565b602081526000825180602084015261149181604085016020870161144e565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146114bc57600080fd5b919050565b6000806000606084860312156114d657600080fd5b6114df846114a5565b92506114ed602085016114a5565b9150604084013590509250925092565b6000806040838503121561151057600080fd5b611519836114a5565b946020939093013593505050565b60008060006060848603121561153c57600080fd5b611545846114a5565b92506020840135915061155a604085016114a5565b90509250925092565b60006020828403121561157557600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600080604083850312156115a357600080fd5b6115ac836114a5565b91506115ba602084016114a5565b90509250929050565b6000602082840312156115d557600080fd5b6115de826114a5565b9392505050565b600080604083850312156115f857600080fd5b823591506115ba602084016114a5565b600181811c9082168061161c57607f821691505b60208210810361163c57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006020828403121561167857600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b8082018082111561053357634e487b7160e01b600052601160045260246000fd5b6020808252600b908201526a0a48aa6aaa68aa482aaa8960ab1b604082015260600190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b60006020828403121561171357600080fd5b815180151581146115de57600080fd5b6000825161173581846020870161144e565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122022d0cc0d718b8c29e44c88fb3bfb3d37a493ca49c012a05591e4a115e118f90664736f6c63430008180033610140604052600a600555600a6006553480156200001c57600080fd5b5060405162003223380380620032238339810160408190526200003f91620002c9565b806200004b8162000260565b506001600160a01b0380881660c05286811660e05285811660805284811660a05283811661010052821661012052604051631a33757d60e01b815273430000000000000000000000000000000000000390631a33757d90620000b39060029060040162000374565b6020604051808303816000875af1158015620000d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f991906200039d565b50604051631a33757d60e01b815273430000000000000000000000000000000000000490631a33757d90620001349060029060040162000374565b6020604051808303816000875af115801562000154573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017a91906200039d565b507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001cb57600080fd5b505af1158015620001e0573d6000803e3d6000fd5b5050604051631d70c8d360e31b81526001600160a01b0384166004820152734300000000000000000000000000000000000002925063eb8646989150602401600060405180830381600087803b1580156200023a57600080fd5b505af11580156200024f573d6000803e3d6000fd5b5050505050505050505050620003b7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620002c657600080fd5b50565b600080600080600080600060e0888a031215620002e557600080fd5b8751620002f281620002b0565b60208901519097506200030581620002b0565b60408901519096506200031881620002b0565b60608901519095506200032b81620002b0565b60808901519094506200033e81620002b0565b60a08901519093506200035181620002b0565b60c08901519092506200036481620002b0565b8091505092959891949750929550565b60208101600383106200039757634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215620003b057600080fd5b5051919050565b60805160a05160c05160e0516101005161012051612d74620004af600039600081816102f40152818161049e01528181610d4901528181610dc601528181610dfc015281816114a80152818161155c01528181611a2a01528181611f3601528181611fa401526121e00152600081816102870152610ff201526000610b9201526000818161064b015281816111b701526116f00152600081816104c801528181610539015281816105830152818161075c015281816107a4015281816107e701528181610820015281816109e901528181610a8301528181610c1c015281816121b6015261222b015260006121430152612d746000f3fe608060405234801561001057600080fd5b50600436106101335760003560e01c80630700037d146101385780630951888f14610179578063260db8321461018e5780633a98ef39146101a15780635fc3ea0b146101b8578063662aa11d146101cb57806370b9f1f9146101de578063715018a6146101f157806386989038146101f957806389d96917146102025780638bdf67f2146102155780638c4944e5146102285780638da5cb5b1461023b578063954fa5ee146101cb5780639c1454d414610250578063a95ae7eb14610259578063ba32722e14610262578063bde3081814610282578063ce56c454146102a9578063ce7c2ac2146102bc578063d076eabc146102dc578063d1af0c7d146102ef578063d279c19114610316578063d6460b4b14610329578063f2fde38b1461033c575b600080fd5b61015f61014636600461261b565b6004602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61018c610187366004612638565b61034f565b005b61018c61019c366004612679565b6103ce565b6101aa60015481565b604051908152602001610170565b61018c6101c6366004612679565b610404565b61018c6101d93660046126bb565b610425565b61018c6101ec3660046126f4565b61049c565b61018c610c5b565b6101aa60025481565b6101aa61021036600461261b565b610c6f565b61018c610223366004612716565b610cf7565b6101aa61023636600461261b565b610e9a565b610243610f10565b604051610170919061272f565b6101aa60085481565b6101aa60095481565b6101aa610270366004612716565b600a6020526000908152604090205481565b6102437f000000000000000000000000000000000000000000000000000000000000000081565b61018c6102b7366004612743565b610f1f565b6101aa6102ca36600461261b565b60036020526000908152604090205481565b6101aa6102ea366004612716565b610f5d565b6102437f000000000000000000000000000000000000000000000000000000000000000081565b61018c61032436600461261b565b610faf565b61018c610337366004612776565b610fef565b61018c61034a36600461261b565b611061565b6103576110da565b604051630951888f60e01b81526002604360981b0190630951888f90610385908690869086906004016127ad565b6020604051808303816000875af11580156103a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c891906127d1565b50505050565b6103d66110da565b604051635569f64b60e11b81526001600160a01b0384169063aad3ec969061038590849086906004016127ea565b61040c6110da565b6104206001600160a01b0384168284611139565b505050565b61042d6110da565b604051634aa7d2f760e11b81526002604360981b019063954fa5ee906104599085908590600401612803565b6020604051808303816000875af1158015610478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042091906127d1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03160361052e5760405162461bcd60e51b81526020600482015260096024820152684c5052455753414d4560b81b60448201526064015b60405180910390fd5b8115610569576105697f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633308561118f565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906105b890309060040161272f565b602060405180830381865afa1580156105d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f991906127d1565b9050600081116106355760405162461bcd60e51b81526020600482015260076024820152662722a2a22a25a760c91b6044820152606401610525565b6000806106406111b0565b509050801561074f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cb919061281d565b6001600160a01b0316633c9a07006040518163ffffffff1660e01b8152600401602060405180830381865afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c91906127d1565b6107368285612850565b610740919061287d565b915061074c8284612891565b92505b6107976001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167398994a9a7a2570367554589189dc9772241650f685611316565b60006002604360981b01197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316016107e5576107e26003604360981b01856113b2565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166003604360981b0114610c4a5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632acada4d6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561087c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108a49190810190612935565b90506000816000815181106108bb576108bb612a1d565b6020026020010151600001516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016108f2919061272f565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093391906127d1565b604080516001808252818301909252919250600091906020808301908036833701905050905060008160008151811061096e5761096e612a1d565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092526000918160200160208202803683370190505090506000816000815181106109c0576109c0612a1d565b60ff9092166020928302919091019091015260405163774e3ced60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ee9c79da90610a22908b9086908690600401612a78565b600060405180830381600087803b158015610a3c57600080fd5b505af1925050508015610a4d575060015b610ac3576101f46005541015610a7657600a60056000828254610a709190612ad8565b90915550505b610abe6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167398994a9a7a2570367554589189dc9772241650f68a6115c3565b610c45565b600084600081518110610ad857610ad8612a1d565b6020026020010151600001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610b0f919061272f565b602060405180830381865afa158015610b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5091906127d1565b9050610b8585600081518110610b6857610b68612a1d565b6020026020010151600001518583610b809190612891565b6113b2565b95508715610c4357610c437f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c12919061281d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908a611139565b505b505050505b610c53816116ba565b505050505050565b610c636110da565b610c6d60006118c3565b565b6001600160a01b0381166000908152600360205260408120548103610c9657506000919050565b6001600160a01b038216600090815260036020526040812054610cb890611913565b6001600160a01b038416600090815260046020526040902054909150808211610ce5575060009392505050565b610cef8183612891565b949350505050565b60008111610d2f5760405162461bcd60e51b8152602060048201526005602482015264444550414d60d81b6044820152606401610525565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610d7e90309060040161272f565b602060405180830381865afa158015610d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbf91906127d1565b9050610df67f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633308561118f565b610e96817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610e46919061272f565b602060405180830381865afa158015610e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8791906127d1565b610e919190612891565b6116ba565b5050565b60405163e12f3a6160e01b81526000906001600160a01b0383169063e12f3a6190610ec990309060040161272f565b602060405180830381865afa158015610ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0a91906127d1565b92915050565b6000546001600160a01b031690565b610f276110da565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610420573d6000803e3d6000fd5b600080610f698361193c565b925050506201518083610f7c9190612aeb565b610f87600183612891565b610f949062015180612850565b610f9e9085612891565b610fa89190612891565b9392505050565b610fb881611962565b6040516001600160a01b038216907f63e32091e4445d16e29c33a6b264577c2d86694021aa4e6f4dd590048f5792e890600090a250565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146110565760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610525565b610420838383611a98565b6110696110da565b6001600160a01b0381166110ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610525565b6110d7816118c3565b50565b336110e3610f10565b6001600160a01b031614610c6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610525565b6104208363a9059cbb60e01b84846040516024016111589291906127ea565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b30565b6103c8846323b872dd60e01b858585604051602401611158939291906127ad565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611213573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611237919061281d565b90506001600160a01b0381161561131157806001600160a01b031663676011556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa91906127d1565b9250806001600160a01b0316630389ed176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130e91906127d1565b91505b509091565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e906113479030908790600401612803565b602060405180830381865afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138891906127d1565b90506103c88463095ea7b360e01b856113a18686612ad8565b6040516024016111589291906127ea565b6040805160028082526060820183526000928392919060208301908036833701905050905060006001600160a01b0385166004604360981b011461150757848260008151811061140457611404612a1d565b60200260200101906001600160a01b031690816001600160a01b0316815250506004604360981b018260018151811061143f5761143f612a1d565b60200260200101906001600160a01b031690816001600160a01b0316815250506114698285611c05565b90506004604360981b018260008151811061148657611486612a1d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000826001815181106114da576114da612a1d565b60200260200101906001600160a01b031690816001600160a01b0316815250506115048282611c05565b92505b6003604360981b01196001600160a01b038616016115bb576004604360981b018260008151811061153a5761153a612a1d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008260018151811061158e5761158e612a1d565b60200260200101906001600160a01b031690816001600160a01b0316815250506115b88285611c05565b92505b505092915050565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e906115f49030908790600401612803565b602060405180830381865afa158015611611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163591906127d1565b9050818110156116995760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b6064820152608401610525565b6103c88463095ea7b360e01b858585036040516024016111589291906127ea565b806000036116c55750565b6001546000036116d8576110d781611f20565b8060006116e36111b0565b91505080156118055760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611770919061281d565b6001600160a01b0316633c9a07006040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d191906127d1565b6117db8386612850565b6117e5919061287d565b90508015611803576117f681611f20565b6118008184612891565b92505b505b81600960008282546118179190612ad8565b90915550829050600a600061182b42610f5d565b815260200190815260200160002060008282546118489190612ad8565b9091555050600154611868836a0c097ce7bc90715b34b9f160241b612850565b611872919061287d565b600760008282546118839190612ad8565b909155505060405182815233907fb9ad861b752f80117b35bea6dec99933d8a5ae360f2839ee8784b750d5613409906020015b60405180910390a2505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006a0c097ce7bc90715b34b9f160241b600754836119329190612850565b610f0a919061287d565b60008080611955611950620151808661287d565b611fcd565b9196909550909350915050565b6001600160a01b03811660009081526003602052604081205490036119845750565b600061198f82610c6f565b6001600160a01b0383166000908152600460205260408120600101805492935083929091906119bf908490612ad8565b90915550506001600160a01b0382166000908152600360205260409020546119e690611913565b6001600160a01b0383166000908152600460205260409020558015610e96578060086000828254611a179190612ad8565b90915550611a5190506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611139565b816001600160a01b03167fe8b160e373db99a103e0a2abfa029b9c3fc8b328984a1ead8a65ae68ae646db782604051611a8c91815260200190565b60405180910390a25050565b611aa0612141565b8015611aeb57611ab083836122b3565b826001600160a01b03167fae0577e1c96b26fbc0b9df702431f5470979d001d24f136eded791b8b6521d6f836040516118b691815260200190565b611af583836123eb565b826001600160a01b03167fba8f3777cf908803bf1f3dd58e7f4b7d3de4dbe3c234c4ccab0975d98f7cd388836040516118b691815260200190565b6000611b85826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124f39092919063ffffffff16565b9050805160001480611ba6575080806020019051810190611ba69190612aff565b6104205760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610525565b60008083600181518110611c1b57611c1b612a1d565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611c4e919061272f565b602060405180830381865afa158015611c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8f91906127d1565b60405163d06ca61f60e01b81529091506000907398994a9a7a2570367554589189dc9772241650f69063d06ca61f90611cce9087908990600401612b1c565b600060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d139190810190612b35565b9050600060646006546064611d289190612891565b83600181518110611d3b57611d3b612a1d565b6020026020010151611d4d9190612850565b611d57919061287d565b905085600081518110611d6c57611d6c612a1d565b60200260200101516001600160a01b031663095ea7b37398994a9a7a2570367554589189dc9772241650f6876040518363ffffffff1660e01b8152600401611db59291906127ea565b6020604051808303816000875af1158015611dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df89190612aff565b506040516338ed173960e01b81527398994a9a7a2570367554589189dc9772241650f6906338ed173990611e3890889085908b9030904290600401612bba565b6000604051808303816000875af1158015611e57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e7f9190810190612b35565b50600086600181518110611e9557611e95612a1d565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611ec8919061272f565b602060405180830381865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0991906127d1565b9050611f158482612891565b979650505050505050565b604051630852cd8d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611f8257600080fd5b505af1925050508015611f93575060015b6110d7576110d76001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661dead83611139565b60008080838162253d8c611fe48362010bd9612bf6565b611fee9190612bf6565b9050600062023ab1612001836004612c16565b61200b9190612c46565b9050600461201c8262023ab1612c16565b612027906003612bf6565b6120319190612c46565b61203b9083612c74565b9150600062164b0961204e846001612bf6565b61205a90610fa0612c16565b6120649190612c46565b90506004612074826105b5612c16565b61207e9190612c46565b6120889084612c74565b61209390601f612bf6565b9250600061098f6120a5856050612c16565b6120af9190612c46565b9050600060506120c18361098f612c16565b6120cb9190612c46565b6120d59086612c74565b90506120e2600b83612c46565b94506120ef85600c612c16565b6120fa836002612bf6565b6121049190612c74565b91508483612113603187612c74565b61211e906064612c16565b6121289190612bf6565b6121329190612bf6565b9a919950975095505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb4630276040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561219c57600080fd5b505af11580156121b0573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580156122a357506040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061226090309060040161272f565b602060405180830381865afa15801561227d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a191906127d1565b115b15610c6d57610c6d60008061049c565b6001600160a01b038216600090815260036020526040902054158015906122f257506001600160a01b0382166000908152600360205260409020548111155b6123275760405162461bcd60e51b815260206004820152600660248201526552454d4f564560d01b6044820152606401610525565b61233082611962565b80600160008282546123429190612891565b90915550506001600160a01b0382166000908152600360205260408120805483929061236f908490612891565b90915550506001600160a01b03821660009081526003602052604081205490036123a957600280549060006123a383612c9b565b91905055505b6001600160a01b0382166000908152600360205260409020546123cb90611913565b6001600160a01b0390921660009081526004602052604090209190915550565b6001600160a01b038216600090815260036020526040902054156124125761241282611962565b6001600160a01b038216600090815260036020526040812054600180549192849261243e908490612ad8565b90915550506001600160a01b0383166000908152600360205260408120805484929061246b908490612ad8565b90915550508015801561249557506001600160a01b03831660009081526003602052604090205415155b156124b057600280549060006124aa83612cb2565b91905055505b6001600160a01b0383166000908152600360205260409020546124d290611913565b6001600160a01b039093166000908152600460205260409020929092555050565b6060610cef848460008585600080866001600160a01b0316858760405161251a9190612cef565b60006040518083038185875af1925050503d8060008114612557576040519150601f19603f3d011682016040523d82523d6000602084013e61255c565b606091505b5091509150611f1587838387606083156125d75782516000036125d0576001600160a01b0385163b6125d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610525565b5081610cef565b610cef83838151156125ec5781518083602001fd5b8060405162461bcd60e51b81526004016105259190612d0b565b6001600160a01b03811681146110d757600080fd5b60006020828403121561262d57600080fd5b8135610fa881612606565b60008060006060848603121561264d57600080fd5b833561265881612606565b9250602084013561266881612606565b929592945050506040919091013590565b60008060006060848603121561268e57600080fd5b833561269981612606565b92506020840135915060408401356126b081612606565b809150509250925092565b600080604083850312156126ce57600080fd5b82356126d981612606565b915060208301356126e981612606565b809150509250929050565b6000806040838503121561270757600080fd5b50508035926020909101359150565b60006020828403121561272857600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000806040838503121561275657600080fd5b8235915060208301356126e981612606565b80151581146110d757600080fd5b60008060006060848603121561278b57600080fd5b833561279681612606565b92506020840135915060408401356126b081612768565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156127e357600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b60006020828403121561282f57600080fd5b8151610fa881612606565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f0a57610f0a61283a565b634e487b7160e01b600052601260045260246000fd5b60008261288c5761288c612867565b500490565b81810381811115610f0a57610f0a61283a565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156128dc576128dc6128a4565b60405290565b604051601f8201601f191681016001600160401b038111828210171561290a5761290a6128a4565b604052919050565b60006001600160401b0382111561292b5761292b6128a4565b5060051b60200190565b6000602080838503121561294857600080fd5b82516001600160401b0381111561295e57600080fd5b8301601f8101851361296f57600080fd5b805161298261297d82612912565b6128e2565b81815260a091820283018401918482019190888411156129a157600080fd5b938501935b83851015612a115780858a0312156129be5760008081fd5b6129c66128ba565b85516129d181612606565b81528587015187820152604080870151908201526060808701516129f481612606565b9082015260808681015190820152835293840193918501916129a6565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b60008151808452602080850194506020840160005b83811015612a6d5781516001600160a01b031687529582019590820190600101612a48565b509495945050505050565b8381526000602060606020840152612a936060840186612a33565b83810360408501528451808252602080870192019060005b81811015612aca57835160ff1683529284019291840191600101612aab565b509098975050505050505050565b80820180821115610f0a57610f0a61283a565b600082612afa57612afa612867565b500690565b600060208284031215612b1157600080fd5b8151610fa881612768565b828152604060208201526000610cef6040830184612a33565b60006020808385031215612b4857600080fd5b82516001600160401b03811115612b5e57600080fd5b8301601f81018513612b6f57600080fd5b8051612b7d61297d82612912565b81815260059190911b82018301908381019087831115612b9c57600080fd5b928401925b82841015611f1557835182529284019290840190612ba1565b85815284602082015260a060408201526000612bd960a0830186612a33565b6001600160a01b0394909416606083015250608001529392505050565b80820182811260008312801582168215821617156115bb576115bb61283a565b80820260008212600160ff1b84141615612c3257612c3261283a565b8181058314821517610f0a57610f0a61283a565b600082612c5557612c55612867565b600160ff1b821460001984141615612c6f57612c6f61283a565b500590565b8181036000831280158383131683831282161715612c9457612c9461283a565b5092915050565b600081612caa57612caa61283a565b506000190190565b600060018201612cc457612cc461283a565b5060010190565b60005b83811015612ce6578181015183820152602001612cce565b50506000910152565b60008251612d01818460208701612ccb565b9190910192915050565b6020815260008251806020840152612d2a816040850160208701612ccb565b601f01601f1916919091016040019291505056fea2646970667358221220e82394987986a3feaac0eebd9a134b95c35bb064fcc3132c2dc2b8f7395b511264736f6c634300081800330000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aac58a5b640b39b028e0b9166c42d0e4d30efec8000000000000000000000000949185d3be66775ea648f4a306740ea9eff9c56700000000000000000000000098994a9a7a2570367554589189dc9772241650f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ed6fd046ef71e2a71092d1597bcebe578a57a76000000000000000000000000000000000000000000000000000000000000000a6c69717569642d59454c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046c59454c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000949185d3be66775ea648f4a306740ea9eff9c56700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000056bc75e2d63100000