Contract Overview
Balance:
0 METIS

METIS Value:
$0.00(@ $28.29/METIS)
More Info
Tag:
Not Available. Update?

Contract Creator:
Contract Source Code Verified (Partial Match)
Contract Name:
YieldBooster

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 50000 runs

Created At:
Thu, 21 Mar 2024 18:53:48 GMT
Ownable.sol
@openzeppelin
contracts
access
Ownable.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "contract IXGrailToken",
        "name": "xGrailToken_",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "poolAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Allocate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "poolAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Deallocate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "contract IERC20",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "EmergencyWithdraw",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "status",
        "type": "bool"
      }
    ],
    "name": "UpdateForcedDeallocationStatus",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newFloor",
        "type": "uint256"
      }
    ],
    "name": "UpdateTotalAllocationFloor",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "MAX_TOTAL_ALLOCATION_FLOOR",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "allocate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "deallocate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "deallocateAllFromPool",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IERC20",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "emergencyWithdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "forceDeallocate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "forcedDeallocationStatus",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "maxBoostMultiplier",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "lpAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "totalLpSupply",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "userAllocation",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "poolTotalAllocation",
        "type": "uint256"
      }
    ],
    "name": "getExpectedMultiplier",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "poolAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "maxBoostMultiplier",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "lpAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "totalLpSupply",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "userAllocation",
        "type": "uint256"
      }
    ],
    "name": "getMultiplier",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "poolAddress",
        "type": "address"
      }
    ],
    "name": "getPoolTotalAllocation",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "poolAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "getUserPosition",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "poolAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getUserPositionAllocation",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "poolAddress",
        "type": "address"
      }
    ],
    "name": "getUserPositionsLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "userAddress",
        "type": "address"
      }
    ],
    "name": "getUserTotalAllocation",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "floor",
        "type": "uint256"
      }
    ],
    "name": "setTotalAllocationFloor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalAllocation",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalAllocationFloor",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "status",
        "type": "bool"
      }
    ],
    "name": "updateForcedDeallocationStatus",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "usersPositionsAllocation",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "xGrailToken",
    "outputs": [
      {
        "internalType": "contract IXGrailToken",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60a060405268056bc75e2d6310000060025534801561001d57600080fd5b506040516126093803806126098339818101604052602081101561004057600080fd5b5051600061004c6100af565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001805560601b6001600160601b0319166080526100b3565b3390565b60805160601c6125206100e96000398061069b528061081e5280610a9a5280610bd95280611445528061150852506125206000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806379203dc4116100e3578063c15cb9f41161008c578063e23ec7fd11610066578063e23ec7fd1461058e578063e26a96bb14610596578063f2fde38b146105d95761018d565b8063c15cb9f41461051c578063c72f55801461053b578063d2eec6ff146105435761018d565b80639a2b6f79116100bd5780639a2b6f79146104ac578063b24dd3f0146104e1578063b33c93a8146104e95761018d565b806379203dc4146104595780637d6aaab1146104615780638da5cb5b146104a45761018d565b8063532b6554116101455780636ff1c9bc1161011f5780636ff1c9bc146103eb578063715018a61461041e57806371a691ea146104265761018d565b8063532b6554146103035780635485435414610320578063549230c9146103595761018d565b806324655fc31161017657806324655fc31461027b57806346fa466a146102975780634e18951a146102c85761018d565b80631c75e369146101925780631e5dd8b114610226575b600080fd5b610224600480360360608110156101a857600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135918101906060810160408201356401000000008111156101e557600080fd5b8201836020820111156101f757600080fd5b8035906020019184600183028401116401000000008311171561021957600080fd5b50909250905061060c565b005b6102696004803603606081101561023c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107d0565b60408051918252519081900360200190f35b610283610813565b604080519115158252519081900360200190f35b61029f61081c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610269600480360360408110156102de57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610840565b6102246004803603602081101561031957600080fd5b5035610886565b6102246004803603604081101561033657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109d7565b6102246004803603606081101561036f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135918101906060810160408201356401000000008111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460018302840111640100000000831117156103e057600080fd5b509092509050610b4a565b6102246004803603602081101561040157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d78565b610224611002565b6102696004803603602081101561043c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611119565b610269611141565b6102696004803603606081101561047757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611147565b61029f61118d565b610269600480360360a08110156104c257600080fd5b50803590602081013590604081013590606081013590608001356111a9565b6102696111c4565b610269600480360360208110156104ff57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111d1565b6102246004803603602081101561053257600080fd5b503515156111f9565b61022461130e565b610269600480360360a081101561055957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020810135906040810135906060810135906080013561156f565b6102696115a6565b610269600480360360608110156105ac57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356115ac565b610224600480360360208110156105ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115cf565b6002600154141561067e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001553373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806124be602d913960400191505060405180910390fd5b6000808383604081101561072457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516925060200135905061075186838388611770565b8173ffffffffffffffffffffffffffffffffffffffff166340be7bec82876040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156107ac57600080fd5b505af11580156107c0573d6000803e3d6000fd5b5050600180555050505050505050565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526004602090815260408083209386168352928152828220848352905220545b9392505050565b60085460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600360209081526040808320938516835292905290812061087d90611900565b90505b92915050565b61088e61190b565b73ffffffffffffffffffffffffffffffffffffffff166108ac61118d565b73ffffffffffffffffffffffffffffffffffffffff161461092e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000811180156109475750683635c9adc5dea000008111155b61099c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806124466026913960400191505060405180910390fd5b60028190556040805182815290517f74aa87c571361007131d906fd24194a1f1faf3463cd99cc28f632590aa6092e69181900360200190a150565b60026001541415610a4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015573ffffffffffffffffffffffffffffffffffffffff82166000908152600460209081526040808320338085529083528184208585529092529091205490610a98908490848461190f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a0bdc7cb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610b2957600080fd5b505af1158015610b3d573d6000803e3d6000fd5b5050600180555050505050565b60026001541415610bbc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001553373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806124be602d913960400191505060405180910390fd5b60008083836040811015610c6257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169250602001359050610c8f8683838861190f565b8173ffffffffffffffffffffffffffffffffffffffff16634f558e79826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610ce057600080fd5b505afa158015610cf4573d6000803e3d6000fd5b505050506040513d6020811015610d0a57600080fd5b505115610d6c578173ffffffffffffffffffffffffffffffffffffffff16639016f82282876040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156107ac57600080fd5b50506001805550505050565b60026001541415610dea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155610df761190b565b73ffffffffffffffffffffffffffffffffffffffff16610e1561118d565b73ffffffffffffffffffffffffffffffffffffffff1614610e9757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d6020811015610f2a57600080fd5b5051905080610f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061246c6028913960400191505060405180910390fd5b6040805133815273ffffffffffffffffffffffffffffffffffffffff8416602082015280820183905290517ff24ef89f38eadc1bde50701ad6e4d6d11a2dc24f7cf834a486991f38833285049181900360600190a1610ffa73ffffffffffffffffffffffffffffffffffffffff83163383611b3d565b505060018055565b61100a61190b565b73ffffffffffffffffffffffffffffffffffffffff1661102861118d565b73ffffffffffffffffffffffffffffffffffffffff16146110aa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b60075481565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260036020908152604080832093861683529290529081206111859083611bcf565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60006111b88686868686611bdb565b90505b95945050505050565b683635c9adc5dea0000081565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b61120161190b565b73ffffffffffffffffffffffffffffffffffffffff1661121f61118d565b73ffffffffffffffffffffffffffffffffffffffff16146112a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682151590811790915560408051338152602081019290925280517ff82797bd475489f8533dffe42417dafb397877f3470ae89c491cdb90068a065c9281900390910190a150565b6002600154141561138057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015560085460ff166113f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f666f7263654465616c6c6f636174653a20756e617574686f72697a6564000000604482015290519081900360640190fd5b604080517f2cc2f5ce000000000000000000000000000000000000000000000000000000008152336004820152306024820152905160009173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691632cc2f5ce91604480820192602092909190829003018186803b15801561148c57600080fd5b505afa1580156114a0573d6000803e3d6000fd5b505050506040513d60208110156114b657600080fd5b5051604080517fa0bdc7cb00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163a0bdc7cb9160448082019260009290919082900301818387803b15801561155057600080fd5b505af1158015611564573d6000803e3d6000fd5b505060018055505050565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260408120546111b8908690869086908690611bdb565b60025481565b600460209081526000938452604080852082529284528284209052825290205481565b6115d761190b565b73ffffffffffffffffffffffffffffffffffffffff166115f561118d565b73ffffffffffffffffffffffffffffffffffffffff161461167757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806123b26026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600560205260409020546117a09082611c60565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526005602090815260408083209490945560048152838220928716825291825282812085825290915220546117f19082611c60565b73ffffffffffffffffffffffffffffffffffffffff8086166000818152600460209081526040808320948916808452948252808320888452825280832095909555918152600382528381209281529190522061184d9083611cd4565b5060075461185b9082611c60565b60075573ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205461188e9082611c60565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526006602090815260409182902094909455805186815293840185905280519193928816927f5b9d56b28a7cde78f80ab41749028c18864c008e0e3722985c63ea258111b7eb929081900390910190a350505050565b600061088082611ce0565b3390565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600460209081526040808320938716835292815282822085835290522054818110156119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061241f6027913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560205260409020546119d39083611ce4565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020526040902055611a038183611ce4565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600460209081526040808320938916835292815282822087835290522055611a488183611ce4565b611a8a5773ffffffffffffffffffffffffffffffffffffffff8086166000908152600360209081526040808320938816835292905220611a889084611d5b565b505b600754611a979083611ce4565b60075573ffffffffffffffffffffffffffffffffffffffff8416600090815260066020526040902054611aca9083611ce4565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526006602090815260409182902094909455805187815293840186905280519193928916927f7d613f7bd1a777aeeefdd38ae61201003086575188df50618d02482220f5c147929081900390910190a35050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611bca908490611d67565b505050565b600061087d8383611e3f565b6000600254821015611bed5760025491505b811580611bf8575084155b80611c01575082155b80611c0a575083155b80611c13575085155b15611c20575060006111bb565b6000611c49611c2f8785611ebd565b611c4389611c3d888a611ebd565b90611ebd565b90611f30565b9050611c558188611fb1565b979650505050505050565b60008282018381101561087d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061087d8383611fc7565b5490565b600082821115611d5557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600061087d8383612011565b6000611dc9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120f59092919063ffffffff16565b805190915015611bca57808060200190516020811015611de857600080fd5b5051611bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612494602a913960400191505060405180910390fd5b81546000908210611e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123906022913960400191505060405180910390fd5b826000018281548110611eaa57fe5b9060005260206000200154905092915050565b600082611ecc57506000610880565b82820282848281611ed957fe5b041461087d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806123fe6021913960400191505060405180910390fd5b6000808211611fa057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611fa957fe5b049392505050565b6000818310611fc0578161087d565b5090919050565b6000611fd38383612104565b61200957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610880565b506000610880565b600081815260018301602052604081205480156120eb5783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061206257fe5b906000526020600020015490508087600001848154811061207f57fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806120af57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610880565b6000915050610880565b6060611185848460008561211c565b60009081526001919091016020526040902054151590565b606082471015612177576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806123d86026913960400191505060405180910390fd5b612180856122cb565b6121eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061225457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612217565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146122b6576040519150601f19603f3d011682016040523d82523d6000602084013e6122bb565b606091505b5091509150611c558282866122d1565b3b151590565b606083156122e057508161080c565b8251156122f05782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561235457818101518382015260200161233c565b50505050905090810190601f1680156123815780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776465616c6c6f636174653a206e6f7420656e6f75676820616c6c6f63617465642078477261696c736574546f74616c416c6c6f636174696f6e466c6f6f723a20696e76616c696420666c6f6f72656d657267656e637957697468647261773a20746f6b656e2062616c616e6365206973206e756c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656478477261696c546f6b656e4f6e6c793a2063616c6c65722073686f756c642062652078477261696c546f6b656ea264697066735822122075e47b66b3991a91d163cd74b5647b38802d45b4593eb1b83aae75f895da238564736f6c63430007060033000000000000000000000000f192897fc39bf766f1011a858de964457bca5832