{
  "_format": "hh-sol-artifact-1",
  "contractName": "Metahub",
  "sourceName": "contracts/metahub/core/Metahub.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CallerIsNotERC20RewardDistributor",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CallerIsNotListingManager",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CallerIsNotRentingManager",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CallerIsNotWarperManager",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "keyProvided",
          "type": "bytes4"
        }
      ],
      "name": "ContractDoesNotExist",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "keyProvided",
          "type": "bytes4"
        },
        {
          "internalType": "bytes4",
          "name": "keyRequired",
          "type": "bytes4"
        }
      ],
      "name": "ContractKeyMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "keyProvided",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "addressProvided",
          "type": "address"
        }
      ],
      "name": "ContractNotAuthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidContractEntityInterface",
      "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": "bytes4",
          "name": "contractKey",
          "type": "bytes4"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "ContractRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "enum IPaymentManager.EarningType",
          "name": "earningType",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "paymentToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "ProtocolEarned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldCollector",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newCollector",
          "type": "address"
        }
      ],
      "name": "ProtocolExternalFeesCollectorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "universeId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "enum IPaymentManager.EarningType",
          "name": "earningType",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "paymentToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "UniverseEarned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "enum IPaymentManager.EarningType",
          "name": "earningType",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "paymentToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "UserEarned",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "assetClass",
          "type": "bytes4"
        }
      ],
      "name": "assetClassController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "balance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balances",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct Accounts.Balance[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseTokenDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newProtocolExternalFeesCollector",
          "type": "address"
        }
      ],
      "name": "changeProtocolExternalFeesCollector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "class",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Assets.AssetId",
              "name": "id",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Assets.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        }
      ],
      "name": "depositAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "contractKey",
          "type": "bytes4"
        }
      ],
      "name": "getContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bytes4",
                      "name": "class",
                      "type": "bytes4"
                    },
                    {
                      "internalType": "bytes",
                      "name": "data",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Assets.AssetId",
                  "name": "id",
                  "type": "tuple"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Assets.Asset[]",
              "name": "assets",
              "type": "tuple[]"
            },
            {
              "internalType": "address",
              "name": "lister",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "beneficiary",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "maxLockPeriod",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "lockedTill",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "configurator",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "immediatePayout",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "paused",
              "type": "bool"
            }
          ],
          "internalType": "struct Listings.Listing",
          "name": "listing",
          "type": "tuple"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bytes4",
                      "name": "class",
                      "type": "bytes4"
                    },
                    {
                      "internalType": "bytes",
                      "name": "data",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Assets.AssetId",
                  "name": "id",
                  "type": "tuple"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Assets.Asset[]",
              "name": "warpedAssets",
              "type": "tuple[]"
            },
            {
              "internalType": "uint256",
              "name": "universeId",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "collectionId",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "listingId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "renter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "startTime",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "endTime",
              "type": "uint32"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bytes4",
                      "name": "strategyId",
                      "type": "bytes4"
                    },
                    {
                      "internalType": "bytes",
                      "name": "strategyData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct IListingTermsRegistry.ListingTerms",
                  "name": "listingTerms",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes4",
                      "name": "strategyId",
                      "type": "bytes4"
                    },
                    {
                      "internalType": "bytes",
                      "name": "strategyData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct ITaxTermsRegistry.TaxTerms",
                  "name": "universeTaxTerms",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes4",
                      "name": "strategyId",
                      "type": "bytes4"
                    },
                    {
                      "internalType": "bytes",
                      "name": "strategyData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct ITaxTermsRegistry.TaxTerms",
                  "name": "protocolTaxTerms",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "paymentToken",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "paymentTokenQuote",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ITokenQuote.PaymentTokenData",
                  "name": "paymentTokenData",
                  "type": "tuple"
                }
              ],
              "internalType": "struct Rentings.AgreementTerms",
              "name": "agreementTerms",
              "type": "tuple"
            }
          ],
          "internalType": "struct Rentings.Agreement",
          "name": "agreement",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "totalReward",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "listerRewardFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "renterRewardFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "universeRewardFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "protocolRewardFee",
              "type": "uint256"
            }
          ],
          "internalType": "struct ERC20RewardDistributionHelper.RentalExternalERC20RewardFees",
          "name": "rentalExternalERC20RewardFees",
          "type": "tuple"
        }
      ],
      "name": "handleExternalERC20Reward",
      "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": "uint256",
              "name": "listingId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "warper",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "renter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "rentalPeriod",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "listingTermsId",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct IListingTermsRegistry.ListingTerms",
              "name": "selectedConfiguratorListingTerms",
              "type": "tuple"
            }
          ],
          "internalType": "struct Rentings.Params",
          "name": "rentingParams",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "total",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "protocolFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "listerBaseFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "listerPremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "universeBaseFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "universePremium",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct IListingTermsRegistry.ListingTerms",
              "name": "listingTerms",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct ITaxTermsRegistry.TaxTerms",
              "name": "universeTaxTerms",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct ITaxTermsRegistry.TaxTerms",
              "name": "protocolTaxTerms",
              "type": "tuple"
            }
          ],
          "internalType": "struct Rentings.RentalFees",
          "name": "fees",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxPaymentAmount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "tokenQuote",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "tokenQuoteSignature",
          "type": "bytes"
        }
      ],
      "name": "handleRentalPayment",
      "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": "rentalFixedEarnings",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "paymentTokenQuote",
              "type": "uint256"
            }
          ],
          "internalType": "struct ITokenQuote.PaymentTokenData",
          "name": "paymentTokenData",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IACL",
              "name": "acl",
              "type": "address"
            },
            {
              "internalType": "contract IERC20Upgradeable",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "protocolExternalFeesCollector",
              "type": "address"
            },
            {
              "internalType": "contract IAssetClassRegistry",
              "name": "assetClassRegistry",
              "type": "address"
            }
          ],
          "internalType": "struct Metahub.MetahubInitParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "protocolBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolBalances",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct Accounts.Balance[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolExternalFeesCollector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "assetClass",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "original",
          "type": "address"
        }
      ],
      "name": "registerAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "contractKey",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "registerContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "supportedAssetCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "offset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "supportedAssets",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "components": [
            {
              "internalType": "contract IAssetController",
              "name": "controller",
              "type": "address"
            },
            {
              "internalType": "bytes4",
              "name": "assetClass",
              "type": "bytes4"
            },
            {
              "internalType": "contract IAssetVault",
              "name": "vault",
              "type": "address"
            }
          ],
          "internalType": "struct Assets.AssetConfig[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "universeId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "universeBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "universeId",
          "type": "uint256"
        }
      ],
      "name": "universeBalances",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct Accounts.Balance[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "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"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "class",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Assets.AssetId",
              "name": "id",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Assets.Asset",
          "name": "asset",
          "type": "tuple"
        }
      ],
      "name": "withdrawAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawProtocolFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "universeId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawUniverseFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051613eda62000120600039600081816109bc015281816109fc01528181610b2901528181610b690152610bf80152613eda6000f3fe60806040526004361061019c5760003560e01c80636e32d3d3116100ec578063b203bb991161008a578063c55dae6311610064578063c55dae63146104ae578063c7b01560146104cc578063e2b188c7146104ec578063e3dedd6b1461051957600080fd5b8063b203bb9914610440578063b8b81b5d14610460578063c242a4711461048057600080fd5b806382aa1c88116100c657806382aa1c88146103c457806397e47690146103eb578063a5c5ad111461040b578063a75ea55d1461042057600080fd5b80636e32d3d314610356578063729941351461037657806378a2c9cd146103a457600080fd5b80634b6561d11161015957806352d1902d1161013357806352d1902d146102ec578063553b0109146103015780635a22b88f1461031657806361b25b911461033657600080fd5b80634b6561d1146102795780634bd22a1b146102ab5780634f1ef286146102d957600080fd5b80630415cc15146101a157806320ffc53d146101c357806327e235e3146101e3578063344d175b146102195780633659cfe61461023957806347c6b45e14610259575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612184565b610539565b005b3480156101cf57600080fd5b506101c16101de3660046121d7565b610823565b3480156101ef57600080fd5b506102036101fe366004612210565b610904565b604051610210919061222d565b60405180910390f35b34801561022557600080fd5b506101c16102343660046121d7565b61092e565b34801561024557600080fd5b506101c1610254366004612210565b6109b2565b34801561026557600080fd5b506101c161027436600461228d565b610a91565b34801561028557600080fd5b50609a546001600160a01b03165b6040516001600160a01b039091168152602001610210565b3480156102b757600080fd5b506102cb6102c6366004612210565b610b12565b604051908152602001610210565b6101c16102e7366004612466565b610b1f565b3480156102f857600080fd5b506102cb610beb565b34801561030d57600080fd5b506102cb610c9e565b34801561032257600080fd5b506101c16103313660046124c7565b610caf565b34801561034257600080fd5b50610203610351366004612503565b610d76565b34801561036257600080fd5b5061029361037136600461251c565b610d90565b34801561038257600080fd5b50610396610391366004612539565b610d9d565b60405161021092919061255b565b3480156103b057600080fd5b506102cb6103bf36600461260b565b610e34565b3480156103d057600080fd5b506103d9610e53565b60405160ff9091168152602001610210565b3480156103f757600080fd5b506101c1610406366004612210565b610e5d565b34801561041757600080fd5b50610203610f33565b34801561042c57600080fd5b506101c161043b36600461228d565b610f3f565b34801561044c57600080fd5b506102cb61045b366004612630565b610ff7565b34801561046c57600080fd5b506101c161047b36600461264e565b611019565b34801561048c57600080fd5b506104a061049b3660046126fa565b6110af565b604051610210929190612906565b3480156104ba57600080fd5b506099546001600160a01b0316610293565b3480156104d857600080fd5b506101c16104e736600461293b565b6112d5565b3480156104f857600080fd5b5061050c610507366004612d0c565b6113ed565b6040516102109190612e3a565b34801561052557600080fd5b5061029361053436600461251c565b6114df565b600054610100900460ff16158080156105595750600054600160ff909116105b806105735750303b158015610573575060005460ff166001145b6105db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156105fe576000805461ff0019166101001790555b6106066114ea565b6106136020830183612210565b609880546001600160a01b0319166001600160a01b039290921691909117905560408051808201825290819061064e90850160208601612210565b6001600160a01b0316815260200161066c6060850160408601612210565b6001600160a01b039081169091528151609980546001600160a01b0319908116928416929092179055602090920151609a805490931691161790556106b76080830160608401612210565b609b80546001600160a01b0319166001600160a01b039283161790556098546040805163ec21896d60e01b8152905161074f93929092169163ec21896d916004808201926020929091908290030181865afa15801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e9190612e4d565b6098546001600160a01b0316611557565b6107d86107626080840160608501612210565b6001600160a01b031663ec21896d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c39190612e4d565b6107d36080850160608601612210565b611557565b801561081f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b61084c7fa9bb56dd0bf7501666e4d616edd892185cdc45d735a001a809bd3db50c9004b86115cb565b6001600160a01b0316336001600160a01b03161461087d5760405163ccad962160e01b815260040160405180910390fd5b604051635fbd140f60e01b8152609b60048201526001600160e01b0319831660248201526001600160a01b038216604482015273__$48805a21cd2d79ca776bf2c16e4893ad10$__90635fbd140f906064015b60006040518083038186803b1580156108e857600080fd5b505af41580156108fc573d6000803e3d6000fd5b505050505050565b6001600160a01b038116600090815260a360205260409020606090610928906115fe565b92915050565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561099057600080fd5b505afa1580156109a4573d6000803e3d6000fd5b5050505061081f8282611557565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109fa5760405162461bcd60e51b81526004016105d290612e6a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a43600080516020613e5e833981519152546001600160a01b031690565b6001600160a01b031614610a695760405162461bcd60e51b81526004016105d290612eb6565b610a72816116e3565b60408051600080825260208201909252610a8e91839190611759565b50565b33600090815260a360205260409081902090516334e3db7f60e21b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__9163d38f6dfc91610add9190879087908790600401612f02565b60006040518083038186803b158015610af557600080fd5b505af4158015610b09573d6000803e3d6000fd5b50505050505050565b6000610928609f836118c9565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b675760405162461bcd60e51b81526004016105d290612e6a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bb0600080516020613e5e833981519152546001600160a01b031690565b6001600160a01b031614610bd65760405162461bcd60e51b81526004016105d290612eb6565b610bdf826116e3565b61081f82826001611759565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c8b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016105d2565b50600080516020613e5e83398151915290565b6000610caa609b6118df565b905090565b610cd87fd48e4fbd6adafe3cfb07fbd2d23fc8730687d90505f487670937f44787ab385a6115cb565b6001600160a01b0316336001600160a01b031614610d09576040516331683c7f60e11b815260040160405180910390fd5b60405163221efb0360e11b815273__$48805a21cd2d79ca776bf2c16e4893ad10$__9063443df60690610d4390609b908590600401613012565b60006040518083038186803b158015610d5b57600080fd5b505af4158015610d6f573d6000803e3d6000fd5b5050505050565b600081815260a260205260409020606090610928906115fe565b6000610928609b836118ed565b6040516376946fcf60e01b8152609b60048201526024810183905260448101829052606090819073__$48805a21cd2d79ca776bf2c16e4893ad10$__906376946fcf90606401600060405180830381865af4158015610e00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e2891908101906130da565b915091505b9250929050565b600082815260a260205260408120610e4c90836118c9565b9392505050565b6000610caa61196d565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610ebf57600080fd5b505afa158015610ed3573d6000803e3d6000fd5b5050609a80546001600160a01b031981166001600160a01b038681169182179093556040805193909216808452602084019190915293507f09d77888d1122ffb279fb3d7805b2e51f877769941c981c9583b9dde616f7efd925001610816565b6060610caa609f6115fe565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610fa157600080fd5b505afa158015610fb5573d6000803e3d6000fd5b50506040516334e3db7f60e21b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__925063d38f6dfc9150610add90609f90879087908790600401612f02565b6001600160a01b038216600090815260a360205260408120610e4c90836118c9565b6110427fd48e4fbd6adafe3cfb07fbd2d23fc8730687d90505f487670937f44787ab385a6115cb565b6001600160a01b0316336001600160a01b031614611073576040516331683c7f60e11b815260040160405180910390fd5b604051631daa22cf60e11b815273__$48805a21cd2d79ca776bf2c16e4893ad10$__90633b54459e906108d090609b9086908690600401613194565b6110b7612060565b60408051808201909152600080825260208201526110f47f9b4d0cb4e76b932bf6c979cd152d23fb4da2bb167c72cceed92f670a5328c4c36115cb565b6001600160a01b0316336001600160a01b03161461112557604051630fd6440760e01b815260040160405180910390fd5b61112d6120cf565b6099546001600160a01b031661114960a08d0160808e01612210565b6001600160a01b031614611205576111807f5e694b91d38e1170456b92da3190b84658a79619900abc1cb4332fd62ab25ee46115cb565b6001600160a01b031663ce9adde38c8c8a8a8a8a6040518763ffffffff1660e01b81526004016111b59695949392919061326e565b6000604051808303816000875af11580156111d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111fc9190810190613455565b92509050611237565b61120e8a61355c565b6099546001600160a01b03168352905061122661196d565b61123190600a613721565b60208301525b60405163f83565c160e01b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__9063f83565c19061127790609f908f9086908f908f9060040161380b565b600060405180830381865af4158015611294573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112bc919081019061399b565b92506112c7836119db565b509850989650505050505050565b836112ff7f80e923a5a548bf8cd1c0d5679e7fb52a28d9fd42e9642a412b581817718d9aa46115cb565b6001600160a01b0316637dc330dc82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050600086815260a260205260409081902090516334e3db7f60e21b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__925063d38f6dfc916113b691889088908890600401612f02565b60006040518083038186803b1580156113ce57600080fd5b505af41580156113e2573d6000803e3d6000fd5b505050505050505050565b6113f5612060565b61141e7fc812c4753531186b178644ec70482dbb7a11384b640929d30f5ed326dcc237bf6115cb565b6001600160a01b0316336001600160a01b03161461144f5760405163348da9e760e01b815260040160405180910390fd5b6040516320d3d29960e01b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__906320d3d2999061148f90609f908890889088903390600401613c3a565b600060405180830381865af41580156114ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114d4919081019061399b565b9050610e4c816119db565b6000610928826115cb565b600054610100900460ff166115555760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105d2565b565b6115618282611ba0565b6001600160e01b0319821660008181526097602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f829f418d36673ca2fd64b53bef8ccf5524c4e01d13d292ddb11a4dac74ab22ea9101610816565b6000816115d781611cd3565b50506001600160e01b0319166000908152609760205260409020546001600160a01b031690565b6060600061160b83611d1f565b90506000816001600160401b03811115611627576116276122cf565b60405190808252806020026020018201604052801561166c57816020015b60408051808201909152600080825260208201528152602001906001900390816116455790505b50905060005b828110156116db576000806116878784611d2a565b915091506040518060400160405280836001600160a01b03168152602001828152508484815181106116bb576116bb613d65565b6020026020010181905250505080806116d390613d7b565b915050611672565b509392505050565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561174557600080fd5b505afa158015610d6f573d6000803e3d6000fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156117915761178c83611d46565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156117eb575060408051601f3d908101601f191682019092526117e891810190613d94565b60015b61184e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016105d2565b600080516020613e5e83398151915281146118bd5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016105d2565b5061178c838383611de2565b6000806118d68484611e0d565b95945050505050565b600061092882600101611e25565b8154604051630b42144760e41b81526001600160e01b0319831660048201526000916001600160a01b03169063b4214470906024016040805180830381865afa15801561193e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119629190613dad565b602001519392505050565b6099546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156119b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caa9190613dee565b60005b815151811015611a9f57600082600001518281518110611a0057611a00613d65565b602002602001015190508060600151600003611a1c5750611a8d565b80608001516001600160a01b031681600001516006811115611a4057611a406127cc565b82604001516001600160a01b03167fbf41aad4c3074058a613f4e88cea850e86e57d902b608bb02fb715b64929a40f8460600151604051611a8391815260200190565b60405180910390a4505b80611a9781613d7b565b9150506119de565b5060208101516040015115611b22576020810151606081015190516001600160a01b03909116906006811115611ad757611ad76127cc565b8260200151602001517fba84758cdc92f6209ddb58b123ab7b0a05fcc33f85d5c4af3c6f4639545829c4846020015160400151604051611b1991815260200190565b60405180910390a45b60408101516020015115610a8e578060400151604001516001600160a01b03168160400151600001516006811115611b5c57611b5c6127cc565b7f8706acb6136091b8d5eb6f99d134c8bfd3f2cce3ac941753fd5be2757f165c63836040015160200151604051611b9591815260200190565b60405180910390a350565b6040516301ffc9a760e01b815263ec21896d60e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0f9190613e11565b611c2c5760405163324ce8f560e01b815260040160405180910390fd5b6000816001600160a01b031663ec21896d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c909190612e4d565b90506001600160e01b03198381169082161461178c57604051633f7810d760e21b81526001600160e01b03198085166004830152821660248201526044016105d2565b6001600160e01b031981166000908152609760205260409020546001600160a01b0316610a8e576040516303d5484160e11b81526001600160e01b0319821660048201526024016105d2565b600061092882611e2f565b6000808080611d398686611e3a565b9097909650945050505050565b6001600160a01b0381163b611db35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016105d2565b600080516020613e5e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611deb83611e65565b600082511180611df85750805b1561178c57611e078383611ea5565b50505050565b6000808080611d39866001600160a01b038716611f90565b6000610928825490565b600061092882611e25565b60008080611e488585611fd2565b600081815260029690960160205260409095205494959350505050565b611e6e81611d46565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611f0d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016105d2565b600080846001600160a01b031684604051611f289190613e2e565b600060405180830381855af49150503d8060008114611f63576040519150601f19603f3d011682016040523d82523d6000602084013e611f68565b606091505b50915091506118d68282604051806060016040528060278152602001613e7e60279139611fde565b6000818152600283016020526040812054819080611fbf57611fb28585612017565b925060009150610e2d9050565b600192509050610e2d565b509250929050565b6000610e4c8383612036565b60608315611fed575081610e4c565b825115611ffd5782518084602001fd5b8160405162461bcd60e51b81526004016105d29190613e4a565b6000610e4c838360008181526001830160205260408120541515610e4c565b600082600001828154811061204d5761204d613d65565b9060005260206000200154905092915050565b6040518060600160405280606081526020016120a760408051608081019091528060008152602001600081526020016000815260200160006001600160a01b031681525090565b815260408051606081018252600080825260208281018290529282015291015290565b905290565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200161212c604051806040016040528060006001600160e01b0319168152602001606081525090565b8152602001612158604051806040016040528060006001600160e01b0319168152602001606081525090565b81526020016120ca604051806040016040528060006001600160e01b0319168152602001606081525090565b60006080828403121561219657600080fd5b50919050565b6001600160e01b031981168114610a8e57600080fd5b6001600160a01b0381168114610a8e57600080fd5b80356121d2816121b2565b919050565b600080604083850312156121ea57600080fd5b82356121f58161219c565b91506020830135612205816121b2565b809150509250929050565b60006020828403121561222257600080fd5b8135610e4c816121b2565b602080825282518282018190526000919060409081850190868401855b828110156122805761227084835180516001600160a01b03168252602090810151910152565b928401929085019060010161224a565b5091979650505050505050565b6000806000606084860312156122a257600080fd5b83356122ad816121b2565b92506020840135915060408401356122c4816121b2565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612307576123076122cf565b60405290565b604051608081016001600160401b0381118282101715612307576123076122cf565b60405161010081016001600160401b0381118282101715612307576123076122cf565b60405161012081016001600160401b0381118282101715612307576123076122cf565b604051606081016001600160401b0381118282101715612307576123076122cf565b60405160a081016001600160401b0381118282101715612307576123076122cf565b604051601f8201601f191681016001600160401b03811182821017156123e1576123e16122cf565b604052919050565b60006001600160401b03821115612402576124026122cf565b50601f01601f191660200190565b600082601f83011261242157600080fd5b813561243461242f826123e9565b6123b9565b81815284602083860101111561244957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561247957600080fd5b8235612484816121b2565b915060208301356001600160401b0381111561249f57600080fd5b6124ab85828601612410565b9150509250929050565b60006040828403121561219657600080fd5b6000602082840312156124d957600080fd5b81356001600160401b038111156124ef57600080fd5b6124fb848285016124b5565b949350505050565b60006020828403121561251557600080fd5b5035919050565b60006020828403121561252e57600080fd5b8135610e4c8161219c565b6000806040838503121561254c57600080fd5b50508035926020909101359150565b6040808252835182820181905260009190606090818501906020808901865b8381101561259f5781516001600160a01b03168552938201939082019060010161257a565b5050868303818801528751808452888201938201925060005b818110156125fc57845180516001600160a01b039081168652848201516001600160e01b0319168587015290880151168785015293820193928501926001016125b8565b50919998505050505050505050565b6000806040838503121561261e57600080fd5b823591506020830135612205816121b2565b6000806040838503121561264357600080fd5b82356121f5816121b2565b6000806040838503121561266157600080fd5b82356001600160401b0381111561267757600080fd5b612683858286016124b5565b9250506020830135612205816121b2565b600060e0828403121561219657600080fd5b6000610120828403121561219657600080fd5b60008083601f8401126126cb57600080fd5b5081356001600160401b038111156126e257600080fd5b602083019150836020828501011115610e2d57600080fd5b60008060008060008060008060c0898b03121561271657600080fd5b88356001600160401b038082111561272d57600080fd5b6127398c838d01612694565b995060208b013591508082111561274f57600080fd5b61275b8c838d016126a6565b985061276960408c016121c7565b975060608b0135965060808b013591508082111561278657600080fd5b6127928c838d016126b9565b909650945060a08b01359150808211156127ab57600080fd5b506127b88b828c016126b9565b999c989b5096995094979396929594505050565b634e487b7160e01b600052602160045260246000fd5b6007811061280057634e487b7160e01b600052602160045260246000fd5b9052565b61280f8282516127e2565b60208181015190830152604080820151908301526060908101516001600160a01b0316910152565b6128428282516127e2565b602081810151908301526040908101516001600160a01b0316910152565b80516101008084528151908401819052600091610120850191602091820190845b818110156128df5782516128968682516127e2565b808501511515868601526040808201516001600160a01b039081169188019190915260608083015190880152608091820151169086015260a09094019391830191600101612881565b505050808401516128f282870182612804565b505060408301516116db60a0860182612837565b6060815260006129196060830185612860565b9050610e4c602083018480516001600160a01b03168252602090810151910152565b6000806000806080858703121561295157600080fd5b843593506020850135612963816121b2565b925060408501359150606085013561297a816121b2565b939692955090935050565b60006001600160401b0382111561299e5761299e6122cf565b5060051b60200190565b6000604082840312156129ba57600080fd5b6129c26122e5565b905081356129cf8161219c565b815260208201356001600160401b038111156129ea57600080fd5b6129f684828501612410565b60208301525092915050565b600082601f830112612a1357600080fd5b81356020612a2361242f83612985565b82815260059290921b84018101918181019086841115612a4257600080fd5b8286015b84811015612ac05780356001600160401b0380821115612a665760008081fd5b908801906040828b03601f1901811315612a805760008081fd5b612a886122e5565b8784013583811115612a9a5760008081fd5b612aa88d8a838801016129a8565b82525092013586830152508352918301918301612a46565b509695505050505050565b803563ffffffff811681146121d257600080fd5b8015158114610a8e57600080fd5b80356121d281612adf565b600081830360a0811215612b0b57600080fd5b612b1361230d565b915082356001600160401b0380821115612b2c57600080fd5b612b38868387016129a8565b84526020850135915080821115612b4e57600080fd5b612b5a868387016129a8565b60208501526040850135915080821115612b7357600080fd5b50612b80858286016129a8565b6040840152506040605f1982011215612b9857600080fd5b50612ba16122e5565b6060830135612baf816121b2565b80825250608083013560208201528060608301525092915050565b60006101008284031215612bdd57600080fd5b612be561232f565b905081356001600160401b0380821115612bfe57600080fd5b612c0a85838601612a02565b8352602084013560208401526040840135604084015260608401356060840152612c36608085016121c7565b6080840152612c4760a08501612acb565b60a0840152612c5860c08501612acb565b60c084015260e0840135915080821115612c7157600080fd5b50612c7e84828501612af8565b60e08301525092915050565b600060c08284031215612c9c57600080fd5b60405160c081018181106001600160401b0382111715612cbe57612cbe6122cf565b6040529050808235612ccf816121b2565b808252506020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b6000806000610100808587031215612d2357600080fd5b84356001600160401b0380821115612d3a57600080fd5b908601906101208289031215612d4f57600080fd5b612d57612352565b823582811115612d6657600080fd5b612d728a828601612a02565b825250612d81602084016121c7565b6020820152612d92604084016121c7565b6040820152612da360608401612acb565b6060820152612db460808401612acb565b6080820152612dc560a084016121c7565b60a0820152612dd660c08401612aed565b60c0820152612de760e08401612aed565b60e0820152612df7848401612aed565b84820152809650506020870135925080831115612e1357600080fd5b5050612e2186828701612bca565b925050612e318560408601612c8a565b90509250925092565b602081526000610e4c6020830184612860565b600060208284031215612e5f57600080fd5b8151610e4c8161219c565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b9384526001600160a01b039283166020850152604084019190915216606082015260800190565b60008235603e19833603018112612f3f57600080fd5b90910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008135612f7e8161219c565b6001600160e01b0319168352602082013536839003601e19018112612fa257600080fd5b820180356001600160401b03811115612fba57600080fd5b803603841315612fc957600080fd5b604060208601526118d6604086018260208501612f48565b6000612fed8283612f29565b60408452612ffe6040850182612f71565b602093840135949093019390935250919050565b8281526040602082015260006124fb6040830184612fe1565b600082601f83011261303c57600080fd5b8151602061304c61242f83612985565b8281526060928302850182019282820191908785111561306b57600080fd5b8387015b858110156130cd5781818a0312156130875760008081fd5b61308f612375565b815161309a816121b2565b8152818601516130a98161219c565b818701526040828101516130bc816121b2565b90820152845292840192810161306f565b5090979650505050505050565b600080604083850312156130ed57600080fd5b82516001600160401b038082111561310457600080fd5b818501915085601f83011261311857600080fd5b8151602061312861242f83612985565b82815260059290921b8401810191818101908984111561314757600080fd5b948201945b8386101561316e57855161315f816121b2565b8252948201949082019061314c565b9188015191965090935050508082111561318757600080fd5b506124ab8582860161302b565b8381526060602082015260006131ad6060830185612fe1565b905060018060a01b0383166040830152949350505050565b6000610120823584526020830135602085015260408301356040850152606083013560608501526080830135608085015260a083013560a085015261320d60c0840184612f29565b8160c086015261321f82860182612f71565b91505061322f60e0840184612f29565b84820360e08601526132418282612f71565b91505061010061325381850185612f29565b858303828701526132648382612f71565b9695505050505050565b608081528635608082015260006020880135613289816121b2565b6001600160a01b0390811660a08401526040890135906132a8826121b2565b1660c08301526132ba60608901612acb565b63ffffffff1660e08301526132d1608089016121c7565b6001600160a01b031661010083015260a08801356101208301526132f860c0890189612f29565b60e061014084015261330e610160840182612f71565b9050828103602084015261332281896131c5565b90508281036040840152613337818789612f48565b9050828103606084015261334c818587612f48565b9998505050505050505050565b60005b8381101561337457818101518382015260200161335c565b83811115611e075750506000910152565b60006040828403121561339757600080fd5b61339f6122e5565b905081516133ac8161219c565b815260208201516001600160401b038111156133c757600080fd5b8201601f810184136133d857600080fd5b80516133e661242f826123e9565b8181528560208385010111156133fb57600080fd5b61340c826020830160208601613359565b602084015250909392505050565b60006040828403121561342c57600080fd5b6134346122e5565b90508151613441816121b2565b808252506020820151602082015292915050565b6000806060838503121561346857600080fd5b82516001600160401b038082111561347f57600080fd5b90840190610120828703121561349457600080fd5b61349c612352565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c0830151828111156134e457600080fd5b6134f088828601613385565b60c08301525060e08301518281111561350857600080fd5b61351488828601613385565b60e083015250610100808401518381111561352e57600080fd5b61353a89828701613385565b828401525050809450505050613553846020850161341a565b90509250929050565b6000610120823603121561356f57600080fd5b613577612352565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c08301356001600160401b03808211156135c757600080fd5b6135d3368387016129a8565b60c084015260e08501359150808211156135ec57600080fd5b6135f8368387016129a8565b60e08401526101009150818501358181111561361357600080fd5b61361f368288016129a8565b8385015250505080915050919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611fca5781600019048211156136665761366661362f565b8085161561367357918102915b93841c939080029061364a565b60008261368f57506001610928565b8161369c57506000610928565b81600181146136b257600281146136bc576136d8565b6001915050610928565b60ff8411156136cd576136cd61362f565b50506001821b610928565b5060208310610133831016604e8410600b84101617156136fb575081810a610928565b6137058383613645565b80600019048211156137195761371961362f565b029392505050565b6000610e4c60ff841683613680565b60008151808452613748816020860160208601613359565b601f01601f19169290920160200192915050565b63ffffffff60e01b815116825260006020820151604060208501526124fb6040850182613730565b6000610120825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c08601526137d68286018261375c565b91505060e083015184820360e08601526137f0828261375c565b9150506101008084015185830382870152613264838261375c565b85815260a06020820152843560a08201526000602086013561382c816121b2565b6001600160a01b0390811660c084015260408701359061384b826121b2565b1660e083015261385d60608701612acb565b63ffffffff16610100830152613875608087016121c7565b6001600160a01b031661012083015260a086013561014083015261389c60c0870187612f29565b60e06101608401526138b2610180840182612f71565b905082810360408401526138c68187613784565b9150506138de60608301856001600160a01b03169052565b8260808301529695505050505050565b8051600781106121d257600080fd5b60006080828403121561390f57600080fd5b61391761230d565b9050613922826138ee565b815260208201516020820152604082015160408201526060820151613946816121b2565b606082015292915050565b60006060828403121561396357600080fd5b61396b612375565b9050613976826138ee565b8152602082015160208201526040820151613990816121b2565b604082015292915050565b600060208083850312156139ae57600080fd5b82516001600160401b03808211156139c557600080fd5b9084019061010082870312156139da57600080fd5b6139e2612375565b8251828111156139f157600080fd5b83019150601f82018713613a0457600080fd5b8151613a1261242f82612985565b81815260a0918202840186019186820191908a841115613a3157600080fd5b948701945b83861015613ab15780868c031215613a4e5760008081fd5b613a56612397565b613a5f876138ee565b815288870151613a6e81612adf565b818a0152604087810151613a81816121b2565b9082015260608781015190820152608080880151613a9e816121b2565b9082015283529485019491870191613a36565b818552613ac08b8989016138fd565b88860152613ad08b828901613951565b604086015250929998505050505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015612280578284038952815160408151818752613b248288018261375c565b92880151968801969096525098850198935090840190600101613b02565b6000815160a08452613b5760a085018261375c565b905060208301518482036020860152613b70828261375c565b91505060408301518482036040860152613b8a828261375c565b91505060608301516116db606086018280516001600160a01b03168252602090810151910152565b60006101008251818552613bc882860182613ae4565b91505060208301516020850152604083015160408501526060830151606085015260018060a01b03608084015116608085015263ffffffff60a08401511660a085015260c0830151613c2260c086018263ffffffff169052565b5060e083015184820360e08601526118d68282613b42565b600061014087835280602084015286516101208083860152613c60610260860183613ae4565b925060208901519150613c7f6101608601836001600160a01b03169052565b6040898101516001600160a01b0390811661018088015260608b015163ffffffff9081166101a089015260808c0151166101c088015260a08b0151166101e087015260c08a0151151561020087015260e08a015115156102208701526101008a0151801515610240880152868503918701919091529150613d008389613bb2565b9350613d4a606086018880516001600160a01b031682526020808201519083015260408082015190830152606080820151908301526080808201519083015260a090810151910152565b6001600160a01b038616858201525050509695505050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201613d8d57613d8d61362f565b5060010190565b600060208284031215613da657600080fd5b5051919050565b600060408284031215613dbf57600080fd5b613dc76122e5565b8251613dd2816121b2565b81526020830151613de2816121b2565b60208201529392505050565b600060208284031215613e0057600080fd5b815160ff81168114610e4c57600080fd5b600060208284031215613e2357600080fd5b8151610e4c81612adf565b60008251613e40818460208701613359565b9190910192915050565b602081526000610e4c602083018461373056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200810897b5313dca59be37546b388eba6dc322d4f99fdc37b2f83be0398ad2b3864736f6c634300080d0033",
  "deployedBytecode": "0x60806040526004361061019c5760003560e01c80636e32d3d3116100ec578063b203bb991161008a578063c55dae6311610064578063c55dae63146104ae578063c7b01560146104cc578063e2b188c7146104ec578063e3dedd6b1461051957600080fd5b8063b203bb9914610440578063b8b81b5d14610460578063c242a4711461048057600080fd5b806382aa1c88116100c657806382aa1c88146103c457806397e47690146103eb578063a5c5ad111461040b578063a75ea55d1461042057600080fd5b80636e32d3d314610356578063729941351461037657806378a2c9cd146103a457600080fd5b80634b6561d11161015957806352d1902d1161013357806352d1902d146102ec578063553b0109146103015780635a22b88f1461031657806361b25b911461033657600080fd5b80634b6561d1146102795780634bd22a1b146102ab5780634f1ef286146102d957600080fd5b80630415cc15146101a157806320ffc53d146101c357806327e235e3146101e3578063344d175b146102195780633659cfe61461023957806347c6b45e14610259575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612184565b610539565b005b3480156101cf57600080fd5b506101c16101de3660046121d7565b610823565b3480156101ef57600080fd5b506102036101fe366004612210565b610904565b604051610210919061222d565b60405180910390f35b34801561022557600080fd5b506101c16102343660046121d7565b61092e565b34801561024557600080fd5b506101c1610254366004612210565b6109b2565b34801561026557600080fd5b506101c161027436600461228d565b610a91565b34801561028557600080fd5b50609a546001600160a01b03165b6040516001600160a01b039091168152602001610210565b3480156102b757600080fd5b506102cb6102c6366004612210565b610b12565b604051908152602001610210565b6101c16102e7366004612466565b610b1f565b3480156102f857600080fd5b506102cb610beb565b34801561030d57600080fd5b506102cb610c9e565b34801561032257600080fd5b506101c16103313660046124c7565b610caf565b34801561034257600080fd5b50610203610351366004612503565b610d76565b34801561036257600080fd5b5061029361037136600461251c565b610d90565b34801561038257600080fd5b50610396610391366004612539565b610d9d565b60405161021092919061255b565b3480156103b057600080fd5b506102cb6103bf36600461260b565b610e34565b3480156103d057600080fd5b506103d9610e53565b60405160ff9091168152602001610210565b3480156103f757600080fd5b506101c1610406366004612210565b610e5d565b34801561041757600080fd5b50610203610f33565b34801561042c57600080fd5b506101c161043b36600461228d565b610f3f565b34801561044c57600080fd5b506102cb61045b366004612630565b610ff7565b34801561046c57600080fd5b506101c161047b36600461264e565b611019565b34801561048c57600080fd5b506104a061049b3660046126fa565b6110af565b604051610210929190612906565b3480156104ba57600080fd5b506099546001600160a01b0316610293565b3480156104d857600080fd5b506101c16104e736600461293b565b6112d5565b3480156104f857600080fd5b5061050c610507366004612d0c565b6113ed565b6040516102109190612e3a565b34801561052557600080fd5b5061029361053436600461251c565b6114df565b600054610100900460ff16158080156105595750600054600160ff909116105b806105735750303b158015610573575060005460ff166001145b6105db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156105fe576000805461ff0019166101001790555b6106066114ea565b6106136020830183612210565b609880546001600160a01b0319166001600160a01b039290921691909117905560408051808201825290819061064e90850160208601612210565b6001600160a01b0316815260200161066c6060850160408601612210565b6001600160a01b039081169091528151609980546001600160a01b0319908116928416929092179055602090920151609a805490931691161790556106b76080830160608401612210565b609b80546001600160a01b0319166001600160a01b039283161790556098546040805163ec21896d60e01b8152905161074f93929092169163ec21896d916004808201926020929091908290030181865afa15801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e9190612e4d565b6098546001600160a01b0316611557565b6107d86107626080840160608501612210565b6001600160a01b031663ec21896d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c39190612e4d565b6107d36080850160608601612210565b611557565b801561081f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b61084c7fa9bb56dd0bf7501666e4d616edd892185cdc45d735a001a809bd3db50c9004b86115cb565b6001600160a01b0316336001600160a01b03161461087d5760405163ccad962160e01b815260040160405180910390fd5b604051635fbd140f60e01b8152609b60048201526001600160e01b0319831660248201526001600160a01b038216604482015273__$48805a21cd2d79ca776bf2c16e4893ad10$__90635fbd140f906064015b60006040518083038186803b1580156108e857600080fd5b505af41580156108fc573d6000803e3d6000fd5b505050505050565b6001600160a01b038116600090815260a360205260409020606090610928906115fe565b92915050565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561099057600080fd5b505afa1580156109a4573d6000803e3d6000fd5b5050505061081f8282611557565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109fa5760405162461bcd60e51b81526004016105d290612e6a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a43600080516020613e5e833981519152546001600160a01b031690565b6001600160a01b031614610a695760405162461bcd60e51b81526004016105d290612eb6565b610a72816116e3565b60408051600080825260208201909252610a8e91839190611759565b50565b33600090815260a360205260409081902090516334e3db7f60e21b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__9163d38f6dfc91610add9190879087908790600401612f02565b60006040518083038186803b158015610af557600080fd5b505af4158015610b09573d6000803e3d6000fd5b50505050505050565b6000610928609f836118c9565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b675760405162461bcd60e51b81526004016105d290612e6a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bb0600080516020613e5e833981519152546001600160a01b031690565b6001600160a01b031614610bd65760405162461bcd60e51b81526004016105d290612eb6565b610bdf826116e3565b61081f82826001611759565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c8b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016105d2565b50600080516020613e5e83398151915290565b6000610caa609b6118df565b905090565b610cd87fd48e4fbd6adafe3cfb07fbd2d23fc8730687d90505f487670937f44787ab385a6115cb565b6001600160a01b0316336001600160a01b031614610d09576040516331683c7f60e11b815260040160405180910390fd5b60405163221efb0360e11b815273__$48805a21cd2d79ca776bf2c16e4893ad10$__9063443df60690610d4390609b908590600401613012565b60006040518083038186803b158015610d5b57600080fd5b505af4158015610d6f573d6000803e3d6000fd5b5050505050565b600081815260a260205260409020606090610928906115fe565b6000610928609b836118ed565b6040516376946fcf60e01b8152609b60048201526024810183905260448101829052606090819073__$48805a21cd2d79ca776bf2c16e4893ad10$__906376946fcf90606401600060405180830381865af4158015610e00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e2891908101906130da565b915091505b9250929050565b600082815260a260205260408120610e4c90836118c9565b9392505050565b6000610caa61196d565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610ebf57600080fd5b505afa158015610ed3573d6000803e3d6000fd5b5050609a80546001600160a01b031981166001600160a01b038681169182179093556040805193909216808452602084019190915293507f09d77888d1122ffb279fb3d7805b2e51f877769941c981c9583b9dde616f7efd925001610816565b6060610caa609f6115fe565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610fa157600080fd5b505afa158015610fb5573d6000803e3d6000fd5b50506040516334e3db7f60e21b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__925063d38f6dfc9150610add90609f90879087908790600401612f02565b6001600160a01b038216600090815260a360205260408120610e4c90836118c9565b6110427fd48e4fbd6adafe3cfb07fbd2d23fc8730687d90505f487670937f44787ab385a6115cb565b6001600160a01b0316336001600160a01b031614611073576040516331683c7f60e11b815260040160405180910390fd5b604051631daa22cf60e11b815273__$48805a21cd2d79ca776bf2c16e4893ad10$__90633b54459e906108d090609b9086908690600401613194565b6110b7612060565b60408051808201909152600080825260208201526110f47f9b4d0cb4e76b932bf6c979cd152d23fb4da2bb167c72cceed92f670a5328c4c36115cb565b6001600160a01b0316336001600160a01b03161461112557604051630fd6440760e01b815260040160405180910390fd5b61112d6120cf565b6099546001600160a01b031661114960a08d0160808e01612210565b6001600160a01b031614611205576111807f5e694b91d38e1170456b92da3190b84658a79619900abc1cb4332fd62ab25ee46115cb565b6001600160a01b031663ce9adde38c8c8a8a8a8a6040518763ffffffff1660e01b81526004016111b59695949392919061326e565b6000604051808303816000875af11580156111d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111fc9190810190613455565b92509050611237565b61120e8a61355c565b6099546001600160a01b03168352905061122661196d565b61123190600a613721565b60208301525b60405163f83565c160e01b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__9063f83565c19061127790609f908f9086908f908f9060040161380b565b600060405180830381865af4158015611294573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112bc919081019061399b565b92506112c7836119db565b509850989650505050505050565b836112ff7f80e923a5a548bf8cd1c0d5679e7fb52a28d9fd42e9642a412b581817718d9aa46115cb565b6001600160a01b0316637dc330dc82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050600086815260a260205260409081902090516334e3db7f60e21b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__925063d38f6dfc916113b691889088908890600401612f02565b60006040518083038186803b1580156113ce57600080fd5b505af41580156113e2573d6000803e3d6000fd5b505050505050505050565b6113f5612060565b61141e7fc812c4753531186b178644ec70482dbb7a11384b640929d30f5ed326dcc237bf6115cb565b6001600160a01b0316336001600160a01b03161461144f5760405163348da9e760e01b815260040160405180910390fd5b6040516320d3d29960e01b815273__$f64f2ddc230f4d0d284eef95d6ec5afa1e$__906320d3d2999061148f90609f908890889088903390600401613c3a565b600060405180830381865af41580156114ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114d4919081019061399b565b9050610e4c816119db565b6000610928826115cb565b600054610100900460ff166115555760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105d2565b565b6115618282611ba0565b6001600160e01b0319821660008181526097602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f829f418d36673ca2fd64b53bef8ccf5524c4e01d13d292ddb11a4dac74ab22ea9101610816565b6000816115d781611cd3565b50506001600160e01b0319166000908152609760205260409020546001600160a01b031690565b6060600061160b83611d1f565b90506000816001600160401b03811115611627576116276122cf565b60405190808252806020026020018201604052801561166c57816020015b60408051808201909152600080825260208201528152602001906001900390816116455790505b50905060005b828110156116db576000806116878784611d2a565b915091506040518060400160405280836001600160a01b03168152602001828152508484815181106116bb576116bb613d65565b6020026020010181905250505080806116d390613d7b565b915050611672565b509392505050565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561174557600080fd5b505afa158015610d6f573d6000803e3d6000fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156117915761178c83611d46565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156117eb575060408051601f3d908101601f191682019092526117e891810190613d94565b60015b61184e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016105d2565b600080516020613e5e83398151915281146118bd5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016105d2565b5061178c838383611de2565b6000806118d68484611e0d565b95945050505050565b600061092882600101611e25565b8154604051630b42144760e41b81526001600160e01b0319831660048201526000916001600160a01b03169063b4214470906024016040805180830381865afa15801561193e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119629190613dad565b602001519392505050565b6099546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156119b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caa9190613dee565b60005b815151811015611a9f57600082600001518281518110611a0057611a00613d65565b602002602001015190508060600151600003611a1c5750611a8d565b80608001516001600160a01b031681600001516006811115611a4057611a406127cc565b82604001516001600160a01b03167fbf41aad4c3074058a613f4e88cea850e86e57d902b608bb02fb715b64929a40f8460600151604051611a8391815260200190565b60405180910390a4505b80611a9781613d7b565b9150506119de565b5060208101516040015115611b22576020810151606081015190516001600160a01b03909116906006811115611ad757611ad76127cc565b8260200151602001517fba84758cdc92f6209ddb58b123ab7b0a05fcc33f85d5c4af3c6f4639545829c4846020015160400151604051611b1991815260200190565b60405180910390a45b60408101516020015115610a8e578060400151604001516001600160a01b03168160400151600001516006811115611b5c57611b5c6127cc565b7f8706acb6136091b8d5eb6f99d134c8bfd3f2cce3ac941753fd5be2757f165c63836040015160200151604051611b9591815260200190565b60405180910390a350565b6040516301ffc9a760e01b815263ec21896d60e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0f9190613e11565b611c2c5760405163324ce8f560e01b815260040160405180910390fd5b6000816001600160a01b031663ec21896d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c909190612e4d565b90506001600160e01b03198381169082161461178c57604051633f7810d760e21b81526001600160e01b03198085166004830152821660248201526044016105d2565b6001600160e01b031981166000908152609760205260409020546001600160a01b0316610a8e576040516303d5484160e11b81526001600160e01b0319821660048201526024016105d2565b600061092882611e2f565b6000808080611d398686611e3a565b9097909650945050505050565b6001600160a01b0381163b611db35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016105d2565b600080516020613e5e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611deb83611e65565b600082511180611df85750805b1561178c57611e078383611ea5565b50505050565b6000808080611d39866001600160a01b038716611f90565b6000610928825490565b600061092882611e25565b60008080611e488585611fd2565b600081815260029690960160205260409095205494959350505050565b611e6e81611d46565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611f0d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016105d2565b600080846001600160a01b031684604051611f289190613e2e565b600060405180830381855af49150503d8060008114611f63576040519150601f19603f3d011682016040523d82523d6000602084013e611f68565b606091505b50915091506118d68282604051806060016040528060278152602001613e7e60279139611fde565b6000818152600283016020526040812054819080611fbf57611fb28585612017565b925060009150610e2d9050565b600192509050610e2d565b509250929050565b6000610e4c8383612036565b60608315611fed575081610e4c565b825115611ffd5782518084602001fd5b8160405162461bcd60e51b81526004016105d29190613e4a565b6000610e4c838360008181526001830160205260408120541515610e4c565b600082600001828154811061204d5761204d613d65565b9060005260206000200154905092915050565b6040518060600160405280606081526020016120a760408051608081019091528060008152602001600081526020016000815260200160006001600160a01b031681525090565b815260408051606081018252600080825260208281018290529282015291015290565b905290565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200161212c604051806040016040528060006001600160e01b0319168152602001606081525090565b8152602001612158604051806040016040528060006001600160e01b0319168152602001606081525090565b81526020016120ca604051806040016040528060006001600160e01b0319168152602001606081525090565b60006080828403121561219657600080fd5b50919050565b6001600160e01b031981168114610a8e57600080fd5b6001600160a01b0381168114610a8e57600080fd5b80356121d2816121b2565b919050565b600080604083850312156121ea57600080fd5b82356121f58161219c565b91506020830135612205816121b2565b809150509250929050565b60006020828403121561222257600080fd5b8135610e4c816121b2565b602080825282518282018190526000919060409081850190868401855b828110156122805761227084835180516001600160a01b03168252602090810151910152565b928401929085019060010161224a565b5091979650505050505050565b6000806000606084860312156122a257600080fd5b83356122ad816121b2565b92506020840135915060408401356122c4816121b2565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612307576123076122cf565b60405290565b604051608081016001600160401b0381118282101715612307576123076122cf565b60405161010081016001600160401b0381118282101715612307576123076122cf565b60405161012081016001600160401b0381118282101715612307576123076122cf565b604051606081016001600160401b0381118282101715612307576123076122cf565b60405160a081016001600160401b0381118282101715612307576123076122cf565b604051601f8201601f191681016001600160401b03811182821017156123e1576123e16122cf565b604052919050565b60006001600160401b03821115612402576124026122cf565b50601f01601f191660200190565b600082601f83011261242157600080fd5b813561243461242f826123e9565b6123b9565b81815284602083860101111561244957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561247957600080fd5b8235612484816121b2565b915060208301356001600160401b0381111561249f57600080fd5b6124ab85828601612410565b9150509250929050565b60006040828403121561219657600080fd5b6000602082840312156124d957600080fd5b81356001600160401b038111156124ef57600080fd5b6124fb848285016124b5565b949350505050565b60006020828403121561251557600080fd5b5035919050565b60006020828403121561252e57600080fd5b8135610e4c8161219c565b6000806040838503121561254c57600080fd5b50508035926020909101359150565b6040808252835182820181905260009190606090818501906020808901865b8381101561259f5781516001600160a01b03168552938201939082019060010161257a565b5050868303818801528751808452888201938201925060005b818110156125fc57845180516001600160a01b039081168652848201516001600160e01b0319168587015290880151168785015293820193928501926001016125b8565b50919998505050505050505050565b6000806040838503121561261e57600080fd5b823591506020830135612205816121b2565b6000806040838503121561264357600080fd5b82356121f5816121b2565b6000806040838503121561266157600080fd5b82356001600160401b0381111561267757600080fd5b612683858286016124b5565b9250506020830135612205816121b2565b600060e0828403121561219657600080fd5b6000610120828403121561219657600080fd5b60008083601f8401126126cb57600080fd5b5081356001600160401b038111156126e257600080fd5b602083019150836020828501011115610e2d57600080fd5b60008060008060008060008060c0898b03121561271657600080fd5b88356001600160401b038082111561272d57600080fd5b6127398c838d01612694565b995060208b013591508082111561274f57600080fd5b61275b8c838d016126a6565b985061276960408c016121c7565b975060608b0135965060808b013591508082111561278657600080fd5b6127928c838d016126b9565b909650945060a08b01359150808211156127ab57600080fd5b506127b88b828c016126b9565b999c989b5096995094979396929594505050565b634e487b7160e01b600052602160045260246000fd5b6007811061280057634e487b7160e01b600052602160045260246000fd5b9052565b61280f8282516127e2565b60208181015190830152604080820151908301526060908101516001600160a01b0316910152565b6128428282516127e2565b602081810151908301526040908101516001600160a01b0316910152565b80516101008084528151908401819052600091610120850191602091820190845b818110156128df5782516128968682516127e2565b808501511515868601526040808201516001600160a01b039081169188019190915260608083015190880152608091820151169086015260a09094019391830191600101612881565b505050808401516128f282870182612804565b505060408301516116db60a0860182612837565b6060815260006129196060830185612860565b9050610e4c602083018480516001600160a01b03168252602090810151910152565b6000806000806080858703121561295157600080fd5b843593506020850135612963816121b2565b925060408501359150606085013561297a816121b2565b939692955090935050565b60006001600160401b0382111561299e5761299e6122cf565b5060051b60200190565b6000604082840312156129ba57600080fd5b6129c26122e5565b905081356129cf8161219c565b815260208201356001600160401b038111156129ea57600080fd5b6129f684828501612410565b60208301525092915050565b600082601f830112612a1357600080fd5b81356020612a2361242f83612985565b82815260059290921b84018101918181019086841115612a4257600080fd5b8286015b84811015612ac05780356001600160401b0380821115612a665760008081fd5b908801906040828b03601f1901811315612a805760008081fd5b612a886122e5565b8784013583811115612a9a5760008081fd5b612aa88d8a838801016129a8565b82525092013586830152508352918301918301612a46565b509695505050505050565b803563ffffffff811681146121d257600080fd5b8015158114610a8e57600080fd5b80356121d281612adf565b600081830360a0811215612b0b57600080fd5b612b1361230d565b915082356001600160401b0380821115612b2c57600080fd5b612b38868387016129a8565b84526020850135915080821115612b4e57600080fd5b612b5a868387016129a8565b60208501526040850135915080821115612b7357600080fd5b50612b80858286016129a8565b6040840152506040605f1982011215612b9857600080fd5b50612ba16122e5565b6060830135612baf816121b2565b80825250608083013560208201528060608301525092915050565b60006101008284031215612bdd57600080fd5b612be561232f565b905081356001600160401b0380821115612bfe57600080fd5b612c0a85838601612a02565b8352602084013560208401526040840135604084015260608401356060840152612c36608085016121c7565b6080840152612c4760a08501612acb565b60a0840152612c5860c08501612acb565b60c084015260e0840135915080821115612c7157600080fd5b50612c7e84828501612af8565b60e08301525092915050565b600060c08284031215612c9c57600080fd5b60405160c081018181106001600160401b0382111715612cbe57612cbe6122cf565b6040529050808235612ccf816121b2565b808252506020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b6000806000610100808587031215612d2357600080fd5b84356001600160401b0380821115612d3a57600080fd5b908601906101208289031215612d4f57600080fd5b612d57612352565b823582811115612d6657600080fd5b612d728a828601612a02565b825250612d81602084016121c7565b6020820152612d92604084016121c7565b6040820152612da360608401612acb565b6060820152612db460808401612acb565b6080820152612dc560a084016121c7565b60a0820152612dd660c08401612aed565b60c0820152612de760e08401612aed565b60e0820152612df7848401612aed565b84820152809650506020870135925080831115612e1357600080fd5b5050612e2186828701612bca565b925050612e318560408601612c8a565b90509250925092565b602081526000610e4c6020830184612860565b600060208284031215612e5f57600080fd5b8151610e4c8161219c565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b9384526001600160a01b039283166020850152604084019190915216606082015260800190565b60008235603e19833603018112612f3f57600080fd5b90910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008135612f7e8161219c565b6001600160e01b0319168352602082013536839003601e19018112612fa257600080fd5b820180356001600160401b03811115612fba57600080fd5b803603841315612fc957600080fd5b604060208601526118d6604086018260208501612f48565b6000612fed8283612f29565b60408452612ffe6040850182612f71565b602093840135949093019390935250919050565b8281526040602082015260006124fb6040830184612fe1565b600082601f83011261303c57600080fd5b8151602061304c61242f83612985565b8281526060928302850182019282820191908785111561306b57600080fd5b8387015b858110156130cd5781818a0312156130875760008081fd5b61308f612375565b815161309a816121b2565b8152818601516130a98161219c565b818701526040828101516130bc816121b2565b90820152845292840192810161306f565b5090979650505050505050565b600080604083850312156130ed57600080fd5b82516001600160401b038082111561310457600080fd5b818501915085601f83011261311857600080fd5b8151602061312861242f83612985565b82815260059290921b8401810191818101908984111561314757600080fd5b948201945b8386101561316e57855161315f816121b2565b8252948201949082019061314c565b9188015191965090935050508082111561318757600080fd5b506124ab8582860161302b565b8381526060602082015260006131ad6060830185612fe1565b905060018060a01b0383166040830152949350505050565b6000610120823584526020830135602085015260408301356040850152606083013560608501526080830135608085015260a083013560a085015261320d60c0840184612f29565b8160c086015261321f82860182612f71565b91505061322f60e0840184612f29565b84820360e08601526132418282612f71565b91505061010061325381850185612f29565b858303828701526132648382612f71565b9695505050505050565b608081528635608082015260006020880135613289816121b2565b6001600160a01b0390811660a08401526040890135906132a8826121b2565b1660c08301526132ba60608901612acb565b63ffffffff1660e08301526132d1608089016121c7565b6001600160a01b031661010083015260a08801356101208301526132f860c0890189612f29565b60e061014084015261330e610160840182612f71565b9050828103602084015261332281896131c5565b90508281036040840152613337818789612f48565b9050828103606084015261334c818587612f48565b9998505050505050505050565b60005b8381101561337457818101518382015260200161335c565b83811115611e075750506000910152565b60006040828403121561339757600080fd5b61339f6122e5565b905081516133ac8161219c565b815260208201516001600160401b038111156133c757600080fd5b8201601f810184136133d857600080fd5b80516133e661242f826123e9565b8181528560208385010111156133fb57600080fd5b61340c826020830160208601613359565b602084015250909392505050565b60006040828403121561342c57600080fd5b6134346122e5565b90508151613441816121b2565b808252506020820151602082015292915050565b6000806060838503121561346857600080fd5b82516001600160401b038082111561347f57600080fd5b90840190610120828703121561349457600080fd5b61349c612352565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c0830151828111156134e457600080fd5b6134f088828601613385565b60c08301525060e08301518281111561350857600080fd5b61351488828601613385565b60e083015250610100808401518381111561352e57600080fd5b61353a89828701613385565b828401525050809450505050613553846020850161341a565b90509250929050565b6000610120823603121561356f57600080fd5b613577612352565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c08301356001600160401b03808211156135c757600080fd5b6135d3368387016129a8565b60c084015260e08501359150808211156135ec57600080fd5b6135f8368387016129a8565b60e08401526101009150818501358181111561361357600080fd5b61361f368288016129a8565b8385015250505080915050919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611fca5781600019048211156136665761366661362f565b8085161561367357918102915b93841c939080029061364a565b60008261368f57506001610928565b8161369c57506000610928565b81600181146136b257600281146136bc576136d8565b6001915050610928565b60ff8411156136cd576136cd61362f565b50506001821b610928565b5060208310610133831016604e8410600b84101617156136fb575081810a610928565b6137058383613645565b80600019048211156137195761371961362f565b029392505050565b6000610e4c60ff841683613680565b60008151808452613748816020860160208601613359565b601f01601f19169290920160200192915050565b63ffffffff60e01b815116825260006020820151604060208501526124fb6040850182613730565b6000610120825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c08601526137d68286018261375c565b91505060e083015184820360e08601526137f0828261375c565b9150506101008084015185830382870152613264838261375c565b85815260a06020820152843560a08201526000602086013561382c816121b2565b6001600160a01b0390811660c084015260408701359061384b826121b2565b1660e083015261385d60608701612acb565b63ffffffff16610100830152613875608087016121c7565b6001600160a01b031661012083015260a086013561014083015261389c60c0870187612f29565b60e06101608401526138b2610180840182612f71565b905082810360408401526138c68187613784565b9150506138de60608301856001600160a01b03169052565b8260808301529695505050505050565b8051600781106121d257600080fd5b60006080828403121561390f57600080fd5b61391761230d565b9050613922826138ee565b815260208201516020820152604082015160408201526060820151613946816121b2565b606082015292915050565b60006060828403121561396357600080fd5b61396b612375565b9050613976826138ee565b8152602082015160208201526040820151613990816121b2565b604082015292915050565b600060208083850312156139ae57600080fd5b82516001600160401b03808211156139c557600080fd5b9084019061010082870312156139da57600080fd5b6139e2612375565b8251828111156139f157600080fd5b83019150601f82018713613a0457600080fd5b8151613a1261242f82612985565b81815260a0918202840186019186820191908a841115613a3157600080fd5b948701945b83861015613ab15780868c031215613a4e5760008081fd5b613a56612397565b613a5f876138ee565b815288870151613a6e81612adf565b818a0152604087810151613a81816121b2565b9082015260608781015190820152608080880151613a9e816121b2565b9082015283529485019491870191613a36565b818552613ac08b8989016138fd565b88860152613ad08b828901613951565b604086015250929998505050505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015612280578284038952815160408151818752613b248288018261375c565b92880151968801969096525098850198935090840190600101613b02565b6000815160a08452613b5760a085018261375c565b905060208301518482036020860152613b70828261375c565b91505060408301518482036040860152613b8a828261375c565b91505060608301516116db606086018280516001600160a01b03168252602090810151910152565b60006101008251818552613bc882860182613ae4565b91505060208301516020850152604083015160408501526060830151606085015260018060a01b03608084015116608085015263ffffffff60a08401511660a085015260c0830151613c2260c086018263ffffffff169052565b5060e083015184820360e08601526118d68282613b42565b600061014087835280602084015286516101208083860152613c60610260860183613ae4565b925060208901519150613c7f6101608601836001600160a01b03169052565b6040898101516001600160a01b0390811661018088015260608b015163ffffffff9081166101a089015260808c0151166101c088015260a08b0151166101e087015260c08a0151151561020087015260e08a015115156102208701526101008a0151801515610240880152868503918701919091529150613d008389613bb2565b9350613d4a606086018880516001600160a01b031682526020808201519083015260408082015190830152606080820151908301526080808201519083015260a090810151910152565b6001600160a01b038616858201525050509695505050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201613d8d57613d8d61362f565b5060010190565b600060208284031215613da657600080fd5b5051919050565b600060408284031215613dbf57600080fd5b613dc76122e5565b8251613dd2816121b2565b81526020830151613de2816121b2565b60208201529392505050565b600060208284031215613e0057600080fd5b815160ff81168114610e4c57600080fd5b600060208284031215613e2357600080fd5b8151610e4c81612adf565b60008251613e40818460208701613359565b9190910192915050565b602081526000610e4c602083018461373056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200810897b5313dca59be37546b388eba6dc322d4f99fdc37b2f83be0398ad2b3864736f6c634300080d0033",
  "linkReferences": {
    "contracts/accounting/Accounts.sol": {
      "Accounts": [
        {
          "length": 20,
          "start": 3024
        },
        {
          "length": 20,
          "start": 4326
        },
        {
          "length": 20,
          "start": 4966
        },
        {
          "length": 20,
          "start": 5289
        },
        {
          "length": 20,
          "start": 5502
        }
      ]
    },
    "contracts/asset/Assets.sol": {
      "Assets": [
        {
          "length": 20,
          "start": 2514
        },
        {
          "length": 20,
          "start": 3640
        },
        {
          "length": 20,
          "start": 3814
        },
        {
          "length": 20,
          "start": 4514
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/accounting/Accounts.sol": {
      "Accounts": [
        {
          "length": 20,
          "start": 2736
        },
        {
          "length": 20,
          "start": 4038
        },
        {
          "length": 20,
          "start": 4678
        },
        {
          "length": 20,
          "start": 5001
        },
        {
          "length": 20,
          "start": 5214
        }
      ]
    },
    "contracts/asset/Assets.sol": {
      "Assets": [
        {
          "length": 20,
          "start": 2226
        },
        {
          "length": 20,
          "start": 3352
        },
        {
          "length": 20,
          "start": 3526
        },
        {
          "length": 20,
          "start": 4226
        }
      ]
    }
  }
}
