{
  "_format": "hh-sol-artifact-1",
  "contractName": "SwapERC20",
  "sourceName": "contracts/SwapERC20.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_protocolFeeLight",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_protocolFeeWallet",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_bonusScale",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_bonusMax",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MaxTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NewOwnerIsZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoHandoverRequest",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "NonceAlreadyUsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OrderExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProtocolFeeInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProtocolFeeLightInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProtocolFeeWalletInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ScaleTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignatoryInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignatureInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "StakingInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFromFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        }
      ],
      "name": "Authorize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        }
      ],
      "name": "Cancel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipHandoverCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipHandoverRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        }
      ],
      "name": "Revoke",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "bonusMax",
          "type": "uint256"
        }
      ],
      "name": "SetBonusMax",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "bonusScale",
          "type": "uint256"
        }
      ],
      "name": "SetBonusScale",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "protocolFee",
          "type": "uint256"
        }
      ],
      "name": "SetProtocolFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "protocolFeeLight",
          "type": "uint256"
        }
      ],
      "name": "SetProtocolFeeLight",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "feeWallet",
          "type": "address"
        }
      ],
      "name": "SetProtocolFeeWallet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staking",
          "type": "address"
        }
      ],
      "name": "SetStaking",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        }
      ],
      "name": "SwapERC20",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FEE_DIVISOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ORDER_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signatory",
          "type": "address"
        }
      ],
      "name": "authorize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "authorized",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bonusMax",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bonusScale",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakingBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "name": "calculateBonus",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "wallet",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "calculateProtocolFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "nonces",
          "type": "uint256[]"
        }
      ],
      "name": "cancel",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cancelOwnershipHandover",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "senderWallet",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "signerToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "signerAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "senderToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "senderAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "check",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "completeOwnershipHandover",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "nonceUsed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "result",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "ownershipHandoverExpiresAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "result",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolFeeLight",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolFeeWallet",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "requestOwnershipHandover",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "revoke",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_bonusMax",
          "type": "uint256"
        }
      ],
      "name": "setBonusMax",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_bonusScale",
          "type": "uint256"
        }
      ],
      "name": "setBonusScale",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "setProtocolFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_protocolFeeLight",
          "type": "uint256"
        }
      ],
      "name": "setProtocolFeeLight",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_protocolFeeWallet",
          "type": "address"
        }
      ],
      "name": "setProtocolFeeWallet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_stakingToken",
          "type": "address"
        }
      ],
      "name": "setStaking",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakingToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "signerToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "signerAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "senderToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "senderAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "swap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "signerToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "signerAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "senderToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "senderAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "swapAnySender",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "signerToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "signerAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "senderToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "senderAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "swapLight",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101406040523480156200001257600080fd5b5060405162002fbd38038062002fbd833981016040819052620000359162000275565b306080524660a05260608062000082604080518082018252600a8152690535741505f45524332360b41b60208083019190915282518084019093526003835262342e3360e81b9083015291565b815160209283012081519183019190912060c082905260e08190526040805160008051602062002f9d8339815191528152938401929092529082015246606082015230608082015260a090206101005250506127108510620000f75760405163f37b175b60e01b815260040160405180910390fd5b61271084106200011a57604051633d9ef52760e21b815260040160405180910390fd5b6001600160a01b0383166200014257604051633360533760e11b815260040160405180910390fd5b60648111156200016557604051631ba349c560e31b815260040160405180910390fd5b604d821115620001885760405163cca4057d60e01b815260040160405180910390fd5b6200019333620001dc565b6200019d62000218565b61012052600294909455600392909255600480546001600160a01b0319166001600160a01b0392909216919091179055600691909155600555620002ce565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b610100516200023160a051608051301446909114161590565b1562000272575060c05160e0516040805160008051602062002f9d8339815191528152602081019390935282015246606082015230608082015260a0902090565b90565b600080600080600060a086880312156200028e57600080fd5b85516020870151604088015191965094506001600160a01b0381168114620002b557600080fd5b6060870151608090970151959894975095949392505050565b60805160a05160c05160e0516101005161012051612c7f6200031e600039600061028f01526000612144015260006121fe015260006121d801526000612188015260006121650152612c7f6000f3fe6080604052600436106102195760003560e01c80638ff390991161011d578063b9cb01b0116100b0578063f04e283e1161007f578063f4ebc69911610064578063f4ebc6991461062d578063f973a20914610643578063fee81cf41461065857600080fd5b8063f04e283e14610607578063f2fde38b1461061a57600080fd5b8063b9cb01b014610577578063bfd4e557146105a4578063c5c62a7d146105c4578063cbf7c6c3146105da57600080fd5b8063b0e21e8a116100ec578063b0e21e8a146104e9578063b6549f75146104ff578063b6a5d7de14610514578063b91816111461053457600080fd5b80638ff390991461047357806398956069146104935780639cff19e0146104b35780639e93ad8e146104d357600080fd5b80636f72fd20116101b0578063787dce3d1161017f5780637ce78525116101645780637ce78525146103f757806384b0196e146104175780638da5cb5b1461043f57600080fd5b8063787dce3d146103c15780637aba86d2146103e157600080fd5b80636f72fd20146103275780636fb30d4314610347578063715018a61461036757806372f702f31461036f57600080fd5b80633eb1af24116101ec5780633eb1af24146102bf57806346e4480d146102df57806352c5f1f5146102ff57806354d1f13d1461031f57600080fd5b80631647795e1461021e57806325692962146102535780632e3408231461025d5780633644e5151461027d575b600080fd5b34801561022a57600080fd5b5061023e610239366004612638565b61068b565b60405190151581526020015b60405180910390f35b61025b6106ee565b005b34801561026957600080fd5b5061025b610278366004612662565b61073e565b34801561028957600080fd5b506102b17f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161024a565b3480156102cb57600080fd5b5061025b6102da3660046126e8565b6107b1565b3480156102eb57600080fd5b5061025b6102fa36600461278a565b610838565b34801561030b57600080fd5b506102b161031a366004612638565b610c88565b61025b610d92565b34801561033357600080fd5b506102b161034236600461281a565b610dce565b34801561035357600080fd5b5061025b61036236600461283c565b610e25565b61025b610ea4565b34801561037b57600080fd5b5060075461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161024a565b3480156103cd57600080fd5b5061025b6103dc36600461283c565b610eb8565b3480156103ed57600080fd5b506102b160065481565b34801561040357600080fd5b5061025b610412366004612855565b610f30565b34801561042357600080fd5b5061042c610ff4565b60405161024a97969594939291906128d4565b34801561044b57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275461039c565b34801561047f57600080fd5b5061025b61048e366004612855565b61109d565b34801561049f57600080fd5b5061025b6104ae3660046126e8565b611161565b3480156104bf57600080fd5b5061025b6104ce36600461283c565b611174565b3480156104df57600080fd5b506102b161271081565b3480156104f557600080fd5b506102b160025481565b34801561050b57600080fd5b5061025b6111ec565b34801561052057600080fd5b5061025b61052f366004612855565b611269565b34801561054057600080fd5b5061039c61054f366004612855565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561058357600080fd5b506105976105923660046126e8565b611331565b60405161024a9190612996565b3480156105b057600080fd5b5061025b6105bf36600461283c565b611ba4565b3480156105d057600080fd5b506102b160055481565b3480156105e657600080fd5b5060045461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b61025b610615366004612855565b611c1c565b61025b610628366004612855565b611c5c565b34801561063957600080fd5b506102b160035481565b34801561064f57600080fd5b506102b1611c83565b34801561066457600080fd5b506102b1610673366004612855565b63389a75e1600c908152600091909152602090205490565b60008061069a61010084612a38565b905060006106aa61010085612a4c565b73ffffffffffffffffffffffffffffffffffffffff861660009081526020818152604080832095835294905292909220546001921c82169091149150505b92915050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b60005b818110156107ac57600083838381811061075d5761075d612a60565b9050602002013590506107703382611db3565b156107a357604051339082907f8dd3c361eb2366ff27c2db0eb07b9261f1d052570742ab8c9a0c326f37aa576d90600090a35b50600101610741565b505050565b6107c58a8a8a8a8a60008b8b8b8b8b611e62565b6107d185338a87611fd3565b6107dd87898d89611fd3565b6107e8878988612030565b60405173ffffffffffffffffffffffffffffffffffffffff8916908b907f4294f3cfba9ff22cfa9cb602947f7656aa160c0a6c8fa406a28e12bed6bf209390600090a35050505050505050505050565b428911610871576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a4d610a45604051602001610990907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600354918401529082018f9052606082018e905273ffffffffffffffffffffffffffffffffffffffff808e166080840152808d1660a084015260c083018c905260e08301919091523361010083015289166101208201526101408101889052610160015b60405160208183030381529060405280519060200120612142565b85858561225a565b905073ffffffffffffffffffffffffffffffffffffffff8116610a9c576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa6818c611db3565b610ae4576040517f91cab504000000000000000000000000000000000000000000000000000000008152600481018c90526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8981166000908152600160205260409020541615610b795773ffffffffffffffffffffffffffffffffffffffff808a16600090815260016020526040902054828216911614610b74576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bde565b8873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bde576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bea86338b88611fd3565b610bf6888a338a611fd3565b600454600354610c38918a918c9173ffffffffffffffffffffffffffffffffffffffff169061271090610c29908d612a8f565b610c339190612a38565b611fd3565b60405173ffffffffffffffffffffffffffffffffffffffff8a16908c907f4294f3cfba9ff22cfa9cb602947f7656aa160c0a6c8fa406a28e12bed6bf209390600090a35050505050505050505050565b60008061271060025484610c9c9190612a8f565b610ca69190612a38565b60075490915073ffffffffffffffffffffffffffffffffffffffff1615801590610cd05750600081115b15610d8b576007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600092610d76929116906370a08231906024015b602060405180830381865afa158015610d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d709190612aa6565b83610dce565b9050610d828183612abf565b925050506106e8565b9392505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b60008083600554600a610de19190612bf2565b610deb9190612bfe565b90506064818486600654610dff9190612a8f565b610e099190612a8f565b610e139190612a38565b610e1d9190612a38565b949350505050565b610e2d612298565b604d811115610e68576040517fcca4057d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058190556040518181527fcc5b12dfbda3644d5f3190b40ad8215d4aaac870df5c8112735085679d7cc333906020015b60405180910390a150565b610eac612298565b610eb660006122ce565b565b610ec0612298565b6127108110610efb576040517ff37b175b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fdc0410a296e1e33943a772020d333d5f99319d7fcad932a484c53889f7aaa2b190602001610e99565b610f38612298565b73ffffffffffffffffffffffffffffffffffffffff8116610f85576040517f66c0a66e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f8b2a800ce9e2e7ccdf4741ae0e41b1f16983192291080ae3b78ac4296ddf598a90600090a250565b7f0f00000000000000000000000000000000000000000000000000000000000000606080600080808361108b604080518082018252600a81527f535741505f4552433230000000000000000000000000000000000000000000006020808301919091528251808401909352600383527f342e3300000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b6110a5612298565b73ffffffffffffffffffffffffffffffffffffffff81166110f2576040517f71758b7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f58fd5d9c33114e6edf8ea5d30956f8d1a4ab112b004f99928b4bcf1b87d6666290600090a250565b6107c58a8a8a8a8a338b8b8b8b8b611e62565b61117c612298565b60648111156111b7576040517fdd1a4e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068190556040518181527fb113403a9e8b9f0173354acc3a5d210c86be40bb7259c19c55cea02227c5026f90602001610e99565b3360008181526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000008116909155905173ffffffffffffffffffffffffffffffffffffffff909116929183917fd7426110292f20fe59e73ccf52124e0f5440a756507c91c7b0a6c50e1eb1a23a9190a350565b73ffffffffffffffffffffffffffffffffffffffff81166112b6576040517fcd4b78cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917f30468de898bda644e26bab66e5a2241a3aa6aaf527257f5ca54e0f65204ba14a91a350565b6040805160078082526101008201909252606091600091906020820160e080368337019050506040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052919250908d8160000181815250508c8160200181815250508b816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508a816060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505089816080018181525050888160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050878160e00181815250508681610100019060ff16908160ff1681525050858161012001818152505084816101400181815250508e8160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600081604001519050600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a95773ffffffffffffffffffffffffffffffffffffffff908116600090815260016020526040902054165b611632816115dd846000015185602001518660400151876060015188608001518960a001518a60c001518b60e00151612334565b60408051602081018c90529081018a90527fff0000000000000000000000000000000000000000000000000000000000000060f88d901b1660608201526061015b6040516020818303038152906040526124fd565b611685577f5369676e6174757265496e76616c696400000000000000000000000000000000848461166281612c11565b95508151811061167457611674612a60565b6020026020010181815250506116e3565b61169381836000015161068b565b156116e3577f4e6f6e6365416c7265616479557365640000000000000000000000000000000084846116c481612c11565b9550815181106116d6576116d6612a60565b6020026020010181815250505b428260200151101561173a577f4f72646572457870697265640000000000000000000000000000000000000000848461171b81612c11565b95508151811061172d5761172d612a60565b6020026020010181815250505b60a082015173ffffffffffffffffffffffffffffffffffffffff16156119525760c082015160a08301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190612aa6565b60c084015160a08501516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015292935060009291169063dd62ed3e90604401602060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190612aa6565b90508360e001518110156118f8577f53656e646572416c6c6f77616e63654c6f77000000000000000000000000000086866118d981612c11565b9750815181106118eb576118eb612a60565b6020026020010181815250505b8360e0015182101561194f577f53656e64657242616c616e63654c6f7700000000000000000000000000000000868661193081612c11565b97508151811061194257611942612a60565b6020026020010181815250505b50505b606082015160408084015190517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612aa6565b606084015160408086015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015292935060009291169063dd62ed3e90604401602060405180830381865afa158015611a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a979190612aa6565b905060006127106002548660800151611ab09190612a8f565b611aba9190612a38565b9050808560800151611acc9190612bfe565b821015611b1e577f5369676e6572416c6c6f77616e63654c6f7700000000000000000000000000008787611aff81612c11565b985081518110611b1157611b11612a60565b6020026020010181815250505b808560800151611b2e9190612bfe565b831015611b80577f5369676e657242616c616e63654c6f77000000000000000000000000000000008787611b6181612c11565b985081518110611b7357611b73612a60565b6020026020010181815250505b86518614611b8c578587525b5094955050505050509b9a5050505050505050505050565b611bac612298565b6127108110611be7576040517ff67bd49c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527f312cc1a9b7287129a22395b9572a3c9ed09ce456f02b519efb34e12bb429eed090602001610e99565b611c24612298565b63389a75e1600c52806000526020600c208054421115611c4c57636f5e88186000526004601cfd5b60009055611c59816122ce565b50565b611c64612298565b8060601b611c7a57637448fbae6000526004601cfd5b611c59816122ce565b604051602001611d9a907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b6040516020818303038152906040528051906020012081565b600080611dc261010084612a38565b90506000611dd261010085612a4c565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208181526040808320868452909152902054909150600181831c81169003611e1d57600093505050506106e8565b73ffffffffffffffffffffffffffffffffffffffff86166000908152602081815260408083209583529490529290922060019182901b92909217909155905092915050565b428a11611e9b576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808a166000908152600160205260409020548a911615611ef35773ffffffffffffffffffffffffffffffffffffffff908116600090815260016020526040902054165b611f4c81611f078e8e8e8e8e8e8e8e612334565b60408051602081018890529081018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16606082015260610161161e565b611f82576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f8c818d611db3565b611fc5576040517f91cab504000000000000000000000000000000000000000000000000000000008152600481018d9052602401610adb565b505050505050505050505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d15600160005114171661202257637939f4246000526004601cfd5b600060605260405250505050565b6000612710600254836120439190612a8f565b61204d9190612a38565b9050801561213c5760075460009073ffffffffffffffffffffffffffffffffffffffff16156120d1576007546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526120ce9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401610d2f565b90505b8015612113576120e385853384611fd3565b60045461210e908690869073ffffffffffffffffffffffffffffffffffffffff16610c338587612abf565b61213a565b60045461213a908690869073ffffffffffffffffffffffffffffffffffffffff1685611fd3565b505b50505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166122355750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60006040518560005260ff85166020528360405282606052602060406080600060015afa5060006060523d6060185191508060405250949350505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610eb6576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60006124f0604051602001612450907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600254918401529082018c9052606082018b905273ffffffffffffffffffffffffffffffffffffffff808b166080840152808a1660a084015260c0830189905260e08301919091528087166101008301528516610120820152610140810184905261016001610a2a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff9092169160008315610d8b57604051836000526020830151604052604083510361257a576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d151761257857506000606052604052506001610d8b565b505b60418351036125c057606083015160001a6020526040830151606052602060016080600060015afa805186183d15176125be57506000606052604052506001610d8b565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461263357600080fd5b919050565b6000806040838503121561264b57600080fd5b6126548361260f565b946020939093013593505050565b6000806020838503121561267557600080fd5b823567ffffffffffffffff8082111561268d57600080fd5b818501915085601f8301126126a157600080fd5b8135818111156126b057600080fd5b8660208260051b85010111156126c557600080fd5b60209290920196919550909350505050565b803560ff8116811461263357600080fd5b60008060008060008060008060008060006101608c8e03121561270a57600080fd5b6127138c61260f565b9a5060208c0135995060408c0135985061272f60608d0161260f565b975061273d60808d0161260f565b965060a08c0135955061275260c08d0161260f565b945060e08c013593506127686101008d016126d7565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d0312156127aa57600080fd5b8a35995060208b013598506127c160408c0161260f565b97506127cf60608c0161260f565b965060808b013595506127e460a08c0161260f565b945060c08b013593506127f960e08c016126d7565b92506101008b013591506101208b013590509295989b9194979a5092959850565b6000806040838503121561282d57600080fd5b50508035926020909101359150565b60006020828403121561284e57600080fd5b5035919050565b60006020828403121561286757600080fd5b610d8b8261260f565b6000815180845260005b818110156128965760208185018101518683018201520161287a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e0602084015261291160e084018a612870565b8381036040850152612923818a612870565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561298457835183529284019291840191600101612968565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129ce578351835292840192918401916001016129b2565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612a4757612a476129da565b500490565b600082612a5b57612a5b6129da565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820281158282048414176106e8576106e8612a09565b600060208284031215612ab857600080fd5b5051919050565b818103818111156106e8576106e8612a09565b600181815b80851115612b2b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612b1157612b11612a09565b80851615612b1e57918102915b93841c9390800290612ad7565b509250929050565b600082612b42575060016106e8565b81612b4f575060006106e8565b8160018114612b655760028114612b6f57612b8b565b60019150506106e8565b60ff841115612b8057612b80612a09565b50506001821b6106e8565b5060208310610133831016604e8410600b8410161715612bae575081810a6106e8565b612bb88383612ad2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612bea57612bea612a09565b029392505050565b6000610d8b8383612b33565b808201808211156106e8576106e8612a09565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c4257612c42612a09565b506001019056fea2646970667358221220f355c0d8ce46a5293d481ec82fb135843d0aa37929f048c3b60d1f2a4231747764736f6c634300081700338b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
  "deployedBytecode": "0x6080604052600436106102195760003560e01c80638ff390991161011d578063b9cb01b0116100b0578063f04e283e1161007f578063f4ebc69911610064578063f4ebc6991461062d578063f973a20914610643578063fee81cf41461065857600080fd5b8063f04e283e14610607578063f2fde38b1461061a57600080fd5b8063b9cb01b014610577578063bfd4e557146105a4578063c5c62a7d146105c4578063cbf7c6c3146105da57600080fd5b8063b0e21e8a116100ec578063b0e21e8a146104e9578063b6549f75146104ff578063b6a5d7de14610514578063b91816111461053457600080fd5b80638ff390991461047357806398956069146104935780639cff19e0146104b35780639e93ad8e146104d357600080fd5b80636f72fd20116101b0578063787dce3d1161017f5780637ce78525116101645780637ce78525146103f757806384b0196e146104175780638da5cb5b1461043f57600080fd5b8063787dce3d146103c15780637aba86d2146103e157600080fd5b80636f72fd20146103275780636fb30d4314610347578063715018a61461036757806372f702f31461036f57600080fd5b80633eb1af24116101ec5780633eb1af24146102bf57806346e4480d146102df57806352c5f1f5146102ff57806354d1f13d1461031f57600080fd5b80631647795e1461021e57806325692962146102535780632e3408231461025d5780633644e5151461027d575b600080fd5b34801561022a57600080fd5b5061023e610239366004612638565b61068b565b60405190151581526020015b60405180910390f35b61025b6106ee565b005b34801561026957600080fd5b5061025b610278366004612662565b61073e565b34801561028957600080fd5b506102b17f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161024a565b3480156102cb57600080fd5b5061025b6102da3660046126e8565b6107b1565b3480156102eb57600080fd5b5061025b6102fa36600461278a565b610838565b34801561030b57600080fd5b506102b161031a366004612638565b610c88565b61025b610d92565b34801561033357600080fd5b506102b161034236600461281a565b610dce565b34801561035357600080fd5b5061025b61036236600461283c565b610e25565b61025b610ea4565b34801561037b57600080fd5b5060075461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161024a565b3480156103cd57600080fd5b5061025b6103dc36600461283c565b610eb8565b3480156103ed57600080fd5b506102b160065481565b34801561040357600080fd5b5061025b610412366004612855565b610f30565b34801561042357600080fd5b5061042c610ff4565b60405161024a97969594939291906128d4565b34801561044b57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275461039c565b34801561047f57600080fd5b5061025b61048e366004612855565b61109d565b34801561049f57600080fd5b5061025b6104ae3660046126e8565b611161565b3480156104bf57600080fd5b5061025b6104ce36600461283c565b611174565b3480156104df57600080fd5b506102b161271081565b3480156104f557600080fd5b506102b160025481565b34801561050b57600080fd5b5061025b6111ec565b34801561052057600080fd5b5061025b61052f366004612855565b611269565b34801561054057600080fd5b5061039c61054f366004612855565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561058357600080fd5b506105976105923660046126e8565b611331565b60405161024a9190612996565b3480156105b057600080fd5b5061025b6105bf36600461283c565b611ba4565b3480156105d057600080fd5b506102b160055481565b3480156105e657600080fd5b5060045461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b61025b610615366004612855565b611c1c565b61025b610628366004612855565b611c5c565b34801561063957600080fd5b506102b160035481565b34801561064f57600080fd5b506102b1611c83565b34801561066457600080fd5b506102b1610673366004612855565b63389a75e1600c908152600091909152602090205490565b60008061069a61010084612a38565b905060006106aa61010085612a4c565b73ffffffffffffffffffffffffffffffffffffffff861660009081526020818152604080832095835294905292909220546001921c82169091149150505b92915050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b60005b818110156107ac57600083838381811061075d5761075d612a60565b9050602002013590506107703382611db3565b156107a357604051339082907f8dd3c361eb2366ff27c2db0eb07b9261f1d052570742ab8c9a0c326f37aa576d90600090a35b50600101610741565b505050565b6107c58a8a8a8a8a60008b8b8b8b8b611e62565b6107d185338a87611fd3565b6107dd87898d89611fd3565b6107e8878988612030565b60405173ffffffffffffffffffffffffffffffffffffffff8916908b907f4294f3cfba9ff22cfa9cb602947f7656aa160c0a6c8fa406a28e12bed6bf209390600090a35050505050505050505050565b428911610871576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a4d610a45604051602001610990907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600354918401529082018f9052606082018e905273ffffffffffffffffffffffffffffffffffffffff808e166080840152808d1660a084015260c083018c905260e08301919091523361010083015289166101208201526101408101889052610160015b60405160208183030381529060405280519060200120612142565b85858561225a565b905073ffffffffffffffffffffffffffffffffffffffff8116610a9c576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa6818c611db3565b610ae4576040517f91cab504000000000000000000000000000000000000000000000000000000008152600481018c90526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8981166000908152600160205260409020541615610b795773ffffffffffffffffffffffffffffffffffffffff808a16600090815260016020526040902054828216911614610b74576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bde565b8873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bde576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bea86338b88611fd3565b610bf6888a338a611fd3565b600454600354610c38918a918c9173ffffffffffffffffffffffffffffffffffffffff169061271090610c29908d612a8f565b610c339190612a38565b611fd3565b60405173ffffffffffffffffffffffffffffffffffffffff8a16908c907f4294f3cfba9ff22cfa9cb602947f7656aa160c0a6c8fa406a28e12bed6bf209390600090a35050505050505050505050565b60008061271060025484610c9c9190612a8f565b610ca69190612a38565b60075490915073ffffffffffffffffffffffffffffffffffffffff1615801590610cd05750600081115b15610d8b576007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600092610d76929116906370a08231906024015b602060405180830381865afa158015610d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d709190612aa6565b83610dce565b9050610d828183612abf565b925050506106e8565b9392505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b60008083600554600a610de19190612bf2565b610deb9190612bfe565b90506064818486600654610dff9190612a8f565b610e099190612a8f565b610e139190612a38565b610e1d9190612a38565b949350505050565b610e2d612298565b604d811115610e68576040517fcca4057d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058190556040518181527fcc5b12dfbda3644d5f3190b40ad8215d4aaac870df5c8112735085679d7cc333906020015b60405180910390a150565b610eac612298565b610eb660006122ce565b565b610ec0612298565b6127108110610efb576040517ff37b175b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fdc0410a296e1e33943a772020d333d5f99319d7fcad932a484c53889f7aaa2b190602001610e99565b610f38612298565b73ffffffffffffffffffffffffffffffffffffffff8116610f85576040517f66c0a66e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f8b2a800ce9e2e7ccdf4741ae0e41b1f16983192291080ae3b78ac4296ddf598a90600090a250565b7f0f00000000000000000000000000000000000000000000000000000000000000606080600080808361108b604080518082018252600a81527f535741505f4552433230000000000000000000000000000000000000000000006020808301919091528251808401909352600383527f342e3300000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b6110a5612298565b73ffffffffffffffffffffffffffffffffffffffff81166110f2576040517f71758b7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f58fd5d9c33114e6edf8ea5d30956f8d1a4ab112b004f99928b4bcf1b87d6666290600090a250565b6107c58a8a8a8a8a338b8b8b8b8b611e62565b61117c612298565b60648111156111b7576040517fdd1a4e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068190556040518181527fb113403a9e8b9f0173354acc3a5d210c86be40bb7259c19c55cea02227c5026f90602001610e99565b3360008181526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000008116909155905173ffffffffffffffffffffffffffffffffffffffff909116929183917fd7426110292f20fe59e73ccf52124e0f5440a756507c91c7b0a6c50e1eb1a23a9190a350565b73ffffffffffffffffffffffffffffffffffffffff81166112b6576040517fcd4b78cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917f30468de898bda644e26bab66e5a2241a3aa6aaf527257f5ca54e0f65204ba14a91a350565b6040805160078082526101008201909252606091600091906020820160e080368337019050506040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052919250908d8160000181815250508c8160200181815250508b816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508a816060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505089816080018181525050888160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050878160e00181815250508681610100019060ff16908160ff1681525050858161012001818152505084816101400181815250508e8160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600081604001519050600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a95773ffffffffffffffffffffffffffffffffffffffff908116600090815260016020526040902054165b611632816115dd846000015185602001518660400151876060015188608001518960a001518a60c001518b60e00151612334565b60408051602081018c90529081018a90527fff0000000000000000000000000000000000000000000000000000000000000060f88d901b1660608201526061015b6040516020818303038152906040526124fd565b611685577f5369676e6174757265496e76616c696400000000000000000000000000000000848461166281612c11565b95508151811061167457611674612a60565b6020026020010181815250506116e3565b61169381836000015161068b565b156116e3577f4e6f6e6365416c7265616479557365640000000000000000000000000000000084846116c481612c11565b9550815181106116d6576116d6612a60565b6020026020010181815250505b428260200151101561173a577f4f72646572457870697265640000000000000000000000000000000000000000848461171b81612c11565b95508151811061172d5761172d612a60565b6020026020010181815250505b60a082015173ffffffffffffffffffffffffffffffffffffffff16156119525760c082015160a08301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190612aa6565b60c084015160a08501516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015292935060009291169063dd62ed3e90604401602060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190612aa6565b90508360e001518110156118f8577f53656e646572416c6c6f77616e63654c6f77000000000000000000000000000086866118d981612c11565b9750815181106118eb576118eb612a60565b6020026020010181815250505b8360e0015182101561194f577f53656e64657242616c616e63654c6f7700000000000000000000000000000000868661193081612c11565b97508151811061194257611942612a60565b6020026020010181815250505b50505b606082015160408084015190517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612aa6565b606084015160408086015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015292935060009291169063dd62ed3e90604401602060405180830381865afa158015611a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a979190612aa6565b905060006127106002548660800151611ab09190612a8f565b611aba9190612a38565b9050808560800151611acc9190612bfe565b821015611b1e577f5369676e6572416c6c6f77616e63654c6f7700000000000000000000000000008787611aff81612c11565b985081518110611b1157611b11612a60565b6020026020010181815250505b808560800151611b2e9190612bfe565b831015611b80577f5369676e657242616c616e63654c6f77000000000000000000000000000000008787611b6181612c11565b985081518110611b7357611b73612a60565b6020026020010181815250505b86518614611b8c578587525b5094955050505050509b9a5050505050505050505050565b611bac612298565b6127108110611be7576040517ff67bd49c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527f312cc1a9b7287129a22395b9572a3c9ed09ce456f02b519efb34e12bb429eed090602001610e99565b611c24612298565b63389a75e1600c52806000526020600c208054421115611c4c57636f5e88186000526004601cfd5b60009055611c59816122ce565b50565b611c64612298565b8060601b611c7a57637448fbae6000526004601cfd5b611c59816122ce565b604051602001611d9a907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b6040516020818303038152906040528051906020012081565b600080611dc261010084612a38565b90506000611dd261010085612a4c565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208181526040808320868452909152902054909150600181831c81169003611e1d57600093505050506106e8565b73ffffffffffffffffffffffffffffffffffffffff86166000908152602081815260408083209583529490529290922060019182901b92909217909155905092915050565b428a11611e9b576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808a166000908152600160205260409020548a911615611ef35773ffffffffffffffffffffffffffffffffffffffff908116600090815260016020526040902054165b611f4c81611f078e8e8e8e8e8e8e8e612334565b60408051602081018890529081018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16606082015260610161161e565b611f82576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f8c818d611db3565b611fc5576040517f91cab504000000000000000000000000000000000000000000000000000000008152600481018d9052602401610adb565b505050505050505050505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d15600160005114171661202257637939f4246000526004601cfd5b600060605260405250505050565b6000612710600254836120439190612a8f565b61204d9190612a38565b9050801561213c5760075460009073ffffffffffffffffffffffffffffffffffffffff16156120d1576007546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526120ce9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401610d2f565b90505b8015612113576120e385853384611fd3565b60045461210e908690869073ffffffffffffffffffffffffffffffffffffffff16610c338587612abf565b61213a565b60045461213a908690869073ffffffffffffffffffffffffffffffffffffffff1685611fd3565b505b50505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166122355750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60006040518560005260ff85166020528360405282606052602060406080600060015afa5060006060523d6060185191508060405250949350505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610eb6576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60006124f0604051602001612450907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600254918401529082018c9052606082018b905273ffffffffffffffffffffffffffffffffffffffff808b166080840152808a1660a084015260c0830189905260e08301919091528087166101008301528516610120820152610140810184905261016001610a2a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff9092169160008315610d8b57604051836000526020830151604052604083510361257a576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d151761257857506000606052604052506001610d8b565b505b60418351036125c057606083015160001a6020526040830151606052602060016080600060015afa805186183d15176125be57506000606052604052506001610d8b565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461263357600080fd5b919050565b6000806040838503121561264b57600080fd5b6126548361260f565b946020939093013593505050565b6000806020838503121561267557600080fd5b823567ffffffffffffffff8082111561268d57600080fd5b818501915085601f8301126126a157600080fd5b8135818111156126b057600080fd5b8660208260051b85010111156126c557600080fd5b60209290920196919550909350505050565b803560ff8116811461263357600080fd5b60008060008060008060008060008060006101608c8e03121561270a57600080fd5b6127138c61260f565b9a5060208c0135995060408c0135985061272f60608d0161260f565b975061273d60808d0161260f565b965060a08c0135955061275260c08d0161260f565b945060e08c013593506127686101008d016126d7565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d0312156127aa57600080fd5b8a35995060208b013598506127c160408c0161260f565b97506127cf60608c0161260f565b965060808b013595506127e460a08c0161260f565b945060c08b013593506127f960e08c016126d7565b92506101008b013591506101208b013590509295989b9194979a5092959850565b6000806040838503121561282d57600080fd5b50508035926020909101359150565b60006020828403121561284e57600080fd5b5035919050565b60006020828403121561286757600080fd5b610d8b8261260f565b6000815180845260005b818110156128965760208185018101518683018201520161287a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e0602084015261291160e084018a612870565b8381036040850152612923818a612870565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561298457835183529284019291840191600101612968565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129ce578351835292840192918401916001016129b2565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612a4757612a476129da565b500490565b600082612a5b57612a5b6129da565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820281158282048414176106e8576106e8612a09565b600060208284031215612ab857600080fd5b5051919050565b818103818111156106e8576106e8612a09565b600181815b80851115612b2b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612b1157612b11612a09565b80851615612b1e57918102915b93841c9390800290612ad7565b509250929050565b600082612b42575060016106e8565b81612b4f575060006106e8565b8160018114612b655760028114612b6f57612b8b565b60019150506106e8565b60ff841115612b8057612b80612a09565b50506001821b6106e8565b5060208310610133831016604e8410600b8410161715612bae575081810a6106e8565b612bb88383612ad2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612bea57612bea612a09565b029392505050565b6000610d8b8383612b33565b808201808211156106e8576106e8612a09565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c4257612c42612a09565b506001019056fea2646970667358221220f355c0d8ce46a5293d481ec82fb135843d0aa37929f048c3b60d1f2a4231747764736f6c63430008170033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
