[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "mintAmount", "type": "uint256" } ], "name": "DefaultMintAmountSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "Snapshot", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "CURRENT_MULTIPLIER_EPOC", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_MULTIPLIER_EPOCS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MULTIPLIER_AFTER_EPOC_EXPIRY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MULTIPLIER_DECREASE_RATE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOKEN_MANAGER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "addTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "snapshotId", "type": "uint256" } ], "name": "balanceOfAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "receiver", "type": "address" } ], "name": "closeTokenManager", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "currentMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isTokenManager", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "tos", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "mintMany", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextMultiplierUpdate", "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": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "removeTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "receiver", "type": "address" } ], "name": "rotateTokenManager", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "shouldUpdateMultiplier", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "snapshot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "timeBeforeNextMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "snapshotId", "type": "uint256" } ], "name": "totalSupplyAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61271780620000f36000396000f3fe6080604052600436106102885760003560e01c806372aaab531161015a578063b9727f96116100c1578063e8bc37891161007a578063e8bc378914610751578063ebc2611914610768578063ebe3ff4114610788578063f2fde38b1461079d578063f6de8bd5146107bd578063fd5d7a68146107d257600080fd5b8063b9727f96146106a9578063c2840e60146106c9578063d547741f146106eb578063d8bacd491461070b578063dd62ed3e1461071e578063e1714fd31461073e57600080fd5b806395d89b411161011357806395d89b411461060a5780639711715a1461061f578063981b24d014610634578063a217fddf14610654578063a457c2d714610669578063a9059cbb1461068957600080fd5b806372aaab53146105585780638129fc1c1461057857806382eabe361461058d5780638456cb59146105ad5780638da5cb5b146105c257806391d14854146105ea57600080fd5b806339509351116101fe57806351b0775a116101b757806351b0775a146104b457806355981573146104c95780635c975abb146104de5780636fbaaa1e146104f757806370a082311461050d578063715018a61461054357600080fd5b806339509351146104085780633f4ba83a146104285780634029a3ce1461043d57806340c10f191461045d578063495bdfc11461047d5780634ee2cd7e1461049457600080fd5b806323b872dd1161025057806323b872dd14610345578063248a9ca31461036557806326563731146103955780632f2ff15d146103ac578063313ce567146103cc57806336568abe146103e857600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063095ea7b3146102e45780630eb24db41461030457806318160ddd14610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612123565b6107e9565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d7610820565b6040516102b99190612179565b3480156102f057600080fd5b506102ad6102ff3660046121c1565b6108b2565b34801561031057600080fd5b5061032461031f3660046122cc565b6108ca565b005b34801561033257600080fd5b5060cb545b6040519081526020016102b9565b34801561035157600080fd5b506102ad610360366004612301565b610916565b34801561037157600080fd5b50610337610380366004612342565b60009081526097602052604090206001015490565b3480156103a157600080fd5b506103376101665481565b3480156103b857600080fd5b506103246103c736600461235b565b61093a565b3480156103d857600080fd5b50604051601281526020016102b9565b3480156103f457600080fd5b5061032461040336600461235b565b610964565b34801561041457600080fd5b506102ad6104233660046121c1565b6109e3565b34801561043457600080fd5b50610324610a05565b34801561044957600080fd5b5061032461045836600461238b565b610a34565b34801561046957600080fd5b506103246104783660046121c1565b610b16565b34801561048957600080fd5b506103376101645481565b3480156104a057600080fd5b506103376104af3660046121c1565b610bb0565b3480156104c057600080fd5b506102ad610c09565b3480156104d557600080fd5b50610337610c2d565b3480156104ea57600080fd5b5061012d5460ff166102ad565b34801561050357600080fd5b5061015f54610337565b34801561051957600080fd5b50610337610528366004612446565b6001600160a01b0316600090815260c9602052604090205490565b34801561054f57600080fd5b50610324610c42565b34801561056457600080fd5b506103246105733660046122cc565b610c54565b34801561058457600080fd5b50610324610c9c565b34801561059957600080fd5b506103246105a8366004612446565b610dad565b3480156105b957600080fd5b50610324610dbe565b3480156105ce57600080fd5b506033546040516001600160a01b0390911681526020016102b9565b3480156105f657600080fd5b506102ad61060536600461235b565b610e29565b34801561061657600080fd5b506102d7610e54565b34801561062b57600080fd5b50610324610e63565b34801561064057600080fd5b5061033761064f366004612342565b610e73565b34801561066057600080fd5b50610337600081565b34801561067557600080fd5b506102ad6106843660046121c1565b610e9e565b34801561069557600080fd5b506102ad6106a43660046121c1565b610f19565b3480156106b557600080fd5b506103246106c4366004612446565b610f27565b3480156106d557600080fd5b506103376000805160206126eb83398151915281565b3480156106f757600080fd5b5061032461070636600461235b565b610f38565b610324610719366004612446565b610f5d565b34801561072a57600080fd5b50610337610739366004612463565b610fe5565b61032461074c366004612446565b611010565b34801561075d57600080fd5b506103376101655481565b34801561077457600080fd5b506102ad610783366004612446565b611064565b34801561079457600080fd5b5061032461107e565b3480156107a957600080fd5b506103246107b8366004612446565b611096565b3480156107c957600080fd5b506103376110bd565b3480156107de57600080fd5b506103376101635481565b60006001600160e01b03198216637965db0b60e01b148061081a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060cc805461082f90612491565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90612491565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b5050505050905090565b6000336108c08185856110d1565b5060019392505050565b6108d26111f5565b60005b8151811015610912576109008282815181106108f3576108f36124cc565b602002602001015161124f565b8061090a816124f8565b9150506108d5565b5050565b600033610924858285611267565b61092f8585856112e1565b506001949350505050565b60008281526097602052604090206001015461095581611497565b61095f83836114a1565b505050565b6001600160a01b03811633146109d95760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6109128282611527565b6000336108c08185856109f68383610fe5565b610a009190612513565b6110d1565b610a0e33611064565b610a2a5760405162461bcd60e51b81526004016109d09061252b565b610a3261158e565b565b610a3d33611064565b610a595760405162461bcd60e51b81526004016109d09061252b565b610a61610c09565b15610abc5761016454610165541415610a81576101665461015f55610abc565b60016101656000828254610a959190612513565b90915550506101635461015f8054600090610ab1908490612578565b909155505042610161555b60005b825181101561095f57610b04838281518110610add57610add6124cc565b6020026020010151838381518110610af757610af76124cc565b60200260200101516115e1565b80610b0e816124f8565b915050610abf565b610b1f33611064565b610b3b5760405162461bcd60e51b81526004016109d09061252b565b610b436116ae565b610b4b610c09565b15610ba65761016454610165541415610b6b576101665461015f55610ba6565b60016101656000828254610b7f9190612513565b90915550506101635461015f8054600090610b9b908490612578565b909155505042610161555b61091282826115e1565b6001600160a01b038216600090815260fb6020526040812081908190610bd79085906116f5565b9150915081610bfe576001600160a01b038516600090815260c96020526040902054610c00565b805b95945050505050565b6000610c136110bd565b4210158015610c2857506101665461015f5414155b905090565b600042610c386110bd565b610c289190612578565b610c4a6111f5565b610a3260006117ec565b610c5c6111f5565b60005b815181101561091257610c8a828281518110610c7d57610c7d6124cc565b602002602001015161183e565b80610c94816124f8565b915050610c5f565b600054610100900460ff1615808015610cbc5750600054600160ff909116105b80610cd65750303b158015610cd6575060005460ff166001145b610d395760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109d0565b6000805460ff191660011790558015610d5c576000805461ff0019166101001790555b610d64611856565b8015610daa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610db56111f5565b610daa8161124f565b610dc733611064565b610de35760405162461bcd60e51b81526004016109d09061252b565b610deb61191c565b61271061015f55426101615568056bc75e2d63100000610160556301e13380610162556103e861016355600a61016455600161016555606461016655565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060cd805461082f90612491565b610e6b6111f5565b610daa61195a565b6000806000610e838460fc6116f5565b9150915081610e945760cb54610e96565b805b949350505050565b60003381610eac8286610fe5565b905083811015610f0c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109d0565b61092f82868684036110d1565b6000336108c08185856112e1565b610f2f6111f5565b610daa8161183e565b600082815260976020526040902060010154610f5381611497565b61095f8383611527565b610f6633611064565b610f825760405162461bcd60e51b81526004016109d09061252b565b6001600160a01b038116610fa85760405162461bcd60e51b81526004016109d09061258f565b610fb061107e565b6040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610912573d6000803e3d6000fd5b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205490565b61101933611064565b6110355760405162461bcd60e51b81526004016109d09061252b565b6001600160a01b03811661105b5760405162461bcd60e51b81526004016109d09061258f565b610fa88161124f565b600061081a6000805160206126eb83398151915283610e29565b610a326000805160206126eb83398151915233610964565b61109e6111f5565b6110a7816119b4565b6110b26000826114a1565b610daa600033610964565b60006101625461016154610c289190612513565b6001600160a01b0383166111335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d0565b6001600160a01b0382166111945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d0565b6001600160a01b03838116600081815260ca602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6033546001600160a01b03163314610a325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d0565b610daa6000805160206126eb833981519152826114a1565b60006112738484610fe5565b905060001981146112db57818110156112ce5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109d0565b6112db84848484036110d1565b50505050565b6001600160a01b0383166113455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109d0565b6001600160a01b0382166113a75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109d0565b6113b2838383611a2a565b6001600160a01b038316600090815260c960205260409020548181101561142a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109d0565b6001600160a01b03808516600081815260c9602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061148a9086815260200190565b60405180910390a36112db565b610daa8133611a3d565b6114ab8282610e29565b6109125760008281526097602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114e33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6115318282610e29565b156109125760008281526097602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b611596611a96565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166116375760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109d0565b61164360008383611a2a565b8060cb60008282546116559190612513565b90915550506001600160a01b038216600081815260c960209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b61012d5460ff1615610a325760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109d0565b600080600084116117415760405162461bcd60e51b815260206004820152601660248201527504552433230536e617073686f743a20696420697320360541b60448201526064016109d0565b611749611ae0565b8411156117985760405162461bcd60e51b815260206004820152601d60248201527f4552433230536e617073686f743a206e6f6e6578697374656e7420696400000060448201526064016109d0565b60006117a48486611aeb565b84549091508114156117bd5760008092509250506117e5565b60018460010182815481106117d4576117d46124cc565b906000526020600020015492509250505b9250929050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610daa6000805160206126eb83398151915282610f38565b600054610100900460ff1661187d5760405162461bcd60e51b81526004016109d0906125d2565b6118d0604051806040016040528060138152602001722430b9b43a30b39029b830b1b2902a37b5b2b760691b8152506040518060400160405280600681526020016524535041434560d01b815250611b96565b6118d8611bc7565b6118e0611bee565b6118e8611c1d565b610a32614e2061015f5542610161556301e13380610162556103e861016355600a6101645560016101655561271061016655565b6119246116ae565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115c43390565b600061196a60fe80546001019055565b6000611974611ae0565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb67816040516119a791815260200190565b60405180910390a1919050565b6119bc6111f5565b6001600160a01b038116611a215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d0565b610daa816117ec565b611a326116ae565b61095f838383611c78565b611a478282610e29565b61091257611a5481611cc0565b611a5f836020611cd2565b604051602001611a7092919061261d565b60408051601f198184030181529082905262461bcd60e51b82526109d091600401612179565b61012d5460ff16610a325760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109d0565b6000610c2860fe5490565b8154600090611afc5750600061081a565b82546000905b80821015611b49576000611b168383611e75565b60008781526020902090915085908201541115611b3557809150611b43565b611b40816001612513565b92505b50611b02565b600082118015611b75575083611b7286611b64600186612578565b600091825260209091200190565b54145b15611b8e57611b85600183612578565b9250505061081a565b50905061081a565b600054610100900460ff16611bbd5760405162461bcd60e51b81526004016109d0906125d2565b6109128282611e90565b600054610100900460ff16610a325760405162461bcd60e51b81526004016109d0906125d2565b600054610100900460ff16611c155760405162461bcd60e51b81526004016109d0906125d2565b610a32611ede565b600054610100900460ff16611c445760405162461bcd60e51b81526004016109d0906125d2565b611c4c611f12565b611c54611bc7565b611c5f6000336114a1565b610a326000805160206126eb8339815191526000611f41565b6001600160a01b038316611c9757611c8f82611f8c565b61095f611fbf565b6001600160a01b038216611cae57611c8f83611f8c565b611cb783611f8c565b61095f82611f8c565b606061081a6001600160a01b03831660145b60606000611ce1836002612692565b611cec906002612513565b67ffffffffffffffff811115611d0457611d046121ed565b6040519080825280601f01601f191660200182016040528015611d2e576020820181803683370190505b509050600360fc1b81600081518110611d4957611d496124cc565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d7857611d786124cc565b60200101906001600160f81b031916908160001a9053506000611d9c846002612692565b611da7906001612513565b90505b6001811115611e1f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611ddb57611ddb6124cc565b1a60f81b828281518110611df157611df16124cc565b60200101906001600160f81b031916908160001a90535060049490941c93611e18816126b1565b9050611daa565b508315611e6e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109d0565b9392505050565b6000611e8460028484186126c8565b611e6e90848416612513565b600054610100900460ff16611eb75760405162461bcd60e51b81526004016109d0906125d2565b8151611eca9060cc90602085019061208a565b50805161095f9060cd90602084019061208a565b600054610100900460ff16611f055760405162461bcd60e51b81526004016109d0906125d2565b61012d805460ff19169055565b600054610100900460ff16611f395760405162461bcd60e51b81526004016109d0906125d2565b610a32611fcd565b600082815260976020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038116600090815260fb6020908152604080832060c990925290912054610daa9190611ffd565b611ffd565b610a3260fc611fba60cb5490565b600054610100900460ff16611ff45760405162461bcd60e51b81526004016109d0906125d2565b610a32336117ec565b6000612007611ae0565b90508061201384612047565b101561095f578254600180820185556000858152602080822090930193909355938401805494850181558252902090910155565b805460009061205857506000919050565b8154829061206890600190612578565b81548110612078576120786124cc565b90600052602060002001549050919050565b82805461209690612491565b90600052602060002090601f0160209004810192826120b857600085556120fe565b82601f106120d157805160ff19168380011785556120fe565b828001600101855582156120fe579182015b828111156120fe5782518255916020019190600101906120e3565b5061210a92915061210e565b5090565b5b8082111561210a576000815560010161210f565b60006020828403121561213557600080fd5b81356001600160e01b031981168114611e6e57600080fd5b60005b83811015612168578181015183820152602001612150565b838111156112db5750506000910152565b602081526000825180602084015261219881604085016020870161214d565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610daa57600080fd5b600080604083850312156121d457600080fd5b82356121df816121ac565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561222c5761222c6121ed565b604052919050565b600067ffffffffffffffff82111561224e5761224e6121ed565b5060051b60200190565b600082601f83011261226957600080fd5b8135602061227e61227983612234565b612203565b82815260059290921b8401810191818101908684111561229d57600080fd5b8286015b848110156122c15780356122b4816121ac565b83529183019183016122a1565b509695505050505050565b6000602082840312156122de57600080fd5b813567ffffffffffffffff8111156122f557600080fd5b610e9684828501612258565b60008060006060848603121561231657600080fd5b8335612321816121ac565b92506020840135612331816121ac565b929592945050506040919091013590565b60006020828403121561235457600080fd5b5035919050565b6000806040838503121561236e57600080fd5b823591506020830135612380816121ac565b809150509250929050565b6000806040838503121561239e57600080fd5b823567ffffffffffffffff808211156123b657600080fd5b6123c286838701612258565b93506020915081850135818111156123d957600080fd5b85019050601f810186136123ec57600080fd5b80356123fa61227982612234565b81815260059190911b8201830190838101908883111561241957600080fd5b928401925b828410156124375783358252928401929084019061241e565b80955050505050509250929050565b60006020828403121561245857600080fd5b8135611e6e816121ac565b6000806040838503121561247657600080fd5b8235612481816121ac565b91506020830135612380816121ac565b600181811c908216806124a557607f821691505b602082108114156124c657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561250c5761250c6124e2565b5060010190565b60008219821115612526576125266124e2565b500190565b6020808252602d908201527f546f6b656e4d616e61676572526f6c653a2043414c4c45525f49535f4e4f545f60408201526c2a27a5a2a72fa6a0a720a3a2a960991b606082015260800190565b60008282101561258a5761258a6124e2565b500390565b60208082526023908201527f546f6b656e4d616e61676572526f6c653a2052454345495645525f49535f454d60408201526250545960e81b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161265581601785016020880161214d565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161268681602884016020880161214d565b01602801949350505050565b60008160001904831182151516156126ac576126ac6124e2565b500290565b6000816126c0576126c06124e2565b506000190190565b6000826126e557634e487b7160e01b600052601260045260246000fd5b50049056fe74f7a545c65c11839a48d7453738b30c295408df2d944516167556759ddc6d06a164736f6c634300080c000a