{
  "_format": "hh-sol-artifact-1",
  "contractName": "EdgeSwarm",
  "sourceName": "contracts/EdgeSwarm.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSpender",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "worker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "taskId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "score",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "fileHash",
          "type": "string"
        }
      ],
      "name": "WorkVerified",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ledger",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "taskId",
          "type": "uint256"
        },
        {
          "internalType": "int256",
          "name": "predictionScore",
          "type": "int256"
        },
        {
          "internalType": "address",
          "name": "worker",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "fileHash",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_taskId",
          "type": "uint256"
        },
        {
          "internalType": "int256",
          "name": "_score",
          "type": "int256"
        },
        {
          "internalType": "string",
          "name": "_fileHash",
          "type": "string"
        }
      ],
      "name": "submitWork",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "ubiEarned",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f537761726d20546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f53574d000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000365565b508060049081620000a1919062000365565b50505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200044c565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200016d57607f821691505b60208210810362000183576200018262000125565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001ae565b620001f98683620001ae565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000246620002406200023a8462000211565b6200021b565b62000211565b9050919050565b6000819050919050565b620002628362000225565b6200027a62000271826200024d565b848454620001bb565b825550505050565b600090565b6200029162000282565b6200029e81848462000257565b505050565b5b81811015620002c657620002ba60008262000287565b600181019050620002a4565b5050565b601f8211156200031557620002df8162000189565b620002ea846200019e565b81016020851015620002fa578190505b6200031262000309856200019e565b830182620002a3565b50505b505050565b600082821c905092915050565b60006200033a600019846008026200031a565b1980831691505092915050565b600062000355838362000327565b9150826002028217905092915050565b6200037082620000eb565b67ffffffffffffffff8111156200038c576200038b620000f6565b5b62000398825462000154565b620003a5828285620002ca565b600060209050601f831160018114620003dd5760008415620003c8578287015190505b620003d4858262000347565b86555062000444565b601f198416620003ed8662000189565b60005b828110156200041757848901518255600182019150602085019450602081019050620003f0565b8683101562000437578489015162000433601f89168262000327565b8355505b6001600288020188555050505b505050505050565b6118a7806200045c6000396000f3fe608060405234801561001057600080fd5b50600436106100ce5760003560e01c8063313ce5671161008c57806395d89b411161006657806395d89b411461022b578063a9059cbb14610249578063bd4bbeb914610279578063dd62ed3e146102a9576100ce565b8063313ce567146101bf57806370a08231146101dd5780638da5cb5b1461020d576100ce565b8062a82c76146100d357806306fdde03146100ef578063095ea7b31461010d57806310a7fd7b1461013d57806318160ddd1461017157806323b872dd1461018f575b600080fd5b6100ed60048036038101906100e8919061108a565b6102d9565b005b6100f761050c565b6040516101049190611178565b60405180910390f35b610127600480360381019061012291906111f8565b61059e565b6040516101349190611253565b60405180910390f35b6101576004803603810190610152919061126e565b6105c1565b6040516101689594939291906112c8565b60405180910390f35b61017961069f565b6040516101869190611322565b60405180910390f35b6101a960048036038101906101a4919061133d565b6106a9565b6040516101b69190611253565b60405180910390f35b6101c76106d8565b6040516101d491906113ac565b60405180910390f35b6101f760048036038101906101f291906113c7565b6106e1565b6040516102049190611322565b60405180910390f35b610215610729565b60405161022291906113f4565b60405180910390f35b61023361074f565b6040516102409190611178565b60405180910390f35b610263600480360381019061025e91906111f8565b6107e1565b6040516102709190611253565b60405180910390f35b610293600480360381019061028e91906113c7565b610804565b6040516102a09190611322565b60405180910390f35b6102c360048036038101906102be919061140f565b61081c565b6040516102d09190611322565b60405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff166007600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461037e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103759061149b565b60405180910390fd5b6040518060a001604052808481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014281526020018281525060076000858152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030155608082015181600401908161044891906116c7565b509050506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461049c91906117c8565b925050819055506104b533670de0b6b3a76400006108a3565b3373ffffffffffffffffffffffffffffffffffffffff167f0fa6157f4e9e99fb9310ffbda586ef6dacedf5e0d84f679f44e65ee1eb61687c8484846040516104ff939291906117fc565b60405180910390a2505050565b60606003805461051b906114ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610547906114ea565b80156105945780601f1061056957610100808354040283529160200191610594565b820191906000526020600020905b81548152906001019060200180831161057757829003601f168201915b5050505050905090565b6000806105a9610925565b90506105b681858561092d565b600191505092915050565b60076020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600301549080600401805461061c906114ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610648906114ea565b80156106955780601f1061066a57610100808354040283529160200191610695565b820191906000526020600020905b81548152906001019060200180831161067857829003601f168201915b5050505050905085565b6000600254905090565b6000806106b4610925565b90506106c185828561093f565b6106cc8585856109d4565b60019150509392505050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461075e906114ea565b80601f016020809104026020016040519081016040528092919081815260200182805461078a906114ea565b80156107d75780601f106107ac576101008083540402835291602001916107d7565b820191906000526020600020905b8154815290600101906020018083116107ba57829003601f168201915b5050505050905090565b6000806107ec610925565b90506107f98185856109d4565b600191505092915050565b60066020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109155760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161090c91906113f4565b60405180910390fd5b61092160008383610ac8565b5050565b600033905090565b61093a8383836001610ced565b505050565b600061094b848461081c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109ce57818110156109be578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016109b59392919061183a565b60405180910390fd5b6109cd84848484036000610ced565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a465760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a3d91906113f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab85760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610aaf91906113f4565b60405180910390fd5b610ac3838383610ac8565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b1a578060026000828254610b0e91906117c8565b92505081905550610bed565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ba6578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610b9d9392919061183a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c365780600260008282540392505081905550610c83565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ce09190611322565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d5f5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610d5691906113f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd15760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610dc891906113f4565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610ebe578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eb59190611322565b60405180910390a35b50505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b610eeb81610ed8565b8114610ef657600080fd5b50565b600081359050610f0881610ee2565b92915050565b6000819050919050565b610f2181610f0e565b8114610f2c57600080fd5b50565b600081359050610f3e81610f18565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610f9782610f4e565b810181811067ffffffffffffffff82111715610fb657610fb5610f5f565b5b80604052505050565b6000610fc9610ec4565b9050610fd58282610f8e565b919050565b600067ffffffffffffffff821115610ff557610ff4610f5f565b5b610ffe82610f4e565b9050602081019050919050565b82818337600083830152505050565b600061102d61102884610fda565b610fbf565b90508281526020810184848401111561104957611048610f49565b5b61105484828561100b565b509392505050565b600082601f83011261107157611070610f44565b5b813561108184826020860161101a565b91505092915050565b6000806000606084860312156110a3576110a2610ece565b5b60006110b186828701610ef9565b93505060206110c286828701610f2f565b925050604084013567ffffffffffffffff8111156110e3576110e2610ed3565b5b6110ef8682870161105c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015611133578082015181840152602081019050611118565b60008484015250505050565b600061114a826110f9565b6111548185611104565b9350611164818560208601611115565b61116d81610f4e565b840191505092915050565b60006020820190508181036000830152611192818461113f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111c58261119a565b9050919050565b6111d5816111ba565b81146111e057600080fd5b50565b6000813590506111f2816111cc565b92915050565b6000806040838503121561120f5761120e610ece565b5b600061121d858286016111e3565b925050602061122e85828601610ef9565b9150509250929050565b60008115159050919050565b61124d81611238565b82525050565b60006020820190506112686000830184611244565b92915050565b60006020828403121561128457611283610ece565b5b600061129284828501610ef9565b91505092915050565b6112a481610ed8565b82525050565b6112b381610f0e565b82525050565b6112c2816111ba565b82525050565b600060a0820190506112dd600083018861129b565b6112ea60208301876112aa565b6112f760408301866112b9565b611304606083018561129b565b8181036080830152611316818461113f565b90509695505050505050565b6000602082019050611337600083018461129b565b92915050565b60008060006060848603121561135657611355610ece565b5b6000611364868287016111e3565b9350506020611375868287016111e3565b925050604061138686828701610ef9565b9150509250925092565b600060ff82169050919050565b6113a681611390565b82525050565b60006020820190506113c1600083018461139d565b92915050565b6000602082840312156113dd576113dc610ece565b5b60006113eb848285016111e3565b91505092915050565b600060208201905061140960008301846112b9565b92915050565b6000806040838503121561142657611425610ece565b5b6000611434858286016111e3565b9250506020611445858286016111e3565b9150509250929050565b7f5461736b20616c726561647920636f6d706c6574656400000000000000000000600082015250565b6000611485601683611104565b91506114908261144f565b602082019050919050565b600060208201905081810360008301526114b481611478565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061150257607f821691505b602082108103611515576115146114bb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261157d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611540565b6115878683611540565b95508019841693508086168417925050509392505050565b6000819050919050565b60006115c46115bf6115ba84610ed8565b61159f565b610ed8565b9050919050565b6000819050919050565b6115de836115a9565b6115f26115ea826115cb565b84845461154d565b825550505050565b600090565b6116076115fa565b6116128184846115d5565b505050565b5b818110156116365761162b6000826115ff565b600181019050611618565b5050565b601f82111561167b5761164c8161151b565b61165584611530565b81016020851015611664578190505b61167861167085611530565b830182611617565b50505b505050565b600082821c905092915050565b600061169e60001984600802611680565b1980831691505092915050565b60006116b7838361168d565b9150826002028217905092915050565b6116d0826110f9565b67ffffffffffffffff8111156116e9576116e8610f5f565b5b6116f382546114ea565b6116fe82828561163a565b600060209050601f831160018114611731576000841561171f578287015190505b61172985826116ab565b865550611791565b601f19841661173f8661151b565b60005b8281101561176757848901518255600182019150602085019450602081019050611742565b868310156117845784890151611780601f89168261168d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117d382610ed8565b91506117de83610ed8565b92508282019050808211156117f6576117f5611799565b5b92915050565b6000606082019050611811600083018661129b565b61181e60208301856112aa565b8181036040830152611830818461113f565b9050949350505050565b600060608201905061184f60008301866112b9565b61185c602083018561129b565b611869604083018461129b565b94935050505056fea26469706673582212209984be054be556691949571d1c28c454bc3d2234f390749a56c14a878bfc8da664736f6c63430008180033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ce5760003560e01c8063313ce5671161008c57806395d89b411161006657806395d89b411461022b578063a9059cbb14610249578063bd4bbeb914610279578063dd62ed3e146102a9576100ce565b8063313ce567146101bf57806370a08231146101dd5780638da5cb5b1461020d576100ce565b8062a82c76146100d357806306fdde03146100ef578063095ea7b31461010d57806310a7fd7b1461013d57806318160ddd1461017157806323b872dd1461018f575b600080fd5b6100ed60048036038101906100e8919061108a565b6102d9565b005b6100f761050c565b6040516101049190611178565b60405180910390f35b610127600480360381019061012291906111f8565b61059e565b6040516101349190611253565b60405180910390f35b6101576004803603810190610152919061126e565b6105c1565b6040516101689594939291906112c8565b60405180910390f35b61017961069f565b6040516101869190611322565b60405180910390f35b6101a960048036038101906101a4919061133d565b6106a9565b6040516101b69190611253565b60405180910390f35b6101c76106d8565b6040516101d491906113ac565b60405180910390f35b6101f760048036038101906101f291906113c7565b6106e1565b6040516102049190611322565b60405180910390f35b610215610729565b60405161022291906113f4565b60405180910390f35b61023361074f565b6040516102409190611178565b60405180910390f35b610263600480360381019061025e91906111f8565b6107e1565b6040516102709190611253565b60405180910390f35b610293600480360381019061028e91906113c7565b610804565b6040516102a09190611322565b60405180910390f35b6102c360048036038101906102be919061140f565b61081c565b6040516102d09190611322565b60405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff166007600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461037e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103759061149b565b60405180910390fd5b6040518060a001604052808481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014281526020018281525060076000858152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030155608082015181600401908161044891906116c7565b509050506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461049c91906117c8565b925050819055506104b533670de0b6b3a76400006108a3565b3373ffffffffffffffffffffffffffffffffffffffff167f0fa6157f4e9e99fb9310ffbda586ef6dacedf5e0d84f679f44e65ee1eb61687c8484846040516104ff939291906117fc565b60405180910390a2505050565b60606003805461051b906114ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610547906114ea565b80156105945780601f1061056957610100808354040283529160200191610594565b820191906000526020600020905b81548152906001019060200180831161057757829003601f168201915b5050505050905090565b6000806105a9610925565b90506105b681858561092d565b600191505092915050565b60076020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600301549080600401805461061c906114ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610648906114ea565b80156106955780601f1061066a57610100808354040283529160200191610695565b820191906000526020600020905b81548152906001019060200180831161067857829003601f168201915b5050505050905085565b6000600254905090565b6000806106b4610925565b90506106c185828561093f565b6106cc8585856109d4565b60019150509392505050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461075e906114ea565b80601f016020809104026020016040519081016040528092919081815260200182805461078a906114ea565b80156107d75780601f106107ac576101008083540402835291602001916107d7565b820191906000526020600020905b8154815290600101906020018083116107ba57829003601f168201915b5050505050905090565b6000806107ec610925565b90506107f98185856109d4565b600191505092915050565b60066020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109155760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161090c91906113f4565b60405180910390fd5b61092160008383610ac8565b5050565b600033905090565b61093a8383836001610ced565b505050565b600061094b848461081c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109ce57818110156109be578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016109b59392919061183a565b60405180910390fd5b6109cd84848484036000610ced565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a465760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a3d91906113f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab85760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610aaf91906113f4565b60405180910390fd5b610ac3838383610ac8565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b1a578060026000828254610b0e91906117c8565b92505081905550610bed565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ba6578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610b9d9392919061183a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c365780600260008282540392505081905550610c83565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ce09190611322565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d5f5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610d5691906113f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd15760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610dc891906113f4565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610ebe578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eb59190611322565b60405180910390a35b50505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b610eeb81610ed8565b8114610ef657600080fd5b50565b600081359050610f0881610ee2565b92915050565b6000819050919050565b610f2181610f0e565b8114610f2c57600080fd5b50565b600081359050610f3e81610f18565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610f9782610f4e565b810181811067ffffffffffffffff82111715610fb657610fb5610f5f565b5b80604052505050565b6000610fc9610ec4565b9050610fd58282610f8e565b919050565b600067ffffffffffffffff821115610ff557610ff4610f5f565b5b610ffe82610f4e565b9050602081019050919050565b82818337600083830152505050565b600061102d61102884610fda565b610fbf565b90508281526020810184848401111561104957611048610f49565b5b61105484828561100b565b509392505050565b600082601f83011261107157611070610f44565b5b813561108184826020860161101a565b91505092915050565b6000806000606084860312156110a3576110a2610ece565b5b60006110b186828701610ef9565b93505060206110c286828701610f2f565b925050604084013567ffffffffffffffff8111156110e3576110e2610ed3565b5b6110ef8682870161105c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015611133578082015181840152602081019050611118565b60008484015250505050565b600061114a826110f9565b6111548185611104565b9350611164818560208601611115565b61116d81610f4e565b840191505092915050565b60006020820190508181036000830152611192818461113f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111c58261119a565b9050919050565b6111d5816111ba565b81146111e057600080fd5b50565b6000813590506111f2816111cc565b92915050565b6000806040838503121561120f5761120e610ece565b5b600061121d858286016111e3565b925050602061122e85828601610ef9565b9150509250929050565b60008115159050919050565b61124d81611238565b82525050565b60006020820190506112686000830184611244565b92915050565b60006020828403121561128457611283610ece565b5b600061129284828501610ef9565b91505092915050565b6112a481610ed8565b82525050565b6112b381610f0e565b82525050565b6112c2816111ba565b82525050565b600060a0820190506112dd600083018861129b565b6112ea60208301876112aa565b6112f760408301866112b9565b611304606083018561129b565b8181036080830152611316818461113f565b90509695505050505050565b6000602082019050611337600083018461129b565b92915050565b60008060006060848603121561135657611355610ece565b5b6000611364868287016111e3565b9350506020611375868287016111e3565b925050604061138686828701610ef9565b9150509250925092565b600060ff82169050919050565b6113a681611390565b82525050565b60006020820190506113c1600083018461139d565b92915050565b6000602082840312156113dd576113dc610ece565b5b60006113eb848285016111e3565b91505092915050565b600060208201905061140960008301846112b9565b92915050565b6000806040838503121561142657611425610ece565b5b6000611434858286016111e3565b9250506020611445858286016111e3565b9150509250929050565b7f5461736b20616c726561647920636f6d706c6574656400000000000000000000600082015250565b6000611485601683611104565b91506114908261144f565b602082019050919050565b600060208201905081810360008301526114b481611478565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061150257607f821691505b602082108103611515576115146114bb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261157d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611540565b6115878683611540565b95508019841693508086168417925050509392505050565b6000819050919050565b60006115c46115bf6115ba84610ed8565b61159f565b610ed8565b9050919050565b6000819050919050565b6115de836115a9565b6115f26115ea826115cb565b84845461154d565b825550505050565b600090565b6116076115fa565b6116128184846115d5565b505050565b5b818110156116365761162b6000826115ff565b600181019050611618565b5050565b601f82111561167b5761164c8161151b565b61165584611530565b81016020851015611664578190505b61167861167085611530565b830182611617565b50505b505050565b600082821c905092915050565b600061169e60001984600802611680565b1980831691505092915050565b60006116b7838361168d565b9150826002028217905092915050565b6116d0826110f9565b67ffffffffffffffff8111156116e9576116e8610f5f565b5b6116f382546114ea565b6116fe82828561163a565b600060209050601f831160018114611731576000841561171f578287015190505b61172985826116ab565b865550611791565b601f19841661173f8661151b565b60005b8281101561176757848901518255600182019150602085019450602081019050611742565b868310156117845784890151611780601f89168261168d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117d382610ed8565b91506117de83610ed8565b92508282019050808211156117f6576117f5611799565b5b92915050565b6000606082019050611811600083018661129b565b61181e60208301856112aa565b8181036040830152611830818461113f565b9050949350505050565b600060608201905061184f60008301866112b9565b61185c602083018561129b565b611869604083018461129b565b94935050505056fea26469706673582212209984be054be556691949571d1c28c454bc3d2234f390749a56c14a878bfc8da664736f6c63430008180033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
