{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC20RewardDistributor",
  "sourceName": "contracts/accounting/distributors/ERC20RewardDistributor.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "asked",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "provided",
          "type": "uint256"
        }
      ],
      "name": "InsufficientAllowanceForDistribution",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidContractEntityInterface",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "provided",
          "type": "bytes4"
        },
        {
          "internalType": "bytes4",
          "name": "required",
          "type": "bytes4"
        }
      ],
      "name": "ListingStrategyMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "provided",
          "type": "bytes4"
        },
        {
          "internalType": "bytes4",
          "name": "required",
          "type": "bytes4"
        }
      ],
      "name": "TaxStrategyMismatch",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "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": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "contractKey",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "agreementId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "rewardAmount",
          "type": "uint256"
        }
      ],
      "name": "distributeExternalReward",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "enum IPaymentManager.EarningType",
                  "name": "earningType",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isLister",
                  "type": "bool"
                },
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "internalType": "struct Accounts.UserEarning[]",
              "name": "userEarnings",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "enum IPaymentManager.EarningType",
                  "name": "earningType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint256",
                  "name": "universeId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "internalType": "struct Accounts.UniverseEarning",
              "name": "universeEarning",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "enum IPaymentManager.EarningType",
                  "name": "earningType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "internalType": "struct Accounts.ProtocolEarning",
              "name": "protocolEarning",
              "type": "tuple"
            }
          ],
          "internalType": "struct Accounts.RentalEarnings",
          "name": "rentalExternalRewardEarnings",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IACL",
              "name": "acl",
              "type": "address"
            },
            {
              "internalType": "contract IMetahub",
              "name": "metahub",
              "type": "address"
            }
          ],
          "internalType": "struct ERC20RewardDistributor.ERC20RewardDistributorInitParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100e2565b600054610100900460ff161561008e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100e0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516122eb6200011a600039600081816104450152818161048e0152818161052d0152818161056d015261060001526122eb6000f3fe60806040526004361061006f5760003560e01c80634f1ef2861161004e5780634f1ef286146100fc57806352d1902d1461010f578063b6a597dd14610132578063ec21896d1461015257600080fd5b80621a04ab1461007457806301ffc9a7146100aa5780633659cfe6146100da575b600080fd5b34801561008057600080fd5b5061009461008f366004611374565b610174565b6040516100a1919061142a565b60405180910390f35b3480156100b657600080fd5b506100ca6100c53660046114fb565b610411565b60405190151581526020016100a1565b3480156100e657600080fd5b506100fa6100f5366004611518565b61043b565b005b6100fa61010a366004611676565b610523565b34801561011b57600080fd5b506101246105f3565b6040519081526020016100a1565b34801561013e57600080fd5b506100fa61014d366004611708565b6106a6565b34801561015e57600080fd5b5060405163c812c47560e01b81526020016100a1565b61017c6112b6565b60655460405163e3dedd6b60e01b81526326d3432d60e21b60048201526000916001600160a01b03169063e3dedd6b90602401602060405180830381865afa1580156101cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f09190611730565b6001600160a01b031663662c1ff8866040518263ffffffff1660e01b815260040161021d91815260200190565b600060405180830381865afa15801561023a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261026291908101906119e0565b90506000610271828686610814565b60208101519091501561040857606554602082015161029e916001600160a01b0388811692911690610894565b60655460405163e3dedd6b60e01b815263d48e4fbd60e01b60048201526000916001600160a01b03169063e3dedd6b90602401602060405180830381865afa1580156102ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103129190611730565b6001600160a01b031663f1f56a1f84606001516040518263ffffffff1660e01b815260040161034391815260200190565b600060405180830381865afa158015610360573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103889190810190611ad2565b60655460405163e2b188c760e01b81529192506001600160a01b03169063e2b188c7906103bd90849087908790600401611d8d565b6000604051808303816000875af11580156103dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104049190810190611f3e565b9350505b50509392505050565b60006001600160e01b03198216621a04ab60e01b148061043557506104358261096e565b92915050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361048c5760405162461bcd60e51b815260040161048390612085565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166104d560008051602061226f833981519152546001600160a01b031690565b6001600160a01b0316146104fb5760405162461bcd60e51b8152600401610483906120d1565b610504816109a3565b6040805160008082526020820190925261052091839190610a20565b50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361056b5760405162461bcd60e51b815260040161048390612085565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166105b460008051602061226f833981519152546001600160a01b031690565b6001600160a01b0316146105da5760405162461bcd60e51b8152600401610483906120d1565b6105e3826109a3565b6105ef82826001610a20565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106935760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610483565b5060008051602061226f83398151915290565b600054610100900460ff16158080156106c65750600054600160ff909116105b806106e05750303b1580156106e0575060005460ff166001145b6107435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610483565b6000805460ff191660011790558015610766576000805461ff0019166101001790555b61076e610b90565b61077b6020830183611518565b609880546001600160a01b0319166001600160a01b03929092169190911790556107ab6040830160208401611518565b606580546001600160a01b0319166001600160a01b039290921691909117905580156105ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61081c611320565b60e08401515180516001600160e01b031916637f20edbd60e11b0161086657600080600061084988610bfd565b92509250925061085c8787858585610c48565b945050505061088c565b80516001600160e01b03191663757c152d60e01b0161088c576108898484610d3b565b91505b509392505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156108e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610909919061211d565b610913919061214c565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610968908590610d5f565b50505050565b60006001600160e01b0319821663ec21896d60e01b148061043557506301ffc9a760e01b6001600160e01b0319831614610435565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b5050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610a5857610a5383610e31565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610ab2575060408051601f3d908101601f19168201909252610aaf9181019061211d565b60015b610b155760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610483565b60008051602061226f8339815191528114610b845760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610483565b50610a53838383610ecd565b600054610100900460ff16610bfb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610483565b565b60e08101518051602082015160409092015160009283928392909190610c2283610ef2565b9650610c2f905082610f81565b9550610c3c905081610f81565b96989597505050505050565b610c50611320565b6001600160a01b03861681526020810185905284612710610c7561ffff861683612164565b610c7f9190612183565b608083018190528111610c96576080820152610d32565b6080820151610ca590826121a5565b9050612710610cb861ffff851683612164565b610cc29190612183565b60a083018190528111610cd95760a0820152610d32565b60a0820151610ce890826121a5565b9050612710610cfb61ffff871683612164565b610d059190612183565b604083018190528111610d1c576040820152610d32565b6040820151610d2b90826121a5565b6060830152505b95945050505050565b610d43611320565b6001600160a01b03909216825260208201819052606082015290565b6000610db4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110069092919063ffffffff16565b805190915015610a535780806020019051810190610dd291906121bc565b610a535760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610483565b6001600160a01b0381163b610e9e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610483565b60008051602061226f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610ed68361101f565b600082511180610ee35750805b15610a5357610968838361105f565b805160009081907f01be24860d04cdcdba8c98f1ff62f6e70c7c8a24ee18bf599bc60267cc0f8c686001600160e01b0319821662df124360e11b14610f5e5760405163dc5b665760e01b81526001600160e01b0319808416600483015282166024820152604401610483565b8460200151806020019051810190610f7691906121e9565b935093505050915091565b805160009081907f3ddbcd09531601ddaf61ca39b7005ce8f3825ea1267f0feb9d416e868dec8eba6001600160e01b03198216633ddbcd0960e01b14610fee5760405163bdf170b760e01b81526001600160e01b0319808416600483015282166024820152604401610483565b8460200151806020019051810190610f769190612215565b6060611015848460008561114a565b90505b9392505050565b61102881610e31565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6110c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610483565b600080846001600160a01b0316846040516110e2919061223f565b600060405180830381855af49150503d806000811461111d576040519150601f19603f3d011682016040523d82523d6000602084013e611122565b606091505b5091509150610d32828260405180606001604052806027815260200161228f6027913961127d565b6060824710156111ab5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610483565b6001600160a01b0385163b6112025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610483565b600080866001600160a01b0316858760405161121e919061223f565b60006040518083038185875af1925050503d806000811461125b576040519150601f19603f3d011682016040523d82523d6000602084013e611260565b606091505b509150915061127082828661127d565b925050505b949350505050565b6060831561128c575081611018565b82511561129c5782518084602001fd5b8160405162461bcd60e51b8152600401610483919061225b565b6040518060600160405280606081526020016112fd60408051608081019091528060008152602001600081526020016000815260200160006001600160a01b031681525090565b815260408051606081018252600080825260208281018290529282015291015290565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461052057600080fd5b60008060006060848603121561138957600080fd5b83359250602084013561139b8161135f565b929592945050506040919091013590565b600781106113ca57634e487b7160e01b600052602160045260246000fd5b9052565b6113d98282516113ac565b60208181015190830152604080820151908301526060908101516001600160a01b0316910152565b61140c8282516113ac565b602081810151908301526040908101516001600160a01b0316910152565b6020808252825161010083830152805161012084018190526000929182019083906101408601905b808310156114b45783516114678382516113ac565b808601511515838701526040808201516001600160a01b0390811691850191909152606080830151908501526080918201511690830152928401926001929092019160a090910190611452565b5092860151926114c760408701856113ce565b604087015193506114db60c0870185611401565b9695505050505050565b6001600160e01b03198116811461052057600080fd5b60006020828403121561150d57600080fd5b8135611018816114e5565b60006020828403121561152a57600080fd5b81356110188161135f565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561156d5761156d611535565b60405290565b604051608081016001600160401b038111828210171561156d5761156d611535565b60405161010081016001600160401b038111828210171561156d5761156d611535565b60405161012081016001600160401b038111828210171561156d5761156d611535565b604051606081016001600160401b038111828210171561156d5761156d611535565b60405160a081016001600160401b038111828210171561156d5761156d611535565b604051601f8201601f191681016001600160401b038111828210171561164757611647611535565b604052919050565b60006001600160401b0382111561166857611668611535565b50601f01601f191660200190565b6000806040838503121561168957600080fd5b82356116948161135f565b915060208301356001600160401b038111156116af57600080fd5b8301601f810185136116c057600080fd5b80356116d36116ce8261164f565b61161f565b8181528660208385010111156116e857600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006040828403121561171a57600080fd5b50919050565b805161172b8161135f565b919050565b60006020828403121561174257600080fd5b81516110188161135f565b60006001600160401b0382111561176657611766611535565b5060051b60200190565b60005b8381101561178b578181015183820152602001611773565b838111156109685750506000910152565b6000604082840312156117ae57600080fd5b6117b661154b565b905081516117c3816114e5565b815260208201516001600160401b038111156117de57600080fd5b8201601f810184136117ef57600080fd5b80516117fd6116ce8261164f565b81815285602083850101111561181257600080fd5b611823826020830160208601611770565b602084015250909392505050565b600082601f83011261184257600080fd5b815160206118526116ce8361174d565b82815260059290921b8401810191818101908684111561187157600080fd5b8286015b848110156118ef5780516001600160401b03808211156118955760008081fd5b908801906040828b03601f19018113156118af5760008081fd5b6118b761154b565b87840151838111156118c95760008081fd5b6118d78d8a8388010161179c565b82525092015186830152508352918301918301611875565b509695505050505050565b805163ffffffff8116811461172b57600080fd5b600081830360a081121561192157600080fd5b611929611573565b915082516001600160401b038082111561194257600080fd5b61194e8683870161179c565b8452602085015191508082111561196457600080fd5b6119708683870161179c565b6020850152604085015191508082111561198957600080fd5b506119968582860161179c565b6040840152506040605f19820112156119ae57600080fd5b506119b761154b565b60608301516119c58161135f565b80825250608083015160208201528060608301525092915050565b6000602082840312156119f257600080fd5b81516001600160401b0380821115611a0957600080fd5b908301906101008286031215611a1e57600080fd5b611a26611595565b825182811115611a3557600080fd5b611a4187828601611831565b825250602083015160208201526040830151604082015260608301516060820152611a6e60808401611720565b6080820152611a7f60a084016118fa565b60a0820152611a9060c084016118fa565b60c082015260e083015182811115611aa757600080fd5b611ab38782860161190e565b60e08301525095945050505050565b8051801515811461172b57600080fd5b600060208284031215611ae457600080fd5b81516001600160401b0380821115611afb57600080fd5b908301906101208286031215611b1057600080fd5b611b186115b8565b825182811115611b2757600080fd5b611b3387828601611831565b825250611b4260208401611720565b6020820152611b5360408401611720565b6040820152611b64606084016118fa565b6060820152611b75608084016118fa565b6080820152611b8660a08401611720565b60a0820152611b9760c08401611ac2565b60c0820152611ba860e08401611ac2565b60e08201526101009150611bbd828401611ac2565b91810191909152949350505050565b60008151808452611be4816020860160208601611770565b601f01601f19169290920160200192915050565b63ffffffff60e01b815116825260006020820151604060208501526112756040850182611bcc565b600082825180855260208086019550808260051b84010181860160005b84811015611c8157601f19868403018952815160408151818652611c6382870182611bf8565b92870151958701959095525098840198925090830190600101611c3d565b5090979650505050505050565b6000815160a08452611ca360a0850182611bf8565b905060208301518482036020860152611cbc8282611bf8565b91505060408301518482036040860152611cd68282611bf8565b60609485015180516001600160a01b031695870195909552602090940151608090950194909452509092915050565b60006101008251818552611d1b82860182611c20565b91505060208301516020850152604083015160408501526060830151606085015260018060a01b03608084015116608085015263ffffffff60a08401511660a085015260c0830151611d7560c086018263ffffffff169052565b5060e083015184820360e0860152610d328282611c8e565b600061010080835285516101208083860152611dad610220860183611c20565b91506020880151611dc8828701826001600160a01b03169052565b505060408701516001600160a01b03908116610140860152606088015163ffffffff90811661016087015260808901511661018086015260a0880151166101a085015260c087015115156101c085015260e087015115156101e085015290860151801515610200850152838203602085015290611e458187611d05565b92505050611275604083018480516001600160a01b031682526020808201519083015260408082015190830152606080820151908301526080808201519083015260a090810151910152565b80516007811061172b57600080fd5b600060808284031215611eb257600080fd5b611eba611573565b9050611ec582611e91565b815260208201516020820152604082015160408201526060820151611ee98161135f565b606082015292915050565b600060608284031215611f0657600080fd5b611f0e6115db565b9050611f1982611e91565b8152602082015160208201526040820151611f338161135f565b604082015292915050565b60006020808385031215611f5157600080fd5b82516001600160401b0380821115611f6857600080fd5b908401906101008287031215611f7d57600080fd5b611f856115db565b825182811115611f9457600080fd5b83019150601f82018713611fa757600080fd5b8151611fb56116ce8261174d565b81815260a0918202840186019186820191908a841115611fd457600080fd5b948701945b838610156120525780868c031215611ff15760008081fd5b611ff96115fd565b61200287611e91565b815261200f898801611ac2565b898201526040808801516120228161135f565b908201526060878101519082015260808088015161203f8161135f565b9082015283529485019491870191611fd9565b8185526120618b898901611ea0565b888601526120718b828901611ef4565b604086015250929998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561212f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561215f5761215f612136565b500190565b600081600019048311821515161561217e5761217e612136565b500290565b6000826121a057634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156121b7576121b7612136565b500390565b6000602082840312156121ce57600080fd5b61101882611ac2565b805161ffff8116811461172b57600080fd5b600080604083850312156121fc57600080fd5b8251915061220c602084016121d7565b90509250929050565b6000806040838503121561222857600080fd5b612231836121d7565b915061220c602084016121d7565b60008251612251818460208701611770565b9190910192915050565b6020815260006110186020830184611bcc56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025405258e5263bd3c721e352313275ae223ddfb2165e5a850900bf1848aa857264736f6c634300080d0033",
  "deployedBytecode": "0x60806040526004361061006f5760003560e01c80634f1ef2861161004e5780634f1ef286146100fc57806352d1902d1461010f578063b6a597dd14610132578063ec21896d1461015257600080fd5b80621a04ab1461007457806301ffc9a7146100aa5780633659cfe6146100da575b600080fd5b34801561008057600080fd5b5061009461008f366004611374565b610174565b6040516100a1919061142a565b60405180910390f35b3480156100b657600080fd5b506100ca6100c53660046114fb565b610411565b60405190151581526020016100a1565b3480156100e657600080fd5b506100fa6100f5366004611518565b61043b565b005b6100fa61010a366004611676565b610523565b34801561011b57600080fd5b506101246105f3565b6040519081526020016100a1565b34801561013e57600080fd5b506100fa61014d366004611708565b6106a6565b34801561015e57600080fd5b5060405163c812c47560e01b81526020016100a1565b61017c6112b6565b60655460405163e3dedd6b60e01b81526326d3432d60e21b60048201526000916001600160a01b03169063e3dedd6b90602401602060405180830381865afa1580156101cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f09190611730565b6001600160a01b031663662c1ff8866040518263ffffffff1660e01b815260040161021d91815260200190565b600060405180830381865afa15801561023a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261026291908101906119e0565b90506000610271828686610814565b60208101519091501561040857606554602082015161029e916001600160a01b0388811692911690610894565b60655460405163e3dedd6b60e01b815263d48e4fbd60e01b60048201526000916001600160a01b03169063e3dedd6b90602401602060405180830381865afa1580156102ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103129190611730565b6001600160a01b031663f1f56a1f84606001516040518263ffffffff1660e01b815260040161034391815260200190565b600060405180830381865afa158015610360573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103889190810190611ad2565b60655460405163e2b188c760e01b81529192506001600160a01b03169063e2b188c7906103bd90849087908790600401611d8d565b6000604051808303816000875af11580156103dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104049190810190611f3e565b9350505b50509392505050565b60006001600160e01b03198216621a04ab60e01b148061043557506104358261096e565b92915050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361048c5760405162461bcd60e51b815260040161048390612085565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166104d560008051602061226f833981519152546001600160a01b031690565b6001600160a01b0316146104fb5760405162461bcd60e51b8152600401610483906120d1565b610504816109a3565b6040805160008082526020820190925261052091839190610a20565b50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361056b5760405162461bcd60e51b815260040161048390612085565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166105b460008051602061226f833981519152546001600160a01b031690565b6001600160a01b0316146105da5760405162461bcd60e51b8152600401610483906120d1565b6105e3826109a3565b6105ef82826001610a20565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106935760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610483565b5060008051602061226f83398151915290565b600054610100900460ff16158080156106c65750600054600160ff909116105b806106e05750303b1580156106e0575060005460ff166001145b6107435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610483565b6000805460ff191660011790558015610766576000805461ff0019166101001790555b61076e610b90565b61077b6020830183611518565b609880546001600160a01b0319166001600160a01b03929092169190911790556107ab6040830160208401611518565b606580546001600160a01b0319166001600160a01b039290921691909117905580156105ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61081c611320565b60e08401515180516001600160e01b031916637f20edbd60e11b0161086657600080600061084988610bfd565b92509250925061085c8787858585610c48565b945050505061088c565b80516001600160e01b03191663757c152d60e01b0161088c576108898484610d3b565b91505b509392505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156108e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610909919061211d565b610913919061214c565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610968908590610d5f565b50505050565b60006001600160e01b0319821663ec21896d60e01b148061043557506301ffc9a760e01b6001600160e01b0319831614610435565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b5050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610a5857610a5383610e31565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610ab2575060408051601f3d908101601f19168201909252610aaf9181019061211d565b60015b610b155760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610483565b60008051602061226f8339815191528114610b845760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610483565b50610a53838383610ecd565b600054610100900460ff16610bfb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610483565b565b60e08101518051602082015160409092015160009283928392909190610c2283610ef2565b9650610c2f905082610f81565b9550610c3c905081610f81565b96989597505050505050565b610c50611320565b6001600160a01b03861681526020810185905284612710610c7561ffff861683612164565b610c7f9190612183565b608083018190528111610c96576080820152610d32565b6080820151610ca590826121a5565b9050612710610cb861ffff851683612164565b610cc29190612183565b60a083018190528111610cd95760a0820152610d32565b60a0820151610ce890826121a5565b9050612710610cfb61ffff871683612164565b610d059190612183565b604083018190528111610d1c576040820152610d32565b6040820151610d2b90826121a5565b6060830152505b95945050505050565b610d43611320565b6001600160a01b03909216825260208201819052606082015290565b6000610db4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110069092919063ffffffff16565b805190915015610a535780806020019051810190610dd291906121bc565b610a535760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610483565b6001600160a01b0381163b610e9e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610483565b60008051602061226f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610ed68361101f565b600082511180610ee35750805b15610a5357610968838361105f565b805160009081907f01be24860d04cdcdba8c98f1ff62f6e70c7c8a24ee18bf599bc60267cc0f8c686001600160e01b0319821662df124360e11b14610f5e5760405163dc5b665760e01b81526001600160e01b0319808416600483015282166024820152604401610483565b8460200151806020019051810190610f7691906121e9565b935093505050915091565b805160009081907f3ddbcd09531601ddaf61ca39b7005ce8f3825ea1267f0feb9d416e868dec8eba6001600160e01b03198216633ddbcd0960e01b14610fee5760405163bdf170b760e01b81526001600160e01b0319808416600483015282166024820152604401610483565b8460200151806020019051810190610f769190612215565b6060611015848460008561114a565b90505b9392505050565b61102881610e31565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6110c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610483565b600080846001600160a01b0316846040516110e2919061223f565b600060405180830381855af49150503d806000811461111d576040519150601f19603f3d011682016040523d82523d6000602084013e611122565b606091505b5091509150610d32828260405180606001604052806027815260200161228f6027913961127d565b6060824710156111ab5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610483565b6001600160a01b0385163b6112025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610483565b600080866001600160a01b0316858760405161121e919061223f565b60006040518083038185875af1925050503d806000811461125b576040519150601f19603f3d011682016040523d82523d6000602084013e611260565b606091505b509150915061127082828661127d565b925050505b949350505050565b6060831561128c575081611018565b82511561129c5782518084602001fd5b8160405162461bcd60e51b8152600401610483919061225b565b6040518060600160405280606081526020016112fd60408051608081019091528060008152602001600081526020016000815260200160006001600160a01b031681525090565b815260408051606081018252600080825260208281018290529282015291015290565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461052057600080fd5b60008060006060848603121561138957600080fd5b83359250602084013561139b8161135f565b929592945050506040919091013590565b600781106113ca57634e487b7160e01b600052602160045260246000fd5b9052565b6113d98282516113ac565b60208181015190830152604080820151908301526060908101516001600160a01b0316910152565b61140c8282516113ac565b602081810151908301526040908101516001600160a01b0316910152565b6020808252825161010083830152805161012084018190526000929182019083906101408601905b808310156114b45783516114678382516113ac565b808601511515838701526040808201516001600160a01b0390811691850191909152606080830151908501526080918201511690830152928401926001929092019160a090910190611452565b5092860151926114c760408701856113ce565b604087015193506114db60c0870185611401565b9695505050505050565b6001600160e01b03198116811461052057600080fd5b60006020828403121561150d57600080fd5b8135611018816114e5565b60006020828403121561152a57600080fd5b81356110188161135f565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561156d5761156d611535565b60405290565b604051608081016001600160401b038111828210171561156d5761156d611535565b60405161010081016001600160401b038111828210171561156d5761156d611535565b60405161012081016001600160401b038111828210171561156d5761156d611535565b604051606081016001600160401b038111828210171561156d5761156d611535565b60405160a081016001600160401b038111828210171561156d5761156d611535565b604051601f8201601f191681016001600160401b038111828210171561164757611647611535565b604052919050565b60006001600160401b0382111561166857611668611535565b50601f01601f191660200190565b6000806040838503121561168957600080fd5b82356116948161135f565b915060208301356001600160401b038111156116af57600080fd5b8301601f810185136116c057600080fd5b80356116d36116ce8261164f565b61161f565b8181528660208385010111156116e857600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006040828403121561171a57600080fd5b50919050565b805161172b8161135f565b919050565b60006020828403121561174257600080fd5b81516110188161135f565b60006001600160401b0382111561176657611766611535565b5060051b60200190565b60005b8381101561178b578181015183820152602001611773565b838111156109685750506000910152565b6000604082840312156117ae57600080fd5b6117b661154b565b905081516117c3816114e5565b815260208201516001600160401b038111156117de57600080fd5b8201601f810184136117ef57600080fd5b80516117fd6116ce8261164f565b81815285602083850101111561181257600080fd5b611823826020830160208601611770565b602084015250909392505050565b600082601f83011261184257600080fd5b815160206118526116ce8361174d565b82815260059290921b8401810191818101908684111561187157600080fd5b8286015b848110156118ef5780516001600160401b03808211156118955760008081fd5b908801906040828b03601f19018113156118af5760008081fd5b6118b761154b565b87840151838111156118c95760008081fd5b6118d78d8a8388010161179c565b82525092015186830152508352918301918301611875565b509695505050505050565b805163ffffffff8116811461172b57600080fd5b600081830360a081121561192157600080fd5b611929611573565b915082516001600160401b038082111561194257600080fd5b61194e8683870161179c565b8452602085015191508082111561196457600080fd5b6119708683870161179c565b6020850152604085015191508082111561198957600080fd5b506119968582860161179c565b6040840152506040605f19820112156119ae57600080fd5b506119b761154b565b60608301516119c58161135f565b80825250608083015160208201528060608301525092915050565b6000602082840312156119f257600080fd5b81516001600160401b0380821115611a0957600080fd5b908301906101008286031215611a1e57600080fd5b611a26611595565b825182811115611a3557600080fd5b611a4187828601611831565b825250602083015160208201526040830151604082015260608301516060820152611a6e60808401611720565b6080820152611a7f60a084016118fa565b60a0820152611a9060c084016118fa565b60c082015260e083015182811115611aa757600080fd5b611ab38782860161190e565b60e08301525095945050505050565b8051801515811461172b57600080fd5b600060208284031215611ae457600080fd5b81516001600160401b0380821115611afb57600080fd5b908301906101208286031215611b1057600080fd5b611b186115b8565b825182811115611b2757600080fd5b611b3387828601611831565b825250611b4260208401611720565b6020820152611b5360408401611720565b6040820152611b64606084016118fa565b6060820152611b75608084016118fa565b6080820152611b8660a08401611720565b60a0820152611b9760c08401611ac2565b60c0820152611ba860e08401611ac2565b60e08201526101009150611bbd828401611ac2565b91810191909152949350505050565b60008151808452611be4816020860160208601611770565b601f01601f19169290920160200192915050565b63ffffffff60e01b815116825260006020820151604060208501526112756040850182611bcc565b600082825180855260208086019550808260051b84010181860160005b84811015611c8157601f19868403018952815160408151818652611c6382870182611bf8565b92870151958701959095525098840198925090830190600101611c3d565b5090979650505050505050565b6000815160a08452611ca360a0850182611bf8565b905060208301518482036020860152611cbc8282611bf8565b91505060408301518482036040860152611cd68282611bf8565b60609485015180516001600160a01b031695870195909552602090940151608090950194909452509092915050565b60006101008251818552611d1b82860182611c20565b91505060208301516020850152604083015160408501526060830151606085015260018060a01b03608084015116608085015263ffffffff60a08401511660a085015260c0830151611d7560c086018263ffffffff169052565b5060e083015184820360e0860152610d328282611c8e565b600061010080835285516101208083860152611dad610220860183611c20565b91506020880151611dc8828701826001600160a01b03169052565b505060408701516001600160a01b03908116610140860152606088015163ffffffff90811661016087015260808901511661018086015260a0880151166101a085015260c087015115156101c085015260e087015115156101e085015290860151801515610200850152838203602085015290611e458187611d05565b92505050611275604083018480516001600160a01b031682526020808201519083015260408082015190830152606080820151908301526080808201519083015260a090810151910152565b80516007811061172b57600080fd5b600060808284031215611eb257600080fd5b611eba611573565b9050611ec582611e91565b815260208201516020820152604082015160408201526060820151611ee98161135f565b606082015292915050565b600060608284031215611f0657600080fd5b611f0e6115db565b9050611f1982611e91565b8152602082015160208201526040820151611f338161135f565b604082015292915050565b60006020808385031215611f5157600080fd5b82516001600160401b0380821115611f6857600080fd5b908401906101008287031215611f7d57600080fd5b611f856115db565b825182811115611f9457600080fd5b83019150601f82018713611fa757600080fd5b8151611fb56116ce8261174d565b81815260a0918202840186019186820191908a841115611fd457600080fd5b948701945b838610156120525780868c031215611ff15760008081fd5b611ff96115fd565b61200287611e91565b815261200f898801611ac2565b898201526040808801516120228161135f565b908201526060878101519082015260808088015161203f8161135f565b9082015283529485019491870191611fd9565b8185526120618b898901611ea0565b888601526120718b828901611ef4565b604086015250929998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561212f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561215f5761215f612136565b500190565b600081600019048311821515161561217e5761217e612136565b500290565b6000826121a057634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156121b7576121b7612136565b500390565b6000602082840312156121ce57600080fd5b61101882611ac2565b805161ffff8116811461172b57600080fd5b600080604083850312156121fc57600080fd5b8251915061220c602084016121d7565b90509250929050565b6000806040838503121561222857600080fd5b612231836121d7565b915061220c602084016121d7565b60008251612251818460208701611770565b9190910192915050565b6020815260006110186020830184611bcc56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025405258e5263bd3c721e352313275ae223ddfb2165e5a850900bf1848aa857264736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
