UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,299 lines 77.7 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.XAGFTokenV1Factory = void 0; const contracts_1 = require("@ethersproject/contracts"); class XAGFTokenV1Factory extends contracts_1.ContractFactory { constructor(signer) { super(_abi, _bytecode, signer); } deploy(overrides) { return super.deploy(overrides || {}); } getDeployTransaction(overrides) { return super.getDeployTransaction(overrides || {}); } attach(address) { return super.attach(address); } connect(signer) { return super.connect(signer); } static connect(address, signerOrProvider) { return new contracts_1.Contract(address, _abi, signerOrProvider); } } exports.XAGFTokenV1Factory = XAGFTokenV1Factory; const _abi = [ { inputs: [], stateMutability: "nonpayable", type: "constructor", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "", type: "uint16", }, ], name: "BaselinePercentageUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "by", type: "address", }, { indexed: false, internalType: "bool", name: "paused", type: "bool", }, ], name: "EmergencyPaused", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "underlyingAmountAdded", type: "uint256", }, { indexed: false, internalType: "uint256", name: "underlyingAmountTotal", type: "uint256", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: true, internalType: "uint32", name: "expiry", type: "uint32", }, { indexed: true, internalType: "uint256", name: "referral", type: "uint256", }, ], name: "Locked", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "provider", type: "address", }, { indexed: false, internalType: "address", name: "token", type: "address", }, ], name: "ProviderAdded", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "provider", type: "address", }, ], name: "ProviderRemoved", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "rate", type: "uint256", }, ], name: "RateUpdated", 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: "underlyingAmount", type: "uint256", }, ], name: "Redeemed", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "account", type: "address", }, { indexed: false, internalType: "enum AutolockMode", name: "mode", type: "uint8", }, { indexed: false, internalType: "uint256", name: "error", type: "uint256", }, ], name: "RewardAutolockFailed", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "account", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "enum AutolockMode", name: "mode", type: "uint8", }, ], name: "RewardAutolocked", type: "event", }, { inputs: [], name: "REVISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "UNDERLYING_ASSET_ADDRESS", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, ], name: "addRewardProvider", outputs: [], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "bool", name: "allow", type: "bool", }, ], name: "allowAdd", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, ], name: "allowance", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "enum AutolockMode", name: "mode", type: "uint8", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, { internalType: "uint224", name: "param", type: "uint224", }, ], name: "applyAutolock", outputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "bool", name: "stop", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "approve", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "attachedToRewardController", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], 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: "account", type: "address", }, ], name: "balanceOfUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "balanceOfUnderlyingAndExpiry", outputs: [ { internalType: "uint256", name: "underlying", type: "uint256", }, { internalType: "uint32", name: "availableSince", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint256", name: "decayAmount", type: "uint256", }, { internalType: "uint256", name: "stakeAmount", type: "uint256", }, { internalType: "uint256", name: "stakedTotal", type: "uint256", }, { internalType: "uint256", name: "compensationRatio", type: "uint256", }, ], name: "calcCompensatedDecay", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint32", name: "startTS", type: "uint32", }, { internalType: "uint32", name: "endTS", type: "uint32", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "uint32", name: "current", type: "uint32", }, ], name: "calcDecayForReward", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint32", name: "startTS", type: "uint32", }, { internalType: "uint32", name: "endTS", type: "uint32", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "uint32", name: "current", type: "uint32", }, ], name: "calcDecayTimeCompensation", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint32", name: "at", type: "uint32", }, ], name: "calcRewardFor", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "claimRewardFor", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "", type: "uint32", }, { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint256", name: "baseAmount", type: "uint256", }, { internalType: "uint256", name: "limit", type: "uint256", }, { internalType: "uint16", name: "minPct", type: "uint16", }, ], name: "claimRewardWithLimitFor", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "bool", name: "keepPull", type: "bool", }, { internalType: "uint256", name: "newLimit", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "lockedAmount", type: "uint256", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, ], name: "convertLockedToUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, ], name: "convertUnderlyingToLocked", outputs: [ { internalType: "uint256", name: "lockedAmount", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "decimals", outputs: [ { internalType: "uint8", name: "", type: "uint8", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "detachedFromRewardController", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "getBaselinePercentage", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getOwner", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getPoolName", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRate", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRewardController", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract IMarketAccessController", name: "ac", type: "address", }, ], name: "initialize", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { components: [ { internalType: "contract IRewardController", name: "controller", type: "address", }, { internalType: "string", name: "poolName", type: "string", }, { internalType: "uint16", name: "baselinePercentage", type: "uint16", }, ], internalType: "struct IInitializableRewardPool.InitRewardPoolData", name: "data", type: "tuple", }, ], name: "initializeRewardPool", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { components: [ { internalType: "contract IMarketAccessController", name: "remoteAcl", type: "address", }, { internalType: "string", name: "name", type: "string", }, { internalType: "string", name: "symbol", type: "string", }, { internalType: "uint8", name: "decimals", type: "uint8", }, ], internalType: "struct IInitializableRewardToken.InitRewardTokenData", name: "data", type: "tuple", }, ], name: "initializeRewardToken", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract IMarketAccessController", name: "remoteAcl", type: "address", }, { internalType: "address", name: "underlying", type: "address", }, { internalType: "string", name: "name_", type: "string", }, { internalType: "string", name: "symbol_", type: "string", }, { internalType: "uint8", name: "decimals_", type: "uint8", }, ], name: "initializeToken", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "initializedRewardPoolWith", outputs: [ { components: [ { internalType: "contract IRewardController", name: "controller", type: "address", }, { internalType: "string", name: "poolName", type: "string", }, { internalType: "uint16", name: "baselinePercentage", type: "uint16", }, ], internalType: "struct IInitializableRewardPool.InitRewardPoolData", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isRedeemable", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, { internalType: "uint32", name: "duration", type: "uint32", }, { internalType: "uint256", name: "referral", type: "uint256", }, ], name: "lock", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], name: "lockAdd", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint32", name: "duration", type: "uint32", }, ], name: "lockExtend", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "name", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, ], name: "receiveBoostExcess", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, ], name: "redeem", outputs: [ { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "removeRewardProvider", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "factor", type: "uint16", }, ], name: "setBaselinePercentage", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "rate", type: "uint256", }, ], name: "setBoostRate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "paused", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "symbol", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalOfUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalSupply", outputs: [ { internalType: "uint256", name: "totalSupply_", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "transfer", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "transferFrom", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "scanLimit", type: "uint256", }, ], name: "update", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "baseline", type: "uint256", }, ], name: "updateBaseline", outputs: [ { internalType: "bool", name: "hasBaseline", type: "bool", }, { internalType: "uint256", name: "appliedRate", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x608060405262000013600160001962000b29565b600e556000600f553480156200002857600080fd5b5060405180606001604052806025815260200162005983602591396040805180820190915260048152633c20a3a360e11b6020820152600080546001600160a01b031916815560129030908080838180808381806200009f83838360405180602001604052806000815250620000f560201b60201c565b50508b51620000c199506014985060208d01975095506200098b945050505050565b508151620000d79060159060208501906200098b565b506016805460ff191660ff929092169190911790555062000bfb9050565b600880546001600160a01b0319166001600160a01b03861617905561ffff821615620001265762000126826200013e565b82156200013857620001388362000223565b50505050565b6200014862000269565b61ffff811662000164576200015e600062000223565b620001cc565b620001726001606462000ab4565b6200017f90606462000ab4565b61ffff168161ffff161115620001cc5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b60448201526064015b60405180910390fd5b6008805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b6200022d62000269565b6200023881620002c5565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b9060200162000218565b6008546001600160a01b0316620002c35760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c6572206973207265717569726564000000000000000000006044820152606401620001c3565b565b620002d2600080620002e1565b50620002de8162000416565b50565b6000620002f262093a804262000a77565b6005549091506c01000000000000000000000000900460ff161562000367578215620003615760405162461bcd60e51b815260206004820152601e60248201527f72652d656e74727920746f207374616b65206f7220746f2072656465656d00006044820152606401620001c3565b62000410565b6005544263ffffffff908116680100000000000000009092041614156200038e5762000410565b600080806200039e848662000422565b9194509250905063ffffffff821615620003e9576005805460ff60601b19166c01000000000000000000000000179055620003db8383836200052b565b6005805460ff60601b191690555b50506005805463ffffffff60401b1916680100000000000000004263ffffffff1602179055505b92915050565b620002de814262000723565b60055463ffffffff908116906000908190851683118062000447575063ffffffff8316155b15620004595750600090508062000524565b50600554640100000000900463ffffffff1680620004b55760055460ff90620004999062093a809068010000000000000000900463ffffffff1662000a8e565b620004a5919062000a4c565b620004b290600162000a4c565b90505b600084118015620004d6575083620004d463ffffffff85168262000a31565b115b156200050257620004ee63ffffffff84168562000a31565b93508063ffffffff16841015620005025750825b8463ffffffff168163ffffffff161115620005205784915062000524565b8091505b9250925092565b63ffffffff83166000908152600460209081526040918290208251808401909352546001600160801b038082168452600160801b90910416908201525b8263ffffffff168463ffffffff1611620006be57620005956200058f62093a808662000b03565b620007c2565b80602001516001600160801b031660026000828254620005b6919062000b29565b9250508190555080600001516001600160801b031660016000828254620005de919062000b29565b909155506000905084620005f28162000ba8565b9550505b8263ffffffff168563ffffffff16116200068c5763ffffffff85166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b9092041691830191909152909250151580620006685750600082602001516001600160801b0316115b1562000677575060016200068c565b84620006838162000ba8565b955050620005f6565b80156200069a575062000568565b60055463ffffffff64010000000090910481169086161115620006bc57600094505b505b6005805463ffffffff191663ffffffff86169081179091551580620006f6575060055463ffffffff6401000000009091048116908516115b1562000138576005805463ffffffff86166401000000000263ffffffff60201b1990911617905550505050565b600b546001600160e01b03168214156200073b575050565b6001600160e01b038211156200075057600080fd5b600b5463ffffffff600160e01b90910481169082168114620007bd57600b546001600160e01b039081169062000789908490620007cd16565b600b80546001600160e01b0319166001600160e01b0386811691909117909155620001389082811690849086906200084c16565b505050565b620002de81620008fd565b600b5463ffffffff600160e01b90910481169082161015620008275760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b6044820152606401620001c3565b600b805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b8163ffffffff168163ffffffff1614156200086657505050565b6000620008726200096e565b905080620008805750505050565b6200088a6200097f565b62000896908562000a31565b9350620008b3816ec097ce7bc90715b34b9f100000000062000a77565b620008bf908562000ae1565b9350620008cd838362000b43565b620008df9063ffffffff168562000ae1565b600c6000828254620008f2919062000a31565b909155505050505050565b60008062000923600b546001600160e01b03811691600160e01b90910463ffffffff1690565b90925090506200093383620007cd565b620009408282856200084c565b600c546200095090600162000a31565b63ffffffff9093166000908152600d60205260409020929092555050565b60006200097a60015490565b905090565b60006200097a60025490565b828054620009999062000b6b565b90600052602060002090601f016020900481019282620009bd576000855562000a08565b82601f10620009d857805160ff191683800117855562000a08565b8280016001018555821562000a08579182015b8281111562000a08578251825591602001919060010190620009eb565b5062000a1692915062000a1a565b5090565b5b8082111562000a16576000815560010162000a1b565b6000821982111562000a475762000a4762000bcf565b500190565b600063ffffffff80831681851680830382111562000a6e5762000a6e62000bcf565b01949350505050565b60008262000a895762000a8962000be5565b500490565b600063ffffffff8084168062000aa85762000aa862000be5565b92169190910492915050565b600061ffff8083168185168183048111821515161562000ad85762000ad862000bcf565b02949350505050565b600081600019048311821515161562000afe5762000afe62000bcf565b500290565b600063ffffffff8083168185168183048111821515161562000ad85762000ad862000bcf565b60008282101562000b3e5762000b3e62000bcf565b500390565b600063ffffffff8381169083168181101562000b635762000b6362000bcf565b039392505050565b600181811c9082168062000b8057607f821691505b6020821081141562000ba257634e487b7160e01b600052602260045260246000fd5b50919050565b600063ffffffff8083168181141562000bc55762000bc562000bcf565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b614d788062000c0b6000396000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c806382ab890a11610182578063b6fe2e9c116100e9578063dd62ed3e116100a2578063e68263121161007c578063e6826312146106f0578063f078b80714610703578063f459aa461461073d578063ff85a2ba1461075057600080fd5b8063dd62ed3e146106c0578063dde43cba146106d6578063e1ad46eb146106dd57600080fd5b8063b6fe2e9c1461064a578063b9d121f71461065d578063c00ba29e1461068a578063c4d66de81461069d578063d2993983146106b0578063d9e5103f146106b857600080fd5b8063a2961c9c1161013b578063a2961c9c146105c3578063a8346a8c146105d6578063a9059cbb1461030f578063af92058214610614578063b16a19de14610627578063b187bd261461063857600080fd5b806382ab890a14610530578063893d20e8146105435780638abc37d31461056357806392efda791461059757806395a2251f146105a857806395d89b41146105bb57600080fd5b806337a926261161024157806355f4f197116101fa5780636f499047116101d45780636f499047146104e457806370a08231146104f75780637e4cf20b1461050a578063808d236b1461051d57600080fd5b806355f4f1971461048e57806358f107e514610496578063679aefce146104dc57600080fd5b806337a92626146103ed5780633a7d4089146104005780633af9e669146104155780634800df8c146104475780634d25c4f11461045a578063518e68fa1461047b57600080fd5b806318160ddd1161029357806318160ddd146103845780631bd5ad361461038c5780631dd0f4831461039f57806323b872dd146103b2578063313ce567146103c557806332ca11e9146103da57600080fd5b806306fdde03146102db5780630746363d146102f9578063095ea7b31461030f5780630a5e1019146103325780630ca2103d1461034757806316c38b3c14610371575b600080fd5b6102e3610785565b6040516102f09190614954565b60405180910390f35b610301610817565b6040519081526020016102f0565b61032261031d3660046144e9565b61082c565b60405190151581526020016102f0565b6103456103403660046147da565b610840565b005b61035a6103553660046147aa565b610862565b6040805192151583526020830191909152016102f0565b61034561037f366004614645565b6108bf565b610301610931565b61034561039a3660046147aa565b6109bf565b6103456103ad36600461440c565b6109d3565b6103226103c036600461447c565b6109db565b60165460405160ff90911681526020016102f0565b6103016103e83660046144e9565b6109ef565b6103456103fb366004614720565b610acb565b610408610cbd565b6040516102f09190614967565b61030161042336600461440c565b6001600160a01b03166000908152600660205260409020546001600160c01b031690565b610345610455366004614790565b610d53565b600854600160a01b900461ffff1660405161ffff90911681526020016102f0565b61030161048936600461484a565b610d64565b610301610e4b565b6103456104a43660046144bc565b3360009081526007602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610301610e5a565b6103016104f23660046147da565b610e64565b61030161050536600461440c565b610eeb565b610345610518366004614758565b610f8f565b61030161052b36600461484a565b611189565b61034561053e3660046147aa565b6111d0565b61054b6111db565b6040516001600160a01b0390911681526020016102f0565b610576610571366004614611565b6111e5565b60408051938452602084019290925263ffffffff16908201526060016102f0565b6008546001600160a01b031661054b565b6103016105b636600461440c565b61121e565b6102e3611239565b6103456105d136600461467d565b611248565b6105e96105e4366004614587565b611392565b6040805194855263ffffffff90931660208501529015159183019190915260608201526080016102f0565b600854600160b01b900460ff1615610322565b6000546001600160a01b031661054b565b600854600160b01b900460ff16610322565b610345610658366004614444565b6113be565b61067061066b36600461440c565b6113fc565b6040805192835263ffffffff9091166020830152016102f0565b610301610698366004614830565b611465565b6103456106ab36600461440c565b6114d3565b6102e3611644565b61030161164e565b6103016106ce366004614444565b600092915050565b6001610301565b6103016106eb3660046147fc565b6116ca565b6103016106fe3660046145ce565b611735565b610716610711366004614514565b6117e0565b604080516001600160a01b03909416845260208401929092521515908201526060016102f0565b61030161074b3660046147da565b6119d5565b61076361075e36600461440c565b611a44565b6040805193845263ffffffff90921660208401521515908201526060016102f0565b60606014805461079490614c59565b80601f01602080910402602001604051908101604052809291908181526020018280546107c090614c59565b801561080d5780601f106107e25761010080835404028352916020019161080d565b820191906000526020600020905b8154815290600101906020018083116107f057829003601f168201915b5050505050905090565b6000610821611a68565b50600090565b905090565b6000610836611aaf565b5060005b92915050565b610848611a68565b610853600080611ae7565b5061085e8282611bf8565b5050565b60008061086d611a68565b600854600160a01b900461ffff16610892576000610889611e14565b91509150915091565b6008546108ab908490600160a01b900461ffff16611e28565b90506108b681611f24565b60019150915091565b6108c7611f6c565b60085460ff600160b01b909104161515811515146108f7576008805460ff60b01b1916600160b01b831515021790555b604051811515815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b6000808061094c61094562093a8042614a55565b6000611f9c565b509150915060015492508063ffffffff166000141561096a57505090565b8063ffffffff168263ffffffff16116109ba5763ffffffff82166000908152600460205260409020546109a6906001600160801b031684614bda565b9250816109b281614c94565b92505061096a565b505090565b6109c7611a68565b6109d081611f24565b50565b6109d061208b565b60006109e5611aaf565b5060009392505050565b6000808211610a375760405162461bcd60e51b815260206004820152600f60248201526e5a45524f5f554e4445524c59494e4760881b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260076020908152604080832033845290915290205460ff16610aa35760405162461bcd60e51b815260206004820152601660248201527510511117d513d7d313d0d2d7d49154d5149250d5115160521b6044820152606401610a2e565b600080610ab633868660008060016120cd565b91509150610ac381612721565b509392505050565b60016000806000610adb846128a0565b92509250925080610ca657600f8490556000610afa602087018761440c565b6001600160a01b03166316d6b5f66040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190614428565b604051635c9fcd8560e11b81526210000060048201529091506000906001600160a01b0383169063b93f9b0a9060240160206040518083038186803b158015610bb257600080fd5b505afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614428565b9050610c2c604051806060016040528060258152602001614d1e60259139604051806040016040528060048152602001633c20a3a360e11b8152506012612b16565b610c3581612b56565b610c9e610c45602089018961440c565b6000610c5760608b0160408c01614790565b610c6460208c018c6149af565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b7892505050565b5050600e8490555b81610cb657600e8390556000600f555b5050505050565b610cee604051806060016040528060006001600160a01b0316815260200160608152602001600061ffff1681525090565b6040518060600160405280610d0b6008546001600160a01b031690565b6001600160a01b03168152602001610d2e60408051602081019091526000815290565b8152602001610d4860085461ffff600160a01b9091041690565b61ffff169052919050565b610d5b611a68565b6109d081612bbb565b6000808563ffffffff1611610d7857600080fd5b8363ffffffff168563ffffffff1610610d9057600080fd5b8263ffffffff168563ffffffff161115610da957600080fd5b8363ffffffff168263ffffffff161115610dc257600080fd5b8163ffffffff168363ffffffff161115610ddb57600080fd5b610de58585614bf1565b63ffffffff16610e0260026b033b2e3c9fd0803ce8000000614a55565b610e0c8785614bf1565b63ffffffff16610e1c8887614bf1565b63ffffffff16610e2c91906149f4565b610e369190614b98565b610e409190614a55565b90505b949350505050565b6000610e55611a68565b610821565b6000610827611e14565b600063077f880063ffffffff83161115610e805763077f880091505b62093a80610e9162049d4084614a0c565b610e9b9190614a69565b9150610eaa62093a8083614bb7565b915063077f880063ffffffff83161015610ee45763ffffffff8216610ed363077f880085614b98565b610edd9190614a55565b905061083a565b5090919050565b6000806000610ef984612c89565b915091506000610f064290565b90508163ffffffff168163ffffffff1610610f2657506000949350505050565b6000610f3186612cc9565b6001600160e01b031690506000610f488585614bf1565b63ffffffff16610f588486614bf1565b610f689063ffffffff1684614b98565b610f729190614a55565b9050818110610f85575095945050505050565b9695505050505050565b60016000806000610f9f846128a0565b92509250925080610ca657600f8490556000610fbe602087018761440c565b604051635c9fcd8560e11b81526240000060048201529091506000906001600160a01b0383169063b93f9b0a9060240160206040518083038186803b15801561100657600080fd5b505afa15801561101a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103e9190614428565b604051635c9fcd8560e11b81526210000060048201529091506000906001600160a01b0384169063b93f9b0a9060240160206040518083038186803b15801561108657600080fd5b505afa15801561109a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110be9190614428565b905061115c6110d060208a018a6149af565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111129250505060408b018b6149af565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111579250505060808c0160608d01614892565b612b16565b61116581612b56565b61116e82612d45565b505050600e84905581610cb6575050600e5550506000600f55565b600060026111978686614bf1565b63ffffffff166111a79190614ac3565b6b033b2e3c9fd0803ce800000060026111c08686614bf1565b63ffffffff16610e2c9190614ac3565b61085e600082611ae7565b6000610827612d61565b60008060004263ffffffff168463ffffffff16101561120357600080fd5b61120d8585612dde565b9093506000925090505b9250925092565b6000611228612ebf565b61123182612f04565b90505b919050565b60606015805461079490614c59565b60016000806000611258846128a0565b9250925092508061137557600f849055604051635c9fcd8560e11b81526240000060048201526000906001600160a01b038d169063b93f9b0a9060240160206040518083038186803b1580156112ad57600080fd5b505afa1580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190614428565b905061135c8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152508b9250612b16915050565b6113658b612b56565b61136e81612d45565b50600e8490555b8161138557600e8390556000600f555b5050505050505050505050565b6000806000806113a0611a68565b6113ac88888888612f10565b929b919a509850909650945050505050565b6113c661208b565b60405162461bcd60e51b815260206004820152600b60248201526a155394d5541413d495115160aa1b6044820152606401610a2e565b6001600160a01b0381166000908152600660205260408120546001600160c01b0316908161142f57506000928392509050565b6001600160a01b03831660009081526006602052604090205482906108899062093a8090600160e01b900463ffffffff16614bb7565b6000808263ffffffff16116114ac5760405162461bcd60e51b815260206004820152600d60248201526c2d22a927afa22aa920aa24a7a760991b6044820152606401610a2e565b6000806114bf33336000876000806120cd565b915091506114cc81612721565b5092915050565b600160008060006114e3846128a0565b92509250925080610ca657600f849055604051635c9fcd8560e11b81526240000060048201526000906001600160a01b0387169063b93f9b0a9060240160206040518083038186803b15801561153857600080fd5b505afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190614428565b604051635c9fcd8560e11b81526210000060048201529091506000906001600160a01b0388169063b93f9b0a9060240160206040518083038186803b1580156115b857600080fd5b505afa1580156115cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f09190614428565b9050611632604051806060016040528060258152602001614d1e60259139604051806040016040528060048152602001633c20a3a360e11b8152506012612b16565b61163b81612b56565b610c9e82612d45565b6060610827611239565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082791906147c2565b600080841161170d5760405162461bcd60e51b815260206004820152600f60248201526e5a45524f5f554e4445524c59494e4760881b6044820152606401610a2e565b60008061171f333388888860016120cd565b9150915061172c81612721565b50949350505050565b6000841580611742575081155b1561174e5750836117d7565b8361176c5761175c86612cc9565b6001600160e01b03169350611779565b61177684846149f4565b92505b83831115611799578261178c8584614b98565b6117969190614a55565b91505b6b033b2e3c9fd0803ce800000082106117b45750