{
  "_format": "hh-sol-artifact-1",
  "contractName": "ResourceMetering_Test",
  "sourceName": "contracts/test/ResourceMetering.t.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "version",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "opaqueData",
          "type": "bytes"
        }
      ],
      "name": "TransactionDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "log_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "log_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "log_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "name": "log_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "val",
          "type": "address"
        }
      ],
      "name": "log_named_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "val",
          "type": "bytes"
        }
      ],
      "name": "log_named_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "val",
          "type": "bytes32"
        }
      ],
      "name": "log_named_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        }
      ],
      "name": "log_named_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "val",
          "type": "string"
        }
      ],
      "name": "log_named_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "log_named_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "log_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "logs",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "IS_TEST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "_setUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_meter_initialResourceParams_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_meter_updateNoGasDelta_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_meter_updateOneEmptyBlock_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_meter_updateParamsNoChange_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_meter_updateTenEmptyBlocks_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_meter_updateTwoEmptyBlocks_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_meter_useMax_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_meter_useMoreThanMax_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60008054600160ff19909116811782556013805460806001600160a01b03199182168117909255601480546101009083168117909155601580546102009316831790559184905260a092909252606460c05260e09290925261c350909152602061014052600861016052674e4f4e5f5a45524f60c01b610180526060610120527fced1f90d33a6ca7cfbe479a1c2415c4287f559420415e3188c786e36414529be60165560405260226101a08181529062007a786101c039601790620000c6908262000180565b50348015620000d457600080fd5b506200024c565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200010657607f821691505b6020821081036200012757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200017b57600081815260208120601f850160051c81016020861015620001565750805b601f850160051c820191505b81811015620001775782815560010162000162565b5050505b505050565b81516001600160401b038111156200019c576200019c620000db565b620001b481620001ad8454620000f1565b846200012d565b602080601f831160018114620001ec5760008415620001d35750858301515b600019600386901b1c1916600185901b17855562000177565b600085815260208120601f198616915b828110156200021d57888601518255948401946001909101908401620001fc565b50858210156200023c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516177f66200028260003960005050600050506000505060005050600050506177f66000f3fe60806040523480156200001157600080fd5b5060043610620000e55760003560e01c80639c641be2116200008b578063b715d3bd1162000062578063b715d3bd1462000146578063ba414fa61462000150578063fa7626d4146200016e57600080fd5b80639c641be21462000128578063a8adc2b21462000132578063b388fd7d146200013c57600080fd5b8063143103b511620000c0578063143103b5146200010a5780635ba201e414620001145780635bc92698146200011e57600080fd5b8063024e2e1f14620000ea5780630992841314620000f65780630a9254e41462000100575b600080fd5b620000f46200017c565b005b620000f4620003ed565b620000f462000649565b620000f4620006eb565b620000f462000947565b620000f462000e87565b620000f462001149565b620000f4620012f6565b620000f4620015a4565b620000f462001a34565b6200015a62001c70565b604051901515815260200160405180910390f35b6000546200015a9060ff1681565b601954737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f3090620001ca9074010000000000000000000000000000000000000000900467ffffffffffffffff16600162002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200022557600080fd5b505af11580156200023a573d6000803e3d6000fd5b50506019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b4b64fbb9150602401600060405180830381600087803b158015620002ab57600080fd5b505af1158015620002c0573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000337573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035d919062002181565b92509250925062000385836fffffffffffffffffffffffffffffffff1663342770c062001dda565b6200039c8267ffffffffffffffff16600062001dda565b601954620003e89067ffffffffffffffff80841691620003d8917401000000000000000000000000000000000000000090910416600162002118565b67ffffffffffffffff1662001dda565b505050565b601954737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f30906200043b9074010000000000000000000000000000000000000000900467ffffffffffffffff16600262002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200049657600080fd5b505af1158015620004ab573d6000803e3d6000fd5b50506019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b4b64fbb9150602401600060405180830381600087803b1580156200051c57600080fd5b505af115801562000531573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620005a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ce919062002181565b925092509250620005f6836fffffffffffffffffffffffffffffffff16632da282a762001dda565b6200060d8267ffffffffffffffff16600062001dda565b601954620003e89067ffffffffffffffff80841691620003d8917401000000000000000000000000000000000000000090910416600262002118565b6200065362000947565b6040516200066190620020cd565b604051809103906000f0801580156200067e573d6000803e3d6000fd5b506019805473ffffffffffffffffffffffffffffffffffffffff929092167fffffffff0000000000000000000000000000000000000000000000000000000090921691909117740100000000000000000000000000000000000000004367ffffffffffffffff1602179055565b601954737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f3090620007399074010000000000000000000000000000000000000000900467ffffffffffffffff16600a62002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200079457600080fd5b505af1158015620007a9573d6000803e3d6000fd5b50506019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b4b64fbb9150602401600060405180830381600087803b1580156200081a57600080fd5b505af11580156200082f573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620008a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008cc919062002181565b925092509250620008f4836fffffffffffffffffffffffffffffffff16630fae36f862001dda565b6200090b8267ffffffffffffffff16600062001dda565b601954620003e89067ffffffffffffffff80841691620003d8917401000000000000000000000000000000000000000090910416600a62002118565b6013546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015620009d057600080fd5b505af1158015620009e5573d6000803e3d6000fd5b50506014546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801562000a7257600080fd5b505af115801562000a87573d6000803e3d6000fd5b50506015546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801562000b1457600080fd5b505af115801562000b29573d6000803e3d6000fd5b5050601354604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600560448201527f616c6963650000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562000be057600080fd5b505af115801562000bf5573d6000803e3d6000fd5b5050601454604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600360448201527f626f6200000000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562000cac57600080fd5b505af115801562000cc1573d6000803e3d6000fd5b5050601554604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600860448201527f6d756c74697369670000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562000d7857600080fd5b505af115801562000d8d573d6000803e3d6000fd5b50506040517f39b37ab0000000000000000000000000000000000000000000000000000000008152633b9aca006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506339b37ab09150602401600060405180830381600087803b15801562000dfb57600080fd5b505af115801562000e10573d6000803e3d6000fd5b5050505060405162000e2290620020db565b604051809103906000f08015801562000e3f573d6000803e3d6000fd5b50601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063b4b64fbb90602401600060405180830381600087803b15801562000ef457600080fd5b505af115801562000f09573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fa6919062002181565b6019546040517fb4b64fbb00000000000000000000000000000000000000000000000000000000815260006004820152939650919450925073ffffffffffffffffffffffffffffffffffffffff169063b4b64fbb90602401600060405180830381600087803b1580156200101957600080fd5b505af11580156200102e573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620010a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010cb919062002181565b92509250925062001101836fffffffffffffffffffffffffffffffff16876fffffffffffffffffffffffffffffffff1662001dda565b620011218267ffffffffffffffff168667ffffffffffffffff1662001dda565b620011418167ffffffffffffffff168567ffffffffffffffff1662001dda565b505050505050565b6000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620011bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e2919062002181565b925092509250620012ab836fffffffffffffffffffffffffffffffff16601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166313620abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012939190620021cb565b6fffffffffffffffffffffffffffffffff1662001dda565b620012c28267ffffffffffffffff16600062001dda565b601954620003e89067ffffffffffffffff808416917401000000000000000000000000000000000000000090041662001dda565b601954604080517fca3e99ba000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163ca3e99ba9160048083019260209291908290030181865afa15801562001367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200138d9190620021f0565b90506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bb0291e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014259190620021f0565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390608401600060405180830381600087803b158015620014e257600080fd5b505af1158015620014f7573d6000803e3d6000fd5b505060195473ffffffffffffffffffffffffffffffffffffffff16915063b4b64fbb90506200152783856200220a565b6200153490600162002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200158f57600080fd5b505af115801562001141573d6000803e3d6000fd5b601954604080517fca3e99ba000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163ca3e99ba9160048083019260209291908290030181865afa15801562001615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200163b9190620021f0565b90506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bb0291e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d39190620021f0565b60195490915073ffffffffffffffffffffffffffffffffffffffff1663b4b64fbb6200170083856200220a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200175b57600080fd5b505af115801562001770573d6000803e3d6000fd5b505050506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620017e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180a919062002181565b5091506200182a905067ffffffffffffffff8216620003d884866200220a565b601954737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f3090620018789074010000000000000000000000000000000000000000900467ffffffffffffffff16600162002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b158015620018d357600080fd5b505af1158015620018e8573d6000803e3d6000fd5b50506019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b4b64fbb9150602401600060405180830381600087803b1580156200195957600080fd5b505af11580156200196e573d6000803e3d6000fd5b505050506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620019e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a08919062002181565b5050905062001a2e816fffffffffffffffffffffffffffffffff166351f4d5c062001dda565b50505050565b601954604080517fca3e99ba000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163ca3e99ba9160048083019260209291908290030181865afa15801562001aa5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001acb9190620021f0565b6019546040517fb4b64fbb00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8316600482015291925073ffffffffffffffffffffffffffffffffffffffff169063b4b64fbb90602401600060405180830381600087803b15801562001b4257600080fd5b505af115801562001b57573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562001bce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bf4919062002181565b92509250925062001c1c836fffffffffffffffffffffffffffffffff16633b9aca0062001dda565b62001c3c8267ffffffffffffffff168567ffffffffffffffff1662001dda565b60195462001a2e9067ffffffffffffffff808416917401000000000000000000000000000000000000000090041662001dda565b60008054610100900460ff161562001c915750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562001dd55760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001d39917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200227b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001d7391620022b9565b6000604051808303816000865af19150503d806000811462001db2576040519150601f19603f3d011682016040523d82523d6000602084013e62001db7565b606091505b509150508080602001905181019062001dd19190620022c7565b9150505b919050565b80821462001f46577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162001e689060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a160408051818152600a818301527f202045787065637465640000000000000000000000000000000000000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a160408051818152600a818301527f2020202041637475616c0000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a162001f4662001f4a565b5050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200209f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200201c92916020016200227b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200205691620022b9565b6000604051808303816000865af19150503d806000811462002095576040519150601f19603f3d011682016040523d82523d6000602084013e6200209a565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61138a80620022ec83390190565b614174806200367683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168083038211156200213e576200213e620020e9565b01949350505050565b80516fffffffffffffffffffffffffffffffff8116811462001dd557600080fd5b805167ffffffffffffffff8116811462001dd557600080fd5b6000806000606084860312156200219757600080fd5b620021a28462002147565b9250620021b26020850162002168565b9150620021c26040850162002168565b90509250925092565b600060208284031215620021de57600080fd5b620021e98262002147565b9392505050565b6000602082840312156200220357600080fd5b5051919050565b600067ffffffffffffffff80831681851681830481118215151615620022345762002234620020e9565b02949350505050565b6000815160005b8181101562002260576020818501810151868301520162002244565b8181111562002270576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620022b160048301846200223d565b949350505050565b6000620021e982846200223d565b600060208284031215620022da57600080fd5b81518015158114620021e957600080fdfe60806040523480156200001157600080fd5b506200001c62000022565b62000206565b600054610100900460ff1615808015620000435750600054600160ff909116105b8062000073575062000060306200015460201b620006ab1760201c565b15801562000073575060005460ff166001145b620000dc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000100576000805461ff0019166101001790555b6200010a62000163565b801562000151576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff16620001d05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d3565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b61117480620002166000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063867ead1311610076578063ca3e99ba1161005b578063ca3e99ba14610151578063cd7c978914610159578063cff0ab961461016157600080fd5b8063867ead1314610135578063b4b64fbb1461013e57600080fd5b806364b79208116100a757806364b79208146101195780636bb0291e146101235780638129fc1c1461012b57600080fd5b806313620abd146100c35780635c1f2827146100f4575b600080fd5b6100ce633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010b6fffffffffffffffffffffffffffffffff81565b6040519081526020016100eb565b61010b627a120081565b61010b600481565b6101336101f5565b005b61010b61271081565b61013361014c366004610e0c565b61038c565b61010b61069a565b61010b600881565b6001546101bc906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016100eb565b600054610100900460ff16158080156102155750600054600160ff909116105b8061022f5750303b15801561022f575060005460ff166001145b6102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561031e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6103266106c7565b801561038957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b8060005a6001549091506000906103c9907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643610e65565b905080156104fd5760006103e16004627a1200610eab565b60015461040c9190700100000000000000000000000000000000900467ffffffffffffffff16610f13565b9050600060086104206004627a1200610eab565b6001546104409085906fffffffffffffffffffffffffffffffff16610f87565b61044a9190610eab565b6104549190610eab565b6001549091506000906104979061047e9084906fffffffffffffffffffffffffffffffff16611043565b6127106fffffffffffffffffffffffffffffffff6107aa565b905060018411156104be576104bb61047e8260086104b6600189610e65565b6107c7565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610530908490700100000000000000000000000000000000900467ffffffffffffffff166110b7565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561060c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016102b7565b600154600090610638906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166110e3565b6fffffffffffffffffffffffffffffffff169050600061065c48633b9aca0061081c565b610666908361111b565b905060005a6106759086610e65565b9050808211156106915761069161068c8284610e65565b610835565b50505050505050565b6106a86004627a1200610eab565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600054610100900460ff1661075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102b7565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60006107bf6107b98585610863565b83610873565b949350505050565b6000670de0b6b3a76400006108086107df8583610eab565b6107f190670de0b6b3a7640000610f13565b61080385670de0b6b3a7640000610f87565b610882565b6108129086610f87565b6107bf9190610eab565b60008183101561082c578161082e565b825b9392505050565b6000805a90505b825a6108489083610e65565b101561085e576108578261112f565b915061083c565b505050565b60008183121561082c578161082e565b600081831261082c578161082e565b600061082e670de0b6b3a76400008361089a866108b3565b6108a49190610f87565b6108ae9190610eab565b610af7565b600080821361091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016102b7565b6000606061092b84610d36565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213610b2857506000919050565b680755bf798b4a1bf1e58212610b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016102b7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000808211610da1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016102b7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b600060208284031215610e1e57600080fd5b813567ffffffffffffffff8116811461082e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015610e7757610e77610e36565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610eba57610eba610e7c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615610f0e57610f0e610e36565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615610f4d57610f4d610e36565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615610f8157610f81610e36565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610fc857610fc8610e36565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561100357611003610e36565b6000871292508782058712848416161561101f5761101f610e36565b8785058712818416161561103557611035610e36565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561107d5761107d610e36565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156110b1576110b1610e36565b50500190565b600067ffffffffffffffff8083168185168083038211156110da576110da610e36565b01949350505050565b60006fffffffffffffffffffffffffffffffff8083168185168183048111821515161561111257611112610e36565b02949350505050565b60008261112a5761112a610e7c565b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361116057611160610e36565b506001019056fea164736f6c634300080f000a60806040526000805460ff1916600117905534801561001d57600080fd5b506141478061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100c85760003560e01c80637e577a1b11610081578063dcf5edef1161005b578063dcf5edef146101c0578063fa7626d4146101d3578063fc677392146101e057600080fd5b80637e577a1b14610172578063ba414fa614610195578063c21e8865146101ad57600080fd5b806335337aab116100b257806335337aab14610117578063498a3c021461012a578063526dc9551461014a57600080fd5b8062ec31a6146100cd5780631aac97c1146100f3575b600080fd5b6100e06100db3660046136cb565b6101f3565b6040519081526020015b60405180910390f35b610106610101366004613745565b6108dc565b6040516100ea9594939291906138e2565b6100e0610125366004613925565b610fed565b61013d6101383660046136cb565b6117e4565b6040516100ea91906139b1565b61015d6101583660046139c4565b611ec1565b604080519283526020830191909152016100ea565b6101856101803660046139dd565b612179565b6040516100ea9493929190613a26565b61019d6123f8565b60405190151581526020016100ea565b6100e06101bb3660046136cb565b612558565b6100e06101ce366004613a65565b61265f565b60005461019d9060ff1681565b61013d6101ee366004613a97565b6128e6565b6040805160098082526101408201909252600091829190816020015b606081526020019060019003908161020f5790505090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061026f5761026f613ad3565b602002602001018190525060405180606001604052806024815260200161411760249139816001815181106102a6576102a6613ad3565b60200260200101819052506040518060400160405280601681526020017f6861736843726f7373446f6d61696e4d65737361676500000000000000000000815250816002815181106102fa576102fa613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101899052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561036e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103b49190810190613b32565b816003815181106103c7576103c7613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610450573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104969190810190613b32565b816004815181106104a9576104a9613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105789190810190613b32565b8160058151811061058b5761058b613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156105ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106459190810190613b32565b8160068151811061065857610658613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156106cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107129190810190613b32565b8160078151811061072557610725613ad3565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d906107809086906004016139b1565b600060405180830381865afa15801561079d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107e39190810190613b32565b816008815181106107f6576107f6613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790610854908590600401613b7b565b6000604051808303816000875af1158015610873573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108b99190810190613c1b565b9050808060200190518101906108cf9190613c50565b9998505050505050505050565b6000808080606081600960405190808252806020026020018201604052801561091957816020015b60608152602001906001900390816109045790505b5090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061096557610965613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061099c5761099c613ad3565b60200260200101819052506040518060600160405280602381526020016140f460239139816002815181106109d3576109d3613ad3565b602090810291909101015286516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610a4a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a909190810190613b32565b81600381518110610aa357610aa3613ad3565b6020908102919091018101919091528701516040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610b34573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b7a9190810190613b32565b81600481518110610b8d57610b8d613ad3565b602090810291909101015260408781015190517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610c1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c629190810190613b32565b81600581518110610c7557610c75613ad3565b602090810291909101015260608701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610d359190810190613b32565b81600681518110610d4857610d48613ad3565b602090810291909101015260808701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610dc2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610e089190810190613b32565b81600781518110610e1b57610e1b613ad3565b602090810291909101015260a08701516040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d916371aad10d91610e7a91906004016139b1565b600060405180830381865afa158015610e97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610edd9190810190613b32565b81600881518110610ef057610ef0613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790610f4e908590600401613b7b565b6000604051808303816000875af1158015610f6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610fb39190810190613c1b565b9050600080600080600085806020019051810190610fd19190613d08565b939f50919d509b50995097505050505050505091939590929450565b60408051600b8082526101808201909252600091829190816020015b60608152602001906001900390816110095790505090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061106957611069613ad3565b602002602001018190525060405180606001604052806024815260200161411760249139816001815181106110a0576110a0613ad3565b60200260200101819052506040518060400160405280601681526020017f686173684465706f7369745472616e73616374696f6e00000000000000000000815250816002815181106110f4576110f4613ad3565b60200260200101819052506040518060800160405280604281526020016140b2604291398160038151811061112b5761112b613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561119f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e59190810190613b32565b816004815181106111f8576111f8613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112c79190810190613b32565b816005815181106112da576112da613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113a99190810190613b32565b816006815181106113bc576113bc613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101889052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611430573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526114769190810190613b32565b8160078151811061148957611489613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156114fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115439190810190613b32565b8160088151811061155657611556613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156115d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116199190810190613b32565b8160098151811061162c5761162c613ad3565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d906116879087906004016139b1565b600060405180830381865afa1580156116a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116ea9190810190613b32565b81600a815181106116fd576116fd613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063891604679061175b908590600401613b7b565b6000604051808303816000875af115801561177a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117c09190810190613c1b565b9050808060200190518101906117d69190613c50565b9a9950505050505050505050565b604080516009808252610140820190925260609160009190816020015b60608152602001906001900390816118015790505090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061186157611861613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061189857611898613ad3565b60200260200101819052506040518060400160405280601881526020017f656e636f646543726f7373446f6d61696e4d6573736167650000000000000000815250816002815181106118ec576118ec613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101899052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611960573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119a69190810190613b32565b816003815181106119b9576119b9613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611a42573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611a889190810190613b32565b81600481518110611a9b57611a9b613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611b24573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b6a9190810190613b32565b81600581518110611b7d57611b7d613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611bf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611c379190810190613b32565b81600681518110611c4a57611c4a613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611cbe573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611d049190810190613b32565b81600781518110611d1757611d17613ad3565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d90611d729086906004016139b1565b600060405180830381865afa158015611d8f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611dd59190810190613b32565b81600881518110611de857611de8613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790611e46908590600401613b7b565b6000604051808303816000875af1158015611e65573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611eab9190810190613c1b565b9050808060200190518101906108cf9190613c1b565b60408051600480825260a0820190925260009182918291816020015b6060815260200190600190039081611edd5790505090506040518060400160405280600481526020017f6e6f64650000000000000000000000000000000000000000000000000000000081525081600081518110611f3d57611f3d613ad3565b60200260200101819052506040518060600160405280602481526020016141176024913981600181518110611f7457611f74613ad3565b60200260200101819052506040518060400160405280601481526020017f6465636f646556657273696f6e65644e6f6e636500000000000000000000000081525081600281518110611fc857611fc8613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561203c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526120829190810190613b32565b8160038151811061209557612095613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906120f3908590600401613b7b565b6000604051808303816000875af1158015612112573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526121589190810190613c1b565b90508080602001905181019061216e9190613d6c565b935093505050915091565b60408051600580825260c08201909252600091606091829182918591816020015b606081526020019060019003908161219a5790505090506040518060400160405280601a81526020017f2e2f746573742d636173652d67656e657261746f722f66757a7a000000000000815250816000815181106121fa576121fa613ad3565b60200260200101819052506040518060400160405280600281526020017f2d6d0000000000000000000000000000000000000000000000000000000000008152508160018151811061224e5761224e613ad3565b60200260200101819052506040518060400160405280600481526020017f7472696500000000000000000000000000000000000000000000000000000000815250816002815181106122a2576122a2613ad3565b60200260200101819052506040518060400160405280600281526020017f2d76000000000000000000000000000000000000000000000000000000000000815250816003815181106122f6576122f6613ad3565b6020026020010181905250858160048151811061231557612315613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790612370908490600401613b7b565b6000604051808303816000875af115801561238f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526123d59190810190613c1b565b8060200190518101906123e89190613d90565b9450945094509450509193509193565b60008054610100900460ff16156124185750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156125535760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916124bd917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001613e22565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526124f591613e6a565b6000604051808303816000865af19150503d8060008114612532576040519150601f19603f3d011682016040523d82523d6000602084013e612537565b606091505b509150508080602001905181019061254f9190613e97565b9150505b919050565b6040805160098082526101408201909252600091829190816020015b60608152602001906001900390816125745790505090506040518060400160405280600481526020017f6e6f646500000000000000000000000000000000000000000000000000000000815250816000815181106125d4576125d4613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061260b5761260b613ad3565b60200260200101819052506040518060400160405280600e81526020017f686173685769746864726177616c000000000000000000000000000000000000815250816002815181106102fa576102fa613ad3565b6040805160078082526101008201909252600091829190816020015b606081526020019060019003908161267b5790505090506040518060400160405280600481526020017f6e6f646500000000000000000000000000000000000000000000000000000000815250816000815181106126db576126db613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061271257612712613ad3565b60200260200101819052506040518060400160405280601381526020017f686173684f7574707574526f6f7450726f6f66000000000000000000000000008152508160028151811061276657612766613ad3565b602090810291909101015261277a866132a3565b8160038151811061278d5761278d613ad3565b60209081029190910101526127a1856132a3565b816004815181106127b4576127b4613ad3565b60209081029190910101526127c8846132a3565b816005815181106127db576127db613ad3565b60209081029190910101526127ef836132a3565b8160068151811061280257612802613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790612860908590600401613b7b565b6000604051808303816000875af115801561287f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526128c59190810190613c1b565b9050808060200190518101906128db9190613c50565b979650505050505050565b60408051600c8082526101a0820190925260609160009190816020015b60608152602001906001900390816129035790505090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061296357612963613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061299a5761299a613ad3565b60200260200101819052506040518060400160405280601881526020017f656e636f64654465706f7369745472616e73616374696f6e0000000000000000815250816002815181106129ee576129ee613ad3565b602090810291909101810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90612a2590860186613eb4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381865afa158015612a8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612ad49190810190613b32565b81600381518110612ae757612ae7613ad3565b60200260200101819052507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166356ca623e846020016020810190612b449190613eb4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381865afa158015612bad573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612bf39190810190613b32565b81600481518110612c0657612c06613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260608401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015612c7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612cc39190810190613b32565b81600581518110612cd657612cd6613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260808401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015612d4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612d939190810190613b32565b81600681518110612da657612da6613ad3565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d636900a3ae612ddb60c0860160a08701613ecf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381865afa158015612e38573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e7e9190810190613b32565b81600781518110612e9157612e91613ad3565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d6371dce7da612ec66060860160408701613eea565b6040518263ffffffff1660e01b8152600401612ee6911515815260200190565b600060405180830381865afa158015612f03573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612f499190810190613b32565b81600881518110612f5c57612f5c613ad3565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d6371aad10d612f8e60c0860186613f07565b6040518363ffffffff1660e01b8152600401612fab929190613f73565b600060405180830381865afa158015612fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261300e9190810190613b32565b8160098151811061302157613021613ad3565b60209081029190910101526040517fb11a19e800000000000000000000000000000000000000000000000000000000815260e08401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063b11a19e890602401600060405180830381865afa158015613098573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526130de9190810190613b32565b81600a815181106130f1576130f1613ad3565b60209081029190910101526040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526101008401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015613169573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526131af9190810190613b32565b81600b815181106131c2576131c2613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790613220908590600401613b7b565b6000604051808303816000875af115801561323f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526132859190810190613c1b565b90508080602001905181019061329b9190613c1b565b949350505050565b6060816000036132e657505060408051808201909152600481527f3078303000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561330957806132fa81613fef565b915050600882901c91506132ea565b61329b84826060600061331d836002614027565b613328906002614064565b67ffffffffffffffff81111561334057613340613580565b6040519080825280601f01601f19166020018201604052801561336a576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106133a1576133a1613ad3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061340457613404613ad3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613440846002614027565b61344b906001614064565b90505b60018111156134e8577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061348c5761348c613ad3565b1a60f81b8282815181106134a2576134a2613ad3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936134e18161407c565b905061344e565b508315613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640160405180910390fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461255357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156135d2576135d2613580565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561361f5761361f613580565b604052919050565b600067ffffffffffffffff82111561364157613641613580565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600061368061367b84613627565b6135d8565b905082815283838301111561369457600080fd5b828260208301376000602084830101529392505050565b600082601f8301126136bc57600080fd5b6135558383356020850161366d565b60008060008060008060c087890312156136e457600080fd5b863595506136f46020880161355c565b94506137026040880161355c565b9350606087013592506080870135915060a087013567ffffffffffffffff81111561372c57600080fd5b61373889828a016136ab565b9150509295509295509295565b60006020828403121561375757600080fd5b813567ffffffffffffffff8082111561376f57600080fd5b9083019060c0828603121561378357600080fd5b61378b6135af565b8235815261379b6020840161355c565b60208201526137ac6040840161355c565b6040820152606083013560608201526080830135608082015260a0830135828111156137d757600080fd5b6137e3878286016136ab565b60a08301525095945050505050565b60005b8381101561380d5781810151838201526020016137f5565b8381111561381c576000848401525b50505050565b6000815180845261383a8160208601602086016137f2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156138d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030189526138c3838351613822565b98840198925090830190600101613889565b5090979650505050505050565b85815284602082015283604082015282606082015260a0608082015260006128db60a083018461386c565b803567ffffffffffffffff8116811461255357600080fd5b600080600080600080600060e0888a03121561394057600080fd5b6139498861355c565b96506139576020890161355c565b955060408801359450606088013593506139736080890161390d565b925060a088013567ffffffffffffffff81111561398f57600080fd5b61399b8a828b016136ab565b92505060c0880135905092959891949750929550565b6020815260006135556020830184613822565b6000602082840312156139d657600080fd5b5035919050565b6000602082840312156139ef57600080fd5b813567ffffffffffffffff811115613a0657600080fd5b8201601f81018413613a1757600080fd5b61329b8482356020840161366d565b848152608060208201526000613a3f6080830186613822565b8281036040840152613a518186613822565b905082810360608401526128db818561386c565b60008060008060808587031215613a7b57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215613aa957600080fd5b813567ffffffffffffffff811115613ac057600080fd5b8201610120818503121561355557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613b1061367b84613627565b9050828152838383011115613b2457600080fd5b6135558360208301846137f2565b600060208284031215613b4457600080fd5b815167ffffffffffffffff811115613b5b57600080fd5b8201601f81018413613b6c57600080fd5b61329b84825160208401613b02565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613bee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613bdc858351613822565b94509285019290850190600101613ba2565b5092979650505050505050565b600082601f830112613c0c57600080fd5b61355583835160208501613b02565b600060208284031215613c2d57600080fd5b815167ffffffffffffffff811115613c4457600080fd5b61329b84828501613bfb565b600060208284031215613c6257600080fd5b5051919050565b600082601f830112613c7a57600080fd5b8151602067ffffffffffffffff80831115613c9757613c97613580565b8260051b613ca68382016135d8565b9384528581018301938381019088861115613cc057600080fd5b84880192505b85831015613cfc57825184811115613cde5760008081fd5b613cec8a87838c0101613bfb565b8352509184019190840190613cc6565b98975050505050505050565b600080600080600060a08688031215613d2057600080fd5b85519450602086015193506040860151925060608601519150608086015167ffffffffffffffff811115613d5357600080fd5b613d5f88828901613c69565b9150509295509295909350565b60008060408385031215613d7f57600080fd5b505080516020909101519092909150565b60008060008060808587031215613da657600080fd5b84519350602085015167ffffffffffffffff80821115613dc557600080fd5b613dd188838901613bfb565b94506040870151915080821115613de757600080fd5b613df388838901613bfb565b93506060870151915080821115613e0957600080fd5b50613e1687828801613c69565b91505092959194509250565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251613e5c8160048501602087016137f2565b919091016004019392505050565b60008251613e7c8184602087016137f2565b9190910192915050565b8015158114613e9457600080fd5b50565b600060208284031215613ea957600080fd5b815161355581613e86565b600060208284031215613ec657600080fd5b6135558261355c565b600060208284031215613ee157600080fd5b6135558261390d565b600060208284031215613efc57600080fd5b813561355581613e86565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f3c57600080fd5b83018035915067ffffffffffffffff821115613f5757600080fd5b602001915036819003821315613f6c57600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361402057614020613fc0565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405f5761405f613fc0565b500290565b6000821982111561407757614077613fc0565b500190565b60008161408b5761408b613fc0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fe30783030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303067657450726f76655769746864726177616c5472616e73616374696f6e496e70757473646973742f736372697074732f646966666572656e7469616c2d74657374696e672e6a73a164736f6c634300080f000aa164736f6c634300080f000a0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0000",
  "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000e55760003560e01c80639c641be2116200008b578063b715d3bd1162000062578063b715d3bd1462000146578063ba414fa61462000150578063fa7626d4146200016e57600080fd5b80639c641be21462000128578063a8adc2b21462000132578063b388fd7d146200013c57600080fd5b8063143103b511620000c0578063143103b5146200010a5780635ba201e414620001145780635bc92698146200011e57600080fd5b8063024e2e1f14620000ea5780630992841314620000f65780630a9254e41462000100575b600080fd5b620000f46200017c565b005b620000f4620003ed565b620000f462000649565b620000f4620006eb565b620000f462000947565b620000f462000e87565b620000f462001149565b620000f4620012f6565b620000f4620015a4565b620000f462001a34565b6200015a62001c70565b604051901515815260200160405180910390f35b6000546200015a9060ff1681565b601954737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f3090620001ca9074010000000000000000000000000000000000000000900467ffffffffffffffff16600162002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200022557600080fd5b505af11580156200023a573d6000803e3d6000fd5b50506019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b4b64fbb9150602401600060405180830381600087803b158015620002ab57600080fd5b505af1158015620002c0573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000337573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035d919062002181565b92509250925062000385836fffffffffffffffffffffffffffffffff1663342770c062001dda565b6200039c8267ffffffffffffffff16600062001dda565b601954620003e89067ffffffffffffffff80841691620003d8917401000000000000000000000000000000000000000090910416600162002118565b67ffffffffffffffff1662001dda565b505050565b601954737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f30906200043b9074010000000000000000000000000000000000000000900467ffffffffffffffff16600262002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200049657600080fd5b505af1158015620004ab573d6000803e3d6000fd5b50506019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b4b64fbb9150602401600060405180830381600087803b1580156200051c57600080fd5b505af115801562000531573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620005a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ce919062002181565b925092509250620005f6836fffffffffffffffffffffffffffffffff16632da282a762001dda565b6200060d8267ffffffffffffffff16600062001dda565b601954620003e89067ffffffffffffffff80841691620003d8917401000000000000000000000000000000000000000090910416600262002118565b6200065362000947565b6040516200066190620020cd565b604051809103906000f0801580156200067e573d6000803e3d6000fd5b506019805473ffffffffffffffffffffffffffffffffffffffff929092167fffffffff0000000000000000000000000000000000000000000000000000000090921691909117740100000000000000000000000000000000000000004367ffffffffffffffff1602179055565b601954737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f3090620007399074010000000000000000000000000000000000000000900467ffffffffffffffff16600a62002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200079457600080fd5b505af1158015620007a9573d6000803e3d6000fd5b50506019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b4b64fbb9150602401600060405180830381600087803b1580156200081a57600080fd5b505af11580156200082f573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620008a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008cc919062002181565b925092509250620008f4836fffffffffffffffffffffffffffffffff16630fae36f862001dda565b6200090b8267ffffffffffffffff16600062001dda565b601954620003e89067ffffffffffffffff80841691620003d8917401000000000000000000000000000000000000000090910416600a62002118565b6013546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015620009d057600080fd5b505af1158015620009e5573d6000803e3d6000fd5b50506014546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801562000a7257600080fd5b505af115801562000a87573d6000803e3d6000fd5b50506015546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801562000b1457600080fd5b505af115801562000b29573d6000803e3d6000fd5b5050601354604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600560448201527f616c6963650000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562000be057600080fd5b505af115801562000bf5573d6000803e3d6000fd5b5050601454604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600360448201527f626f6200000000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562000cac57600080fd5b505af115801562000cc1573d6000803e3d6000fd5b5050601554604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600860448201527f6d756c74697369670000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562000d7857600080fd5b505af115801562000d8d573d6000803e3d6000fd5b50506040517f39b37ab0000000000000000000000000000000000000000000000000000000008152633b9aca006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506339b37ab09150602401600060405180830381600087803b15801562000dfb57600080fd5b505af115801562000e10573d6000803e3d6000fd5b5050505060405162000e2290620020db565b604051809103906000f08015801562000e3f573d6000803e3d6000fd5b50601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063b4b64fbb90602401600060405180830381600087803b15801562000ef457600080fd5b505af115801562000f09573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fa6919062002181565b6019546040517fb4b64fbb00000000000000000000000000000000000000000000000000000000815260006004820152939650919450925073ffffffffffffffffffffffffffffffffffffffff169063b4b64fbb90602401600060405180830381600087803b1580156200101957600080fd5b505af11580156200102e573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620010a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010cb919062002181565b92509250925062001101836fffffffffffffffffffffffffffffffff16876fffffffffffffffffffffffffffffffff1662001dda565b620011218267ffffffffffffffff168667ffffffffffffffff1662001dda565b620011418167ffffffffffffffff168567ffffffffffffffff1662001dda565b505050505050565b6000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620011bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e2919062002181565b925092509250620012ab836fffffffffffffffffffffffffffffffff16601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166313620abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012939190620021cb565b6fffffffffffffffffffffffffffffffff1662001dda565b620012c28267ffffffffffffffff16600062001dda565b601954620003e89067ffffffffffffffff808416917401000000000000000000000000000000000000000090041662001dda565b601954604080517fca3e99ba000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163ca3e99ba9160048083019260209291908290030181865afa15801562001367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200138d9190620021f0565b90506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bb0291e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014259190620021f0565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390608401600060405180830381600087803b158015620014e257600080fd5b505af1158015620014f7573d6000803e3d6000fd5b505060195473ffffffffffffffffffffffffffffffffffffffff16915063b4b64fbb90506200152783856200220a565b6200153490600162002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200158f57600080fd5b505af115801562001141573d6000803e3d6000fd5b601954604080517fca3e99ba000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163ca3e99ba9160048083019260209291908290030181865afa15801562001615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200163b9190620021f0565b90506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bb0291e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d39190620021f0565b60195490915073ffffffffffffffffffffffffffffffffffffffff1663b4b64fbb6200170083856200220a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200175b57600080fd5b505af115801562001770573d6000803e3d6000fd5b505050506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620017e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180a919062002181565b5091506200182a905067ffffffffffffffff8216620003d884866200220a565b601954737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f3090620018789074010000000000000000000000000000000000000000900467ffffffffffffffff16600162002118565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b158015620018d357600080fd5b505af1158015620018e8573d6000803e3d6000fd5b50506019546040517fb4b64fbb0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b4b64fbb9150602401600060405180830381600087803b1580156200195957600080fd5b505af11580156200196e573d6000803e3d6000fd5b505050506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620019e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a08919062002181565b5050905062001a2e816fffffffffffffffffffffffffffffffff166351f4d5c062001dda565b50505050565b601954604080517fca3e99ba000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163ca3e99ba9160048083019260209291908290030181865afa15801562001aa5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001acb9190620021f0565b6019546040517fb4b64fbb00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8316600482015291925073ffffffffffffffffffffffffffffffffffffffff169063b4b64fbb90602401600060405180830381600087803b15801562001b4257600080fd5b505af115801562001b57573d6000803e3d6000fd5b505050506000806000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562001bce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bf4919062002181565b92509250925062001c1c836fffffffffffffffffffffffffffffffff16633b9aca0062001dda565b62001c3c8267ffffffffffffffff168567ffffffffffffffff1662001dda565b60195462001a2e9067ffffffffffffffff808416917401000000000000000000000000000000000000000090041662001dda565b60008054610100900460ff161562001c915750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562001dd55760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001d39917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200227b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001d7391620022b9565b6000604051808303816000865af19150503d806000811462001db2576040519150601f19603f3d011682016040523d82523d6000602084013e62001db7565b606091505b509150508080602001905181019062001dd19190620022c7565b9150505b919050565b80821462001f46577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162001e689060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a160408051818152600a818301527f202045787065637465640000000000000000000000000000000000000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a160408051818152600a818301527f2020202041637475616c0000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a162001f4662001f4a565b5050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200209f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200201c92916020016200227b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200205691620022b9565b6000604051808303816000865af19150503d806000811462002095576040519150601f19603f3d011682016040523d82523d6000602084013e6200209a565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61138a80620022ec83390190565b614174806200367683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168083038211156200213e576200213e620020e9565b01949350505050565b80516fffffffffffffffffffffffffffffffff8116811462001dd557600080fd5b805167ffffffffffffffff8116811462001dd557600080fd5b6000806000606084860312156200219757600080fd5b620021a28462002147565b9250620021b26020850162002168565b9150620021c26040850162002168565b90509250925092565b600060208284031215620021de57600080fd5b620021e98262002147565b9392505050565b6000602082840312156200220357600080fd5b5051919050565b600067ffffffffffffffff80831681851681830481118215151615620022345762002234620020e9565b02949350505050565b6000815160005b8181101562002260576020818501810151868301520162002244565b8181111562002270576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620022b160048301846200223d565b949350505050565b6000620021e982846200223d565b600060208284031215620022da57600080fd5b81518015158114620021e957600080fdfe60806040523480156200001157600080fd5b506200001c62000022565b62000206565b600054610100900460ff1615808015620000435750600054600160ff909116105b8062000073575062000060306200015460201b620006ab1760201c565b15801562000073575060005460ff166001145b620000dc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000100576000805461ff0019166101001790555b6200010a62000163565b801562000151576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff16620001d05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d3565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b61117480620002166000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063867ead1311610076578063ca3e99ba1161005b578063ca3e99ba14610151578063cd7c978914610159578063cff0ab961461016157600080fd5b8063867ead1314610135578063b4b64fbb1461013e57600080fd5b806364b79208116100a757806364b79208146101195780636bb0291e146101235780638129fc1c1461012b57600080fd5b806313620abd146100c35780635c1f2827146100f4575b600080fd5b6100ce633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010b6fffffffffffffffffffffffffffffffff81565b6040519081526020016100eb565b61010b627a120081565b61010b600481565b6101336101f5565b005b61010b61271081565b61013361014c366004610e0c565b61038c565b61010b61069a565b61010b600881565b6001546101bc906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016100eb565b600054610100900460ff16158080156102155750600054600160ff909116105b8061022f5750303b15801561022f575060005460ff166001145b6102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561031e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6103266106c7565b801561038957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b8060005a6001549091506000906103c9907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643610e65565b905080156104fd5760006103e16004627a1200610eab565b60015461040c9190700100000000000000000000000000000000900467ffffffffffffffff16610f13565b9050600060086104206004627a1200610eab565b6001546104409085906fffffffffffffffffffffffffffffffff16610f87565b61044a9190610eab565b6104549190610eab565b6001549091506000906104979061047e9084906fffffffffffffffffffffffffffffffff16611043565b6127106fffffffffffffffffffffffffffffffff6107aa565b905060018411156104be576104bb61047e8260086104b6600189610e65565b6107c7565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610530908490700100000000000000000000000000000000900467ffffffffffffffff166110b7565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561060c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016102b7565b600154600090610638906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166110e3565b6fffffffffffffffffffffffffffffffff169050600061065c48633b9aca0061081c565b610666908361111b565b905060005a6106759086610e65565b9050808211156106915761069161068c8284610e65565b610835565b50505050505050565b6106a86004627a1200610eab565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600054610100900460ff1661075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102b7565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60006107bf6107b98585610863565b83610873565b949350505050565b6000670de0b6b3a76400006108086107df8583610eab565b6107f190670de0b6b3a7640000610f13565b61080385670de0b6b3a7640000610f87565b610882565b6108129086610f87565b6107bf9190610eab565b60008183101561082c578161082e565b825b9392505050565b6000805a90505b825a6108489083610e65565b101561085e576108578261112f565b915061083c565b505050565b60008183121561082c578161082e565b600081831261082c578161082e565b600061082e670de0b6b3a76400008361089a866108b3565b6108a49190610f87565b6108ae9190610eab565b610af7565b600080821361091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016102b7565b6000606061092b84610d36565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213610b2857506000919050565b680755bf798b4a1bf1e58212610b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016102b7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000808211610da1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016102b7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b600060208284031215610e1e57600080fd5b813567ffffffffffffffff8116811461082e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015610e7757610e77610e36565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610eba57610eba610e7c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615610f0e57610f0e610e36565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615610f4d57610f4d610e36565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615610f8157610f81610e36565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610fc857610fc8610e36565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561100357611003610e36565b6000871292508782058712848416161561101f5761101f610e36565b8785058712818416161561103557611035610e36565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561107d5761107d610e36565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156110b1576110b1610e36565b50500190565b600067ffffffffffffffff8083168185168083038211156110da576110da610e36565b01949350505050565b60006fffffffffffffffffffffffffffffffff8083168185168183048111821515161561111257611112610e36565b02949350505050565b60008261112a5761112a610e7c565b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361116057611160610e36565b506001019056fea164736f6c634300080f000a60806040526000805460ff1916600117905534801561001d57600080fd5b506141478061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100c85760003560e01c80637e577a1b11610081578063dcf5edef1161005b578063dcf5edef146101c0578063fa7626d4146101d3578063fc677392146101e057600080fd5b80637e577a1b14610172578063ba414fa614610195578063c21e8865146101ad57600080fd5b806335337aab116100b257806335337aab14610117578063498a3c021461012a578063526dc9551461014a57600080fd5b8062ec31a6146100cd5780631aac97c1146100f3575b600080fd5b6100e06100db3660046136cb565b6101f3565b6040519081526020015b60405180910390f35b610106610101366004613745565b6108dc565b6040516100ea9594939291906138e2565b6100e0610125366004613925565b610fed565b61013d6101383660046136cb565b6117e4565b6040516100ea91906139b1565b61015d6101583660046139c4565b611ec1565b604080519283526020830191909152016100ea565b6101856101803660046139dd565b612179565b6040516100ea9493929190613a26565b61019d6123f8565b60405190151581526020016100ea565b6100e06101bb3660046136cb565b612558565b6100e06101ce366004613a65565b61265f565b60005461019d9060ff1681565b61013d6101ee366004613a97565b6128e6565b6040805160098082526101408201909252600091829190816020015b606081526020019060019003908161020f5790505090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061026f5761026f613ad3565b602002602001018190525060405180606001604052806024815260200161411760249139816001815181106102a6576102a6613ad3565b60200260200101819052506040518060400160405280601681526020017f6861736843726f7373446f6d61696e4d65737361676500000000000000000000815250816002815181106102fa576102fa613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101899052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561036e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103b49190810190613b32565b816003815181106103c7576103c7613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610450573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104969190810190613b32565b816004815181106104a9576104a9613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105789190810190613b32565b8160058151811061058b5761058b613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156105ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106459190810190613b32565b8160068151811061065857610658613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156106cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107129190810190613b32565b8160078151811061072557610725613ad3565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d906107809086906004016139b1565b600060405180830381865afa15801561079d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107e39190810190613b32565b816008815181106107f6576107f6613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790610854908590600401613b7b565b6000604051808303816000875af1158015610873573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108b99190810190613c1b565b9050808060200190518101906108cf9190613c50565b9998505050505050505050565b6000808080606081600960405190808252806020026020018201604052801561091957816020015b60608152602001906001900390816109045790505b5090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061096557610965613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061099c5761099c613ad3565b60200260200101819052506040518060600160405280602381526020016140f460239139816002815181106109d3576109d3613ad3565b602090810291909101015286516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610a4a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a909190810190613b32565b81600381518110610aa357610aa3613ad3565b6020908102919091018101919091528701516040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610b34573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b7a9190810190613b32565b81600481518110610b8d57610b8d613ad3565b602090810291909101015260408781015190517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610c1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c629190810190613b32565b81600581518110610c7557610c75613ad3565b602090810291909101015260608701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610d359190810190613b32565b81600681518110610d4857610d48613ad3565b602090810291909101015260808701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610dc2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610e089190810190613b32565b81600781518110610e1b57610e1b613ad3565b602090810291909101015260a08701516040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d916371aad10d91610e7a91906004016139b1565b600060405180830381865afa158015610e97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610edd9190810190613b32565b81600881518110610ef057610ef0613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790610f4e908590600401613b7b565b6000604051808303816000875af1158015610f6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610fb39190810190613c1b565b9050600080600080600085806020019051810190610fd19190613d08565b939f50919d509b50995097505050505050505091939590929450565b60408051600b8082526101808201909252600091829190816020015b60608152602001906001900390816110095790505090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061106957611069613ad3565b602002602001018190525060405180606001604052806024815260200161411760249139816001815181106110a0576110a0613ad3565b60200260200101819052506040518060400160405280601681526020017f686173684465706f7369745472616e73616374696f6e00000000000000000000815250816002815181106110f4576110f4613ad3565b60200260200101819052506040518060800160405280604281526020016140b2604291398160038151811061112b5761112b613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561119f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e59190810190613b32565b816004815181106111f8576111f8613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112c79190810190613b32565b816005815181106112da576112da613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113a99190810190613b32565b816006815181106113bc576113bc613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101889052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611430573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526114769190810190613b32565b8160078151811061148957611489613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156114fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115439190810190613b32565b8160088151811061155657611556613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156115d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116199190810190613b32565b8160098151811061162c5761162c613ad3565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d906116879087906004016139b1565b600060405180830381865afa1580156116a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116ea9190810190613b32565b81600a815181106116fd576116fd613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063891604679061175b908590600401613b7b565b6000604051808303816000875af115801561177a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117c09190810190613c1b565b9050808060200190518101906117d69190613c50565b9a9950505050505050505050565b604080516009808252610140820190925260609160009190816020015b60608152602001906001900390816118015790505090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061186157611861613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061189857611898613ad3565b60200260200101819052506040518060400160405280601881526020017f656e636f646543726f7373446f6d61696e4d6573736167650000000000000000815250816002815181106118ec576118ec613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101899052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611960573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119a69190810190613b32565b816003815181106119b9576119b9613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611a42573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611a889190810190613b32565b81600481518110611a9b57611a9b613ad3565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611b24573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b6a9190810190613b32565b81600581518110611b7d57611b7d613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611bf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611c379190810190613b32565b81600681518110611c4a57611c4a613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611cbe573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611d049190810190613b32565b81600781518110611d1757611d17613ad3565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d90611d729086906004016139b1565b600060405180830381865afa158015611d8f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611dd59190810190613b32565b81600881518110611de857611de8613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790611e46908590600401613b7b565b6000604051808303816000875af1158015611e65573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611eab9190810190613c1b565b9050808060200190518101906108cf9190613c1b565b60408051600480825260a0820190925260009182918291816020015b6060815260200190600190039081611edd5790505090506040518060400160405280600481526020017f6e6f64650000000000000000000000000000000000000000000000000000000081525081600081518110611f3d57611f3d613ad3565b60200260200101819052506040518060600160405280602481526020016141176024913981600181518110611f7457611f74613ad3565b60200260200101819052506040518060400160405280601481526020017f6465636f646556657273696f6e65644e6f6e636500000000000000000000000081525081600281518110611fc857611fc8613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561203c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526120829190810190613b32565b8160038151811061209557612095613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906120f3908590600401613b7b565b6000604051808303816000875af1158015612112573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526121589190810190613c1b565b90508080602001905181019061216e9190613d6c565b935093505050915091565b60408051600580825260c08201909252600091606091829182918591816020015b606081526020019060019003908161219a5790505090506040518060400160405280601a81526020017f2e2f746573742d636173652d67656e657261746f722f66757a7a000000000000815250816000815181106121fa576121fa613ad3565b60200260200101819052506040518060400160405280600281526020017f2d6d0000000000000000000000000000000000000000000000000000000000008152508160018151811061224e5761224e613ad3565b60200260200101819052506040518060400160405280600481526020017f7472696500000000000000000000000000000000000000000000000000000000815250816002815181106122a2576122a2613ad3565b60200260200101819052506040518060400160405280600281526020017f2d76000000000000000000000000000000000000000000000000000000000000815250816003815181106122f6576122f6613ad3565b6020026020010181905250858160048151811061231557612315613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790612370908490600401613b7b565b6000604051808303816000875af115801561238f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526123d59190810190613c1b565b8060200190518101906123e89190613d90565b9450945094509450509193509193565b60008054610100900460ff16156124185750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156125535760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916124bd917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001613e22565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526124f591613e6a565b6000604051808303816000865af19150503d8060008114612532576040519150601f19603f3d011682016040523d82523d6000602084013e612537565b606091505b509150508080602001905181019061254f9190613e97565b9150505b919050565b6040805160098082526101408201909252600091829190816020015b60608152602001906001900390816125745790505090506040518060400160405280600481526020017f6e6f646500000000000000000000000000000000000000000000000000000000815250816000815181106125d4576125d4613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061260b5761260b613ad3565b60200260200101819052506040518060400160405280600e81526020017f686173685769746864726177616c000000000000000000000000000000000000815250816002815181106102fa576102fa613ad3565b6040805160078082526101008201909252600091829190816020015b606081526020019060019003908161267b5790505090506040518060400160405280600481526020017f6e6f646500000000000000000000000000000000000000000000000000000000815250816000815181106126db576126db613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061271257612712613ad3565b60200260200101819052506040518060400160405280601381526020017f686173684f7574707574526f6f7450726f6f66000000000000000000000000008152508160028151811061276657612766613ad3565b602090810291909101015261277a866132a3565b8160038151811061278d5761278d613ad3565b60209081029190910101526127a1856132a3565b816004815181106127b4576127b4613ad3565b60209081029190910101526127c8846132a3565b816005815181106127db576127db613ad3565b60209081029190910101526127ef836132a3565b8160068151811061280257612802613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790612860908590600401613b7b565b6000604051808303816000875af115801561287f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526128c59190810190613c1b565b9050808060200190518101906128db9190613c50565b979650505050505050565b60408051600c8082526101a0820190925260609160009190816020015b60608152602001906001900390816129035790505090506040518060400160405280600481526020017f6e6f6465000000000000000000000000000000000000000000000000000000008152508160008151811061296357612963613ad3565b6020026020010181905250604051806060016040528060248152602001614117602491398160018151811061299a5761299a613ad3565b60200260200101819052506040518060400160405280601881526020017f656e636f64654465706f7369745472616e73616374696f6e0000000000000000815250816002815181106129ee576129ee613ad3565b602090810291909101810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90612a2590860186613eb4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381865afa158015612a8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612ad49190810190613b32565b81600381518110612ae757612ae7613ad3565b60200260200101819052507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166356ca623e846020016020810190612b449190613eb4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381865afa158015612bad573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612bf39190810190613b32565b81600481518110612c0657612c06613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260608401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015612c7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612cc39190810190613b32565b81600581518110612cd657612cd6613ad3565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260808401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015612d4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612d939190810190613b32565b81600681518110612da657612da6613ad3565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d636900a3ae612ddb60c0860160a08701613ecf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381865afa158015612e38573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e7e9190810190613b32565b81600781518110612e9157612e91613ad3565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d6371dce7da612ec66060860160408701613eea565b6040518263ffffffff1660e01b8152600401612ee6911515815260200190565b600060405180830381865afa158015612f03573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612f499190810190613b32565b81600881518110612f5c57612f5c613ad3565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d6371aad10d612f8e60c0860186613f07565b6040518363ffffffff1660e01b8152600401612fab929190613f73565b600060405180830381865afa158015612fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261300e9190810190613b32565b8160098151811061302157613021613ad3565b60209081029190910101526040517fb11a19e800000000000000000000000000000000000000000000000000000000815260e08401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063b11a19e890602401600060405180830381865afa158015613098573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526130de9190810190613b32565b81600a815181106130f1576130f1613ad3565b60209081029190910101526040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526101008401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015613169573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526131af9190810190613b32565b81600b815181106131c2576131c2613ad3565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790613220908590600401613b7b565b6000604051808303816000875af115801561323f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526132859190810190613c1b565b90508080602001905181019061329b9190613c1b565b949350505050565b6060816000036132e657505060408051808201909152600481527f3078303000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561330957806132fa81613fef565b915050600882901c91506132ea565b61329b84826060600061331d836002614027565b613328906002614064565b67ffffffffffffffff81111561334057613340613580565b6040519080825280601f01601f19166020018201604052801561336a576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106133a1576133a1613ad3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061340457613404613ad3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613440846002614027565b61344b906001614064565b90505b60018111156134e8577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061348c5761348c613ad3565b1a60f81b8282815181106134a2576134a2613ad3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936134e18161407c565b905061344e565b508315613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640160405180910390fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461255357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156135d2576135d2613580565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561361f5761361f613580565b604052919050565b600067ffffffffffffffff82111561364157613641613580565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600061368061367b84613627565b6135d8565b905082815283838301111561369457600080fd5b828260208301376000602084830101529392505050565b600082601f8301126136bc57600080fd5b6135558383356020850161366d565b60008060008060008060c087890312156136e457600080fd5b863595506136f46020880161355c565b94506137026040880161355c565b9350606087013592506080870135915060a087013567ffffffffffffffff81111561372c57600080fd5b61373889828a016136ab565b9150509295509295509295565b60006020828403121561375757600080fd5b813567ffffffffffffffff8082111561376f57600080fd5b9083019060c0828603121561378357600080fd5b61378b6135af565b8235815261379b6020840161355c565b60208201526137ac6040840161355c565b6040820152606083013560608201526080830135608082015260a0830135828111156137d757600080fd5b6137e3878286016136ab565b60a08301525095945050505050565b60005b8381101561380d5781810151838201526020016137f5565b8381111561381c576000848401525b50505050565b6000815180845261383a8160208601602086016137f2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156138d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030189526138c3838351613822565b98840198925090830190600101613889565b5090979650505050505050565b85815284602082015283604082015282606082015260a0608082015260006128db60a083018461386c565b803567ffffffffffffffff8116811461255357600080fd5b600080600080600080600060e0888a03121561394057600080fd5b6139498861355c565b96506139576020890161355c565b955060408801359450606088013593506139736080890161390d565b925060a088013567ffffffffffffffff81111561398f57600080fd5b61399b8a828b016136ab565b92505060c0880135905092959891949750929550565b6020815260006135556020830184613822565b6000602082840312156139d657600080fd5b5035919050565b6000602082840312156139ef57600080fd5b813567ffffffffffffffff811115613a0657600080fd5b8201601f81018413613a1757600080fd5b61329b8482356020840161366d565b848152608060208201526000613a3f6080830186613822565b8281036040840152613a518186613822565b905082810360608401526128db818561386c565b60008060008060808587031215613a7b57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215613aa957600080fd5b813567ffffffffffffffff811115613ac057600080fd5b8201610120818503121561355557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613b1061367b84613627565b9050828152838383011115613b2457600080fd5b6135558360208301846137f2565b600060208284031215613b4457600080fd5b815167ffffffffffffffff811115613b5b57600080fd5b8201601f81018413613b6c57600080fd5b61329b84825160208401613b02565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613bee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613bdc858351613822565b94509285019290850190600101613ba2565b5092979650505050505050565b600082601f830112613c0c57600080fd5b61355583835160208501613b02565b600060208284031215613c2d57600080fd5b815167ffffffffffffffff811115613c4457600080fd5b61329b84828501613bfb565b600060208284031215613c6257600080fd5b5051919050565b600082601f830112613c7a57600080fd5b8151602067ffffffffffffffff80831115613c9757613c97613580565b8260051b613ca68382016135d8565b9384528581018301938381019088861115613cc057600080fd5b84880192505b85831015613cfc57825184811115613cde5760008081fd5b613cec8a87838c0101613bfb565b8352509184019190840190613cc6565b98975050505050505050565b600080600080600060a08688031215613d2057600080fd5b85519450602086015193506040860151925060608601519150608086015167ffffffffffffffff811115613d5357600080fd5b613d5f88828901613c69565b9150509295509295909350565b60008060408385031215613d7f57600080fd5b505080516020909101519092909150565b60008060008060808587031215613da657600080fd5b84519350602085015167ffffffffffffffff80821115613dc557600080fd5b613dd188838901613bfb565b94506040870151915080821115613de757600080fd5b613df388838901613bfb565b93506060870151915080821115613e0957600080fd5b50613e1687828801613c69565b91505092959194509250565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251613e5c8160048501602087016137f2565b919091016004019392505050565b60008251613e7c8184602087016137f2565b9190910192915050565b8015158114613e9457600080fd5b50565b600060208284031215613ea957600080fd5b815161355581613e86565b600060208284031215613ec657600080fd5b6135558261355c565b600060208284031215613ee157600080fd5b6135558261390d565b600060208284031215613efc57600080fd5b813561355581613e86565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f3c57600080fd5b83018035915067ffffffffffffffff821115613f5757600080fd5b602001915036819003821315613f6c57600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361402057614020613fc0565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405f5761405f613fc0565b500290565b6000821982111561407757614077613fc0565b500190565b60008161408b5761408b613fc0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fe30783030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303067657450726f76655769746864726177616c5472616e73616374696f6e496e70757473646973742f736372697074732f646966666572656e7469616c2d74657374696e672e6a73a164736f6c634300080f000aa164736f6c634300080f000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
