{
    "_format": "hh-sol-artifact-1",
    "contractName": "StakeModule",
    "sourceName": "contracts/OperatorTokenomics/OperatorPolicies/StakeModule.sol",
    "abi": [
        {
            "inputs": [],
            "name": "AccessDenied",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedDATATokenOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedNodesOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedOperatorOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedStreamrSponsorshipOnly",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorTokenBalanceWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minimumDelegationWei",
                    "type": "uint256"
                }
            ],
            "name": "DelegationBelowMinimum",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "DidNotReceiveReward",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "FirstEmptyQueueThenStake",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newOperatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "InvalidOperatorsCut",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "module",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "ModuleCallError",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "ModuleGetError",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NoEarnings",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NotMyStakedSponsorship",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorBalanceWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minimumSelfDelegationWei",
                    "type": "uint256"
                }
            ],
            "name": "SelfDelegationTooLow",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "StakedInSponsorships",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ZeroUndelegation",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "balanceWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalSupplyWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "dataValueWithoutEarnings",
                    "type": "uint256"
                }
            ],
            "name": "BalanceUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Delegated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "nodeAddress",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "jsonData",
                    "type": "string"
                }
            ],
            "name": "Heartbeat",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "valueDecreaseWei",
                    "type": "uint256"
                }
            ],
            "name": "Loss",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operatorAddress",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "MetadataUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "nodes",
                    "type": "address[]"
                }
            ],
            "name": "NodesSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "slashingAmountDataWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "slashingAmountInOperatorTokensWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "actuallySlashedInOperatorTokensWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorSlashed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalStakeInSponsorshipsWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "dataTokenBalanceWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorValueUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "valueIncreaseWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorsCutDataWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "protocolFeeDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Profit",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "queueIndex",
                    "type": "uint256"
                }
            ],
            "name": "QueueUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "queueIndex",
                    "type": "uint256"
                }
            ],
            "name": "QueuedDataPayout",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "voteStartTimestamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "voteEndTimestamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "ReviewRequest",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "stakedWei",
                    "type": "uint256"
                }
            ],
            "name": "StakeUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "Staked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Undelegated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "Unstaked",
            "type": "event"
        },
        {
            "stateMutability": "nonpayable",
            "type": "fallback"
        },
        {
            "inputs": [],
            "name": "CONTROLLER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "OWNER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "_forceUnstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "_reduceStakeTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "receivedDuringUnstakingWei",
                    "type": "uint256"
                }
            ],
            "name": "_removeSponsorship",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "earningsDataWei",
                    "type": "uint256"
                }
            ],
            "name": "_splitEarnings",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "_stake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "_unstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "_withdrawEarnings",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "sumEarnings",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                }
            ],
            "name": "balanceInData",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "subtractedValue",
                    "type": "uint256"
                }
            ],
            "name": "decreaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "delegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "delegationPolicy",
            "outputs": [
                {
                    "internalType": "contract IDelegationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "exchangeRatePolicy",
            "outputs": [
                {
                    "internalType": "contract IExchangeRatePolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "flag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "maxQueuePayoutIterations",
                    "type": "uint256"
                }
            ],
            "name": "forceUnstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getNodeAddresses",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "",
                    "type": "address[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getSponsorshipsAndEarnings",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "addresses",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "earnings",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAllowedEarnings",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getStreamMetadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "jsonData",
                    "type": "string"
                }
            ],
            "name": "heartbeat",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "addedValue",
                    "type": "uint256"
                }
            ],
            "name": "increaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "indexOfSponsorships",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                },
                {
                    "internalType": "contract StreamrConfig",
                    "name": "config",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "ownerAddress",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "operatorTokenName",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "operatorMetadataJson",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "operatorsCut",
                    "type": "uint256"
                },
                {
                    "internalType": "address[3]",
                    "name": "modules",
                    "type": "address[3]"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "latestDelegationTimestamp",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "metadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "nodeIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "nodeModule",
            "outputs": [
                {
                    "internalType": "contract INodeModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "nodes",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountSlashedDataWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "receivedPayoutWei",
                    "type": "uint256"
                }
            ],
            "name": "onKick",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                }
            ],
            "name": "onReviewRequest",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountSlashed",
                    "type": "uint256"
                }
            ],
            "name": "onSlash",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "onTokenTransfer",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "operatorsCutFraction",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "payOutFirstInQueue",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "payoutComplete",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "maxIterations",
                    "type": "uint256"
                }
            ],
            "name": "payOutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueCurrentIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "queueEntryAt",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "timestamp",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueIsEmpty",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueLastIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueModule",
            "outputs": [
                {
                    "internalType": "contract IQueueModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeWithoutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IDelegationPolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setDelegationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IExchangeRatePolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setExchangeRatePolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "newNodes",
                    "type": "address[]"
                }
            ],
            "name": "setNodeAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IUndelegationPolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setUndelegationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "slashedIn",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "sponsorships",
            "outputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "stake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "stakeModule",
            "outputs": [
                {
                    "internalType": "contract IStakeModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "stakedInto",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamId",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamRegistry",
            "outputs": [
                {
                    "internalType": "contract IStreamRegistryV4",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamrConfig",
            "outputs": [
                {
                    "internalType": "contract StreamrConfig",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "token",
            "outputs": [
                {
                    "internalType": "contract IERC677",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSlashedInSponsorshipsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalStakedIntoSponsorshipsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Operator",
                    "name": "other",
                    "type": "address"
                },
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "triggerAnotherOperatorWithdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "undelegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "undelegationPolicy",
            "outputs": [
                {
                    "internalType": "contract IUndelegationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "undelegationQueue",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "delegator",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountWei",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "timestamp",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct Operator.UndelegationQueueEntry[]",
                    "name": "queue",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "unstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "unstakeWithoutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "updateMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "addNodes",
                    "type": "address[]"
                },
                {
                    "internalType": "address[]",
                    "name": "removeNodes",
                    "type": "address[]"
                }
            ],
            "name": "updateNodeAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newOperatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "updateOperatorsCutFraction",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "updateStreamMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "valueWithoutEarnings",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "version",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "internalType": "bytes32",
                    "name": "voteData",
                    "type": "bytes32"
                }
            ],
            "name": "voteOnFlag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "withdrawEarningsFromSponsorships",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "withdrawEarningsFromSponsorshipsWithoutQueue",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "withdrawnEarningsDataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b506159fd80620000216000396000f3fe608060405234801561001057600080fd5b50600436106104e35760003560e01c8063870ffde21161028e578063af9ee81d11610167578063d572a9cd116100d9578063f2888dbb11610092578063f2888dbb14610c72578063f3aea65014610c85578063f4350c2414610c98578063f4408e4b14610cab578063fc0c546a14610cb3578063ffff59a614610cc6576104e3565b8063d572a9cd14610bf1578063d673de4614610c04578063dd62ed3e14610c24578063e364215314610c37578063e58378bb14610c4a578063e8e658b414610c5f576104e3565b8063bc697ec51161012b578063bc697ec514610b8a578063bc9b30c814610b9d578063bed6ff0914610bb0578063c229918e14610bc3578063d1b6861114610bcb578063d547741f14610bde576104e3565b8063af9ee81d14610ad3578063b07f3c4714610ae6578063b2279c2814610b44578063b72cd7a814610b57578063ba2bfc0a14610b6a576104e3565b8063a48dca1811610200578063a93a019f116101c4578063a93a019f14610a76578063a99fa31a14610a89578063aa0d97b314610a9c578063aa5703ad14610aaf578063aa77fd5514610ab7578063adc9772e14610ac0576104e3565b8063a48dca1814610a17578063a4c0ed3614610a2a578063a63ed2c814610a3d578063a74194af14610a50578063a9059cbb14610a63576104e3565b80639413462c116102525780639413462c146109c557806395d89b41146109ce57806398833130146109d65780639fa6dd35146109e9578063a217fddf146109fc578063a457c2d714610a04576104e3565b8063870ffde21461097057806387396e3b146109795780638da5cb5b1461098c578063918b5be11461099f57806391d14854146109b2576104e3565b806336568abe116103c05780635cef6398116103325780636c68c0e1116102f65780636c68c0e1146108ef57806370a0823114610902578063799e2590146109155780637bf713b6146109285780637d4293851461093b5780637e82fd6f1461095b576104e3565b80635cef6398146108975780635dff6e9f146108aa5780635e61bb87146108bd57806363d1ecf2146108c957806364f1abb7146108dc576104e3565b80634a178fe4116103845780634a178fe41461082e5780634b095c031461084157806350d3ba9e1461085457806354fd4d5014610867578063558a15681461086e57806358fc614a14610877576104e3565b806336568abe146107cd578063392f37e9146107e057806339509351146107e85780633d16f42d146107fb578063430457e11461080e576104e3565b80631c53c28011610459578063248a9ca31161041d578063248a9ca31461074957806325c335491461076c5780632e9498241461077f5780632ebd89d1146107945780632f2ff15d146107ab578063313ce567146107be576104e3565b80631c53c280146106dd57806320fed94f146106fd57806321194bd71461071057806321a769071461072357806323b872dd14610736576104e3565b80630fd6ff49116104ab5780630fd6ff491461067f57806311606010146106945780631401f70b1461069c57806314797daa146106af57806318160ddd146106c25780631b155aa0146106ca576104e3565b806301ffc9a71461060357806304cbab8b1461062b57806306fdde0314610642578063092c5b3b14610657578063095ea7b31461066c575b600036606033301461050857604051634ca8886760e01b815260040160405180910390fd5b8160008482610518601482614bd1565b61052492859290614be8565b61052d91614c12565b60601c90506000858186610542602087614bd1565b9261054f93929190614be8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b03871692506105a191508590614c73565b600060405180830381855af49150503d80600081146105dc576040519150601f19603f3d011682016040523d82523d6000602084013e6105e1565b606091505b5091509150816105f357805181602001fd5b8051975060200195505050505050f35b610616610611366004614c8f565b610cd9565b60405190151581526020015b60405180910390f35b61063460c95481565b604051908152602001610622565b61064a610d10565b6040516106229190614ce5565b61063460008051602061592883398151915281565b61061661067a366004614d0d565b610da2565b61069261068d366004614d81565b610dba565b005b610616610e30565b6106926106aa366004614dc2565b610e7b565b6106926106bd366004614e23565b610f16565b609954610634565b6106346106d8366004614f84565b610f83565b6106f06106eb366004614fc0565b61105b565b6040516106229190614fd9565b61069261070b366004614fed565b611085565b61069261071e366004614d81565b611126565b60d0546106f0906001600160a01b031681565b61061661074436600461500f565b6111c6565b610634610757366004614fc0565b60009081526065602052604090206001015490565b61069261077a366004615050565b6111ea565b610787611250565b60405161062291906150c9565b61079c6112b1565b604051610622939291906150dc565b6106926107b936600461513c565b6114e0565b60405160128152602001610622565b6106926107db36600461513c565b611505565b61064a611584565b6106166107f6366004614d0d565b611612565b610692610809366004614dc2565b611634565b61063461081c366004614dc2565b60d96020526000908152604090205481565b61069261083c3660046151e9565b61178e565b61069261084f366004614d0d565b611822565b610634610862366004614f84565b611884565b6003610634565b61063460d45481565b610634610885366004614dc2565b60d66020526000908152604090205481565b6106926108a5366004614fc0565b6118b3565b6106926108b8366004614fc0565b611abf565b60db5460dc5414610616565b60ce546106f0906001600160a01b031681565b6106926108ea366004614dc2565b611b00565b6106926108fd366004614fc0565b611dcc565b610634610910366004614dc2565b611dfe565b60cb546106f0906001600160a01b031681565b610692610936366004614fc0565b611e19565b610634610949366004614dc2565b60d76020526000908152604090205481565b610963611f92565b604051610622919061524a565b61063460ca5481565b610692610987366004614fc0565b6120b1565b60d2546106f0906001600160a01b031681565b6106926109ad366004614d81565b6120dd565b6106166109c036600461513c565b61216f565b61063460db5481565b61064a61219a565b60d1546106f0906001600160a01b031681565b6106926109f7366004614fc0565b6121a9565b610634600081565b610616610a12366004614d0d565b612247565b60cf546106f0906001600160a01b031681565b610692610a383660046152ac565b6122c2565b610634610a4b366004614dc2565b612349565b6106f0610a5e366004614fc0565b6123cd565b610616610a71366004614d0d565b6123dd565b610692610a84366004614d0d565b6123eb565b610692610a973660046152fb565b612500565b610692610aaa366004614d0d565b612766565b61064a612ce3565b61063460dc5481565b610692610ace366004614d0d565b612d5f565b610692610ae1366004614dc2565b612dc1565b610b1f610af4366004614fc0565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b039094168452602084019290925290820152606001610622565b610692610b52366004614d0d565b612e75565b60cc546106f0906001600160a01b031681565b610634610b78366004614dc2565b60d86020526000908152604090205481565b610692610b98366004614d0d565b6132a0565b60cd546106f0906001600160a01b031681565b610692610bbe36600461500f565b6132e9565b610634613346565b610692610bd9366004614d0d565b6133d4565b610692610bec36600461513c565b61341d565b610692610bff366004614d0d565b613442565b610634610c12366004614dc2565b60de6020526000908152604090205481565b610634610c323660046153fb565b6136e6565b60e0546106f0906001600160a01b031681565b61063460008051602061590883398151915281565b610692610c6d366004614f84565b613711565b610692610c80366004614dc2565b6139d8565b610692610c93366004614d0d565b613a16565b610692610ca6366004615429565b613a5f565b61064a613a8c565b60d3546106f0906001600160a01b031681565b610692610cd4366004614d0d565b613a99565b60006001600160e01b03198216637965db0b60e01b1480610d0a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060609a8054610d1f90615478565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4b90615478565b8015610d985780601f10610d6d57610100808354040283529160200191610d98565b820191906000526020600020905b815481529060010190602001808311610d7b57829003601f168201915b5050505050905090565b600033610db0818585613ae2565b5060019392505050565b33600090815260de60205260408120549003610de957604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610e249291906154db565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610e74916001600160a01b0390911690613bfe565b1515919050565b610e936000805160206159288339815191523361216f565b610eb057604051631a76708960e21b815260040160405180910390fd5b60d054604051610f12916001600160a01b03169063af9ee81d60e01b90610edb908590602401614fd9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613bfe565b5050565b610f2e6000805160206159288339815191523361216f565b610f4b57604051631a76708960e21b815260040160405180910390fd5b60ce54604051610f7c916001600160a01b031690635e2cb23f60e11b90610edb90889088908890889060240161552d565b5050505050565b6000805b825181101561102b57828181518110610fa257610fa2615554565b60200260200101516001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d919061556a565b6110179083615583565b9150806110238161559b565b915050610f87565b508060000361104d57604051632773d46f60e11b815260040160405180910390fd5b611056816118b3565b919050565b60dd818154811061106b57600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d6602052604081205490036110b45760405163012d886f60e51b815260040160405180910390fd5b82156110f3578160ca60008282546110cc9190615583565b909155506110db905083613c9f565b8160ca60008282546110ed9190614bd1565b90915550505b60d054604051611120916001600160a01b031690631644f38560e31b90610edb90859087906024016155b4565b50505050565b61113e6000805160206159288339815191523361216f565b61115b57604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe7906111909060df908690869060040161566c565b600060405180830381600087803b1580156111aa57600080fd5b505af11580156111be573d6000803e3d6000fd5b505050505050565b6000336111d4858285613db1565b6111df858585613e25565b506001949350505050565b6112026000805160206159288339815191523361216f565b61121f57604051631a76708960e21b815260040160405180910390fd5b60ce5460405161124b916001600160a01b03169062b08f2560e61b90610edb908690869060240161569c565b505050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610d9857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161128a575050505050905090565b606080600060d5805490506001600160401b038111156112d3576112d3614e8e565b6040519080825280602002602001820160405280156112fc578160200160208202803683370190505b5060d5549093506001600160401b0381111561131a5761131a614e8e565b604051908082528060200260200182016040528015611343578160200160208202803683370190505b50915060005b60d55481101561144757600060d5828154811061136857611368615554565b9060005260206000200160009054906101000a90046001600160a01b031690508085838151811061139b5761139b615554565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c04906113d6903090600401614fd9565b602060405180830381865afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611417919061556a565b84838151811061142957611429615554565b6020908102919091010152508061143f8161559b565b915050611349565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd919061556a565b6114c5613346565b6114cf91906156b0565b6114d991906156cf565b9050909192565b6000828152606560205260409020600101546114fb81614040565b61124b838361404a565b6001600160a01b038116331461157a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610f1282826140d0565b60e1805461159190615478565b80601f01602080910402602001604051908101604052809291908181526020018280546115bd90615478565b801561160a5780601f106115df5761010080835404028352916020019161160a565b820191906000526020600020905b8154815290600101906020018083116115ed57829003601f168201915b505050505081565b600033610db081858561162583836136e6565b61162f9190615583565b613ae2565b60d3546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611665903090600401614fd9565b602060405180830381865afa158015611682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a6919061556a565b9050816001600160a01b031663df4bbd226040518163ffffffff1660e01b81526004016020604051808303816000875af11580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170c919061556a565b5060d3546040516370a0823160e01b8152610f1291849184916001600160a01b0316906370a0823190611743903090600401614fd9565b602060405180830381865afa158015611760573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611784919061556a565b610b529190614bd1565b33600090815260de602052604081205490036117bd57604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906117eb90859085906004016156f1565b600060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b50505050505050565b61183a6000805160206159288339815191523361216f565b61185757604051631a76708960e21b815260040160405180910390fd5b60d05460405161124b916001600160a01b03169063d572a9cd60e01b90610edb90869086906024016155b4565b60d054604051600091610d0a916001600160a01b039091169062d8aad560e51b90610edb9086906024016150c9565b6000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316633a0298eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611911573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611935919061556a565b61193f90846156b0565b61194991906156cf565b60d35460d1546040805163675c06f960e11b815290519394506001600160a01b039283169363a9059cbb939092169163ceb80df2916004808201926020929091908290030181865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c79190615715565b836040518363ffffffff1660e01b81526004016119e59291906155b4565b6020604051808303816000875af1158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a289190615732565b506000670de0b6b3a764000060d4548385611a439190614bd1565b611a4d91906156b0565b611a5791906156cf565b60d254909150611a70906001600160a01b031682614137565b81817f604b365b22dbda1203004fba26c477ed19c49ad01cadf6eedf5f17f52ebbae1881611a9e8488614bd1565b611aa89190614bd1565b6040519081526020015b60405180910390a3505050565b611ad76000805160206159288339815191523361216f565b611af457604051631a76708960e21b815260040160405180910390fd5b611afd816142f6565b50565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b779190615715565b6001600160a01b0316634703e001336040518263ffffffff1660e01b8152600401611ba29190614fd9565b602060405180830381865afa158015611bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be3919061556a565b600003611c03576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c76919061556a565b611c809042615583565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb919061556a565b611d059083615583565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b8152600401611d6a9190614fd9565b600060405180830381865afa158015611d87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611daf9190810190615754565b604051611dbe939291906157ca565b60405180910390a350505050565b60cf5460405160248101839052336044820152610f12916001600160a01b031690630744132360e21b90606401610edb565b6001600160a01b031660009081526097602052604090205490565b33600081815260d660205260408120549003611e485760405163012d886f60e51b815260040160405180910390fd5b611e5182613c9f565b6001600160a01b038116600090815260d8602052604081208054849290611e79908490615583565b925050819055508160ca6000828254611e929190615583565b90915550506001600160a01b038116600081815260d8602090815260408083205460d79092529091205460008051602061596883398151915291611ed591614bd1565b60405190815260200160405180910390a26000805160206159a883398151915260ca5460c954611f059190614bd1565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611f35903090600401614fd9565b602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f76919061556a565b6040805192835260208301919091520160405180910390a15050565b6060600060dc5460db54611fa69190614bd1565b9050806001600160401b03811115611fc057611fc0614e8e565b60405190808252806020026020018201604052801561201e57816020015b61200b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611fde5790505b50915060005b818110156120ac5760da60008260dc5461203e9190615583565b81526020808201929092526040908101600020815160608101835281546001600160a01b031681526001820154938101939093526002015490820152835184908390811061208e5761208e615554565b602002602001018190525080806120a49061559b565b915050612024565b505090565b60cf5460405160248101839052610f12916001600160a01b03169063211cccd160e21b90604401610edb565b6120f56000805160206159288339815191523361216f565b61211257604051631a76708960e21b815260040160405180910390fd5b61211e60e18383614aae565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d09061216390869086906154db565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610d1f90615478565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af115801561220e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122329190615732565b5061223d3382614137565b611afd60006120b1565b6000338161225582866136e6565b9050838110156122b55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611571565b6111df8286868403613ae2565b60d3546001600160a01b031633146122ed5760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d660205260409020548490156123135750611120565b8460148390036123285750823560601c612335565b6020839003612335575082355b61233f8186614137565b6111be60006120b1565b600061235482611dfe565b60000361236357506000919050565b610d0a630de731f360e31b61237784611dfe565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614393565b60d5818154811061106b57600080fd5b600033610db0818585613e25565b60db5460dc541480612491575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246f919061556a565b60dc54600090815260da602052604090206002015461248e9190615583565b42105b156124cb576124ae6000805160206159288339815191523361216f565b6124cb57604051631a76708960e21b815260040160405180910390fd5b60d0546040516124f6916001600160a01b031690633d16f42d60e01b90610edb908690602401614fd9565b50610f12816120b1565b600054610100900460ff16158080156125205750600054600160ff909116105b8061253a5750303b15801561253a575060005460ff166001145b61259d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611571565b6000805460ff1916600117905580156125c0576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b0389161790556125e3614429565b6125fb60008051602061590883398151915287614452565b61261360008051602061592883398151915287614452565b61263960008051602061592883398151915260008051602061590883398151915261445c565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556126ae85806144a7565b6126b9600033614452565b83516126cc9060e1906020870190614b32565b506126d6836142f6565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b179052612715916001600160a01b031690613bfe565b50801561275c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190615715565b6001600160a01b0316634703e001836040518263ffffffff1660e01b81526004016128089190614fd9565b602060405180830381865afa158015612825573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612849919061556a565b600003612869576040516359e9fbbf60e11b815260040160405180910390fd5b60db5460dc541461288d5760405163763643d360e11b815260040160405180910390fd5b60d160009054906101000a90046001600160a01b03166001600160a01b0316637b94dead6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612904919061556a565b60995461291191906156b0565b60d254612926906001600160a01b0316611dfe565b61293890670de0b6b3a76400006156b0565b11612a005760d254612952906001600160a01b0316611dfe565b60d15460408051637b94dead60e01b81529051670de0b6b3a7640000926001600160a01b031691637b94dead9160048083019260209291908290030181865afa1580156129a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c7919061556a565b6099546129d491906156b0565b6129de91906156cf565b60405163c89199b360e01b815260048101929092526024820152604401611571565b60d35460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612a3290859085906004016155b4565b6020604051808303816000875af1158015612a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a759190615732565b506040516356e4bb9760e11b81526001600160a01b0383169063adc9772e90612aa490309085906004016155b4565b600060405180830381600087803b158015612abe57600080fd5b505af1158015612ad2573d6000803e3d6000fd5b505050506001600160a01b038216600090815260d7602052604081208054839290612afe908490615583565b925050819055508060c96000828254612b179190615583565b90915550506001600160a01b038216600090815260d660205260408120549003612bbf5760d580546001810182557f51858de9989bf7441865ebdadbf7382c8838edbf830f5d86a9a51ac773676dd60180546001600160a01b0319166001600160a01b0385169081179091559054600082815260d660205260408082209290925590517f77338642d9284a44296d29a273e04b8ab6b15c7d2439094cd460b7e4f0b330749190a25b60d160009054906101000a90046001600160a01b03166001600160a01b031663be60040e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c369190615715565b6001600160a01b0316636a1ba88c306040518263ffffffff1660e01b8152600401612c619190614fd9565b6020604051808303816000875af1158015612c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca49190615732565b506001600160a01b038216600081815260d8602090815260408083205460d79092529091205460008051602061596883398151915291611ed591614bd1565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd290612d159060df906004016157e9565b600060405180830381865afa158015612d32573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5a9190810190615754565b905090565b612d776000805160206159288339815191523361216f565b612d9457604051631a76708960e21b815260040160405180910390fd5b60d05460405161124b916001600160a01b03169063aa0d97b360e01b90610edb90869086906024016155b4565b60d3546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612df2903090600401614fd9565b602060405180830381865afa158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e33919061556a565b9050816001600160a01b0316632def66206040518163ffffffff1660e01b81526004016020604051808303816000875af11580156116e8573d6000803e3d6000fd5b6001600160a01b038216600090815260d7602052604081205460c9805491929091612ea1908490614bd1565b90915550506001600160a01b038216600090815260d8602052604081205460ca805491929091612ed2908490614bd1565b90915550506001600160a01b038216600090815260d76020526040902054811015612f5c576001600160a01b038216600090815260d76020526040812054612f1b908390614bd1565b90507fb65b2e085d7d040c313f7d4e1ac90f5937026fee497e0e24a7eff16a55e1c5ea81604051612f4e91815260200190565b60405180910390a150612f8c565b6001600160a01b038216600090815260d76020526040812054612f7f9083614bd1565b9050612f8a816118b3565b505b60d160009054906101000a90046001600160a01b03166001600160a01b031663be60040e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190615715565b6001600160a01b0316636a1ba88c306040518263ffffffff1660e01b815260040161302e9190614fd9565b6020604051808303816000875af115801561304d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130719190615732565b506001600160a01b038216600090815260d6602052604081205461309790600190614bd1565b60d580549192506000916130ad90600190614bd1565b815481106130bd576130bd615554565b60009182526020909120015460d580546001600160a01b0390921692508291849081106130ec576130ec615554565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060d580548061312b5761312b6157fc565b600082815260209020810160001990810180546001600160a01b0319169055019055613158826001615583565b6001600160a01b03808316600090815260d6602090815260408083209490945591871680825283822082905560d7835283822082905560d8909252828120819055915190917f908e667f6c2b13b8062954eb100253ea804c21222b190449e40d967a3ac0ff1391a2836001600160a01b031660008051602061596883398151915260006040516131ea91815260200190565b60405180910390a26000805160206159a883398151915260ca5460c9546132119190614bd1565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190613241903090600401614fd9565b602060405180830381865afa15801561325e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613282919061556a565b6040805192835260208301919091520160405180910390a150505050565b60006132ab81614040565b60cc80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526111209190632522e97360e11b90604401610edb565b33600090815260de6020526040812054900361331857604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906117eb90859085906004016155b4565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a082319061337f903090600401614fd9565b602060405180830381865afa15801561339c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c0919061556a565b6133ca9190615583565b612d5a9190614bd1565b6133ec6000805160206159288339815191523361216f565b61340957604051631a76708960e21b815260040160405180910390fd5b6134138282611822565b610f1260006120b1565b60008281526065602052604090206001015461343881614040565b61124b83836140d0565b8060000361345357610f1282612dc1565b6040516338106e4d60e01b8152600481018290526000906001600160a01b038416906338106e4d906024016020604051808303816000875af115801561349d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c1919061556a565b6001600160a01b038416600090815260d760205260408120805492935083929091906134ee908490614bd1565b925050819055508060c960008282546135079190614bd1565b909155505060d15460408051635f30020760e11b815290516001600160a01b039092169163be60040e916004808201926020929091908290030181865afa158015613556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357a9190615715565b6001600160a01b0316636a1ba88c306040518263ffffffff1660e01b81526004016135a59190614fd9565b6020604051808303816000875af11580156135c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e89190615732565b506001600160a01b038316600081815260d8602090815260408083205460d7909252909120546000805160206159688339815191529161362791614bd1565b6040519081526020015b60405180910390a26000805160206159a883398151915260ca5460c9546136589190614bd1565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190613688903090600401614fd9565b602060405180830381865afa1580156136a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c9919061556a565b6040805192835260208301919091520160405180910390a1505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b600061371b613346565b9050600061372883611884565b9050336137436000805160206159288339815191528261216f565b15801561376657506001600160a01b038116600090815260de6020526040902054155b156139ce576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ed919061556a565b6137f790866156b0565b61380191906156cf565b9050808311156139cc576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388d919061556a565b61389790866156b0565b6138a191906156cf565b90506138ac81613c9f565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906138de90869085906004016155b4565b6020604051808303816000875af11580156138fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139219190615732565b506000805160206159a883398151915260ca5460c9546139419190614bd1565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190613971903090600401614fd9565b602060405180830381865afa15801561398e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b2919061556a565b6040805192835260208301919091520160405180910390a1505b505b61112060006120b1565b6139f06000805160206159288339815191523361216f565b613a0d57604051631a76708960e21b815260040160405180910390fd5b61223d81610e7b565b6000613a2181614040565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526111209190632522e97360e11b90604401610edb565b60cf5460405161124b916001600160a01b031690637a227c9f60e01b90610edb9086908690602401615812565b60df805461159190615478565b6000613aa481614040565b60cd80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526111209190632522e97360e11b90604401610edb565b6001600160a01b038316613b445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611571565b6001600160a01b038216613ba55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611571565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611ab2565b6000806000846001600160a01b031684604051613c1b9190614c73565b600060405180830381855af49150503d8060008114613c56576040519150601f19603f3d011682016040523d82523d6000602084013e613c5b565b606091505b509150915081613c93578051600003613c8b57848460405163918623b760e01b81526004016115719291906156f1565b805181602001fd5b60200151949350505050565b60d254600090613cb7906001600160a01b0316611dfe565b905080600003613cc5575050565b60cc5460405160248101849052600091613cf6916001600160a01b0390911690632b911c0960e21b90604401610edb565b90506000613d0483836144d8565b60d254909150613d1d906001600160a01b0316826144f0565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b0316600080516020615948833981519152613d8282611dfe565b609954613d8d613346565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000613dbd84846136e6565b905060001981146111205781811015613e185760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611571565b6111208484848403613ae2565b6000613e3083611dfe565b159050613e3e848484614612565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015613e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eac919061556a565b905080613eb886611dfe565b108015613ecd57506000613ecb86611dfe565b115b15613eff57613edb85611dfe565b6040516324c6940760e01b8152600481019190915260248101829052604401611571565b80613f0985611dfe565b1015613f1857613edb84611dfe565b8115613f5c5760cb546001600160a01b031615613f5c5760cb54604051613f5a916001600160a01b03169063217fb33b60e01b90610edb908890602401614fd9565b505b60cd546001600160a01b031615613fa35760cd546040516001600160a01b03878116602483015260006044830152613fa1921690633608993560e21b90606401610edb565b505b846001600160a01b0316600080516020615948833981519152613fc587611dfe565b609954613fd0613346565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b031660008051602061594883398151915261401086611dfe565b60995461401b613346565b6040805193845260208401929092529082015260600160405180910390a25050505050565b611afd81336147ab565b614054828261216f565b610f125760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561408c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6140da828261216f565b15610f125760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60cc54604051602481018390526044810183905260009161416f916001600160a01b0390911690633a49b55760e21b90606401610edb565b905061417b8382614804565b60d2546001600160a01b038481169116146142595760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe919061556a565b90508061420a85611dfe565b101561421957613edb84611dfe565b60cb546001600160a01b0316156142575760cb54604051614255916001600160a01b03169063217fb33b60e01b90610edb908890602401614fd9565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab906142a69085815260200190565b60405180910390a2826001600160a01b03166000805160206159488339815191526142d085611dfe565b6099546142db613346565b60408051938452602084019290925290820152606001613631565b60c95415614317576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a764000081111561434357604051631e6f460160e31b815260048101829052602401611571565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d0906143889060e1906157e9565b60405180910390a350565b6000806000306001600160a01b0316846040516143b09190614c73565b600060405180830381855afa9150503d80600081146143eb576040519150601f19603f3d011682016040523d82523d6000602084013e6143f0565b606091505b50915091508161441e578051600003613c8b578360405163029801d760e41b81526004016115719190614ce5565b602001519392505050565b600054610100900460ff166144505760405162461bcd60e51b815260040161157190615836565b565b610f12828261404a565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166144ce5760405162461bcd60e51b815260040161157190615836565b610f1282826148b3565b60008183106144e757816144e9565b825b9392505050565b6001600160a01b0382166145505760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611571565b6001600160a01b038216600090815260976020526040902054818110156145c45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611571565b6001600160a01b0383166000818152609760209081526040808320868603905560998054879003905551858152919291600080516020615988833981519152910160405180910390a3505050565b6001600160a01b0383166146765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611571565b6001600160a01b0382166146d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611571565b6001600160a01b038316600090815260976020526040902054818110156147505760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611571565b6001600160a01b0380851660008181526097602052604080822086860390559286168082529083902080548601905591516000805160206159888339815191529061479e9086815260200190565b60405180910390a3611120565b6147b5828261216f565b610f12576147c281614901565b6147cd836020614913565b6040516020016147de929190615881565b60408051601f198184030181529082905262461bcd60e51b825261157191600401614ce5565b6001600160a01b03821661485a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611571565b806099600082825461486c9190615583565b90915550506001600160a01b038216600081815260976020908152604080832080548601905551848152600080516020615988833981519152910160405180910390a35050565b600054610100900460ff166148da5760405162461bcd60e51b815260040161157190615836565b81516148ed90609a906020850190614b32565b50805161124b90609b906020840190614b32565b6060610d0a6001600160a01b03831660145b606060006149228360026156b0565b61492d906002615583565b6001600160401b0381111561494457614944614e8e565b6040519080825280601f01601f19166020018201604052801561496e576020820181803683370190505b509050600360fc1b8160008151811061498957614989615554565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106149b8576149b8615554565b60200101906001600160f81b031916908160001a90535060006149dc8460026156b0565b6149e7906001615583565b90505b6001811115614a5f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614a1b57614a1b615554565b1a60f81b828281518110614a3157614a31615554565b60200101906001600160f81b031916908160001a90535060049490941c93614a58816158f0565b90506149ea565b5083156144e95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611571565b828054614aba90615478565b90600052602060002090601f016020900481019282614adc5760008555614b22565b82601f10614af55782800160ff19823516178555614b22565b82800160010185558215614b22579182015b82811115614b22578235825591602001919060010190614b07565b50614b2e929150614ba6565b5090565b828054614b3e90615478565b90600052602060002090601f016020900481019282614b605760008555614b22565b82601f10614b7957805160ff1916838001178555614b22565b82800160010185558215614b22579182015b82811115614b22578251825591602001919060010190614b8b565b5b80821115614b2e5760008155600101614ba7565b634e487b7160e01b600052601160045260246000fd5b600082821015614be357614be3614bbb565b500390565b60008085851115614bf857600080fd5b83861115614c0557600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015614c3f5780818660140360031b1b83161692505b505092915050565b60005b83811015614c62578181015183820152602001614c4a565b838111156111205750506000910152565b60008251614c85818460208701614c47565b9190910192915050565b600060208284031215614ca157600080fd5b81356001600160e01b0319811681146144e957600080fd5b60008151808452614cd1816020860160208601614c47565b601f01601f19169290920160200192915050565b6020815260006144e96020830184614cb9565b6001600160a01b0381168114611afd57600080fd5b60008060408385031215614d2057600080fd5b8235614d2b81614cf8565b946020939093013593505050565b60008083601f840112614d4b57600080fd5b5081356001600160401b03811115614d6257600080fd5b602083019150836020828501011115614d7a57600080fd5b9250929050565b60008060208385031215614d9457600080fd5b82356001600160401b03811115614daa57600080fd5b614db685828601614d39565b90969095509350505050565b600060208284031215614dd457600080fd5b81356144e981614cf8565b60008083601f840112614df157600080fd5b5081356001600160401b03811115614e0857600080fd5b6020830191508360208260051b8501011115614d7a57600080fd5b60008060008060408587031215614e3957600080fd5b84356001600160401b0380821115614e5057600080fd5b614e5c88838901614ddf565b90965094506020870135915080821115614e7557600080fd5b50614e8287828801614ddf565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614ec657614ec6614e8e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614ef457614ef4614e8e565b604052919050565b600082601f830112614f0d57600080fd5b813560206001600160401b03821115614f2857614f28614e8e565b8160051b614f37828201614ecc565b9283528481018201928281019087851115614f5157600080fd5b83870192505b84831015614f79578235614f6a81614cf8565b82529183019190830190614f57565b979650505050505050565b600060208284031215614f9657600080fd5b81356001600160401b03811115614fac57600080fd5b614fb884828501614efc565b949350505050565b600060208284031215614fd257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000806040838503121561500057600080fd5b50508035926020909101359150565b60008060006060848603121561502457600080fd5b833561502f81614cf8565b9250602084013561503f81614cf8565b929592945050506040919091013590565b6000806020838503121561506357600080fd5b82356001600160401b0381111561507957600080fd5b614db685828601614ddf565b600081518084526020808501945080840160005b838110156150be5781516001600160a01b031687529582019590820190600101615099565b509495945050505050565b6020815260006144e96020830184615085565b6060815260006150ef6060830186615085565b82810360208481019190915285518083528682019282019060005b818110156151265784518352938301939183019160010161510a565b5050809350505050826040830152949350505050565b6000806040838503121561514f57600080fd5b82359150602083013561516181614cf8565b809150509250929050565b60006001600160401b0382111561518557615185614e8e565b50601f01601f191660200190565b600082601f8301126151a457600080fd5b81356151b76151b28261516c565b614ecc565b8181528460208386010111156151cc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156151fe57600080fd5b833561520981614cf8565b9250602084013561521981614cf8565b915060408401356001600160401b0381111561523457600080fd5b61524086828701615193565b9150509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561529f57815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101615267565b5091979650505050505050565b600080600080606085870312156152c257600080fd5b84356152cd81614cf8565b93506020850135925060408501356001600160401b038111156152ef57600080fd5b614e8287828801614d39565b600080600080600080600061012080898b03121561531857600080fd5b883561532381614cf8565b975060208981013561533481614cf8565b975060408a013561534481614cf8565b965060608a01356001600160401b038082111561536057600080fd5b61536c8d838e01615193565b975060808c013591508082111561538257600080fd5b5061538f8c828d01615193565b95505060a08a013593508a60df8b01126153a857600080fd5b6153b0614ea4565b918a0191808c8411156153c257600080fd5b60c08c015b848110156153e75780356153da81614cf8565b83529183019183016153c7565b508094505050505092959891949750929550565b6000806040838503121561540e57600080fd5b823561541981614cf8565b9150602083013561516181614cf8565b6000806040838503121561543c57600080fd5b823561544781614cf8565b915060208301356001600160401b0381111561546257600080fd5b61546e85828601614efc565b9150509250929050565b600181811c9082168061548c57607f821691505b6020821081036154ac57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000614fb86020830184866154b2565b8183526000602080850194508260005b858110156150be57813561551281614cf8565b6001600160a01b0316875295820195908201906001016154ff565b6040815260006155416040830186886154ef565b8281036020840152614f798185876154ef565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561557c57600080fd5b5051919050565b6000821982111561559657615596614bbb565b500190565b6000600182016155ad576155ad614bbb565b5060010190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c90808316806155e757607f831692505b6020808410820361560857634e487b7160e01b600052602260045260246000fd5b8388526020880182801561562357600181146156345761565f565b60ff1987168252828201975061565f565b60008981526020902060005b8781101561565957815484820152908601908401615640565b83019850505b5050505050505092915050565b60408152600061567f60408301866155cd565b82810360208401526156928185876154b2565b9695505050505050565b602081526000614fb86020830184866154ef565b60008160001904831182151516156156ca576156ca614bbb565b500290565b6000826156ec57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201819052600090614fb890830184614cb9565b60006020828403121561572757600080fd5b81516144e981614cf8565b60006020828403121561574457600080fd5b815180151581146144e957600080fd5b60006020828403121561576657600080fd5b81516001600160401b0381111561577c57600080fd5b8201601f8101841361578d57600080fd5b805161579b6151b28261516c565b8181528560208385010111156157b057600080fd5b6157c1826020830160208601614c47565b95945050505050565b8381528260208201526060604082015260006157c16060830184614cb9565b6020815260006144e960208301846155cd565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0383168152604060208201819052600090614fb890830184615085565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516158b3816017850160208801614c47565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516158e4816028840160208801614c47565b01602801949350505050565b6000816158ff576158ff614bbb565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef5183989dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a26469706673582212202ec7ba61e84b1833add514eee1894580c3a634b3adc38fe367c5af0d5cb4bb2564736f6c634300080d0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104e35760003560e01c8063870ffde21161028e578063af9ee81d11610167578063d572a9cd116100d9578063f2888dbb11610092578063f2888dbb14610c72578063f3aea65014610c85578063f4350c2414610c98578063f4408e4b14610cab578063fc0c546a14610cb3578063ffff59a614610cc6576104e3565b8063d572a9cd14610bf1578063d673de4614610c04578063dd62ed3e14610c24578063e364215314610c37578063e58378bb14610c4a578063e8e658b414610c5f576104e3565b8063bc697ec51161012b578063bc697ec514610b8a578063bc9b30c814610b9d578063bed6ff0914610bb0578063c229918e14610bc3578063d1b6861114610bcb578063d547741f14610bde576104e3565b8063af9ee81d14610ad3578063b07f3c4714610ae6578063b2279c2814610b44578063b72cd7a814610b57578063ba2bfc0a14610b6a576104e3565b8063a48dca1811610200578063a93a019f116101c4578063a93a019f14610a76578063a99fa31a14610a89578063aa0d97b314610a9c578063aa5703ad14610aaf578063aa77fd5514610ab7578063adc9772e14610ac0576104e3565b8063a48dca1814610a17578063a4c0ed3614610a2a578063a63ed2c814610a3d578063a74194af14610a50578063a9059cbb14610a63576104e3565b80639413462c116102525780639413462c146109c557806395d89b41146109ce57806398833130146109d65780639fa6dd35146109e9578063a217fddf146109fc578063a457c2d714610a04576104e3565b8063870ffde21461097057806387396e3b146109795780638da5cb5b1461098c578063918b5be11461099f57806391d14854146109b2576104e3565b806336568abe116103c05780635cef6398116103325780636c68c0e1116102f65780636c68c0e1146108ef57806370a0823114610902578063799e2590146109155780637bf713b6146109285780637d4293851461093b5780637e82fd6f1461095b576104e3565b80635cef6398146108975780635dff6e9f146108aa5780635e61bb87146108bd57806363d1ecf2146108c957806364f1abb7146108dc576104e3565b80634a178fe4116103845780634a178fe41461082e5780634b095c031461084157806350d3ba9e1461085457806354fd4d5014610867578063558a15681461086e57806358fc614a14610877576104e3565b806336568abe146107cd578063392f37e9146107e057806339509351146107e85780633d16f42d146107fb578063430457e11461080e576104e3565b80631c53c28011610459578063248a9ca31161041d578063248a9ca31461074957806325c335491461076c5780632e9498241461077f5780632ebd89d1146107945780632f2ff15d146107ab578063313ce567146107be576104e3565b80631c53c280146106dd57806320fed94f146106fd57806321194bd71461071057806321a769071461072357806323b872dd14610736576104e3565b80630fd6ff49116104ab5780630fd6ff491461067f57806311606010146106945780631401f70b1461069c57806314797daa146106af57806318160ddd146106c25780631b155aa0146106ca576104e3565b806301ffc9a71461060357806304cbab8b1461062b57806306fdde0314610642578063092c5b3b14610657578063095ea7b31461066c575b600036606033301461050857604051634ca8886760e01b815260040160405180910390fd5b8160008482610518601482614bd1565b61052492859290614be8565b61052d91614c12565b60601c90506000858186610542602087614bd1565b9261054f93929190614be8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b03871692506105a191508590614c73565b600060405180830381855af49150503d80600081146105dc576040519150601f19603f3d011682016040523d82523d6000602084013e6105e1565b606091505b5091509150816105f357805181602001fd5b8051975060200195505050505050f35b610616610611366004614c8f565b610cd9565b60405190151581526020015b60405180910390f35b61063460c95481565b604051908152602001610622565b61064a610d10565b6040516106229190614ce5565b61063460008051602061592883398151915281565b61061661067a366004614d0d565b610da2565b61069261068d366004614d81565b610dba565b005b610616610e30565b6106926106aa366004614dc2565b610e7b565b6106926106bd366004614e23565b610f16565b609954610634565b6106346106d8366004614f84565b610f83565b6106f06106eb366004614fc0565b61105b565b6040516106229190614fd9565b61069261070b366004614fed565b611085565b61069261071e366004614d81565b611126565b60d0546106f0906001600160a01b031681565b61061661074436600461500f565b6111c6565b610634610757366004614fc0565b60009081526065602052604090206001015490565b61069261077a366004615050565b6111ea565b610787611250565b60405161062291906150c9565b61079c6112b1565b604051610622939291906150dc565b6106926107b936600461513c565b6114e0565b60405160128152602001610622565b6106926107db36600461513c565b611505565b61064a611584565b6106166107f6366004614d0d565b611612565b610692610809366004614dc2565b611634565b61063461081c366004614dc2565b60d96020526000908152604090205481565b61069261083c3660046151e9565b61178e565b61069261084f366004614d0d565b611822565b610634610862366004614f84565b611884565b6003610634565b61063460d45481565b610634610885366004614dc2565b60d66020526000908152604090205481565b6106926108a5366004614fc0565b6118b3565b6106926108b8366004614fc0565b611abf565b60db5460dc5414610616565b60ce546106f0906001600160a01b031681565b6106926108ea366004614dc2565b611b00565b6106926108fd366004614fc0565b611dcc565b610634610910366004614dc2565b611dfe565b60cb546106f0906001600160a01b031681565b610692610936366004614fc0565b611e19565b610634610949366004614dc2565b60d76020526000908152604090205481565b610963611f92565b604051610622919061524a565b61063460ca5481565b610692610987366004614fc0565b6120b1565b60d2546106f0906001600160a01b031681565b6106926109ad366004614d81565b6120dd565b6106166109c036600461513c565b61216f565b61063460db5481565b61064a61219a565b60d1546106f0906001600160a01b031681565b6106926109f7366004614fc0565b6121a9565b610634600081565b610616610a12366004614d0d565b612247565b60cf546106f0906001600160a01b031681565b610692610a383660046152ac565b6122c2565b610634610a4b366004614dc2565b612349565b6106f0610a5e366004614fc0565b6123cd565b610616610a71366004614d0d565b6123dd565b610692610a84366004614d0d565b6123eb565b610692610a973660046152fb565b612500565b610692610aaa366004614d0d565b612766565b61064a612ce3565b61063460dc5481565b610692610ace366004614d0d565b612d5f565b610692610ae1366004614dc2565b612dc1565b610b1f610af4366004614fc0565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b039094168452602084019290925290820152606001610622565b610692610b52366004614d0d565b612e75565b60cc546106f0906001600160a01b031681565b610634610b78366004614dc2565b60d86020526000908152604090205481565b610692610b98366004614d0d565b6132a0565b60cd546106f0906001600160a01b031681565b610692610bbe36600461500f565b6132e9565b610634613346565b610692610bd9366004614d0d565b6133d4565b610692610bec36600461513c565b61341d565b610692610bff366004614d0d565b613442565b610634610c12366004614dc2565b60de6020526000908152604090205481565b610634610c323660046153fb565b6136e6565b60e0546106f0906001600160a01b031681565b61063460008051602061590883398151915281565b610692610c6d366004614f84565b613711565b610692610c80366004614dc2565b6139d8565b610692610c93366004614d0d565b613a16565b610692610ca6366004615429565b613a5f565b61064a613a8c565b60d3546106f0906001600160a01b031681565b610692610cd4366004614d0d565b613a99565b60006001600160e01b03198216637965db0b60e01b1480610d0a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060609a8054610d1f90615478565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4b90615478565b8015610d985780601f10610d6d57610100808354040283529160200191610d98565b820191906000526020600020905b815481529060010190602001808311610d7b57829003601f168201915b5050505050905090565b600033610db0818585613ae2565b5060019392505050565b33600090815260de60205260408120549003610de957604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610e249291906154db565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610e74916001600160a01b0390911690613bfe565b1515919050565b610e936000805160206159288339815191523361216f565b610eb057604051631a76708960e21b815260040160405180910390fd5b60d054604051610f12916001600160a01b03169063af9ee81d60e01b90610edb908590602401614fd9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613bfe565b5050565b610f2e6000805160206159288339815191523361216f565b610f4b57604051631a76708960e21b815260040160405180910390fd5b60ce54604051610f7c916001600160a01b031690635e2cb23f60e11b90610edb90889088908890889060240161552d565b5050505050565b6000805b825181101561102b57828181518110610fa257610fa2615554565b60200260200101516001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d919061556a565b6110179083615583565b9150806110238161559b565b915050610f87565b508060000361104d57604051632773d46f60e11b815260040160405180910390fd5b611056816118b3565b919050565b60dd818154811061106b57600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d6602052604081205490036110b45760405163012d886f60e51b815260040160405180910390fd5b82156110f3578160ca60008282546110cc9190615583565b909155506110db905083613c9f565b8160ca60008282546110ed9190614bd1565b90915550505b60d054604051611120916001600160a01b031690631644f38560e31b90610edb90859087906024016155b4565b50505050565b61113e6000805160206159288339815191523361216f565b61115b57604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe7906111909060df908690869060040161566c565b600060405180830381600087803b1580156111aa57600080fd5b505af11580156111be573d6000803e3d6000fd5b505050505050565b6000336111d4858285613db1565b6111df858585613e25565b506001949350505050565b6112026000805160206159288339815191523361216f565b61121f57604051631a76708960e21b815260040160405180910390fd5b60ce5460405161124b916001600160a01b03169062b08f2560e61b90610edb908690869060240161569c565b505050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610d9857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161128a575050505050905090565b606080600060d5805490506001600160401b038111156112d3576112d3614e8e565b6040519080825280602002602001820160405280156112fc578160200160208202803683370190505b5060d5549093506001600160401b0381111561131a5761131a614e8e565b604051908082528060200260200182016040528015611343578160200160208202803683370190505b50915060005b60d55481101561144757600060d5828154811061136857611368615554565b9060005260206000200160009054906101000a90046001600160a01b031690508085838151811061139b5761139b615554565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c04906113d6903090600401614fd9565b602060405180830381865afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611417919061556a565b84838151811061142957611429615554565b6020908102919091010152508061143f8161559b565b915050611349565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd919061556a565b6114c5613346565b6114cf91906156b0565b6114d991906156cf565b9050909192565b6000828152606560205260409020600101546114fb81614040565b61124b838361404a565b6001600160a01b038116331461157a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610f1282826140d0565b60e1805461159190615478565b80601f01602080910402602001604051908101604052809291908181526020018280546115bd90615478565b801561160a5780601f106115df5761010080835404028352916020019161160a565b820191906000526020600020905b8154815290600101906020018083116115ed57829003601f168201915b505050505081565b600033610db081858561162583836136e6565b61162f9190615583565b613ae2565b60d3546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611665903090600401614fd9565b602060405180830381865afa158015611682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a6919061556a565b9050816001600160a01b031663df4bbd226040518163ffffffff1660e01b81526004016020604051808303816000875af11580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170c919061556a565b5060d3546040516370a0823160e01b8152610f1291849184916001600160a01b0316906370a0823190611743903090600401614fd9565b602060405180830381865afa158015611760573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611784919061556a565b610b529190614bd1565b33600090815260de602052604081205490036117bd57604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906117eb90859085906004016156f1565b600060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b50505050505050565b61183a6000805160206159288339815191523361216f565b61185757604051631a76708960e21b815260040160405180910390fd5b60d05460405161124b916001600160a01b03169063d572a9cd60e01b90610edb90869086906024016155b4565b60d054604051600091610d0a916001600160a01b039091169062d8aad560e51b90610edb9086906024016150c9565b6000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316633a0298eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611911573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611935919061556a565b61193f90846156b0565b61194991906156cf565b60d35460d1546040805163675c06f960e11b815290519394506001600160a01b039283169363a9059cbb939092169163ceb80df2916004808201926020929091908290030181865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c79190615715565b836040518363ffffffff1660e01b81526004016119e59291906155b4565b6020604051808303816000875af1158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a289190615732565b506000670de0b6b3a764000060d4548385611a439190614bd1565b611a4d91906156b0565b611a5791906156cf565b60d254909150611a70906001600160a01b031682614137565b81817f604b365b22dbda1203004fba26c477ed19c49ad01cadf6eedf5f17f52ebbae1881611a9e8488614bd1565b611aa89190614bd1565b6040519081526020015b60405180910390a3505050565b611ad76000805160206159288339815191523361216f565b611af457604051631a76708960e21b815260040160405180910390fd5b611afd816142f6565b50565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b779190615715565b6001600160a01b0316634703e001336040518263ffffffff1660e01b8152600401611ba29190614fd9565b602060405180830381865afa158015611bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be3919061556a565b600003611c03576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c76919061556a565b611c809042615583565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb919061556a565b611d059083615583565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b8152600401611d6a9190614fd9565b600060405180830381865afa158015611d87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611daf9190810190615754565b604051611dbe939291906157ca565b60405180910390a350505050565b60cf5460405160248101839052336044820152610f12916001600160a01b031690630744132360e21b90606401610edb565b6001600160a01b031660009081526097602052604090205490565b33600081815260d660205260408120549003611e485760405163012d886f60e51b815260040160405180910390fd5b611e5182613c9f565b6001600160a01b038116600090815260d8602052604081208054849290611e79908490615583565b925050819055508160ca6000828254611e929190615583565b90915550506001600160a01b038116600081815260d8602090815260408083205460d79092529091205460008051602061596883398151915291611ed591614bd1565b60405190815260200160405180910390a26000805160206159a883398151915260ca5460c954611f059190614bd1565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611f35903090600401614fd9565b602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f76919061556a565b6040805192835260208301919091520160405180910390a15050565b6060600060dc5460db54611fa69190614bd1565b9050806001600160401b03811115611fc057611fc0614e8e565b60405190808252806020026020018201604052801561201e57816020015b61200b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611fde5790505b50915060005b818110156120ac5760da60008260dc5461203e9190615583565b81526020808201929092526040908101600020815160608101835281546001600160a01b031681526001820154938101939093526002015490820152835184908390811061208e5761208e615554565b602002602001018190525080806120a49061559b565b915050612024565b505090565b60cf5460405160248101839052610f12916001600160a01b03169063211cccd160e21b90604401610edb565b6120f56000805160206159288339815191523361216f565b61211257604051631a76708960e21b815260040160405180910390fd5b61211e60e18383614aae565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d09061216390869086906154db565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610d1f90615478565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af115801561220e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122329190615732565b5061223d3382614137565b611afd60006120b1565b6000338161225582866136e6565b9050838110156122b55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611571565b6111df8286868403613ae2565b60d3546001600160a01b031633146122ed5760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d660205260409020548490156123135750611120565b8460148390036123285750823560601c612335565b6020839003612335575082355b61233f8186614137565b6111be60006120b1565b600061235482611dfe565b60000361236357506000919050565b610d0a630de731f360e31b61237784611dfe565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614393565b60d5818154811061106b57600080fd5b600033610db0818585613e25565b60db5460dc541480612491575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246f919061556a565b60dc54600090815260da602052604090206002015461248e9190615583565b42105b156124cb576124ae6000805160206159288339815191523361216f565b6124cb57604051631a76708960e21b815260040160405180910390fd5b60d0546040516124f6916001600160a01b031690633d16f42d60e01b90610edb908690602401614fd9565b50610f12816120b1565b600054610100900460ff16158080156125205750600054600160ff909116105b8061253a5750303b15801561253a575060005460ff166001145b61259d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611571565b6000805460ff1916600117905580156125c0576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b0389161790556125e3614429565b6125fb60008051602061590883398151915287614452565b61261360008051602061592883398151915287614452565b61263960008051602061592883398151915260008051602061590883398151915261445c565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556126ae85806144a7565b6126b9600033614452565b83516126cc9060e1906020870190614b32565b506126d6836142f6565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b179052612715916001600160a01b031690613bfe565b50801561275c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190615715565b6001600160a01b0316634703e001836040518263ffffffff1660e01b81526004016128089190614fd9565b602060405180830381865afa158015612825573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612849919061556a565b600003612869576040516359e9fbbf60e11b815260040160405180910390fd5b60db5460dc541461288d5760405163763643d360e11b815260040160405180910390fd5b60d160009054906101000a90046001600160a01b03166001600160a01b0316637b94dead6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612904919061556a565b60995461291191906156b0565b60d254612926906001600160a01b0316611dfe565b61293890670de0b6b3a76400006156b0565b11612a005760d254612952906001600160a01b0316611dfe565b60d15460408051637b94dead60e01b81529051670de0b6b3a7640000926001600160a01b031691637b94dead9160048083019260209291908290030181865afa1580156129a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c7919061556a565b6099546129d491906156b0565b6129de91906156cf565b60405163c89199b360e01b815260048101929092526024820152604401611571565b60d35460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612a3290859085906004016155b4565b6020604051808303816000875af1158015612a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a759190615732565b506040516356e4bb9760e11b81526001600160a01b0383169063adc9772e90612aa490309085906004016155b4565b600060405180830381600087803b158015612abe57600080fd5b505af1158015612ad2573d6000803e3d6000fd5b505050506001600160a01b038216600090815260d7602052604081208054839290612afe908490615583565b925050819055508060c96000828254612b179190615583565b90915550506001600160a01b038216600090815260d660205260408120549003612bbf5760d580546001810182557f51858de9989bf7441865ebdadbf7382c8838edbf830f5d86a9a51ac773676dd60180546001600160a01b0319166001600160a01b0385169081179091559054600082815260d660205260408082209290925590517f77338642d9284a44296d29a273e04b8ab6b15c7d2439094cd460b7e4f0b330749190a25b60d160009054906101000a90046001600160a01b03166001600160a01b031663be60040e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c369190615715565b6001600160a01b0316636a1ba88c306040518263ffffffff1660e01b8152600401612c619190614fd9565b6020604051808303816000875af1158015612c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca49190615732565b506001600160a01b038216600081815260d8602090815260408083205460d79092529091205460008051602061596883398151915291611ed591614bd1565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd290612d159060df906004016157e9565b600060405180830381865afa158015612d32573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5a9190810190615754565b905090565b612d776000805160206159288339815191523361216f565b612d9457604051631a76708960e21b815260040160405180910390fd5b60d05460405161124b916001600160a01b03169063aa0d97b360e01b90610edb90869086906024016155b4565b60d3546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612df2903090600401614fd9565b602060405180830381865afa158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e33919061556a565b9050816001600160a01b0316632def66206040518163ffffffff1660e01b81526004016020604051808303816000875af11580156116e8573d6000803e3d6000fd5b6001600160a01b038216600090815260d7602052604081205460c9805491929091612ea1908490614bd1565b90915550506001600160a01b038216600090815260d8602052604081205460ca805491929091612ed2908490614bd1565b90915550506001600160a01b038216600090815260d76020526040902054811015612f5c576001600160a01b038216600090815260d76020526040812054612f1b908390614bd1565b90507fb65b2e085d7d040c313f7d4e1ac90f5937026fee497e0e24a7eff16a55e1c5ea81604051612f4e91815260200190565b60405180910390a150612f8c565b6001600160a01b038216600090815260d76020526040812054612f7f9083614bd1565b9050612f8a816118b3565b505b60d160009054906101000a90046001600160a01b03166001600160a01b031663be60040e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190615715565b6001600160a01b0316636a1ba88c306040518263ffffffff1660e01b815260040161302e9190614fd9565b6020604051808303816000875af115801561304d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130719190615732565b506001600160a01b038216600090815260d6602052604081205461309790600190614bd1565b60d580549192506000916130ad90600190614bd1565b815481106130bd576130bd615554565b60009182526020909120015460d580546001600160a01b0390921692508291849081106130ec576130ec615554565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060d580548061312b5761312b6157fc565b600082815260209020810160001990810180546001600160a01b0319169055019055613158826001615583565b6001600160a01b03808316600090815260d6602090815260408083209490945591871680825283822082905560d7835283822082905560d8909252828120819055915190917f908e667f6c2b13b8062954eb100253ea804c21222b190449e40d967a3ac0ff1391a2836001600160a01b031660008051602061596883398151915260006040516131ea91815260200190565b60405180910390a26000805160206159a883398151915260ca5460c9546132119190614bd1565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190613241903090600401614fd9565b602060405180830381865afa15801561325e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613282919061556a565b6040805192835260208301919091520160405180910390a150505050565b60006132ab81614040565b60cc80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526111209190632522e97360e11b90604401610edb565b33600090815260de6020526040812054900361331857604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906117eb90859085906004016155b4565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a082319061337f903090600401614fd9565b602060405180830381865afa15801561339c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c0919061556a565b6133ca9190615583565b612d5a9190614bd1565b6133ec6000805160206159288339815191523361216f565b61340957604051631a76708960e21b815260040160405180910390fd5b6134138282611822565b610f1260006120b1565b60008281526065602052604090206001015461343881614040565b61124b83836140d0565b8060000361345357610f1282612dc1565b6040516338106e4d60e01b8152600481018290526000906001600160a01b038416906338106e4d906024016020604051808303816000875af115801561349d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c1919061556a565b6001600160a01b038416600090815260d760205260408120805492935083929091906134ee908490614bd1565b925050819055508060c960008282546135079190614bd1565b909155505060d15460408051635f30020760e11b815290516001600160a01b039092169163be60040e916004808201926020929091908290030181865afa158015613556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357a9190615715565b6001600160a01b0316636a1ba88c306040518263ffffffff1660e01b81526004016135a59190614fd9565b6020604051808303816000875af11580156135c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e89190615732565b506001600160a01b038316600081815260d8602090815260408083205460d7909252909120546000805160206159688339815191529161362791614bd1565b6040519081526020015b60405180910390a26000805160206159a883398151915260ca5460c9546136589190614bd1565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190613688903090600401614fd9565b602060405180830381865afa1580156136a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c9919061556a565b6040805192835260208301919091520160405180910390a1505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b600061371b613346565b9050600061372883611884565b9050336137436000805160206159288339815191528261216f565b15801561376657506001600160a01b038116600090815260de6020526040902054155b156139ce576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ed919061556a565b6137f790866156b0565b61380191906156cf565b9050808311156139cc576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388d919061556a565b61389790866156b0565b6138a191906156cf565b90506138ac81613c9f565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906138de90869085906004016155b4565b6020604051808303816000875af11580156138fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139219190615732565b506000805160206159a883398151915260ca5460c9546139419190614bd1565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190613971903090600401614fd9565b602060405180830381865afa15801561398e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b2919061556a565b6040805192835260208301919091520160405180910390a1505b505b61112060006120b1565b6139f06000805160206159288339815191523361216f565b613a0d57604051631a76708960e21b815260040160405180910390fd5b61223d81610e7b565b6000613a2181614040565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526111209190632522e97360e11b90604401610edb565b60cf5460405161124b916001600160a01b031690637a227c9f60e01b90610edb9086908690602401615812565b60df805461159190615478565b6000613aa481614040565b60cd80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526111209190632522e97360e11b90604401610edb565b6001600160a01b038316613b445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611571565b6001600160a01b038216613ba55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611571565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611ab2565b6000806000846001600160a01b031684604051613c1b9190614c73565b600060405180830381855af49150503d8060008114613c56576040519150601f19603f3d011682016040523d82523d6000602084013e613c5b565b606091505b509150915081613c93578051600003613c8b57848460405163918623b760e01b81526004016115719291906156f1565b805181602001fd5b60200151949350505050565b60d254600090613cb7906001600160a01b0316611dfe565b905080600003613cc5575050565b60cc5460405160248101849052600091613cf6916001600160a01b0390911690632b911c0960e21b90604401610edb565b90506000613d0483836144d8565b60d254909150613d1d906001600160a01b0316826144f0565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b0316600080516020615948833981519152613d8282611dfe565b609954613d8d613346565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000613dbd84846136e6565b905060001981146111205781811015613e185760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611571565b6111208484848403613ae2565b6000613e3083611dfe565b159050613e3e848484614612565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015613e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eac919061556a565b905080613eb886611dfe565b108015613ecd57506000613ecb86611dfe565b115b15613eff57613edb85611dfe565b6040516324c6940760e01b8152600481019190915260248101829052604401611571565b80613f0985611dfe565b1015613f1857613edb84611dfe565b8115613f5c5760cb546001600160a01b031615613f5c5760cb54604051613f5a916001600160a01b03169063217fb33b60e01b90610edb908890602401614fd9565b505b60cd546001600160a01b031615613fa35760cd546040516001600160a01b03878116602483015260006044830152613fa1921690633608993560e21b90606401610edb565b505b846001600160a01b0316600080516020615948833981519152613fc587611dfe565b609954613fd0613346565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b031660008051602061594883398151915261401086611dfe565b60995461401b613346565b6040805193845260208401929092529082015260600160405180910390a25050505050565b611afd81336147ab565b614054828261216f565b610f125760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561408c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6140da828261216f565b15610f125760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60cc54604051602481018390526044810183905260009161416f916001600160a01b0390911690633a49b55760e21b90606401610edb565b905061417b8382614804565b60d2546001600160a01b038481169116146142595760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe919061556a565b90508061420a85611dfe565b101561421957613edb84611dfe565b60cb546001600160a01b0316156142575760cb54604051614255916001600160a01b03169063217fb33b60e01b90610edb908890602401614fd9565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab906142a69085815260200190565b60405180910390a2826001600160a01b03166000805160206159488339815191526142d085611dfe565b6099546142db613346565b60408051938452602084019290925290820152606001613631565b60c95415614317576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a764000081111561434357604051631e6f460160e31b815260048101829052602401611571565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d0906143889060e1906157e9565b60405180910390a350565b6000806000306001600160a01b0316846040516143b09190614c73565b600060405180830381855afa9150503d80600081146143eb576040519150601f19603f3d011682016040523d82523d6000602084013e6143f0565b606091505b50915091508161441e578051600003613c8b578360405163029801d760e41b81526004016115719190614ce5565b602001519392505050565b600054610100900460ff166144505760405162461bcd60e51b815260040161157190615836565b565b610f12828261404a565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166144ce5760405162461bcd60e51b815260040161157190615836565b610f1282826148b3565b60008183106144e757816144e9565b825b9392505050565b6001600160a01b0382166145505760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611571565b6001600160a01b038216600090815260976020526040902054818110156145c45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611571565b6001600160a01b0383166000818152609760209081526040808320868603905560998054879003905551858152919291600080516020615988833981519152910160405180910390a3505050565b6001600160a01b0383166146765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611571565b6001600160a01b0382166146d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611571565b6001600160a01b038316600090815260976020526040902054818110156147505760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611571565b6001600160a01b0380851660008181526097602052604080822086860390559286168082529083902080548601905591516000805160206159888339815191529061479e9086815260200190565b60405180910390a3611120565b6147b5828261216f565b610f12576147c281614901565b6147cd836020614913565b6040516020016147de929190615881565b60408051601f198184030181529082905262461bcd60e51b825261157191600401614ce5565b6001600160a01b03821661485a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611571565b806099600082825461486c9190615583565b90915550506001600160a01b038216600081815260976020908152604080832080548601905551848152600080516020615988833981519152910160405180910390a35050565b600054610100900460ff166148da5760405162461bcd60e51b815260040161157190615836565b81516148ed90609a906020850190614b32565b50805161124b90609b906020840190614b32565b6060610d0a6001600160a01b03831660145b606060006149228360026156b0565b61492d906002615583565b6001600160401b0381111561494457614944614e8e565b6040519080825280601f01601f19166020018201604052801561496e576020820181803683370190505b509050600360fc1b8160008151811061498957614989615554565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106149b8576149b8615554565b60200101906001600160f81b031916908160001a90535060006149dc8460026156b0565b6149e7906001615583565b90505b6001811115614a5f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614a1b57614a1b615554565b1a60f81b828281518110614a3157614a31615554565b60200101906001600160f81b031916908160001a90535060049490941c93614a58816158f0565b90506149ea565b5083156144e95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611571565b828054614aba90615478565b90600052602060002090601f016020900481019282614adc5760008555614b22565b82601f10614af55782800160ff19823516178555614b22565b82800160010185558215614b22579182015b82811115614b22578235825591602001919060010190614b07565b50614b2e929150614ba6565b5090565b828054614b3e90615478565b90600052602060002090601f016020900481019282614b605760008555614b22565b82601f10614b7957805160ff1916838001178555614b22565b82800160010185558215614b22579182015b82811115614b22578251825591602001919060010190614b8b565b5b80821115614b2e5760008155600101614ba7565b634e487b7160e01b600052601160045260246000fd5b600082821015614be357614be3614bbb565b500390565b60008085851115614bf857600080fd5b83861115614c0557600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015614c3f5780818660140360031b1b83161692505b505092915050565b60005b83811015614c62578181015183820152602001614c4a565b838111156111205750506000910152565b60008251614c85818460208701614c47565b9190910192915050565b600060208284031215614ca157600080fd5b81356001600160e01b0319811681146144e957600080fd5b60008151808452614cd1816020860160208601614c47565b601f01601f19169290920160200192915050565b6020815260006144e96020830184614cb9565b6001600160a01b0381168114611afd57600080fd5b60008060408385031215614d2057600080fd5b8235614d2b81614cf8565b946020939093013593505050565b60008083601f840112614d4b57600080fd5b5081356001600160401b03811115614d6257600080fd5b602083019150836020828501011115614d7a57600080fd5b9250929050565b60008060208385031215614d9457600080fd5b82356001600160401b03811115614daa57600080fd5b614db685828601614d39565b90969095509350505050565b600060208284031215614dd457600080fd5b81356144e981614cf8565b60008083601f840112614df157600080fd5b5081356001600160401b03811115614e0857600080fd5b6020830191508360208260051b8501011115614d7a57600080fd5b60008060008060408587031215614e3957600080fd5b84356001600160401b0380821115614e5057600080fd5b614e5c88838901614ddf565b90965094506020870135915080821115614e7557600080fd5b50614e8287828801614ddf565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614ec657614ec6614e8e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614ef457614ef4614e8e565b604052919050565b600082601f830112614f0d57600080fd5b813560206001600160401b03821115614f2857614f28614e8e565b8160051b614f37828201614ecc565b9283528481018201928281019087851115614f5157600080fd5b83870192505b84831015614f79578235614f6a81614cf8565b82529183019190830190614f57565b979650505050505050565b600060208284031215614f9657600080fd5b81356001600160401b03811115614fac57600080fd5b614fb884828501614efc565b949350505050565b600060208284031215614fd257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000806040838503121561500057600080fd5b50508035926020909101359150565b60008060006060848603121561502457600080fd5b833561502f81614cf8565b9250602084013561503f81614cf8565b929592945050506040919091013590565b6000806020838503121561506357600080fd5b82356001600160401b0381111561507957600080fd5b614db685828601614ddf565b600081518084526020808501945080840160005b838110156150be5781516001600160a01b031687529582019590820190600101615099565b509495945050505050565b6020815260006144e96020830184615085565b6060815260006150ef6060830186615085565b82810360208481019190915285518083528682019282019060005b818110156151265784518352938301939183019160010161510a565b5050809350505050826040830152949350505050565b6000806040838503121561514f57600080fd5b82359150602083013561516181614cf8565b809150509250929050565b60006001600160401b0382111561518557615185614e8e565b50601f01601f191660200190565b600082601f8301126151a457600080fd5b81356151b76151b28261516c565b614ecc565b8181528460208386010111156151cc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156151fe57600080fd5b833561520981614cf8565b9250602084013561521981614cf8565b915060408401356001600160401b0381111561523457600080fd5b61524086828701615193565b9150509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561529f57815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101615267565b5091979650505050505050565b600080600080606085870312156152c257600080fd5b84356152cd81614cf8565b93506020850135925060408501356001600160401b038111156152ef57600080fd5b614e8287828801614d39565b600080600080600080600061012080898b03121561531857600080fd5b883561532381614cf8565b975060208981013561533481614cf8565b975060408a013561534481614cf8565b965060608a01356001600160401b038082111561536057600080fd5b61536c8d838e01615193565b975060808c013591508082111561538257600080fd5b5061538f8c828d01615193565b95505060a08a013593508a60df8b01126153a857600080fd5b6153b0614ea4565b918a0191808c8411156153c257600080fd5b60c08c015b848110156153e75780356153da81614cf8565b83529183019183016153c7565b508094505050505092959891949750929550565b6000806040838503121561540e57600080fd5b823561541981614cf8565b9150602083013561516181614cf8565b6000806040838503121561543c57600080fd5b823561544781614cf8565b915060208301356001600160401b0381111561546257600080fd5b61546e85828601614efc565b9150509250929050565b600181811c9082168061548c57607f821691505b6020821081036154ac57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000614fb86020830184866154b2565b8183526000602080850194508260005b858110156150be57813561551281614cf8565b6001600160a01b0316875295820195908201906001016154ff565b6040815260006155416040830186886154ef565b8281036020840152614f798185876154ef565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561557c57600080fd5b5051919050565b6000821982111561559657615596614bbb565b500190565b6000600182016155ad576155ad614bbb565b5060010190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c90808316806155e757607f831692505b6020808410820361560857634e487b7160e01b600052602260045260246000fd5b8388526020880182801561562357600181146156345761565f565b60ff1987168252828201975061565f565b60008981526020902060005b8781101561565957815484820152908601908401615640565b83019850505b5050505050505092915050565b60408152600061567f60408301866155cd565b82810360208401526156928185876154b2565b9695505050505050565b602081526000614fb86020830184866154ef565b60008160001904831182151516156156ca576156ca614bbb565b500290565b6000826156ec57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201819052600090614fb890830184614cb9565b60006020828403121561572757600080fd5b81516144e981614cf8565b60006020828403121561574457600080fd5b815180151581146144e957600080fd5b60006020828403121561576657600080fd5b81516001600160401b0381111561577c57600080fd5b8201601f8101841361578d57600080fd5b805161579b6151b28261516c565b8181528560208385010111156157b057600080fd5b6157c1826020830160208601614c47565b95945050505050565b8381528260208201526060604082015260006157c16060830184614cb9565b6020815260006144e960208301846155cd565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0383168152604060208201819052600090614fb890830184615085565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516158b3816017850160208801614c47565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516158e4816028840160208801614c47565b01602801949350505050565b6000816158ff576158ff614bbb565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef5183989dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a26469706673582212202ec7ba61e84b1833add514eee1894580c3a634b3adc38fe367c5af0d5cb4bb2564736f6c634300080d0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
