@augmentedfinance/protocol-v1
Version:
Augmented Protocol smart contracts
1,127 lines • 65 kB
JavaScript
"use strict";
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
Object.defineProperty(exports, "__esModule", { value: true });
exports.DecayingTokenLockerFactory = void 0;
const contracts_1 = require("@ethersproject/contracts");
class DecayingTokenLockerFactory 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.DecayingTokenLockerFactory = DecayingTokenLockerFactory;
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: "",
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: "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 = "0x60806040523480156200001157600080fd5b506040516200497238038062004972833981016040819052620000349162000920565b600080546001600160a01b0319166001600160a01b0383161790558383838383838362000079838383604051806020016040528060008152506200008a60201b60201c565b505050505050505050505062000b23565b600880546001600160a01b0319166001600160a01b03861617905561ffff821615620000bb57620000bb82620000d3565b8215620000cd57620000cd83620001b8565b50505050565b620000dd620001fe565b61ffff8116620000f957620000f36000620001b8565b62000161565b620001076001606462000a03565b6200011490606462000a03565b61ffff168161ffff161115620001615760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b60448201526064015b60405180910390fd5b6008805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b620001c2620001fe565b620001cd816200025a565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b90602001620001ad565b6008546001600160a01b0316620002585760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c657220697320726571756972656400000000000000000000604482015260640162000158565b565b6200026760008062000276565b506200027381620003ab565b50565b60006200028762093a8042620009c6565b6005549091506c01000000000000000000000000900460ff1615620002fc578215620002f65760405162461bcd60e51b815260206004820152601e60248201527f72652d656e74727920746f207374616b65206f7220746f2072656465656d0000604482015260640162000158565b620003a5565b6005544263ffffffff908116680100000000000000009092041614156200032357620003a5565b60008080620003338486620003b7565b9194509250905063ffffffff8216156200037e576005805460ff60601b19166c0100000000000000000000000017905562000370838383620004c0565b6005805460ff60601b191690555b50506005805463ffffffff60401b1916680100000000000000004263ffffffff1602179055505b92915050565b620002738142620006b8565b60055463ffffffff9081169060009081908516831180620003dc575063ffffffff8316155b15620003ee57506000905080620004b9565b50600554640100000000900463ffffffff16806200044a5760055460ff906200042e9062093a809068010000000000000000900463ffffffff16620009dd565b6200043a91906200099b565b620004479060016200099b565b90505b6000841180156200046b5750836200046963ffffffff85168262000980565b115b1562000497576200048363ffffffff84168562000980565b93508063ffffffff16841015620004975750825b8463ffffffff168163ffffffff161115620004b557849150620004b9565b8091505b9250925092565b63ffffffff83166000908152600460209081526040918290208251808401909352546001600160801b038082168452600160801b90910416908201525b8263ffffffff168463ffffffff161162000653576200052a6200052462093a808662000a52565b62000757565b80602001516001600160801b0316600260008282546200054b919062000a78565b9250508190555080600001516001600160801b03166001600082825462000573919062000a78565b909155506000905084620005878162000aba565b9550505b8263ffffffff168563ffffffff1611620006215763ffffffff85166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b9092041691830191909152909250151580620005fd5750600082602001516001600160801b0316115b156200060c5750600162000621565b84620006188162000aba565b9550506200058b565b80156200062f5750620004fd565b60055463ffffffff640100000000909104811690861611156200065157600094505b505b6005805463ffffffff191663ffffffff861690811790915515806200068b575060055463ffffffff6401000000009091048116908516115b15620000cd576005805463ffffffff86166401000000000263ffffffff60201b1990911617905550505050565b600b546001600160e01b0316821415620006d0575050565b6001600160e01b03821115620006e557600080fd5b600b5463ffffffff600160e01b909104811690821681146200075257600b546001600160e01b03908116906200071e9084906200076216565b600b80546001600160e01b0319166001600160e01b0386811691909117909155620000cd908281169084908690620007e116565b505050565b620002738162000892565b600b5463ffffffff600160e01b90910481169082161015620007bc5760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b604482015260640162000158565b600b805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b8163ffffffff168163ffffffff161415620007fb57505050565b60006200080762000903565b905080620008155750505050565b6200081f62000914565b6200082b908562000980565b935062000848816ec097ce7bc90715b34b9f1000000000620009c6565b62000854908562000a30565b935062000862838362000a92565b620008749063ffffffff168562000a30565b600c600082825462000887919062000980565b909155505050505050565b600080620008b8600b546001600160e01b03811691600160e01b90910463ffffffff1690565b9092509050620008c88362000762565b620008d5828285620007e1565b600c54620008e590600162000980565b63ffffffff9093166000908152600d60205260409020929092555050565b60006200090f60015490565b905090565b60006200090f60025490565b6000806000806080858703121562000936578384fd5b8451620009438162000b0d565b60208601516040870151919550935061ffff8116811462000962578283fd5b6060860151909250620009758162000b0d565b939692955090935050565b6000821982111562000996576200099662000ae1565b500190565b600063ffffffff808316818516808303821115620009bd57620009bd62000ae1565b01949350505050565b600082620009d857620009d862000af7565b500490565b600063ffffffff80841680620009f757620009f762000af7565b92169190910492915050565b600061ffff8083168185168183048111821515161562000a275762000a2762000ae1565b02949350505050565b600081600019048311821515161562000a4d5762000a4d62000ae1565b500290565b600063ffffffff8083168185168183048111821515161562000a275762000a2762000ae1565b60008282101562000a8d5762000a8d62000ae1565b500390565b600063ffffffff8381169083168181101562000ab25762000ab262000ae1565b039392505050565b600063ffffffff8083168181141562000ad75762000ad762000ae1565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146200027357600080fd5b613e3f8062000b336000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806382ab890a11610146578063b6fe2e9c116100c3578063dd62ed3e11610087578063dd62ed3e146105b8578063e1ad46eb146105ce578063e6826312146105e1578063f078b807146105f4578063f459aa461461062e578063ff85a2ba1461064157600080fd5b8063b6fe2e9c14610543578063b9d121f714610556578063c00ba29e14610583578063d299398314610596578063d9e5103f146105b057600080fd5b8063a8346a8c1161010a578063a8346a8c146104cf578063a9059cbb14610273578063af9205821461050d578063b16a19de14610520578063b187bd261461053157600080fd5b806382ab890a14610444578063893d20e8146104575780638abc37d31461047757806392efda79146104ab57806395a2251f146104bc57600080fd5b80633af9e669116101d457806358f107e51161019857806358f107e5146103bd578063679aefce146104035780636f4990471461040b57806370a082311461041e578063808d236b1461043157600080fd5b80633af9e6691461033c5780634800df8c1461036e5780634d25c4f114610381578063518e68fa146103a257806355f4f197146103b557600080fd5b806318160ddd1161021b57806318160ddd146102e85780631bd5ad36146102f05780631dd0f4831461030357806323b872dd1461031657806332ca11e91461032957600080fd5b80630746363d14610258578063095ea7b3146102735780630a5e1019146102965780630ca2103d146102ab57806316c38b3c146102d5575b600080fd5b610260610676565b6040519081526020015b60405180910390f35b6102866102813660046137ba565b61068b565b604051901515815260200161026a565b6102a96102a43660046139b4565b61069f565b005b6102be6102b9366004613984565b6106c1565b60408051921515835260208301919091520161026a565b6102a96102e3366004613916565b61071e565b610260610790565b6102a96102fe366004613984565b61081e565b6102a96103113660046136f9565b610832565b61028661032436600461374d565b61083a565b6102606103373660046137ba565b61084e565b61026061034a3660046136f9565b6001600160a01b03166000908152600660205260409020546001600160c01b031690565b6102a961037c36600461396a565b61092a565b600854600160a01b900461ffff1660405161ffff909116815260200161026a565b6102606103b0366004613a24565b61093b565b610260610a22565b6102a96103cb36600461378d565b3360009081526007602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610260610a31565b6102606104193660046139b4565b610a3b565b61026061042c3660046136f9565b610ac2565b61026061043f366004613a24565b610b66565b6102a9610452366004613984565b610bad565b61045f610bb8565b6040516001600160a01b03909116815260200161026a565b61048a6104853660046138e2565b610bc2565b60408051938452602084019290925263ffffffff169082015260600161026a565b6008546001600160a01b031661045f565b6102606104ca3660046136f9565b610bfb565b6104e26104dd366004613858565b610c16565b6040805194855263ffffffff909316602085015290151591830191909152606082015260800161026a565b600854600160b01b900460ff1615610286565b6000546001600160a01b031661045f565b600854600160b01b900460ff16610286565b6102a9610551366004613715565b610c42565b6105696105643660046136f9565b610c80565b6040805192835263ffffffff90911660208301520161026a565b610260610591366004613a0a565b610ce9565b6040805160208101825260008152905161026a9190613ae8565b610260610d57565b6102606105c6366004613715565b600092915050565b6102606105dc3660046139d6565b610dd3565b6102606105ef36600461389f565b610e3e565b6106076106023660046137e5565b610ee9565b604080516001600160a01b039094168452602084019290925215159082015260600161026a565b61026061063c3660046139b4565b6110de565b61065461064f3660046136f9565b61114d565b6040805193845263ffffffff909216602084015215159082015260600161026a565b6000610680611170565b50600090565b905090565b60006106956111b7565b5060005b92915050565b6106a7611170565b6106b26000806111ef565b506106bd8282611300565b5050565b6000806106cc611170565b600854600160a01b900461ffff166106f15760006106e861151c565b91509150915091565b60085461070a908490600160a01b900461ffff16611530565b90506107158161162c565b60019150915091565b610726611674565b60085460ff600160b01b90910416151581151514610756576008805460ff60b01b1916600160b01b831515021790555b604051811515815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b600080806107ab6107a462093a8042613b7c565b60006116a4565b509150915060015492508063ffffffff16600014156107c957505090565b8063ffffffff168263ffffffff16116108195763ffffffff8216600090815260046020526040902054610805906001600160801b031684613d01565b92508161081181613d80565b9250506107c9565b505090565b610826611170565b61082f8161162c565b50565b61082f611793565b60006108446111b7565b5060009392505050565b60008082116108965760405162461bcd60e51b815260206004820152600f60248201526e5a45524f5f554e4445524c59494e4760881b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260076020908152604080832033845290915290205460ff166109025760405162461bcd60e51b815260206004820152601660248201527510511117d513d7d313d0d2d7d49154d5149250d5115160521b604482015260640161088d565b60008061091533868660008060016117d5565b9150915061092281611e29565b509392505050565b610932611170565b61082f81611fa8565b6000808563ffffffff161161094f57600080fd5b8363ffffffff168563ffffffff161061096757600080fd5b8263ffffffff168563ffffffff16111561098057600080fd5b8363ffffffff168263ffffffff16111561099957600080fd5b8163ffffffff168363ffffffff1611156109b257600080fd5b6109bc8585613d18565b63ffffffff166109d960026b033b2e3c9fd0803ce8000000613b7c565b6109e38785613d18565b63ffffffff166109f38887613d18565b63ffffffff16610a039190613b1b565b610a0d9190613cbf565b610a179190613b7c565b90505b949350505050565b6000610a2c611170565b610680565b600061068661151c565b600063077f880063ffffffff83161115610a575763077f880091505b62093a80610a6862049d4084613b33565b610a729190613b90565b9150610a8162093a8083613cde565b915063077f880063ffffffff83161015610abb5763ffffffff8216610aaa63077f880085613cbf565b610ab49190613b7c565b9050610699565b5090919050565b6000806000610ad084612076565b915091506000610add4290565b90508163ffffffff168163ffffffff1610610afd57506000949350505050565b6000610b08866120b6565b6001600160e01b031690506000610b1f8585613d18565b63ffffffff16610b2f8486613d18565b610b3f9063ffffffff1684613cbf565b610b499190613b7c565b9050818110610b5c575095945050505050565b9695505050505050565b60006002610b748686613d18565b63ffffffff16610b849190613bea565b6b033b2e3c9fd0803ce80000006002610b9d8686613d18565b63ffffffff16610a039190613bea565b6106bd6000826111ef565b6000610686612132565b60008060004263ffffffff168463ffffffff161015610be057600080fd5b610bea85856121af565b9093506000925090505b9250925092565b6000610c05612290565b610c0e826122d5565b90505b919050565b600080600080610c24611170565b610c30888888886122e1565b929b919a509850909650945050505050565b610c4a611793565b60405162461bcd60e51b815260206004820152600b60248201526a155394d5541413d495115160aa1b604482015260640161088d565b6001600160a01b0381166000908152600660205260408120546001600160c01b03169081610cb357506000928392509050565b6001600160a01b03831660009081526006602052604090205482906106e89062093a8090600160e01b900463ffffffff16613cde565b6000808263ffffffff1611610d305760405162461bcd60e51b815260206004820152600d60248201526c2d22a927afa22aa920aa24a7a760991b604482015260640161088d565b600080610d4333336000876000806117d5565b91509150610d5081611e29565b5092915050565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610d9b57600080fd5b505afa158015610daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610686919061399c565b6000808411610e165760405162461bcd60e51b815260206004820152600f60248201526e5a45524f5f554e4445524c59494e4760881b604482015260640161088d565b600080610e28333388888860016117d5565b91509150610e3581611e29565b50949350505050565b6000841580610e4b575081155b15610e57575083610ee0565b83610e7557610e65866120b6565b6001600160e01b03169350610e82565b610e7f8484613b1b565b92505b83831115610ea25782610e958584613cbf565b610e9f9190613b7c565b91505b6b033b2e3c9fd0803ce80000008210610ebd57506000610ee0565b610edd610ed6836b033b2e3c9fd0803ce8000000613d01565b869061238b565b90505b95945050505050565b6000806000610ef6611170565b60006002876005811115610f1a57634e487b7160e01b600052602160045260246000fd5b1415610f255761104d565b6004876005811115610f4757634e487b7160e01b600052602160045260246000fd5b1415610f6b57846001600160e01b03164210610f665760019150600097505b61104d565b6003876005811115610f8d57634e487b7160e01b600052602160045260246000fd5b1415610fd857610fce88610fbf8b6001600160a01b03166000908152600660205260409020546001600160c01b031690565b876001600160e01b0316612432565b909850915061104d565b6005876005811115610ffa57634e487b7160e01b600052602160045260246000fd5b141561103c5763ffffffff861661101857600191506000975061104d565b611035886110258b610ac2565b876001600160e01b031689612477565b975061104d565b6000806000935093509350506110d3565b8761105f5760008093509350506110d3565b61106e308a8a896000806117d5565b91505080156110cb57886001600160a01b03167f571b9a025379810f4e55817c06336ccae0fe94a8c57f704f30804f110aca488588836040516110b2929190613aca565b60405180910390a26000806001935093509350506110d3565b308893509350505b955095509592505050565b600063077f880063ffffffff831611156110fa5763077f880091505b62093a8061110b62049d4084613b33565b6111159190613b90565b915061112462093a8083613cde565b915063077f880063ffffffff83161015610abb5763077f8800610aaa63ffffffff841685613cbf565b600080600061115a611170565b611163846124b5565b9250925092509193909250565b6008546001600160a01b0316331460405180604001604052806002815260200161039360f41b8152509061082f5760405162461bcd60e51b815260040161088d9190613ae8565b60405162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b604482015260640161088d565b60006111fe62093a8042613b7c565b600554909150600160601b900460ff16156112665782156112615760405162461bcd60e51b815260206004820152601e60248201527f72652d656e74727920746f207374616b65206f7220746f2072656465656d0000604482015260640161088d565b610699565b6005544263ffffffff908116600160401b90920416141561128657610699565b600080600061129584866116a4565b9194509250905063ffffffff8216156112d4576005805460ff60601b1916600160601b1790556112c68383836124c6565b6005805460ff60601b191690555b5050600580546bffffffff00000000000000001916600160401b4263ffffffff16021790555092915050565b42600063ffffffff8316158061132257508163ffffffff168363ffffffff1610155b1561132f57506001611354565b6113398383613d18565b905063077f880063ffffffff82161115611354575063077f88005b600062093a806001816113678686613b33565b6113719190613b33565b61137b9190613d18565b6113859190613b90565b611390906001613b33565b905061139f62093a8082613cde565b91506113ab8383613d18565b9150600354856113bb9190613b1b565b945060006113cf63ffffffff841687613b7c565b90506113e163ffffffff841682613cbf565b6113eb9087613d01565b600355806113fb57505050505050565b611404846126a4565b80600260008282546114169190613b1b565b909155505063ffffffff821660009081526004602052604090205461144b90600160801b90046001600160801b031682613b1b565b90506001600160801b0381111561146157600080fd5b63ffffffff808316600081815260046020526040902080546001600160801b03808616600160801b02911617905560055490911611806114a7575060055463ffffffff16155b156114c2576005805463ffffffff191663ffffffff84161790555b60055463ffffffff808416600160201b9092041610806114ef5750600554600160201b900463ffffffff16155b15611514576005805467ffffffff000000001916600160201b63ffffffff8516021790555b505050505050565b6000610686600b546001600160e01b031690565b600082158061153d575081155b1561154a57506000610699565b81600261155960016064613c95565b611564906064613c95565b61156e9190613b5b565b61157e9061ffff16600019613d01565b6115889190613b7c565b83111560405180604001604052806002815260200161068760f31b815250906115c45760405162461bcd60e51b815260040161088d9190613ae8565b506115d160016064613c95565b6115dc906064613c95565b61ffff1660026115ee60016064613c95565b6115f9906064613c95565b6116039190613b5b565b61ffff166116118486613cbf565b61161b9190613b1b565b6116259190613b7c565b9392505050565b6116346126ad565b61163d816126fe565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020015b60405180910390a150565b6116a261167f612132565b336001604051806040016040528060028152602001611b9b60f11b815250612713565b565b60055463ffffffff90811690600090819085168311806116c8575063ffffffff8316155b156116d857506000905080610bf4565b50600554600160201b900463ffffffff16806117275760055460ff9061170f9062093a8090600160401b900463ffffffff16613b90565b6117199190613b33565b611724906001613b33565b90505b60008411801561174557508361174363ffffffff851682613b1b565b115b1561176d5761175a63ffffffff841685613b1b565b93508063ffffffff1684101561176d5750825b8463ffffffff168163ffffffff16111561178957849150610bf4565b8091509250925092565b61179c33612744565b60405180604001604052806002815260200161383160f01b8152509061082f5760405162461bcd60e51b815260040161088d9190613ae8565b6000806001600160a01b03881661181a5760405162461bcd60e51b81526020600482015260096024820152685a45524f5f46524f4d60b81b604482015260640161088d565b6001600160a01b03871661185a5760405162461bcd60e51b81526020600482015260076024820152665a45524f5f544f60c81b604482015260640161088d565b6000611868600160006111ef565b9050611873426126a4565b6001600160a01b0388166000908152600660209081526040808320815160608101835290546001600160c01b03811680835263ffffffff600160c01b8304811695840195909552600160e01b9091049093169181019190915291908901898110806118e457506001600160c01b0381115b156118fa57600060039550955050505050611e1e565b8061191057600060019550955050505050611e1e565b6001600160c01b03168252600062093a8063ffffffff8a1610156119645762093a80600161193e8242613b1b565b6119489190613d01565b6119529190613b90565b61195d906001613b33565b9050611993565b62093a8062049d4061197c63ffffffff8c1642613b1b565b6119869190613b1b565b6119909190613b90565b90505b61199e60ff85613b33565b63ffffffff168163ffffffff1611156119c257600060029550955050505050611e1e565b8363ffffffff16836040015163ffffffff161115611a29576000836020015163ffffffff16116119f157600080fd5b6119fa8b6120b6565b6001600160e01b031691508063ffffffff16836040015163ffffffff161115611a24575060408201515b611a52565b63ffffffff8916611a4557600060019550955050505050611e1e565b63ffffffff421660208401525b602083015160009063ffffffff16611a6d62093a8084613cde565b63ffffffff16611a7d9190613d01565b905063077f8800811015611ab857835163077f880090611aa79083906001600160c01b0316613cbf565b611ab19190613b7c565b9650611ac6565b83516001600160c01b031696505b5063ffffffff81166000908152600460205260409020546001600160801b0316860186811080611afc57506001600160801b0381115b15611b135760006004965096505050505050611e1e565b8215611bbc578163ffffffff16846040015163ffffffff161415611b4257611b3b8382613d01565b9050611ba4565b60408085015163ffffffff16600090815260046020522054611b6e9084906001600160801b0316613d01565b60408581015163ffffffff16600090815260046020522080546001600160801b0319166001600160801b03929092169190911790555b8260016000828254611bb69190613d01565b90915550505b8463ffffffff16846040015163ffffffff1611611bf457611bef8c62093a808660400151611bea9190613cde565b6127d9565b600092505b63ffffffff8216604085810182905260009182526004602052812080546001600160801b0319166001600160801b03841617905560018054899290611c3a908490613b1b565b90915550505050604082015160055463ffffffff91821691161180611c65575060055463ffffffff16155b15611c895760408201516005805463ffffffff191663ffffffff9092169190911790555b604082015160055463ffffffff918216600160201b9091049091161080611cbd5750600554600160201b900463ffffffff16155b15611ced5760408201516005805463ffffffff909216600160201b0267ffffffff00000000199092169190911790555b848114611cfe57611cfe8a86612820565b6001600160a01b038a166000908152600660209081526040918290208451815492860151938601516001600160c01b039091166001600160e01b031990931692909217600160c01b63ffffffff94851602176001600160e01b0316600160e01b93909216929092021790558515611d8757600054611d87906001600160a01b03168c308c612862565b8662093a808360400151611d9b9190613cde565b63ffffffff168b6001600160a01b03167f4592e698fd320f5fbd57e2e644656600e0f491140171015537b782e83bcbe1f88e8d87600001518b604051611e0e94939291906001600160a01b0394909416845260208401929092526001600160c01b03166040830152606082015260800190565b60405180910390a4506000925050505b965096945050505050565b6004811415611e735760405162461bcd60e51b81526020600482015260166024820152754c4f434b5f4552525f4c4f434b5f4f564552464c4f5760501b604482015260640161088d565b6003811415611ec45760405162461bcd60e51b815260206004820152601c60248201527f4c4f434b5f4552525f554e4445524c59494e475f4f564552464c4f5700000000604482015260640161088d565b6002811415611f155760405162461bcd60e51b815260206004820152601e60248201527f4c4f434b5f4552525f4455524154494f4e5f49535f544f4f5f4c415247450000604482015260640161088d565b6001811415611f5a5760405162461bcd60e51b81526020600482015260116024820152701393d512125391d7d254d7d313d0d2d151607a1b604482015260640161088d565b801561082f5760405162461bcd60e51b815260206004820152601960248201527f554e4b4e4f574e5f5245434f56455241424c455f4552524f5200000000000000604482015260640161088d565b611fb06126ad565b61ffff8116611fc857611fc3600061162c565b612026565b611fd460016064613c95565b611fdf906064613c95565b61ffff168161ffff1611156120265760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b604482015260640161088d565b6008805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df91840990602001611669565b6001600160a01b038116600090815260066020526040812054819063ffffffff600160c01b82048116916106e89162093a8091600160e01b900416613cde565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03851681526009835283812084519283018552546001600160c01b038116835263ffffffff600160c01b8204811694840194909452600160e01b90049092169281019290925290516001600