{
  "_format": "hh-sol-artifact-1",
  "contractName": "OptimismDVNAdapterL1",
  "sourceName": "contracts/uln/dvn/adapters/optimism/OptimismDVNAdapterL1.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_admins",
          "type": "address[]"
        },
        {
          "internalType": "uint32",
          "name": "_optimismEid",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_l1Messenger",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requested",
          "type": "uint256"
        }
      ],
      "name": "DVNAdapter_InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sendLib",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }
      ],
      "name": "DVNAdapter_MissingRecieveLib",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DVNAdapter_NotImplemented",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoPeer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyOptimism",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Transfer_NativeFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Transfer_ToAddressIsZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Worker_NotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Worker_OnlyMessageLib",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Worker_RoleRenouncingDisabled",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "gasLimit",
          "type": "uint32"
        }
      ],
      "name": "GasLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "peer",
          "type": "address"
        }
      ],
      "name": "PeerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "sendLib",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "receiveLib",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct ReceiveLibParam[]",
          "name": "params",
          "type": "tuple[]"
        }
      ],
      "name": "ReceiveLibsSet",
      "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": "uint16",
          "name": "multiplierBps",
          "type": "uint16"
        }
      ],
      "name": "SetDefaultMultiplierBps",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "priceFeed",
          "type": "address"
        }
      ],
      "name": "SetPriceFeed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint8[]",
          "name": "optionTypes",
          "type": "uint8[]"
        }
      ],
      "name": "SetSupportedOptionTypes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "workerLib",
          "type": "address"
        }
      ],
      "name": "SetWorkerLib",
      "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": "lib",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "allowlistSize",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes",
              "name": "packetHeader",
              "type": "bytes"
            },
            {
              "internalType": "bytes32",
              "name": "payloadHash",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "confirmations",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "internalType": "struct ILayerZeroDVN.AssignJobParam",
          "name": "_param",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "assignJob",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMultiplierBps",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gasLimit",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "getFee",
      "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": "uint32",
          "name": "_eid",
          "type": "uint32"
        }
      ],
      "name": "getSupportedOptionTypes",
      "outputs": [
        {
          "internalType": "uint8[]",
          "name": "",
          "type": "uint8[]"
        }
      ],
      "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": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "hasAcl",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": [],
      "name": "l1Messenger",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "optimismEid",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "peer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priceFeed",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sendLib",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }
      ],
      "name": "receiveLibs",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "receiveLib",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_multiplierBps",
          "type": "uint16"
        }
      ],
      "name": "setDefaultMultiplierBps",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_gasLimit",
          "type": "uint32"
        }
      ],
      "name": "setGasLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_paused",
          "type": "bool"
        }
      ],
      "name": "setPaused",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_peer",
          "type": "address"
        }
      ],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_priceFeed",
          "type": "address"
        }
      ],
      "name": "setPriceFeed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "sendLib",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "receiveLib",
              "type": "bytes32"
            }
          ],
          "internalType": "struct ReceiveLibParam[]",
          "name": "_params",
          "type": "tuple[]"
        }
      ],
      "name": "setReceiveLibs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "uint8[]",
          "name": "_optionTypes",
          "type": "uint8[]"
        }
      ],
      "name": "setSupportedOptionTypes",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_workerFeeLib",
          "type": "address"
        }
      ],
      "name": "setWorkerFeeLib",
      "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": [
        {
          "internalType": "address",
          "name": "_lib",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "workerFeeLib",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002f5f38038062002f5f8339810160408190526200003491620002ff565b604080516000808252602082019092526001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b031916905533918591612ee09182858581156200008b576200008b60008362000169565b60005b8551811015620000ef57620000e67f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d257620000d2620003f7565b60200260200101516200016960201b60201c565b6001016200008e565b5060005b81518110156200014057620001377fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d257620000d2620003f7565b600101620000f3565b5050505063ffffffff96909616608052505050506001600160a01b031660a052506200044a9050565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015620001ba57506000828152602081815260408083206001600160a01b038516845290915290205460ff16155b15620002075760018054601590620001e290600160a81b90046001600160401b03166200040d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b62000213828262000217565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000213576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002733390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620002e557600080fd5b919050565b805163ffffffff81168114620002e557600080fd5b6000806000606084860312156200031557600080fd5b83516001600160401b03808211156200032d57600080fd5b818601915086601f8301126200034257600080fd5b8151602082821115620003595762000359620002b7565b8160051b604051601f19603f83011681018181108682111715620003815762000381620002b7565b60405292835281830193508481018201928a841115620003a057600080fd5b948201945b83861015620003c957620003b986620002cd565b85529482019493820193620003a5565b9750620003da9050888201620002ea565b955050505050620003ee60408501620002cd565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038281166002600160401b031981016200044057634e487b7160e01b600052601160045260246000fd5b6001019392505050565b60805160a051612ae16200047e600039600081816104b401526111480152600081816106d30152610f020152612ae16000f3fe6080604052600436106101db5760003560e01c80635c975abb11610102578063c358de0a11610095578063d2ae210411610064578063d2ae21041461064e578063d547741f146106a1578063d81e8dfe146106c1578063f68016b71461070a57600080fd5b8063c358de0a146105bc578063c416aa51146105dc578063c7b2370b1461060e578063cd88b9031461062e57600080fd5b8063741bef1a116100d1578063741bef1a1461051657806391d148541461054357806395d376d714610594578063a217fddf146105a757600080fd5b80635c975abb1461048a5780636140e0e6146104a257806369b90d68146104d6578063724e78da146104f657600080fd5b806326e67a371161017a57806336568abe1161014957806336568abe146103f25780634cfa6d2c1461041257806351b6a0fd1461044a57806352d84c621461046a57600080fd5b806326e67a37146103655780632de11376146103925780632f2ff15d146103b257806330bb3aac146103d257600080fd5b80631095b6d7116101b65780631095b6d71461028d57806311cda415146102ad57806316c38b3c14610307578063248a9ca31461032757600080fd5b8062bf2e80146101e757806301e336671461023b57806301ffc9a71461025d57600080fd5b366101e257005b600080fd5b3480156101f357600080fd5b50600154610223907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561024757600080fd5b5061025b61025636600461227b565b610727565b005b34801561026957600080fd5b5061027d6102783660046122b7565b610762565b6040519015158152602001610232565b34801561029957600080fd5b5061025b6102a836600461227b565b6107fb565b3480156102b957600080fd5b506005546102e290640100000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610232565b34801561031357600080fd5b5061025b610322366004612307565b61098a565b34801561033357600080fd5b50610357610342366004612324565b60009081526020819052604090206001015490565b604051908152602001610232565b34801561037157600080fd5b50610385610380366004612351565b6109af565b604051610232919061236c565b34801561039e57600080fd5b5061027d6103ad3660046123b3565b610a36565b3480156103be57600080fd5b5061025b6103cd3660046123ce565b610b1b565b3480156103de57600080fd5b506103576103ed366004612443565b610b45565b3480156103fe57600080fd5b5061025b61040d3660046123ce565b610b94565b34801561041e57600080fd5b5061035761042d3660046124c5565b600460209081526000928352604080842090915290825290205481565b34801561045657600080fd5b5061025b6104653660046124ef565b610bc6565b34801561047657600080fd5b5061025b610485366004612351565b610cbd565b34801561049657600080fd5b5060015460ff1661027d565b3480156104ae57600080fd5b506102e27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e257600080fd5b5061025b6104f13660046123b3565b610d52565b34801561050257600080fd5b5061025b6105113660046123b3565b610df6565b34801561052257600080fd5b506002546102e29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561054f57600080fd5b5061027d61055e3660046123ce565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6103576105a2366004612564565b610e93565b3480156105b357600080fd5b50610357600081565b3480156105c857600080fd5b5061025b6105d73660046125d5565b6111cf565b3480156105e857600080fd5b506001546102e290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561061a57600080fd5b5061025b6106293660046123b3565b61127d565b34801561063a57600080fd5b5061025b6106493660046125f9565b611321565b34801561065a57600080fd5b50600154610688907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610232565b3480156106ad57600080fd5b5061025b6106bc3660046123ce565b611372565b3480156106cd57600080fd5b506106f57f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610232565b34801561071657600080fd5b506005546106f59063ffffffff1681565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561075181611397565b61075c8484846113a4565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561082581611397565b73ffffffffffffffffffffffffffffffffffffffff841660009081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166108a3576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561091357600080fd5b505af1158015610927573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600061099581611397565b81156109a7576109a36113d4565b5050565b6109a3611453565b63ffffffff8116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015610a2a57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116109fb5790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610a8b57506000919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610b01575073ffffffffffffffffffffffffffffffffffffffff821660009081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610b0e57506001919050565b506000919050565b919050565b600082815260208190526040902060010154610b3681611397565b610b4083836114aa565b505050565b600083610b5181610a36565b610b87576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009695505050505050565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bd181611397565b60005b82811015610c7e5736848483818110610bef57610bef61267f565b60600291909101915050604081013560046000610c0f60208501856123b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836020016020810190610c5e9190612351565b63ffffffff16815260208101919091526040016000205550600101610bd4565b507f360a0efdea8fcc9a11ee20a2099e314ddcf49a941d66790cd4e5adea30faa0748383604051610cb09291906126ae565b60405180910390a1505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610ce781611397565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff84169081179091556040519081527f8ab199d61b4607e4688f098b55f3871b3597fc3f8a7dc0702201fba354d8b58a906020015b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d7c81611397565b600580547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040517f25fecc89eba6e3655a12d5db63dceb5f0711081bd42663652110b98d9a1ec77390600090a25050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e2081611397565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001610d46565b6000610ea560a08501608086016123b3565b610eae81610a36565b610ee4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa33610ef56020880188612351565b611570565b5063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016617530610f326020880188612351565b610f3c9190612729565b63ffffffff1614610f79576040517fabc1839000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600554640100000000900473ffffffffffffffffffffffffffffffffffffffff16610fd0576040517fdaffed9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260046020908152604082207f8e760afe000000000000000000000000000000000000000000000000000000009161107991908490611016908b018b612351565b63ffffffff168152602080820192909252604001600020549061103b908a018a612773565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408a0135611607565b6040516024016110899190612846565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260055491517f3dbb202b00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692633dbb202b926111919264010000000083041691869163ffffffff90911690600401612859565b600060405180830381600087803b1580156111ab57600080fd5b505af11580156111bf573d6000803e3d6000fd5b5060009998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756111f981611397565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d46565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756112a781611397565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d46565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561134b81611397565b63ffffffff8416600090815260036020526040902061136b908484612199565b5050505050565b60008281526020819052604090206001015461138d81611397565b610b408383611636565b6113a181336116fb565b50565b73ffffffffffffffffffffffffffffffffffffffff83166113c957610b4082826117b3565b610b408383836118b9565b6113dc611927565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61145b611996565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611429565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015611507575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b15611566576001805460159061153f907501000000000000000000000000000000000000000000900467ffffffffffffffff166128cd565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6109a38282611a02565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff85168452909152902054806107f5576040517ff25127e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015263ffffffff831660248201526044015b60405180910390fd5b606083828460405160200161161e939291906128f4565b60405160208183030381529060405290509392505050565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015611692575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff165b156116f157600180546015906116ca907501000000000000000000000000000000000000000000900467ffffffffffffffff16612921565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6109a38282611af2565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109a35761173981611ba9565b611744836020611bc8565b604051602001611755929190612963565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526115fe91600401612846565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461185a576040519150601f19603f3d011682016040523d82523d6000602084013e61185f565b606091505b5050905080610b40576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016115fe565b73ffffffffffffffffffffffffffffffffffffffff8216611906576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4073ffffffffffffffffffffffffffffffffffffffff84168383611e12565b60015460ff1615611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016115fe565b565b60015460ff16611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016115fe565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109a35760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a943390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156109a35760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606107f573ffffffffffffffffffffffffffffffffffffffff831660145b60606000611bd78360026129e4565b611be29060026129fb565b67ffffffffffffffff811115611bfa57611bfa612a0e565b6040519080825280601f01601f191660200182016040528015611c24576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611c5b57611c5b61267f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611cbe57611cbe61267f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611cfa8460026129e4565b611d059060016129fb565b90505b6001811115611da2577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611d4657611d4661267f565b1a60f81b828281518110611d5c57611d5c61267f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611d9b81612a3d565b9050611d08565b508315611e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016115fe565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610b4092869291600091611edd918516908490611f8a565b9050805160001480611efe575080806020019051810190611efe9190612a72565b610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016115fe565b6060611f998484600085611fa1565b949350505050565b606082471015612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016115fe565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161205c9190612a8f565b60006040518083038185875af1925050503d8060008114612099576040519150601f19603f3d011682016040523d82523d6000602084013e61209e565b606091505b50915091506120af878383876120ba565b979650505050505050565b606083156121505782516000036121495773ffffffffffffffffffffffffffffffffffffffff85163b612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115fe565b5081611f99565b611f9983838151156121655781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe9190612846565b82805482825590600052602060002090601f016020900481019282156122325791602002820160005b8382111561220357833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026121c2565b80156122305782816101000a81549060ff0219169055600101602081600001049283019260010302612203565b505b5061223e929150612242565b5090565b5b8082111561223e5760008155600101612243565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b1657600080fd5b60008060006060848603121561229057600080fd5b61229984612257565b92506122a760208501612257565b9150604084013590509250925092565b6000602082840312156122c957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e0b57600080fd5b80151581146113a157600080fd5b60006020828403121561231957600080fd5b8135611e0b816122f9565b60006020828403121561233657600080fd5b5035919050565b803563ffffffff81168114610b1657600080fd5b60006020828403121561236357600080fd5b611e0b8261233d565b6020808252825182820181905260009190848201906040850190845b818110156123a757835160ff1683529284019291840191600101612388565b50909695505050505050565b6000602082840312156123c557600080fd5b611e0b82612257565b600080604083850312156123e157600080fd5b823591506123f160208401612257565b90509250929050565b60008083601f84011261240c57600080fd5b50813567ffffffffffffffff81111561242457600080fd5b60208301915083602082850101111561243c57600080fd5b9250929050565b60008060008060006080868803121561245b57600080fd5b6124648661233d565b9450602086013567ffffffffffffffff808216821461248257600080fd5b81955061249160408901612257565b945060608801359150808211156124a757600080fd5b506124b4888289016123fa565b969995985093965092949392505050565b600080604083850312156124d857600080fd5b6124e183612257565b91506123f16020840161233d565b6000806020838503121561250257600080fd5b823567ffffffffffffffff8082111561251a57600080fd5b818501915085601f83011261252e57600080fd5b81358181111561253d57600080fd5b86602060608302850101111561255257600080fd5b60209290920196919550909350505050565b60008060006040848603121561257957600080fd5b833567ffffffffffffffff8082111561259157600080fd5b9085019060a082880312156125a557600080fd5b909350602085013590808211156125bb57600080fd5b506125c8868287016123fa565b9497909650939450505050565b6000602082840312156125e757600080fd5b813561ffff81168114611e0b57600080fd5b60008060006040848603121561260e57600080fd5b6126178461233d565b9250602084013567ffffffffffffffff8082111561263457600080fd5b818601915086601f83011261264857600080fd5b81358181111561265757600080fd5b8760208260051b850101111561266c57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252818101839052600090604080840186845b8781101561271c5773ffffffffffffffffffffffffffffffffffffffff6126ea83612257565b16835263ffffffff6126fd86840161233d565b16838601528184013584840152606092830192909101906001016126c4565b5090979650505050505050565b600063ffffffff80841680612767577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910692915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126127a857600080fd5b83018035915067ffffffffffffffff8211156127c357600080fd5b60200191503681900382131561243c57600080fd5b60005b838110156127f35781810151838201526020016127db565b50506000910152565b600081518084526128148160208601602086016127d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e0b60208301846127fc565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061288860608301856127fc565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036128ea576128ea61289e565b6001019392505050565b838152826020820152600082516129128160408501602087016127d8565b91909101604001949350505050565b600067ffffffffffffffff82168061293b5761293b61289e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161299b8160178501602088016127d8565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516129d88160288401602088016127d8565b01602801949350505050565b80820281158282048414176107f5576107f561289e565b808201808211156107f5576107f561289e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081612a4c57612a4c61289e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600060208284031215612a8457600080fd5b8151611e0b816122f9565b60008251612aa18184602087016127d8565b919091019291505056fea2646970667358221220bd1ef3063120ccff02515dc9c882f79e5c9ee8ab62db05ad853fbeed80a6831464736f6c63430008160033",
  "deployedBytecode": "0x6080604052600436106101db5760003560e01c80635c975abb11610102578063c358de0a11610095578063d2ae210411610064578063d2ae21041461064e578063d547741f146106a1578063d81e8dfe146106c1578063f68016b71461070a57600080fd5b8063c358de0a146105bc578063c416aa51146105dc578063c7b2370b1461060e578063cd88b9031461062e57600080fd5b8063741bef1a116100d1578063741bef1a1461051657806391d148541461054357806395d376d714610594578063a217fddf146105a757600080fd5b80635c975abb1461048a5780636140e0e6146104a257806369b90d68146104d6578063724e78da146104f657600080fd5b806326e67a371161017a57806336568abe1161014957806336568abe146103f25780634cfa6d2c1461041257806351b6a0fd1461044a57806352d84c621461046a57600080fd5b806326e67a37146103655780632de11376146103925780632f2ff15d146103b257806330bb3aac146103d257600080fd5b80631095b6d7116101b65780631095b6d71461028d57806311cda415146102ad57806316c38b3c14610307578063248a9ca31461032757600080fd5b8062bf2e80146101e757806301e336671461023b57806301ffc9a71461025d57600080fd5b366101e257005b600080fd5b3480156101f357600080fd5b50600154610223907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561024757600080fd5b5061025b61025636600461227b565b610727565b005b34801561026957600080fd5b5061027d6102783660046122b7565b610762565b6040519015158152602001610232565b34801561029957600080fd5b5061025b6102a836600461227b565b6107fb565b3480156102b957600080fd5b506005546102e290640100000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610232565b34801561031357600080fd5b5061025b610322366004612307565b61098a565b34801561033357600080fd5b50610357610342366004612324565b60009081526020819052604090206001015490565b604051908152602001610232565b34801561037157600080fd5b50610385610380366004612351565b6109af565b604051610232919061236c565b34801561039e57600080fd5b5061027d6103ad3660046123b3565b610a36565b3480156103be57600080fd5b5061025b6103cd3660046123ce565b610b1b565b3480156103de57600080fd5b506103576103ed366004612443565b610b45565b3480156103fe57600080fd5b5061025b61040d3660046123ce565b610b94565b34801561041e57600080fd5b5061035761042d3660046124c5565b600460209081526000928352604080842090915290825290205481565b34801561045657600080fd5b5061025b6104653660046124ef565b610bc6565b34801561047657600080fd5b5061025b610485366004612351565b610cbd565b34801561049657600080fd5b5060015460ff1661027d565b3480156104ae57600080fd5b506102e27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e257600080fd5b5061025b6104f13660046123b3565b610d52565b34801561050257600080fd5b5061025b6105113660046123b3565b610df6565b34801561052257600080fd5b506002546102e29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561054f57600080fd5b5061027d61055e3660046123ce565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6103576105a2366004612564565b610e93565b3480156105b357600080fd5b50610357600081565b3480156105c857600080fd5b5061025b6105d73660046125d5565b6111cf565b3480156105e857600080fd5b506001546102e290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561061a57600080fd5b5061025b6106293660046123b3565b61127d565b34801561063a57600080fd5b5061025b6106493660046125f9565b611321565b34801561065a57600080fd5b50600154610688907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610232565b3480156106ad57600080fd5b5061025b6106bc3660046123ce565b611372565b3480156106cd57600080fd5b506106f57f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610232565b34801561071657600080fd5b506005546106f59063ffffffff1681565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561075181611397565b61075c8484846113a4565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561082581611397565b73ffffffffffffffffffffffffffffffffffffffff841660009081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166108a3576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561091357600080fd5b505af1158015610927573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600061099581611397565b81156109a7576109a36113d4565b5050565b6109a3611453565b63ffffffff8116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015610a2a57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116109fb5790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610a8b57506000919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610b01575073ffffffffffffffffffffffffffffffffffffffff821660009081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610b0e57506001919050565b506000919050565b919050565b600082815260208190526040902060010154610b3681611397565b610b4083836114aa565b505050565b600083610b5181610a36565b610b87576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009695505050505050565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bd181611397565b60005b82811015610c7e5736848483818110610bef57610bef61267f565b60600291909101915050604081013560046000610c0f60208501856123b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836020016020810190610c5e9190612351565b63ffffffff16815260208101919091526040016000205550600101610bd4565b507f360a0efdea8fcc9a11ee20a2099e314ddcf49a941d66790cd4e5adea30faa0748383604051610cb09291906126ae565b60405180910390a1505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610ce781611397565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff84169081179091556040519081527f8ab199d61b4607e4688f098b55f3871b3597fc3f8a7dc0702201fba354d8b58a906020015b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d7c81611397565b600580547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040517f25fecc89eba6e3655a12d5db63dceb5f0711081bd42663652110b98d9a1ec77390600090a25050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e2081611397565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001610d46565b6000610ea560a08501608086016123b3565b610eae81610a36565b610ee4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa33610ef56020880188612351565b611570565b5063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016617530610f326020880188612351565b610f3c9190612729565b63ffffffff1614610f79576040517fabc1839000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600554640100000000900473ffffffffffffffffffffffffffffffffffffffff16610fd0576040517fdaffed9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260046020908152604082207f8e760afe000000000000000000000000000000000000000000000000000000009161107991908490611016908b018b612351565b63ffffffff168152602080820192909252604001600020549061103b908a018a612773565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408a0135611607565b6040516024016110899190612846565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260055491517f3dbb202b00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692633dbb202b926111919264010000000083041691869163ffffffff90911690600401612859565b600060405180830381600087803b1580156111ab57600080fd5b505af11580156111bf573d6000803e3d6000fd5b5060009998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756111f981611397565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d46565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756112a781611397565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d46565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561134b81611397565b63ffffffff8416600090815260036020526040902061136b908484612199565b5050505050565b60008281526020819052604090206001015461138d81611397565b610b408383611636565b6113a181336116fb565b50565b73ffffffffffffffffffffffffffffffffffffffff83166113c957610b4082826117b3565b610b408383836118b9565b6113dc611927565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61145b611996565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611429565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015611507575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b15611566576001805460159061153f907501000000000000000000000000000000000000000000900467ffffffffffffffff166128cd565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6109a38282611a02565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff85168452909152902054806107f5576040517ff25127e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015263ffffffff831660248201526044015b60405180910390fd5b606083828460405160200161161e939291906128f4565b60405160208183030381529060405290509392505050565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015611692575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff165b156116f157600180546015906116ca907501000000000000000000000000000000000000000000900467ffffffffffffffff16612921565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6109a38282611af2565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109a35761173981611ba9565b611744836020611bc8565b604051602001611755929190612963565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526115fe91600401612846565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461185a576040519150601f19603f3d011682016040523d82523d6000602084013e61185f565b606091505b5050905080610b40576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016115fe565b73ffffffffffffffffffffffffffffffffffffffff8216611906576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4073ffffffffffffffffffffffffffffffffffffffff84168383611e12565b60015460ff1615611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016115fe565b565b60015460ff16611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016115fe565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109a35760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a943390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156109a35760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606107f573ffffffffffffffffffffffffffffffffffffffff831660145b60606000611bd78360026129e4565b611be29060026129fb565b67ffffffffffffffff811115611bfa57611bfa612a0e565b6040519080825280601f01601f191660200182016040528015611c24576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611c5b57611c5b61267f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611cbe57611cbe61267f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611cfa8460026129e4565b611d059060016129fb565b90505b6001811115611da2577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611d4657611d4661267f565b1a60f81b828281518110611d5c57611d5c61267f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611d9b81612a3d565b9050611d08565b508315611e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016115fe565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610b4092869291600091611edd918516908490611f8a565b9050805160001480611efe575080806020019051810190611efe9190612a72565b610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016115fe565b6060611f998484600085611fa1565b949350505050565b606082471015612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016115fe565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161205c9190612a8f565b60006040518083038185875af1925050503d8060008114612099576040519150601f19603f3d011682016040523d82523d6000602084013e61209e565b606091505b50915091506120af878383876120ba565b979650505050505050565b606083156121505782516000036121495773ffffffffffffffffffffffffffffffffffffffff85163b612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115fe565b5081611f99565b611f9983838151156121655781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe9190612846565b82805482825590600052602060002090601f016020900481019282156122325791602002820160005b8382111561220357833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026121c2565b80156122305782816101000a81549060ff0219169055600101602081600001049283019260010302612203565b505b5061223e929150612242565b5090565b5b8082111561223e5760008155600101612243565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b1657600080fd5b60008060006060848603121561229057600080fd5b61229984612257565b92506122a760208501612257565b9150604084013590509250925092565b6000602082840312156122c957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e0b57600080fd5b80151581146113a157600080fd5b60006020828403121561231957600080fd5b8135611e0b816122f9565b60006020828403121561233657600080fd5b5035919050565b803563ffffffff81168114610b1657600080fd5b60006020828403121561236357600080fd5b611e0b8261233d565b6020808252825182820181905260009190848201906040850190845b818110156123a757835160ff1683529284019291840191600101612388565b50909695505050505050565b6000602082840312156123c557600080fd5b611e0b82612257565b600080604083850312156123e157600080fd5b823591506123f160208401612257565b90509250929050565b60008083601f84011261240c57600080fd5b50813567ffffffffffffffff81111561242457600080fd5b60208301915083602082850101111561243c57600080fd5b9250929050565b60008060008060006080868803121561245b57600080fd5b6124648661233d565b9450602086013567ffffffffffffffff808216821461248257600080fd5b81955061249160408901612257565b945060608801359150808211156124a757600080fd5b506124b4888289016123fa565b969995985093965092949392505050565b600080604083850312156124d857600080fd5b6124e183612257565b91506123f16020840161233d565b6000806020838503121561250257600080fd5b823567ffffffffffffffff8082111561251a57600080fd5b818501915085601f83011261252e57600080fd5b81358181111561253d57600080fd5b86602060608302850101111561255257600080fd5b60209290920196919550909350505050565b60008060006040848603121561257957600080fd5b833567ffffffffffffffff8082111561259157600080fd5b9085019060a082880312156125a557600080fd5b909350602085013590808211156125bb57600080fd5b506125c8868287016123fa565b9497909650939450505050565b6000602082840312156125e757600080fd5b813561ffff81168114611e0b57600080fd5b60008060006040848603121561260e57600080fd5b6126178461233d565b9250602084013567ffffffffffffffff8082111561263457600080fd5b818601915086601f83011261264857600080fd5b81358181111561265757600080fd5b8760208260051b850101111561266c57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252818101839052600090604080840186845b8781101561271c5773ffffffffffffffffffffffffffffffffffffffff6126ea83612257565b16835263ffffffff6126fd86840161233d565b16838601528184013584840152606092830192909101906001016126c4565b5090979650505050505050565b600063ffffffff80841680612767577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910692915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126127a857600080fd5b83018035915067ffffffffffffffff8211156127c357600080fd5b60200191503681900382131561243c57600080fd5b60005b838110156127f35781810151838201526020016127db565b50506000910152565b600081518084526128148160208601602086016127d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e0b60208301846127fc565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061288860608301856127fc565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036128ea576128ea61289e565b6001019392505050565b838152826020820152600082516129128160408501602087016127d8565b91909101604001949350505050565b600067ffffffffffffffff82168061293b5761293b61289e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161299b8160178501602088016127d8565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516129d88160288401602088016127d8565b01602801949350505050565b80820281158282048414176107f5576107f561289e565b808201808211156107f5576107f561289e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081612a4c57612a4c61289e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600060208284031215612a8457600080fd5b8151611e0b816122f9565b60008251612aa18184602087016127d8565b919091019291505056fea2646970667358221220bd1ef3063120ccff02515dc9c882f79e5c9ee8ab62db05ad853fbeed80a6831464736f6c63430008160033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
