UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,020 lines 58.8 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MockRewardedTokenLockerFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class MockRewardedTokenLockerFactory extends contracts_1.ContractFactory { constructor(signer) { super(_abi, _bytecode, signer); } deploy(controller, initialRate, baselinePercentage, underlying, overrides) { return super.deploy(controller, initialRate, baselinePercentage, underlying, overrides || {}); } getDeployTransaction(controller, initialRate, baselinePercentage, underlying, overrides) { return super.getDeployTransaction(controller, initialRate, baselinePercentage, underlying, 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.MockRewardedTokenLockerFactory = MockRewardedTokenLockerFactory; const _abi = [ { inputs: [ { internalType: "contract IRewardController", name: "controller", type: "address", }, { internalType: "uint256", name: "initialRate", type: "uint256", }, { internalType: "uint16", name: "baselinePercentage", type: "uint16", }, { internalType: "address", name: "underlying", type: "address", }, ], 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: "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: "stakeAmount", 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: "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: "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: [], 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: [ { 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: "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 = "0x60806040523480156200001157600080fd5b506040516200428738038062004287833981016040819052620000349162000920565b600080546001600160a01b0319166001600160a01b0383161790558383838383838362000079838383604051806020016040528060008152506200008a60201b60201c565b505050505050505050505062000b23565b600880546001600160a01b0319166001600160a01b03861617905561ffff821615620000bb57620000bb82620000d3565b8215620000cd57620000cd83620001b8565b50505050565b620000dd620001fe565b61ffff8116620000f957620000f36000620001b8565b62000161565b620001076001606462000a03565b6200011490606462000a03565b61ffff168161ffff161115620001615760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b60448201526064015b60405180910390fd5b6008805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b620001c2620001fe565b620001cd816200025a565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b90602001620001ad565b6008546001600160a01b0316620002585760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c657220697320726571756972656400000000000000000000604482015260640162000158565b565b6200026760008062000276565b506200027381620003ab565b50565b60006200028762093a8042620009c6565b6005549091506c01000000000000000000000000900460ff1615620002fc578215620002f65760405162461bcd60e51b815260206004820152601e60248201527f72652d656e74727920746f207374616b65206f7220746f2072656465656d0000604482015260640162000158565b620003a5565b6005544263ffffffff908116680100000000000000009092041614156200032357620003a5565b60008080620003338486620003b7565b9194509250905063ffffffff8216156200037e576005805460ff60601b19166c0100000000000000000000000017905562000370838383620004c0565b6005805460ff60601b191690555b50506005805463ffffffff60401b1916680100000000000000004263ffffffff1602179055505b92915050565b620002738142620006b8565b60055463ffffffff9081169060009081908516831180620003dc575063ffffffff8316155b15620003ee57506000905080620004b9565b50600554640100000000900463ffffffff16806200044a5760055460ff906200042e9062093a809068010000000000000000900463ffffffff16620009dd565b6200043a91906200099b565b620004479060016200099b565b90505b6000841180156200046b5750836200046963ffffffff85168262000980565b115b1562000497576200048363ffffffff84168562000980565b93508063ffffffff16841015620004975750825b8463ffffffff168163ffffffff161115620004b557849150620004b9565b8091505b9250925092565b63ffffffff83166000908152600460209081526040918290208251808401909352546001600160801b038082168452600160801b90910416908201525b8263ffffffff168463ffffffff161162000653576200052a6200052462093a808662000a52565b62000757565b80602001516001600160801b0316600260008282546200054b919062000a78565b9250508190555080600001516001600160801b03166001600082825462000573919062000a78565b909155506000905084620005878162000aba565b9550505b8263ffffffff168563ffffffff1611620006215763ffffffff85166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b9092041691830191909152909250151580620005fd5750600082602001516001600160801b0316115b156200060c5750600162000621565b84620006188162000aba565b9550506200058b565b80156200062f5750620004fd565b60055463ffffffff640100000000909104811690861611156200065157600094505b505b6005805463ffffffff191663ffffffff861690811790915515806200068b575060055463ffffffff6401000000009091048116908516115b15620000cd576005805463ffffffff86166401000000000263ffffffff60201b1990911617905550505050565b600b546001600160e01b0316821415620006d0575050565b6001600160e01b03821115620006e557600080fd5b600b5463ffffffff600160e01b909104811690821681146200075257600b546001600160e01b03908116906200071e9084906200076216565b600b80546001600160e01b0319166001600160e01b0386811691909117909155620000cd908281169084908690620007e116565b505050565b620002738162000892565b600b5463ffffffff600160e01b90910481169082161015620007bc5760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b604482015260640162000158565b600b805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b8163ffffffff168163ffffffff161415620007fb57505050565b60006200080762000903565b905080620008155750505050565b6200081f62000914565b6200082b908562000980565b935062000848816ec097ce7bc90715b34b9f1000000000620009c6565b62000854908562000a30565b935062000862838362000a92565b620008749063ffffffff168562000a30565b600c600082825462000887919062000980565b909155505050505050565b600080620008b8600b546001600160e01b03811691600160e01b90910463ffffffff1690565b9092509050620008c88362000762565b620008d5828285620007e1565b600c54620008e590600162000980565b63ffffffff9093166000908152600d60205260409020929092555050565b60006200090f60015490565b905090565b60006200090f60025490565b6000806000806080858703121562000936578384fd5b8451620009438162000b0d565b60208601516040870151919550935061ffff8116811462000962578283fd5b6060860151909250620009758162000b0d565b939692955090935050565b6000821982111562000996576200099662000ae1565b500190565b600063ffffffff808316818516808303821115620009bd57620009bd62000ae1565b01949350505050565b600082620009d857620009d862000af7565b500490565b600063ffffffff80841680620009f757620009f762000af7565b92169190910492915050565b600061ffff8083168185168183048111821515161562000a275762000a2762000ae1565b02949350505050565b600081600019048311821515161562000a4d5762000a4d62000ae1565b500290565b600063ffffffff8083168185168183048111821515161562000a275762000a2762000ae1565b60008282101562000a8d5762000a8d62000ae1565b500390565b600063ffffffff8381169083168181101562000ab25762000ab262000ae1565b039392505050565b600063ffffffff8083168181141562000ad75762000ad762000ae1565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146200027357600080fd5b6137548062000b336000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063893d20e811610130578063b6fe2e9c116100b8578063dd62ed3e1161007c578063dd62ed3e14610571578063e1ad46eb14610587578063f078b8071461059a578063f459aa46146105d4578063ff85a2ba146105e757600080fd5b8063b6fe2e9c146104fc578063b9d121f71461050f578063c00ba29e1461053c578063d29939831461054f578063d9e5103f1461056957600080fd5b8063a8346a8c116100ff578063a8346a8c14610488578063a9059cbb14610252578063af920582146104c6578063b16a19de146104d9578063b187bd26146104ea57600080fd5b8063893d20e8146104105780638abc37d31461043057806392efda791461046457806395a2251f1461047557600080fd5b806332ca11e9116101be57806358f107e51161018257806358f107e514610389578063679aefce146103cf5780636f499047146103d757806370a08231146103ea57806382ab890a146103fd57600080fd5b806332ca11e9146103085780633af9e6691461031b5780634800df8c1461034d5780634d25c4f11461036057806355f4f1971461038157600080fd5b806316c38b3c1161020557806316c38b3c146102b457806318160ddd146102c75780631bd5ad36146102cf5780631dd0f483146102e257806323b872dd146102f557600080fd5b80630746363d14610237578063095ea7b3146102525780630a5e1019146102755780630ca2103d1461028a575b600080fd5b61023f61061c565b6040519081526020015b60405180910390f35b610265610260366004613248565b610631565b6040519015158152602001610249565b6102886102833660046133ff565b610645565b005b61029d6102983660046133cf565b610667565b604080519215158352602083019190915201610249565b6102886102c2366004613361565b6106c4565b61023f610736565b6102886102dd3660046133cf565b6107c4565b6102886102f0366004613187565b6107d8565b6102656103033660046131db565b6107e0565b61023f610316366004613248565b6107f4565b61023f610329366004613187565b6001600160a01b03166000908152600660205260409020546001600160c01b031690565b61028861035b3660046133b5565b6108d0565b600854600160a01b900461ffff1660405161ffff9091168152602001610249565b61023f6108e1565b61028861039736600461321b565b3360009081526007602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b61023f6108f0565b61023f6103e53660046133ff565b6108fa565b61023f6103f8366004613187565b610981565b61028861040b3660046133cf565b6109c5565b6104186109d0565b6040516001600160a01b039091168152602001610249565b61044361043e36600461332d565b6109da565b60408051938452602084019290925263ffffffff1690820152606001610249565b6008546001600160a01b0316610418565b61023f610483366004613187565b610a13565b61049b6104963660046132e6565b610a2e565b6040805194855263ffffffff9093166020850152901515918301919091526060820152608001610249565b600854600160b01b900460ff1615610265565b6000546001600160a01b0316610418565b600854600160b01b900460ff16610265565b61028861050a3660046131a3565b610a5c565b61052261051d366004613187565b610a9a565b6040805192835263ffffffff909116602083015201610249565b61023f61054a366004613455565b610b03565b6040805160208101825260008152905161024991906134eb565b61023f610b71565b61023f61057f3660046131a3565b600092915050565b61023f610595366004613421565b610bed565b6105ad6105a8366004613273565b610c58565b604080516001600160a01b0390941684526020840192909252151590820152606001610249565b61023f6105e23660046133ff565b610e4d565b6105fa6105f5366004613187565b610ebc565b6040805193845263ffffffff9092166020840152151590820152606001610249565b6000610626610edf565b50600090565b905090565b600061063b610f16565b5060005b92915050565b61064d610edf565b610658600080610f4e565b50610663828261105f565b5050565b600080610672610edf565b600854600160a01b900461ffff1661069757600061068e61127b565b91509150915091565b6008546106b0908490600160a01b900461ffff1661128f565b90506106bb8161138b565b60019150915091565b6106cc6113d3565b60085460ff600160b01b909104161515811515146106fc576008805460ff60b01b1916600160b01b831515021790555b604051811515815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b6000808061075161074a62093a804261357f565b6000611403565b509150915060015492508063ffffffff166000141561076f57505090565b8063ffffffff168263ffffffff16116107bf5763ffffffff82166000908152600460205260409020546107ab906001600160801b031684613616565b9250816107b781613695565b92505061076f565b505090565b6107cc610edf565b6107d58161138b565b50565b6107d56114f2565b60006107ea610f16565b5060009392505050565b600080821161083c5760405162461bcd60e51b815260206004820152600f60248201526e5a45524f5f554e4445524c59494e4760881b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260076020908152604080832033845290915290205460ff166108a85760405162461bcd60e51b815260206004820152601660248201527510511117d513d7d313d0d2d7d49154d5149250d5115160521b6044820152606401610833565b6000806108bb3386866000806001611534565b915091506108c881611b88565b509392505050565b6108d8610edf565b6107d581611d07565b60006108eb610edf565b610626565b600061062c61127b565b600063077f880063ffffffff831611156109165763077f880091505b62093a8061092762049d4084613536565b6109319190613593565b915061094062093a80836135f3565b915063077f880063ffffffff8316101561097a5763ffffffff821661096963077f8800856135d4565b610973919061357f565b905061063f565b5090919050565b60008061098d83611dd5565b91505063ffffffff81164263ffffffff16106109ac5750600092915050565b6109b583611e15565b6001600160e01b03169392505050565b610663600082610f4e565b600061062c611e91565b60008060004263ffffffff168463ffffffff1610156109f857600080fd5b610a028585611f0e565b9093506000925090505b9250925092565b6000610a1d611f66565b610a2682611fab565b90505b919050565b600080600080610a3c610edf565b610a4888888888611fb7565b93509350935093505b945094509450949050565b610a646114f2565b60405162461bcd60e51b815260206004820152600b60248201526a155394d5541413d495115160aa1b6044820152606401610833565b6001600160a01b0381166000908152600660205260408120546001600160c01b03169081610acd57506000928392509050565b6001600160a01b038316600090815260066020526040902054829061068e9062093a8090600160e01b900463ffffffff166135f3565b6000808263ffffffff1611610b4a5760405162461bcd60e51b815260206004820152600d60248201526c2d22a927afa22aa920aa24a7a760991b6044820152606401610833565b600080610b5d3333600087600080611534565b91509150610b6a81611b88565b5092915050565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610bb557600080fd5b505afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062c91906133e7565b6000808411610c305760405162461bcd60e51b815260206004820152600f60248201526e5a45524f5f554e4445524c59494e4760881b6044820152606401610833565b600080610c4233338888886001611534565b91509150610c4f81611b88565b50949350505050565b6000806000610c65610edf565b60006002876005811115610c8957634e487b7160e01b600052602160045260246000fd5b1415610c9457610dbc565b6004876005811115610cb657634e487b7160e01b600052602160045260246000fd5b1415610cda57846001600160e01b03164210610cd55760019150600097505b610dbc565b6003876005811115610cfc57634e487b7160e01b600052602160045260246000fd5b1415610d4757610d3d88610d2e8b6001600160a01b03166000908152600660205260409020546001600160c01b031690565b876001600160e01b03166120b8565b9098509150610dbc565b6005876005811115610d6957634e487b7160e01b600052602160045260246000fd5b1415610dab5763ffffffff8616610d87576001915060009750610dbc565b610da488610d948b610981565b876001600160e01b0316896120fd565b9750610dbc565b600080600093509350935050610e42565b87610dce576000809350935050610e42565b610ddd308a8a89600080611534565b9150508015610e3a57886001600160a01b03167f571b9a025379810f4e55817c06336ccae0fe94a8c57f704f30804f110aca48858883604051610e219291906134cd565b60405180910390a2600080600193509350935050610e42565b308893509350505b955095509592505050565b600063077f880063ffffffff83161115610e695763077f880091505b62093a80610e7a62049d4084613536565b610e849190613593565b9150610e9362093a80836135f3565b915063077f880063ffffffff8316101561097a5763077f880061096963ffffffff8416856135d4565b6000806000610ec9610edf565b610ed28461213d565b9250925092509193909250565b604080518082019091526002815261039360f41b6020820152336107d55760405162461bcd60e51b815260040161083391906134eb565b60405162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b6044820152606401610833565b6000610f5d62093a804261357f565b600554909150600160601b900460ff1615610fc5578215610fc05760405162461bcd60e51b815260206004820152601e60248201527f72652d656e74727920746f207374616b65206f7220746f2072656465656d00006044820152606401610833565b61063f565b6005544263ffffffff908116600160401b909204161415610fe55761063f565b6000806000610ff48486611403565b9194509250905063ffffffff821615611033576005805460ff60601b1916600160601b179055611025838383612160565b6005805460ff60601b191690555b5050600580546bffffffff00000000000000001916600160401b4263ffffffff16021790555092915050565b42600063ffffffff8316158061108157508163ffffffff168363ffffffff1610155b1561108e575060016110b3565b611098838361362d565b905063077f880063ffffffff821611156110b3575063077f88005b600062093a806001816110c68686613536565b6110d09190613536565b6110da919061362d565b6110e49190613593565b6110ef906001613536565b90506110fe62093a80826135f3565b915061110a838361362d565b91506003548561111a919061351e565b9450600061112e63ffffffff84168761357f565b905061114063ffffffff8416826135d4565b61114a9087613616565b6003558061115a57505050505050565b6111638461233e565b8060026000828254611175919061351e565b909155505063ffffffff82166000908152600460205260409020546111aa90600160801b90046001600160801b03168261351e565b90506001600160801b038111156111c057600080fd5b63ffffffff808316600081815260046020526040902080546001600160801b03808616600160801b0291161790556005549091161180611206575060055463ffffffff16155b15611221576005805463ffffffff191663ffffffff84161790555b60055463ffffffff808416600160201b90920416108061124e5750600554600160201b900463ffffffff16155b15611273576005805467ffffffff000000001916600160201b63ffffffff8516021790555b505050505050565b600061062c600b546001600160e01b031690565b600082158061129c575081155b156112a95750600061063f565b8160026112b8600160646135aa565b6112c39060646135aa565b6112cd919061355e565b6112dd9061ffff16600019613616565b6112e7919061357f565b83111560405180604001604052806002815260200161068760f31b815250906113235760405162461bcd60e51b815260040161083391906134eb565b50611330600160646135aa565b61133b9060646135aa565b61ffff16600261134d600160646135aa565b6113589060646135aa565b611362919061355e565b61ffff1661137084866135d4565b61137a919061351e565b611384919061357f565b9392505050565b611393612347565b61139c81612398565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020015b60405180910390a150565b6114016113de611e91565b336001604051806040016040528060028152602001611b9b60f11b8152506123ad565b565b60055463ffffffff9081169060009081908516831180611427575063ffffffff8316155b1561143757506000905080610a0c565b50600554600160201b900463ffffffff16806114865760055460ff9061146e9062093a8090600160401b900463ffffffff16613593565b6114789190613536565b611483906001613536565b90505b6000841180156114a45750836114a263ffffffff85168261351e565b115b156114cc576114b963ffffffff84168561351e565b93508063ffffffff168410156114cc5750825b8463ffffffff168163ffffffff1611156114e857849150610a0c565b8091509250925092565b6114fb336123de565b60405180604001604052806002815260200161383160f01b815250906107d55760405162461bcd60e51b815260040161083391906134eb565b6000806001600160a01b0388166115795760405162461bcd60e51b81526020600482015260096024820152685a45524f5f46524f4d60b81b6044820152606401610833565b6001600160a01b0387166115b95760405162461bcd60e51b81526020600482015260076024820152665a45524f5f544f60c81b6044820152606401610833565b60006115c760016000610f4e565b90506115d24261233e565b6001600160a01b0388166000908152600660209081526040808320815160608101835290546001600160c01b03811680835263ffffffff600160c01b8304811695840195909552600160e01b90910490931691810191909152919089018981108061164357506001600160c01b0381115b1561165957600060039550955050505050611b7d565b8061166f57600060019550955050505050611b7d565b6001600160c01b03168252600062093a8063ffffffff8a1610156116c35762093a80600161169d824261351e565b6116a79190613616565b6116b19190613593565b6116bc906001613536565b90506116f2565b62093a8062049d406116db63ffffffff8c164261351e565b6116e5919061351e565b6116ef9190613593565b90505b6116fd60ff85613536565b63ffffffff168163ffffffff16111561172157600060029550955050505050611b7d565b8363ffffffff16836040015163ffffffff161115611788576000836020015163ffffffff161161175057600080fd5b6117598b611e15565b6001600160e01b031691508063ffffffff16836040015163ffffffff161115611783575060408201515b6117b1565b63ffffffff89166117a457600060019550955050505050611b7d565b63ffffffff421660208401525b602083015160009063ffffffff166117cc62093a80846135f3565b63ffffffff166117dc9190613616565b905063077f880081101561181757835163077f8800906118069083906001600160c01b03166135d4565b611810919061357f565b9650611825565b83516001600160c01b031696505b5063ffffffff81166000908152600460205260409020546001600160801b031686018681108061185b57506001600160801b0381115b156118725760006004965096505050505050611b7d565b821561191b578163ffffffff16846040015163ffffffff1614156118a15761189a8382613616565b9050611903565b60408085015163ffffffff166000908152600460205220546118cd9084906001600160801b0316613616565b60408581015163ffffffff16600090815260046020522080546001600160801b0319166001600160801b03929092169190911790555b82600160008282546119159190613616565b90915550505b8463ffffffff16846040015163ffffffff16116119535761194e8c62093a80866040015161194991906135f3565b612473565b600092505b63ffffffff8216604085810182905260009182526004602052812080546001600160801b0319166001600160801b0384161790556001805489929061199990849061351e565b90915550505050604082015160055463ffffffff918216911611806119c4575060055463ffffffff16155b156119e85760408201516005805463ffffffff191663ffffffff9092169190911790555b604082015160055463ffffffff918216600160201b9091049091161080611a1c5750600554600160201b900463ffffffff16155b15611a4c5760408201516005805463ffffffff909216600160201b0267ffffffff00000000199092169190911790555b848114611a5d57611a5d8a866124a7565b6001600160a01b038a166000908152600660209081526040918290208451815492860151938601516001600160c01b039091166001600160e01b031990931692909217600160c01b63ffffffff94851602176001600160e01b0316600160e01b93909216929092021790558515611ae657600054611ae6906001600160a01b03168c308c6124d1565b8662093a808360400151611afa91906135f3565b63ffffffff168b6001600160a01b03167f4592e698fd320f5fbd57e2e644656600e0f491140171015537b782e83bcbe1f88e8d87600001518b604051611b6d94939291906001600160a01b0394909416845260208401929092526001600160c01b03166040830152606082015260800190565b60405180910390a4506000925050505b965096945050505050565b6004811415611bd25760405162461bcd60e51b81526020600482015260166024820152754c4f434b5f4552525f4c4f434b5f4f564552464c4f5760501b6044820152606401610833565b6003811415611c235760405162461bcd60e51b815260206004820152601c60248201527f4c4f434b5f4552525f554e4445524c59494e475f4f564552464c4f57000000006044820152606401610833565b6002811415611c745760405162461bcd60e51b815260206004820152601e60248201527f4c4f434b5f4552525f4455524154494f4e5f49535f544f4f5f4c4152474500006044820152606401610833565b6001811415611cb95760405162461bcd60e51b81526020600482015260116024820152701393d512125391d7d254d7d313d0d2d151607a1b6044820152606401610833565b80156107d55760405162461bcd60e51b815260206004820152601960248201527f554e4b4e4f574e5f5245434f56455241424c455f4552524f52000000000000006044820152606401610833565b611d0f612347565b61ffff8116611d2757611d22600061138b565b611d85565b611d33600160646135aa565b611d3e9060646135aa565b61ffff168161ffff161115611d855760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b6044820152606401610833565b6008805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020016113c8565b6001600160a01b038116600090815260066020526040812054819063ffffffff600160c01b820481169161068e9162093a8091600160e01b9004166135f3565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03851681526009835283812084519283018552546001600160c01b038116835263ffffffff600160c01b8204811694840194909452600160e01b90049092169281019290925290516001600160c01b031692915050565b60085460408051630b6b5afb60e11b815290516000926001600160a01b0316916316d6b5f6916004808301926020929190829003018186803b158015611ed657600080fd5b505afa158015611eea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062c9190613399565b6000806000611f1c85611dd5565b91505063ffffffff8116611f37576000809250925050611f5f565b8063ffffffff168463ffffffff161115611f4f578093505b611f59858561253c565b92509250505b9250929050565b600854604080518082019091526002815261393160f01b602082015290600160b01b900460ff16156107d55760405162461bcd60e51b815260040161083391906134eb565b6000610a2633836125e7565b600080600080611fc960016000610f4e565b506000611fd589611dd5565b91505063ffffffff8116611ff757600080600080945094509450945050610a51565b4263ffffffff808316908216101561201f576120138a8261272d565b9197509550935061203e565b6120298a8361272d565b5090965094506120388a612820565b50600093505b612048898761351e565b955087861161205c5750869150610a519050565b61ffff87161561209257612074868861ffff1661128f565b61207e908961351e565b97508786116120925750869150610a519050565b6120a561209f8988613616565b8661105f565b5086945084915050945094509450949050565b6000808284106120ce57506000905060016120f5565b6120d88484613616565b9250828511156120ed575081905060016120f5565b508390508181145b935093915050565b600082841061210e57506000612135565b61212161211b8585613616565b836108fa565b925082851115612132575081612135565b50835b949350505050565b60008060006121528460006000196000611fb7565b509196909550909350915050565b63ffffffff83166000908152600460209081526040918290208251808401909352546001600160801b038082168452600160801b90910416908201525b8263ffffffff168463ffffffff16116122dd576121c56121c062093a80866135f3565b61289d565b80602001516001600160801b0316600260008282546121e49190613616565b9250508190555080600001516001600160801b03166001600082825461220a9190613616565b90915550600090508461221c81613695565b9550505b8263ffffffff168563ffffffff16116122af5763ffffffff85166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b90920416918301919091529092501515806122905750600082602001516001600160801b0316115b1561229d575060016122af565b846122a781613695565b955050612220565b80156122bb575061219d565b60055463ffffffff600160201b909104811690861611156122db57600094505b505b6005805463ffffffff191663ffffffff86169081179091551580612313575060055463ffffffff600160201b9091048116908516115b15612338576005805467ffffffff000000001916600160201b63ffffffff8716021790555b50505050565b6107d5816128a6565b6008546001600160a01b03166114015760405162461bcd60e51b815260206004820152601660248201527518dbdb9d1c9bdb1b195c881a5cc81c995c5d5a5c995960521b6044820152606401610833565b6123a3600080610f4e565b506107d5816128e1565b6123b88484846128eb565b81906123d75760405162461bcd60e51b815260040161083391906134eb565b5050505050565b6008546000906001600160a01b031615801590610a26575060085460405163ce91a05960e01b81526001600160a01b0384811660048301529091169063ce91a0599060240160206040518083038186803b15801561243b57600080fd5b505afa15801561244f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a26919061337d565b600080612480848461272d565b509150915061248e84612820565b508161249a5750505050565b6123388483836000612906565b60008060006124bf85856001600160e01b0316612974565b9250925092506123d785848484612906565b6040516001600160a01b03808516602483015283166044820152606481018290526123389085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a36565b6001600160a01b03821660009081526009602052604081205481906001600160c01b031661256f57506000905080611f5f565b6001600160a01b0384166000818152600960209081526040808320815160608101835290546001600160c01b038116825263ffffffff600160c01b8204811683860152600160e01b9091041681830152938352600a909152812054909182916125d9919087612bb6565b909890975095505050505050565b6000806125f660016000610f4e565b6001600160a01b038516600090815260066020908152604091829020825160608101845290546001600160c01b03811680835263ffffffff600160c01b8304811694840194909452600160e01b909104909216928101