{
  "_format": "hh-sol-artifact-1",
  "contractName": "SciRegistry",
  "sourceName": "contracts/SciRegistry/SciRegistry.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint48",
          "name": "_initialDelay",
          "type": "uint48"
        },
        {
          "internalType": "address",
          "name": "_initialDefaultAdmin",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint48",
          "name": "schedule",
          "type": "uint48"
        }
      ],
      "name": "AccessControlEnforcedDefaultAdminDelay",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccessControlEnforcedDefaultAdminRules",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "defaultAdmin",
          "type": "address"
        }
      ],
      "name": "AccessControlInvalidDefaultAdmin",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        }
      ],
      "name": "AccountIsNotDomainOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EnforcedPause",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ExpectedPause",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "bits",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "SafeCastOverflowedUintDowncast",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "DefaultAdminDelayChangeCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "newDelay",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "effectSchedule",
          "type": "uint48"
        }
      ],
      "name": "DefaultAdminDelayChangeScheduled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "DefaultAdminTransferCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "acceptSchedule",
          "type": "uint48"
        }
      ],
      "name": "DefaultAdminTransferScheduled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "registrar",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        }
      ],
      "name": "DomainRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "msgSender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "msgSender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "contract IVerifier",
          "name": "oldVerifier",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IVerifier",
          "name": "newVerifie",
          "type": "address"
        }
      ],
      "name": "VerifierSet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PAUSER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REGISTRAR_MANAGER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REGISTRAR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptDefaultAdminTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "beginDefaultAdminTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cancelDefaultAdminTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint48",
          "name": "newDelay",
          "type": "uint48"
        }
      ],
      "name": "changeDefaultAdminDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultAdminDelay",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultAdminDelayIncreaseWait",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "nameHash",
          "type": "bytes32"
        }
      ],
      "name": "domainHashToRecord",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "contract IVerifier",
          "name": "verifier",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "ownerSetTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "verifierSetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        }
      ],
      "name": "domainOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        }
      ],
      "name": "domainVerifier",
      "outputs": [
        {
          "internalType": "contract IVerifier",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        }
      ],
      "name": "domainVerifierSetTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isDomainOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingDefaultAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        },
        {
          "internalType": "uint48",
          "name": "schedule",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingDefaultAdminDelay",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "newDelay",
          "type": "uint48"
        },
        {
          "internalType": "uint48",
          "name": "schedule",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        }
      ],
      "name": "registerDomain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        },
        {
          "internalType": "contract IVerifier",
          "name": "verifier",
          "type": "address"
        }
      ],
      "name": "registerDomainWithVerifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract ISciRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": [],
      "name": "rollbackDefaultAdminDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "domainHash",
          "type": "bytes32"
        },
        {
          "internalType": "contract IVerifier",
          "name": "verifier",
          "type": "address"
        }
      ],
      "name": "setVerifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a060405234801561001057600080fd5b506040516129683803806129688339818101604052810190610032919061056c565b308282600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a75760006040517fc22c802200000000000000000000000000000000000000000000000000000000815260040161009e91906105bb565b60405180910390fd5b816001601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506100df6000801b8261018960201b60201c565b5050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506000600360006101000a81548160ff0219169083151502179055506101827fedcc084d3dcd65a1f7f23c65c46722faca6953d28e43150a467cf43e5c3092387f3ae1c506296743d7e3d03c7c7fbc7159c94706bb478d44fe35e75190455a750961026260201b60201c565b50506105d6565b60008060001b830361024a57600073ffffffffffffffffffffffffffffffffffffffff166101bb6102b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610208576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61025a83836102dc60201b60201c565b905092915050565b6000801b820361029e576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ae82826103d960201b60201c565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006102ee838361043a60201b60201c565b6103ce57600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061036b6104a460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506103d3565b600090505b92915050565b60006103ea836104ac60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000806000838152602001908152602001600020600101549050919050565b600080fd5b600065ffffffffffff82169050919050565b6104eb816104d0565b81146104f657600080fd5b50565b600081519050610508816104e2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105398261050e565b9050919050565b6105498161052e565b811461055457600080fd5b50565b60008151905061056681610540565b92915050565b60008060408385031215610583576105826104cb565b5b6000610591858286016104f9565b92505060206105a285828601610557565b9150509250929050565b6105b58161052e565b82525050565b60006020820190506105d060008301846105ac565b92915050565b6080516123706105f860003960008181610924015261114b01526123706000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638da5cb5b1161011a578063cc8463c8116100ad578063d547741f1161007c578063d547741f14610581578063d602b9fd1461059d578063dd738e6c146105a7578063e63ab1e9146105c3578063f68e9553146105e1576101fb565b8063cc8463c81461050a578063cefc142914610528578063cf6eefb714610532578063d26cdd2014610551576101fb565b8063a2a6c0eb116100e9578063a2a6c0eb14610484578063a692b9ef146104b4578063a8c00861146104d0578063be8cd266146104ec576101fb565b80638da5cb5b146103f957806391d1485414610417578063a1eda53c14610447578063a217fddf14610466576101fb565b80635b377fa2116101925780637b103999116101615780637b103999146103835780638023597e146103a15780638456cb59146103d157806384ef8ffc146103db576101fb565b80635b377fa2146102fa5780635c975abb1461032d578063634e93da1461034b578063649a5ec714610367576101fb565b80632f2ff15d116101ce5780632f2ff15d1461028857806336568abe146102a45780633f4ba83a146102c05780635a75199a146102ca576101fb565b806301ffc9a714610200578063022d63fb146102305780630aa6220b1461024e578063248a9ca314610258575b600080fd5b61021a60048036038101906102159190611caf565b6105ff565b6040516102279190611cf7565b60405180910390f35b610238610679565b6040516102459190611d33565b60405180910390f35b610256610684565b005b610272600480360381019061026d9190611d84565b61069c565b60405161027f9190611dc0565b60405180910390f35b6102a2600480360381019061029d9190611e39565b6106bb565b005b6102be60048036038101906102b99190611e39565b6106dd565b005b6102c86107f2565b005b6102e460048036038101906102df9190611d84565b610827565b6040516102f19190611ed8565b60405180910390f35b610314600480360381019061030f9190611d84565b610867565b6040516103249493929190611f1b565b60405180910390f35b6103356108d7565b6040516103429190611cf7565b60405180910390f35b61036560048036038101906103609190611f60565b6108ee565b005b610381600480360381019061037c9190611fb9565b610908565b005b61038b610922565b6040516103989190612007565b60405180910390f35b6103bb60048036038101906103b69190611e39565b610946565b6040516103c89190611cf7565b60405180910390f35b6103d9610987565b005b6103e36109bc565b6040516103f09190612022565b60405180910390f35b6104016109e6565b60405161040e9190612022565b60405180910390f35b610431600480360381019061042c9190611e39565b6109f5565b60405161043e9190611cf7565b60405180910390f35b61044f610a5f565b60405161045d92919061203d565b60405180910390f35b61046e610abf565b60405161047b9190611dc0565b60405180910390f35b61049e60048036038101906104999190611d84565b610ac6565b6040516104ab9190612066565b60405180910390f35b6104ce60048036038101906104c991906120bf565b610ae6565b005b6104ea60048036038101906104e591906120ff565b610b02565b005b6104f4610b10565b6040516105019190611dc0565b60405180910390f35b610512610b34565b60405161051f9190611d33565b60405180910390f35b610530610ba2565b005b61053a610c38565b60405161054892919061213f565b60405180910390f35b61056b60048036038101906105669190611d84565b610c7b565b6040516105789190612022565b60405180910390f35b61059b60048036038101906105969190611e39565b610cbb565b005b6105a5610d05565b005b6105c160048036038101906105bc9190612168565b610d1d565b005b6105cb610d36565b6040516105d89190611dc0565b60405180910390f35b6105e9610d5a565b6040516105f69190611dc0565b60405180910390f35b60007f31498786000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610672575061067182610d7e565b5b9050919050565b600062069780905090565b6000801b61069181610df8565b610699610e0c565b50565b6000806000838152602001908152602001600020600101549050919050565b6106c48261069c565b6106cd81610df8565b6106d78383610e19565b50505050565b6000801b8214801561072157506106f26109bc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156107e457600080610731610c38565b91509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580610777575061077581610ee6565b155b80610788575061078681610efb565b155b156107ca57806040517f19ca5ebb0000000000000000000000000000000000000000000000000000000081526004016107c19190611d33565b60405180910390fd5b600160146101000a81549065ffffffffffff021916905550505b6107ee8282610f0f565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081c81610df8565b610824610f8a565b50565b60006004600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154905084565b6000600360009054906101000a900460ff16905090565b6000801b6108fb81610df8565b61090482610fed565b5050565b6000801b61091581610df8565b61091e82611068565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008173ffffffffffffffffffffffffffffffffffffffff1661096884610c7b565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109b181610df8565b6109b96110cf565b50565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006109f06109bc565b905090565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806002601a9054906101000a900465ffffffffffff169050610a8281610ee6565b8015610a945750610a9281610efb565b155b610aa057600080610ab7565b600260149054906101000a900465ffffffffffff16815b915091509091565b6000801b81565b600060046000838152602001908152602001600020600301549050919050565b3382610af28282611132565b610afc8484611241565b50505050565b610b0c828261135f565b5050565b7f3ae1c506296743d7e3d03c7c7fbc7159c94706bb478d44fe35e75190455a750981565b6000806002601a9054906101000a900465ffffffffffff169050610b5781610ee6565b8015610b685750610b6781610efb565b5b610b86576001601a9054906101000a900465ffffffffffff16610b9c565b600260149054906101000a900465ffffffffffff165b91505090565b6000610bac610c38565b5090508073ffffffffffffffffffffffffffffffffffffffff16610bce6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610c2d57610bf16113fb565b6040517fc22c8022000000000000000000000000000000000000000000000000000000008152600401610c249190612022565b60405180910390fd5b610c35611403565b50565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160149054906101000a900465ffffffffffff16915091509091565b60006004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000801b8203610cf7576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0182826114d2565b5050565b6000801b610d1281610df8565b610d1a6114f4565b50565b610d27838361135f565b610d318282611241565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b7fedcc084d3dcd65a1f7f23c65c46722faca6953d28e43150a467cf43e5c30923881565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610df15750610df082611501565b5b9050919050565b610e0981610e046113fb565b61156b565b50565b610e176000806115bc565b565b60008060001b8303610ed457600073ffffffffffffffffffffffffffffffffffffffff16610e456109bc565b73ffffffffffffffffffffffffffffffffffffffff1614610e92576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b610ede83836116ac565b905092915050565b6000808265ffffffffffff1614159050919050565b6000428265ffffffffffff16109050919050565b610f176113fb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f7b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f85828261179d565b505050565b610f92611820565b6000600360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610fd66113fb565b604051610fe39190612022565b60405180910390a1565b6000610ff7610b34565b61100042611860565b61100a91906121ea565b905061101682826118ba565b8173ffffffffffffffffffffffffffffffffffffffff167f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed68260405161105c9190611d33565b60405180910390a25050565b60006110738261196d565b61107c42611860565b61108691906121ea565b905061109282826115bc565b7ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b82826040516110c392919061203d565b60405180910390a15050565b6110d76119cc565b6001600360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861111b6113fb565b6040516111289190612022565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d26cdd20836040518263ffffffff1660e01b81526004016111a29190611dc0565b602060405180830381865afa1580156111bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e39190612239565b73ffffffffffffffffffffffffffffffffffffffff161461123d5781816040517f2ebb0ef6000000000000000000000000000000000000000000000000000000008152600401611234929190612266565b60405180910390fd5b5050565b6112496119cc565b60006004600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816004600085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260046000858152602001908152602001600020600301819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847fc485a79936c258fd12fef44dd3de8d3069f7a6386c10e58329849408c91bbcd2336040516113529190612022565b60405180910390a4505050565b7fedcc084d3dcd65a1f7f23c65c46722faca6953d28e43150a467cf43e5c30923861138981610df8565b6113916119cc565b61139b8284611a0d565b818373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffb904ac70ccbe99b850406bf60ada29496703558524d72bcb9e54b76d1040a6360405160405180910390a4505050565b600033905090565b60008061140e610c38565b9150915061141b81610ee6565b158061142d575061142b81610efb565b155b1561146f57806040517f19ca5ebb0000000000000000000000000000000000000000000000000000000081526004016114669190611d33565b60405180910390fd5b6114836000801b61147e6109bc565b61179d565b506114916000801b83610e19565b50600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160146101000a81549065ffffffffffff02191690555050565b6114db8261069c565b6114e481610df8565b6114ee838361179d565b50505050565b6114ff6000806118ba565b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61157582826109f5565b6115b85780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016115af929190612266565b60405180910390fd5b5050565b60006002601a9054906101000a900465ffffffffffff1690506115de81610ee6565b1561165d576115ec81610efb565b1561162f57600260149054906101000a900465ffffffffffff166001601a6101000a81548165ffffffffffff021916908365ffffffffffff16021790555061165c565b7f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec560405160405180910390a15b5b82600260146101000a81548165ffffffffffff021916908365ffffffffffff160217905550816002601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550505050565b60006116b883836109f5565b61179257600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061172f6113fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611797565b600090505b92915050565b60008060001b831480156117e357506117b46109bc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561180e57600260006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b6118188383611b23565b905092915050565b6118286108d7565b61185e576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600065ffffffffffff80168211156118b2576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016118a99291906122d7565b60405180910390fd5b819050919050565b60006118c4610c38565b91505082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160146101000a81548165ffffffffffff021916908365ffffffffffff16021790555061193681610ee6565b15611968577f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510960405160405180910390a15b505050565b600080611978610b34565b90508065ffffffffffff168365ffffffffffff16116119a257828161199d9190612300565b6119c4565b6119c38365ffffffffffff166119b6610679565b65ffffffffffff16611c15565b5b915050919050565b6119d46108d7565b15611a0b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006004600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260046000858152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847fc4556710b10078aae76dbdf4ad5ea256f74909069bd8af417c5c2aeac18eb28833604051611b169190612022565b60405180910390a4505050565b6000611b2f83836109f5565b15611c0a57600080600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ba76113fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611c0f565b600090505b92915050565b6000611c248284108484611c2c565b905092915050565b6000611c3784611c46565b82841802821890509392505050565b60008115159050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c8c81611c57565b8114611c9757600080fd5b50565b600081359050611ca981611c83565b92915050565b600060208284031215611cc557611cc4611c52565b5b6000611cd384828501611c9a565b91505092915050565b60008115159050919050565b611cf181611cdc565b82525050565b6000602082019050611d0c6000830184611ce8565b92915050565b600065ffffffffffff82169050919050565b611d2d81611d12565b82525050565b6000602082019050611d486000830184611d24565b92915050565b6000819050919050565b611d6181611d4e565b8114611d6c57600080fd5b50565b600081359050611d7e81611d58565b92915050565b600060208284031215611d9a57611d99611c52565b5b6000611da884828501611d6f565b91505092915050565b611dba81611d4e565b82525050565b6000602082019050611dd56000830184611db1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e0682611ddb565b9050919050565b611e1681611dfb565b8114611e2157600080fd5b50565b600081359050611e3381611e0d565b92915050565b60008060408385031215611e5057611e4f611c52565b5b6000611e5e85828601611d6f565b9250506020611e6f85828601611e24565b9150509250929050565b6000819050919050565b6000611e9e611e99611e9484611ddb565b611e79565b611ddb565b9050919050565b6000611eb082611e83565b9050919050565b6000611ec282611ea5565b9050919050565b611ed281611eb7565b82525050565b6000602082019050611eed6000830184611ec9565b92915050565b611efc81611dfb565b82525050565b6000819050919050565b611f1581611f02565b82525050565b6000608082019050611f306000830187611ef3565b611f3d6020830186611ec9565b611f4a6040830185611f0c565b611f576060830184611f0c565b95945050505050565b600060208284031215611f7657611f75611c52565b5b6000611f8484828501611e24565b91505092915050565b611f9681611d12565b8114611fa157600080fd5b50565b600081359050611fb381611f8d565b92915050565b600060208284031215611fcf57611fce611c52565b5b6000611fdd84828501611fa4565b91505092915050565b6000611ff182611ea5565b9050919050565b61200181611fe6565b82525050565b600060208201905061201c6000830184611ff8565b92915050565b60006020820190506120376000830184611ef3565b92915050565b60006040820190506120526000830185611d24565b61205f6020830184611d24565b9392505050565b600060208201905061207b6000830184611f0c565b92915050565b600061208c82611dfb565b9050919050565b61209c81612081565b81146120a757600080fd5b50565b6000813590506120b981612093565b92915050565b600080604083850312156120d6576120d5611c52565b5b60006120e485828601611d6f565b92505060206120f5858286016120aa565b9150509250929050565b6000806040838503121561211657612115611c52565b5b600061212485828601611e24565b925050602061213585828601611d6f565b9150509250929050565b60006040820190506121546000830185611ef3565b6121616020830184611d24565b9392505050565b60008060006060848603121561218157612180611c52565b5b600061218f86828701611e24565b93505060206121a086828701611d6f565b92505060406121b1868287016120aa565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121f582611d12565b915061220083611d12565b9250828201905065ffffffffffff81111561221e5761221d6121bb565b5b92915050565b60008151905061223381611e0d565b92915050565b60006020828403121561224f5761224e611c52565b5b600061225d84828501612224565b91505092915050565b600060408201905061227b6000830185611ef3565b6122886020830184611db1565b9392505050565b6000819050919050565b600060ff82169050919050565b60006122c16122bc6122b78461228f565b611e79565b612299565b9050919050565b6122d1816122a6565b82525050565b60006040820190506122ec60008301856122c8565b6122f96020830184611f0c565b9392505050565b600061230b82611d12565b915061231683611d12565b9250828203905065ffffffffffff811115612334576123336121bb565b5b9291505056fea26469706673582212200c94f0c7e9d9553a80ec23e7f0c094e2e5331fc1d14a822d7cb245195034ad3164736f6c634300081c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638da5cb5b1161011a578063cc8463c8116100ad578063d547741f1161007c578063d547741f14610581578063d602b9fd1461059d578063dd738e6c146105a7578063e63ab1e9146105c3578063f68e9553146105e1576101fb565b8063cc8463c81461050a578063cefc142914610528578063cf6eefb714610532578063d26cdd2014610551576101fb565b8063a2a6c0eb116100e9578063a2a6c0eb14610484578063a692b9ef146104b4578063a8c00861146104d0578063be8cd266146104ec576101fb565b80638da5cb5b146103f957806391d1485414610417578063a1eda53c14610447578063a217fddf14610466576101fb565b80635b377fa2116101925780637b103999116101615780637b103999146103835780638023597e146103a15780638456cb59146103d157806384ef8ffc146103db576101fb565b80635b377fa2146102fa5780635c975abb1461032d578063634e93da1461034b578063649a5ec714610367576101fb565b80632f2ff15d116101ce5780632f2ff15d1461028857806336568abe146102a45780633f4ba83a146102c05780635a75199a146102ca576101fb565b806301ffc9a714610200578063022d63fb146102305780630aa6220b1461024e578063248a9ca314610258575b600080fd5b61021a60048036038101906102159190611caf565b6105ff565b6040516102279190611cf7565b60405180910390f35b610238610679565b6040516102459190611d33565b60405180910390f35b610256610684565b005b610272600480360381019061026d9190611d84565b61069c565b60405161027f9190611dc0565b60405180910390f35b6102a2600480360381019061029d9190611e39565b6106bb565b005b6102be60048036038101906102b99190611e39565b6106dd565b005b6102c86107f2565b005b6102e460048036038101906102df9190611d84565b610827565b6040516102f19190611ed8565b60405180910390f35b610314600480360381019061030f9190611d84565b610867565b6040516103249493929190611f1b565b60405180910390f35b6103356108d7565b6040516103429190611cf7565b60405180910390f35b61036560048036038101906103609190611f60565b6108ee565b005b610381600480360381019061037c9190611fb9565b610908565b005b61038b610922565b6040516103989190612007565b60405180910390f35b6103bb60048036038101906103b69190611e39565b610946565b6040516103c89190611cf7565b60405180910390f35b6103d9610987565b005b6103e36109bc565b6040516103f09190612022565b60405180910390f35b6104016109e6565b60405161040e9190612022565b60405180910390f35b610431600480360381019061042c9190611e39565b6109f5565b60405161043e9190611cf7565b60405180910390f35b61044f610a5f565b60405161045d92919061203d565b60405180910390f35b61046e610abf565b60405161047b9190611dc0565b60405180910390f35b61049e60048036038101906104999190611d84565b610ac6565b6040516104ab9190612066565b60405180910390f35b6104ce60048036038101906104c991906120bf565b610ae6565b005b6104ea60048036038101906104e591906120ff565b610b02565b005b6104f4610b10565b6040516105019190611dc0565b60405180910390f35b610512610b34565b60405161051f9190611d33565b60405180910390f35b610530610ba2565b005b61053a610c38565b60405161054892919061213f565b60405180910390f35b61056b60048036038101906105669190611d84565b610c7b565b6040516105789190612022565b60405180910390f35b61059b60048036038101906105969190611e39565b610cbb565b005b6105a5610d05565b005b6105c160048036038101906105bc9190612168565b610d1d565b005b6105cb610d36565b6040516105d89190611dc0565b60405180910390f35b6105e9610d5a565b6040516105f69190611dc0565b60405180910390f35b60007f31498786000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610672575061067182610d7e565b5b9050919050565b600062069780905090565b6000801b61069181610df8565b610699610e0c565b50565b6000806000838152602001908152602001600020600101549050919050565b6106c48261069c565b6106cd81610df8565b6106d78383610e19565b50505050565b6000801b8214801561072157506106f26109bc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156107e457600080610731610c38565b91509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580610777575061077581610ee6565b155b80610788575061078681610efb565b155b156107ca57806040517f19ca5ebb0000000000000000000000000000000000000000000000000000000081526004016107c19190611d33565b60405180910390fd5b600160146101000a81549065ffffffffffff021916905550505b6107ee8282610f0f565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081c81610df8565b610824610f8a565b50565b60006004600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154905084565b6000600360009054906101000a900460ff16905090565b6000801b6108fb81610df8565b61090482610fed565b5050565b6000801b61091581610df8565b61091e82611068565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008173ffffffffffffffffffffffffffffffffffffffff1661096884610c7b565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109b181610df8565b6109b96110cf565b50565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006109f06109bc565b905090565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806002601a9054906101000a900465ffffffffffff169050610a8281610ee6565b8015610a945750610a9281610efb565b155b610aa057600080610ab7565b600260149054906101000a900465ffffffffffff16815b915091509091565b6000801b81565b600060046000838152602001908152602001600020600301549050919050565b3382610af28282611132565b610afc8484611241565b50505050565b610b0c828261135f565b5050565b7f3ae1c506296743d7e3d03c7c7fbc7159c94706bb478d44fe35e75190455a750981565b6000806002601a9054906101000a900465ffffffffffff169050610b5781610ee6565b8015610b685750610b6781610efb565b5b610b86576001601a9054906101000a900465ffffffffffff16610b9c565b600260149054906101000a900465ffffffffffff165b91505090565b6000610bac610c38565b5090508073ffffffffffffffffffffffffffffffffffffffff16610bce6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610c2d57610bf16113fb565b6040517fc22c8022000000000000000000000000000000000000000000000000000000008152600401610c249190612022565b60405180910390fd5b610c35611403565b50565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160149054906101000a900465ffffffffffff16915091509091565b60006004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000801b8203610cf7576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0182826114d2565b5050565b6000801b610d1281610df8565b610d1a6114f4565b50565b610d27838361135f565b610d318282611241565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b7fedcc084d3dcd65a1f7f23c65c46722faca6953d28e43150a467cf43e5c30923881565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610df15750610df082611501565b5b9050919050565b610e0981610e046113fb565b61156b565b50565b610e176000806115bc565b565b60008060001b8303610ed457600073ffffffffffffffffffffffffffffffffffffffff16610e456109bc565b73ffffffffffffffffffffffffffffffffffffffff1614610e92576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b610ede83836116ac565b905092915050565b6000808265ffffffffffff1614159050919050565b6000428265ffffffffffff16109050919050565b610f176113fb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f7b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f85828261179d565b505050565b610f92611820565b6000600360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610fd66113fb565b604051610fe39190612022565b60405180910390a1565b6000610ff7610b34565b61100042611860565b61100a91906121ea565b905061101682826118ba565b8173ffffffffffffffffffffffffffffffffffffffff167f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed68260405161105c9190611d33565b60405180910390a25050565b60006110738261196d565b61107c42611860565b61108691906121ea565b905061109282826115bc565b7ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b82826040516110c392919061203d565b60405180910390a15050565b6110d76119cc565b6001600360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861111b6113fb565b6040516111289190612022565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d26cdd20836040518263ffffffff1660e01b81526004016111a29190611dc0565b602060405180830381865afa1580156111bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e39190612239565b73ffffffffffffffffffffffffffffffffffffffff161461123d5781816040517f2ebb0ef6000000000000000000000000000000000000000000000000000000008152600401611234929190612266565b60405180910390fd5b5050565b6112496119cc565b60006004600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816004600085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260046000858152602001908152602001600020600301819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847fc485a79936c258fd12fef44dd3de8d3069f7a6386c10e58329849408c91bbcd2336040516113529190612022565b60405180910390a4505050565b7fedcc084d3dcd65a1f7f23c65c46722faca6953d28e43150a467cf43e5c30923861138981610df8565b6113916119cc565b61139b8284611a0d565b818373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffb904ac70ccbe99b850406bf60ada29496703558524d72bcb9e54b76d1040a6360405160405180910390a4505050565b600033905090565b60008061140e610c38565b9150915061141b81610ee6565b158061142d575061142b81610efb565b155b1561146f57806040517f19ca5ebb0000000000000000000000000000000000000000000000000000000081526004016114669190611d33565b60405180910390fd5b6114836000801b61147e6109bc565b61179d565b506114916000801b83610e19565b50600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160146101000a81549065ffffffffffff02191690555050565b6114db8261069c565b6114e481610df8565b6114ee838361179d565b50505050565b6114ff6000806118ba565b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61157582826109f5565b6115b85780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016115af929190612266565b60405180910390fd5b5050565b60006002601a9054906101000a900465ffffffffffff1690506115de81610ee6565b1561165d576115ec81610efb565b1561162f57600260149054906101000a900465ffffffffffff166001601a6101000a81548165ffffffffffff021916908365ffffffffffff16021790555061165c565b7f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec560405160405180910390a15b5b82600260146101000a81548165ffffffffffff021916908365ffffffffffff160217905550816002601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550505050565b60006116b883836109f5565b61179257600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061172f6113fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611797565b600090505b92915050565b60008060001b831480156117e357506117b46109bc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561180e57600260006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b6118188383611b23565b905092915050565b6118286108d7565b61185e576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600065ffffffffffff80168211156118b2576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016118a99291906122d7565b60405180910390fd5b819050919050565b60006118c4610c38565b91505082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160146101000a81548165ffffffffffff021916908365ffffffffffff16021790555061193681610ee6565b15611968577f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510960405160405180910390a15b505050565b600080611978610b34565b90508065ffffffffffff168365ffffffffffff16116119a257828161199d9190612300565b6119c4565b6119c38365ffffffffffff166119b6610679565b65ffffffffffff16611c15565b5b915050919050565b6119d46108d7565b15611a0b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006004600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260046000858152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847fc4556710b10078aae76dbdf4ad5ea256f74909069bd8af417c5c2aeac18eb28833604051611b169190612022565b60405180910390a4505050565b6000611b2f83836109f5565b15611c0a57600080600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ba76113fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611c0f565b600090505b92915050565b6000611c248284108484611c2c565b905092915050565b6000611c3784611c46565b82841802821890509392505050565b60008115159050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c8c81611c57565b8114611c9757600080fd5b50565b600081359050611ca981611c83565b92915050565b600060208284031215611cc557611cc4611c52565b5b6000611cd384828501611c9a565b91505092915050565b60008115159050919050565b611cf181611cdc565b82525050565b6000602082019050611d0c6000830184611ce8565b92915050565b600065ffffffffffff82169050919050565b611d2d81611d12565b82525050565b6000602082019050611d486000830184611d24565b92915050565b6000819050919050565b611d6181611d4e565b8114611d6c57600080fd5b50565b600081359050611d7e81611d58565b92915050565b600060208284031215611d9a57611d99611c52565b5b6000611da884828501611d6f565b91505092915050565b611dba81611d4e565b82525050565b6000602082019050611dd56000830184611db1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e0682611ddb565b9050919050565b611e1681611dfb565b8114611e2157600080fd5b50565b600081359050611e3381611e0d565b92915050565b60008060408385031215611e5057611e4f611c52565b5b6000611e5e85828601611d6f565b9250506020611e6f85828601611e24565b9150509250929050565b6000819050919050565b6000611e9e611e99611e9484611ddb565b611e79565b611ddb565b9050919050565b6000611eb082611e83565b9050919050565b6000611ec282611ea5565b9050919050565b611ed281611eb7565b82525050565b6000602082019050611eed6000830184611ec9565b92915050565b611efc81611dfb565b82525050565b6000819050919050565b611f1581611f02565b82525050565b6000608082019050611f306000830187611ef3565b611f3d6020830186611ec9565b611f4a6040830185611f0c565b611f576060830184611f0c565b95945050505050565b600060208284031215611f7657611f75611c52565b5b6000611f8484828501611e24565b91505092915050565b611f9681611d12565b8114611fa157600080fd5b50565b600081359050611fb381611f8d565b92915050565b600060208284031215611fcf57611fce611c52565b5b6000611fdd84828501611fa4565b91505092915050565b6000611ff182611ea5565b9050919050565b61200181611fe6565b82525050565b600060208201905061201c6000830184611ff8565b92915050565b60006020820190506120376000830184611ef3565b92915050565b60006040820190506120526000830185611d24565b61205f6020830184611d24565b9392505050565b600060208201905061207b6000830184611f0c565b92915050565b600061208c82611dfb565b9050919050565b61209c81612081565b81146120a757600080fd5b50565b6000813590506120b981612093565b92915050565b600080604083850312156120d6576120d5611c52565b5b60006120e485828601611d6f565b92505060206120f5858286016120aa565b9150509250929050565b6000806040838503121561211657612115611c52565b5b600061212485828601611e24565b925050602061213585828601611d6f565b9150509250929050565b60006040820190506121546000830185611ef3565b6121616020830184611d24565b9392505050565b60008060006060848603121561218157612180611c52565b5b600061218f86828701611e24565b93505060206121a086828701611d6f565b92505060406121b1868287016120aa565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121f582611d12565b915061220083611d12565b9250828201905065ffffffffffff81111561221e5761221d6121bb565b5b92915050565b60008151905061223381611e0d565b92915050565b60006020828403121561224f5761224e611c52565b5b600061225d84828501612224565b91505092915050565b600060408201905061227b6000830185611ef3565b6122886020830184611db1565b9392505050565b6000819050919050565b600060ff82169050919050565b60006122c16122bc6122b78461228f565b611e79565b612299565b9050919050565b6122d1816122a6565b82525050565b60006040820190506122ec60008301856122c8565b6122f96020830184611f0c565b9392505050565b600061230b82611d12565b915061231683611d12565b9250828203905065ffffffffffff811115612334576123336121bb565b5b9291505056fea26469706673582212200c94f0c7e9d9553a80ec23e7f0c094e2e5331fc1d14a822d7cb245195034ad3164736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
